ESP8266 протокол MQTT или как я сделал проверку что ESP в сети.

Antworten
v965
starter
Beiträge: 36
Registriert: 02.01.2017, 23:32

ESP8266 протокол MQTT или как я сделал проверку что ESP в сети.

Beitrag von v965 » 03.01.2017, 14:57

Здравствуйте!
Скажем сразу, в программировании я не силён, пишу то как я вышел из сложившейся ситуации, возможно мне кто то подскажет как сделать правильнее.
Итак первоначально я купил ESP8266 и залил в него прошивку с поддержкой MQTT, далее установил в iobroker модуль MQTT Adapter, привязал имеющийся у меня ESP8266 к iobroker и смог получать интересующие меня данные.
Однако при более глубоком осмотре и попытке вывода информации в vis я понял что в случае потери связи с ESP8266 в vis абсолютно ничего не происходит (данные замораживаются так сказать). Естественно стал вопрос: Как отследить наличие ESP в сети?
Для себя нашёл простой выход, установил модуль PING Adapter и заставил его следить за нужным мне ESP по пингу, а данные (true false) я привязал в vis к иконке, таким образом при наличии ESP в сети появляется иконка которая показывает что ESP находится в данный момент в сети, а в случае когда ESP не пингуется иконка пропадает.
Что из этого вышло я покажу в скриншотах экрана.
Принимаю критику в свой адрес и не откажусь от подсказок. ;)
Dateianhänge
ESP8266 OK.JPG
ESP PING OK!
ESP8266 NOT- OK.JPG
ESP NOT PING

Benutzeravatar
aurodionov
professional
Beiträge: 388
Registriert: 14.07.2014, 16:39
Wohnort: Россия, Тюмень
Kontaktdaten:

Re: ESP8266 протокол MQTT или как я сделал проверку что ESP в сети.

Beitrag von aurodionov » 03.01.2017, 15:20

Я для этих целей использую бордюры виджетов и крашу их в разный цвет скриптом
Spoiler: Show hidden text

Code: Alles auswählen

// для этого в значение цвет прописать {javascript.0.system.ping.color}

createState('system.ping.color', "blank");    // Отображает статус разными цветами

//********************** Состояние Интернета *******************************
on({id: 'ping.0.SmartHome.www_yandex_ru', change: 'ne'}, function (obj) {
    
    if (obj.newState.val === true) {
        setState('javascript.0.system.ping.color',"blank");
        toLog(' Интернет появился.', true, 'blue');
	}
	
	else if (obj.newState.val === false) {
        setState('javascript.0.system.ping.color',"red");
        toLog(' Интернет отвалился.', true, 'red');
	}
});
Пишу с пульта....

v965
starter
Beiträge: 36
Registriert: 02.01.2017, 23:32

Re: ESP8266 протокол MQTT или как я сделал проверку что ESP в сети.

Beitrag von v965 » 03.01.2017, 15:34

Спасибо! Попробую так как сделано у Вас.

v965
starter
Beiträge: 36
Registriert: 02.01.2017, 23:32

Re: ESP8266 протокол MQTT или как я сделал проверку что ESP в сети.

Beitrag von v965 » 04.01.2017, 22:49

aurodionov hat geschrieben:Я для этих целей использую бордюры виджетов и крашу их в разный цвет скриптом
Spoiler: Show hidden text

Code: Alles auswählen

// для этого в значение цвет прописать {javascript.0.system.ping.color}

createState('system.ping.color', "blank");    // Отображает статус разными цветами

//********************** Состояние Интернета *******************************
on({id: 'ping.0.SmartHome.www_yandex_ru', change: 'ne'}, function (obj) {
    
    if (obj.newState.val === true) {
        setState('javascript.0.system.ping.color',"blank");
        toLog(' Интернет появился.', true, 'blue');
	}
	
	else if (obj.newState.val === false) {
        setState('javascript.0.system.ping.color',"red");
        toLog(' Интернет отвалился.', true, 'red');
	}
});
Что то я пытался, пытался но так и не вышло. (SmartHome.www_yandex_ru) заменял на ip адрес устройства в локальной сети (ESP) но никакого эффекта не получилось достичь. Код вставлял в поле цвет выбранного элемента в vis.
Что я делал не так?

Benutzeravatar
aurodionov
professional
Beiträge: 388
Registriert: 14.07.2014, 16:39
Wohnort: Россия, Тюмень
Kontaktdaten:

Re: ESP8266 протокол MQTT или как я сделал проверку что ESP в сети.

Beitrag von aurodionov » 05.01.2017, 10:53

Ок, тогда по порядку.
В админке iobroker переходите в сетевые, там есть драйвер ping ,нажимаете плюсик справа ,начнётся установка драйвера.
Когда драйвер поставится переходите на вкладку "настройка драйверов" ,ищете только-что установленный драйвер.
Делаете настройки по аналогии с моими, соответственно подставляя свои значения .
Скриншот -  Январь 5, 2017 2.39 PM.png
После того как заполните перечень интересующих ip адресов нажимаете сохранить и выйти.
Теперь запускаете драйвер кнопкой плей. Запустились и драйвер должен начать пинговать адреса.
Переходим на вкладку состояния. В поле id вписываем ping.0.
Видим похожую картину
Скриншот -  Январь 5, 2017 2.46 PM.png
Находим интересующий нас объект
Скриншот -  Январь 5, 2017 2.47 PM.png
Скриншот - Январь 5, 2017 2.47 PM.png (6.57 KiB) 4342 mal betrachtet
И уже его используем в скриптах.
Например так
Скриншот -  Январь 5, 2017 2.50 PM.png
Скриншот - Январь 5, 2017 2.50 PM.png (6.69 KiB) 4342 mal betrachtet
Всё ,теперь при пропадании интернета будет красить в красный цвет.
Пишу с пульта....

v965
starter
Beiträge: 36
Registriert: 02.01.2017, 23:32

Re: ESP8266 протокол MQTT или как я сделал проверку что ESP в сети.

Beitrag von v965 » 05.01.2017, 12:31

aurodionov hat geschrieben:Ок, тогда по порядку.
В админке iobroker переходите в сетевые, там есть драйвер ping ,нажимаете плюсик справа ,начнётся установка драйвера.
Когда драйвер поставится переходите на вкладку "настройка драйверов" ,ищете только-что установленный драйвер.
Делаете настройки по аналогии с моими, соответственно подставляя свои значения .
Скриншот - Январь 5, 2017 2.39 PM.png
После того как заполните перечень интересующих ip адресов нажимаете сохранить и выйти.
Теперь запускаете драйвер кнопкой плей. Запустились и драйвер должен начать пинговать адреса.
Переходим на вкладку состояния. В поле id вписываем ping.0.
Видим похожую картину
Скриншот - Январь 5, 2017 2.46 PM.png
Находим интересующий нас объект
Скриншот - Январь 5, 2017 2.47 PM.png
И уже его используем в скриптах.
Например так
Скриншот - Январь 5, 2017 2.50 PM.png
Всё ,теперь при пропадании интернета будет красить в красный цвет.
Ух тыж, спасибо! Теперь понятнее намного.

v965
starter
Beiträge: 36
Registriert: 02.01.2017, 23:32

Re: ESP8266 протокол MQTT или как я сделал проверку что ESP в сети.

Beitrag von v965 » 06.01.2017, 23:19

1000000500 Извинений!
Простите, я не правильно понял куда и что прописывать :shock:
Посидев пару дней я таки допёр )))
Я пытался прописывать скрипты в baсkground, а надо было просто скопировать в скрипты, изменить в строке имя (id) на нужные мне и в baсkground прописать ({javascript.0.system.ping.color}) :roll:
Ну всё получилось и работает, спасибо за помощь!
Dateianhänge
2.JPG
Снимок.JPG

Benutzeravatar
aurodionov
professional
Beiträge: 388
Registriert: 14.07.2014, 16:39
Wohnort: Россия, Тюмень
Kontaktdaten:

Re: ESP8266 протокол MQTT или как я сделал проверку что ESP в сети.

Beitrag von aurodionov » 07.01.2017, 00:16

Рад ,что у Вас получилось
Пишу с пульта....

nop0
starter
Beiträge: 16
Registriert: 15.05.2016, 20:19

Re: ESP8266 протокол MQTT или как я сделал проверку что ESP в сети.

Beitrag von nop0 » 31.01.2017, 19:40

Променлива mqtt.0.info.connection указывает всех подключены MQTT клиенты. С помощи toString().split(",") получаем array с имен и потом делаем с них что угодно (считать, оповещать на телефоне кто пропал и т.д.).
There is no problem so bad that you can’t make it worse! - retired astronaut Chris Hadfield
Spontanität muss sorgfältig geplant werden!
Nothing is foolproof to a sufficiently talented fool

Palko
starter
Beiträge: 12
Registriert: 06.10.2017, 04:20

Re: ESP8266 протокол MQTT или как я сделал проверку что ESP в сети.

Beitrag von Palko » 06.03.2018, 05:51

У меня реализовано немного по другому.
На сервере, в кроне, каждые 30 секунд генерится "0" в MQTT топик "status" для списка беспроводных девайсов. (по очереди, с небольшой задержкой друг относительно друга)
Все MQTT девайсы, получая "status" не зависимо от его содержания, отправляют свой status "1" на сервер.
Сервер все запоминает, и так по кругу).

но предидущая версия с парсингом может быть проще... если разбирать список не лень :)
iobroker+Beckhoff_BC9000+...

mrmomba
starter
Beiträge: 46
Registriert: 07.03.2018, 22:28

Re: ESP8266 протокол MQTT или как я сделал проверку что ESP в сети.

Beitrag von mrmomba » 03.04.2018, 12:05

Я не говорю по-русски. Надеюсь, это понятно, что я пишу.

У меня время в Интернете гораздо проще просматривать. И я передаю от ESP термин с.
Для этого я использую следующий исходный код ESP:

Code: Alles auswählen

[color=#0000FF]static unsigned long[/color] TMP_long_var_LaufzeitInSekunden = millis()/1000
client.publish(Value5.c_str(),String(TMP_long_var_LaufzeitInSekunden).c_str()); [color=#008000] // D04_Uptime[/color]
Таким образом, я вижу во время выполнения в секундах - и если это не изменится, я знаю, что случилось.

Вы можете поймать это через javascript.
Проверяйте каждые 15 минут
Время выполнения == Время выполнения
ОШИБКА
--------------------------------------------
Original / оригинал
Ich kann kein russisch. Ich hoffe es ist verständlich was ich schreibe.

Die Onlinezeit lasse ich mir viel einfacher anzeigen. Und zwar übermittel ich vom ESP die Laufzeit mit.
Dazu verwende ich folgenden Quelltext auf dem ESP:

Code: Alles auswählen

[color=#0000FF]static unsigned long[/color] TMP_long_var_LaufzeitInSekunden = millis()/1000
client.publish("/mqtt/sensor1/uptime/",String(TMP_long_var_LaufzeitInSekunden).c_str()); [color=#008000] // D04_Uptime[/color]

Damit sehe ich in Laufzeit in Sekunden - und wenn sich das nicht ändert weiß ich das was falsch ist.

Das könnte man über ein Javascript abfangen.
Prüfe alle 15 Minuten
Laufzeit == Laufzeit
FEHLER

Benutzeravatar
Bluefox
Site Admin
Beiträge: 7956
Registriert: 13.07.2014, 14:42
Kontaktdaten:

Re: ESP8266 протокол MQTT или как я сделал проверку что ESP в сети.

Beitrag von Bluefox » 04.04.2018, 14:31

На самом деле это недочёты иоб.
Должно работать так: как только связь теряется, то quality состояния должно меняться на отличное от 0. И виджеты должны поддерживать отображение quality.
В системе уже штатно поддерживаются quality. Вот только их ещё mqtt не обрабатывает, а в виз по моему можно привязать иконку на qualitg

algar
Beiträge: 4
Registriert: 04.07.2018, 11:28

Re: ESP8266 протокол MQTT или как я сделал проверку что ESP в сети.

Beitrag von algar » 04.07.2018, 11:41

У себя проверку статусов железок которые используют MQTT для обмена с брокером организовал следующим образом.
Для каждого девайса создаю логическую переменную alive и в настройках mqtt клиента для этой переменной в подписке включаю галочку "как объект", т.е. mqtt-client будет ожидать в топике от устройства JSON объект.
В каждом девайсе ESP32 или ESP8266 настраиваю отправку каждые 60 секунд в топик alive следующей строки (объекта) - "{"val":true, "expire":70}".
Свойство expire это внутреннее свойство брокера, которое указывает на период жизни значения переменной. В моем случае 70 сек.

Работает это так. Если в течении 60 секунд ESP не обновило свой статус, то на 70й секунде брокер сам сбросит значение alive в пустышку.
Все что далее необходимо, это проверять наличие знаения true в переменной alive. Если истина, то устройство живое, если пусто, то что-то отвалилось.

Pooh
professional
Beiträge: 129
Registriert: 11.05.2017, 05:15
Wohnort: Самара
Kontaktdaten:

Re: ESP8266 протокол MQTT или как я сделал проверку что ESP в сети.

Beitrag von Pooh » 06.07.2018, 05:22

algar hat geschrieben:
04.07.2018, 11:41
..и в настройках mqtt клиента для этой переменной в подписке включаю галочку "как объект", т.е. mqtt-client будет ожидать в топике от устройства JSON объект.
тема актуальная, но не понял...
т.е. надо кроме MQTT брокера еще и экземпляр MQTT клиента создать?
можно со скриншотами разжевать?

algar
Beiträge: 4
Registriert: 04.07.2018, 11:28

Re: ESP8266 протокол MQTT или как я сделал проверку что ESP в сети.

Beitrag von algar » 10.07.2018, 22:16

Pooh hat geschrieben:
06.07.2018, 05:22
тема актуальная, но не понял...
т.е. надо кроме MQTT брокера еще и экземпляр MQTT клиента создать?
можно со скриншотами разжевать?
Ну у меня москито брокер стоит отдельно и в iobroker у меня есть только драйвер mqtt_client.
В картинках это выглядит так:
1. У объекта создаем свойство alive:
obj.jpg
2. в настройках свойства включаем опцию mqtt клиента:
obj_prop.jpg
3. в коде ESP32 шлем раз в минуту сигнал пульса вот так:
mqtt_code.jpg

Antworten