You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/ru/3-transport/lessons/2-store-location-data
co-op-translator[bot] 7b6699135a
🌐 Update translations via Co-op Translator (#544)
4 weeks ago
..
README.md 🌐 Update translations via Co-op Translator (#544) 4 weeks ago
assignment.md 🌐 Update translations via Co-op Translator (#544) 4 weeks ago

README.md

Данные о местоположении магазина

Скетчноут с обзором этого урока

Скетчноут от Nitya Narasimhan. Нажмите на изображение, чтобы увидеть его в большем размере.

Викторина перед лекцией

Викторина перед лекцией

Введение

В прошлом уроке вы узнали, как использовать GPS-датчик для получения данных о местоположении. Чтобы использовать эти данные для визуализации местоположения грузовика с продуктами и его маршрута, их необходимо отправить в IoT-сервис в облаке, а затем где-то сохранить.

В этом уроке вы узнаете о различных способах хранения данных IoT и научитесь сохранять данные из вашего IoT-сервиса с помощью серверного кода.

В этом уроке мы рассмотрим:

Структурированные и неструктурированные данные

Компьютерные системы работают с данными, которые могут быть самых разных форм и размеров. Они могут варьироваться от одиночных чисел до больших объемов текста, видео, изображений и данных IoT. Данные обычно делятся на две категории — структурированные данные и неструктурированные данные.

  • Структурированные данные — это данные с четко определенной, жесткой структурой, которая не меняется и обычно соответствует таблицам данных с отношениями. Примером могут быть данные о человеке, включая его имя, дату рождения и адрес.

  • Неструктурированные данные — это данные без четко определенной, жесткой структуры, включая данные, которые могут часто менять свою структуру. Примером могут быть документы, такие как текстовые файлы или электронные таблицы.

Проведите исследование: Можете ли вы придумать другие примеры структурированных и неструктурированных данных?

💁 Существуют также полуструктурированные данные, которые имеют структуру, но не вписываются в фиксированные таблицы данных.

Данные IoT обычно считаются неструктурированными.

Представьте, что вы добавляете IoT-устройства в парк транспортных средств для крупной коммерческой фермы. Вы можете захотеть использовать разные устройства для разных типов транспортных средств. Например:

  • Для сельскохозяйственных машин, таких как тракторы, вам нужны GPS-данные, чтобы убедиться, что они работают на правильных полях.
  • Для грузовиков, перевозящих продукты на склады, вам нужны GPS-данные, а также данные о скорости и ускорении, чтобы убедиться, что водитель соблюдает правила безопасности, а также данные о личности водителя и времени начала/остановки для соблюдения местных законов о рабочих часах.
  • Для рефрижераторных грузовиков вам также нужны данные о температуре, чтобы убедиться, что продукты не становятся слишком горячими или холодными и не портятся в пути.

Эти данные могут постоянно меняться. Например, если IoT-устройство находится в кабине грузовика, то данные, которые оно отправляет, могут изменяться в зависимости от прицепа, например, отправляя данные о температуре только при использовании рефрижераторного прицепа.

Какие еще данные IoT могут быть собраны? Подумайте о типах грузов, которые могут перевозить грузовики, а также о данных о техническом обслуживании.

Эти данные варьируются от транспортного средства к транспортному средству, но все они отправляются в один и тот же IoT-сервис для обработки. IoT-сервис должен быть способен обрабатывать эти неструктурированные данные, сохраняя их таким образом, чтобы их можно было искать или анализировать, но при этом работать с различными структурами этих данных.

Хранилище SQL и NoSQL

Базы данных — это сервисы, которые позволяют хранить и запрашивать данные. Базы данных бывают двух типов — SQL и NoSQL.

SQL базы данных

Первые базы данных были системами управления реляционными базами данных (RDBMS), или реляционными базами данных. Они также известны как SQL базы данных благодаря языку структурированных запросов (SQL), который используется для взаимодействия с ними для добавления, удаления, обновления или запроса данных. Эти базы данных состоят из схемы — четко определенного набора таблиц данных, похожих на электронные таблицы. Каждая таблица имеет несколько именованных столбцов. Когда вы вставляете данные, вы добавляете строку в таблицу, помещая значения в каждый из столбцов. Это сохраняет данные в очень жесткой структуре — хотя вы можете оставить столбцы пустыми, если вы хотите добавить новый столбец, вам нужно сделать это в базе данных, заполняя значения для существующих строк. Эти базы данных являются реляционными — одна таблица может иметь отношение к другой.

Реляционная база данных, где ID таблицы пользователей связан с колонкой user ID таблицы покупок, а ID таблицы продуктов связан с колонкой product ID таблицы покупок

Например, если вы сохраняете личные данные пользователя в таблице, у вас будет какой-то внутренний уникальный ID для каждого пользователя, который используется в строке таблицы, содержащей имя и адрес пользователя. Если вы затем захотите сохранить другие данные о пользователе, такие как его покупки, в другой таблице, у вас будет один столбец в новой таблице для ID этого пользователя. Когда вы ищете пользователя, вы можете использовать его ID, чтобы получить его личные данные из одной таблицы и его покупки из другой.

SQL базы данных идеально подходят для хранения структурированных данных и для случаев, когда вы хотите убедиться, что данные соответствуют вашей схеме.

Если вы раньше не использовали SQL, уделите время изучению страницы SQL на Википедии.

Некоторые известные SQL базы данных — Microsoft SQL Server, MySQL и PostgreSQL.

Проведите исследование: Ознакомьтесь с некоторыми из этих SQL баз данных и их возможностями.

NoSQL базы данных

NoSQL базы данных называются так, потому что они не имеют такой жесткой структуры, как SQL базы данных. Их также называют документными базами данных, так как они могут хранить неструктурированные данные, такие как документы.

💁 Несмотря на свое название, некоторые NoSQL базы данных позволяют использовать SQL для запроса данных.

Документы в папках в NoSQL базе данных

NoSQL базы данных не имеют заранее определенной схемы, которая ограничивает способ хранения данных, вместо этого вы можете вставлять любые неструктурированные данные, обычно используя JSON-документы. Эти документы могут быть организованы в папки, похожие на файлы на вашем компьютере. Каждый документ может иметь разные поля по сравнению с другими документами — например, если вы сохраняете данные IoT с ваших сельскохозяйственных машин, некоторые могут иметь поля для данных акселерометра и скорости, другие могут иметь поля для температуры в прицепе. Если вы добавите новый тип грузовика, например, с встроенными весами для отслеживания веса перевозимого продукта, то ваше IoT-устройство может добавить это новое поле, и оно может быть сохранено без каких-либо изменений в базе данных.

Некоторые известные NoSQL базы данных — Azure CosmosDB, MongoDB и CouchDB.

Проведите исследование: Ознакомьтесь с некоторыми из этих NoSQL баз данных и их возможностями.

В этом уроке вы будете использовать NoSQL хранилище для сохранения данных IoT.

Отправка GPS-данных в IoT Hub

В прошлом уроке вы получили GPS-данные с GPS-датчика, подключенного к вашему IoT-устройству. Чтобы сохранить эти данные IoT в облаке, их нужно отправить в IoT-сервис. Снова вы будете использовать Azure IoT Hub, тот же облачный IoT-сервис, который вы использовали в предыдущем проекте.

Отправка GPS-телеметрии с IoT-устройства в IoT Hub

Задача — отправка GPS-данных в IoT Hub

  1. Создайте новый IoT Hub, используя бесплатный тариф.

    ⚠️ Вы можете обратиться к инструкции по созданию IoT Hub из проекта 2, урока 4, если это необходимо.

    Не забудьте создать новую группу ресурсов. Назовите новую группу ресурсов gps-sensor, а новый IoT Hub — уникальным именем на основе gps-sensor, например gps-sensor-<ваше имя>.

    💁 Если у вас все еще есть ваш IoT Hub из предыдущего проекта, вы можете использовать его повторно. Не забудьте использовать имя этого IoT Hub и группу ресурсов, в которой он находится, при создании других сервисов.

  2. Добавьте новое устройство в IoT Hub. Назовите это устройство gps-sensor. Получите строку подключения для устройства.

  3. Обновите код вашего устройства, чтобы отправлять GPS-данные в новый IoT Hub, используя строку подключения устройства из предыдущего шага.

    ⚠️ Вы можете обратиться к инструкции по подключению вашего устройства к IoT из проекта 2, урока 4, если это необходимо.

  4. При отправке GPS-данных делайте это в формате JSON следующего вида:

    {
        "gps" :
        {
            "lat" : <latitude>,
            "lon" : <longitude>
        }
    }
    
  5. Отправляйте GPS-данные каждую минуту, чтобы не исчерпать дневной лимит сообщений.

Если вы используете Wio Terminal, не забудьте добавить все необходимые библиотеки и установить время с помощью NTP-сервера. Ваш код также должен убедиться, что он прочитал все данные с последовательного порта перед отправкой местоположения GPS, используя существующий код из прошлого урока. Используйте следующий код для создания JSON-документа:

DynamicJsonDocument doc(1024);
doc["gps"]["lat"] = gps.location.lat();
doc["gps"]["lon"] = gps.location.lng();

Если вы используете виртуальное IoT-устройство, не забудьте установить все необходимые библиотеки, используя виртуальную среду.

Для Raspberry Pi и виртуального IoT-устройства используйте существующий код из прошлого урока, чтобы получить значения широты и долготы, затем отправьте их в правильном формате JSON с помощью следующего кода:

message_json = { "gps" : { "lat":lat, "lon":lon } }
print("Sending telemetry", message_json)
message = Message(json.dumps(message_json))

💁 Вы можете найти этот код в папке code/wio-terminal, code/pi или code/virtual-device.

Запустите код вашего устройства и убедитесь, что сообщения поступают в IoT Hub, используя команду CLI az iot hub monitor-events.

Горячие, теплые и холодные пути

Данные, поступающие с IoT-устройства в облако, не всегда обрабатываются в реальном времени. Некоторые данные требуют обработки в реальном времени, другие могут быть обработаны через короткое время, а третьи — гораздо позже. Поток данных в разные сервисы, которые обрабатывают данные в разное время, называется горячими, теплыми и холодными путями.

Горячий путь

Горячий путь относится к данным, которые необходимо обрабатывать в реальном времени или почти в реальном времени. Вы бы использовали данные горячего пути для оповещений, например, о том, что транспортное средство приближается к складу или что температура в рефрижераторном грузовике слишком высокая.

Чтобы использовать данные горячего пути, ваш код должен реагировать на события сразу после их получения облачными сервисами.

Теплый путь

Теплый путь относится к данным, которые могут быть обработаны через короткое время после получения, например, для отчетов или краткосрочной аналитики. Вы бы использовали данные теплого пути для ежедневных отчетов о пробеге транспортных средств, используя данные, собранные накануне.

Данные теплого пути сохраняются сразу после получения облачным сервисом в каком-либо хранилище, к которому можно быстро получить доступ.

Холодный путь

Холодный путь относится к историческим данным, которые хранятся в долгосрочной перспективе и могут быть обработаны в любое время. Например, вы могли бы использовать холодный путь для получения годовых отчетов о пробеге транспортных средств или проведения аналитики маршрутов для поиска наиболее оптимального маршрута, чтобы снизить расходы на топливо.

Данные холодного пути хранятся в хранилищах данных — базах данных, предназначенных для хранения больших объемов данных, которые никогда не изменяются и могут быть быстро и легко запрошены. Обычно в вашем облачном приложении есть регулярная задача, которая запускается в определенное время каждый день, неделю или месяц, чтобы переместить данные из хранилища теплого пути в хранилище данных.

Подумайте о данных, которые вы собрали на данный момент в этих уроках. Это данные горячего, теплого или холодного пути?

Обработка GPS-событий с помощью серверного кода

После того как данные поступают в ваш IoT Hub, вы можете написать серверный код для прослушивания событий, публикуемых на совместимом с Event-Hub конечном пункте. Это теплый путь — эти данные будут сохранены и использованы в следующем уроке для отчетов о маршруте.

Отправка GPS-телеметрии с IoT-устройства в IoT Hub, затем в Azure Functions через триггер Event Hub

Задача — обработка GPS-событий с помощью серверного кода

  1. Создайте приложение Azure Functions, используя CLI Azure Functions. Используйте среду выполнения Python и создайте его в папке gps-trigger, используя то же имя для проекта приложения Functions. Убедитесь, что вы создаете виртуальную среду для этого.

⚠️ Вы можете обратиться к инструкциям по созданию проекта Azure Functions из проекта 2, урока 5, если это необходимо.

  1. Добавьте триггер события IoT Hub, который использует совместимый с Event Hub конечный пункт IoT Hub.

    ⚠️ Вы можете обратиться к инструкциям по созданию триггера события IoT Hub из проекта 2, урока 5, если это необходимо.

  2. Установите строку подключения совместимого с Event Hub конечного пункта в файле local.settings.json и используйте ключ для этой записи в файле function.json.

  3. Используйте приложение Azurite в качестве локального эмулятора хранилища.

  4. Запустите приложение функций, чтобы убедиться, что оно получает события от вашего GPS-устройства. Убедитесь, что ваше IoT-устройство также работает и отправляет GPS-данные.

    Python EventHub trigger processed an event: {"gps": {"lat": 47.73481, "lon": -122.25701}}
    

Учетные записи хранилища Azure

Логотип Azure Storage

Учетные записи хранилища Azure — это универсальный сервис хранения данных, который может хранить данные различными способами. Вы можете хранить данные в виде блобов, в очередях, в таблицах или в виде файлов, и все это одновременно.

Хранилище блобов

Слово Blob означает "большие двоичные объекты", но стало общим термином для любых неструктурированных данных. Вы можете хранить любые данные в хранилище блобов, от JSON-документов с данными IoT до изображений и видеофайлов. Хранилище блобов имеет концепцию контейнеров — именованных "ведер", в которых можно хранить данные, аналогично таблицам в реляционной базе данных. Эти контейнеры могут содержать одну или несколько папок для хранения блобов, а каждая папка может содержать другие папки, как файлы на жестком диске вашего компьютера.

В этом уроке вы будете использовать хранилище блобов для хранения данных IoT.

Изучите: Прочитайте о Azure Blob Storage

Хранилище таблиц

Хранилище таблиц позволяет хранить полуструктурированные данные. Хранилище таблиц фактически является NoSQL-базой данных, поэтому не требует заранее определенного набора таблиц, но предназначено для хранения данных в одной или нескольких таблицах с уникальными ключами для определения каждой строки.

Изучите: Прочитайте о Azure Table Storage

Хранилище очередей

Хранилище очередей позволяет хранить сообщения размером до 64 КБ в очереди. Вы можете добавлять сообщения в конец очереди и считывать их с начала. Очереди хранят сообщения на неопределенный срок, пока есть место для хранения, что позволяет хранить сообщения в долгосрочной перспективе, а затем считывать их по мере необходимости. Например, если вы хотите запускать ежемесячную задачу для обработки данных GPS, вы можете добавлять их в очередь каждый день в течение месяца, а затем в конце месяца обработать все сообщения из очереди.

Изучите: Прочитайте о Azure Queue Storage

Хранилище файлов

Хранилище файлов — это облачное хранилище файлов, к которому могут подключаться любые приложения или устройства, используя стандартные протоколы. Вы можете записывать файлы в хранилище файлов, а затем монтировать его как диск на вашем ПК или Mac.

Изучите: Прочитайте о Azure File Storage

Подключение серверного кода к хранилищу

Теперь вашему приложению функций нужно подключиться к хранилищу блобов, чтобы сохранять сообщения из IoT Hub. Есть два способа сделать это:

  • Внутри кода функции подключиться к хранилищу блобов, используя Python SDK для блобов, и записать данные как блобы.
  • Использовать привязку выходной функции, чтобы привязать возвращаемое значение функции к хранилищу блобов, и сохранить блоб автоматически.

В этом уроке вы будете использовать Python SDK, чтобы узнать, как взаимодействовать с хранилищем блобов.

Отправка телеметрии GPS с IoT-устройства в IoT Hub, затем в Azure Functions через триггер Event Hub, затем сохранение в хранилище блобов

Данные будут сохранены как JSON-блоб в следующем формате:

{
    "device_id": <device_id>,
    "timestamp" : <time>,
    "gps" :
    {
        "lat" : <latitude>,
        "lon" : <longitude>
    }
}

Задача — подключить серверный код к хранилищу

  1. Создайте учетную запись хранилища Azure. Назовите ее, например, gps<ваше имя>.

    ⚠️ Вы можете обратиться к инструкциям по созданию учетной записи хранилища из проекта 2, урока 5, если это необходимо.

    Если у вас уже есть учетная запись хранилища из предыдущего проекта, вы можете использовать ее повторно.

    💁 Вы сможете использовать ту же учетную запись хранилища для развертывания вашего приложения Azure Functions позже в этом уроке.

  2. Выполните следующую команду, чтобы получить строку подключения для учетной записи хранилища:

    az storage account show-connection-string --output table \
                                              --name <storage_name>
    

    Замените <storage_name> на имя учетной записи хранилища, созданной на предыдущем шаге.

  3. Добавьте новую запись в файл local.settings.json для строки подключения вашей учетной записи хранилища, используя значение из предыдущего шага. Назовите ее STORAGE_CONNECTION_STRING.

  4. Добавьте следующее в файл requirements.txt, чтобы установить пакеты Pip для хранилища Azure:

    azure-storage-blob
    

    Установите пакеты из этого файла в вашей виртуальной среде.

    Если вы получите ошибку, обновите версию Pip в вашей виртуальной среде до последней версии с помощью следующей команды, а затем попробуйте снова:

    pip install --upgrade pip
    
  5. В файле __init__.py для iot-hub-trigger добавьте следующие инструкции импорта:

    import json
    import os
    import uuid
    from azure.storage.blob import BlobServiceClient, PublicAccess
    

    Модуль json будет использоваться для чтения и записи JSON, модуль os — для чтения строки подключения, модуль uuid — для генерации уникального идентификатора для GPS-данных.

    Пакет azure.storage.blob содержит Python SDK для работы с хранилищем блобов.

  6. Перед методом main добавьте следующую вспомогательную функцию:

    def get_or_create_container(name):
        connection_str = os.environ['STORAGE_CONNECTION_STRING']
        blob_service_client = BlobServiceClient.from_connection_string(connection_str)
    
        for container in blob_service_client.list_containers():
            if container.name == name:
                return blob_service_client.get_container_client(container.name)
    
        return blob_service_client.create_container(name, public_access=PublicAccess.Container)
    

    Python SDK для блобов не имеет вспомогательного метода для создания контейнера, если он не существует. Этот код загрузит строку подключения из файла local.settings.json (или из Application Settings после развертывания в облаке), затем создаст класс BlobServiceClient для взаимодействия с учетной записью хранилища блобов. Затем он перебирает все контейнеры учетной записи хранилища блобов, ищет контейнер с указанным именем — если находит, возвращает класс ContainerClient, который может взаимодействовать с контейнером для создания блобов. Если не находит, контейнер создается, и возвращается клиент для нового контейнера.

    При создании нового контейнера предоставляется публичный доступ для запроса блобов в контейнере. Это будет использоваться в следующем уроке для визуализации данных GPS на карте.

  7. В отличие от данных о влажности почвы, в этом коде мы хотим сохранять каждое событие, поэтому добавьте следующий код внутри цикла for event in events: в функции main, ниже оператора logging:

    device_id = event.iothub_metadata['connection-device-id']
    blob_name = f'{device_id}/{str(uuid.uuid1())}.json'
    

    Этот код получает идентификатор устройства из метаданных события, а затем использует его для создания имени блоба. Блобы могут храниться в папках, и идентификатор устройства будет использоваться как имя папки, чтобы все события GPS для каждого устройства хранились в одной папке. Имя блоба — это эта папка, за которой следует имя документа, разделенные прямыми слэшами, аналогично путям в Linux и macOS (похоже на Windows, но Windows использует обратные слэши). Имя документа — это уникальный идентификатор, сгенерированный с помощью модуля Python uuid, с типом файла json.

    Например, для идентификатора устройства gps-sensor имя блоба может быть gps-sensor/a9487ac2-b9cf-11eb-b5cd-1e00621e3648.json.

  8. Добавьте следующий код ниже этого:

    container_client = get_or_create_container('gps-data')
    blob = container_client.get_blob_client(blob_name)
    

    Этот код получает клиент контейнера с помощью вспомогательной функции get_or_create_container, а затем получает объект клиента блоба, используя имя блоба. Эти клиенты блобов могут ссылаться на существующие блобы или, как в данном случае, на новые блобы.

  9. Добавьте следующий код после этого:

    event_body = json.loads(event.get_body().decode('utf-8'))
    blob_body = {
        'device_id' : device_id,
        'timestamp' : event.iothub_metadata['enqueuedtime'],
        'gps': event_body['gps']
    }
    

    Этот код создает тело блоба, которое будет записано в хранилище блобов. Это JSON-документ, содержащий идентификатор устройства, время, когда телеметрия была отправлена в IoT Hub, и GPS-координаты из телеметрии.

    💁 Важно использовать время постановки сообщения в очередь, а не текущее время, чтобы получить время, когда сообщение было отправлено. Оно может находиться в хабе некоторое время, прежде чем будет обработано, если приложение функций не запущено.

  10. Добавьте следующий код ниже этого:

    logging.info(f'Writing blob to {blob_name} - {blob_body}')
    blob.upload_blob(json.dumps(blob_body).encode('utf-8'))
    

    Этот код записывает в журнал, что блоб будет записан с его деталями, а затем загружает тело блоба как содержимое нового блоба.

  11. Запустите приложение функций. Вы увидите, как блобы записываются для всех событий GPS в выводе:

    [2021-05-21T01:31:14.325Z] Python EventHub trigger processed an event: {"gps": {"lat": 47.73092, "lon": -122.26206}}
    ...
    [2021-05-21T01:31:14.351Z] Writing blob to gps-sensor/4b6089fe-ba8d-11eb-bc7b-1e00621e3648.json - {'device_id': 'gps-sensor', 'timestamp': '2021-05-21T00:57:53.878Z', 'gps': {'lat': 47.73092, 'lon': -122.26206}}
    

    💁 Убедитесь, что вы не запускаете монитор событий IoT Hub одновременно.

💁 Вы можете найти этот код в папке code/functions.

Задача — проверить загруженные блобы

  1. Чтобы просмотреть созданные блобы, вы можете использовать либо Azure Storage Explorer, бесплатный инструмент для просмотра и управления учетными записями хранилища, либо CLI.

    1. Чтобы использовать CLI, сначала вам понадобится ключ учетной записи. Выполните следующую команду, чтобы получить этот ключ:

      az storage account keys list --output table \
                                   --account-name <storage_name>
      

      Замените <storage_name> на имя учетной записи хранилища.

      Скопируйте значение key1.

    2. Выполните следующую команду, чтобы перечислить блобы в контейнере:

      az storage blob list --container-name gps-data \
                           --output table \
                           --account-name <storage_name> \
                           --account-key <key1>
      

      Замените <storage_name> на имя учетной записи хранилища, а <key1> на значение key1, которое вы скопировали на предыдущем шаге.

      Это выведет список всех блобов в контейнере:

      Name                                                  Blob Type    Blob Tier    Length    Content Type              Last Modified              Snapshot
      ----------------------------------------------------  -----------  -----------  --------  ------------------------  -------------------------  ----------
      gps-sensor/1810d55e-b9cf-11eb-9f5b-1e00621e3648.json  BlockBlob    Hot          45        application/octet-stream  2021-05-21T00:54:27+00:00
      gps-sensor/18293e46-b9cf-11eb-9f5b-1e00621e3648.json  BlockBlob    Hot          45        application/octet-stream  2021-05-21T00:54:28+00:00
      gps-sensor/1844549c-b9cf-11eb-9f5b-1e00621e3648.json  BlockBlob    Hot          45        application/octet-stream  2021-05-21T00:54:28+00:00
      gps-sensor/1894d714-b9cf-11eb-9f5b-1e00621e3648.json  BlockBlob    Hot          45        application/octet-stream  2021-05-21T00:54:28+00:00
      
    3. Загрузите один из блобов, используя следующую команду:

      az storage blob download --container-name gps-data \
                               --account-name <storage_name> \
                               --account-key <key1> \
                               --name <blob_name> \
                               --file <file_name>
      

      Замените <storage_name> на имя учетной записи хранилища, а <key1> на значение key1, которое вы скопировали ранее.

      Замените <blob_name> на полное имя из столбца Name в выводе предыдущего шага, включая имя папки. Замените <file_name> на имя локального файла для сохранения блоба.

    После загрузки вы можете открыть JSON-файл в VS Code, и вы увидите блоб, содержащий детали GPS-координат:

    {"device_id": "gps-sensor", "timestamp": "2021-05-21T00:57:53.878Z", "gps": {"lat": 47.73092, "lon": -122.26206}}
    

Задача — развернуть приложение функций в облаке

Теперь, когда ваше приложение функций работает, вы можете развернуть его в облаке.

  1. Создайте новое приложение Azure Functions, используя учетную запись хранилища, созданную ранее. Назовите его, например, gps-sensor- и добавьте уникальный идентификатор в конце, например, случайные слова или ваше имя.

    ⚠️ Вы можете обратиться к инструкциям по созданию приложения Functions из проекта 2, урока 5, если это необходимо.

  2. Загрузите значения IOT_HUB_CONNECTION_STRING и STORAGE_CONNECTION_STRING в Application Settings.

    ⚠️ Вы можете обратиться к инструкциям по загрузке Application Settings из проекта 2, урока 5, если это необходимо.

  3. Разверните ваше локальное приложение Functions в облаке.

⚠️ Вы можете обратиться к инструкциям по развертыванию вашего приложения Functions из проекта 2, урока 5, если это необходимо.


🚀 Задача

Данные GPS не всегда точны, и определяемые местоположения могут быть смещены на несколько метров, а иногда и больше, особенно в туннелях и районах с высокими зданиями.

Подумайте, как спутниковая навигация может справляться с этим? Какие данные есть у вашей навигационной системы, которые могут помочь ей лучше предсказывать ваше местоположение?

Викторина после лекции

Викторина после лекции

Обзор и самостоятельное изучение

Задание

Изучите привязки функций


Отказ от ответственности:
Этот документ был переведен с помощью сервиса автоматического перевода Co-op Translator. Несмотря на наши усилия обеспечить точность, автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода.