HBus

akouz
Сообщения: 254
Зарегистрирован: Ср июл 09, 2014 3:48 pm
Благодарил (а): 6 раз
Поблагодарили: 41 раз

Re: HBus

Сообщение akouz » Пн май 20, 2019 1:57 pm

Выложил первую версию скетча для WiFi шлюза.

Теперь пора вернуться к освоению МД и проверить, как это будет работать все вместе.

PS: Выложил новую ревизию 1.1 скетча для шлюза, в которой добавил поддержку сенсора BME280/BMP280 и маленького OLED дисплея 128х32. На дисплей в темпе раз в 4 сек выводятся:
- h/w и s/w ревизии
- измеренное напряжение питания на шине HBus
- наличие подключения к WiFi и к MQTT брокеру
- результаты измерений BME280/BMP280: температура, давление, относительная влажность

PPS: В rev 1.2 собственные топики шлюза не только бродкастятся в HBus, но также отправляются MQTT брокеру.

PPPS: В rev 1.3 добавил измерение СО2 при помощи сенсора MH-Z19B, а также вывод текущего времени (час:мин) на OLED дисплей; для правильной работы функций времени требуется установка последней ревизии a_coos rev 1.5
akouz
Сообщения: 254
Зарегистрирован: Ср июл 09, 2014 3:48 pm
Благодарил (а): 6 раз
Поблагодарили: 41 раз

Re: HBus

Сообщение akouz » Вс июн 02, 2019 9:22 am

С МД мой шлюз по MQTT почему-то не работает. Пробовал и с локальным Москито брокером (и через localhost, и через его IP в локальной сети), пробовал с интернет брокером (через URL). Тестовые примочки видят MQTT сообщения, сам шлюз видит "эхо" своих сообщений (т.е. свои собственные сообщения, пришедшие ему как подписчику от брокера). А Мажордомо ничего не видит, ни одного сообщения.

Мажордомо поставил на РС, под Вин 10. Правда, не на С: драйв, а на соседний, может, в этом причина? Попробую снести и установить заново.

PS: Переустановка помогла, в МД стали приходить сообщения от шлюза. Однако работает нестабильно. Тестовая программа на мобильнике (IoT MQTT Panel) сразу же ловит все MQTT сообщения от шлюза, а МД какие-то ловит, какие-то пропускает.

PPS: Заказал RPi 3+, попробую поставить МД на него. Посмотрим, будет ли разница.

FYI: Если MQTT брокер находится в локальной сети (на моем десктопе, там же, где МД), то время от публикации сообщения шлюзом до получения "эха" по подписке составлет в среднем около 5 мс. Если брокер находится в интернете, то где-то на два порядка больше, около 400 мс.
akouz
Сообщения: 254
Зарегистрирован: Ср июл 09, 2014 3:48 pm
Благодарил (а): 6 раз
Поблагодарили: 41 раз

Re: HBus

Сообщение akouz » Чт июн 06, 2019 2:26 pm

Вроде как заработало наконец. В чем там было дело - так до конца и не понял. Похоже что 0 не в конце текстовой строка сводил MD с ума, но это не точно. По крайней мере после переделки, когда все добавочные символы в конце отсылаемого в МД сообщения стали обычными символами пробела, TAB, CR и LF, все стало работать, то ли из-за этого, то ли еще по какой-то причине.

Вполне может быть, что меня просто сбивал с толку баг МД, из-за которого дата/время обновления MQTT значений показываются неправильно, просто "от фонаря". Само-то значение обновляется, а дата когда обновляется, когда залипает непонятно где, не поймешь.

Вот снапшот NodeTest
NodeTest1.png
NodeTest1.png (26.31 КБ) 5168 просмотров
Видно, что в сети HBus прошли сообщения к TopicId 99, 65, 66, 67, 69. А по отладочной команде (Custom Command {cmd:2}) потом видно, каким топикам эти номера соответствуют.

А в окошке МД видно, что эти топики благополучно приняты:
MD1.png
MD1.png (55.97 КБ) 5168 просмотров
Последнюю ревизию 1.4 скетча для шлюза выкладываю.
akouz
Сообщения: 254
Зарегистрирован: Ср июл 09, 2014 3:48 pm
Благодарил (а): 6 раз
Поблагодарили: 41 раз

Re: HBus

Сообщение akouz » Сб июн 08, 2019 12:00 pm

1. Получил Raspberry PI 3+. По инструкции скачал образ 3.35, залил на карточку, запустил. Кое-как удалось залогиниться, логин pi, пароль оказался raspberry (а вовсе не raspberrymj, как вводит в заблуждение инструкция по установке). Определил IP командой hostname -I

2. В браузере ввел этот IP, появился экран МД. Перешел в панель управления, выбрал MQTT, поудалял оттуда весь мусор, оставил только $SYS/broker/uptime. Ввел свои топики. После этого, как я понял, надо перезапустить МД, ибо никакой реакции на вновь введенные топики нет.

3. Сбросил питание rPI, перезагрузил. Ни одного своего топика в списке MD не обнаружил, зато невесть откуда взялся удаленный ранее топик homebridge/from/connected

Сходил по кругу пп.2-3 несколько раз. Понял, что это такая сказка про белого бычка.

Нет, я верю, что у кого-то что-то как-то работает, наверное. Но пока что мои представления о том, как такая система должна бы работать, никак не соответствуют наблюдениям. Может, я какие-то волшебные заклинания не знаю, или вообще слишком многого хочу.
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: HBus

Сообщение fandaymon » Вс июн 09, 2019 3:28 pm

akouz писал(а):
Сб июн 08, 2019 12:00 pm
1. Получил Raspberry PI 3+. По инструкции скачал образ 3.35, залил на карточку, запустил. Кое-как удалось залогиниться, логин pi, пароль оказался raspberry (а вовсе не raspberrymj, как вводит в заблуждение инструкция по установке). Определил IP командой hostname -I
В инструкции ссылка на коннект, а там в описании образа написано - пароль от ssh либо raspberrymj, либо raspberry
akouz писал(а):
Сб июн 08, 2019 12:00 pm
2. В браузере ввел этот IP, появился экран МД. Перешел в панель управления, выбрал MQTT, поудалял оттуда весь мусор, оставил только $SYS/broker/uptime. Ввел свои топики. После этого, как я понял, надо перезапустить МД, ибо никакой реакции на вновь введенные топики нет.
Нажал кнопку настроить, там есть поле Subscription path, в котором по умолчанию $SYS/broker/uptime, homebridge/from/#. Изменил это поле на $SYS/broker/uptime, YunmaiScale/raw. Нажал Обновить и всё - топики YunmaiScale/raw стали приходить в МД. Ничего перегружать не надо
akouz
Сообщения: 254
Зарегистрирован: Ср июл 09, 2014 3:48 pm
Благодарил (а): 6 раз
Поблагодарили: 41 раз

Re: HBus

Сообщение akouz » Пн июн 10, 2019 10:28 am

Спасибо, но я уже наигрался c МД. Если и буду пробовать еще, то, может, когда-то потом. Жизнь коротка...
akouz
Сообщения: 254
Зарегистрирован: Ср июл 09, 2014 3:48 pm
Благодарил (а): 6 раз
Поблагодарили: 41 раз

Re: HBus

Сообщение akouz » Чт июн 13, 2019 1:12 pm

При отладке шлюза выяснилось, что при подключении к брокеру скетч надолго (примерно на 6-7 секунд) "зависает", если MQTT брокер отсутствует (выключен). Причем зависает наглухо, вызов библиотечной функции все это время не отдает управление. После копания в библиотеках стало понятно, что малой кровью от этого избавиться не удастся. Оставил как есть, только меняю время паузы между попытками подключения. Если соединение с MQTT было, то при разрыве шлюз три раза будет пытаться восстановить соединение с паузами в 2 сек между попытками. Если соединения не было, то паузы увеличиватся до 30 сек.

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

Пользовательская команда (Custom Command) с параметром {cmd:3} выводит последнее измеренное время от момента отсылки сообщения брокеру до момента получения "эха" по подписке. Например, когда брокер на rPI 3+ находится в локальной сети:

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

FF HBus 0A 00 11 00 02 15 9B 01  {cmd:3}
 - dbg:  MQTT roundtrip 43 ms[0D][0A]
Ревизию скетча 1.5 выложил на Гитхаб.
akouz
Сообщения: 254
Зарегистрирован: Ср июл 09, 2014 3:48 pm
Благодарил (а): 6 раз
Поблагодарили: 41 раз

Re: HBus

Сообщение akouz » Сб июн 29, 2019 4:35 pm

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

Немножко реорганизовал материалы на Гитхабе и выложил слегка улучшенную версию софта для шлюза rev 1.6. Отличия от предыдущей версии косметические.
akouz
Сообщения: 254
Зарегистрирован: Ср июл 09, 2014 3:48 pm
Благодарил (а): 6 раз
Поблагодарили: 41 раз

Re: HBus

Сообщение akouz » Вт июл 09, 2019 3:00 pm

Отрабатываю шифрование трафика HBus. Хочется получить приличное, но несложное шифрование, чтобы не тратить на него много ресурсов 8-битного Atmega328.

Все сообщения на шине всегда начинаются с 8-байтного заголовка. Этот заголовок удобно шифруется блочным шифром XTEA, который требует немного вычислительных ресурсов. За 6-8 раундов шифрования XTEA расфигачивает 8-байтный блок почти что в белый шум.

Однако шифровать всё сообщение при помощи XTEA как-то жалко, жаба душит. После заголовка можно использовать что-то попроще, что требует еще меньше ресурсов. Например, можно использовать потоковый шифр на базе 32-битного LFSR. Вся мулька в том, чтобы сделать исходное состояние регистра LFSR плохо предсказуемым, псевдослучайным. Для этого в процессе шифрования 8-байтного заголовка возьмем результат одного из промежуточных раундов шифрования и запишем его в LFSR как затравку.

Чтобы еще немного запутать результат, гамму потокового шифра будем брать не из одного места, а "прыгать" по разным местам LFSR, используя еще один LFSR, 16-битный. Для его затравки тоже будем использовать промежуточный результат шифрования заголовка.

Пример того, что сейчас получается.

Берем 32-байтное сообщение с тривиальным содержимым, все единицы:

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

Initial: 1 1 1 1 1 1 1 1  1 1 1 1 1 1 1 1  1 1 1 1 1 1 1 1  1 1 1 1 1 1 1 1  
Зашифровываем его:

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

Encrypted: 52 F5 51 70 9 67 14 DF  69 97 DC EF 6A B4 DB EC  83 C0 6D B4 5B 2C A7 D3  5D 2C 23 10 89 42 A0 D1 
Вроде получается неплохо, никаких закономерностей пока не видно.
Для проверки расшифровываем его:

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

Decrypted: 1 1 1 1 1 1 1 1  1 1 1 1 1 1 1 1  1 1 1 1 1 1 1 1  1 1 1 1 1 1 1 1  
Все сошлось.

Теперь в заголовке меняем одну единичку на ноль:

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

Initial: 1 1 1 1 1 1 1 0  1 1 1 1 1 1 1 1  1 1 1 1 1 1 1 1  1 1 1 1 1 1 1 1 
После зашифровки результат стал совсем другим:

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

Encrypted: 73 53 C4 E E5 5F 85 42  E2 70 B9 55 A7 52 A0 51  26 8E 46 22 18 11 6 2  78 BD 5F 3B 1C F 86 36  
Расшифровка тоже ОК.

А вот если изменить 1 на 0 в той части, которая шифруется потоковым шифром, то изменится один только этот байт, и все:

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

Initial: 1 1 1 1 1 1 1 0  1 1 1 1 1 1 1 0  1 1 1 1 1 1 1 1  1 1 1 1 1 1 1 1

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

Encrypted: 73 53 C4 E E5 5F 85 42  E2 70 B9 55 A7 52 A0 50  26 8E 46 22 18 11 6 2  78 BD 5F 3B 1C F 86 36
Чтобы два сообщения с одинаковым содержимым радикально отличались друг от друга, надо чтобы в заголовке была какая-то изменяемая псевдослучайная часть. Для этого придется немножко подправить протокол: вместо 16-битного счетчика сообщений оставим 8-битный, этого хватит, а освободившийся байт назовем nonce и будем писать туда случайные числа. После расшифровки и проверки CRC содержимое этого байта будем просто игнорировать.
Aven
Сообщения: 529
Зарегистрирован: Сб мар 12, 2016 6:33 pm
Откуда: Ухта, Россия
Благодарил (а): 3 раза
Поблагодарили: 154 раза

Re: HBus

Сообщение Aven » Ср июл 10, 2019 12:02 am

Посмотрите на проект MySensors, возможно найдете много полезного там для себя. Там и шифрование продумано и шлюз. Если напишите для него транспорт в HBus будет вообще круто!
За это сообщение автора Aven поблагодарил:
akouz (Ср июл 10, 2019 4:25 am)
Рейтинг: 1.16%
Ответить