NEWS
Драйвер Mqtt + Arduino
-
Я же тебе писал что проблема в клиенте а не в иоб и драйвере.
Чтобы было соединение клиент должен быть подписан на топики. `
Ниже код, который пытается подключиться, ошибка та же: Client error [test1/1]: Error: not implemented
#include <esp8266wifi.h> #include <wificlientsecure.h> #include <pubsubclient.h> const char* ssid = ""; const char*password = ""; const char *mqtt_server = "10.1.1.1"; const int mqtt_port = 1883; unsigned int send_interval = 10; unsigned long last_time = 0; char buff[20]; int pin13 = 13; WiFiClient ethClient; void callback(char* topic, byte* payload, unsigned int length); PubSubClient client(mqtt_server, mqtt_port, callback, ethClient); void callback(char* topic, byte* payload, unsigned int length) { Serial.println (""); Serial.println ("-------"); Serial.println ("New callback of MQTT-broker"); //преобразуем тему(topic) и значение (payload) в строку payload[length] = '\0'; String strTopic = String(topic); String strPayload = String((char*)payload); //Исследуем что "прилетело" от сервера по подписке: //Управление светодиодом if (strTopic == "test1/setdat") { if (strPayload == "off" || strPayload == "0" || strPayload == "false") digitalWrite(pin13, LOW); if (strPayload == "on" || strPayload == "1" || strPayload == "true") digitalWrite(pin13, HIGH); } Serial.print (strTopic); Serial.print (" "); Serial.println (strPayload); Serial.println ("-------"); Serial.println (""); } void wifiConnect() { WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(300); Serial.print("."); digitalWrite(pin13, 0); delay(300); digitalWrite(pin13, 1); delay(300); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); digitalWrite(pin13, 0); } void setup() { Serial.begin(115200); Serial.begin(115200); pinMode(pin13, OUTPUT); delay(10); wifiConnect(); } void loop() { //Если соединение MQTT неактивно, то пытаемся установить его и опубликовать/подписаться if (!client.connected()) { Serial.print("Connect to MQTT-boker... "); //Подключаемся и публикуемся/подписываемся if (client.connect("test1/1")) { Serial.println("success"); //Значение с датчиков client.publish("test1/1", "1"); //Подписываемся на переменную управления светодиодом client.subscribe("test1/setdata"); } else { //Если не подключились, ждем 10 секунд и пытаемся снова Serial.print("Failed, rc="); Serial.print(client.state()); Serial.println(" try again in 10 seconds"); delay (10000); } //Если соединение активно, то отправляем данные на сервер с заданным интервалом времени } else { if (millis() > (last_time + send_interval * 1000)) { last_time = millis(); client.publish("test1/1", "1"); } } //Проверка входящих соединений по подписке client.loop(); }</pubsubclient.h></wificlientsecure.h></esp8266wifi.h>
-
Я же тебе писал что проблема в клиенте а не в иоб и драйвере.
Чтобы было соединение клиент должен быть подписан на топики. `
Ниже код, который пытается подключиться, ошибка та же: Client error [test1/1]: Error: not implemented
#include <esp8266wifi.h> #include <wificlientsecure.h> #include <pubsubclient.h> const char* ssid = ""; const char*password = ""; const char *mqtt_server = "10.1.1.1"; const int mqtt_port = 1883; unsigned int send_interval = 10; unsigned long last_time = 0; char buff[20]; int pin13 = 13; WiFiClient ethClient; void callback(char* topic, byte* payload, unsigned int length); PubSubClient client(mqtt_server, mqtt_port, callback, ethClient); void callback(char* topic, byte* payload, unsigned int length) { Serial.println (""); Serial.println ("-------"); Serial.println ("New callback of MQTT-broker"); //преобразуем тему(topic) и значение (payload) в строку payload[length] = '\0'; String strTopic = String(topic); String strPayload = String((char*)payload); //Исследуем что "прилетело" от сервера по подписке: //Управление светодиодом if (strTopic == "test1/setdat") { if (strPayload == "off" || strPayload == "0" || strPayload == "false") digitalWrite(pin13, LOW); if (strPayload == "on" || strPayload == "1" || strPayload == "true") digitalWrite(pin13, HIGH); } Serial.print (strTopic); Serial.print (" "); Serial.println (strPayload); Serial.println ("-------"); Serial.println (""); } void wifiConnect() { WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(300); Serial.print("."); digitalWrite(pin13, 0); delay(300); digitalWrite(pin13, 1); delay(300); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); digitalWrite(pin13, 0); } void setup() { Serial.begin(115200); Serial.begin(115200); pinMode(pin13, OUTPUT); delay(10); wifiConnect(); } void loop() { //Если соединение MQTT неактивно, то пытаемся установить его и опубликовать/подписаться if (!client.connected()) { Serial.print("Connect to MQTT-boker... "); //Подключаемся и публикуемся/подписываемся if (client.connect("test1/1")) { Serial.println("success"); //Значение с датчиков client.publish("test1/1", "1"); //Подписываемся на переменную управления светодиодом client.subscribe("test1/setdata"); } else { //Если не подключились, ждем 10 секунд и пытаемся снова Serial.print("Failed, rc="); Serial.print(client.state()); Serial.println(" try again in 10 seconds"); delay (10000); } //Если соединение активно, то отправляем данные на сервер с заданным интервалом времени } else { if (millis() > (last_time + send_interval * 1000)) { last_time = millis(); client.publish("test1/1", "1"); } } //Проверка входящих соединений по подписке client.loop(); }</pubsubclient.h></wificlientsecure.h></esp8266wifi.h> ```` ` переведи драйвер в режим дебаг и скинь лог
-
Лог во вложении
3048_log.txt -
Лог во вложении `
Даже не знаю что может быть.Попробуй код изменить на :
if (client.connect("test")) { Serial.println("success"); //Значение с датчиков client.publish("test1/1", "1"); //Подписываемся на переменную управления светодиодом client.subscribe("test1/#"); }
-
Лог во вложении `
Даже не знаю что может быть.Попробуй код изменить на :
if (client.connect("test")) { Serial.println("success"); //Значение с датчиков client.publish("test1/1", "1"); //Подписываемся на переменную управления светодиодом client.subscribe("test1/#"); } ```` `
Все тоже самое
Меня больше всего смущает статус драйвера "Соединение с mqtt: нет", такое ощущение что mqtt не стартует.
-
Лог во вложении `
Даже не знаю что может быть.Попробуй код изменить на :
if (client.connect("test")) { Serial.println("success"); //Значение с датчиков client.publish("test1/1", "1"); //Подписываемся на переменную управления светодиодом client.subscribe("test1/#"); } ```` `
Все тоже самое
Меня больше всего смущает статус драйвера "Соединение с mqtt: нет", такое ощущение что mqtt не стартует. `
Это статус соединения с клиентами, т.е. если какой либо клиент будет подписан то будет зеленый -
А у тебя файрволов нет никаких? Порт больше никто не держит?
-
А у тебя файрволов нет никаких? Порт больше никто не держит? `
Фаервол отключен, телнет на порт проходит, порты пробовал менять - не помогает. -
А эта проблема может быть из за Node?
А то на инструкиции разные по установке Node:
-
А эта проблема может быть из за Node?
А то на инструкиции разные по установке Node:
https://github.com/ioBroker/ioBroker/wi … ые-системы
http://www.iobroker.net/docu/?page_id=3489&lang=ru ` а какая стоит? 4ю поставь.
-
А эта проблема может быть из за Node?
А то на инструкиции разные по установке Node:
https://github.com/ioBroker/ioBroker/wi … ые-системы
http://www.iobroker.net/docu/?page_id=3489&lang=ru
а какая стоит? 4ю поставь.
Показывает что стоит 0.12
Попробую установить 4 версию, по результатам отпишусь.
-
а какая стоит? 4ю поставь. `
Спасибо!Вроде заработало, по крайней мере линуксовый клиент тачал подключаться.
Вечером проверю с нормальным клиентом.
Дело было в Node.