Mega 2561 и MQTT
Re: Mega 2561 и MQTT
Попробуйте вот эту версию с брокером для Windows.
Если в каких-то определенных ситуациях (перезагрузка устройства или брокера/сервера) соединение будет происходить не сразу, просто подождите некоторое время.
https://ab-log.ru/files/File/megad-2561 ... a9-hex.zip
Если в каких-то определенных ситуациях (перезагрузка устройства или брокера/сервера) соединение будет происходить не сразу, просто подождите некоторое время.
https://ab-log.ru/files/File/megad-2561 ... a9-hex.zip
Re: Mega 2561 и MQTT
Теперь соединение не теряется, ура
Re: Mega 2561 и MQTT
А мега сообщает только о счетчиках и кнопках по MQTT?
В том плане что от датчиков никаких показаний нет:
В том плане что от датчиков никаких показаний нет:
Re: Mega 2561 и MQTT
А вы про какие датчики говорите?
Например, от I2C-датчиков и по HTTP никакие сообщения самостоятельно не генерируются.
Но есть инструмент для опроса порта с помощью команды вида "get:10", отправленной в топик типа "megad/14/cmd".
Подробнее здесь.
Например, от I2C-датчиков и по HTTP никакие сообщения самостоятельно не генерируются.
Но есть инструмент для опроса порта с помощью команды вида "get:10", отправленной в топик типа "megad/14/cmd".
Подробнее здесь.
Re: Mega 2561 и MQTT
Протестировал связку Mega-MQTT(Mosquitto)-Openhab2.2.
Прошивка MegaD-2561 by ab-log.ru (fw: 4.22b4)
ОС CENTOS 6.9, Mosquito 1.4.14
К Меге подключено SSD1306,PCA9685,BME280,MAX44009 (может это важно)
Нормальной работы добиться не удалось .
Проблема 1:
Мега может работать нормально, но, например, после захода на ее WEB-интерфейс и изменения там состояния одного из выходов OFF->ON->OFF, перестать реагировать на запросы состояния порта (запись в cmd:get=7), вместо ответа в топик получаем переподключение к брокеру
программные ребуты Меги не помогают, помогает перезапуск брокера, после чего дождавшись подключения Меги (секунд 15), Мега начинает нормально реагировать на get
при всем этом Мега нормально реагирует на изменение выходов через MQTT топики!
Проблема 2:
Как получить состояния портов ШИМ-расширителя PCA9685?
SDA порт 5. Хочу получить значения ШИМ порта 0 PCA9685
на cmd:get=5 получаю {"port":"5","value":""}
на cmd:get=5e0 получаю то же ответ в топик /5, а не ожидаемый /5e0
Прошивка MegaD-2561 by ab-log.ru (fw: 4.22b4)
ОС CENTOS 6.9, Mosquito 1.4.14
К Меге подключено SSD1306,PCA9685,BME280,MAX44009 (может это важно)
Нормальной работы добиться не удалось .
Проблема 1:
Мега может работать нормально, но, например, после захода на ее WEB-интерфейс и изменения там состояния одного из выходов OFF->ON->OFF, перестать реагировать на запросы состояния порта (запись в cmd:get=7), вместо ответа в топик получаем переподключение к брокеру
Код: Выделить всё
1516102587: Received PUBLISH from paho439377949400259 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1516102587: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1516102595: Received PINGREQ from paho439377949400259
1516102595: Sending PINGRESP to paho439377949400259
1516102598: New connection from 10.5.5.31 on port 1883.
1516102598: Client megad-31 already connected, closing old connection.
1516102598: Client megad-31 disconnected.
1516102598: New client connected from 10.5.5.31 as megad-31 (c1, k30).
Код: Выделить всё
1516102922: Received PUBLISH from paho439377949400259 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1516102922: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1516102922: Received PUBLISH from megad-31 (d0, q0, r0, m0, 'megad/31/5', ... (23 bytes))
1516102922: Sending PUBLISH to paho439377949400259 (d0, q0, r0, m0, 'megad/31/5', ... (23 bytes))
Проблема 2:
Как получить состояния портов ШИМ-расширителя PCA9685?
SDA порт 5. Хочу получить значения ШИМ порта 0 PCA9685
на cmd:get=5 получаю {"port":"5","value":""}
на cmd:get=5e0 получаю то же ответ в топик /5, а не ожидаемый /5e0
Код: Выделить всё
1516104273: Received PUBLISH from paho439377949400259 (d0, q0, r0, m0, 'megad/31/cmd', ... (7 bytes))
1516104273: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (7 bytes))
1516104273: Received PUBLISH from megad-31 (d0, q0, r0, m0, 'megad/31/5', ... (23 bytes))
1516104273: Sending PUBLISH to paho439377949400259 (d0, q0, r0, m0, 'megad/31/5', ... (23 bytes))
С уважением, Игорь
Re: Mega 2561 и MQTT
По поводу "Проблемы 1" попробуйте вот эту версию.
https://ab-log.ru/files/File/megad-2561 ... a5-hex.zip
По поводу "Проблемы 2" посмотрю, что можно сделать.
https://ab-log.ru/files/File/megad-2561 ... a5-hex.zip
По поводу "Проблемы 2" посмотрю, что можно сделать.
Re: Mega 2561 и MQTT
Проверил, все заработало как надо. Спасибо!Andrey_B писал(а): ↑16 янв 2018, 19:03По поводу "Проблемы 1" попробуйте вот эту версию.
https://ab-log.ru/files/File/megad-2561 ... a5-hex.zip
По поводу "Проблемы 2" посмотрю, что можно сделать.
Теперь работает MQTT одновременно с HTTP/GET запросами к устройству, т.ч. Проблему 2 можно пока обходить по HTTP
Андрей, заметил еще одну вещь: если запрашивать состояние порта типа IN через get=, то получаем в топик {"port":"1":"value:"OFF/26"}, а при срабатывании порта получаем {"port":"1":"cnt":26"}, соответственно обрабатывать эти сообщения нужно по разному, что не удобно, может унифицировать ответ, пусть при сработке Мега присылает новое значение порта и счетчика..
С уважением, Игорь
Re: Mega 2561 и MQTT
Да, бы бы очень удобно если бы всегда было value ON или OFF:
{сейчас}--------------------------------->{мое предложение}
при сработке:
{"port":"0","cnt":"35"} ----------------> {"port":"0","value":"ON","m":"0","cnt":"35"}
{"port":"0","m":"2","cnt":"35"} -------> {"port":"0","value":"ON","m":"2","cnt":"35"}
{"port":"0","m":"1","cnt":"36"} -------> {"port":"0","value":"OFF","m":"1","cnt":"36"}
при запросе ../cmd/get=0
{"port":"0","value":"OFF/36"} --------> {"port":"0","value":"OFF","cnt":"36"}
С уважением, Игорь
Re: Mega 2561 и MQTT
Работает. Спасибо!Andrey_B писал(а): ↑18 янв 2018, 17:16Попробуйте.
https://ab-log.ru/files/File/megad-2561 ... a6-hex.zip
Вот, что вижу:
режим порта IN P+R
ФРОНТ {«port":"0","value":"ON","cnt":"1"}
ДОЛГОЕ НАЖАТИЕ {«port":"0","m":"2","value":"ON","cnt":"1"}
СПАД {«port":"0","m":"1","value":"OFF","cnt":"2"}
Ответ на get=0 {"port":"0","value":"OFF","cnt":"2"}
Теперь порт типа IN в Openhab описывается очень просто:
Код: Выделить всё
Switch Port28 "Port 28 [%s]" {<[mqqt:megad/31/28:state:REGEX(.*(ON|OFF).*)]"}
С уважением, Игорь
Re: Mega 2561 и MQTT
Обнаружил новую проблему: под нагрузкой (10 и более сообщений в сек) Мега отключается от брокера и переподключиться не пытается. Помогает перезагрузка Меги.
подвиснуть может очень быстро:
Код: Выделить всё
1516302778: Received PUBLISH from paho697103329451114 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1516302778: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1516302778: Received PUBLISH from paho697103329451114 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1516302778: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1516302778: Received PUBLISH from paho697103329451114 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1516302778: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1516302778: Received PUBLISH from paho697103329451114 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1516302778: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1516302778: Received PUBLISH from paho697103329451114 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1516302778: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1516302779: Received PUBLISH from megad-31 (d0, q0, r0, m0, 'megad/31/1', ... (43 bytes))
1516302779: Sending PUBLISH to paho697103329451114 (d0, q0, r0, m0, 'megad/31/1', ... (43 bytes))
1516302779: Received PUBLISH from megad-31 (d0, q0, r0, m0, 'megad/31/2', ... (43 bytes))
1516302779: Sending PUBLISH to paho697103329451114 (d0, q0, r0, m0, 'megad/31/2', ... (43 bytes))
1516302779: Received PUBLISH from megad-31 (d0, q0, r0, m0, 'megad/31/3', ... (43 bytes))
1516302779: Sending PUBLISH to paho697103329451114 (d0, q0, r0, m0, 'megad/31/3', ... (43 bytes))
1516302779: Received PUBLISH from megad-31 (d0, q0, r0, m0, 'megad/31/4', ... (43 bytes))
1516302779: Sending PUBLISH to paho697103329451114 (d0, q0, r0, m0, 'megad/31/4', ... (43 bytes))
1516302784: Received PUBLISH from paho697103329451114 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1516302784: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1516302784: Received PUBLISH from megad-31 (d0, q0, r0, m0, 'megad/31/1', ... (44 bytes))
1516302784: Sending PUBLISH to paho697103329451114 (d0, q0, r0, m0, 'megad/31/1', ... (44 bytes))
1516302784: Received PUBLISH from megad-31 (d0, q0, r0, m0, 'megad/31/2', ... (44 bytes))
1516302784: Sending PUBLISH to paho697103329451114 (d0, q0, r0, m0, 'megad/31/2', ... (44 bytes))
1516302784: Received PUBLISH from megad-31 (d0, q0, r0, m0, 'megad/31/3', ... (44 bytes))
1516302784: Sending PUBLISH to paho697103329451114 (d0, q0, r0, m0, 'megad/31/3', ... (44 bytes))
1516302784: Received PUBLISH from megad-31 (d0, q0, r0, m0, 'megad/31/4', ... (44 bytes))
1516302784: Sending PUBLISH to paho697103329451114 (d0, q0, r0, m0, 'megad/31/4', ... (44 bytes))
1516302784: Received PUBLISH from paho697103329451114 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1516302784: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1516302784: Received PUBLISH from paho697103329451114 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1516302784: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1516302784: Received PUBLISH from paho697103329451114 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1516302784: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1516302784: Received PUBLISH from paho697103329451114 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1516302784: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1516302784: Received PUBLISH from paho697103329451114 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1516302784: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1516302784: Received PUBLISH from paho697103329451114 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1516302784: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1516302786: Received PUBLISH from paho697103329451114 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1516302786: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1516302786: Received PUBLISH from megad-31 (d0, q0, r0, m0, 'megad/31/1', ... (35 bytes))
1516302786: Sending PUBLISH to paho697103329451114 (d0, q0, r0, m0, 'megad/31/1', ... (35 bytes))
1516302786: Received PUBLISH from paho697103329451114 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1516302786: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1516302786: Socket error on client megad-31, disconnecting.
Код: Выделить всё
1516303067: New connection from 10.5.5.31 on port 1883.
1516303067: New client connected from 10.5.5.31 as megad-31 (c1, k30).
1516303067: Sending CONNACK to megad-31 (0, 0)
1516303068: Received SUBSCRIBE from megad-31
1516303068: megad/31/cmd (QoS 0)
1516303068: megad-31 0 megad/31/cmd
1516303068: Sending SUBACK to megad-31
1516303076: Received PUBLISH from paho697103329451114 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1516303076: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1516303076: Received PUBLISH from megad-31 (d0, q0, r0, m0, 'megad/31/1', ... (44 bytes))
1516303076: Sending PUBLISH to paho697103329451114 (d0, q0, r0, m0, 'megad/31/1', ... (44 bytes))
1516303076: Received PUBLISH from paho697103329451114 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1516303076: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1516303076: Socket error on client megad-31, disconnecting.
С уважением, Игорь
Re: Mega 2561 и MQTT
Немного не могу понять - в опенхаб как считать значение именно с конкретного порта?
При такой редакции просто любой счетчик считываю.
Код: Выделить всё
Number P10_CountElecImp "Импульсы э/э, текущее значение (3200/кВт*ч) [%s]" { mqtt="<[mosquitto:megad/60:state:JSONPATH($.cnt)]" }
Код: Выделить всё
megad/60 {"port":"10","cnt":"29"}
megad/60 {"port":"10","cnt":"30"}
tele/Camera12v/STATE {"Time":"2018-01-19T22:29:34","Uptime":83,"Vcc":3.159,"POWER":"ON","Wifi":{"AP":1,"SSId":"fontnet","RSSI":100,"APMac":"6C:3B:6B:14:85:2E"}}
tele/Living_room/STATE {"Time":"2018-01-19T22:29:42","Uptime":83,"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-19T22:29:42","Switch1":"ON"}
Re: Mega 2561 и MQTT
port IN ip:x.x.x.31 port 1
items:
Код: Выделить всё
Switch TST_SensorSwitch_Sensor_1 "Sensor1 [%s]" {mqtt="<[mqqt:megad/31/1:state:JS(MEGADmqtt_IN.js)]"}
Код: Выделить всё
(function(i) {
//для прошивки до 4.22b6
/*var array = i.split(",");
array = array[1].split(":");
if (array[0]=="\"cnt\"") return "ON";
else if (array[0]=="\"m\"")
{
if (array[1]=="\"1\"") return "OFF";
else return "ON";
}
else
{
array = array[1].split("/");
if (array[0]=="\"ON") return "ON";
else return "OFF";
}*/
//для прошивки 4.22b6
if ( /.*ON.*/.test(i) ) return "ON";
else return "OFF"
})(input)
items:
Код: Выделить всё
Switch TST_Lamp1 "Lamp1 [%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)]"}
Код: Выделить всё
(function(i) {
if ( /.*ON.*/.test(i) ) return "ON";
else return "OFF"
})(input)
Для меня пока MQTT неработоспособен, продолжаю ипользовать последнюю бету MegaD binding совместно с HTTP binding..
С уважением, Игорь
Re: Mega 2561 и MQTT
А что генерирует столько сообщений в секунду?
У меня похожий сбой наблюдается только при количестве сообщений более 30 в секунду.
Пока сделал изменение, которое способствует переконнекту контроллера к брокеру.
https://ab-log.ru/files/File/megad-2561 ... a7-hex.zip
Re: Mega 2561 и MQTT
Сенсорный выключатель с 4-мя TTP223 (подключены к 14-IN), для обратной связи используются 2 RGB LED и реле для щелчка (подключены к PCA9685), все это под одним стеклом Livolo. Достаточно пару раз хлопнуть ладошкой по стеклу и Мега в нокауте
С уважением, Игорь
Re: Mega 2561 и MQTT
Спасибо за вашу подсказку! Пытаюсь начать использовать mqtt. Через JSON вроде даже проще получается:Igor78 писал(а): ↑20 янв 2018, 00:10
items:...Код: Выделить всё
Switch TST_Lamp1 "Lamp1 [%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 неработоспособен, продолжаю ипользовать последнюю бету MegaD binding совместно с HTTP binding..
Код: Выделить всё
Number P10_CountElecImp "Импульсы э/э, текущее значение (3200/кВт*ч) [%s]" { mqtt="<[mosquitto:megad/60/10:state:JSONPATH($.cnt)]" }
Код: Выделить всё
Number P1_HTU21D_Temp "Темп. на улице [%.2f °C]" <temperature> (Pipes) { http="<[http://192.168.88.60/sec/?pt=0&scl=1&i2c_dev=htu21d&i2c_par=1:60000:REGEX((.*?))]" }
Number P1_HTU21D_Hum "Влажность на улице [%.2f %%]" <humidity> { http="<[http://192.168.88.60/sec/?pt=0&scl=1&i2c_dev=htu21d:60000:REGEX((.*?))]" }
Number P1_MAX44009 "Освещ. улицы [%.2f lux]" <sunrise> { http="<[http://192.168.88.60/sec/?pt=0&scl=1&i2c_dev=max44009:60000:REGEX((.*?))]" }
Код: Выделить всё
Number P7_DS18B20_Kitchen "Темп. кухня [%.2f °C]" <temperature> (Kitchen, Indoor) { http="<[http://192.168.88.60/sec/?pt=7&cmd=list:60000:REGEX(.*?ff4902731604:(?!85)(.*?);(.*))]" }
Number P7_DS18B20_livingroom "Темп. гостиная [%.2f °C]" <temperature> (Living_room, Indoor) { http="<[http://192.168.88.60/sec/?pt=7&cmd=list:60000:REGEX(.*?ff04f2711605:(?!85)(.*?);(.*))]" }
Number P7_DS18B20_Heat_bedroom "Темп. бат. спальни [%.2f °C]" <radiator> (Pipes) { http="<[http://192.168.88.60/sec/?pt=7&cmd=list:60000:REGEX(.*?fff9b7731604:(?!85)(.*?))]" }
Re: Mega 2561 и MQTT
Все таки через json мне показалось синтаксис проще выходит:
Код: Выделить всё
Switch P5_Door "Дверь [MAP(door.map):%s]" { mqtt="<[mosquitto:megad/60/5:state:JSONPATH($.value)]" }