Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Русский
    3. ioBroker
    4. ioBroker драйвера
    5. Драйвер MQTT

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Драйвер MQTT

    This topic has been deleted. Only users with topic management privileges can see it.
    • L
      Lstt last edited by

      В общем, резюмирую. На текущий момент, драйвер в роли брокера работает, НА МОЙ ВЗГЛЯД, ТОЛЬКО для библиотек типа https://github.com/knolleary/pubsubclient (на с++ arduino, esp8266 и т.д). Если же мы говорим о поддержке клиентов типа PAHO и т.д. (Android клиенты и другие) - то здесь сервер абсолютно НЕРАБОТОСПОСОБЕН, IMHO. В данной ситуации можете использовать либо Erlang MQTT Broker либо MQTT broker MOSQUITTO …

      ПО крайней мере, за последние 5-7 месяцев, брокер менялся в лучшую сторону, благодаря только Bluefox, но для клиентов на базе Paho (возможно других) - он НОРМАЛЬНО НЕ РАБОТАЕТ.

      1 Reply Last reply Reply Quote 0
      • Bluefox
        Bluefox last edited by

        Взял MQTT Dash… Работает.

        Как конкретно мне воспроизвести ошибку?

        1 Reply Last reply Reply Quote 0
        • A
          Adav last edited by

          Добрый день!

          Начал осваивать потихоньку ioBroker и столкнулся с полезными мне (и надеюсь другим) хотелками в части MQTT Adapter:

          1. Ввести поле имени клиента - иначе два одинаковых клиента с одним брокером работать не хотят. Лечится добавлением к адресу в поле ?clientId=…... . Но отдельное поле - нагляднее.

          2. Опцию клиента "Использовать разные имена для чтения и записи:" хорошо бы снабдить возможностью пользовательской настройки для топика записи, а не использовать по умолчанию /set. Мне, к примеру понадобилось использовать /on для работы с контроллером Wiren Board (такие его особенности). Замена в файле client.js /set на /on приводит к ошибкам обмена. Видимо надо где-то еще вносить изменения.

          Спасибо!

          1 Reply Last reply Reply Quote 0
          • Bluefox
            Bluefox last edited by

            @Adav:

            Добрый день!

            Начал осваивать потихоньку ioBroker и столкнулся с полезными мне (и надеюсь другим) хотелками в части MQTT Adapter:

            1. Ввести поле имени клиента - иначе два одинаковых клиента с одним брокером работать не хотят. Лечится добавлением к адресу в поле ?clientId=…... . Но отдельное поле - нагляднее.

            2. Опцию клиента "Использовать разные имена для чтения и записи:" хорошо бы снабдить возможностью пользовательской настройки для топика записи, а не использовать по умолчанию /set. Мне, к примеру понадобилось использовать /on для работы с контроллером Wiren Board (такие его особенности). Замена в файле client.js /set на /on приводит к ошибкам обмена. Видимо надо где-то еще вносить изменения.

            Спасибо! `
            А можно в jira внести? Я потеряю это здесь и не найду. 🙂

            http://iobroker.net:8000

            1 Reply Last reply Reply Quote 0
            • A
              Adav last edited by

              @Bluefox:

              А можно в jira внести? Я потеряю это здесь и не найду. 🙂

              http://iobroker.net:8000 `

              Внес. Надеюсь на положительный результат. Спасибо!

              1 Reply Last reply Reply Quote 0
              • Bluefox
                Bluefox last edited by

                @Adav:

                Добрый день!

                Начал осваивать потихоньку ioBroker и столкнулся с полезными мне (и надеюсь другим) хотелками в части MQTT Adapter:

                1. Ввести поле имени клиента - иначе два одинаковых клиента с одним брокером работать не хотят. Лечится добавлением к адресу в поле ?clientId=…... . Но отдельное поле - нагляднее.

                2. Опцию клиента "Использовать разные имена для чтения и записи:" хорошо бы снабдить возможностью пользовательской настройки для топика записи, а не использовать по умолчанию /set. Мне, к примеру понадобилось использовать /on для работы с контроллером Wiren Board (такие его особенности). Замена в файле client.js /set на /on приводит к ошибкам обмена. Видимо надо где-то еще вносить изменения.

                Спасибо! `
                Первый пункт я сделал. Нужно бы его проверить (c гит)

                1 Reply Last reply Reply Quote 0
                • A
                  Adav last edited by

                  @Bluefox:

                  Первый пункт я сделал. Нужно бы его проверить (c гит) `

                  А как правильнее всего обновить оттуда? Я заменил измененные файлы и перезапустил. Драйвер MQTT Adapter стал версией 1.3.0, но больше никаких изменений не увидел, в настройках драйвера не появилось поля Client ID, хотя я его поле вижу в новом файле index.html. Я что-то не так сделал или Вы что-то упустили?

                  Касаемо второго пункта… я пока вышел из положения путем использования в VIS прозрачных кнопок с управлением поверх кнопок с индикацией состояния. Появилась у меня такая мысль... Вот есть сейчас возможность включать/отключать возможность чтения/записи в разные топики с разницей в /set. Добавим возможность использовать не только /set, но и то, что захочет пользователь. В моем случае - /on. Но такой подход все равно остается слишком грубым. Предположим, что ioBroker подключается к разным типам контроллеров, у которых в этом смысле у каждого свои заморочки... а возможности гибко подойти в настройке mqtt нет... Может имеет смысл вообще выбросить эту настройку из MQTT? И в VIS сделать возможность привязывать к объектам 2 топика mqtt на чтение и запись?

                  upd:

                  Разобрался с первым пунктом. Оказалось, что все проще - в админе есть пункт "установить из собственного источника" с выбором git. Обновил, запустил двух клиентов - поле появилось, два клиента с разными ID нормально работают. Каких-либо проблем не заметил. Спасибо!

                  1 Reply Last reply Reply Quote 0
                  • Bluefox
                    Bluefox last edited by

                    @Adav:

                    @Bluefox:

                    Может имеет смысл вообще выбросить эту настройку из MQTT? И в VIS сделать возможность привязывать к объектам 2 топика mqtt на чтение и запись?
                    Некоторые виджеты так и работают (hqWidgets/button).

                    А если завтра придёт OPC с ещё другой идеологией управления? Надо добить mqtt, что бы подходил под идеологию ioBrokera. 🙂

                    1 Reply Last reply Reply Quote 0
                    • A
                      Adav last edited by

                      @Bluefox:

                      @Adav:

                      А если завтра придёт OPC с ещё другой идеологией управления? Надо добить mqtt, что бы подходил под идеологию ioBrokera. 🙂

                      Согласен. Не сообразил, что для другого контроллера с mqtt и другой идеологией все равно надо будет ставить еще один драйвер MQTT Adapter в ioBroker со своим IP в настройках. В нем и устанавливать эту идеологию. Так что первоначальная мысль была правильная. 🙂

                      1 Reply Last reply Reply Quote 0
                      • A
                        Adav last edited by

                        Вечер добрый! Обнаружил неприятную ошибку в работе MQTT драйвера. После перезагрузки контроллера, с которого драйвер забирает данные, данные перестают поступать. Лечится перезагрузкой драйвера. То есть такое впечатление, что после потери связи он впадает в спячку и сам не способен восстановить связь. Проверял несколько раз и на разных машинах - повторяемость 100%.

                        PS Что там с новой версией и опцией клиента "Использовать разные имена для чтения и записи:"?

                        1 Reply Last reply Reply Quote 0
                        • Bluefox
                          Bluefox last edited by

                          @Adav:

                          Вечер добрый! Обнаружил неприятную ошибку в работе MQTT драйвера. После перезагрузки контроллера, с которого драйвер забирает данные, данные перестают поступать. Лечится перезагрузкой драйвера. То есть такое впечатление, что после потери связи он впадает в спячку и сам не способен восстановить связь. Проверял несколько раз и на разных машинах - повторяемость 100%. `
                          Было бы очень полезно, если бы ты смог помочь и посмотреть в чём проблема. У меня ошибка не воспроизводится и вероятность её исправления стремится таким образом к нулю. Ты же не показал ни каких логов и никаких wireshark записей.
                          @Adav:

                          PS Что там с новой версией и опцией клиента "Использовать разные имена для чтения и записи:"? `
                          Давай догадаюсь. Я встрою в настройки, что можно настроить "set" и поменять на "on". Ты попросишь, что бы можно было на каждую переменную настраивать. Верно? :lol:

                          1 Reply Last reply Reply Quote 0
                          • A
                            Adav last edited by

                            @Bluefox:

                            Было бы очень полезно, если бы ты смог помочь и посмотреть в чём проблема. У меня ошибка не воспроизводится и вероятность её исправления стремится таким образом к нулю. Ты же не показал ни каких логов и никаких wireshark записей. `

                            mqtt.0 2017-01-20 22:44:54.502 info Connected to 192.168.118.123

                            mqtt.0 2017-01-20 22:43:22.483 info Disconnected from 192.168.118.123

                            mqtt.0 2017-01-20 22:41:23.425 info Connected to 192.168.118.123

                            При этом в событиях данных mqtt нет пока не сделаешь рестарт драйвера. Можно как-то повысить уровень логирования и видеть побольше?

                            @Bluefox:

                            Давай догадаюсь. Я встрою в настройки, что можно настроить "set" и поменять на "on". Ты попросишь, что бы можно было на каждую переменную настраивать. Верно? :lol: `

                            Ага 🙂

                            1 Reply Last reply Reply Quote 0
                            • Bluefox
                              Bluefox last edited by

                              @Adav:

                              @Bluefox:

                              Было бы очень полезно, если бы ты смог помочь и посмотреть в чём проблема. У меня ошибка не воспроизводится и вероятность её исправления стремится таким образом к нулю. Ты же не показал ни каких логов и никаких wireshark записей. `

                              mqtt.0 2017-01-20 22:44:54.502 info Connected to 192.168.118.123

                              mqtt.0 2017-01-20 22:43:22.483 info Disconnected from 192.168.118.123

                              mqtt.0 2017-01-20 22:41:23.425 info Connected to 192.168.118.123

                              При этом в событиях данных mqtt нет пока не сделаешь рестарт драйвера. Можно как-то повысить уровень логирования и видеть побольше?

                              @Bluefox:

                              Давай догадаюсь. Я встрою в настройки, что можно настроить "set" и поменять на "on". Ты попросишь, что бы можно было на каждую переменную настраивать. Верно? :lol: `

                              Ага 🙂 `
                              48_2017-01-20_20_53_48-iobroker.admin.png

                              1 Reply Last reply Reply Quote 0
                              • A
                                Adav last edited by

                                Спасибо! Значит так… попробовал эмулировать перезагрузку контроллера просто программно отключая на несколько минут на коммутаторе порт, где висит контроллер. В этом случае все нормально, поток данных MQTT восстанавливается. Хотя в логе при этом Disconnected вообще не появляется. В отличие от случая если перегружать контроллер.

                                Включил дебаг, перегрузил контроллер (вообще говоря проблематично его часто дергать на рабочей системе - при старте начинаются разные переходные процессы в самом контроллере, шлются смс-ки и тп) - все повторилось, поток данных не восстановился, глазами в логах ничего не попалось интересного, записей в логе ну очень много... пробовал это скопировать для детального изучения - в итоге заглючил админ в части логов (то ли от числа записей, то ли что-то не то сделал), перегрузил его, стало нормально, но логи потерял. Поскольку у меня подключено 2 сервера с MQTT драйвером к контроллеру, глянул на второй - там висит Disconnected в логах (без дебага). Ну и ни на первом ни на втором данные не идут. Подождал несколько минут - перезапустил MQTT на первом сервере - данные пошли на этот сервер. На втором - нет. Подождал еще несколько минут - перезапустил драйвер MQTT на втором сервере. Пошли данные на втором.

                                Уж не знаю что за стечение обстоятельств, может особенности контроллера... но решил больше пока не экспериментировать с этим. Контроллер очень редко перегружается, только при большой нужде или обновлениях, потеря связи не приводит к тому же явлению (что радует), поэтому пусть будет как есть. Если что-то еще всплывет - я сообщу.

                                Из моего ограниченного познания работы MQTT есть ощущение, что при перезагрузке контроллер сообщает, что он больше слать MQTT данные не будет, а драйвер, получив это - больше и не принимает (уйдя в disconnect), пока его не рестартануть. Иначе потеря связи при отключении порта приводила бы к похожему результату. Лог без дебага:

                                ` > mqtt.0 2017-01-21 00:12:54.445 info Connected to 192.168.118.123

                                mqtt.0 2017-01-21 00:12:54.374 info Subscribe on: "/devices/#"

                                mqtt.0 2017-01-21 00:12:54.299 info Try to connect to mqtt://192.168.118.123:1883?clientId=Zero

                                mqtt.0 2017-01-21 00:12:52.459 info starting. Version 1.3.0 in /opt/iobroker/node_modules/iobroker.mqtt, node: v4.7.2

                                host.orangepizero 2017-01-21 00:12:49.145 info instance system.adapter.mqtt.0 started with pid 2984

                                host.orangepizero 2017-01-21 00:12:49.071 info object change system.adapter.mqtt.0

                                host.orangepizero 2017-01-21 00:12:47.199 info instance system.adapter.mqtt.0 terminated with code 0 (OK)

                                mqtt.0 2017-01-21 00:12:47.086 info terminating

                                host.orangepizero 2017-01-21 00:12:46.543 info stopInstance system.adapter.mqtt.0 killing pid 1501

                                host.orangepizero 2017-01-21 00:12:46.541 info stopInstance system.adapter.mqtt.0

                                host.orangepizero 2017-01-21 00:12:46.514 info object change system.adapter.mqtt.0

                                mqtt.0 2017-01-21 00:12:46.563 info Disconnected from 192.168.118.123 `

                                1 Reply Last reply Reply Quote 0
                                • Bluefox
                                  Bluefox last edited by

                                  Ну уже не плохо 😉
                                  @Adav:

                                  перегрузил его, стало нормально, но логи потерял. `
                                  Логи потерять нельзя. Поройся в /opt/iobroker/log/2017_…log

                                  1 Reply Last reply Reply Quote 0
                                  • A
                                    Adav last edited by

                                    @Bluefox:

                                    Ну уже не плохо 😉
                                    @Adav:

                                    перегрузил его, стало нормально, но логи потерял. Логи потерять нельзя. Поройся в ****/opt/iobroker/log/2017_…log****

                                    Потерял. Когда админ заглючил, я начал стирать и стер. Ну раз такое дело - перегрузил контроллер еще раз. В этот раз логи я просто взял по ссылке, не пытаясь с ними что-то делать в интерфейсе. Итог:

                                    https://cloud.mail.ru/public/9rBC/mM5aYm4k6

                                    Запустил дебаг, отправил контроллер в перезагрузку. Убедился, что контроллер перегрузился и что данные не приходят. Остановил дебаг, скопировал лог, перегрузил драйвер. Данные пошли. Или надо видеть логи и при рестарте драйвера?

                                    1 Reply Last reply Reply Quote 0
                                    • B
                                      bondrogeen last edited by

                                      После обновления 1.3.0 драйвер в циклическом ребуте.

                                      ! debian 2017-02-04 18:51:50.653 info host.debian Restart adapter system.adapter.mqtt.0 because enabled
                                      ! debian 2017-02-04 18:51:50.652 error host.debian instance system.adapter.mqtt.0 terminated with code 0 (OK)
                                      ! mqtt.0 2017-02-04 18:51:50.137 error mqtt.0 TypeError: Object 111,102,102,108,105,110,101 has no method 'trim' at receivedTopic (/opt/iobroker/node_modules/iobroker.mqtt/lib/server.js:301:59) at Connection. (/opt/iobro
                                      ! mqtt.0 2017-02-04 18:51:50.137 error mqtt.0 uncaught exception: Object 111,102,102,108,105,110,101 has no method 'trim'
                                      ! mqtt.0 2017-02-04 18:51:50.136 info mqtt.0 Client [ESP826600f3f637] closed
                                      ! mqtt.0 2017-02-04 18:51:50.136 error mqtt.0 TypeError: Object 111,102,102,108,105,110,101 has no method 'trim' at receivedTopic (/opt/iobroker/node_modules/iobroker.mqtt/lib/server.js:301:59) at Connection. (/opt/iobro
                                      ! mqtt.0 2017-02-04 18:51:50.136 error mqtt.0 uncaught exception: Object 111,102,102,108,105,110,101 has no method 'trim'
                                      ! mqtt.0 2017-02-04 18:51:50.136 warn mqtt.0 Client error [ESP826600f3f637]: Error: not implemented
                                      ! mqtt.0 2017-02-04 18:51:50.135 info mqtt.0 Client [ESP826600f3f637] connected
                                      ! mqtt.0 2017-02-04 18:51:46.293 info mqtt.0 Starting MQTT authenticated server on port 1883
                                      ! mqtt.0 2017-02-04 18:51:45.711 info mqtt.0 starting. Version 1.3.0 in /opt/iobroker/node_modules/iobroker.mqtt, node: v0.10.46
                                      ! debian 2017-02-04 18:51:44.686 info host.debian instance system.adapter.mqtt.0 started with pid 2392
                                      ! host.debian 2017-02-04 18:51:14.676 info Restart adapter system.adapter.mqtt.0 because enabled

                                      1 Reply Last reply Reply Quote 0
                                      • A
                                        Adav last edited by

                                        @bondrogeen:

                                        После обновления 1.3.0 драйвер в циклическом ребуте. `

                                        Установил сразу после появления версии 1.3.0 на github - таких проблем не наблюдаю. Установлено было на 3 разных серверах, работающих с одним контроллером (WB). На третьем (тестовом) недавно обновил до 1.3.1 - тоже пока нормально. Может у Вас проблема с источником данных mqtt?

                                        1 Reply Last reply Reply Quote 0
                                        • B
                                          bondrogeen last edited by

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

                                          1 Reply Last reply Reply Quote 0
                                          • Alex1808
                                            Alex1808 last edited by

                                            Обнаружилась ошибка в коде MQTT клиента.

                                            http://forum.iobroker.net/viewtopic.php?f=22&t=5095

                                            Надо заменить (смотря что у вас за система или версия npm)

                                            этот файл /opt/iobroker/node_modules/mqtt-packet/writeToStream.js

                                            или этот /opt/iobroker/node_modules/iobroker.mqtt/node_modules/mqtt-packet/writeToStream.js

                                            или как было в моём случаи этот файл /opt/iobroker/node_modules/iobroker.mqtt/node_modules/mqtt-connection/node_modules/mqtt-packet/writeToStream.js

                                            на этот

                                            https://github.com/GermanBluefox/mqtt-p … oStream.js

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            930
                                            Online

                                            31.8k
                                            Users

                                            79.9k
                                            Topics

                                            1.3m
                                            Posts

                                            31
                                            162
                                            42407
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo