Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Русский
  3. ioBroker
  4. ioBroker драйвера
  5. Драйвер Mqtt + Arduino

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.0k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.0k

Драйвер Mqtt + Arduino

Драйвер Mqtt + Arduino

Scheduled Pinned Locked Moved ioBroker драйвера
244 Posts 18 Posters 76.4k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • E Offline
    E Offline
    electric69
    wrote on last edited by
    #50

    @instalator:

    А причем тут протокол? Речь про драйвер `
    Эээ, драйвер именно который адаптер MQTT в среде ioBroker?

    Действительно, причем тут MQTT :?
    @instalator:

    можнос делать визуальную настройку для каких id задать время квантования (опроса) `
    В каком смысле id? В MQTT есть топики, паблиши и подписки.

    З.Ы. Я маленько не понял вашу идею))

    1 Reply Last reply
    0
    • I Offline
      I Offline
      instalator
      wrote on last edited by
      #51

      @electric69:

      @instalator:

      можнос делать визуальную настройку для каких id задать время квантования (опроса) `
      В каком смысле id? В MQTT есть топики, паблиши и подписки.

      З.Ы. Я маленько не понял вашу идею)) `
      Ну варианты разные есть, например брокер будет слать строку клинету с переменной задержки, думаю получить клиенту ее и распарсить нет проблем…

      Высокий уровень Децибел вреден для здоровья!

      http://blog.instalator.ru/

      1 Reply Last reply
      0
      • I Offline
        I Offline
        instalator
        wrote on last edited by
        #52

        Меня вот больше беспокоит, при подключении клиента как данные актуальные передать, чтоб брокер не скидывал их в "0"

        Высокий уровень Децибел вреден для здоровья!

        http://blog.instalator.ru/

        1 Reply Last reply
        0
        • I Offline
          I Offline
          instalator
          wrote on last edited by
          #53

          Сделал вот так себе:
          266_44444.png
          При перезагрузке ардуино переменные сбрасываются, надо либо с кодом помудрить либо как то отсекать такие сбросы при инициализации на стороне брокера чтобы в историю эти данные не попадали.

          Высокий уровень Децибел вреден для здоровья!

          http://blog.instalator.ru/

          1 Reply Last reply
          0
          • E Offline
            E Offline
            electric69
            wrote on last edited by
            #54

            @instalator:

            Ну варианты разные есть, например брокер будет слать строку клинету с переменной задержки, думаю получить клиенту ее и распарсить нет проблем… `
            Если ioBroker как MQTT-брокер, но он отправит только в 2 вариантах:

            1. клиент подключен, подписан на переменную и она изменилась (и при условии ack=false),

            2. клиент только что подключился и подписан на эту переменную - брокер отправит её значение (если установлена в настройках галочка "Выдавать собственные значения при старте")

            Если я правильно все понял. :oops:
            @instalator:

            При перезагрузке ардуино переменные сбрасываются, надо либо с кодом помудрить либо как то отсекать такие сбросы при инициализации на стороне брокера чтобы в историю эти данные не попадали. `
            В скетче надо составлять условия и публиковать только достоверные данные.

            Я сейчас занимаюсь отладкой скетча, скоро выложу…

            1 Reply Last reply
            0
            • I Offline
              I Offline
              instalator
              wrote on last edited by
              #55

              @electric69:

              В скетче надо составлять условия и публиковать только достоверные данные.

              Я сейчас занимаюсь отладкой скетча, скоро выложу… `
              Посмотрим на твое решение) Я уже два клиента практически допилил
              1547_wohnung.jpg

              Высокий уровень Децибел вреден для здоровья!

              http://blog.instalator.ru/

              1 Reply Last reply
              0
              • I Offline
                I Offline
                instalator
                wrote on last edited by
                #56

                Как бы удалить левые данные из объектов mqtt? переменные удалил а папки немогу

                Высокий уровень Децибел вреден для здоровья!

                http://blog.instalator.ru/

                1 Reply Last reply
                0
                • E Offline
                  E Offline
                  electric69
                  wrote on last edited by
                  #57

                  @instalator:

                  Как бы удалить левые данные из объектов mqtt? переменные удалил а папки немогу `
                  Хмм, я удаляю все топики из папки и она сама исчезает)

                  1 Reply Last reply
                  0
                  • I Offline
                    I Offline
                    instalator
                    wrote on last edited by
                    #58

                    @electric69:

                    @instalator:

                    Как бы удалить левые данные из объектов mqtt? переменные удалил а папки немогу Хмм, я удаляю все топики из папки и она сама исчезает)
                    Точно! Спасибо.

                    Высокий уровень Децибел вреден для здоровья!

                    http://blog.instalator.ru/

                    1 Reply Last reply
                    0
                    • E Offline
                      E Offline
                      electric69
                      wrote on last edited by
                      #59

                      Погонял у себя систему пару ночей, вроде больше не сбоит.

                      Датчики реальные не стал подключать, просто передавал данные АЦП по портам А0, А1, А2. Вставил в них проводочки (антеннки) чтобы показания "прыгали".

                      Настройки адаптера прикрепил.

                      Скетч прикрепил, данные в ioBroker появятся автоматически, надо только поменять настройки в тексте программы.

                      BlueFox, немцам там тоже закинь удочку, пускай протестируют…

                      Сейчас хочу попробовать поуправлять дискреткой.
                      50_pic_121.jpg
                      50_pic_120.jpg
                      50_plc1_sendvaluesensors.7z
                      50_plc1_sendvaluesensors_eng.7z

                      1 Reply Last reply
                      0
                      • BluefoxB Offline
                        BluefoxB Offline
                        Bluefox
                        wrote on last edited by
                        #60

                        @instalator:

                        Меня вот больше беспокоит, при подключении клиента как данные актуальные передать, чтоб брокер не скидывал их в "0" `
                        Можешь привести лог, когда переменные сбрасываются… Не могут они сбрасываться. Если переменная уже существует, то в неё запишется принятое от клиента значение (значит клиент сам сбрасывает на ноль). Если переменная не существует и значение клиент не передал, но подписаться на неё хочет, то создаться переменная со значением "null" как строка.

                        Но это произойдёт только один раз и только если клиент никакого значения не предоставил.

                        "null" можно элементарно отсечь на клиенте.

                        1 Reply Last reply
                        0
                        • E Offline
                          E Offline
                          electric69
                          wrote on last edited by
                          #61

                          @Bluefox:

                          @instalator:

                          Меня вот больше беспокоит, при подключении клиента как данные актуальные передать, чтоб брокер не скидывал их в "0" `
                          Можешь привести лог, когда переменные сбрасываются… Не могут они сбрасываться. Если переменная уже существует, то в неё запишется принятое от клиента значение (значит клиент сам сбрасывает на ноль). Если переменная не существует и значение клиент не передал, но подписаться на неё хочет, то создаться переменная со значением "null" как строка.

                          Но это произойдёт только один раз и только если клиент никакого значения не предоставил.

                          "null" можно элементарно отсечь на клиенте. `
                          Ниже сообщение юзера instalator (15.05.2015, 19:09) что сбрасываются переменные при рестарте ардуины.

                          Предположу что при инициализации переменных в скетче они устанавливаются в ноль и публикуются не первой итерации (цикле), затем цикл проходит место актуализации переменных и данные идут нормальные.

                          1 Reply Last reply
                          0
                          • BluefoxB Offline
                            BluefoxB Offline
                            Bluefox
                            wrote on last edited by
                            #62

                            @electric69:

                            Погонял у себя систему пару ночей, вроде больше не сбоит.

                            Датчики реальные не стал подключать, просто передавал данные АЦП по портам А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>

                            1 Reply Last reply
                            0
                            • I Offline
                              I Offline
                              instalator
                              wrote on last edited by
                              #63

                              @electric69:

                              Погонял у себя систему пару ночей, вроде больше не сбоит.

                              Датчики реальные не стал подключать, просто передавал данные АЦП по портам А0, А1, А2. Вставил в них проводочки (антеннки) чтобы показания "прыгали".

                              Настройки адаптера прикрепил.

                              Скетч прикрепил, данные в ioBroker появятся автоматически, надо только поменять настройки в тексте программы.

                              BlueFox, немцам там тоже закинь удочку, пускай протестируют…

                              Сейчас хочу попробовать поуправлять дискреткой. `
                              У меня с аналоговых тоже отдаются нормальные показания, только вот с датчика DHT22 при первой отправке улетают "0"

                              Дискретка у меня вроде работает норм, управление сервоприводом наладил. Перепрошил свой контроллер света вроде работает даже постабильнее и с меньшими задержками.

                              Спасибо что подтолкнули в сторону этого протокола

                              Пожайлуй тоже выкладу свой г…код))
                              266_bedroom_mqtt.rar

                              Высокий уровень Децибел вреден для здоровья!

                              http://blog.instalator.ru/

                              1 Reply Last reply
                              0
                              • I Offline
                                I Offline
                                instalator
                                wrote on last edited by
                                #64

                                После обновлнеия ничего не работает. Верните прошлую версия все отлично работало

                                Высокий уровень Децибел вреден для здоровья!

                                http://blog.instalator.ru/

                                1 Reply Last reply
                                0
                                • BluefoxB Offline
                                  BluefoxB Offline
                                  Bluefox
                                  wrote on last edited by
                                  #65

                                  @instalator:

                                  После обновлнеия ничего не работает. Верните прошлую версия все отлично работало `
                                  Не может ВСЁ не работать. Я поменял всего 2 строчки.

                                  • Если маска не задана, то выдавать все состояния

                                  • Поменял имена топиков

                                  Можно посмотреть здесь: https://github.com/ioBroker/ioBroker.mq … 631839fa1a

                                  1 Reply Last reply
                                  0
                                  • I Offline
                                    I Offline
                                    instalator
                                    wrote on last edited by
                                    #66

                                    @Bluefox:

                                    @instalator:

                                    После обновлнеия ничего не работает. Верните прошлую версия все отлично работало `
                                    Не может ВСЁ не работать. Я поменял всего 2 строчки.

                                    • Если маска не задана, то выдавать все состояния

                                    • Поменял имена топиков

                                    Можно посмотреть здесь: https://github.com/ioBroker/ioBroker.mq … 631839fa1a `
                                    Раньше такая строка отправлялась от брокера: myhome/Bedroom/Servo

                                    Сейчас: mqtt/0/myhome/Bedroom/Servo

                                    Предлагаю вернуть как было

                                    Я так понял префикс добавили, може предусмтореть настройку без префикса)

                                    Высокий уровень Децибел вреден для здоровья!

                                    http://blog.instalator.ru/

                                    1 Reply Last reply
                                    0
                                    • BluefoxB Offline
                                      BluefoxB Offline
                                      Bluefox
                                      wrote on last edited by
                                      #67

                                      Попробуй снова

                                      1 Reply Last reply
                                      0
                                      • I Offline
                                        I Offline
                                        instalator
                                        wrote on last edited by
                                        #68

                                        @Bluefox:

                                        Попробуй снова `
                                        Работает.

                                        Получается сейчас если префикс не указан то без него шлется?

                                        Высокий уровень Децибел вреден для здоровья!

                                        http://blog.instalator.ru/

                                        1 Reply Last reply
                                        0
                                        • BluefoxB Offline
                                          BluefoxB Offline
                                          Bluefox
                                          wrote on last edited by
                                          #69

                                          Да. Так и есть.

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          603

                                          Online

                                          32.4k

                                          Users

                                          81.3k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe