|
4 weeks ago | |
---|---|---|
.. | ||
README.md | 4 weeks ago | |
assignment.md | 4 weeks ago | |
single-board-computer-connect-hub.md | 4 weeks ago | |
wio-terminal-connect-hub.md | 4 weeks ago |
README.md
Перенесите ваше растение в облако
Скетчноут от Nitya Narasimhan. Нажмите на изображение, чтобы увидеть его в большем размере.
Этот урок был проведен в рамках IoT для начинающих: Проект 2 - Цифровое сельское хозяйство от Microsoft Reactor.
Тест перед лекцией
Введение
В прошлом уроке вы узнали, как подключить ваше растение к MQTT-брокеру и управлять реле с помощью серверного кода, работающего локально. Это является основой для создания автоматизированной системы полива, подключенной к интернету, которая может использоваться как для отдельных растений дома, так и для коммерческих ферм.
IoT-устройство взаимодействовало с публичным MQTT-брокером, чтобы продемонстрировать основные принципы, но это не самый надежный или безопасный способ. В этом уроке вы узнаете об облаке и IoT-возможностях, предоставляемых публичными облачными сервисами. Вы также научитесь переносить ваше растение с публичного MQTT-брокера на один из этих облачных сервисов.
В этом уроке мы рассмотрим:
- Что такое облако?
- Создание облачной подписки
- Облачные IoT-сервисы
- Создание IoT-сервиса в облаке
- Взаимодействие с IoT Hub
- Подключение вашего устройства к IoT-сервису
Что такое облако?
До появления облака, когда компании хотели предоставлять услуги своим сотрудникам (например, базы данных или хранение файлов) или публике (например, веб-сайты), они создавали и управляли собственными дата-центрами. Это мог быть как небольшой кабинет с несколькими компьютерами, так и целое здание с множеством серверов. Компания управляла всем, включая:
- Покупку компьютеров
- Обслуживание оборудования
- Электропитание и охлаждение
- Сетевую инфраструктуру
- Безопасность, включая защиту здания и программного обеспечения
- Установку и обновление программного обеспечения
Это могло быть очень дорого, требовать широкий спектр квалифицированных сотрудников и быть медленным в случае необходимости изменений. Например, если онлайн-магазин планировал высокий сезон продаж, ему нужно было заранее закупить оборудование, настроить его, установить программное обеспечение и подготовить процесс продаж. После окончания сезона оборудование оставалось без дела до следующего всплеска продаж.
✅ Как вы думаете, позволило бы это компаниям быстро адаптироваться? Если онлайн-магазин одежды внезапно стал популярным благодаря знаменитости, одетой в их продукцию, смогли бы они быстро увеличить вычислительные мощности для обработки внезапного наплыва заказов?
Компьютер кого-то другого
Облако часто шутливо называют "компьютером кого-то другого". Изначальная идея была проста — вместо покупки компьютеров вы арендуете компьютеры у кого-то другого. Облачный провайдер управляет огромными дата-центрами, беря на себя ответственность за покупку и установку оборудования, управление электропитанием и охлаждением, сетевую инфраструктуру, безопасность здания, обновления оборудования и программного обеспечения. Как клиент, вы арендуете нужное количество компьютеров, увеличивая аренду при росте спроса и уменьшая при его падении. Эти облачные дата-центры расположены по всему миру.
Эти дата-центры могут занимать площадь в несколько квадратных километров. На изображениях выше показан облачный дата-центр Microsoft несколько лет назад, а также планируемое расширение. Очищенная для расширения территория превышает 5 квадратных километров.
💁 Эти дата-центры требуют настолько большого количества энергии, что некоторые из них имеют собственные электростанции. Благодаря своему размеру и инвестициям облачных провайдеров, они обычно очень экологичны. Они более эффективны, чем множество небольших дата-центров, работают преимущественно на возобновляемой энергии, а облачные провайдеры активно сокращают отходы, уменьшают использование воды и восстанавливают леса, вырубленные для строительства дата-центров. Подробнее о том, как один из облачных провайдеров работает над устойчивым развитием, можно прочитать на сайте устойчивого развития Azure.
✅ Проведите исследование: Узнайте больше о крупных облачных провайдерах, таких как Azure от Microsoft или GCP от Google. Сколько дата-центров у них есть и где они расположены?
Использование облака позволяет компаниям снизить расходы и сосредоточиться на своей основной деятельности, оставляя управление облачными технологиями провайдеру. Компаниям больше не нужно арендовать или покупать пространство для дата-центров, оплачивать услуги различных поставщиков для подключения и электропитания или нанимать экспертов. Вместо этого они могут оплачивать один ежемесячный счет облачному провайдеру, который берет на себя все заботы.
Облачный провайдер, в свою очередь, использует экономию на масштабе, чтобы снизить затраты, закупая оборудование оптом по более низким ценам, инвестируя в инструменты для автоматизации обслуживания и даже разрабатывая собственное оборудование для улучшения облачных услуг.
Microsoft Azure
Azure — это облако для разработчиков от Microsoft, и именно его вы будете использовать в этих уроках. Видео ниже дает краткий обзор Azure:
Создание облачной подписки
Чтобы использовать облачные сервисы, вам нужно зарегистрироваться для получения подписки у облачного провайдера. В этом уроке вы будете регистрироваться для подписки Microsoft Azure. Если у вас уже есть подписка Azure, вы можете пропустить этот шаг. Описанные здесь детали подписки актуальны на момент написания, но могут измениться.
💁 Если вы проходите эти уроки через вашу школу, возможно, у вас уже есть доступная подписка Azure. Уточните у вашего преподавателя.
Существует два типа бесплатных подписок Azure, которые вы можете оформить:
-
Azure для студентов — подписка, предназначенная для студентов старше 18 лет. Для регистрации не требуется кредитная карта, а для подтверждения статуса студента используется школьный адрес электронной почты. При регистрации вы получаете $100 для использования облачных ресурсов, а также бесплатные услуги, включая бесплатную версию IoT-сервиса. Подписка действует 12 месяцев и может быть продлена каждый год, пока вы остаетесь студентом.
-
Бесплатная подписка Azure — подписка для всех, кто не является студентом. Для регистрации потребуется кредитная карта, но она не будет списывать средства, а используется только для подтверждения, что вы реальный человек, а не бот. Вы получаете $200 кредита для использования в течение первых 30 дней на любые услуги, а также бесплатные уровни Azure-сервисов. После того как кредит будет исчерпан, ваша карта не будет списывать средства, если вы не перейдете на подписку с оплатой по мере использования.
💁 Microsoft также предлагает подписку Azure для начинающих студентов для учащихся младше 18 лет, но на момент написания она не поддерживает IoT-сервисы.
Задача — зарегистрируйтесь для бесплатной облачной подписки
Если вы студент старше 18 лет, вы можете зарегистрироваться для подписки Azure для студентов. Для подтверждения потребуется школьный адрес электронной почты. Вы можете сделать это двумя способами:
-
Зарегистрируйтесь для получения пакета разработчика GitHub для студентов на education.github.com/pack. Это даст вам доступ к множеству инструментов и предложений, включая GitHub и Microsoft Azure. После регистрации вы сможете активировать предложение Azure для студентов.
-
Зарегистрируйтесь напрямую для получения аккаунта Azure для студентов на azure.microsoft.com/free/students.
⚠️ Если ваш школьный адрес электронной почты не распознается, создайте обращение в этом репозитории, и мы постараемся добавить его в список разрешенных для Azure для студентов.
Если вы не являетесь студентом или у вас нет действующего школьного адреса электронной почты, вы можете зарегистрироваться для бесплатной подписки Azure.
- Зарегистрируйтесь для получения бесплатной подписки Azure на azure.microsoft.com/free
Облачные IoT-сервисы
Публичный тестовый MQTT-брокер, который вы использовали, — отличный инструмент для обучения, но имеет ряд недостатков для использования в коммерческих целях:
- Надежность — это бесплатный сервис без гарантий, который может быть отключен в любой момент
- Безопасность — он публичный, поэтому любой может прослушивать вашу телеметрию или отправлять команды для управления вашим оборудованием
- Производительность — он предназначен только для небольшого количества тестовых сообщений и не справится с большим объемом данных
- Обнаружение — нет способа узнать, какие устройства подключены
IoT-сервисы в облаке решают эти проблемы. Они поддерживаются крупными облачными провайдерами, которые вкладывают значительные средства в надежность и готовы оперативно устранять возникающие проблемы. Они обеспечивают безопасность, предотвращая доступ хакеров к вашим данным или отправку ложных команд. Они также обладают высокой производительностью, способной обрабатывать миллионы сообщений ежедневно, используя возможности облака для масштабирования.
💁 Хотя за эти преимущества приходится платить ежемесячную плату, большинство облачных провайдеров предлагают бесплатную версию своих IoT-сервисов с ограничением на количество сообщений в день или подключенных устройств. Эта бесплатная версия обычно более чем достаточна для разработчиков, чтобы изучить сервис. В этом уроке вы будете использовать бесплатную версию.
IoT-устройства подключаются к облачному сервису либо с помощью SDK устройства (библиотеки, предоставляющей код для работы с функциями сервиса), либо напрямую через протоколы связи, такие как MQTT или HTTP. SDK устройства обычно является самым простым вариантом, так как он автоматически обрабатывает все, включая темы для публикации или подписки и вопросы безопасности.
Ваше устройство затем взаимодействует с другими компонентами вашего приложения через этот сервис — аналогично тому, как вы отправляли телеметрию и получали команды через MQTT. Обычно это происходит с использованием SDK сервиса или аналогичной библиотеки. Сообщения поступают от вашего устройства в сервис, где другие компоненты вашего приложения могут их читать, а затем отправлять сообщения обратно на устройство.
Эти сервисы реализуют безопасность, зная обо всех устройствах, которые могут подключаться и отправлять данные, либо путем предварительной регистрации устройств в сервисе, либо предоставляя устройствам секретные ключи или сертификаты, которые они могут использовать для регистрации при первом подключении. Неизвестные устройства не могут подключиться — если они пытаются, сервис отклоняет соединение и игнорирует отправленные ими сообщения.
✅ Проведите исследование: Каковы недостатки открытого IoT-сервиса, где любое устройство или код могут подключиться? Можете ли вы найти конкретные примеры, когда хакеры воспользовались этим?
Другие компоненты вашего приложения могут подключаться к IoT-сервису, узнавать о всех подключенных или зарегистрированных устройствах и взаимодействовать с ними напрямую, как массово, так и индивидуально. 💁 Сервисы IoT также реализуют дополнительные возможности, а облачные провайдеры предлагают дополнительные сервисы и приложения, которые можно подключить к основному сервису. Например, если вы хотите сохранять все телеметрические сообщения, отправляемые всеми устройствами, в базе данных, обычно достаточно всего нескольких кликов в инструменте настройки облачного провайдера, чтобы подключить сервис к базе данных и начать потоковую передачу данных.
Создание IoT-сервиса в облаке
Теперь, когда у вас есть подписка Azure, вы можете зарегистрироваться для использования IoT-сервиса. IoT-сервис от Microsoft называется Azure IoT Hub.
Видео ниже дает краткий обзор Azure IoT Hub:
🎥 Нажмите на изображение выше, чтобы посмотреть видео
✅ Найдите время, чтобы провести небольшое исследование и прочитать обзор IoT Hub в документации Microsoft IoT Hub.
Облачные сервисы, доступные в Azure, можно настраивать через веб-портал или с помощью интерфейса командной строки (CLI). Для выполнения этой задачи вы будете использовать CLI.
Задача - установка Azure CLI
Чтобы использовать Azure CLI, сначала его нужно установить на ваш ПК или Mac.
-
Следуйте инструкциям в документации Azure CLI для установки CLI.
-
Azure CLI поддерживает ряд расширений, которые добавляют возможности для управления различными сервисами Azure. Установите расширение IoT, выполнив следующую команду в командной строке или терминале:
az extension add --name azure-iot
-
В командной строке или терминале выполните следующую команду, чтобы войти в свою подписку Azure через Azure CLI.
az login
В вашем браузере откроется веб-страница. Войдите, используя учетную запись, которую вы использовали для регистрации подписки Azure. После входа вы можете закрыть вкладку браузера.
-
Если у вас есть несколько подписок Azure, например, предоставленная учебным заведением и ваша собственная подписка Azure for Students, вам нужно будет выбрать ту, которую вы хотите использовать. Выполните следующую команду, чтобы увидеть список всех доступных подписок:
az account list --output table
В выводе вы увидите название каждой подписки вместе с ее
SubscriptionId
.➜ ~ az account list --output table Name CloudName SubscriptionId State IsDefault ---------------------- ----------- ------------------------------------ ------- ----------- School-subscription AzureCloud cb30cde9-814a-42f0-a111-754cb788e4e1 Enabled True Azure for Students AzureCloud fa51c31b-162c-4599-add6-781def2e1fbf Enabled False
Чтобы выбрать подписку, которую вы хотите использовать, выполните следующую команду:
az account set --subscription <SubscriptionId>
Замените
<SubscriptionId>
на идентификатор подписки, которую вы хотите использовать. После выполнения этой команды снова выполните команду для отображения ваших учетных записей. Вы увидите, что в столбцеIsDefault
будет указаноTrue
для выбранной подписки.
Задача - создание группы ресурсов
Сервисы Azure, такие как экземпляры IoT Hub, виртуальные машины, базы данных или AI-сервисы, называются ресурсами. Каждый ресурс должен находиться внутри группы ресурсов, которая представляет собой логическую группу из одного или нескольких ресурсов.
💁 Использование групп ресурсов позволяет управлять несколькими сервисами одновременно. Например, после завершения всех уроков этого проекта вы можете удалить группу ресурсов, и все ресурсы в ней будут удалены автоматически.
-
В Azure есть множество дата-центров по всему миру, разделенных на регионы. При создании ресурса или группы ресурсов Azure необходимо указать, где вы хотите их создать. Выполните следующую команду, чтобы получить список доступных локаций:
az account list-locations --output table
Вы увидите длинный список локаций.
💁 На момент написания доступно 65 локаций для развертывания.
➜ ~ az account list-locations --output table DisplayName Name RegionalDisplayName ------------------------ ------------------- ------------------------------------- East US eastus (US) East US East US 2 eastus2 (US) East US 2 South Central US southcentralus (US) South Central US ...
Запишите значение из столбца
Name
для региона, ближайшего к вам. Вы можете найти регионы на карте на странице Azure geographies. -
Выполните следующую команду, чтобы создать группу ресурсов с именем
soil-moisture-sensor
. Имена групп ресурсов должны быть уникальными в вашей подписке.az group create --name soil-moisture-sensor \ --location <location>
Замените
<location>
на выбранное вами местоположение.
Задача - создание IoT Hub
Теперь вы можете создать ресурс IoT Hub в своей группе ресурсов.
-
Используйте следующую команду для создания ресурса IoT Hub:
az iot hub create --resource-group soil-moisture-sensor \ --sku F1 \ --partition-count 2 \ --name <hub_name>
Замените
<hub_name>
на имя для вашего хаба. Это имя должно быть уникальным в глобальном масштабе — то есть ни один другой IoT Hub, созданный кем-либо, не может иметь такое же имя. Это имя используется в URL-адресе, указывающем на хаб, поэтому оно должно быть уникальным. Используйте что-то вродеsoil-moisture-sensor-
и добавьте уникальный идентификатор, например случайные слова или ваше имя.Опция
--sku F1
указывает на использование бесплатного уровня. Бесплатный уровень поддерживает 8 000 сообщений в день и включает большинство функций платных уровней.🎓 Различные уровни цен на сервисы Azure называются уровнями (tiers). Каждый уровень имеет свою стоимость и предоставляет разные функции или объемы данных.
💁 Если вы хотите узнать больше о ценах, вы можете ознакомиться с руководством по ценам на Azure IoT Hub.
Опция
--partition-count 2
определяет, сколько потоков данных поддерживает IoT Hub. Большее количество разделов уменьшает блокировку данных, когда несколько устройств читают и записывают данные в IoT Hub. Разделы выходят за рамки этих уроков, но это значение необходимо установить для создания бесплатного уровня IoT Hub.💁 Вы можете иметь только один IoT Hub бесплатного уровня на подписку.
IoT Hub будет создан. Это может занять минуту или две.
Взаимодействие с IoT Hub
В предыдущем уроке вы использовали MQTT и отправляли сообщения на разные темы, каждая из которых имела свое назначение. Вместо отправки сообщений по разным темам IoT Hub предоставляет несколько определенных способов взаимодействия устройства с хабом или хаба с устройством.
💁 В основе взаимодействие между IoT Hub и вашим устройством может использовать MQTT, HTTPS или AMQP.
-
Сообщения от устройства в облако (D2C) — это сообщения, отправляемые устройством в IoT Hub, например телеметрия. Эти сообщения затем могут быть считаны вашим приложением.
🎓 В основе IoT Hub использует сервис Azure под названием Event Hubs. Когда вы пишете код для чтения сообщений, отправленных в хаб, их часто называют событиями.
-
Сообщения из облака на устройство (C2D) — это сообщения, отправляемые приложением через IoT Hub на IoT-устройство.
-
Запросы прямых методов — это сообщения, отправляемые приложением через IoT Hub на IoT-устройство с запросом выполнить определенное действие, например управление исполнительным механизмом. Эти сообщения требуют ответа, чтобы приложение могло определить, было ли действие успешно выполнено.
-
Двойники устройств (Device twins) — это JSON-документы, синхронизируемые между устройством и IoT Hub, которые используются для хранения настроек или других свойств, либо сообщаемых устройством, либо устанавливаемых на устройстве (называемых желаемыми) через IoT Hub.
IoT Hub может хранить сообщения и запросы прямых методов в течение настраиваемого периода времени (по умолчанию один день), поэтому, если устройство или приложение теряет соединение, оно все равно сможет получить сообщения, отправленные во время его отсутствия, после восстановления соединения. Двойники устройств хранятся в IoT Hub постоянно, поэтому устройство в любой момент может подключиться и получить актуальные данные.
✅ Проведите исследование: Прочитайте больше о типах сообщений в руководстве по взаимодействию устройства с облаком и руководстве по взаимодействию облака с устройством в документации IoT Hub.
Подключение устройства к IoT-сервису
После создания хаба ваше IoT-устройство может подключиться к нему. Только зарегистрированные устройства могут подключаться к сервису, поэтому вам нужно будет сначала зарегистрировать устройство. После регистрации вы получите строку подключения, которую устройство сможет использовать для подключения. Эта строка подключения уникальна для каждого устройства и содержит информацию о IoT Hub, устройстве и секретный ключ, позволяющий устройству подключаться.
🎓 Строка подключения — это общий термин для текста, содержащего данные для подключения. Они используются при подключении к IoT Hub, базам данных и многим другим сервисам. Обычно они включают идентификатор сервиса, например URL, и данные безопасности, такие как секретный ключ. Эти строки передаются SDK для подключения к сервису.
⚠️ Строки подключения должны быть защищены! Безопасность будет рассмотрена более подробно в одном из следующих уроков.
Задача - регистрация IoT-устройства
IoT-устройство можно зарегистрировать в вашем IoT Hub с помощью Azure CLI.
-
Выполните следующую команду, чтобы зарегистрировать устройство:
az iot hub device-identity create --device-id soil-moisture-sensor \ --hub-name <hub_name>
Замените
<hub_name>
на имя, которое вы использовали для вашего IoT Hub.Это создаст устройство с идентификатором
soil-moisture-sensor
. -
Когда ваше IoT-устройство подключается к IoT Hub с помощью SDK, оно должно использовать строку подключения, содержащую URL хаба и секретный ключ. Выполните следующую команду, чтобы получить строку подключения:
az iot hub device-identity connection-string show --device-id soil-moisture-sensor \ --output table \ --hub-name <hub_name>
Замените
<hub_name>
на имя, которое вы использовали для вашего IoT Hub. -
Сохраните строку подключения, которая будет показана в выводе, так как она понадобится вам позже.
Задача - подключение IoT-устройства к облаку
Пройдите соответствующее руководство, чтобы подключить ваше IoT-устройство к облаку:
Задача - мониторинг событий
На данный момент вы не будете обновлять код сервера. Вместо этого вы можете использовать Azure CLI для мониторинга событий от вашего IoT-устройства.
-
Убедитесь, что ваше IoT-устройство работает и отправляет телеметрические данные о влажности почвы.
-
Выполните следующую команду в командной строке или терминале, чтобы мониторить сообщения, отправляемые в ваш IoT Hub:
az iot hub monitor-events --hub-name <hub_name>
Замените
<hub_name>
на имя, которое вы использовали для вашего IoT Hub.Вы увидите сообщения, появляющиеся в консоли, по мере их отправки вашим IoT-устройством.
Starting event monitor, use ctrl-c to stop... { "event": { "origin": "soil-moisture-sensor", "module": "", "interface": "", "component": "", "payload": "{\"soil_moisture\": 376}" } }, { "event": { "origin": "soil-moisture-sensor", "module": "", "interface": "", "component": "", "payload": "{\"soil_moisture\": 381}" } }
Содержимое
payload
будет соответствовать сообщению, отправленному вашим IoT-устройством.На момент написания расширение
az iot
не полностью работает на устройствах с Apple Silicon. Если вы используете устройство с Apple Silicon, вам нужно будет мониторить сообщения другим способом, например, с помощью Azure IoT Tools для Visual Studio Code. -
Эти сообщения автоматически содержат ряд свойств, таких как временная метка отправки. Эти свойства называются аннотациями. Чтобы увидеть все аннотации сообщений, используйте следующую команду:
az iot hub monitor-events --properties anno --hub-name <hub_name>
Замените
<hub_name>
на имя, которое вы использовали для вашего IoT Hub.Вы увидите сообщения, появляющиеся в консоли, по мере их отправки вашим IoT-устройством.
Starting event monitor, use ctrl-c to stop... { "event": { "origin": "soil-moisture-sensor", "module": "", "interface": "", "component": "", "properties": {}, "annotations": { "iothub-connection-device-id": "soil-moisture-sensor", "iothub-connection-auth-method": "{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}", "iothub-connection-auth-generation-id": "637553997165220462", "iothub-enqueuedtime": 1619976150288, "iothub-message-source": "Telemetry", "x-opt-sequence-number": 1379, "x-opt-offset": "550576", "x-opt-enqueued-time": 1619976150277 }, "payload": "{\"soil_moisture\": 381}" } }
Временные значения в аннотациях указаны в UNIX-времени, представляющем количество секунд с полуночи 1 января 1970 года.
Выйдите из монитора событий, когда закончите.
Задача - управление IoT-устройством
Вы также можете использовать Azure CLI для вызова прямых методов на вашем IoT-устройстве.
-
Выполните следующую команду в командной строке или терминале, чтобы вызвать метод
relay_on
на IoT-устройстве:az iot hub invoke-device-method --device-id soil-moisture-sensor \ --method-name relay_on \ --method-payload '{}' \ --hub-name <hub_name>
Замените
<hub_name>
с именем, которое вы использовали для вашего IoT Hub.Это отправляет запрос на выполнение метода, указанного в
method-name
. Прямые методы могут принимать полезную нагрузку, содержащую данные для метода, и это можно указать в параметреmethod-payload
в формате JSON.Вы увидите, как реле включится, а также соответствующий вывод с вашего IoT-устройства:
Direct method received - relay_on
-
Повторите предыдущий шаг, но установите
--method-name
в значениеrelay_off
. Вы увидите, как реле выключится, а также соответствующий вывод с IoT-устройства.
🚀 Задача
Бесплатный уровень IoT Hub позволяет отправлять 8,000 сообщений в день. Код, который вы написали, отправляет телеметрические сообщения каждые 10 секунд. Сколько сообщений в день будет отправляться, если одно сообщение отправляется каждые 10 секунд?
Подумайте, как часто нужно отправлять данные о влажности почвы? Как можно изменить ваш код, чтобы оставаться в рамках бесплатного уровня, проверяя данные так часто, как нужно, но не слишком часто? А что, если вы захотите добавить второе устройство?
Викторина после лекции
Обзор и самостоятельное изучение
SDK для IoT Hub является открытым исходным кодом как для Arduino, так и для Python. В репозиториях кода на GitHub есть множество примеров, показывающих, как работать с различными функциями IoT Hub.
- Если вы используете Wio Terminal, ознакомьтесь с примерами для Arduino на GitHub
- Если вы используете Raspberry Pi или виртуальное устройство, ознакомьтесь с примерами для Python на GitHub
Задание
Отказ от ответственности:
Этот документ был переведен с использованием сервиса автоматического перевода Co-op Translator. Хотя мы стремимся к точности, пожалуйста, учитывайте, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникающие в результате использования данного перевода.