Сценарий Azure-IoT — Raspberry pi3 Forever завершился с кодом: 7

Я запускаю сценарий навсегда, отправляющий данные из raspberry pi 3 в azure-iot-hub, используя следующее: root@raspberrypi3:~# forever start /home/pi/azure/iam/ble_azure.js

Проработав около 1,5 дней, я перестал получать сообщения на auzre-iot-hub, когда я проверил список навсегда, я получил следующее:

root@raspberrypi3:~# forever list
info:    Forever processes running
data:        uid  command         script                          forever pid  id logfile                 uptime         
data:    [0] NWgI /usr/bin/nodejs /home/pi/azure/iam/ble_azure.js 8990    3784    /root/.forever/NWgI.log 0:21:17:38.742 

Когда я проверил файл журнала, я получил это сообщение об ошибке:

/home/pi/azure/iam/node_modules/applicationinsights/AutoCollection/Exceptions.js:27
                        throw error;
                        ^
NotConnectedError: mqtt.js returned client disconnecting error
    at translateError (/home/pi/azure/iam/node_modules/azure-iot-device-mqtt/lib/mqtt-translate-error.js:25:11)
    at MqttTwinReceiver._handleError (/home/pi/azure/iam/node_modules/azure-iot-device-mqtt/lib/mqtt-twin-receiver.js:201:42)
    at /home/pi/azure/iam/node_modules/azure-iot-device-mqtt/lib/mqtt-twin-receiver.js:64:18
    at MqttClient._checkDisconnecting (/home/pi/azure/iam/node_modules/mqtt/lib/client.js:314:7)
    at MqttClient.subscribe (/home/pi/azure/iam/node_modules/mqtt/lib/client.js:423:12)
    at /home/pi/azure/iam/node_modules/azure-iot-device-mqtt/lib/mqtt-twin-receiver.js:62:22
    at _combinedTickCallback (internal/process/next_tick.js:73:7)
    at process._tickCallback (internal/process/next_tick.js:104:9)
error: Forever detected script exited with code: 7
error: Script restart attempt #34
state has changed poweredOn
started scanning
[IoT hub Client] Connect error: mqtt.js returned premature close error

Через файл журнала ошибка mqtt повторяется несколько раз и всегда успешно обрабатывалась, что я не могу понять, почему через 1,5 дня я получаю эту ошибку:

**error: Forever detected script exited with code: 7
error: Script restart attempt #34**

Кроме того, почему я продолжаю получать такую ​​​​ошибку mqtt, почему она продолжает отключаться?

**NotConnectedError: mqtt.js returned client disconnecting error**


Forever --version 
v0.15.3

root@raspberrypi3:~# uname -a
Linux raspberrypi3 4.9.35-v7+ #1014 SMP Fri Jun 30 14:47:43 BST 2017 armv7l GNU/Linux

Спасибо


person Ayman    schedule 24.10.2017    source источник


Ответы (1)


Если вы используете Client.fromConnectionString для создания экземпляра объекта клиента, SDK отключается и повторно подключается каждые 45 минут, чтобы обновить токен подписи общего доступа. (это не происходит с AMQP, который использует другой механизм аутентификации). Возможно, при повторном установлении соединения клиент сталкивается с этой ошибкой «преждевременного закрытия», которую мы отслеживаем в этом выпуске.

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

И последнее, но не менее важное: следующий выпуск SDK (1.2.0) будет включать в себя логику повторной попытки/повторного подключения, которая будет намного более надежной, чем то, что было раньше. Я обновлю выпуск, чтобы указать на него, когда он будет выпущен.

person pierreca - MSFT    schedule 24.10.2017
comment
как мне получить сертификат X509 на RPi, используя nodejs JS? любые ссылки - person Ayman; 25.10.2017
comment
Вы можете сослаться на Начало работы Безопасность сертификата ЦС X.509 для настройки безопасности X.509 в центре Интернета вещей Azure. - person Michael Xu - MSFT; 26.10.2017
comment
вы сказали, что Client.fromConnectionString заставит клиента подключаться/отключаться каждые 45 минут, но сегодня я обнаружил, что мой скрипт продолжал работать в течение 1 дня и 18 часов, это очень странно, я ничего не менял, Вчера мне не удалось попробовать ваши предложения выше, и я продолжал работать вечно, как и со старой строкой подключения, в любом случае, теперь я изменил свой сценарий, чтобы использовать токен SAS с помощью Client.fromSharedAccessSignature, чтобы увидеть, будет ли это подключите/отключите снова и сообщит вам, спасибо за вашу помощь. - person Ayman; 26.10.2017