Подключение устройства Raspberry Pi к акселератору решения для удаленного мониторинга с помощью СConnect your Raspberry Pi device to the Remote Monitoring solution accelerator (C)

В этом руководстве вы реализуете устройство Chiller, которое отправляет следующие данные телеметрии в акселератор решений для удаленного мониторинга:In this tutorial, you implement a Chiller device that sends the following telemetry to the Remote Monitoring solution accelerator:

  • температура;Temperature
  • ДавлениеPressure
  • влажность.Humidity

Чтобы упростить задачу, при помощи кода создаются примеры значений телеметрии для Chiller.For simplicity, the code generates sample telemetry values for the Chiller. Вы можете расширить пример, подключив к устройству физические датчики, которые будут отправлять реальные данные телеметрии.You could extend the sample by connecting real sensors to your device and sending real telemetry.

Устройство в примере также:The sample device also:

  • отправляет в решение метаданные для описания его возможностей;Sends metadata to the solution to describe its capabilities.
  • реагирует на действия, активированные на странице решения Устройства;Responds to actions triggered from the Devices page in the solution.
  • реагирует на изменения конфигурации, сведения о которых отправляются со страницы решения Устройства.Responds to configuration changes send from the Devices page in the solution.

Для работы с этим руководством требуется активная учетная запись Azure.To complete this tutorial, you need an active Azure account. Если ее нет, можно создать бесплатную пробную учетную запись всего за несколько минут.If you don't have an account, you can create a free trial account in just a couple of minutes. Дополнительные сведения см. в разделе Бесплатная пробная версия Azure.For details, see Azure Free Trial.

Перед началом работыBefore you start

Прежде чем писать код для устройства, разверните акселератор решения для удаленного мониторинга и добавьте в решение новое реальное устройство.Before you write any code for your device, deploy your Remote Monitoring solution accelerator and add a new real device to the solution.

Развертывание акселератора решения для удаленного мониторингаDeploy your Remote Monitoring solution accelerator

Созданное в этом руководстве устройство Chiller отправляет данные в экземпляр акселератора решений для удаленного мониторинга.The Chiller device you create in this tutorial sends data to an instance of the Remote Monitoring solution accelerator. Если вы еще не подготовили этот акселератор решений в своей учетной записи Azure, изучите статью Развертывание акселератора решения для удаленного мониторинга.If you haven't already provisioned the Remote Monitoring solution accelerator in your Azure account, see Deploy the Remote Monitoring solution accelerator

После завершения развертывания решения для удаленного мониторинга нажмите кнопку Запустить, чтобы открыть панель мониторинга этого решения в браузере.When the deployment process for the Remote Monitoring solution finishes, click Launch to open the solution dashboard in your browser.

Панель мониторинга решения

Добавление устройства в решение для удаленного мониторингаAdd your device to the Remote Monitoring solution

Примечание

Если вы уже добавили устройство в решение, пропустите этот шаг.If you have already added a device in your solution, you can skip this step. Однако для следующего шага требуется строка подключения вашего устройства.However, the next step requires your device connection string. Вы можете получить строку подключения устройства на портале Azure или с помощью средства CLI az iot.You can retrieve a device's connection string from the Azure portal or using the az iot CLI tool.

Чтобы устройство смогло подключиться к акселератору решений, оно должно пройти идентификацию в Центре Интернета вещей с использованием допустимых учетных данных.For a device to connect to the solution accelerator, it must identify itself to IoT Hub using valid credentials. При добавлении устройства в решение есть возможность сохранить строку подключения устройства, содержащую эти учетные данные.You have the opportunity to save the device connection string that contains these credentials when you add the device to the solution. Вы добавите эту строку подключения в клиентское приложение далее в этом руководстве.You include the device connection string in your client application later in this tutorial.

Чтобы добавить устройства к решению удаленного мониторинга, выполните следующие действия на Device Explorer страницы в решении:To add a device to your Remote Monitoring solution, complete the following steps on the Device Explorer page in the solution:

  1. Выберите + новое устройство, а затем выберите реальных как тип устройства:Choose + New device, and then choose Real as the Device type:

    Добавление реального устройства

  2. Введите значение Physical-chiller в качестве идентификатора устройства.Enter Physical-chiller as the Device ID. Выберите параметры Симметричный ключ и Автоматически создавать ключи:Choose the Symmetric Key and Auto generate keys options:

    Выбор параметров устройства

  3. Нажмите кнопку Применить.Choose Apply. Затем запишите значения параметров Идентификатор устройства, Первичный ключ и Строка подключения — первичный ключ:Then make a note of the Device ID, Primary Key, and Connection string primary key values:

    Получение учетных данных

Вы добавили реальное устройство в акселератор решения для удаленного мониторинга и записали его строку подключения.You've now added a real device to the Remote Monitoring solution accelerator and noted its device connection string. В следующих разделах реализуется клиентское приложение, которое использует строку подключения устройства для подключения к решению.In the following sections, you implement the client application that uses the device connection string to connect to your solution.

Клиентское приложение реализует встроенную модель устройства Chiller.The client application implements the built-in Chiller device model. Модель устройства с акселератором решений указывает следующие данные устройства:A solution accelerator device model specifies the following about a device:

  • Сведения о свойствах, которые устройство передает в решение.The properties the device reports to the solution. Например, устройство Chiller передает сведения о своей микропрограмме и расположении.For example, a Chiller device reports information about its firmware and location.
  • Сведения о типах данных телеметрии, которые устройство отправляет в решение.The types of telemetry the device sends to the solution. Например, устройство Chiller отправляет показатели температуры, влажности и давления.For example, a Chiller device sends temperature, humidity, and pressure values.
  • Сведения о методах, запуск которых можно запланировать на устройстве при помощи решения.The methods you can schedule from the solution to run on the device. Например, устройство Chiller должно реализовать методы Reboot, FirmwareUpdate, EmergencyValveRelease и IncreasePressure.For example, a Chiller device must implement Reboot, FirmwareUpdate, EmergencyValveRelease, and IncreasePressure methods.

В этом руководстве показано, как подключить реальное устройство к акселератору решения для удаленного мониторинга.This tutorial shows you how to connect a real device to the Remote Monitoring solution accelerator. Как и для большинства внедряемых приложений, работающих на устройствах с ограниченными ресурсами, код клиента для приложения на устройстве Raspberry Pi пишется на языке C. В этом руководстве вы создадите приложение на устройстве Raspberry Pi под управлением ОС Raspbian.As with most embedded applications that run on constrained devices, the client code for the Raspberry Pi device application is written in C. In this tutorial, you build the application on a Raspberry Pi running the Raspbian OS.

Если вы предпочитаете имитацию устройства, см. раздел Создание и тестирование нового имитированного устройства.If you prefer to simulate a device, see Create and test a new simulated device.

Необходимое оборудованиеRequired hardware

Настольный компьютер, чтобы иметь удаленный доступ к командной строке Raspberry Pi.A desktop computer to enable you to connect remotely to the command line on the Raspberry Pi.

Начальный набор Microsoft IoT для Raspberry Pi 3 или эквивалентные компоненты.Microsoft IoT Starter Kit for Raspberry Pi 3 or equivalent components. В этом руководстве используются следующие компоненты из набора:This tutorial uses the following items from the kit:

  • Raspberry Pi 3;Raspberry Pi 3
  • карта MicroSD (с NOOBS);MicroSD Card (with NOOBS)
  • кабель MiniUSB;A USB Mini cable
  • кабель Ethernet;An Ethernet cable

Необходимое ПО для настольного компьютераRequired desktop software

На настольном компьютере необходимо установить клиент SSH, чтобы иметь удаленный доступ к командной строке Raspberry Pi.You need SSH client on your desktop machine to enable you to remotely access the command line on the Raspberry Pi.

  • Windows не предоставляет клиент SSH.Windows does not include an SSH client. Мы советуем использовать PuTTY.We recommend using PuTTY.
  • Большинство дистрибутивов Linux и Mac OS содержат служебную программу командной строки SSH.Most Linux distributions and Mac OS include the command-line SSH utility. Дополнительные сведения см. в статье SSH Using Linux or Mac OS (Подключение по протоколу SSH с помощью Linux или Mac OS).For more information, see SSH Using Linux or Mac OS.

Необходимое ПО для Raspberry PiRequired Raspberry Pi software

В этой статье предполагается, что вы установили последнюю версию Raspbian ОС на устройстве Raspberry Pi.This article assumes you have installed the latest version of the Raspbian OS on your Raspberry Pi.

В следующих шагах объясняется, как подготовить устройство Raspberry Pi для создания приложения C, которое подключается к акселератору решения.The following steps show you how to prepare your Raspberry Pi for building a C application that connects to the solution accelerator:

  1. Подключитесь к Raspberry Pi с помощью ssh.Connect to your Raspberry Pi using ssh. Дополнительные сведения см. в разделе о SSH (Secure Shell) на веб-сайте Raspberry Pi.For more information, see SSH (Secure Shell) on the Raspberry Pi website.

  2. Чтобы обновить устройство Raspberry Pi, используйте следующую команду:Use the following command to update your Raspberry Pi:

    sudo apt-get update
    
  3. Чтобы завершить действия, описанные в этом практическом руководстве, выполните описанные в настройках среды разработки Linux, чтобы добавить необходимые средства разработки и библиотеки на устройство Raspberry Pi.To complete the steps in this how-to guide follow the steps in set up your Linux development environment to add the required development tools and libraries to your Raspberry Pi.

Просмотрите кодView the code

Пример кода, используемый в этом руководстве доступный в репозитории GitHub пакета SDK для устройств Azure IoT для C.The sample code used in this guide is available in the Azure IoT C SDKs GitHub repository.

Загрузка исходного кода и подготовка проектаDownload the source code and prepare the project

Чтобы подготовить проект, клонируйте или загрузите репозиторий пакетов SDK для устройств Azure IoT для C из GitHub.To prepare the project, clone or download the Azure IoT C SDKs repository from GitHub.

Этот пример находится в папке samples/solutions/remote_monitoring_client.The sample is located in the samples/solutions/remote_monitoring_client folder.

В текстовом редакторе откройте файл remote_monitoring.c в папке samples/solutions/remote_monitoring_client.Open the remote_monitoring.c file in the samples/solutions/remote_monitoring_client folder in a text editor.

Пошаговое руководство по написанию кодаCode walkthrough

В этом разделе описаны основные части примера кода и объясняется, как они связаны с акселератором решения для удаленного мониторинга.This section describes some of the key parts of the sample code and explains how they relate to the Remote Monitoring solution accelerator.

В следующем фрагменте показано, как определяются сообщаемые свойства, описывающие возможности устройства.The following snippet shows how the reported properties that describe the capabilities of the device are defined. Эти свойства включают:These properties include:

  • Расположение устройства для включения акселератора решений, чтобы добавить устройство для сопоставления.The location of the device to enable the solution accelerator to add the device to the map.
  • Текущая версия встроенного ПО.The current firmware version.
  • Список методов, которые поддерживает устройство.The list of methods the device supports.
  • Схема сообщений телеметрии, отправляемых устройством.The schema of the telemetry messages sent by the device.
typedef struct MESSAGESCHEMA_TAG
{
    char* name;
    char* format;
    char* fields;
} MessageSchema;

typedef struct TELEMETRYSCHEMA_TAG
{
    MessageSchema messageSchema;
} TelemetrySchema;

typedef struct TELEMETRYPROPERTIES_TAG
{
    TelemetrySchema temperatureSchema;
    TelemetrySchema humiditySchema;
    TelemetrySchema pressureSchema;
} TelemetryProperties;

typedef struct CHILLER_TAG
{
    // Reported properties
    char* protocol;
    char* supportedMethods;
    char* type;
    char* firmware;
    FIRMWARE_UPDATE_STATUS firmwareUpdateStatus;
    char* location;
    double latitude;
    double longitude;
    TelemetryProperties telemetry;

    // Manage firmware update process
    char* new_firmware_version;
    char* new_firmware_URI;
} Chiller;

Пример включает функцию serializeToJson, которая выполняет сериализацию структуры данных, с помощью библиотеки Parson.The sample includes a serializeToJson function that serializes this data structure using the Parson library.

Пример включает несколько функций обратного вызова, которые выводят сведения на консоль в том случае,когда клиент взаимодействует с акселератором решений:The sample includes several callback functions that print information to the console as the client interacts with the solution accelerator:

  • connection_status_callbackconnection_status_callback
  • send_confirm_callbacksend_confirm_callback
  • reported_state_callbackreported_state_callback
  • device_method_callbackdevice_method_callback

Эта функция обратного вызова device_method_callback показана в примере кода ниже.The following snippet shows the device_method_callback function. Эта функция определяет действие, выполняемое при получении вызова метода из комплекта акселератора решений.This function determines the action to take when a method call is received from the solution accelerator. Функция получает ссылку на структуру данных Chiller в параметре userContextCallback.The function receives a reference to the Chiller data structure in the userContextCallback parameter. Значение userContextCallback устанавливается, когда функция обратного вызова настраивается в основной функции.The value of userContextCallback is set when the callback function is configured in the main function:

static int device_method_callback(const char* method_name, const unsigned char* payload, size_t size, unsigned char** response, size_t* response_size, void* userContextCallback)
{
    Chiller *chiller = (Chiller *)userContextCallback;

    int result;

    (void)printf("Direct method name:    %s\r\n", method_name);

    (void)printf("Direct method payload: %.*s\r\n", (int)size, (const char*)payload);

    if (strcmp("Reboot", method_name) == 0)
    {
        MESSAGERESPONSE(201, "{ \"Response\": \"Rebooting\" }")
    }
    else if (strcmp("EmergencyValveRelease", method_name) == 0)
    {
        MESSAGERESPONSE(201, "{ \"Response\": \"Releasing emergency valve\" }")
    }
    else if (strcmp("IncreasePressure", method_name) == 0)
    {
        MESSAGERESPONSE(201, "{ \"Response\": \"Increasing pressure\" }")
    }
    else if (strcmp("FirmwareUpdate", method_name) == 0)
    {
        if (chiller->firmwareUpdateStatus != IDLE)
        {
            (void)printf("Attempt to invoke firmware update out of order\r\n");
            MESSAGERESPONSE(400, "{ \"Response\": \"Attempting to initiate a firmware update out of order\" }")
        }
        else
        {
            getFirmwareUpdateValues(chiller, payload);

            if (chiller->new_firmware_version != NULL && chiller->new_firmware_URI != NULL)
            {
                // Create a thread for the long-running firmware update process.
                THREAD_HANDLE thread_apply;
                THREADAPI_RESULT t_result = ThreadAPI_Create(&thread_apply, do_firmware_update, chiller);
                if (t_result == THREADAPI_OK)
                {
                    (void)printf("Starting firmware update thread\r\n");
                    MESSAGERESPONSE(201, "{ \"Response\": \"Starting firmware update thread\" }")
                }
                else
                {
                    (void)printf("Failed to start firmware update thread\r\n");
                    MESSAGERESPONSE(500, "{ \"Response\": \"Failed to start firmware update thread\" }")
                }
            }
            else
            {
                (void)printf("Invalid method payload\r\n");
                MESSAGERESPONSE(400, "{ \"Response\": \"Invalid payload\" }")
            }
        }
    }
    else
    {
        // All other entries are ignored.
        (void)printf("Method not recognized\r\n");
        MESSAGERESPONSE(400, "{ \"Response\": \"Method not recognized\" }")
    }

    return result;
}

Когда акселератор решения вызывает метод обновления встроенного ПО, пример десериализует полезные данные JSON и запускает фоновый поток для завершения процесса обновления.When the solution accelerator calls the firmware update method, the sample deserializes the JSON payload and starts a background thread to complete the update process. В следующем фрагменте представлен do_firmware_update, который выполняется в потоке.The following snippet shows the do_firmware_update that runs on the thread:

/*
 This is a thread allocated to process a long-running device method call.
 It uses device twin reported properties to communicate status values
 to the Remote Monitoring solution accelerator.
*/
static int do_firmware_update(void *param)
{
    Chiller *chiller = (Chiller *)param;
    printf("Running simulated firmware update: URI: %s, Version: %s\r\n", chiller->new_firmware_URI, chiller->new_firmware_version);

    printf("Simulating download phase...\r\n");
    chiller->firmwareUpdateStatus = DOWNLOADING;
    sendChillerReportedProperties(chiller);

    ThreadAPI_Sleep(5000);

    printf("Simulating apply phase...\r\n");
    chiller->firmwareUpdateStatus = APPLYING;
    sendChillerReportedProperties(chiller);

    ThreadAPI_Sleep(5000);

    printf("Simulating reboot phase...\r\n");
    chiller->firmwareUpdateStatus = REBOOTING;
    sendChillerReportedProperties(chiller);

    ThreadAPI_Sleep(5000);

    size_t size = strlen(chiller->new_firmware_version) + 1;
    (void)memcpy(chiller->firmware, chiller->new_firmware_version, size);

    chiller->firmwareUpdateStatus = IDLE;
    sendChillerReportedProperties(chiller);

    return 0;
}

В следующем фрагменте показано, как клиент отправляет сообщения телеметрии в акселератор решений.The following snippet shows how the client sends a telemetry message to the solution accelerator. Свойства сообщения включают схему сообщений, чтобы дать возможность акселератору решений отобразить телеметрию на панели мониторинга:The message properties include the message schema to help the solution accelerator display the telemetry on the dashboard:

static void send_message(IOTHUB_DEVICE_CLIENT_HANDLE handle, char* message, char* schema)
{
    IOTHUB_MESSAGE_HANDLE message_handle = IoTHubMessage_CreateFromString(message);

    // Set system properties
    (void)IoTHubMessage_SetMessageId(message_handle, "MSG_ID");
    (void)IoTHubMessage_SetCorrelationId(message_handle, "CORE_ID");
    (void)IoTHubMessage_SetContentTypeSystemProperty(message_handle, "application%2fjson");
    (void)IoTHubMessage_SetContentEncodingSystemProperty(message_handle, "utf-8");

    // Set application properties
    MAP_HANDLE propMap = IoTHubMessage_Properties(message_handle);
    (void)Map_AddOrUpdate(propMap, "$$MessageSchema", schema);
    (void)Map_AddOrUpdate(propMap, "$$ContentType", "JSON");

    time_t now = time(0);
    struct tm* timeinfo;
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable: 4996) /* Suppress warning about possible unsafe function in Visual Studio */
#endif
    timeinfo = gmtime(&now);
#ifdef _MSC_VER
#pragma warning(pop)
#endif
    char timebuff[50];
    strftime(timebuff, 50, "%Y-%m-%dT%H:%M:%SZ", timeinfo);
    (void)Map_AddOrUpdate(propMap, "$$CreationTimeUtc", timebuff);

    IoTHubDeviceClient_SendEventAsync(handle, message_handle, send_confirm_callback, NULL);

    IoTHubMessage_Destroy(message_handle);
}

Основная функция в примере:The main function in the sample:

  • Инициализирует и завершает работу подсистемы пакета SDK.Initializes and shuts down the SDK subsystem.
  • Инициализирует структуру данных Chiller.Initializes the Chiller data structure.
  • Отправляет сообщаемые свойства в акселератор решений.Sends the reported properties to the solution accelerator.
  • Настраивает функцию метода обратного вызова устройства.Configures the device method callback function.
  • Отправляет смоделированные значения телеметрии в акселератор решений.Sends simulated telemetry values to the solution accelerator.
int main(void)
{
    srand((unsigned int)time(NULL));
    double minTemperature = 50.0;
    double minPressure = 55.0;
    double minHumidity = 30.0;
    double temperature = 0;
    double pressure = 0;
    double humidity = 0;

    (void)printf("This sample simulates a Chiller device connected to the Remote Monitoring solution accelerator\r\n\r\n");

    // Used to initialize sdk subsystem
    (void)IoTHub_Init();

    (void)printf("Creating IoTHub handle\r\n");
    // Create the iothub handle here
    device_handle = IoTHubDeviceClient_CreateFromConnectionString(connectionString, MQTT_Protocol);
    if (device_handle == NULL)
    {
        (void)printf("Failure creating Iothub device.  Hint: Check you connection string.\r\n");
    }
    else
    {
        // Setting connection status callback to get indication of connection to iothub
        (void)IoTHubDeviceClient_SetConnectionStatusCallback(device_handle, connection_status_callback, NULL);

        Chiller chiller;
        memset(&chiller, 0, sizeof(Chiller));
        chiller.protocol = "MQTT";
        chiller.supportedMethods = "Reboot,FirmwareUpdate,EmergencyValveRelease,IncreasePressure";
        chiller.type = "Chiller";
        size_t size = strlen(initialFirmwareVersion) + 1;
        chiller.firmware = malloc(size);
        memcpy(chiller.firmware, initialFirmwareVersion, size);
        chiller.firmwareUpdateStatus = IDLE;
        chiller.location = "Building 44";
        chiller.latitude = 47.638928;
        chiller.longitude = -122.13476;
        chiller.telemetry.temperatureSchema.messageSchema.name = "chiller-temperature;v1";
        chiller.telemetry.temperatureSchema.messageSchema.format = "JSON";
        chiller.telemetry.temperatureSchema.messageSchema.fields = "{\"temperature\":\"Double\",\"temperature_unit\":\"Text\"}";
        chiller.telemetry.humiditySchema.messageSchema.name = "chiller-humidity;v1";
        chiller.telemetry.humiditySchema.messageSchema.format = "JSON";
        chiller.telemetry.humiditySchema.messageSchema.fields = "{\"humidity\":\"Double\",\"humidity_unit\":\"Text\"}";
        chiller.telemetry.pressureSchema.messageSchema.name = "chiller-pressure;v1";
        chiller.telemetry.pressureSchema.messageSchema.format = "JSON";
        chiller.telemetry.pressureSchema.messageSchema.fields = "{\"pressure\":\"Double\",\"pressure_unit\":\"Text\"}";

        sendChillerReportedProperties(&chiller);

        (void)IoTHubDeviceClient_SetDeviceMethodCallback(device_handle, device_method_callback, &chiller);

        while (1)
        {
            temperature = minTemperature + ((rand() % 10) + 5);
            pressure = minPressure + ((rand() % 10) + 5);
            humidity = minHumidity + ((rand() % 20) + 5);

            if (chiller.firmwareUpdateStatus == IDLE)
            {
                (void)printf("Sending sensor value Temperature = %f %s,\r\n", temperature, "F");
                (void)sprintf_s(msgText, sizeof(msgText), "{\"temperature\":%.2f,\"temperature_unit\":\"F\"}", temperature);
                send_message(device_handle, msgText, chiller.telemetry.temperatureSchema.messageSchema.name);


                (void)printf("Sending sensor value Pressure = %f %s,\r\n", pressure, "psig");
                (void)sprintf_s(msgText, sizeof(msgText), "{\"pressure\":%.2f,\"pressure_unit\":\"psig\"}", pressure);
                send_message(device_handle, msgText, chiller.telemetry.pressureSchema.messageSchema.name);


                (void)printf("Sending sensor value Humidity = %f %s,\r\n", humidity, "%");
                (void)sprintf_s(msgText, sizeof(msgText), "{\"humidity\":%.2f,\"humidity_unit\":\"%%\"}", humidity);
                send_message(device_handle, msgText, chiller.telemetry.humiditySchema.messageSchema.name);
            }

            ThreadAPI_Sleep(5000);
        }

        (void)printf("\r\nShutting down\r\n");

        // Clean up the iothub sdk handle and free resources
        IoTHubDeviceClient_Destroy(device_handle);
        free(chiller.firmware);
        free(chiller.new_firmware_URI);
        free(chiller.new_firmware_version);
    }
    // Shutdown the sdk subsystem
    IoTHub_Deinit();

    return 0;
}

Создание и запуск приложенияBuild and run the application

Ниже приведены указания по использованию CMake для создания клиентского приложения.The following steps describe how to use CMake to build the client application. Клиентское приложение удаленного мониторинга создается частью процесса сборки для SDK.The remote monitoring client application is built as part of the build process for the SDK.

  1. Измените файл remote_monitoring.c, чтобы заменить <connectionstring> строкой подключения устройства, которую вы записали в начале этого практического руководства, при добавлении устройства в акселератор решений.Edit the remote_monitoring.c file to replace <connectionstring> with the device connection string you noted at the start of this how-to guide when you added a device to the solution accelerator.

  2. Перейдите в корневой каталог хранилища клонированных копий Репозиторий пакетов SDK для Azure IoT C и выполните следующие команды для создания клиентского приложения:Navigate to root of your cloned copy of the Azure IoT C SDKs repository repository and run the following commands to build the client application:

    mkdir cmake
    cd cmake
    cmake ../
    make
    
  3. Запустите клиентское приложение и отправьте данные телеметрии в Центр Интернета вещей.Run the client application and send telemetry to IoT Hub:

    ./samples/solutions/remote_monitoring_client/remote_monitoring_client
    

    В консоли появляются сообщения в следующих случаях:The console displays messages as:

    • приложение отправляет пример данных телеметрии в акселератор решения;The application sends sample telemetry to the solution accelerator.
    • приложение отвечает на методы, вызываемые из панели мониторинга решения.Responds to methods invoked from the solution dashboard.

Просмотр телеметрии устройстваView device telemetry

Можно просмотреть данные телеметрии, отправляемые с устройства Device Explorer страницы в решении.You can view the telemetry sent from your device on the Device Explorer page in the solution.

  1. Выберите подготовленное устройство в списке устройств на Device Explorer страницы.Select the device you provisioned in the list of devices on the Device Explorer page. На панели отображаются сведения об устройстве, включая график телеметрии устройства:A panel displays information about your device including a plot of the device telemetry:

    Просмотр сведений об устройстве

  2. Выберите Pressure (Давление) для изменения порядка отображения телеметрии:Choose Pressure to change the telemetry display:

    Просмотр телеметрии по давлению

  3. Чтобы просмотреть диагностические сведения об устройстве, прокрутите вниз до раздела Diagnostics (Диагностика):To view diagnostic information about your device, scroll down to Diagnostics:

    Просмотр диагностики устройства

Действия на устройствеAct on your device

Чтобы вызвать методы на устройствах, используйте Device Explorer страницы в решении удаленного мониторинга.To invoke methods on your devices, use the Device Explorer page in the Remote Monitoring solution. Например, в решении удаленного мониторинга Chiller реализовать устройств перезагрузить метод.For example, in the Remote Monitoring solution Chiller devices implement a Reboot method.

  1. Выберите устройств для перехода к Device Explorer страницы в решении.Choose Devices to navigate to the Device Explorer page in the solution.

  2. Выберите подготовленное устройство в списке устройств на Device Explorer страницы:Select the device you provisioned in the list of devices on the Device Explorer page:

    Выбор реального устройства

  3. Чтобы отобразить список методов, можно вызвать на устройстве, выберите заданий, затем методы.To display a list of the methods you can call on your device, choose Jobs, then Methods. Чтобы запланировать выполнение задания на нескольких устройствах, можно выбрать несколько устройств в списке.To schedule a job to run on multiple devices, you can select multiple devices in the list. На панели Jobs (Задания) отображаются типы метода, который является общим для всех выбранных устройств.The Jobs panel shows the types of method common to all the devices you selected.

  4. Выберите перезагрузить, имени задания задано RebootPhysicalChiller и выберите применить:Choose Reboot, set the job name to RebootPhysicalChiller and then choose Apply:

    Планирование обновления встроенного ПО

  5. Когда имитированное устройство обрабатывает метод, в консоли отображается последовательность сообщений о выполнении кода устройства.A sequence of messages displays in the console running your device code while the simulated device handles the method.

Примечание

Чтобы отслеживать состояние задания в решении, выберите Просмотр состояния задания.To track the status of the job in the solution, choose View Job Status.

Дальнейшие действияNext steps

Способы настройки акселератора решений описаны в статье Настройка акселератора решения для удаленного мониторинга.The article Customize the Remote Monitoring solution accelerator describes some ways to customize the solution accelerator.