Skip to content
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker 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.1k

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

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

Драйвер Mqtt + Arduino

Geplant Angeheftet Gesperrt Verschoben ioBroker драйвера
244 Beiträge 18 Kommentatoren 76.4k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • E Offline
    E Offline
    electric69
    schrieb am zuletzt editiert von
    #48

    @instalator:

    Добавить в настройки Настройка времени квантования, если тебе нужен этот интервал `
    Ммм, сам протокол MQTT не подразумевает такой настройки вроде, тем более это время может быть разное для разных клиентов, для каких то вообще нет необходимости в этой настройке…

    1 Antwort Letzte Antwort
    0
    • I Offline
      I Offline
      instalator
      schrieb am zuletzt editiert von
      #49

      @electric69:

      @instalator:

      Добавить в настройки Настройка времени квантования, если тебе нужен этот интервал Ммм, сам протокол MQTT не подразумевает такой настройки вроде, тем более это время может быть разное для разных клиентов, для каких то вообще нет необходимости в этой настройке…

      А причем тут протокол? Речь про драйвер, можнос делать визуальную настройку для каких id задать время квантования (опроса)

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

      http://blog.instalator.ru/

      1 Antwort Letzte Antwort
      0
      • E Offline
        E Offline
        electric69
        schrieb am zuletzt editiert von
        #50

        @instalator:

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

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

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

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

        1 Antwort Letzte Antwort
        0
        • I Offline
          I Offline
          instalator
          schrieb am zuletzt editiert von
          #51

          @electric69:

          @instalator:

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

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

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

          http://blog.instalator.ru/

          1 Antwort Letzte Antwort
          0
          • I Offline
            I Offline
            instalator
            schrieb am zuletzt editiert von
            #52

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

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

            http://blog.instalator.ru/

            1 Antwort Letzte Antwort
            0
            • I Offline
              I Offline
              instalator
              schrieb am zuletzt editiert von
              #53

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

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

              http://blog.instalator.ru/

              1 Antwort Letzte Antwort
              0
              • E Offline
                E Offline
                electric69
                schrieb am zuletzt editiert von
                #54

                @instalator:

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

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

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

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

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

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

                1 Antwort Letzte Antwort
                0
                • I Offline
                  I Offline
                  instalator
                  schrieb am zuletzt editiert von
                  #55

                  @electric69:

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

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

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

                  http://blog.instalator.ru/

                  1 Antwort Letzte Antwort
                  0
                  • I Offline
                    I Offline
                    instalator
                    schrieb am zuletzt editiert von
                    #56

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

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

                    http://blog.instalator.ru/

                    1 Antwort Letzte Antwort
                    0
                    • E Offline
                      E Offline
                      electric69
                      schrieb am zuletzt editiert von
                      #57

                      @instalator:

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

                      1 Antwort Letzte Antwort
                      0
                      • I Offline
                        I Offline
                        instalator
                        schrieb am zuletzt editiert von
                        #58

                        @electric69:

                        @instalator:

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

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

                        http://blog.instalator.ru/

                        1 Antwort Letzte Antwort
                        0
                        • E Offline
                          E Offline
                          electric69
                          schrieb am zuletzt editiert von
                          #59

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

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

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

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

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

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

                          1 Antwort Letzte Antwort
                          0
                          • BluefoxB Offline
                            BluefoxB Offline
                            Bluefox
                            schrieb am zuletzt editiert von
                            #60

                            @instalator:

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

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

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

                            1 Antwort Letzte Antwort
                            0
                            • E Offline
                              E Offline
                              electric69
                              schrieb am zuletzt editiert von
                              #61

                              @Bluefox:

                              @instalator:

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

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

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

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

                              1 Antwort Letzte Antwort
                              0
                              • BluefoxB Offline
                                BluefoxB Offline
                                Bluefox
                                schrieb am zuletzt editiert von
                                #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 Antwort Letzte Antwort
                                0
                                • I Offline
                                  I Offline
                                  instalator
                                  schrieb am zuletzt editiert von
                                  #63

                                  @electric69:

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

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

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

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

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

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

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

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

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

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

                                  http://blog.instalator.ru/

                                  1 Antwort Letzte Antwort
                                  0
                                  • I Offline
                                    I Offline
                                    instalator
                                    schrieb am zuletzt editiert von
                                    #64

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

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

                                    http://blog.instalator.ru/

                                    1 Antwort Letzte Antwort
                                    0
                                    • BluefoxB Offline
                                      BluefoxB Offline
                                      Bluefox
                                      schrieb am zuletzt editiert von
                                      #65

                                      @instalator:

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

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

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

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

                                      1 Antwort Letzte Antwort
                                      0
                                      • I Offline
                                        I Offline
                                        instalator
                                        schrieb am zuletzt editiert von
                                        #66

                                        @Bluefox:

                                        @instalator:

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

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

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

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

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

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

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

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

                                        http://blog.instalator.ru/

                                        1 Antwort Letzte Antwort
                                        0
                                        • BluefoxB Offline
                                          BluefoxB Offline
                                          Bluefox
                                          schrieb am zuletzt editiert von
                                          #67

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

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          333

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe