NEWS
Драйвер Mqtt + Arduino
-
линк на скетч я указал выше. Или вот он: `
Пожалуйста, под спойлер.Да, библиотека походу "жирная".
Попробуйте библиотеки https://github.com/njh/NanodeMQTT.
Там и примеры есть публикации/подписки.
Если получится - отпишитесь, всем будет интересно узнать))
-
День добрый.
Сейчас озадачился автоматизацией управления отоплением своей двухкомнатной квартиры в многоэтажке (газовый котел BAXI). На данный момент собираюсь делать управление теплым полом (вкл/выкл), управление батареями (вкл/выкл), управление температурой системы отопления. В каждой комнате будет датчик температуры пола и воздуха (DS18B20). Будет измеряться уличная температура.
Сейчас изучаю arduino pro mini (5V 16MHz) и iskra neo (aka arduino leonardo). Ардуино и сервер будут располагаться рядом. Собираюсь начать изучать ioBroker.
Поделитесь вашим опытом каким образом мне лучше связать ардуино и ioBroker (firmata/mqtt или еще что-то)? Обязательно ли подсоединять ethernet shield или можно связать ардуинку и сервер через uart?
-
День добрый.
Сейчас озадачился автоматизацией управления отоплением своей двухкомнатной квартиры в многоэтажке (газовый котел BAXI). На данный момент собираюсь делать управление теплым полом (вкл/выкл), управление батареями (вкл/выкл), управление температурой системы отопления. В каждой комнате будет датчик температуры пола и воздуха (DS18B20). Будет измеряться уличная температура.
Сейчас изучаю arduino pro mini (5V 16MHz) и iskra neo (aka arduino leonardo). Ардуино и сервер будут располагаться рядом. Собираюсь начать изучать ioBroker.
Поделитесь вашим опытом каким образом мне лучше связать ардуино и ioBroker (firmata/mqtt или еще что-то)? Обязательно ли подсоединять ethernet shield или можно связать ардуинку и сервер через uart? `
А проводка протянута до радиаторов, до мест установки датчиков?Можно и по uart - есть примочка в node-red для управлния arduino по rs232, но я не ковырял, я вообще полностью откзался от node-red'а.
У себя использую arduino uno с ethernet'овсикими шилдами на чипе w5100 (Все из китая) были нюансы, но сейчас все работает норм. есть arduino pro mini - они отдают данные по uart(счетчики воды и электроэнергии) главным ардуинам а те в свою очередь все работают по mqtt. Сейчас работаю над pro mini + nrf24 которые будут стоят в стиральной машине, водонагревателе…. будут отдавать данные и управлять оборудованием по радиоканалу. В данный момент в квартире трудятся 9 ардуин).
Так что я бы советовал смотреть в строну mqtt, протокол быстрый и понятный.
282_expertenmodus.png -
А проводка протянута до радиаторов, до мест установки датчиков?
Можно и по uart - есть примочка в node-red для управлния arduino по rs232, но я не ковырял, я вообще полностью откзался от node-red'а.
У себя использую arduino uno с ethernet'овсикими шилдами на чипе w5100 (Все из китая) были нюансы, но сейчас все работает норм. есть arduino pro mini - они отдают данные по uart(счетчики воды и электроэнергии) главным ардуинам а те в свою очередь все работают по mqtt. Сейчас работаю над pro mini + nrf24 которые будут стоят в стиральной машине, водонагревателе…. будут отдавать данные и управлять оборудованием по радиоканалу. В данный момент в квартире трудятся 9 ардуин).
Так что я бы советовал смотреть в строну mqtt, протокол быстрый и понятный. `
У меня проводка протянута только к датчикам температуры по квартире и на коллекторах,а так же к герконам на окнах (витая пара FTP). К радиаторам к сожалению нет проводки. Да, читал про резисторы на ethernet шилдах. Спасибо за информацию. Тогда сначала освоюсь с установкой ioBroker, а потом уже буду изучать mqtt.
-
У меня проводка протянута только к датчикам температуры по квартире и на коллекторах,а так же к герконам на окнах (витая пара FTP). К радиаторам к сожалению нет проводки. Да, читал про резисторы на ethernet шилдах. Спасибо за информацию. Тогда сначала освоюсь с установкой ioBroker, а потом уже буду изучать mqtt. `
У меня к радиаторам есть проводка, пока только датчики температуры стоят ds'ки. Планирую покупать клапана eQ-3, отопление центральное, так что только регулировать на самих радиаторах. Теплых полов нет и не нужны они, единственный будет на балконе, пока не думал как им управлять но скорее всего заводским контроллером к которому пригамырить arduinkу). -
Так вот: Китайцы видимо не понимают разницы в маркировке чип резисторов между 510 и 511 либо не нашлось под рукой 510 и подумали что 511 это одно и тоже ведь 1 на конце добавляет 0 т.е. получается те же 510. Если внимательно посмотреть справочники, то там четко указано, что 510 это 51 Ом, а 511 это уже 510 Ом. `
Только что получил на почте W5100. Тоже стоит резистор 511
-
Подскажите, что-то я запутался между ардуино и брокером… Если я планирую измерять температуру (5-10 мест), давление, освещенность... мне лучше заводить датчики на ардуино и потом стыковать к брокеру, или (если установить брокер на odroid/кубик) завести все датчики на odroid/кубик и в ардуино вообще отпадает необходимость?
-
Подскажите, что-то я запутался между ардуино и брокером… Если я планирую измерять температуру (5-10 мест), давление, освещенность... мне лучше заводить датчики на ардуино и потом стыковать к брокеру, или (если установить брокер на odroid/кубик) завести все датчики на odroid/кубик и в ардуино вообще отпадает необходимость? `
Оба варианта работоспособны…С помощью ардуины можно делать более распределенные системы. Т.е. у меня к примеру одна ардуина отвечает за охрану/пожарку и передает данные на сервер. Вторая ардуина стоит на балконе и отправляет данные о погоде на сервер, включая датчики внутри квартиры. Была еще третья - занималась освещением, но я её "выдернул" под другой проект. И кстати - можно даже несколько плат с ioBroker объединить в пул - для обмена данными и работе на общую визуализацию...
Можно и на саму плату с помощью тех же GPIO повесить все датчики и исполнительные механизмы. Только если зависнет сервер - то пропадет все... У меня если зависнет сервак - то ардуины продолжат обрабатывать данные (хоть и не будут передавать на сервер) и работать по заложенному алгоритму.
-
Спасибо!
Стало меньше мусора в голове
-
Можно ли организовать работу с одной переменной (без IN и OUT) ? У меня контролер ловит свои же сообщения и отрабатывает …. это глюк или все как положено ?
как в iobroker организовать работу когда лампочка в vis отображает значение пришедшее в OUT а упровляющий надо посылать в IN ?
5076_2018_09_21_19_35_19_window.png -
кстати как убрать приставку из топика "mqtt.0." которую обязательно стал добавлять mqqt driver iobroker
-
кстати как убрать приставку из топика "mqtt.0." которую обязательно стал добавлять mqqt driver iobroker `
А зачем? а если у тебя будет два драйвера MQTT? (второй получится mqtt.1.) и в объектах проще искать. -
чтобы меньше в ардуино писать
-
чтобы меньше в ардуино писать `
:shock: А что ты туда пишешь?У меня так
client.publish("myhome/NRF/Vodonagrevatel/btn_Temp_Selector", "0"); client.publish("myhome/NRF/Vodonagrevatel/Status", "0"); client.subscribe("myhome/NRF/#");
-
а сообщения из иоброкера выглядят так
mqtt/0/kv7/kitchen/1/rel1
и mqtt/0 малину портит
-
а сообщения из иоброкера выглядят так
mqtt/0/kv7/kitchen/1/rel1
и mqtt/0 малину портит `
Что значит из брокера? В скриптах? -
по протоколу MQTT топики выглядят так mqtt/0/kv7/kitchen/1/rel1
-
по протоколу MQTT топики выглядят так mqtt/0/kv7/kitchen/1/rel1 `
А смысл их смотреть? Подписываешся на них и все какая разница что там в протоколе -
по протоколу MQTT топики выглядят так mqtt/0/kv7/kitchen/1/rel1
А смысл их смотреть? Подписываешся на них и все какая разница что там в протоколе
Может автор имеет ввиду тяжело парсить что прилетело от сервера?У меня callback примерно такой:
!
//Функция обработки входящих соединений - прием данных по подписке 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 == "PLC31_OnLight/mode") { if (strPayload == "standby") PLC_mode=MODE_STANDBY; else if (strPayload == "active") PLC_mode=MODE_ACTIVE; else if (strPayload == "deactivation") PLC_mode=MODE_DEACTIVATION; } //Изменение времени таймаута if (strTopic == "PLC31_OnLight/timeout") { timeout = strPayload.toInt(); } //Управление реле стробоскопа if (strTopic == "common/PLC38_PLC31_stroboRelay") { if (strPayload == "off" || strPayload == "0" || strPayload == "false") digitalWrite(stroboRelay_pin, HIGH); else if (strPayload == "on" || strPayload == "1" || strPayload == "true") digitalWrite(stroboRelay_pin, LOW); } Serial.print (strTopic); Serial.print (" "); Serial.println (strPayload); Serial.println ("-------"); Serial.println (""); } !
-
по протоколу MQTT топики выглядят так mqtt/0/kv7/kitchen/1/rel1
А смысл их смотреть? Подписываешся на них и все какая разница что там в протоколе
Может автор имеет ввиду тяжело парсить что прилетело от сервера?У меня callback примерно такой:
!
//Функция обработки входящих соединений - прием данных по подписке 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 == "PLC31_OnLight/mode") { if (strPayload == "standby") PLC_mode=MODE_STANDBY; else if (strPayload == "active") PLC_mode=MODE_ACTIVE; else if (strPayload == "deactivation") PLC_mode=MODE_DEACTIVATION; } //Изменение времени таймаута if (strTopic == "PLC31_OnLight/timeout") { timeout = strPayload.toInt(); } //Управление реле стробоскопа if (strTopic == "common/PLC38_PLC31_stroboRelay") { if (strPayload == "off" || strPayload == "0" || strPayload == "false") digitalWrite(stroboRelay_pin, HIGH); else if (strPayload == "on" || strPayload == "1" || strPayload == "true") digitalWrite(stroboRelay_pin, LOW); } Serial.print (strTopic); Serial.print (" "); Serial.println (strPayload); Serial.println ("-------"); Serial.println (""); } !
`
Ну собственно аналогично://////////////////////////////////////////////////////////////////////////// void callback(char* topic, byte* payload, unsigned int length) { payload[length] = '\0'; String strTopic = String(topic); String strPayload = String((char*)payload); callback_iobroker(strTopic, strPayload); }
void callback_iobroker(String strTopic, String strPayload){ if (strTopic == "myhome/Mother/DomofonOpen") { //Открыть домофон if (strPayload == "0") digitalWrite(6, 0); else if (strPayload == "1") { digitalWrite(7, HIGH); delay(1000); digitalWrite(6, HIGH); delay(1500); digitalWrite(6, LOW); delay(500); digitalWrite(7, LOW); client.publish("myhome/Mother/DomofonOpen", "0"); } } if (strTopic == "myhome/Mother/DomofonUptube") { //Снять турбку домофона if (strPayload == "0") digitalWrite(7, 0); else if (strPayload == "1") digitalWrite(7, 1); } if (strTopic == "myhome/Mother/Change_Electro_counter"){ Serial.print("CHG"); Serial.print(strPayload); delay(10); } if (strTopic == "myhome/Mother/Dimmer_Button") { //Подсветка выключателей dimm = strPayload.toInt(); if (dimm >= 0 && dimm <= 255){ analogWrite(5, dimm); } } }