Сборка Modbus IoT Edge модуля из исходников. Урок 6.

На github можно посмотреть исходники modbus модуля для IoT Edge. Соберем модуль из исходников и протестируем его работу.

  1. Если на ПК установлен Git, то зайдем в рабочую директорию и сделаем клонирование папки исходников с Git Hub на локальный ПК, запустив команду:
    git clone https://github.com/Azure/iot-edge-modbus.git
  2. Полезно создать новый проект Azure IoT modules для копирования некоторых параметров.
  3. После завершения клонирования найдем файл deployment.template.json.
  4. В файле добавим блок с информацией о используемом Azure Container Registry. В случае с моим реестром с именем warlibregistry располагающийся по адресу «warlibregistry.azurecr.io» блок будет таким:
                "registryCredentials": {
                 "warlibregistry": {
                    "username": "$CONTAINER_REGISTRY_USERNAME_warlibregistry",
                    "password": "$CONTAINER_REGISTRY_PASSWORD_warlibregistry",
                    "address": "warlibregistry.azurecr.io"
                 }
    	    }
  5. Копируем или создаем файл «.env» в котором содержатся данные для авторизации в Azure Container Registry.
    CONTAINER_REGISTRY_USERNAME_warlibregistry=WarlibRegistry
    CONTAINER_REGISTRY_PASSWORD_warlibregistry=FrM6/W0BEv
  6. Заходим в папку modules с исходниками и в файле modules.json правим параметр repository, заменив localhost:5000 на правильный путь к репозиторию:
    ...
        "image": {
            "repository": "warlibregistry.azurecr.io/iotedgemodbus",
    ...
    }
  7. Открываем Visual Studio Code -> Open Folders… и выбираем корневую правку в котором лежит скаченный с git hub проект ..\iot-edge-modbus.
  8. Встаем на файл deployment.template.json, жмем правую кнопку мыши и выбираем пункт «Build and Push IoT Edge Solution».
  9.  Если реквизиты введены верно, то сборка модуля закончится успешно на в указанном Azure Container Registry появится собранный модуль.
  10. Заходим в папку config и из файла deployment.json в разделе «image»
            "modules": {
              "modbus": {
                "version": "1.0",
                "type": "docker",
                "status": "running",
                "restartPolicy": "always",
                "settings": {
                  "image": "warlibregistry.azurecr.io/iotedgemodbus:0.0.1-amd64",
                  "createOptions": ""
                }
              }
            }

    копируем ссылку на модуль. Она понадобится для развертывания модуля на IoT Edge устройстве.

  11. Заходим на Azure Portal в «All resources» -> [Ваш IoT hub] -> IoT Edge ->  создаем новое устройство.
  12. Заходим в созданное устройство и жмем Set modules.
  13. В «Container Registry Settings» прописываем права доступа к вашему Azure Container Registry. Эти параметры есть в файле .env и в файле deployment.json.
  14. В разделе «Deployment module» -> «IoT Edge Module».
  15. Вводим настройки как в статье. Имя дал modbus1, URI из deployment.json: warlibregistry.azurecr.io/iotedgemodbus:0.0.1-amd64. Параметры properties.desired.
    "properties.desired": {
        "PublishInterval": "2000",
          "SlaveConfigs": {
            "TermoSensor": {
              "SlaveConnection": "192.168.26.110",
              "HwId": "TermoSensor-0a:01:01:01:01:01",
              "TcpPort": "8899",         
              "Operations": {
                "Op01": {
                  "PollingInterval": "5000",
                  "UnitId": "1",
                  "StartAddress": "30002",
                  "Count": "1",
                  "DisplayName": "Temp"
                },
                "Op02": {
                  "PollingInterval": "5000",
                  "UnitId": "1",
                  "StartAddress": "30003",
                  "Count": "1",
                  "DisplayName": "Humidity"
               }
            }
         }
       }
    }
  16. Параметры Route: «FROM /messages/modules/modbus/outputs/modbusOutput INTO $upstream».
  17. Развертываем модуль на IoT Edge устройстве.
  18. После развертывания смотрим логи:
    PS C:\WINDOWS\system32> iotedge  list
    NAME             STATUS           DESCRIPTION      CONFIG
    edgeHub          running          Up 9 seconds     mcr.microsoft.com/azureiotedge-hub:1.0
    modbus1          running          Up 11 seconds    warlibregistry.azurecr.io/iotedgemodbus:0.0.1-amd64
    edgeAgent        running          Up 19 seconds    mcr.microsoft.com/azureiotedge-agent:1.0
    PS C:\WINDOWS\system32> iotedge logs modbus1 -f
    IoT Hub module client initialized.
    Desired property change:
    {"PublishInterval":"2000","SlaveConfigs":{"TermoSensor":{"SlaveConnection":"192.168.26.110","HwId":"TermoSensor-0a:01:01:01:01:01","TcpPort":"8899","Operations":{"Op01":{"PollingInterval":"5000","UnitId":"1","StartAddress":"30002","Count":"1","DisplayName":"Temp"},"Op02":{"PollingInterval":"5000","UnitId":"1","StartAddress":"30003","Count":"1","DisplayName":"Humidity"}}}},"$version":1}
    Attempt to load configuration: {"PublishInterval":"2000","SlaveConfigs":{"TermoSensor":{"SlaveConnection":"192.168.26.110","HwId":"TermoSensor-0a:01:01:01:01:01","TcpPort":"8899","Operations":{"Op01":{"PollingInterval":"5000","UnitId":"1","StartAddress":"30002","Count":"1","DisplayName":"Temp"},"Op02":{"PollingInterval":"5000","UnitId":"1","StartAddress":"30003","Count":"1","DisplayName":"Humidity"}}}},"$version":1}
    Invalid RetryCount: , set to DefaultRetryCount: 10
    Invalid RetryInterval: , set to DefaultRetryInterval: 50
    Empty CorrelationId: , set to DefaultCorrelationId: DefaultCorrelationId
    Empty CorrelationId: , set to DefaultCorrelationId: DefaultCorrelationId
    Saving reported properties: {"PublishInterval":2000,"SlaveConfigs":{"TermoSensor":{"Operations":{"Op01":{"PollingInterval":5000,"UnitId":1,"StartAddress":"30002","Count":1,"DisplayName":"Temp","CorrelationId":"DefaultCorrelationId"},"Op02":{"PollingInterval":5000,"UnitId":1,"StartAddress":"30003","Count":1,"DisplayName":"Humidity","CorrelationId":"DefaultCorrelationId"}},"SlaveConnection":"192.168.26.110","RetryCount":10,"RetryInterval":50,"TcpPort":8899,"HwId":"TermoSensor-0a:01:01:01:01:01","BaudRate":null,"StopBits":null,"DataBits":null,"Parity":null}}}
    30002: 255
    
    30003: 393
    
    30002: 255
    
    30003: 393
  19. Не забываем останавливать сервис iotedge командой «stop-service iotedge», либо конейнер, когда не нужна отправка данных в облако, чтобы не расходовать средства.
Spread the love
Запись опубликована в рубрике IT опыт, IT рецепты с метками , , . Добавьте в закладки постоянную ссылку.