Mega 2561 и MQTT

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
majkl84
Сообщения: 40
Зарегистрирован: 01 июл 2017, 09:53

Re: Mega 2561 и MQTT

Сообщение majkl84 » 22 фев 2018, 15:41

Andrey_B писал(а):
22 фев 2018, 15:36
Я не понимаю, что означает этот ваш ответ.
Но на всякий случай выскажу несколько мыслей, которые могут оказаться полезными.
1. Правила использования wildcards
https://www.hivemq.com/blog/mqtt-essent ... -practices
2. Контроллер публикует информацию в топике только по событиям. Например, срабатывание стандартного входа.
3. Принципы формирования топиков устройством описаны здесь
https://ab-log.ru/smart-house/ethernet/megad-2561
Есть приложение под windows mqtt-spy открываешь подключаешься и подписываешься на все топики (#) и видишь
2018_02_22_14_40_20_mqtt_spy.jpg
2018_02_22_14_40_20_mqtt_spy.jpg (332.7 КБ) 4027 просмотров
А тут ты видишь фигу
2018_02_22_14_40_54_mqtt_spy.jpg
2018_02_22_14_40_54_mqtt_spy.jpg (128.38 КБ) 4027 просмотров

empenoso
Сообщения: 1039
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

Re: Mega 2561 и MQTT

Сообщение empenoso » 22 фев 2018, 15:43

Мега публикует только по событиям, а не как sonoff-tasmota например. Нажмите физические кнопки на меге, чтобы что-то увидеть в этой программе.

majkl84
Сообщения: 40
Зарегистрирован: 01 июл 2017, 09:53

Re: Mega 2561 и MQTT

Сообщение majkl84 » 22 фев 2018, 15:45

empenoso писал(а):
22 фев 2018, 15:43
Мега публикует только по событиям, а не как sonoff-tasmota например. Нажмите физические кнопки на меге, чтобы что-то увидеть в этой программе.
А инфу с датчиков она тоже не шлет и состояние выходов не известно получается.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Mega 2561 и MQTT

Сообщение Andrey_B » 22 фев 2018, 15:50

Функции аналогичной "srv-loop" для MQTT в данный момент нет.
Для запроса состояния любого порта в произвольный момент времени (хоть каждую секунду) предусмотрен специальный механизм, который описан здесь:
https://ab-log.ru/smart-house/ethernet/megad-2561
Кстати, ссылку эту я давал в предыдущем сообщении.

majkl84
Сообщения: 40
Зарегистрирован: 01 июл 2017, 09:53

Re: Mega 2561 и MQTT

Сообщение majkl84 » 22 фев 2018, 19:47

Andrey_B писал(а):
22 фев 2018, 15:50
Функции аналогичной "srv-loop" для MQTT в данный момент нет.
Для запроса состояния любого порта в произвольный момент времени (хоть каждую секунду) предусмотрен специальный механизм, который описан здесь:
https://ab-log.ru/smart-house/ethernet/megad-2561
Кстати, ссылку эту я давал в предыдущем сообщении.
Разобрался :D

Код: Выделить всё

root@Dacha-Server:/home/admin-home# mosquitto_pub -d -t rsfGa/cmd -m  get:32
Client mosqpub/3063-Dacha-Serv sending CONNECT
Client mosqpub/3063-Dacha-Serv received CONNACK
Client mosqpub/3063-Dacha-Serv sending PUBLISH (d0, q0, r0, m1, 'rsfGa/cmd', ... (6 bytes))
Client mosqpub/3063-Dacha-Serv sending DISCONNECT
И на выходе.
Безымянный.jpg
Безымянный.jpg (89.19 КБ) 4003 просмотра

empenoso
Сообщения: 1039
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

Re: Mega 2561 и MQTT

Сообщение empenoso » 23 фев 2018, 12:25

...

Далее есть проблема №2:
При переключении на меге порта типа OUT - НЕ выдается никакого сообщения в MQTT. Кнопки типа IN выдаются:

Код: Выделить всё

megad/30/3 {"port":3,"m":0,"value":"ON","cnt":9}
megad/30/3 {"port":3,"m":0,"value":"ON","cnt":10}
megad/30/3 {"port":3,"m":0,"value":"ON","cnt":11}
megad/30/3 {"port":3,"m":0,"value":"ON","cnt":12}
megad/20/16 {"port":16,"m":0,"value":"ON","cnt":24}
megad/20/16 {"port":16,"m":1,"value":"OFF","cnt":24}
megad/20/16 {"port":16,"m":0,"value":"ON","cnt":25}
megad/20/16 {"port":16,"m":1,"value":"OFF","cnt":25}
megad/20/16 {"port":16,"m":0,"value":"ON","cnt":26}
megad/20/16 {"port":16,"m":1,"value":"OFF","cnt":26}
megad/20/16 {"port":16,"m":0,"value":"ON","cnt":27}
megad/20/16 {"port":16,"m":1,"value":"OFF","cnt":27}
Соответственно из-за того что на брокере нет значений порта, который реле, я не могу считать его состояние в опенхаб, хотя управление осуществляется:

Код: Выделить всё

Switch Bedroom_LampOnWall_Right     "Бра в спальне, справа [%s]"    <light>   	 {mqtt=">[mosquitto:megad/20/cmd:command:ON:0=1],>[mosquitto:megad/20/cmd:command:OFF:0=0],<[mosquitto:megad/20/16:state:JSONPATH($.value)]"}
Switch Bedroom_LampOnWall_Left      "Бра в спальне, слева [%s]"     <light>      {mqtt=">[mosquitto:megad/20/cmd:command:ON:1=1],>[mosquitto:megad/20/cmd:command:OFF:1=0],<[mosquitto:megad/30/3:state:JSONPATH($.value)]"}
Могу считать состояние кнопки - но она ведь только переключает, порт на котором лампа включился, но порт кнопки после включения света ведь выключен.

Код: Выделить всё

megad/20/cmd 0=1
megad/20/cmd 1=1
megad/20/cmd 1=0
megad/20/cmd 0=0
megad/20/cmd 1=1
megad/20/cmd 0=1
megad/20/cmd 1=0
megad/20/cmd 0=0
Последний раз редактировалось empenoso 24 фев 2018, 07:22, всего редактировалось 1 раз.

Ruslan
Сообщения: 2184
Зарегистрирован: 06 янв 2014, 20:44

Re: Mega 2561 и MQTT

Сообщение Ruslan » 23 фев 2018, 12:35

empenoso писал(а):
23 фев 2018, 12:25
Далее есть проблема №2:
При переключении на меге порта типа OUT - НЕ выдается никакого сообщения в MQTT.
Вообще, и при HTTP Мега ничего не сообщает серверу, что порт типа OUT переключился. Так Мега работала ВСЕГДА!
По идеологии Меги считается, что сервер и так знает, в каком состоянии находится OUT, а если не знает, то всегда может "спросить".

Я пару раз писал Андрею, что для некоторых пользователей информирование Мегой сервера о переключении OUT было бы полезным.
https://www.ab-log.ru/forum/viewtopic.p ... &start=535
https://www.ab-log.ru/forum/viewtopic.p ... start=1312
И получал обоснованный ответ, в том плане, а с чего это команды Меге посылаются, минуя сервер? Что, собственно, логично.
А что касается "Act", то это изначально рассматривалось как "аварийный" режим (когда "падает" сервер).
С моей скромной точки зрения, реализация информирования Мегой сервера при изменении OUT (при проставленной "галке" в соответствующем чекбоксе) все же была бы полезна.

empenoso
Сообщения: 1039
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

Re: Mega 2561 и MQTT

Сообщение empenoso » 24 фев 2018, 07:35

Ruslan писал(а):
23 фев 2018, 12:35
...
Я пару раз писал Андрею, что для некоторых пользователей информирование Мегой сервера о переключении OUT было бы полезным.
..
С моей скромной точки зрения, реализация информирования Мегой сервера при изменении OUT (при проставленной "галке" в соответствующем чекбоксе) все же была бы полезна.
Я полностью согласен и поддерживаю. Пару лет у же знаком с мегой, с релейной составляющей правда недавно только столкнулся, но все другие устройства, с которыми сталкивался, которые работают через MQTT, всегда сами информируют об изменении состоянию именно выходов, не приходится судить по косвенным показателям типа состояния подключенных кнопок.

Igor78
Сообщения: 143
Зарегистрирован: 26 янв 2015, 14:44
Откуда: Москва

Re: Mega 2561 и MQTT

Сообщение Igor78 » 26 фев 2018, 15:04

empenoso писал(а):
20 фев 2018, 16:21
Igor78 писал(а):
02 фев 2018, 14:59

xxx.items:

Код: Выделить всё

Switch TST_SensorSwitch_Sensor_3 "Sensor3 [%s]" {mqtt="<[mqqt:megad/31/3:state:JS(MEGADmqtt_IN.js)]"}

Number TST_SensorSwitch_R_LED_R "LED R [%d]" {mqtt=">[mqqt:megad/31/cmd:command:*:5e0=${command}]"}
Number TST_SensorSwitch_R_LED_G "LED G [%d]" {mqtt=">[mqqt:megad/31/cmd:command:*:5e2=${command}]"}
Number TST_SensorSwitch_R_LED_B "LED B [%d]" {mqtt=">[mqqt:megad/31/cmd:command:*:5e1=${command}]"}

Switch TST_SensorSwitch_Relay "Relay Power [%s]" {mqtt=">[mqqt:megad/31/cmd:command:ON:5e4=4095],>[mqqt:megad/31/cmd:command:OFF:5e4=0]"}

Switch TST_Lamp2 "Lamp2 [%s]" {mqtt=">[mqqt:megad/31/cmd:command:ON:15=1],>[mqqt:megad/31/cmd:command:OFF:15=0],<[mqqt:megad/31/15:state:JS(MEGADmqtt_OUT.js)]"}
а у вас items для работы с mqqt для меги как выглядят сейчас?
примерно так и выглядят, я пока MQTT тестирую только на портах типа IN/OUT/PWM(PCA9685)
С уважением, Игорь

Igor78
Сообщения: 143
Зарегистрирован: 26 янв 2015, 14:44
Откуда: Москва

Re: Mega 2561 и MQTT

Сообщение Igor78 » 26 фев 2018, 15:08

olegik-ah писал(а):
18 фев 2018, 23:38
Igor78 писал(а):
15 фев 2018, 16:49
мой тестовый сенсорный выключатель с обратной связью
Прошу прощения, что вмешиваюсь в тему - но подскажите, плиз, что за девайс. Спасибо!
Писал где-то выше в этой теме, или посмотрите комментарии от Игорь: https://www.ab-log.ru/smart-house/ether ... ch-sensors
С уважением, Игорь

empenoso
Сообщения: 1039
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

Re: Mega 2561 и MQTT

Сообщение empenoso » 26 фев 2018, 15:58

Igor78 писал(а):
26 фев 2018, 15:04

Код: Выделить всё

Switch TST_Lamp2 "Lamp2 [%s]" {mqtt=">[mqqt:megad/31/cmd:command:ON:15=1],>[mqqt:megad/31/cmd:command:OFF:15=0],<[mqqt:megad/31/15:state:JS(MEGADmqtt_OUT.js)]"}
примерно так и выглядят, я пока MQTT тестирую только на портах типа IN/OUT/PWM(PCA9685)
А как вы переключаете 15 порт и одновременно считываете его состояние? мега ведь не выдает состояния портов типа out.

Igor78
Сообщения: 143
Зарегистрирован: 26 янв 2015, 14:44
Откуда: Москва

Re: Mega 2561 и MQTT

Сообщение Igor78 » 26 фев 2018, 16:16

empenoso писал(а):
26 фев 2018, 15:58
...
А как вы переключаете 15 порт и одновременно считываете его состояние? мега ведь не выдает состояния портов типа out.
Чтобы считать состояние 15 порта, Меге нужно послать запрос get=15 в топик cmd. Например:

Код: Выделить всё

.items
...
Number MegaD31_GetPort {mqtt=">[mqtt:megad/31/cmd:command:*:get=${command}]"}
...

.rules
...
MegaD31_GetPort.sendCommand(15)
...
можно это делать по крону с заданной периодичностью
С уважением, Игорь

empenoso
Сообщения: 1039
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

Re: Mega 2561 и MQTT

Сообщение empenoso » 26 фев 2018, 16:35

Igor78 писал(а):
26 фев 2018, 16:16
Чтобы считать состояние 15 порта, Меге нужно послать запрос get=15 в топик cmd.
...
можно это делать по крону с заданной периодичностью
Спасибо! Я как-то про это не подумал даже.

А физические кнопки как у вас переключают выходы на меге? Средствами меги или через опенхаб?

Igor78
Сообщения: 143
Зарегистрирован: 26 янв 2015, 14:44
Откуда: Москва

Re: Mega 2561 и MQTT

Сообщение Igor78 » 26 фев 2018, 16:42

empenoso писал(а):
26 фев 2018, 16:35
...
А физические кнопки как у вас переключают выходы на меге? Средствами меги или через опенхаб?
У меня пока все через сервер (Openhab2.2)
С уважением, Игорь

empenoso
Сообщения: 1039
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

Re: Mega 2561 и MQTT

Сообщение empenoso » 26 фев 2018, 16:47

Igor78 писал(а):
26 фев 2018, 16:42
empenoso писал(а):
26 фев 2018, 16:35
...
А физические кнопки как у вас переключают выходы на меге? Средствами меги или через опенхаб?
У меня пока все через сервер (Openhab2.2)
Я пишу правила для кнопки. У вас подобным образом тоже?

Код: Выделить всё

Switch Shield2_P24  "Включатель люстры на кухне [%s]"                 { mqtt="<[mosquitto:megad/20/24:state:JSONPATH($.value)]" }
Switch Kitchen_Lamp                 "Лампа на кухне [MAP(switch_ru.map):%s]"             <party>         (Lamp)                                  {mqtt=">[mosquitto:megad/20/cmd:command:ON:13=1],>[mosquitto:megad/20/cmd:command:OFF:13=0]"}

Код: Выделить всё

rule "Shield2_P24"
when
	Item Shield2_P24 changed to ON
then
	if (Kitchen_Lamp.state == ON) { sendCommand(Kitchen_Lamp, OFF) }
	else if (Kitchen_Lamp.state == OFF) { sendCommand(Kitchen_Lamp, ON) }
end
Вроде работает.

Только у меня на одной из мег постоянно отваливается mqtt - думаю на то что именно с этой меги часть данных с датчиков через http получаю?

Код: Выделить всё

Number Shield3_Top_P0_BMx280_Temp               "Темп. на улице [%.2f °C]"	       <garden>     	 (Pipes)    { http="<[http://192.168.48.30/sec/?pt=0&scl=1&i2c_dev=bmx280&i2c_par=1:60000:REGEX((.*?))]" }	
Number Shield3_Top_P0_BMx280_Hum                "Влажность на улице [%.2f %%]"     <humidity>        (Humidity) { http="<[http://192.168.48.30/sec/?pt=0&scl=1&i2c_dev=bmx280&i2c_par=2:60000:REGEX((.*?))]" }	
Number Shield3_Top_P0_BMx280_Press	  	        "Атм. давление [%.2f мм рт. ст.]"  <pressure>		            { http="<[http://192.168.48.30/sec/?pt=0&scl=1&i2c_dev=bmx280:60000:REGEX((.*?))]" }	
Number Shield3_Top_P0_HTU21D_Temp_Bedroom       "Темп. в спальне [%.2f °C]"	       <temperature>	 (Indoor)   { http="<[http://192.168.48.30/sec/?pt=0&scl=1&i2c_dev=htu21d&i2c_par=1:60000:REGEX((.*?))]" }	
Number Shield3_Top_P0_HTU21D_Hum_Bedroom        "Влажность в спальне [%.2f %%]"    <humidity>        (Humidity) { http="<[http://192.168.48.30/sec/?pt=0&scl=1&i2c_dev=htu21d:60000:REGEX((.*?))]" }	
Number Shield3_Top_P0_MAX44009	             	"Освещ. улицы [%.2f lux]"          <sunrise>		            { http="<[http://192.168.48.30/sec/?pt=0&scl=1&i2c_dev=max44009:60000:REGEX((.*?))]" }	

Number Shield3_Top_P2_MH_Z14A	              	"Датчик углекислого газа в спальне [%.2f ADC]"       <carbondioxide> (Bedroom)	{ http="<[http://192.168.48.30/sec/?pt=2&cmd=get:60000:REGEX((.*?))]" }	

Number Shield3_Top_P5_HTU21D_Temp_Bath           "Темп. в ванной [%.2f °C]"	       <temperature>	 (Indoor)   { http="<[http://192.168.48.30/sec/?pt=5&scl=1&i2c_dev=htu21d&i2c_par=1:60000:REGEX((.*?))]" }	
Number Shield3_Top_P5_HTU21D_Hum_Bath            "Влажность в ванной [%.2f %%]"     <humidity>       (Humidity) { http="<[http://192.168.48.30/sec/?pt=5&scl=1&i2c_dev=htu21d:60000:REGEX((.*?))]" }	

String  Shield3_Top_P5_SSD1306_Text             "Дисплей SSD1306 Text [%s]"         { http=">[*:GET:http://192.168.48.30/sec/?pt=5&text=%2$s]" }
String  Shield3_Top_P5_SSD1306_SmallText        "Дисплей SSD1306 SmallText [%s]"    { http=">[*:GET:http://192.168.48.30/sec/?pt=5&text=%2$s&col=30&row=0]" }

Number Shield3_Top_P6_DS18B20_WC_cold			"Темп. хол. трубы, °C [%.2f]"   	        	<temperature_cold>	(Pipes)	  { http="<[http://192.168.48.30/sec/?pt=6&cmd=list:60000:REGEX(.*?ff160e631603:(.*?);(.*))]" }	
Number Shield3_Top_P6_DS18B20_WC_cold_min		"Мин. значение хол. трубы в месяце, °C [%.2f]"
Number Shield3_Top_P6_DS18B20_WC_hot			"Темп. гор. трубы, °C [%.2f]"		            <temperature_hot>	(Pipes)	  { http="<[http://192.168.48.30/sec/?pt=6&cmd=list:60000:REGEX(.*?ff7d30211605:(.*?))]" }	
Number Shield3_Top_P6_DS18B20_WC_hot_max		"Макс. значение гор. трубы в месяце, °C [%.2f]"
Number Shield3_Top_P6_DS18B20_Bath		    	"Темп. ванны, °C [%.2f]"   	                 	<bath>	            (Pipes)	  { http="<[http://192.168.48.30/sec/?pt=6&cmd=list:60000:REGEX(.*?ff9ec0711703:(.*?);(.*))]" }	

Igor78
Сообщения: 143
Зарегистрирован: 26 янв 2015, 14:44
Откуда: Москва

Re: Mega 2561 и MQTT

Сообщение Igor78 » 27 фев 2018, 14:26

empenoso писал(а):
26 фев 2018, 16:47

Я пишу правила для кнопки. У вас подобным образом тоже?
...

Только у меня на одной из мег постоянно отваливается mqtt - думаю на то что именно с этой меги часть данных с датчиков через http получаю?
Да, у меня все похоже. С "отваливанием" Меги от брокера мы тут с Андреем много уже времени потратили и большую часть проблем Андрей решил. Но одна проблема осталась: пока, по неустановленным причинам, в процессе активного обмена данными mosquitto сбрасывает соединение с Мегой (TCP-пакет с флагом RST), через несколько секунд Мега переподключается...
С уважением, Игорь

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Mega 2561 и MQTT

Сообщение Andrey_B » 27 фев 2018, 16:11

Igor78, я приводил пример скрипта, с помощью которого я пытался воспроизвести активный обмен данными. Проблем не заметил.
Если у вас получится написать скрипт, который бы генерировал проблему, это помогло бы найти решение.

empenoso
Сообщения: 1039
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

Re: Mega 2561 и MQTT

Сообщение empenoso » 27 фев 2018, 16:30

Я видимо все по http сделаю, но мега в состояние дисконнект каждые полчаса по mqtt к которой еще по http обращаюсь. и состояние не восстанавливает.
А другая мега нормально.

Igor78
Сообщения: 143
Зарегистрирован: 26 янв 2015, 14:44
Откуда: Москва

Re: Mega 2561 и MQTT

Сообщение Igor78 » 28 фев 2018, 16:46

Andrey_B писал(а):
27 фев 2018, 16:11
Igor78, я приводил пример скрипта, с помощью которого я пытался воспроизвести активный обмен данными. Проблем не заметил.
Если у вас получится написать скрипт, который бы генерировал проблему, это помогло бы найти решение.
В последней версии прошивки брокер перестал выставлять Меге пакеты с флагом RST, но Мега стала гораздо быстрее "уходить в себя" без дисконнекта. Дисконнект в логах москиты видел только раз: по таймауту. В этом случае переподключиться Мегу заставило нажатие кнопки Save на странице Config Web-интерфейса.

Скрипт пока не получается, но вот стенд (максимально упростил) могу описать:

Centos 7.4 on Intel NUC7i7
Openhab 2.2
Mosquito 1.4.14
MegaD-2561 by ab-log.ru (fw: 4.25b7)

P1,P3 - TTP223 (IN,P+R)
P5 - PCA9685 (6 портов - 2 RGB LED, 1 порт - реле щелчка, 1 порт - питание TTP223)
P15,P16 - релейные выходы на "лампочки Ильича"

Нормальное функционирование: Прикасаемся к сенсору, щелкает реле, загорается/гаснет лампа, во время касания сенсор красный, после синий (лампа погашена) или зеленый (горит)

Что получается можно увидеть на видео и прилагаемых логах tshark и mosquitto (tshark снимал весь обмен с Мегой tshark -i eth0 host 10.5.5.31 -P -x -n)
Перед тестами Мегу перезапускал питанием.
10.5.5.3 - сервер
10.5.5.31 - мега

Файлы здесь:https://yadi.sk/d/evHj2YLD3Ss7Vo
С уважением, Игорь

alex-golunov
Сообщения: 8
Зарегистрирован: 21 мар 2018, 15:59

Re: Mega 2561 и MQTT

Сообщение alex-golunov » 21 мар 2018, 16:27

Всем доброго времени суток.

Пытаюсь разобраться с обработкой длинных нажатий по MQTT. Прошивка 4.26b2. Настройки входа Act: 7:2. Mode: P. Все флажки сняты. Вне зависимости от длины нажатия всегда приходит m = 0.

Код: Выделить всё

{"port":0,"m":0,"value":"ON","cnt":1}
Подскажите, что делаю не так и куда копать?

Ответить