Mega 2561 и MQTT

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
empenoso
Сообщения: 1039
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

Re: Mega 2561 и MQTT

Сообщение empenoso » 22 янв 2018, 14:48

Думаю как отследить длинные нажатия нас сервере. Есть одна идея. При удерживании кнопки появляется параметр m=2, но при коротком нажатии параметра m=1 в выдаче нет. По номеру порта можно легко считать значение m - было короткое или длинное нажатие, если бы параметр m был в выдаче всегда, но он почему то только при длинном нажатии.
Сейчас при коротком нажатии опенхаб выдает ошибку - он ведь ищет m, а его просто нет.

Можно ввести чтобы при коротком нажатии чтобы m=1 тоже было в выдаче по MQTT?

UPD Переписал с условием прямо в JSONPATH, то есть не надо правил, и опенхаб опознает длинное нажатие сразу соотнеся значение m, но, из-за того что m нерегулярно в выдаче - это сыпет ошибками.

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

Switch	P2_ALL	             "ВЫКЛ всё [%s]"	                 { mqtt="<[mosquitto:megad/60/2:state:JSONPATH($.value)]" }     //{channel ="megad:device:14in:P2_ALL:in"}
String	P2_ALL_hold          "ВКЛ всё [%s]"	                     { mqtt="<[mosquitto:megad/60/2:state:JSONPATH($.[?(@.m=='2')].value)]" }

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

megad/60/2 {"port":"2","m":"2","value":"ON","cnt":"1"}
megad/60/2 {"port":"2","m":"1","value":"OFF","cnt":"2"}
megad/60/2 {"port":"2","value":"ON","cnt":"3"}
megad/60/2 {"port":"2","m":"1","value":"OFF","cnt":"4"}
megad/60/2 {"port":"2","value":"ON","cnt":"5"}
megad/60/2 {"port":"2","m":"2","value":"ON","cnt":"5"}
megad/60/2 {"port":"2","m":"1","value":"OFF","cnt":"6"}
megad/60/2 {"port":"2","value":"ON","cnt":"7"}
megad/60/2 {"port":"2","m":"2","value":"ON","cnt":"7"}
megad/60/2 {"port":"2","m":"1","value":"OFF","cnt":"8"}

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

2018-01-22 16:51:36.056 [ERROR] [org.influxdb.impl.BatchProcessor    ] - Batch could not be sent. Data will be lost

java.lang.RuntimeException: {"error":"partial write: field type conflict: input field \"value\" on measurement \"P2_ALL_hold\" is type string, already exists as type float dropped=1"}

	at org.influxdb.impl.InfluxDBErrorHandler.handleError(InfluxDBErrorHandler.java:19) [231:org.openhab.persistence.influxdb:1.11.0]

	at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:242) [231:org.openhab.persistence.influxdb:1.11.0]

	at org.influxdb.impl.$Proxy141.writePoints(Unknown Source) [231:org.openhab.persistence.influxdb:1.11.0]

	at org.influxdb.impl.InfluxDBImpl.write(InfluxDBImpl.java:151) [231:org.openhab.persistence.influxdb:1.11.0]

	at org.influxdb.impl.BatchProcessor.write(BatchProcessor.java:171) [231:org.openhab.persistence.influxdb:1.11.0]

	at org.influxdb.impl.BatchProcessor$1.run(BatchProcessor.java:144) [231:org.openhab.persistence.influxdb:1.11.0]

	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:?]

	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [?:?]

	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [?:?]

	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [?:?]

	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:?]

	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:?]

	at java.lang.Thread.run(Thread.java:748) [?:?]

==> /var/log/openhab2/events.log <==

2018-01-22 16:51:36.667 [vent.ItemStateChangedEvent] - CPU_Uptime changed from 343.4 to 343.7

2018-01-22 16:51:36.696 [vent.ItemStateChangedEvent] - CPU_Threads changed from 346 to 341

2018-01-22 16:51:36.943 [vent.ItemStateChangedEvent] - P2_ALL_hold changed from [] to ["ON"]
Последний раз редактировалось empenoso 23 янв 2018, 08:47, всего редактировалось 2 раза.

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

Re: Mega 2561 и MQTT

Сообщение Igor78 » 22 янв 2018, 15:55

empenoso писал(а):
22 янв 2018, 14:48
Думаю как отследить длинные нажатия нас сервере. Есть одна идея :idea: . При удерживании кнопки появляется параметр m=2, но при коротком нажатии параметра m=1 в выдаче нет. По номеру порта можно легко считать значение m - было короткое или длинное нажатие, если бы параметр m был в выдаче всегда, но он почему то только при длинном нажатии.
Разве? Мои эксперементы показывают, что m=2 при длинном, а m=1 приходит всегда (!) по заднему фронту, может у вас режим порта не P+R?
С уважением, Игорь

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

Re: Mega 2561 и MQTT

Сообщение Igor78 » 22 янв 2018, 15:58

Igor78 писал(а):
22 янв 2018, 15:55
empenoso писал(а):
22 янв 2018, 14:48
Думаю как отследить длинные нажатия нас сервере. Есть одна идея :idea: . При удерживании кнопки появляется параметр m=2, но при коротком нажатии параметра m=1 в выдаче нет. По номеру порта можно легко считать значение m - было короткое или длинное нажатие, если бы параметр m был в выдаче всегда, но он почему то только при длинном нажатии.
Разве? Мои эксперементы показывают, что m=2 при длинном, а m=1 приходит всегда (!) по заднему фронту, может у вас режим порта не P+R?

Я логику понимаю так нет m - передний фронт (P), m=2 длинное нажатие (когда приходит сообщение оно еще может продолжаться), m=1 - задний фронт (R)
С уважением, Игорь

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

Re: Mega 2561 и MQTT

Сообщение empenoso » 22 янв 2018, 16:03

Igor78 писал(а):
22 янв 2018, 15:55
empenoso писал(а):
22 янв 2018, 14:48
Думаю как отследить длинные нажатия нас сервере. Есть одна идея :idea: . При удерживании кнопки появляется параметр m=2, но при коротком нажатии параметра m=1 в выдаче нет. По номеру порта можно легко считать значение m - было короткое или длинное нажатие, если бы параметр m был в выдаче всегда, но он почему то только при длинном нажатии.
Разве? Мои эксперементы показывают, что m=2 при длинном, а m=1 приходит всегда (!) по заднему фронту, может у вас режим порта не P+R?
Поменял настройки меги - на самом деле появилось у брокера m=1, хотя вроде и до этого были такие настройки :? непонятно.

На условие (m=2), чтобы опознать именно длинное нажатие уже не ругется, правда сообщает что NULL, хотя если переключить тип Switch на String - видно что [ON], но пока до конца не работает:

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

Switch	P2_ALL	   "ВЫКЛ всё [%s]"	    { mqtt="<[mosquitto:megad/60/2:state:JSONPATH($.value)]" }     //{channel ="megad:device:14in:P2_ALL:in"}
Switch	P2_ALL_hold        "ВКЛ всё [%s]"	    { mqtt="<[mosquitto:megad/60/2:state:JSONPATH($.[?(@.m=='2')].value)]" }

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

2018-01-22 16:58:29.773 [vent.ItemStateChangedEvent] - P2_ALL changed from OFF to ON

==> /var/log/openhab2/openhab.log <==

2018-01-22 16:58:29.774 [WARN ] [b.core.events.EventPublisherDelegate] - given new state is NULL, couldn't post update for 'P2_ALL_hold'

2018-01-22 16:58:29.948 [WARN ] [b.core.events.EventPublisherDelegate] - given new state is NULL, couldn't post update for 'P2_ALL_hold'

==> /var/log/openhab2/events.log <==

2018-01-22 16:58:29.957 [vent.ItemStateChangedEvent] - P2_ALL changed from ON to OFF

2018-01-22 16:58:30.412 [vent.ItemStateChangedEvent] - dateTimeNTP changed from 2018-01-22T16:57:42.747+0500 to 2018-01-22T16:58:30.404+0500

==> /var/log/openhab2/openhab.log <==

2018-01-22 16:58:31.814 [WARN ] [b.core.events.EventPublisherDelegate] - given new state is NULL, couldn't post update for 'P2_ALL_hold'

==> /var/log/openhab2/events.log <==

2018-01-22 16:58:31.814 [vent.ItemStateChangedEvent] - P2_ALL changed from OFF to ON

==> /var/log/openhab2/openhab.log <==

2018-01-22 16:58:32.808 [WARN ] [b.core.events.EventPublisherDelegate] - given new state is NULL, couldn't post update for 'P2_ALL_hold'

==> /var/log/openhab2/events.log <==

2018-01-22 16:58:33.825 [vent.ItemStateChangedEvent] - P10_CountElecImp changed from 21 to 22

==> /var/log/openhab2/openhab.log <==

2018-01-22 16:58:34.690 [WARN ] [b.core.events.EventPublisherDelegate] - given new state is NULL, couldn't post update for 'P2_ALL_hold'

==> /var/log/openhab2/events.log <==

2018-01-22 16:58:34.697 [vent.ItemStateChangedEvent] - P2_ALL changed from ON to OFF

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

Re: Mega 2561 и MQTT

Сообщение empenoso » 23 янв 2018, 08:43

:arrow: У меня предложение по изменению разметки MQTT. Ориентируюсь на то что что во всех описаниях, метрика идет в кавычках, а сама цифра значения уже без кавычек, а у меги цифра значения тоже в кавычках - из-за этого вылазит ошибка при парсинге с условиями.

Вот какая выдача с других устройств MQTT со ссылками на ресурсы:
https://github.com/arendst/Sonoff-Tasmota/wiki/openHAB

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

$ mosquitto_sub -h localhost -t "+/sonoff-E8A6E4/#" -v

tele/sonoff-E8A6E4/LWT Online
tele/sonoff-E8A6E4/UPTIME {"Time":"2017-07-25T12:02:00", "Uptime":68}
tele/sonoff-E8A6E4/STATE {"Time":"2017-07-25T12:06:28", "Uptime":68, "Vcc":3.122, "POWER":"POWER", "Wifi":{"AP":1, "SSID":"HotelZurBirke", "RSSI":100, "APMac":"24:65:11:BF:12:D8"}}
tele/sonoff-E8A6E4/ENERGY {"Time":"2017-07-25T12:06:28", "Total":0.640, "Yesterday":0.007, "Today":0.003, "Period":0, "Power":0, "Factor":0.00, "Voltage":0, "Current":0.000}
tele/sonoff-E8A6E4/STATE {"Time":"2017-07-25T12:11:28", "Uptime":68, "Vcc":3.122, "POWER":"POWER", "Wifi":{"AP":1, "SSID":"HotelZurBirke", "RSSI":100, "APMac":"24:65:11:BF:12:D8"}}
tele/sonoff-E8A6E4/ENERGY {"Time":"2017-07-25T12:11:28", "Total":0.640, "Yesterday":0.007, "Today":0.003, "Period":0, "Power":0, "Factor":0.00, "Voltage":0, "Current":0.000}
cmnd/sonoff-E8A6E4/POWER OFF
stat/sonoff-E8A6E4/RESULT {"POWER":"OFF"}
stat/sonoff-E8A6E4/POWER OFF
https://github.com/openhab/openhab1-add ... formations:

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

{"devstatus": {
"Sys_Time": 1423858028,
"Sys_Batt_V": 50.5,
"ports": [
{ "Port": 1, "Dev": "GS","Type": "60Hz","Inv_I_L1": 1,"Chg_I_L1": 0,"Buy_I_L1": 0,"Sell_I_L1": 0,"VAC1_in_L1": 15,"VAC2_in_L1": 0,"VAC_out_L1": 113,"Inv_I_L2": 2,"Chg_I_L2": 0,"Buy_I_L2": 0,"Sell_I_L2": 0,"VAC1_in_L2": 3,"VAC2_in_L2": 0,"VAC_out_L2": 114,"AC_Input": "Gen","Batt_V": 50.0,"AC_mode": "NO AC","INV_mode": "Inverting","Warn": ["none"],"Error": ["none"],"AUX": "disabled","RELAY": "disabled"},
{ "Port": 2, "Dev": "GS","Type": "60Hz","Inv_I_L1": 0,"Chg_I_L1": 0,"Buy_I_L1": 0,"Sell_I_L1": 0,"VAC1_in_L1": 16,"VAC2_in_L1": 0,"VAC_out_L1": 114,"Inv_I_L2": 0,"Chg_I_L2": 0,"Buy_I_L2": 0,"Sell_I_L2": 0,"VAC1_in_L2": 3,"VAC2_in_L2": 0,"VAC_out_L2": 113,"AC_Input": "Gen","Batt_V": 49.6,"AC_mode": "NO AC","INV_mode": "Inverting","Warn": ["none"],"Error": ["none"],"AUX": "disabled","RELAY": "disabled"},
{ "Port": 4, "Dev": "CC","Type": "FM","Out_I": 0.0,"In_I": 0,"Batt_V": 50.6,"In_V": 25.1,"Out_kWh": 15.5,"Out_AH": 281,"CC_mode": "Silent","Error": ["none"],"Aux_mode": "Manual","AUX": "disabled"},
{ "Port": 5, "Dev": "CC","Type": "FM","Out_I": 0.0,"In_I": 0,"Batt_V": 50.6,"In_V": 22.2,"Out_kWh": 23.6,"Out_AH": 433,"CC_mode": "Silent","Error": ["none"],"Aux_mode": "Manual","AUX": "disabled"},
{ "Port": 6, "Dev": "FNDC","Enabled": ["A","B"],"Shunt_A_I":  -10.3,"Shunt_A_AH": -62,"Shunt_A_kWh":  -3.120,"Shunt_B_I": -0.1,"Shunt_B_AH": 11,"Shunt_B_kWh":  0.580,"SOC": 96,"Min_SOC": 70,"Days_since_full": 42.1,"CHG_parms_met": false,"In_AH_today": 731,"Out_AH_today": 608,"In_kWh_today":  39.520,"Out_kWh_today":  30.890,"Net_CFC_AH": -52,"Net_CFC_kWh":  -2.570,"Batt_V": 50.5,"Batt_temp": "14 C","Aux_mode": "auto","AUX": "disabled"}
]}}
Вот что вижу у себя на mosquitto:

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

megad/60/10 {"port":"10","value":"ON","cnt":"248"}
tele/Camera12v/STATE {"Time":"2018-01-23T09:37:00","Uptime":60,"Vcc":3.159,"POWER":"ON","Wifi":{"AP":1,"SSId":"fontnet","RSSI":100,"APMac":"6C:3B:6B:14:85:2E"}}
tele/ElectroDragon3/STATE {"Time":"2018-01-23T09:37:00","Uptime":60,"Vcc":3.212,"POWER1":"ON","POWER2":"OFF","Wifi":{"AP":1,"SSId":"fontnet","RSSI":100,"APMac":"6C:3B:6B:14:85:2E"}}
tele/ElectroDragon3/SENSOR {"Time":"2018-01-23T09:37:00","Switch1":"ON","Switch2":"OFF"}
tele/ElectroDragon1/STATE {"Time":"2018-01-23T05:37:01","Uptime":60,"Vcc":3.134,"POWER1":"OFF","POWER2":"ON","Wifi":{"AP":1,"SSId":"fontnet","RSSI":74,"APMac":"6C:3B:6B:14:85:2E"}}
tele/ElectroDragon1/SENSOR {"Time":"2018-01-23T05:37:01","Switch1":"ON","Switch2":"ON"}
tele/Living_room/STATE {"Time":"2018-01-23T09:37:03","Uptime":60,"Vcc":3.212,"POWER":"OFF","Wifi":{"AP":1,"SSId":"fontnet","RSSI":100,"APMac":"6C:3B:6B:14:85:2E"}}
tele/Living_room/SENSOR {"Time":"2018-01-23T09:37:03","Switch1":"ON"}
megad/60/10 {"port":"10","value":"ON","cnt":"249"}
megad/60/10 {"port":"10","value":"ON","cnt":"250"}
megad/60/10 {"port":"10","value":"ON","cnt":"251"}
megad/60/10 {"port":"10","value":"ON","cnt":"252"}
tele/ElectroDragon2/STATE {"Time":"2018-01-23T09:37:29","Uptime":60,"Vcc":3.134,"POWER1":"ON","POWER2":"OFF","Wifi":{"AP":1,"SSId":"fontnet","RSSI":86,"APMac":"6C:3B:6B:14:85:2E"}}
tele/ElectroDragon2/SENSOR {"Time":"2018-01-23T09:37:29","Switch1":"ON","Switch2":"ON"}
megad/60/10 {"port":"10","value":"ON","cnt":"253"}
megad/60/10 {"port":"10","value":"ON","cnt":"254"}
megad/60/10 {"port":"10","value":"ON","cnt":"255"}
tele/Table_lamp/STATE {"Time":"2018-01-23T09:37:52","Uptime":0,"Vcc":3.070,"POWER":"ON","Wifi":{"AP":1,"SSId":"fontnet","RSSI":86,"APMac":"6C:3B:6B:14:85:2E"}}
tele/Table_lamp/SENSOR {"Time":"2018-01-23T09:37:52","Switch1":"ON"}
megad/60/10 {"port":"10","value":"ON","cnt":"256"}
megad/60/10 {"port":"10","value":"ON","cnt":"257"}
megad/60/10 {"port":"10","value":"ON","cnt":"258"}
megad/60/10 {"port":"10","value":"ON","cnt":"259"}
Обратите внимание, что только цифровые значения без кавычек, а где буквы, там кавычки есть: "Vcc":3.070,"POWER":"ON"

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

Re: Mega 2561 и MQTT

Сообщение Andrey_B » 23 янв 2018, 12:19

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

martiniman
Сообщения: 528
Зарегистрирован: 09 авг 2016, 15:09
Откуда: Сочи

Re: Mega 2561 и MQTT

Сообщение martiniman » 23 янв 2018, 12:58

Привет всем.
Хочу прикупить несколько контроллеров MEGA 2561 и мне обязательно нужен MQTT.
Пользуюсь openHAB уже 3 года, в квартире много esp8266 (самодельные, sonoff), ноолайт и MQTT контроллер wirenboard (https://contactless.ru).
Так вот у этого контроллера есть wiki по именованию топиков: https://contactless.ru/wiki/index.php/MQTT
Все очень здраво, не нужно парсить топики, всё по одному значению, для изменения состояния отдельный топик с "/on" в конце.
--
И еще, многие жалуются на не очень хорошую обработку длинных сообщений, т.к. если клиент самописный, то там появляется проблема сборки этого сообщения из нескольких пакетов.
--
Оказалось Wirenboard поддерживает "MegaD-328 with 7I7O extension" - https://github.com/drblez/wirenboard/tree/master/ab-log

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

Re: Mega 2561 и MQTT

Сообщение empenoso » 23 янв 2018, 13:31

Andrey_B писал(а):
23 янв 2018, 12:19
Если коллеги, которые используют MQTT, подтвердят, что нужно без кавычек, и что это ничего у них не сломает, сделаем без кавычек.
Andrey_B, пожалуйста обратите внимание что по проведенным ниже ссылкам вывод цифр в MQTT также без кавычек.
martiniman писал(а):
23 янв 2018, 12:58
Пользуюсь openHAB уже 3 года, в квартире много esp8266 (самодельные, sonoff), ноолайт и MQTT контроллер wirenboard (https://contactless.ru).
Так вот у этого контроллера есть wiki по именованию топиков: https://contactless.ru/wiki/index.php/MQTT

rvv
Сообщения: 205
Зарегистрирован: 24 дек 2014, 16:32

Re: Mega 2561 и MQTT

Сообщение rvv » 23 янв 2018, 13:38

Andrey_B писал(а):
23 янв 2018, 12:19
Если коллеги, которые используют MQTT, подтвердят, что нужно без кавычек, и что это ничего у них не сломает, сделаем без кавычек.
Андрей, подтверждаю, данные типов integer, float, double float передаются именно в этом виде как есть data type.
Это снимает лишнюю нагрузку на конвертацию данных и логика софта на сервере более правильная получается, т.к. заранее знаем что прилетит в топик.
Строковые значения соответственно передаются как строки.

nkh
Сообщения: 39
Зарегистрирован: 12 авг 2016, 11:13

Re: Mega 2561 и MQTT

Сообщение nkh » 23 янв 2018, 17:32

martiniman писал(а):
23 янв 2018, 12:58
Привет всем.
Хочу прикупить несколько контроллеров MEGA 2561 и мне обязательно нужен MQTT.
Пользуюсь openHAB уже 3 года, в квартире много esp8266 (самодельные, sonoff), ноолайт и MQTT контроллер wirenboard (https://contactless.ru).
Так вот у этого контроллера есть wiki по именованию топиков: https://contactless.ru/wiki/index.php/MQTT
Все очень здраво, не нужно парсить топики, всё по одному значению, для изменения состояния отдельный топик с "/on" в конце.
--
И еще, многие жалуются на не очень хорошую обработку длинных сообщений, т.к. если клиент самописный, то там появляется проблема сборки этого сообщения из нескольких пакетов.
--
Оказалось Wirenboard поддерживает "MegaD-328 with 7I7O extension" - https://github.com/drblez/wirenboard/tree/master/ab-log
или проработать свою удобную концепцию, это будет намного удобнее и в стиле mqtt, за это его и любят

r7s
Сообщения: 34
Зарегистрирован: 24 янв 2018, 10:20

Re: Mega 2561 и MQTT

Сообщение r7s » 24 янв 2018, 13:58

Пробую запустить мегу по MQTT (сейчас для связи с home-assistent использую свой гейт MegaD/HTTP<->MQTT, но он не понимает сенсоров и в целом не вижу смысла в нем, если в меге будет нормальный MQTT). Два вопроса.

Первый. С прошивкой 4.22 beta8 мега почему то начала подписываться для команд на странный топик включающий номер канала:

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

янв 24 09:59:33 hasrv mosquitto[18913]: 1516777173: New connection from 192.168.1.118 on port 1883.
янв 24 09:59:33 hasrv mosquitto[18913]: 1516777173: New client connected from 192.168.1.118 as megad-118 (c1, k30).
янв 24 09:59:33 hasrv mosquitto[18913]: 1516777173: Sending CONNACK to megad-118 (0, 0)
янв 24 09:59:34 hasrv mosquitto[18913]: 1516777174: Received SUBSCRIBE from megad-118
янв 24 09:59:34 hasrv mosquitto[18913]: 1516777174:         megad/118/33/cmd (QoS 0)
янв 24 09:59:34 hasrv mosquitto[18913]: 1516777174: megad-118 0 megad/118/33/cmd
янв 24 09:59:34 hasrv mosquitto[18913]: 1516777174: Sending SUBACK to megad-118
Причем произошло это несколько внезапно. Ночью принимала на megad/118/cmd. Возможно связано с включением srv loop, но точно проверить не могу.
Было бы понятно если бы подписка была для каждого канала, либо на один топик без имени канала. А так выглядит странно.
При этом принимает на него команды для всех каналов:

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

megad/118/33/cmd get:32
megad/118/32 {"port":"32","value":"temp:26.05/press:762.64/hum:17.547"}
megad/118/33/cmd get:33
megad/118/33 {"port":"33","value":"6.57"}
Второй вопрос - действие srv loop не распространяется на MQTT?

UPD: Сейчас мега переконектилась к брокеру и подписалась на топик megad/118/32/cmd Так за ней не уследишь :(
upd2: Она опять переконектилась и вернулась на 33. Это два порта к которым подсоединены сенсоры i2c (SDA линии). Еще подсоединены два модуля MegaD-2R, но на их порты не реагирует.
Upd3: Нашел в соседней теме версию 422_beta9 с ней по первому вопросу пока полет нормальный. Мега подписывается на megad/118/cmd . Но и с предыдущей прошивкой она 5 часов продержалась на нем. Потом начала приписывать порты. Пока буду следить.
Upd4: Мега переконектилась к брокеру и подписалась на топик megad/118/32/cmd. Так что бета9 прошивка не помогла.
Последний раз редактировалось r7s 24 янв 2018, 17:18, всего редактировалось 2 раза.

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

Re: Mega 2561 и MQTT

Сообщение Igor78 » 24 янв 2018, 16:45

Andrey_B писал(а):
23 янв 2018, 12:19
Если коллеги, которые используют MQTT, подтвердят, что нужно без кавычек, и что это ничего у них не сломает, сделаем без кавычек.
Подтверждаю
С уважением, Игорь

r7s
Сообщения: 34
Зарегистрирован: 24 янв 2018, 10:20

Re: Mega 2561 и MQTT

Сообщение r7s » 24 янв 2018, 17:40

По поводу формата. Мне тоже кажется, что цифры без кавычек - только лучше.

Возможно даже лучше не только числовые значения без кавычек писать, но и payload от "сложных" устройств, вида

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

{"port":"32","value":"temp:25.75/press:764.28/hum:17.679"}
представлять в виде

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

{"port":32,"value":{"temp":25.75,"press":764.28,"hum":17.679}}
Это думаю тоже упростит жизнь. Сейчас я вынужден писать что то типа value_template: "{{ value_json.value.split('/')[2].split(':')[1] }}" или даже более корректное value_template: "{%for kv in val.split('/')%} {%set k_v=kv.split(':')%}{%if k_v[0]=='temp'%}{{k_v[1]}}{%endif%}{%endfor%}". А так смогу value_template: "{{ value_json.value.temp }}".
Последний раз редактировалось r7s 24 янв 2018, 18:32, всего редактировалось 1 раз.

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

Re: Mega 2561 и MQTT

Сообщение Andrey_B » 24 янв 2018, 18:31

r7s, попробуйте вот эту версию
https://ab-log.ru/files/File/megad-2561 ... a1-hex.zip
MQTT и функция srv-loop в данный момент не совместимы.

r7s
Сообщения: 34
Зарегистрирован: 24 янв 2018, 10:20

Re: Mega 2561 и MQTT

Сообщение r7s » 24 янв 2018, 18:51

r7s, попробуйте вот эту версию
Перезалил. Пока полет нормальный. Но ночью вообще 5 часов продержалась. Так что буду следить. Если будут проблемы - отпишусь.
MQTT и функция srv-loop в данный момент не совместимы.
Жаль. Не исключено, что с ней вообще можно было бы без всяких байндингов и т.п. вещей совмещаться с home-assistant. Хотя на 100% не уверен. По хорошему - еще надо на сервер состояние выходных портов транслировать сразу после изменения их состояния по тем или иным внешним командам. А не ждать до минуты, как это происходило бы с srv-loop.

martiniman
Сообщения: 528
Зарегистрирован: 09 авг 2016, 15:09
Откуда: Сочи

Re: Mega 2561 и MQTT

Сообщение martiniman » 24 янв 2018, 20:23

r7s писал(а):
24 янв 2018, 18:51
По хорошему - еще надо на сервер состояние выходных портов транслировать сразу после изменения их состояния
Это как раз основная фича MQTT, сюда сразу должны прилетать все изменения моментально.

r7s
Сообщения: 34
Зарегистрирован: 24 янв 2018, 10:20

Re: Mega 2561 и MQTT

Сообщение r7s » 25 янв 2018, 12:02

r7s, попробуйте вот эту версию
Перезалил. Пока полет нормальный. Но ночью вообще 5 часов продержалась. Так что буду следить. Если будут проблемы - отпишусь.
Пока полет нормальный. Вечером два раза мега и брокер теряли друг друга, но секунд за 15-20 подключение восстанавливалось. Мега стабильно подписывалась на megad/118/32/cmd.

martiniman
Сообщения: 528
Зарегистрирован: 09 авг 2016, 15:09
Откуда: Сочи

Re: Mega 2561 и MQTT

Сообщение martiniman » 25 янв 2018, 13:02

И всё-таки я в защиту "одно значение" - "один топик". Зачем гонять колбасу по сети, когда в ней изменилась 1 цифра.
Куча разного софта для мобил где можно вбить только один топик с одним значением, и соответственно нет возможности парсить сообщение.

r7s
Сообщения: 34
Зарегистрирован: 24 янв 2018, 10:20

Re: Mega 2561 и MQTT

Сообщение r7s » 25 янв 2018, 14:57

"Колбаса" передается за 1 сетевой пакет (с учетом TCP-шных ACK-ов - думаю 2).
В подходе "одно значение - один топик" данные от, например, BMX280 потребуют 3 пакета (в реальности - думаю 6).
Помня, что мега сама сенсоры не отдает, их надо запрашивать получаем 4 пакета против 12.
Размеры пакетов при этом не важны - длинных "колбас" пока не предвидится, а те что есть сопоставимы или вообще меньше чем служебные заголовки ip/tcp/[mqtt|http].

Надо ли увеличивать нагрузку на сетевую инфраструктуру, саму Мегу (а она не Core i7, обработка сетевого трафика подозреваю дается ей не бесплатно) - еще вопрос. И мне кажется что лучше мегу не перегружать, приоритет у нее должен быть на надежности работы, чем на богатстве настроек.
Опять же, если сервер умеет парсить, то парсить - гораздо (думаю разница измеряется порядками) быстрее, чем передавать по сети. А если не умеет, то, возможно, это не тот сервер, который стоит использовать.

alex946
Сообщения: 204
Зарегистрирован: 05 дек 2015, 22:48
Контактная информация:

Re: Mega 2561 и MQTT

Сообщение alex946 » 25 янв 2018, 15:18

Имхо, все примеры за и против тут немного не о том. Суть-то в том, что чем более стандартно реализован протокол обмена со стороны Меги, тем проще и легче её интегрировать в прочие системы. Если есть возможность улучшить работу MQTT - отлично, нет - тогда и думать про обходные варианты.

Ответить