NEWS
Драйвер Mqtt + Arduino
-
Ругается на последнюю строчку если убрать } работает. Как бы ещё что бы одна цифра после запятой была. За ранние спасибо `
on({id: 'owfs.0.wires.akum_heat_1_1', change: 'any'}, function (obj) { setState('mqtt.0.myhome.Boiler_room.Temp_akum_heat_1_1', parseFloat(obj.newState.val).toFixed(1)); });
как то так
-
Ляпота
!
Огромное спасибо instalator -
Выложу свой код для Mqtt+Arduino+ENC28J60+LCD(i2c). Суть такова Arduino публикует топики и на них подписывается. На сервере работает javascript который записывает с драйвера owfs значение в топики, а Arduino их читает и отображает на LCD.
1. Топики публикую " " без нулей, это нечего?
2. Довольно часто сервер теряет связь с Arduino, как можно сделать чтобы Arduino реконектнулась (если на Arduino нажать ресет всё работает дальше)?
#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/" 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/#"); } } }</liquidcrystal_i2c.h></wire.h></pubsubclient.h></uipethernet.h></spi.h>
И скрипт
on({id: 'owfs.0.wires.akum_heat_1_1', change: 'any'}, function (obj) { setState('mqtt.0.myhome.Boiler_room.Temp_accum_tanks_1_1', parseFloat(obj.newState.val).toFixed(1)); }); on({id: 'owfs.0.wires.akum_heat_1_2', change: 'any'}, function (obj) { setState('mqtt.0.myhome.Boiler_room.Temp_accum_tanks_1_2', parseFloat(obj.newState.val).toFixed(1)); }); on({id: 'owfs.0.wires.akum_heat_1_3', change: 'any'}, function (obj) { setState('mqtt.0.myhome.Boiler_room.Temp_accum_tanks_1_3', parseFloat(obj.newState.val).toFixed(1)); }); on({id: 'owfs.0.wires.akum_heat_1_4', change: 'any'}, function (obj) { setState('mqtt.0.myhome.Boiler_room.Temp_accum_tanks_1_4', parseFloat(obj.newState.val).toFixed(1)); });
-
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 часов пропала связь `
Когда связь пропадает ардуина пингуется вообще? Езернет шилд какой пользуешь? -
Увы результата недал, гдето через 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 не может подписаться