NEWS
Драйвер Mqtt + Arduino
-
2. Довольно часто сервер теряет связь с Arduino, как можно сделать чтобы Arduino реконектнулась (если на Arduino нажать ресет всё работает дальше)? `
С этим тоже намучился, и пока связь потеряна и не восстановлена - данные что передаются в этот промежуток времени безвозвратно потеряны((По поводу восстановления связи, я в коде задал таймер, который раз в 10 (настраивается) секунд проверяет коннект, если нет - то рвет и переподключается, подписываясь заново…
unsigned long lastTime = 0; unsigned long timeout = 10; // по-умолчанию таймаут перед восстановлением соединения 10 сек//Если соединение не активно в течении таймаута, восстанавливаем if(millis() > (lastTime + timeout*1000)) { lastTime = millis(); if (!client.connected()) { //Разрываем коннект client.disconnect(); Serial.print("Reconnect to MQTT-boker... "); //пытаемся восстановить if (client.connect("PLC35_DoorVaultSecur")) { Serial.println("success"); //Публикуем, подписываемся заново client.subscribe("PLC35_DoorVaultSecur/mode"); client.subscribe("common/PLC38_PLC35_RelayLight2"); client.subscribe("common/PLC33_PLC35_FlashRFID"); } else { Serial.println("failed!"); } } }Вот так как то…
-
Это в void loop записать? Сейчас ваш пример скачаю. Где то читал что это ещё проблемы ENC28J60, вообще кода почти нет а при компиляции 85% забито. Можно как то библиотеку облегчить но для меня это темный лес

Чего то сделал
#include <spi.h> #include <uipethernet.h> // UIP Ethernet Library to support ENC28J60 ethernet module. #include <pubsubclient.h> // MQTT publisher/subscriber client library #include <wire.h> #include <liquidcrystal_i2c.h> // i2C bus converter compatible library for LCD LiquidCrystal_I2C lcd(0x27,16,2); byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED }; // Set the mac address for the arduino nano mcu byte server[] = { 192, 168, 1, 11 }; // Set MQTT broker server IP address //char server[] = "xxx.xxxxxxx.xxx"; // Set MQTT broker server domain address byte ip[] = { 192, 168, 1, 16 }; // Set the IP address for the arduino nano mcu #define id_connect "LCD-accumulator_tanks_1" #define Prefix_subscribe "myhome/Boiler_room/" unsigned long lastTime = 0; unsigned long timeout = 10; // по-умолчанию таймаут перед восстановлением соединения 10 сек void callback(char* topic, byte* payload, unsigned int length) { payload[length] = '\0'; String strTopic = String(topic); String strPayload = String((char*)payload); if (strcmp(topic, "myhome/Boiler_room/Temp_accum_tanks_1_1")==0){ lcd.setCursor(3,0); lcd.print(strPayload); //lcd.print((char)223); } if (strcmp(topic, "myhome/Boiler_room/Temp_accum_tanks_1_2")==0){ lcd.setCursor(3,1); lcd.print(strPayload); //lcd.print((char)223); } if (strcmp(topic, "myhome/Boiler_room/Temp_accum_tanks_1_3")==0){ lcd.setCursor(12,0); lcd.print(strPayload); //lcd.print((char)223); } if (strcmp(topic, "myhome/Boiler_room/Temp_accum_tanks_1_4")==0){ lcd.setCursor(12,1); lcd.print(strPayload); //lcd.print((char)223); } } EthernetClient ethClient; PubSubClient client(server, 1883, callback, ethClient); void setup() { lcd.init(); lcd.backlight(); lcd.clear(); lcd.setCursor(0,0); lcd.print("T1:"); lcd.setCursor(0,1); lcd.print("T2:"); lcd.setCursor(9,0); lcd.print("T3:"); lcd.setCursor(9,1); lcd.print("T4:"); Ethernet.begin(mac, ip); if (client.connect(id_connect)) { // Check the MQTT broker connectivity client.publish("myhome/Boiler_room/Temp_accum_tanks_1_1", " "); client.publish("myhome/Boiler_room/Temp_accum_tanks_1_2", " "); client.publish("myhome/Boiler_room/Temp_accum_tanks_1_3", " "); client.publish("myhome/Boiler_room/Temp_accum_tanks_1_4", " "); client.subscribe("myhome/Boiler_room/#"); } } void loop() { client.loop(); if (!client.connected()) { if (client.connect(id_connect)) { client.subscribe("myhome/Boiler_room/#"); } } //Если соединение не активно в течении таймаута, восстанавливаем if(millis() > (lastTime + timeout*1000)) { lastTime = millis(); if (!client.connected()) { //Разрываем коннект client.disconnect(); //пытаемся восстановить if (client.connect(id_connect)) { //Публикуем, подписываемся заново client.subscribe("myhome/Boiler_room/#"); } } } }</liquidcrystal_i2c.h></wire.h></pubsubclient.h></uipethernet.h></spi.h> -
Увы результата недал, гдето через 5 часов пропала связь :( `
Когда связь пропадает ардуина пингуется вообще? Езернет шилд какой пользуешь? -
Увы результата недал, гдето через 5 часов пропала связь :(
Когда связь пропадает ардуина пингуется вообще? Езернет шилд какой пользуешь?
Не пингуется, ENC28J60mqtt-0 2016-01-12 19:45:55 info Client [LCD-accumulator_tanks_1] closed mqtt-0 2016-01-12 19:45:55 warn [LCD-accumulator_tanks_1] Error: read ETIMEDOUT sayit-0 2016-01-12 19:30:11 info saying: Дисплей. Пропала связь! sayit-0 2016-01-12 19:30:07 info saying: /opt/iobroker/node_modules/iobroker.sayit/gong.mp3 javascript-0 2016-01-12 19:30:07 info script.js.Ping_0_say: Дисплей. Пропала связь!Если рестартануть драйвер результата 0, если ресетнуть ардуину всё работает
Может я код который предложил electric69 не так прописал?
-
Не пингуется, ENC28J60 `
Если не пингуется, то код вообще не причем…Попробуйте без MQTT, просто по HTTP погонять - будет ли работать.
Или просто залить скетч тестовый из библиотеки изернета, пустить пинг тестовый и проверить через часов 5-10 будет ли пинговаться, может "дело не в бобине" ))
-
Подскажите пожалуйста в чем может быть проблема.
iobroker подключен в качестве клиента к CloudMQTT
CloudMQTT поступают данные с планшета, на странице CloudMQTT отображаются корректно.
admin/DEXP Ursus 8E2 mini 3G/sensors/battery 100
admin/DEXP Ursus 8E2 mini 3G/sensors/bright 166
admin/DEXP Ursus 8E2 mini 3G/sensors/temp %TEMP
admin/DEXP Ursus 8E2 mini 3G/sensors/time 22.46
admin/DEXP Ursus 8E2 mini 3G/sensors/date 22.01.2016
admin/DEXP Ursus 8E2 mini 3G/sensors/wifi >>> SCAN <<<
admin/DEXP Ursus 8E2 mini 3G/sensors/device DEXP Ursus 8E2 mini 3G
admin/DEXP Ursus 8E2 mini 3G/sensors/uptime 353479
admin/DEXP Ursus 8E2 mini 3G/sensors/ram 58MB
admin/DEXP Ursus 8E2 mini 3G/sensors/statusblue off
admin/DEXP Ursus 8E2 mini 3G/sensors/statusscreen on
а вот в iobrokere нет значений

но если публикуешь в корне то отображается правильно
test 6576
-
Подскажите пожалуйста в чем может быть проблема.
iobroker подключен в качестве клиента к CloudMQTT
CloudMQTT поступают данные с планшета, на странице CloudMQTT отображаются корректно.
admin/DEXP Ursus 8E2 mini 3G/sensors/battery 100
admin/DEXP Ursus 8E2 mini 3G/sensors/bright 166
admin/DEXP Ursus 8E2 mini 3G/sensors/temp %TEMP
admin/DEXP Ursus 8E2 mini 3G/sensors/time 22.46
admin/DEXP Ursus 8E2 mini 3G/sensors/date 22.01.2016
admin/DEXP Ursus 8E2 mini 3G/sensors/wifi >>> SCAN <<<
admin/DEXP Ursus 8E2 mini 3G/sensors/device DEXP Ursus 8E2 mini 3G
admin/DEXP Ursus 8E2 mini 3G/sensors/uptime 353479
admin/DEXP Ursus 8E2 mini 3G/sensors/ram 58MB
admin/DEXP Ursus 8E2 mini 3G/sensors/statusblue off
admin/DEXP Ursus 8E2 mini 3G/sensors/statusscreen on
а вот в iobrokere нет значений
но если публикуешь в корне то отображается правильно
test 6576 `
Наверно дело в структуре, вот так выглядит у меня

-
В режиме брокера именно такая структура и у меня, а вот как клиент получается так.
Как брокер локально по сети нормально все передается.
Решил попробовать через cloudmqtt.com и подключится как клиент и тут такие проблемы.

может что тут нужно поставить? -
В режиме брокера именно такая структура и у меня, а вот как клиент получается так.
Как брокер локально по сети нормально все передается.
Решил попробовать через cloudmqtt.com и подключится как клиент и тут такие проблемы.
filename="3333.jpg" index="0">~~
может что тут нужно поставить? `
Там внизу есть кнопка "проверить настройки" может она чем поможет, посмотри у немцев там много инфы только google так коряво переводит :) -
нажимал я на нее только не чего не происходит
-
нажимал я на нее только не чего не происходит `
Есть помощь по драйверу. Правда на аглицком. https://github.com/ioBroker/ioBroker.mqtt#configuration -
читал, но не чего нового для себя не узнал
-
В режиме брокера именно такая структура и у меня, а вот как клиент получается так.
Как брокер локально по сети нормально все передается.
Решил попробовать через cloudmqtt.com и подключится как клиент и тут такие проблемы.
filename="3333.jpg" index="0">~~
может что тут нужно поставить? `
Может из за пробелов в именах переменных? -
имена менял, пробовал по разному.
И главное iobroker на сервер отправляет корректные данные.
лог с сервера
system/adapter/mqtt/0/alive true
system/adapter/mqtt/0/connected true
system/adapter/mqtt/0/memHeapUsed 8.25
system/adapter/mqtt/0/memHeapTotal 18.74
system/adapter/mqtt/0/memRss 27.73
system/adapter/mqtt/0/uptime 0
system/adapter/mqtt/upload 0
system/adapter/history/0/alive true
system/adapter/history/0/connected true
system/adapter/history/0/memHeapUsed 11.47
system/adapter/history/0/memHeapTotal 18.74
system/adapter/history/0/memRss 29.48
system/adapter/history/0/uptime 331
system/adapter/history/upload 0
system/host/Roman-PC/alive true
system/host/Roman-PC/load 0
system/host/Roman-PC/uptime 331
system/host/Roman-PC/memRss 104.86
system/host/Roman-PC/memHeapTotal 78.13
system/host/Roman-PC/memHeapUsed 54.86
system/host/Roman-PC/mem 56
system/adapter/admin/0/alive true
system/adapter/admin/0/connected true
system/adapter/admin/0/memHeapUsed 24.37
system/adapter/admin/0/memHeapTotal 55.52
system/adapter/admin/0/memRss 71.23
system/adapter/admin/0/uptime 331
-
Сегодня пробовал на другом сервисе (брокере)
Получается название всего топика присваивается как переменная.

-
имена менял, пробовал по разному.
И главное iobroker на сервер отправляет корректные данные.
лог с сервера
system/adapter/mqtt/0/alive true
system/adapter/mqtt/0/connected true
system/adapter/mqtt/0/memHeapUsed 8.25
system/adapter/mqtt/0/memHeapTotal 18.74
system/adapter/mqtt/0/memRss 27.73
system/adapter/mqtt/0/uptime 0
system/adapter/mqtt/upload 0
system/adapter/history/0/alive true
system/adapter/history/0/connected true
system/adapter/history/0/memHeapUsed 11.47
system/adapter/history/0/memHeapTotal 18.74
system/adapter/history/0/memRss 29.48
system/adapter/history/0/uptime 331
system/adapter/history/upload 0
system/host/Roman-PC/alive true
system/host/Roman-PC/load 0
system/host/Roman-PC/uptime 331
system/host/Roman-PC/memRss 104.86
system/host/Roman-PC/memHeapTotal 78.13
system/host/Roman-PC/memHeapUsed 54.86
system/host/Roman-PC/mem 56
system/adapter/admin/0/alive true
system/adapter/admin/0/connected true
system/adapter/admin/0/memHeapUsed 24.37
system/adapter/admin/0/memHeapTotal 55.52
system/adapter/admin/0/memRss 71.23
system/adapter/admin/0/uptime 331 `
Лог ниочем.Получается iobroker не может подписаться
-
Это лог с сервера CloudMQTT
Данные получены от ibrokera
На сколько я понимаю проблема в том, что iobroker не разбивает на топики полученные данные от CloudMQTT, а выдает все одной строкой.

Хотя во вкладке "состояния" значения отображаются.

А в обьектах нет

CloudMQTT
-
Сегодня пробовал на другом сервисе (брокере)
Получается название всего топика присваивается как переменная.
filename="3333.jpg" index="0">~~ `
Сегодня переписываю mqtt. Была полная путаница с конвертацией имён. -
Спасибо, что ответили, очень жду результата.
3514_alexa2_matthias.log
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden