HBus
-
- Сообщения: 254
- Зарегистрирован: Ср июл 09, 2014 3:48 pm
- Благодарил (а): 6 раз
- Поблагодарили: 41 раз
Re: HBus
Выложил первую версию скетча для 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
Теперь пора вернуться к освоению МД и проверить, как это будет работать все вместе.
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
-
- Сообщения: 254
- Зарегистрирован: Ср июл 09, 2014 3:48 pm
- Благодарил (а): 6 раз
- Поблагодарили: 41 раз
Re: HBus
С МД мой шлюз по MQTT почему-то не работает. Пробовал и с локальным Москито брокером (и через localhost, и через его IP в локальной сети), пробовал с интернет брокером (через URL). Тестовые примочки видят MQTT сообщения, сам шлюз видит "эхо" своих сообщений (т.е. свои собственные сообщения, пришедшие ему как подписчику от брокера). А Мажордомо ничего не видит, ни одного сообщения.
Мажордомо поставил на РС, под Вин 10. Правда, не на С: драйв, а на соседний, может, в этом причина? Попробую снести и установить заново.
PS: Переустановка помогла, в МД стали приходить сообщения от шлюза. Однако работает нестабильно. Тестовая программа на мобильнике (IoT MQTT Panel) сразу же ловит все MQTT сообщения от шлюза, а МД какие-то ловит, какие-то пропускает.
PPS: Заказал RPi 3+, попробую поставить МД на него. Посмотрим, будет ли разница.
FYI: Если MQTT брокер находится в локальной сети (на моем десктопе, там же, где МД), то время от публикации сообщения шлюзом до получения "эха" по подписке составлет в среднем около 5 мс. Если брокер находится в интернете, то где-то на два порядка больше, около 400 мс.
Мажордомо поставил на РС, под Вин 10. Правда, не на С: драйв, а на соседний, может, в этом причина? Попробую снести и установить заново.
PS: Переустановка помогла, в МД стали приходить сообщения от шлюза. Однако работает нестабильно. Тестовая программа на мобильнике (IoT MQTT Panel) сразу же ловит все MQTT сообщения от шлюза, а МД какие-то ловит, какие-то пропускает.
PPS: Заказал RPi 3+, попробую поставить МД на него. Посмотрим, будет ли разница.
FYI: Если MQTT брокер находится в локальной сети (на моем десктопе, там же, где МД), то время от публикации сообщения шлюзом до получения "эха" по подписке составлет в среднем около 5 мс. Если брокер находится в интернете, то где-то на два порядка больше, около 400 мс.
-
- Сообщения: 254
- Зарегистрирован: Ср июл 09, 2014 3:48 pm
- Благодарил (а): 6 раз
- Поблагодарили: 41 раз
Re: HBus
Вроде как заработало наконец. В чем там было дело - так до конца и не понял. Похоже что 0 не в конце текстовой строка сводил MD с ума, но это не точно. По крайней мере после переделки, когда все добавочные символы в конце отсылаемого в МД сообщения стали обычными символами пробела, TAB, CR и LF, все стало работать, то ли из-за этого, то ли еще по какой-то причине.
Вполне может быть, что меня просто сбивал с толку баг МД, из-за которого дата/время обновления MQTT значений показываются неправильно, просто "от фонаря". Само-то значение обновляется, а дата когда обновляется, когда залипает непонятно где, не поймешь.
Вот снапшот NodeTest Видно, что в сети HBus прошли сообщения к TopicId 99, 65, 66, 67, 69. А по отладочной команде (Custom Command {cmd:2}) потом видно, каким топикам эти номера соответствуют.
А в окошке МД видно, что эти топики благополучно приняты:
Последнюю ревизию 1.4 скетча для шлюза выкладываю.
Вполне может быть, что меня просто сбивал с толку баг МД, из-за которого дата/время обновления MQTT значений показываются неправильно, просто "от фонаря". Само-то значение обновляется, а дата когда обновляется, когда залипает непонятно где, не поймешь.
Вот снапшот NodeTest Видно, что в сети HBus прошли сообщения к TopicId 99, 65, 66, 67, 69. А по отладочной команде (Custom Command {cmd:2}) потом видно, каким топикам эти номера соответствуют.
А в окошке МД видно, что эти топики благополучно приняты:
Последнюю ревизию 1.4 скетча для шлюза выкладываю.
-
- Сообщения: 254
- Зарегистрирован: Ср июл 09, 2014 3:48 pm
- Благодарил (а): 6 раз
- Поблагодарили: 41 раз
Re: HBus
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 несколько раз. Понял, что это такая сказка про белого бычка.
Нет, я верю, что у кого-то что-то как-то работает, наверное. Но пока что мои представления о том, как такая система должна бы работать, никак не соответствуют наблюдениям. Может, я какие-то волшебные заклинания не знаю, или вообще слишком многого хочу.
2. В браузере ввел этот IP, появился экран МД. Перешел в панель управления, выбрал MQTT, поудалял оттуда весь мусор, оставил только $SYS/broker/uptime. Ввел свои топики. После этого, как я понял, надо перезапустить МД, ибо никакой реакции на вновь введенные топики нет.
3. Сбросил питание rPI, перезагрузил. Ни одного своего топика в списке MD не обнаружил, зато невесть откуда взялся удаленный ранее топик homebridge/from/connected
Сходил по кругу пп.2-3 несколько раз. Понял, что это такая сказка про белого бычка.
Нет, я верю, что у кого-то что-то как-то работает, наверное. Но пока что мои представления о том, как такая система должна бы работать, никак не соответствуют наблюдениям. Может, я какие-то волшебные заклинания не знаю, или вообще слишком многого хочу.
-
- Сообщения: 1553
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
Re: HBus
В инструкции ссылка на коннект, а там в описании образа написано - пароль от ssh либо raspberrymj, либо raspberryakouz писал(а): ↑Сб июн 08, 2019 12:00 pm1. Получил Raspberry PI 3+. По инструкции скачал образ 3.35, залил на карточку, запустил. Кое-как удалось залогиниться, логин pi, пароль оказался raspberry (а вовсе не raspberrymj, как вводит в заблуждение инструкция по установке). Определил IP командой hostname -I
Нажал кнопку настроить, там есть поле Subscription path, в котором по умолчанию $SYS/broker/uptime, homebridge/from/#. Изменил это поле на $SYS/broker/uptime, YunmaiScale/raw. Нажал Обновить и всё - топики YunmaiScale/raw стали приходить в МД. Ничего перегружать не надоakouz писал(а): ↑Сб июн 08, 2019 12:00 pm2. В браузере ввел этот IP, появился экран МД. Перешел в панель управления, выбрал MQTT, поудалял оттуда весь мусор, оставил только $SYS/broker/uptime. Ввел свои топики. После этого, как я понял, надо перезапустить МД, ибо никакой реакции на вновь введенные топики нет.
-
- Сообщения: 254
- Зарегистрирован: Ср июл 09, 2014 3:48 pm
- Благодарил (а): 6 раз
- Поблагодарили: 41 раз
Re: HBus
При отладке шлюза выяснилось, что при подключении к брокеру скетч надолго (примерно на 6-7 секунд) "зависает", если MQTT брокер отсутствует (выключен). Причем зависает наглухо, вызов библиотечной функции все это время не отдает управление. После копания в библиотеках стало понятно, что малой кровью от этого избавиться не удастся. Оставил как есть, только меняю время паузы между попытками подключения. Если соединение с MQTT было, то при разрыве шлюз три раза будет пытаться восстановить соединение с паузами в 2 сек между попытками. Если соединения не было, то паузы увеличиватся до 30 сек.
Добавлены опциональные имя пользователя и пароль для подключения к брокеру. Если строки пустые, то соединение производится без них, это годится для МД. Для брокера в составе HomeAssistant имя и пароль нужны.
Пользовательская команда (Custom Command) с параметром {cmd:3} выводит последнее измеренное время от момента отсылки сообщения брокеру до момента получения "эха" по подписке. Например, когда брокер на rPI 3+ находится в локальной сети:
Ревизию скетча 1.5 выложил на Гитхаб.
Добавлены опциональные имя пользователя и пароль для подключения к брокеру. Если строки пустые, то соединение производится без них, это годится для МД. Для брокера в составе 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]
-
- Сообщения: 254
- Зарегистрирован: Ср июл 09, 2014 3:48 pm
- Благодарил (а): 6 раз
- Поблагодарили: 41 раз
Re: HBus
Попытался сделать версию скетча для шлюза, использующую WiFiManager. К сожалению, устойчивого и предсказуемого поведения с этой библиотекой получить не удалось. В какой-то момент просто плюнул и не стал больше тратить на нее время.
Немножко реорганизовал материалы на Гитхабе и выложил слегка улучшенную версию софта для шлюза rev 1.6. Отличия от предыдущей версии косметические.
Немножко реорганизовал материалы на Гитхабе и выложил слегка улучшенную версию софта для шлюза rev 1.6. Отличия от предыдущей версии косметические.
-
- Сообщения: 254
- Зарегистрирован: Ср июл 09, 2014 3:48 pm
- Благодарил (а): 6 раз
- Поблагодарили: 41 раз
Re: HBus
Отрабатываю шифрование трафика HBus. Хочется получить приличное, но несложное шифрование, чтобы не тратить на него много ресурсов 8-битного Atmega328.
Все сообщения на шине всегда начинаются с 8-байтного заголовка. Этот заголовок удобно шифруется блочным шифром XTEA, который требует немного вычислительных ресурсов. За 6-8 раундов шифрования XTEA расфигачивает 8-байтный блок почти что в белый шум.
Однако шифровать всё сообщение при помощи XTEA как-то жалко, жаба душит. После заголовка можно использовать что-то попроще, что требует еще меньше ресурсов. Например, можно использовать потоковый шифр на базе 32-битного LFSR. Вся мулька в том, чтобы сделать исходное состояние регистра LFSR плохо предсказуемым, псевдослучайным. Для этого в процессе шифрования 8-байтного заголовка возьмем результат одного из промежуточных раундов шифрования и запишем его в LFSR как затравку.
Чтобы еще немного запутать результат, гамму потокового шифра будем брать не из одного места, а "прыгать" по разным местам LFSR, используя еще один LFSR, 16-битный. Для его затравки тоже будем использовать промежуточный результат шифрования заголовка.
Пример того, что сейчас получается.
Берем 32-байтное сообщение с тривиальным содержимым, все единицы:
Зашифровываем его:
Вроде получается неплохо, никаких закономерностей пока не видно.
Для проверки расшифровываем его:
Все сошлось.
Теперь в заголовке меняем одну единичку на ноль:
После зашифровки результат стал совсем другим:
Расшифровка тоже ОК.
А вот если изменить 1 на 0 в той части, которая шифруется потоковым шифром, то изменится один только этот байт, и все:
Чтобы два сообщения с одинаковым содержимым радикально отличались друг от друга, надо чтобы в заголовке была какая-то изменяемая псевдослучайная часть. Для этого придется немножко подправить протокол: вместо 16-битного счетчика сообщений оставим 8-битный, этого хватит, а освободившийся байт назовем nonce и будем писать туда случайные числа. После расшифровки и проверки CRC содержимое этого байта будем просто игнорировать.
Все сообщения на шине всегда начинаются с 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