Mega 2561 и MQTT
Re: Mega 2561 и MQTT
То есть можно надеяться, что будет поддержка живости LWT https://www.hivemq.com/blog/mqtt-essent ... -testament
Re: Mega 2561 и MQTT
Igor78, попробуйте.
https://ab-log.ru/files/File/megad-2561 ... a6-hex.zip
https://ab-log.ru/files/File/megad-2561 ... a6-hex.zip
Re: Mega 2561 и MQTT
Похоже, что все заработало. Объединенные в один пакет команды выполняются. Но подробный тест смогу провести не раньше понедельника, пока тестирую удаленно.Andrey_B писал(а): ↑08 фев 2018, 11:48Igor78, попробуйте.
https://ab-log.ru/files/File/megad-2561 ... a6-hex.zip
Андрей, а команда get должна работать? Раньше на get=0 я получал состояние порта в mega/XX/0, сейчас тишина.
С уважением, Игорь
Re: Mega 2561 и MQTT
Сейчас команда "get" должна быть в отдельном пакете.
Можно сделать, чтобы эта команда обрабатывалась со всеми остальными, но только при условии, что она будет одна такого типа.
Можно сделать, чтобы эта команда обрабатывалась со всеми остальными, но только при условии, что она будет одна такого типа.
Re: Mega 2561 и MQTT
Оставлю это тут, как пример для топиков, счетчик импульсов на дин-рейку на mqtt
https://blog.instalator.ru/archives/711
https://blog.instalator.ru/archives/711
Re: Mega 2561 и MQTT
Посылаю отдельным пакетом:
Код: Выделить всё
mosquitto_pub -h localhost -t megad/31/cmd -m get=0
Код: Выделить всё
mosquitto_sub -h localhost -t megad/31/cmd
get=0
На сработку порта Мега отрабатывает нормально:
Код: Выделить всё
mosquitto_sub -h localhost -t megad/31/0
{"port":0,"m":0,"value":"ON","cnt":25969}
{"port":0,"m":2,"value":"ON","cnt":25969}
{"port":0,"m":1,"value":"OFF","cnt":25970}
Код: Выделить всё
1518417975: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518417975: Received PUBLISH from paho41988319991 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1518417975: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1518417975: Received PUBLISH from paho41988319991 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518417975: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518417975: Received PUBLISH from paho41988319991 (d0, q0, r0, m0, 'megad/31/cmd', ... (4 bytes))
1518417975: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (4 bytes))
1518417975: Received PUBLISH from paho41988319991 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1518417975: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1518417975: Received PUBLISH from paho41988319991 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1518417975: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1518417975: Received PUBLISH from paho41988319991 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518417975: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518417975: Received PUBLISH from paho41988319991 (d0, q0, r0, m0, 'megad/31/cmd', ... (4 bytes))
1518417975: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (4 bytes))
1518417975: Received PUBLISH from paho41988319991 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1518417975: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1518417975: Received PUBLISH from paho41988319991 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518417975: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518417975: Received PUBLISH from paho41988319991 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518417975: Received PUBLISH from megad-31 (d0, q0, r0, m0, 'megad/31/1', ... (42 bytes))
1518417975: Sending PUBLISH to paho41988319991 (d0, q0, r0, m0, 'megad/31/1', ... (42 bytes))
1518417975: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518417975: Received PUBLISH from paho41988319991 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518417975: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518417975: Received PUBLISH from paho41988319991 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518417975: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518417975: Received PUBLISH from paho41988319991 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1518417975: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1518417975: Received PUBLISH from paho41988319991 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518417975: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518417975: Received PUBLISH from paho41988319991 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518417975: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518417985: Socket error on client megad-31, disconnecting.
1518417985: New connection from 10.5.5.31 on port 1883.
1518417985: New client connected from 10.5.5.31 as megad-31 (c1, k30).
1518417985: Sending CONNACK to megad-31 (0, 0)
1518417986: Received SUBSCRIBE from megad-31
1518417986: megad/31/cmd (QoS 0)
1518417986: megad-31 0 megad/31/cmd
1518417986: Sending SUBACK to megad-31
Может Мегу тоже "научить" слать по несколько MQTT сообщений в одном пакете: например если происходят практически одновременные события по нескольким IN-портам (поднесли ладошку к нескольким рядом расположенным TTP223) ...
С уважением, Игорь
Re: Mega 2561 и MQTT
Igor78, что касается "get", попробуйте.
https://ab-log.ru/files/File/megad-2561 ... a8-hex.zip
Мега не будет собирать "практические одновременные" события в один пакет, так как это не вяжется с ее логикой.
С редкими дисконнектами сложнее. Тут нужно точно знать, как со 100% вероятностью воспроизвести ситуацию.
https://ab-log.ru/files/File/megad-2561 ... a8-hex.zip
Мега не будет собирать "практические одновременные" события в один пакет, так как это не вяжется с ее логикой.
С редкими дисконнектами сложнее. Тут нужно точно знать, как со 100% вероятностью воспроизвести ситуацию.
Re: Mega 2561 и MQTT
Проверил, для портов типа IN,OUT,I2C(MAX44009,BMx280) все хорошо, для порта типа PCA9685 возвращает пустоту: {"port":5,"value":""}, а хотелось бы видеть что-то вроде:Andrey_B писал(а): Igor78, что касается "get", попробуйте.
https://ab-log.ru/files/File/megad-2561 ... a8-hex.zip
...
Сейчас команда "get" должна быть в отдельном пакете.
Можно сделать, чтобы эта команда обрабатывалась со всеми остальными, но только при условии, что она будет одна такого типа.
..
{"port":10,"value":{"ext0":0,"ext1":0,"ext3":2000,"ext4":4095,"ext5":0,"ext6":0,"ext7":2000,"ext8":0,"ext9":0,"ext10":0,"ext11":0,"ext12":0,"ext13":0,"ext14":0,"ext15":0,"ext16":0}}
или ответ на запрос get=5e3 в отдельный топик порта расширителя megad/XX/5e3
Т.е. если нужно будет опросить все порты контроллера (например при старте системы управления УД) и брокер объединит несколько get в один TCP-пакет, Мега проигнорирует эти запросы?
С уважением, Игорь
Re: Mega 2561 и MQTT
Запустил скрипт на Python:
Код: Выделить всё
import paho.mqtt.publish as publish
msgs = [{'topic':"megad/31/cmd", 'payload':"5e10=1"},
("megad/31/cmd", "5e10=2", 0, False),
("megad/31/cmd", "5e10=3", 0, False),
("megad/31/cmd", "5e10=4", 0, False),
("megad/31/cmd", "5e10=5", 0, False),
("megad/31/cmd", "5e10=6", 0, False),
("megad/31/cmd", "5e10=7", 0, False),
("megad/31/cmd", "5e10=8", 0, False),
("megad/31/cmd", "5e10=9", 0, False),
("megad/31/cmd", "5e10=10", 0, False),
("megad/31/cmd", "5e10=11", 0, False),
("megad/31/cmd", "5e10=12", 0, False),
("megad/31/cmd", "5e10=13", 0, False),
("megad/31/cmd", "5e10=14", 0, False)]
publish.multiple(msgs, hostname="localhost")
Код: Выделить всё
17:14:32.875145 IP 10.5.5.3.1883 > 10.5.5.31.2850: Flags [P.], seq 23:291, ack 1, win 29200, length 268
0x0000: 4500 0134 0ea7 4000 4006 0cf2 0a05 0503 E..4..@.@.......
0x0010: 0a05 051f 075b 0b22 2d7a 5500 0000 0a32 .....[."-zU....2
0x0020: 5018 7210 1f52 0000 3015 000c 6d65 6761 P.r..R..0...mega
0x0030: 642f 3331 2f63 6d64 3565 3130 3d31 3330 d/31/cmd5e10=130
0x0040: 1500 0c6d 6567 6164 2f33 312f 636d 6435 ...megad/31/cmd5
0x0050: 6531 303d 3132 3015 000c 6d65 6761 642f e10=120...megad/
0x0060: 3331 2f63 6d64 3565 3130 3d31 3130 1500 31/cmd5e10=110..
0x0070: 0c6d 6567 6164 2f33 312f 636d 6435 6531 .megad/31/cmd5e1
0x0080: 303d 3130 3014 000c 6d65 6761 642f 3331 0=100...megad/31
0x0090: 2f63 6d64 3565 3130 3d39 3014 000c 6d65 /cmd5e10=90...me
0x00a0: 6761 642f 3331 2f63 6d64 3565 3130 3d38 gad/31/cmd5e10=8
0x00b0: 3014 000c 6d65 6761 642f 3331 2f63 6d64 0...megad/31/cmd
0x00c0: 3565 3130 3d37 3014 000c 6d65 6761 642f 5e10=70...megad/
0x00d0: 3331 2f63 6d64 3565 3130 3d36 3014 000c 31/cmd5e10=60...
0x00e0: 6d65 6761 642f 3331 2f63 6d64 3565 3130 megad/31/cmd5e10
0x00f0: 3d35 3014 000c 6d65 6761 642f 3331 2f63 =50...megad/31/c
0x0100: 6d64 3565 3130 3d34 3014 000c 6d65 6761 md5e10=40...mega
0x0110: 642f 3331 2f63 6d64 3565 3130 3d33 3014 d/31/cmd5e10=30.
0x0120: 000c 6d65 6761 642f 3331 2f63 6d64 3565 ..megad/31/cmd5e
0x0130: 3130 3d32 0000 0000 0000 0000 0000 0000 10=2............
0x0140: 0000 0000 ....
Значение порта 5e10=120 ! В других итерациях было и 5 и 6 но ни разу 1 (сообщения посылаются в обратной последовательности).
Сервер Linux Centos7.4, Intel NUC7i7
Python 2.7.5 + paho-mqtt module (pim install paho-mqtt)
MegaD-2561 by ab-log.ru (fw: 4.24b8)
С уважением, Игорь
Re: Mega 2561 и MQTT
Добавлю..
Методом подбора выяснил, что Мега обрабатывает нормально TCP-пакеты длинной (lenght в tcpdump) до 201 байта включительно, 202 байта уже проблема...
Методом подбора выяснил, что Мега обрабатывает нормально TCP-пакеты длинной (lenght в tcpdump) до 201 байта включительно, 202 байта уже проблема...
С уважением, Игорь
Re: Mega 2561 и MQTT
https://ab-log.ru/files/File/megad-2561 ... a9-hex.zip
Попробуйте. Теоретически должно быть лучше по части отваливаний.
Остальное пока не делал.
Попробуйте. Теоретически должно быть лучше по части отваливаний.
Остальное пока не делал.
Re: Mega 2561 и MQTT
Не заметил, пакет в 202 байта все так же подвешивает Мегу иAndrey_B писал(а): ↑13 фев 2018, 16:55https://ab-log.ru/files/File/megad-2561 ... a9-hex.zip
Попробуйте. Теоретически должно быть лучше по части отваливаний.
Остальное пока не делал.
Код: Выделить всё
1518531273: Socket error on client megad-31, disconnecting.
С уважением, Игорь
Re: Mega 2561 и MQTT
Попробуйте теперь.
https://ab-log.ru/files/File/megad-2561 ... a1-hex.zip
https://ab-log.ru/files/File/megad-2561 ... a1-hex.zip
Re: Mega 2561 и MQTT
Спасибо! Однозначно стало лучше: На тестах Мега нормально переварила пакет в 512 байт (у меня Москито более длинные пакеты не отправляет, но принимать может). Однако если послать брокеру пакет больше 512 байт, он его делит на несколько пакетов по 512 и тут Мега опять не выдерживает...Andrey_B писал(а): ↑14 фев 2018, 19:28Попробуйте теперь.
https://ab-log.ru/files/File/megad-2561 ... a1-hex.zip
В реальных условиях, мой тестовый сенсорный выключатель с обратной связью, также, стал работать значительно стабильнее, но все равно, постучав секунды 4-5 по стеклу можно подвесить Мегу, один раз она без внешнего вмешательства, даже, не хотела переподключаться к брокеру, при этом нормально работал веб-интерфейс и непрерывно мигал Act. По дампу в это время очень больших пакетов не видно ( макс 150-200 байт).
Оптимизация кода в Openhab c целью уменьшения (разноса по времени) подряд посылаемых команд позволила привести работу выключателя почти к идеалу.. Т.е. он стал работать почти также как по HTTP, кстати, в режиме работы по HTTP, под нагрузкой зависает уже не
Мега а сервер входящих сообщений MegaD-Binding..
С уважением, Игорь
Re: Mega 2561 и MQTT
Дело в том, что брокер делит посылку на два пакета, предполагая, что принимающая сторона должна собрать все в один пакет.Igor78 писал(а): ↑15 фев 2018, 16:49Однозначно стало лучше: На тестах Мега нормально переварила пакет в 512 байт (у меня Москито более длинные пакеты не отправляет, но принимать может). Однако если послать брокеру пакет больше 512 байт, он его делит на несколько пакетов по 512 и тут Мега опять не выдерживает...
То есть, в конце первого пакета может идти, скажем "mega", а в начале второго "d/14/cmd..."
Микроконтроллер в текущей реализации считает второй пакет ошибочным и выставляет флаг RST. Вы это можете увидеть в tcpdump'е.
Контроллер экономит память. Это ценный ресурс. И он не собирается собирать пакеты. А если таким макаром прилетит 100кб? или 100мб?
Теоретически какой-то хак можно придумать, чтобы контроллер работал с "продолжением", но тут могут возникнуть сложности. Да и обсуждаем мы синтетическую ситуацию. На практике это маловероятно.
У вас отлично получается. Сделайте скрипт, который эмулирует эту ситуацию, будем смотреть.
-
- Сообщения: 528
- Зарегистрирован: 09 авг 2016, 15:09
- Откуда: Сочи
Re: Mega 2561 и MQTT
Цель оптимизации - минимизировать количество параллельно (из разных правил) посылаемых одной Меге MQTT-комманд. Решил путем добавления флагов (глобальных переменных те, что вверху файла .rules), блокирующих (отправляющих в ожидание) одни правила, пока выполняются другие. Можно еще добавить паузы внутри правил, но пока этого не делал.martiniman писал(а): ↑16 фев 2018, 00:39Подскажите, что за оптимизация? А лучше пример вашего кода.
Спасибо.
Код: Выделить всё
var int Mega31_busy_flag //флаг занятости Меги
rule "INIT" //начальная инициализация глобальных переменных при старте системы или изменении файла rules
when
System started
then
Mega31_busy_flag=0
end
rule "Rule 1"
when
Item Sensor_1 changed to ON
then
var int i=0
while((Mega31_busy_flag==1)&&(i<5))
{
Thread::sleep(50)
i++
}
if(i==5){return}
Mega31_busy_flag=1
// ВАШ КОД
Mega31_busy_flag=0
end
//...
rule "Rule XX"
when
Item Sensor_XX changed to ON
then
var int i=0
while((Mega31_busy_flag==1)&&(i<5))
{
Thread::sleep(50)
i++
}
if(i==5){return}
Mega31_busy_flag=1
// ВАШ КОД
Mega31_busy_flag=0
end
С уважением, Игорь
Re: Mega 2561 и MQTT
Искусственно получается воссоздать ситуацию с делением одной посылки на несколько TCP-пакетов по 512 байт с резкой по живому
Вот пример работы специально созданных правил в Openhab2:
IP MegaD: 10.5.5.31
IP Server: 10.5.5.3
Код: Выделить всё
13:15:40.017673 IP 10.5.5.3.1883 > 10.5.5.31.3056: Flags [.], seq 45:557, ack 1, win 29200, length 512
0x0000: 4500 0228 580f 4000 4006 c295 0a05 0503 E..(X.@.@.......
0x0010: 0a05 051f 075b 0bf0 2559 4f37 0000 3c9b .....[..%YO7..<.
0x0020: 5010 7210 2046 0000 3014 000c 6d65 6761 P.r..F..0...mega
0x0030: 642f 3331 2f63 6d64 3565 3132 3d30 3017 d/31/cmd5e12=00.
0x0040: 000c 6d65 6761 642f 3331 2f63 6d64 3565 ..megad/31/cmd5e
0x0050: 3133 3d34 3039 3530 1400 0c6d 6567 6164 13=40950...megad
0x0060: 2f33 312f 636d 6435 6531 313d 3030 1200 /31/cmd5e11=00..
0x0070: 0c6d 6567 6164 2f33 312f 636d 6431 383d .megad/31/cmd18=
0x0080: 3130 1400 0c6d 6567 6164 2f33 312f 636d 10...megad/31/cm
0x0090: 6435 6531 303d 3030 1400 0c6d 6567 6164 d5e10=00...megad
0x00a0: 2f33 312f 636d 6435 6531 323d 3030 1700 /31/cmd5e12=00..
0x00b0: 0c6d 6567 6164 2f33 312f 636d 6435 6531 .megad/31/cmd5e1
0x00c0: 313d 3230 3030 3017 000c 6d65 6761 642f 1=20000...megad/
0x00d0: 3331 2f63 6d64 3565 3133 3d34 3039 3530 31/cmd5e13=40950
0x00e0: 1400 0c6d 6567 6164 2f33 312f 636d 6435 ...megad/31/cmd5
0x00f0: 6531 313d 3030 1200 0c6d 6567 6164 2f33 e11=00...megad/3
0x0100: 312f 636d 6431 383d 3030 1700 0c6d 6567 1/cmd18=00...meg
0x0110: 6164 2f33 312f 636d 6435 6531 303d 3230 ad/31/cmd5e10=20
0x0120: 3030 3014 000c 6d65 6761 642f 3331 2f63 000...megad/31/c
0x0130: 6d64 3565 3132 3d30 3014 000c 6d65 6761 md5e12=00...mega
0x0140: 642f 3331 2f63 6d64 3565 3130 3d30 3017 d/31/cmd5e10=00.
0x0150: 000c 6d65 6761 642f 3331 2f63 6d64 3565 ..megad/31/cmd5e
0x0160: 3132 3d32 3030 3030 1400 0c6d 6567 6164 12=20000...megad
0x0170: 2f33 312f 636d 6435 6531 313d 3030 1700 /31/cmd5e11=00..
0x0180: 0c6d 6567 6164 2f33 312f 636d 6435 6531 .megad/31/cmd5e1
0x0190: 333d 3430 3935 3014 000c 6d65 6761 642f 3=40950...megad/
0x01a0: 3331 2f63 6d64 3565 3131 3d30 3012 000c 31/cmd5e11=00...
0x01b0: 6d65 6761 642f 3331 2f63 6d64 3138 3d31 megad/31/cmd18=1
0x01c0: 3017 000c 6d65 6761 642f 3331 2f63 6d64 0...megad/31/cmd
0x01d0: 3565 3130 3d32 3030 3030 1400 0c6d 6567 5e10=20000...meg
0x01e0: 6164 2f33 312f 636d 6435 6531 323d 3030 ad/31/cmd5e12=00
0x01f0: 1400 0c6d 6567 6164 2f33 312f 636d 6435 ...megad/31/cmd5
0x0200: 6531 303d 3030 1400 0c6d 6567 6164 2f33 e10=00...megad/3
0x0210: 312f 636d 6435 6531 323d 3030 1700 0c6d 1/cmd5e12=00...m
0x0220: 6567 6164 2f33 312f 0000 0000 0000 0000 egad/31/........
0x0230: 0000 0000 0000 0000 ........
13:15:40.021197 IP 10.5.5.31.3056 > 10.5.5.3.1883: Flags [.], ack 45, win 1024, length 0
0x0000: 4500 0028 580e 4000 4006 c496 0a05 051f E..(X.@.@.......
0x0010: 0a05 0503 0bf0 075b 0000 3c9b 2559 4f37 .......[..<.%YO7
0x0020: 5010 0400 c932 0000 0000 0000 0000 6fcf P....2........o.
0x0030: 2ee5 6fcf d000 0000 0000 0000 0000 ..o...........
13:15:40.021214 IP 10.5.5.3.1883 > 10.5.5.31.3056: Flags [P.], seq 557:594, ack 1, win 29200, length 37
0x0000: 4500 004d 5810 4000 4006 c46f 0a05 0503 E..MX.@.@..o....
0x0010: 0a05 051f 075b 0bf0 2559 5137 0000 3c9b .....[..%YQ7..<.
0x0020: 5018 7210 1e6b 0000 636d 6435 6531 313d P.r..k..cmd5e11=
0x0030: 3230 3030 3017 000c 6d65 6761 642f 3331 20000...megad/31
0x0040: 2f63 6d64 3565 3133 3d34 3039 3500 0000 /cmd5e13=4095...
0x0050: 0000 0000 0000 0000 0000 0000 00 .............
13:15:40.025453 IP 10.5.5.31.3056 > 10.5.5.3.1883: Flags [.], ack 557, win 1024, length 0
0x0000: 4500 0028 580f 4000 4006 c495 0a05 051f E..(X.@.@.......
0x0010: 0a05 0503 0bf0 075b 0000 3c9b 2559 5137 .......[..<.%YQ7
0x0020: 5010 0400 c732 0000 0000 0000 0000 6fcf P....2........o.
0x0030: 2ee5 6fcf 0000 0000 0000 0000 0000 ..o...........
13:15:40.026495 IP 10.5.5.31.3056 > 10.5.5.3.1883: Flags [R.], seq 1, ack 594, win 1024, length 0
0x0000: 4500 0028 5810 4000 4006 c494 0a05 051f E..(X.@.@.......
0x0010: 0a05 0503 0bf0 075b 0000 3c9b 2559 515c .......[..<.%YQ\
0x0020: 5014 0400 c709 0000 0000 0000 0000 7002 P.............p.
0x0030: 2ee5 38a1 3012 000c 6d65 6761 642f ..8.0...megad/
Код: Выделить всё
Socket error on client megad-31, disconnecting.
Код: Выделить всё
15:28:42.988718 IP 10.5.5.3.1883 > 10.5.5.31.2924: Flags [.], ack 11275, win 29200, length 0
0x0000: 4500 0028 c034 4000 4006 5c70 0a05 0503 E..(.4@.@.\p....
0x0010: 0a05 051f 075b 0b6c 8cee f308 0000 4daa .....[.l......M.
0x0020: 5010 7210 1e46 0000 0101 080a 2f5f 3f95 P.r..F....../_?.
0x0030: 2f5f 3f64 3036 000a /_?d06..
15:28:42.997640 IP 10.5.5.31.2924 > 10.5.5.3.1883: Flags [P.], seq 11275:11331, ack 12170, win 1024, length 56
0x0000: 4500 0060 c034 4000 4006 5c38 0a05 051f E..`.4@.@.\8....
0x0010: 0a05 0503 0b6c 075b 0000 4daa 8cee f308 .....l.[..M.....
0x0020: 5018 0400 c9ea 0000 3036 000a 6d65 6761 P.......06..mega
0x0030: 642f 3331 2f33 7b22 706f 7274 223a 332c d/31/3{"port":3,
0x0040: 226d 223a 312c 2276 616c 7565 223a 224f "m":1,"value":"O
0x0050: 4646 222c 2263 6e74 223a 3236 3032 327d FF","cnt":26022}
0x0060: 3030 1300 0c6d 6567 6164 2f33 312f 636d 00...megad/31/cm
15:28:42.997665 IP 10.5.5.3.1883 > 10.5.5.31.2924: Flags [.], ack 11331, win 29200, length 0
0x0000: 4500 0028 c035 4000 4006 5c6f 0a05 0503 E..(.5@.@.\o....
0x0010: 0a05 051f 075b 0b6c 8cee f308 0000 4de2 .....[.l......M.
0x0020: 5010 7210 1e46 0000 0101 080a 2f5f 3f9d P.r..F....../_?.
0x0030: 2f5f 3f95 3013 000c /_?.0...
15:28:43.022226 IP 127.0.0.1.1883 > 127.0.0.1.55258: Flags [.], ack 12166, win 451, options [nop,nop,TS val 794771399 ecr 794771359], length 0
0x0000: 4500 0034 37d4 4000 4006 04ee 7f00 0001 E..47.@.@.......
0x0010: 7f00 0001 075b d7da 7fd4 69b8 4865 440c .....[....i.HeD.
0x0020: 8010 01c3 fe28 0000 0101 080a 2f5f 3fc7 .....(....../_?.
0x0030: 2f5f 3f9f 2f34 7b22 706f 7274 223a 342c /_?./4{"port":4,
0x0040: 226d 223a "m":
15:28:43.022238 IP 127.0.0.1.55258 > 127.0.0.1.1883: Flags [P.], seq 12166:12190, ack 11270, win 350, options [nop,nop,TS val 794771399 ecr 794771399], length 24
0x0000: 4500 004c 199f 4000 4006 230b 7f00 0001 E..L..@.@.#.....
0x0010: 7f00 0001 d7da 075b 4865 440c 7fd4 69b8 .......[HeD...i.
0x0020: 8018 015e fe40 0000 0101 080a 2f5f 3fc7 ...^.@....../_?.
0x0030: 2f5f 3fc7 3016 000c 6d65 6761 642f 3331 /_?.0...megad/31
0x0040: 2f63 6d64 3565 343d 3430 3935 226d 223a /cmd5e4=4095"m":
0x0050: 302c 2276 616c 7565 223a 224f 0,"value":"O
15:28:43.022284 IP 127.0.0.1.1883 > 127.0.0.1.55258: Flags [.], ack 12190, win 451, options [nop,nop,TS val 794771399 ecr 794771399], length 0
0x0000: 4500 0034 37d5 4000 4006 04ed 7f00 0001 E..47.@.@.......
0x0010: 7f00 0001 075b d7da 7fd4 69b8 4865 4424 .....[....i.HeD$
0x0020: 8010 01c3 fe28 0000 0101 080a 2f5f 3fc7 .....(....../_?.
0x0030: 2f5f 3fc7 3035 000a 6d65 6761 642f 3331 /_?.05..megad/31
0x0040: 2f34 7b22 /4{"
15:28:43.022323 IP 10.5.5.3.1883 > 10.5.5.31.2924: Flags [P.], seq 12170:12194, ack 11331, win 29200, length 24
0x0000: 4500 0040 c036 4000 4006 5c56 0a05 0503 E..@.6@.@.\V....
0x0010: 0a05 051f 075b 0b6c 8cee f308 0000 4de2 .....[.l......M.
0x0020: 5018 7210 1e5e 0000 3016 000c 6d65 6761 P.r..^..0...mega
0x0030: 642f 3331 2f63 6d64 3565 343d 3430 3935 d/31/cmd5e4=4095
0x0040: 2f34 7b22 706f 7274 223a 342c 226d 223a /4{"port":4,"m":
15:28:43.023790 IP 10.5.5.31.2924 > 10.5.5.3.1883: Flags [.], ack 12194, win 1024, length 0
0x0000: 4500 0028 c036 4000 4006 5c6e 0a05 051f E..(.6@.@.\n....
0x0010: 0a05 0503 0b6c 075b 0000 4de2 8cee f320 .....l.[..M.....
0x0020: 5010 0400 acf0 0000 0000 0000 0000 3f9f P.............?.
0x0030: 2f5f 3f9f 3013 000c 6d65 6761 642f /_?.0...megad/
15:28:43.030399 IP 127.0.0.1.55258 > 127.0.0.1.1883: Flags [P.], seq 12190:12211, ack 11270, win 350, options [nop,nop,TS val 794771407 ecr 794771399], length 21
0x0000: 4500 0049 19a0 4000 4006 230d 7f00 0001 E..I..@.@.#.....
0x0010: 7f00 0001 d7da 075b 4865 4424 7fd4 69b8 .......[HeD$..i.
0x0020: 8018 015e fe3d 0000 0101 080a 2f5f 3fcf ...^.=....../_?.
0x0030: 2f5f 3fc7 3013 000c 6d65 6761 642f 3331 /_?.0...megad/31
0x0040: 2f63 6d64 3565 343d 306c 7565 223a 224f /cmd5e4=0lue":"O
0x0050: 4646 222c 2263 6e74 22 FF","cnt"
15:28:43.030560 IP 127.0.0.1.1883 > 127.0.0.1.55258: Flags [.], ack 12211, win 451, options [nop,nop,TS val 794771407 ecr 794771407], length 0
0x0000: 4500 0034 37d6 4000 4006 04ec 7f00 0001 E..47.@.@.......
0x0010: 7f00 0001 075b d7da 7fd4 69b8 4865 4439 .....[....i.HeD9
0x0020: 8010 01c3 fe28 0000 0101 080a 2f5f 3fcf .....(....../_?.
0x0030: 2f5f 3fcf 2f31 7b22 706f 7274 223a 312c /_?./1{"port":1,
0x0040: 226d 223a "m":
15:28:43.030591 IP 10.5.5.3.1883 > 10.5.5.31.2924: Flags [P.], seq 12194:12215, ack 11331, win 29200, length 21
0x0000: 4500 003d c037 4000 4006 5c58 0a05 0503 E..=.7@.@.\X....
0x0010: 0a05 051f 075b 0b6c 8cee f320 0000 4de2 .....[.l......M.
0x0020: 5018 7210 1e5b 0000 3013 000c 6d65 6761 P.r..[..0...mega
0x0030: 642f 3331 2f63 6d64 3565 343d 302f 3331 d/31/cmd5e4=0/31
0x0040: 2f32 7b22 706f 7274 223a 322c 22 /2{"port":2,"
15:28:43.033482 IP 10.5.5.31.2924 > 10.5.5.3.1883: Flags [.], ack 12215, win 1024, length 0
0x0000: 4500 0028 c037 4000 4006 5c6d 0a05 051f E..(.7@.@.\m....
0x0010: 0a05 0503 0b6c 075b 0000 4de2 8cee f335 .....l.[..M....5
0x0020: 5010 0400 acdb 0000 0000 0000 0000 6761 P.............ga
0x0030: 642f 3331 2f33 7b22 706f 7274 223a d/31/3{"port":
15:28:43.157750 IP 10.5.5.31.2924 > 10.5.5.3.1883: Flags [P.], seq 11331:11386, ack 12215, win 1024, length 55
0x0000: 4500 005f c037 4000 4006 5c36 0a05 051f E.._.7@.@.\6....
0x0010: 0a05 0503 0b6c 075b 0000 4de2 8cee f335 .....l.[..M....5
0x0020: 5018 0400 0679 0000 3035 000a 6d65 6761 P....y..05..mega
0x0030: 642f 3331 2f31 7b22 706f 7274 223a 312c d/31/1{"port":1,
0x0040: 226d 223a 302c 2276 616c 7565 223a 224f "m":0,"value":"O
0x0050: 4e22 2c22 636e 7422 3a32 3439 3939 7d7d N","cnt":24999}}
0x0060: 642f 3331 2f63 6d64 3565 343d 302f 63 d/31/cmd5e4=0/c
15:28:43.158124 IP 10.5.5.3.1883 > 10.5.5.31.2924: Flags [R.], seq 12215, ack 11386, win 29200, length 0
0x0000: 4500 0028 c038 4000 4006 5c6c 0a05 0503 E..(.8@.@.\l....
0x0010: 0a05 051f 075b 0b6c 8cee f335 0000 4e19 .....[.l...5..N.
0x0020: 5014 7210 1e46 0000 0101 080a 2f5f 3fc7 P.r..F....../_?.
0x0030: 2f5f 3f9f 3013 000c /_?.0...
15:28:43.160555 IP 10.5.5.31.2924 > 10.5.5.3.1883: Flags [R.], seq 11386, ack 12215, win 1024, length 0
0x0000: 4500 0028 c038 4000 4006 5c6c 0a05 051f E..(.8@.@.\l....
0x0010: 0a05 0503 0b6c 075b 0000 4e19 8cee f335 .....l.[..N....5
0x0020: 5014 0400 aca0 0000 0000 0000 0000 3fc7 P.............?.
0x0030: 2f5f 3f9f 2f34 7b22 706f 7274 223a /_?./4{"port":
В логах москиты в это время:
Код: Выделить всё
1518784122: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (4 bytes))
1518784122: Received PUBLISH from paho525477355426415 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518784122: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518784122: Received PUBLISH from megad-31 (d0, q0, r0, m0, 'megad/31/2', ... (41 bytes))
1518784122: Sending PUBLISH to paho525477355426415 (d0, q0, r0, m0, 'megad/31/2', ... (41 bytes))
1518784122: Received PUBLISH from paho525477355426415 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1518784122: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1518784122: Received PUBLISH from megad-31 (d0, q0, r0, m0, 'megad/31/3', ... (41 bytes))
1518784122: Sending PUBLISH to paho525477355426415 (d0, q0, r0, m0, 'megad/31/3', ... (41 bytes))
1518784122: Received PUBLISH from paho525477355426415 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518784122: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518784122: Received PUBLISH from megad-31 (d0, q0, r0, m0, 'megad/31/4', ... (40 bytes))
1518784122: Sending PUBLISH to paho525477355426415 (d0, q0, r0, m0, 'megad/31/4', ... (40 bytes))
1518784122: Received PUBLISH from paho525477355426415 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1518784122: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1518784122: Received PUBLISH from paho525477355426415 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518784122: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518784122: Received PUBLISH from paho525477355426415 (d0, q0, r0, m0, 'megad/31/cmd', ... (4 bytes))
1518784122: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (4 bytes))
1518784122: Received PUBLISH from paho525477355426415 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1518784122: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1518784122: Received PUBLISH from paho525477355426415 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518784122: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518784122: Received PUBLISH from megad-31 (d0, q0, r0, m0, 'megad/31/2', ... (42 bytes))
1518784122: Sending PUBLISH to paho525477355426415 (d0, q0, r0, m0, 'megad/31/2', ... (42 bytes))
1518784122: Received PUBLISH from paho525477355426415 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518784122: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518784122: Received PUBLISH from megad-31 (d0, q0, r0, m0, 'megad/31/4', ... (41 bytes))
1518784122: Sending PUBLISH to paho525477355426415 (d0, q0, r0, m0, 'megad/31/4', ... (41 bytes))
1518784122: Received PUBLISH from paho525477355426415 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518784122: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518784122: Received PUBCOMP from megad-31 (Mid: 13824)
1518784123: Received PUBLISH from paho525477355426415 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1518784123: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (8 bytes))
1518784123: Received PUBLISH from paho525477355426415 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518784123: Sending PUBLISH to megad-31 (d0, q0, r0, m0, 'megad/31/cmd', ... (5 bytes))
1518784123: Socket error on client megad-31, disconnecting.
В других тестах я получал дисконнект сразу после Received PUBCOMP from megad-31 (Mid: 13824)
С уважением, Игорь
-
- Сообщения: 528
- Зарегистрирован: 09 авг 2016, 15:09
- Откуда: Сочи
Re: Mega 2561 и MQTT
Я уже натыкался на могопоточность.Igor78 писал(а): ↑16 фев 2018, 12:01Цель оптимизации - минимизировать количество параллельно (из разных правил) посылаемых одной Меге MQTT-комманд. Решил путем добавления флагов (глобальных переменных те, что вверху файла .rules), блокирующих (отправляющих в ожидание) одни правила, пока выполняются другие. Можно еще добавить паузы внутри правил, но пока этого не делал.
Код ниже может выполнятся не по порядку (сначала 20, потом 10 и тп), т.к. ява параллелит выполнение сама (это зависит от быстроты компа).
На эту тему много на форуме openHAB.
Код: Выделить всё
Dimmer.sendCommand(10)
Thread::sleep(50)
Dimmer.sendCommand(20)
Thread::sleep(50)
Dimmer.sendCommand(30)
Thread::sleep(50)
Dimmer.sendCommand(50)
И если повставлять lock везде, где отправляется в топики, то всё по идее должно быть по порядку. И уже тут вставить задержку.
И не нужно гонять циклы.
Код: Выделить всё
import java.util.concurrent.locks.ReentrantLock
var java.util.concurrent.locks.ReentrantLock lock = new java.util.concurrent.locks.ReentrantLock()
rule ConcurrentCode
when
Item Item received update
then
lock.lock()
try {
// do stuff (e.g. create and start a timer ...)
} finally{
lock.unlock()
}
end
Re: Mega 2561 и MQTT
Igor78,
сделал такой скрипт
Нажимал кнопки, подключенные к P0 и P1 так часто, как только мог. На протяжении нескольких минут.
Никаких сбоев не заметил. Ваш дамп какой-то слегка странный. В данном случае мне нужно лично воспроизвести ситуацию.
Может, у вас получится написать скрипт, который будет имитировать проблему.
сделал такой скрипт
Код: Выделить всё
import paho.mqtt.client as mqtt
def on_message(mqttc, obj, msg):
print(msg.topic+" "+str(msg.qos)+" "+str(msg.payload))
mqttc.publish("megad/14/cmd","7=2",2)
mqttc = mqtt.Client()
mqttc.on_message = on_message
mqttc.connect("192.168.0.1", 1883, 60)
mqttc.subscribe("megad/14/0", 0)
mqttc.subscribe("megad/14/1", 0)
mqttc.loop_forever()
disconnect()
Никаких сбоев не заметил. Ваш дамп какой-то слегка странный. В данном случае мне нужно лично воспроизвести ситуацию.
Может, у вас получится написать скрипт, который будет имитировать проблему.