NEWS
Драйвер Mqtt + Arduino
-
Ну варианты разные есть, например брокер будет слать строку клинету с переменной задержки, думаю получить клиенту ее и распарсить нет проблем… `
Если ioBroker как MQTT-брокер, но он отправит только в 2 вариантах:1. клиент подключен, подписан на переменную и она изменилась (и при условии ack=false),
2. клиент только что подключился и подписан на эту переменную - брокер отправит её значение (если установлена в настройках галочка "Выдавать собственные значения при старте")
Если я правильно все понял. :oops:
@instalator:При перезагрузке ардуино переменные сбрасываются, надо либо с кодом помудрить либо как то отсекать такие сбросы при инициализации на стороне брокера чтобы в историю эти данные не попадали. `
В скетче надо составлять условия и публиковать только достоверные данные.Я сейчас занимаюсь отладкой скетча, скоро выложу…
-
В скетче надо составлять условия и публиковать только достоверные данные.
Я сейчас занимаюсь отладкой скетча, скоро выложу… `
Посмотрим на твое решение) Я уже два клиента практически допилил
1547_wohnung.jpg -
Как бы удалить левые данные из объектов mqtt? переменные удалил а папки немогу
-
Как бы удалить левые данные из объектов mqtt? переменные удалил а папки немогу `
Хмм, я удаляю все топики из папки и она сама исчезает) -
Как бы удалить левые данные из объектов mqtt? переменные удалил а папки немогу
Хмм, я удаляю все топики из папки и она сама исчезает)
Точно! Спасибо. -
Погонял у себя систему пару ночей, вроде больше не сбоит.
Датчики реальные не стал подключать, просто передавал данные АЦП по портам А0, А1, А2. Вставил в них проводочки (антеннки) чтобы показания "прыгали".
Настройки адаптера прикрепил.
Скетч прикрепил, данные в ioBroker появятся автоматически, надо только поменять настройки в тексте программы.
BlueFox, немцам там тоже закинь удочку, пускай протестируют…
Сейчас хочу попробовать поуправлять дискреткой.
50_pic_121.jpg
50_pic_120.jpg
50_plc1_sendvaluesensors.7z
50_plc1_sendvaluesensors_eng.7z -
Меня вот больше беспокоит, при подключении клиента как данные актуальные передать, чтоб брокер не скидывал их в "0" `
Можешь привести лог, когда переменные сбрасываются… Не могут они сбрасываться. Если переменная уже существует, то в неё запишется принятое от клиента значение (значит клиент сам сбрасывает на ноль). Если переменная не существует и значение клиент не передал, но подписаться на неё хочет, то создаться переменная со значением "null" как строка.Но это произойдёт только один раз и только если клиент никакого значения не предоставил.
"null" можно элементарно отсечь на клиенте.
-
Меня вот больше беспокоит, при подключении клиента как данные актуальные передать, чтоб брокер не скидывал их в "0" `
Можешь привести лог, когда переменные сбрасываются… Не могут они сбрасываться. Если переменная уже существует, то в неё запишется принятое от клиента значение (значит клиент сам сбрасывает на ноль). Если переменная не существует и значение клиент не передал, но подписаться на неё хочет, то создаться переменная со значением "null" как строка.Но это произойдёт только один раз и только если клиент никакого значения не предоставил.
"null" можно элементарно отсечь на клиенте. `
Ниже сообщение юзера instalator (15.05.2015, 19:09) что сбрасываются переменные при рестарте ардуины.Предположу что при инициализации переменных в скетче они устанавливаются в ноль и публикуются не первой итерации (цикле), затем цикл проходит место актуализации переменных и данные идут нормальные.
-
Погонял у себя систему пару ночей, вроде больше не сбоит.
Датчики реальные не стал подключать, просто передавал данные АЦП по портам А0, А1, А2. Вставил в них проводочки (антеннки) чтобы показания "прыгали".
Настройки адаптера прикрепил.
Скетч прикрепил, данные в ioBroker появятся автоматически, надо только поменять настройки в тексте программы.
BlueFox, немцам там тоже закинь удочку, пускай протестируют…
Сейчас хочу попробовать поуправлять дискреткой. `
Супер. Только можно подправить две вещи:
! ````
/*
Arduino controller, MQTT-client for ioBroker. Use MQTT Adapter as server in ioBroker (at least 0.2.4)
IP address: 192.168.69.71
Platform: Arduino UNO R3 + EthernetShield W5100
IDE: 1.0.5-r2
Date: 15.05.2015
Version: 0.1
License: MIT, Copyright 2015 electric69
It is test sketch. Following analog inputs will be polled: pinA0, pinA1, pinA2. Values have type int (Analog from 0...1023).
Client ID, and root name "arduinoPLC71".
Following topics will be created automatically in ioBorker by start:
1. "arduinoPLC71/status" - status of arduino controller (online, error)
2. "arduinoPLC71/pollTimer" - send/publish intervall (client is subscribed on this value)
3. "arduinoPLC71/sensorA0/value" - group sensorA0, measurement result
4. "arduinoPLC71/sensorA0/status" - group sensorA0, sensor state (ОК, error)
5. analogically for groups sensorA1 and sensorA2.! After the controller is started following happens:
- Set the MAC and static IP of own ethernet driver
При старте настраивается сетевое соединение (MAC-адрес и статический IP адрес), - Init of serial port for output of debug information
! During main loop:
- If not connected, try to connect to MQTT Broker
- If connected poll every X seconds the analog ports and publish them after that
- If the analog port data was read with errors, it (or error code) will be reported in the topic "arduinoPLC71/sensorA0/status" for group sensorA0. Accordingly for other groups.
**/
//------------------------------------------ Libraries ------------------------------------------//
//Use libraries
#include <spi.h>#include <ethernet.h>#include <pubsubclient.h>//https://github.com/knolleary/pubsubclient
//---------------------------------------- End libraries ----------------------------------------//
! //------------------------------------------- Ethernet ------------------------------------------//
//Global constants for network connection: MAC, Own IP, MQTT Broker IP
byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0x71 };
byte mqttserver[] = { 192, 168, 69, 51 };
byte ip[] = { 192, 168, 69, 71 };
EthernetClient ethClient;
PubSubClient client(mqttserver, 1883, callback, ethClient);
//----------------------------------------- End ethernet ----------------------------------------//
! //------------------------------------------- Sensors -------------------------------------------//
int analogPinA0 = 0;
int analogPinA1 = 1;
int analogPinA2 = 2;
int SensorA0 = 0;
int SensorA1 = 0;
int SensorA2 = 0;
char buff[20];
unsigned long lastTime = 0;
unsigned long poolTime = 5; // Values publish interval: by default 5 seconds
//----------------------------------------- End Sensors -----------------------------------------//
! //###############################################################################################//
//########################################## Functions ##########################################//
//###############################################################################################//
! //------------------------------------------- Callback -----------------------------------------//
// process publishes from MQTT broker
void callback(char* topic, byte* payload, unsigned int length) {
Serial.println ("");
Serial.println ("-------");
Serial.println ("New callback of MQTT-broker");
// Convert name(topic) and value (payload) to string
payload[length] = '\0';
String strTopic = String(topic);
String strPayload = String((char*)payload);
// Ignore "null" values from broker
if (strPayload == "null") return;
//Convert string to integer
poolTime = strPayload.toInt();
Serial.print (strTopic);
Serial.print (" ");
Serial.println (poolTime);
Serial.println ("-------");
Serial.println ("");
}
//----------------------------------------- End callback ---------------------------------------//
! //------------------------------------------ Void setup ----------------------------------------//
void setup() {
Serial.begin(9600);
Serial.println("Start mqtt-client controller arduinoPLC7...");
//стартуем сетевое подключение
Ethernet.begin(mac, ip);
Serial.print("PLC's IP: ");
Serial.println(Ethernet.localIP());
}
//---------------------------------------- End void setup --------------------------------------//
! //------------------------------------------ Void loop -----------------------------------------//
void loop() {
client.loop(); //check publishes from broker
// If no connection
if (!client.connected()) {
Serial.print("Connect to MQTT-boker... ");
//Try to connect
if (client.connect("arduinoPLC71")) {
Serial.println("success");
client.publish("arduinoPLC71/status","online");
client.subscribe("arduinoPLC71/pollTimer");
// ------------------------ CHANGED START -------------------------
// Force send of values to broker
lastTime = 0;
// ------------------------ CHANGED END ---------------------------
}
else {
Serial.println("failed!");
}
} else
//If connected
//Read every "poolTime" seconds the values and send to broker
if(!lastTime || millis() > (lastTime + poolTime*1000)) {
lastTime = millis();
Serial.println(" ");
//read the data and publish it
SensorA0 = analogRead(analogPinA0);
sprintf(buff,"%d",SensorA0); //if float dtostrf(SensorA0, 5, 2, buff);
Serial.print("Publish to MQTT-broker value sensor A0 is: ");
Serial.println(buff);
client.publish("arduinoPLC71/sensorA0/value",buff);
client.publish("arduinoPLC71/sensorA0/status","OK");
SensorA1 = analogRead(analogPinA1);
sprintf(buff,"%d",SensorA1); //if float dtostrf(SensorA0, 5, 2, buff);
Serial.print("Publish to MQTT-broker value sensor A1 is: ");
Serial.println(buff);
client.publish("arduinoPLC71/sensorA1/value",buff);
client.publish("arduinoPLC71/sensorA1/status","OK");
SensorA2 = analogRead(analogPinA2);
sprintf(buff,"%d",SensorA2); //if float dtostrf(SensorA0, 5, 2, buff);
Serial.print("Publish to MQTT-broker value sensor A2 is: ");
Serial.println(buff);
client.publish("arduinoPLC71/sensorA2/value",buff);
client.publish("arduinoPLC71/sensorA2/status","OK");
//--------
}
}
//---------------------------------------- End void loop ---------------------------------------//</pubsubclient.h></ethernet.h></spi.h> - Set the MAC and static IP of own ethernet driver
-
Погонял у себя систему пару ночей, вроде больше не сбоит.
Датчики реальные не стал подключать, просто передавал данные АЦП по портам А0, А1, А2. Вставил в них проводочки (антеннки) чтобы показания "прыгали".
Настройки адаптера прикрепил.
Скетч прикрепил, данные в ioBroker появятся автоматически, надо только поменять настройки в тексте программы.
BlueFox, немцам там тоже закинь удочку, пускай протестируют…
Сейчас хочу попробовать поуправлять дискреткой. `
У меня с аналоговых тоже отдаются нормальные показания, только вот с датчика DHT22 при первой отправке улетают "0"Дискретка у меня вроде работает норм, управление сервоприводом наладил. Перепрошил свой контроллер света вроде работает даже постабильнее и с меньшими задержками.
Спасибо что подтолкнули в сторону этого протокола
Пожайлуй тоже выкладу свой г…код))
266_bedroom_mqtt.rar -
После обновлнеия ничего не работает. Верните прошлую версия все отлично работало
-
После обновлнеия ничего не работает. Верните прошлую версия все отлично работало `
Не может ВСЁ не работать. Я поменял всего 2 строчки.-
Если маска не задана, то выдавать все состояния
-
Поменял имена топиков
Можно посмотреть здесь: https://github.com/ioBroker/ioBroker.mq … 631839fa1a
-
-
После обновлнеия ничего не работает. Верните прошлую версия все отлично работало `
Не может ВСЁ не работать. Я поменял всего 2 строчки.-
Если маска не задана, то выдавать все состояния
-
Поменял имена топиков
Можно посмотреть здесь: https://github.com/ioBroker/ioBroker.mq … 631839fa1a `
Раньше такая строка отправлялась от брокера: myhome/Bedroom/ServoСейчас: mqtt/0/myhome/Bedroom/Servo
Предлагаю вернуть как было
Я так понял префикс добавили, може предусмтореть настройку без префикса)
-
-
Попробуй снова
-
-
Да. Так и есть.
-
Отключил клиентов, подключил не все подписываются, уже е службу перезапускал и ардуину - не подписывается.
И вообще как то тяжковато подписка повторяется после рестарта драйвера в брокере
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 warn [undefined] Error: read ECONNRESET
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
! mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
266_666666.png -
> mqtt-0 2015-05-16 17:07:55 info Client [undefined] closed
Ну знаешь "undefined" как то подозрительно выглядит. -
Столкнулся с проблемкой, Если до подписи клиентом не отправить значение то значения скидываются на брокере в 0
Походу кеш браузера был(((
-
Навалился непонятно откуда мусор:
Как его теперь удалить?
266_32432423423423.png