Majordomo не работает mqtt

Majordomo не работает mqtt

Сообщение grafalex » Сб янв 21, 2017 11:58 am

Попробовал раздобыть логи хоть чего нибудь. В частности verbose вывод москитто.

На распберри (где все работает) видно как мажордомо подпсиывается на уведомления

1484988833: New connection from 192.168.1.100 on port 1883.
1484988833: New client connected from 192.168.1.100 as MajorDoMo (c1, k10).
1484988833: Sending CONNACK to MajorDoMo (0, 0)
1484988833: Received SUBSCRIBE from MajorDoMo
1484988833: /# (QoS 0)
1484988833: MajorDoMo 0 /#
1484988833: Sending SUBACK to MajorDoMo
1484988838: Received PINGREQ from MajorDoMo
1484988838: Sending PINGRESP to MajorDoMo

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

1484989034: New client connected from 192.168.1.200 as MajorDoMo MQTT Client (c1, k10).
1484989034: Sending CONNACK to MajorDoMo MQTT Client (0, 0)
1484989034: Received PUBLISH from MajorDoMo MQTT Client (d0, q1, r0, m1, ‘/asdf/asdf/asdf’, . (4 bytes))
1484989034: Sending PUBACK to MajorDoMo MQTT Client (Mid: 1)
1484989034: Sending PUBLISH to paho/5D8A54F27E3401CF3F (d0, q0, r0, m0, ‘/asdf/asdf/asdf’, . (4 bytes))
1484989034: Received DISCONNECT from MajorDoMo MQTT Client
1484989034: Client MajorDoMo MQTT Client disconnected.

Читайте также:  Huawei p10 lite не работает тачскрин

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

Источник

Majordomo не работает mqtt

Сообщение sergejey » Вт июн 24, 2014 11:17 am

Re: Подключеие MQQT Windows

Сообщение Wmixa » Вт июн 24, 2014 12:10 pm

Re: Подключеие MQQT Windows

Сообщение sergejey » Вт июн 24, 2014 1:42 pm

Re: Подключеие MQQT Windows

Сообщение Wmixa » Вт июн 24, 2014 2:13 pm

Re: Подключеие MQQT Windows

Сообщение sergejey » Вт июн 24, 2014 2:46 pm

Re: Подключеие MQQT Windows

Сообщение tammat » Вт июн 24, 2014 4:56 pm

Re: Подключеие MQQT Windows

Сообщение sergejey » Вт июн 24, 2014 5:39 pm

Тишина, потому что не приходят никакие сообщения от MQTT-брокера по указанному пути подписки либо некорректно прописаны данные подключения к брокеру.

Вот, к примеру, как настраивается для Wiren Board:

Re: Подключеие MQQT Windows

Сообщение Jager » Вт июн 24, 2014 6:18 pm

Re: Подключеие MQQT Windows

Сообщение Wmixa » Вт июн 24, 2014 6:52 pm

С другой машины по команде mosquitto_sub -h 192.168.11.60 -t /devices/wb-w1/controls/0000058d80ac данные с датчиков идут, список подписок тоже показывает.

Вот настройки в вебе
Hostname: (*) 192.168.11.60
Port: (*) 1883
Subscription path: (*) /devices/#

Название: (*) Temp00
Местоположение: Rooms
Путь: (*) /devices/wb-w1/controls/0000058d80ac

Источник

Majordomo не работает mqtt

Сообщение Fav0rit » Ср фев 15, 2017 10:08 pm

Всем доброго дня.

В последнее время на своей Raspberry pi 3 заметил парочку странных вещей с MQTT, дело в том, что в своей доме я достаточно активно использую устройства на этом протоколе обмена, но странности в работе именно с MajorDoMo.
В логах можно видеть такие строчки, то есть таймаут соединения, ошибка сокета и реконнект.

На данный момент на RPi в качестве MQTT брокера стоит mosquitto версии 1.4.10-0 версия протокола MQTT v3.1
Возможно, на более старших версиях mosquitto проблема не проявлялась, но точно сказать не могу.
Это первое.

Второе, если клиент публикует в MQTT не значение, а, например, слово «OPEN» или «CLOSE» или любое другое, и мы привязываем его к свойству объекта — часто рушится сервис websockets, возможно и mqtt. Перезапуск websockets помогает до следующего нового текстового значения.

Вообще, не знаю как у всех, у меня вебсокеты начинают тормозить к вечеру, то есть часто, приходя с работы и кликая по элементу управления, я начинаю наблюдать серьезные задержки в исполнении команд, перезапуск websockets помогает решить проблему.

Конфиг mosquitto, кому интересно. Фактически дефолтный с чуть более подробными логами:

# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example

persistence true
persistence_location /var/lib/mosquitto/

log_dest file /var/log/mosquitto/mosquitto.log
log_facility 5
log_type debug
log_type error
log_type warning
log_type notice
#log_type information

Re: Странное поведение MQTT

Сообщение WZV » Пт фев 17, 2017 6:12 pm

Re: Странное поведение MQTT

Сообщение DimSun75 » Пт фев 17, 2017 8:09 pm

Re: Странное поведение MQTT

Сообщение WZV » Сб фев 18, 2017 3:21 pm

Re: Странное поведение MQTT

Сообщение DimSun75 » Сб фев 18, 2017 5:49 pm

С телефона трудно смотреть. Навскидку проблем не увидел. Разве что странный адрес dns. Универсальный совет: надо понять в каком месте ардуинка виснет. Расставить в коде вывод в терминал (да хоть циферки 1, 2, 3. и т.д.) и смотреть куда дошли, а куда нет

Отправлено с моего SM-G850F через Tapatalk

Re: Странное поведение MQTT

Сообщение WZV » Вс фев 19, 2017 10:21 am

Re: Странное поведение MQTT

Сообщение voronrom » Вт апр 10, 2018 8:12 pm

Всем привет! .
Нашел какую-то странную особенность поведения MajorDomo и MQTT брокера. Я только недавно стал знакомиться с MD по этому сильно не бейте, может укажите в чем мой касяк.
И так, в своем проекте стараюсь использовать для подключения разного рода датчиков (Ардуиновских) протокол MQTT ну и Ардуино + ESP. Сама инсталляция MD из готового образа для малинки «v3_31i_rus.img», MQTT брокер mosquito. Обнаружил следующее, если к примеру в моем случае открывать / закрывать дверь достаточно быстро, где установлен геркон, что собственно генерит MQTT отправку данных при изменения состояния (0/1), падает подключение MD к MQTT брокеру с ошибкой:
(кусок лога с mosquito)
1523368748: Client MajorDoMo MQTT has exceeded timeout, disconnecting.
1523368748: Socket error on client MajorDoMo MQTT, disconnecting.
1523368748: New connection from 127.0.0.1 on port 1883.
1523368748: Client MajorDoMo MQTT disconnected.
1523368748: New client connected from 127.0.0.1 as MajorDoMo MQTT (c0, k10, u’Мой User’).

Причем эксперимент воспроизводимый на 100% Лог, точно сопоставил по времени.
И все бы ничего, но вот странное творится дальше. У меня MD есть объект, к которому привязан переключатель, он не относится к моему геркону, он принадлежит даже другому классу. Вот этот самый переключатель меняет свое состояние. Я сперва не мог понять, как так данный переключатель никто не нажимал, а он взял изменил состояния с выкл. на вкл. В модуле MD MQTT вижу, что в это время, как только возникает ошибка «прилетают» данные по разным веткам MQTT, данный выключатель, всегда срабатывает в 1, есть другой переключатель, который относится к ESP, которая в свою очередь выключена по питанию и не может ничего слать в MQTT, он всегда срабатывает в 0. Подключил на своем ноуте MQTT клиент подписался на мой само изменяющийся топик, и воспроизвожу ошибку, меня еще больше удивило, что в MQTT брокере нет никаких изменений, а MD считает, что брокер прислал изменение и своею очередь переключил переключатель. Стал изучать лог с mosquito и так же НЕ обнаружил, что в брокер получал от датчиков какие либо изменения.
Помогите разобраться куда капать, что крутить.

Источник

Повышение надежности контроллера умного дома на Majordomo (MQTT)

Итак, мой умный дом готов, слушается голоса, управляет климатом, зарядкой аккумулятора на даче (https://habr.com/ru/post/538896/).

Более того, умные устройства стоят теперь как на даче, так и дома, в городе. Причем из-за особенностей совместимости экосистем с Яндексом часть устройств дома (RGB ленты) управляются через сервер на Majordomo (дача).

И вот тут возникает ряд логичных вопросов:

Где должен стоять сервер – дома или на даче?

Потерей управления какими устройствами жертвовать при обрыве связи между домом и дачей?

Как не грузить GSM канал до дачи передачей графиков в HTML верстке сайта?

Легко догадаться, что ответом является резервирование:

Серверы должны быть и там и там

Серверы должны уметь управлять всеми устройствами

Серверы должны иметь полный набор данных

Так как датчики общаются с сервером в основном через протокол MQTT, MQTT брокер так же становится точкой отказа.

Резервирование сервера

Начнем с MQTT брокера. Если не считать таких сообщений, как LWT («последняя воля устройства») и Retain (хранимых на сервере), большинство сообщений передаются одномоментно и только тем, кто в данный момент подключен к брокеру. То есть «отправил — забыл».

К счастью, в последних версиях mosquitto сервера есть режим бриджа – вы просто задаете адрес второго брокера и топики, которые нужно дублировать, направления дублирования. В моем случае вполне пригодился вариант «копировать все в обе стороны». Вот как это делается в raspbian/armbian – добавляем в /etc/mosquito/mosquito.conf:

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

Дальше, сами серверы Majordomo. Я сделал второй сервер на базе Orange pi one plus (1Gb RAM) – стоит в 2 раза дешевле Raspberry Pi4, для вспомогательного сервера — то, что надо. Но серверы должны уметь делать одно и то же, но не делать этого одновременно (в большинстве случаев это не страшно, ну поступит 2 команды на включение зарядника – не страшно, но некоторые вещи лучше дважды не делать, например, не поворачивать солнечные панели по часам).

Так как для корректной работы с датчиками и исполнительными устройствами я использую MQTT, логично отслеживать работоспособность удаленного сервера через тот же MQTT. Для этого я создал отдельный класс, в котором есть 2 статуса (для отображения) и 2 времени – для локального сервера и для удаленного, а также адрес активного брокера и собственный адрес сервера. Раз в 10 секунд выполняется проверка системного цикла MQTT – время последнего запуска (ThisComputer.cycle_mqttRun). Это время сравнивается с текущим (time()). Если прошло больше 10 секунд – паникуем, то есть понимаем, что локальный сервер не дружит с MQTT брокером и показываем это в интерфейсе. Так же сравниваем время последнего запуска MQTT цикла на удаленном сервере (приходит через MQTT). Если прошло больше 20 секунд, а локальный цикл в порядке – понимаем, что удаленный сервер больше не управляет устройствами. Проверяем еще один параметр, передаваемый через MQTT – имя активного брокера. Если это не локальный, то надо переключать на себя:

Вот такой виджет, пока корявенько, зато информативно

У меня Tasmota устройства (IP в диапазоне c 192.168.3.40 по 192.168.3.90), им можно передать обычным URL запросом новый адрес MQTT сервера. Вот только запросы надо посылать синхронные, а главное – не забывать между ними обновлять MQTT свойство для удаленного сервера. Иначе получится замкнутый цикл – начали переключаться, больше 10 секунд не сообщаем удаленному серверу, что мы живы. Тот начинает переключение на себя и тоже замирает. Не делайте так.

Повышаем надежность самого сервера

Операционная система и БД хранятся на карте памяти. Есть карты класса А1 и даже А2, но через год постоянной нагрузки такая карта с большой вероятностью загнется. Кроме того, штатный код пишет в базу кучу ненужного, а каждое чтение/запись свойства любого объекта – это обращение к БД. У меня было порядка 1200 обращений к БД в секунду.

Карту можно спасти, если базу держать в оперативной памяти. К счастью, разработчики Majordomo сделали прошивку для Raspberry сразу с опцией БД в памяти, а для прочих платформ есть скрипт для переноса БД в память (но памяти должно быть не менее 1Гб, на orange pi zero c 512Мб у меня не взлетело — база весит порядка 300Мб и столько же надо дополнительно для дампов бэкапов). Да, теперь в любой момент просто так перезагружать систему нельзя, нужно выполнить скриптик, иначе данные за последние полчаса потеряются (но база всегда бэкапится в рабочем состоянии!). Зато скорость работы БД и долговечность карты памяти – просто великолепны.

Остался последний штрих – снизить нагрузку на БД, убрав лишние запросы. Решение простое:

Обновиться до последней версии (буквально пару недель назад обновили интерфейс, убрав лишние обращения к БД и переписав на java скрипты)

Обращаться к локальным или глобальным свойствам только один раз и использовать переменные в памяти (смотрите на пример кода цикла проверки – getProperty\setProperty там использованы только по одному разу).

Еще пример оптимизации скриптов – чтобы и обращений лишних не было, и чтобы срабатывала автоматическая зависимость от переменной, например:

Обратите внимание, что в первом условии есть ветка проверки, этот ли сервер управляет устройствами в настоящий момент (gg(«remote_mqtt_updated.isController»)). remote_mqtt_updated – это объект контроля работы серверов.

Теперь у меня число обращений к БД порядка 380 в секунду, что гораздо лучше по сравнению с начальным значением в 1200.

Вот так, добавив сервер за 2500 рублей, получил полное резервирование брокера сообщений, сервера управления устройствами (логики) и можно получать графики с актуальными данными с домашнего сервера, не нагружая сервер, работающий через GSM модем.

Источник

Настройка работы c MQTT для MajorDoMo

Всем привет! Сейчас я покажу, как я снимаю данные с датчика DHT11 через протокол MQTT и передаю их в сервис MajorDoMo .

Есть центральный сервис MajorDoMo он развернут на Ubuntu 18.04 Server amd64 виртуального контейнера под ESXi 6.0.0 развернутого внутри домашнего сервера HP MicroServer Gen8.

Есть миникомпьютер на базе Raspberry Pi 3 Model B к которому подключен датчик температуры и влажности, он находится в другой комнате.

Как я себе вижу задачу: На оси Raspbian Stretch миникомпьютера Raspberry Pi 3 Model B крутится скрипт который который снимает показания и передает их в Majordomo .

$ — 172.33.33.14 (MajorDoMo) на Ubuntu 18.04 Server , задействована заметка Как установить MajorDoMo на Ubuntu 18.04 Server. После обязательно следует перезагрузить систему чтобы после все циклы запустились, раньше этого было достаточно и задание в crontab отрабатывало, теперь его нужно изменить:

$ sudo crontab — e

После циклы работают как надо.

$ — 172.33.33.10 (Raspbian Stretch) , где настройки образа выполнены опираясь на заметку: Чистим систему Raspbian Stretch на свое усмотрение

  • DHT11 датчик температуры и влажности который подключен к миникомпьютеру Как подключить датчик DHT11 к Raspberry .
  • Роутер Mikrotik который связывает стенд.
  • Шаг №1: Проверяю, что подключившись с основной системы к Raspberry Pi 3 Model B могу снять показания с датчика температуры:

    $ ssh — l pi 172.33.33.10

    $ git clone https : //github.com/adafruit/Adafruit_Python_DHT.git

    / Adafruit_Python _ DHT $ sudo python setup . py install

    / Adafruit_Python _ DHT $ examples / AdafruitDHT . py 11 4

    • Где 21 градус — это температура у меня в комнате
    • Где 17% — это влажность у меня в комнате.

    Шаг №2: Если нужно с MajorDoMo получать показания датчика DHT11 без использования MQTT то на системе Ubuntu 18.04 Server проделываем:

    $ ssh — l ekzorchik 172.33.33.14

    $ sudo apt — get install sshpass — y

    $ sshpass — p 712mbddr @ ssh — o StrictHostKeyChecking = no pi @ 172.33.33.10 ‘Adafruit_Python_DHT/examples/AdafruitDHT.py 11 4’

    Warning: Permanently added ‘172.33.33.10’ (ECDSA) to the list of known hosts.

    Дальше уже на основании моих разобранных заметок полученные значения обрабатываем и переносим в MajorDoMo .

    Шаг №3: Теперь вернемся к тому, что я хочу с Raspberry Pi 3 Model B передавать показания через протокол MQTT , для этого нужно проделать все по ранее опубликованной заметке (tips_ubuntu_18_04_mosquitto_v1.odt) где я разобрал как установить MQTT на Ubuntu 18.04 Server amd64.

    Шаг №4: Устанавливаю в Web — интерфейс MajorDoMo поддержку протокола MQTT и настраиваю:

    http://IP&DNS — Панель управления — Система — Маркет дополнений — в поиске набираю « MQTT » и нажимаю клавишу Enter , вижу найденное совпадение, хоть и пишется что оно установлено (но я его не ставил), а потому напротив данного приложения нажимаю « Обновить », тем самым запуститься процесс установки самой последней версии.

    Отлично. Переходим к первоначальной настройки связи Ubuntu и Raspberry :

    http://IP&DNS — Устройства — MQTT — (MQTT) Настроить

    • MajorDoMo Client: 172.33.33.14
    • Hostname: (*) localhost
    • Port: (*) 1883
    • Subscription path: (*) #
    • authorization required: отмечаю галочкой
    • Username: mqtt-spy (это на доступ к подписке)
    • Password: Aa1234567 (это на доступ к подписке)

    и нажимаю кнопку « Обновить»

    После открываю консоль командной строки и отправляю в Majordomo устройству MQTT тестовое сообщение:

    Источник

    Оцените статью