Как настроить отдельные модули для 100+ периферийных устройств - PullRequest
1 голос
/ 19 июня 2020

У меня более 100 граничных устройств с несколькими модулями, которые управляются автоматическим развертыванием c. У каждого устройства есть свои характеристики, например максимально допустимые значения. У нас также есть внешний модуль, для которого требуются уникальные учетные данные (идентификатор / пароль / сертификат / ключ) для каждого устройства.

Я пробовал:

  • обновить двойник модуля напрямую / вручную, но это не удается, поскольку мы используем автоматическое развертывание для всех других параметров и конфигурации, см. Обновление двойника модуля IotEdge отменяется
  • с использованием обновлений двойника модуля с многоуровневым развертыванием. Это работает, однако мы должны создать многоуровневое развертывание для каждого устройства. Только 100 развертываний поддерживаются концентратором iot, поэтому не масштабируются.

Как я могу это сделать? Есть ли в IoT Edge рекомендуемый подход / поддержка / обходной путь для этого? Или мы должны построить что-то собственное?

Пример многоуровневого развертывания для включения внешнего модуля и установки значений свойств по умолчанию:

"content": {
    "modulesContent": {
        "$edgeAgent": {
            "properties.desired.modules.externalModule1": {
                "settings": {
                    "image": "123.azurecr.io/externalModule1:0.1.12",
                    "createOptions": "{\"NetworkingConfig\":{\"EndpointsConfig\":{\"host\":{}}},\"HostConfig\":{\"NetworkMode\":\"host\",\"LogConfig\":{\"Type\":\"json-file\",\"Config\":{\"max-size\":\"10m\",\"max-file\":\"3\"}}}}"
                },
                "type": "docker",
                "status": "running",
                "restartPolicy": "always",
                "version": "1.0"
            }
        },
        "externalModule1": {
            "properties.desired": {
                "MaxChargePower": 5000,
                "MaxDischargePower": 10000
            }
        }
    }
  }
}

Пример многоуровневого развертывания для установки конкретных устройств c значения:

{
  "content": {
    "modulesContent": {
        "$edgeAgent": {},
        "externalModule1": {       
          "properties.desired.MaxChargePower": 6000,
          "properties.desired.MaxDischargePower": 15000,
          "properties.desired.iotpool_account": {
            "iotpool_id" : "<insert iotpool id>",
            "iotpool_password" : "<insert iotpool password>",
            "cert" : "<insert cert>",
            "key" : "<insert key>"
          }
        }
    }
  }
}

1 Ответ

2 голосов
/ 30 июня 2020

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

Ключ должен ссылаться на определенный раздел c желаемых свойств в автоматическое c развертывание (базовое или многоуровневое). В вашем примере -

"content": {
    "modulesContent": {
        "$edgeAgent": {
            "properties.desired.modules.externalModule1": {
                "settings": {
                    "image": "123.azurecr.io/externalModule1:0.1.12",
                    "createOptions": "{\"NetworkingConfig\":{\"EndpointsConfig\":{\"host\":{}}},\"HostConfig\":{\"NetworkMode\":\"host\",\"LogConfig\":{\"Type\":\"json-file\",\"Config\":{\"max-size\":\"10m\",\"max-file\":\"3\"}}}}"
                },
                "type": "docker",
                "status": "running",
                "restartPolicy": "always",
                "version": "1.0"
            }
        },
        "externalModule1": {
            "properties.desired": {
                "MaxChargePower": 5000,
                "MaxDischargePower": 10000
            }
        }
    }
  }
}

изменяется на ..

"content": {
    "modulesContent": {
        "$edgeAgent": {
            "properties.desired.modules.externalModule1": {
                "settings": {
                    "image": "123.azurecr.io/externalModule1:0.1.12",
                    "createOptions": "{\"NetworkingConfig\":{\"EndpointsConfig\":{\"host\":{}}},\"HostConfig\":{\"NetworkMode\":\"host\",\"LogConfig\":{\"Type\":\"json-file\",\"Config\":{\"max-size\":\"10m\",\"max-file\":\"3\"}}}}"
                },
                "type": "docker",
                "status": "running",
                "restartPolicy": "always",
                "version": "1.0"
            }
        },
        "externalModule1.properties.desired.powerSettings": {
                "MaxChargePower": 5000,
                "MaxDischargePower": 10000
            }
        }
    }
  }
}

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

          "properties.desired.iotpool_account": {
            "iotpool_id" : "<insert iotpool id>",
            "iotpool_password" : "<insert iotpool password>",
            "cert" : "<insert cert>",
            "key" : "<insert key>"
          }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...