Реверс-инжиниринг протокола обмена в оборудовании EOS

Сразу скажу, заголовок, возможно, несколько громковат. Мне реально потребовалось выдернуть из протокола всего одну команду для управления диммером. О том, как это было сделано и что получилось в итоге, читайте дальше в статье.

Итак, есть такая немецкая фирма EOS Premium SPA Technology. Она производит большой спектр оборудования для саун. У них довольно интересные пульты управления, с сенсорными экранами, качественным силовым блоком. Стоят, правда, довольно дорого, но, вроде как, себя оправдывают.
Однако есть в их оборудовании один большой минус. Силовые блоки могут управлять многокиловаттными электропечами, но при этом имеют очень слабый канал управления освещением. Всего до 150 Вт! Освещением можно удобно управлять непосредственно с пульта, включать/выключать его, регулировать яркость. Но вот 150 Вт это ОЧЕНЬ мало! В продаже имеются дополнительные блоки для управления освещением, но ценник там очень негуманный.
В связи с этим появилась задача сделать свой диммер, который бы управлял нагрузкой с большей мощностью и, кроме того, низковольтной нагрузкой (светодиодные ленты на 12/24В или галогеновые лампы на 24В).
Галогенки хоть и потребляют больше и склонные к перегораниям, но на мой взгляд, освещение от них более приятное. Хотя это уже вопрос вкуса. В общем, вот такая задача созрела. Для чего именно нужно такое освещение, хорошо проиллюстрировано на этой картинке:



EOS выпускает много пультов управления, но наиболее распространённые сейчас Emotec и Emotouch III. С ними мы будем разбираться.




Надо сказать, что панель управления в оборудовании EOS соединяется с силовым блоком посредством обычного 4-контактного телефонного кабеля:



Беглый осмотр платы показал, что два провода отведены под питание 24В, а два других по линии интерфейса RS-485. В общем, стандартная реализация. Линии A и B находятся посередине:



Подключившись к линии при помощи преобразователя USB – RS-485 и настроив от балды скорость 9600 бит/сек, мы увидели бегущие байты, но назначение их, понятное дело, было неизвестно. Протокол обмена в свободном доступе найти не удалось, а сама фирма-производитель его предоставить отказалась, хотя соответствующий запрос им отправляли.
Пришлось заниматься декодированием самостоятельно :-)

Да, сразу отмечу один нюанс. Управление диммером работает только после перевода силового блока в рабочий режим. Это хорошо видно при подключённой лампе к выходу встроенного диммера. Она начинает светиться только после запуска сауны на нагрев.

Вначале стали перебирать скорости от 9600 до 115200 бит/сек из стандартного ряда.
И вот на скорости 38400 в глаза бросилось то, что команды разделяются двумя стандартными байтами 0x0A, 0x0D.
Что ж, это уже что-то. Сделаем следующий трюк. Поищем нужную нам команду по значению яркости. Вдруг оно передаётся в открытом виде.
Задаём на пульте управление значение 73 (0x49):



Далее снимаем лог и тупо ищем там этот байт:



Вуаля! Находим его, просматриваем вправо и влево до байтов 0x0A, 0x0D, пытаясь выделить нужный нам пакет. И в результате получаем вот такую структуру:

0x0E 0x04 0x04 0x49 0x49 0x00 0x00 0xD1 0x0A 0x0D

В ходе экспериментов было установлено, что 2 и 3 байты всегда равны 0x04, 4 и 5 задают яркость в процентах, 6 и 7 равны 0, 8 — меняется, что означает пока не понятно, 9 и 10 — 0x0A, 0xD.

Как показали эксперименты, первый байт является адресом. Он задаёт так называемый номер комнаты. Дело в том, что пульты EOS могут управлять несколькими силовыми блоками одновременно. Для каждого задаётся свой адрес, который и передаётся в этом байте.

Адреса следующие:
Для пультов управления печью:
01 — первая комната
21 — вторая комната
41 — третья комната
61 — четвертая комната
81 — пятая комната
A1 — шестая комната
C1 — седьмая комната
E1 — восьмая комната

Для пультов управления парогенератором:
0E — первая комната
2E — вторая комната
4E — третья комната
6E — четвертая комната
8E — пятая комната
AE — шестая комната
CE — седьмая комната
EE — восьмая комната

Собственно, это и всё декодирование.

Для проверки, так сказать в «динамике» мы быстренько накидали программку на Delphi для вывода значения яркости и покрутили ползунок. Всё отрабатывает чётко.

После этого разработали на Си несложную программу по декодированию этих пакетов и запустили всё в «железе». Само устройство довольно простое. Там реализован обычный ШИМ на силовом ключе, но если интересно, могу потом отдельную статью про это написать.
  • +5
  • 29 мая 2019, 09:20
  • FDA

Комментарии (4)

RSS свернуть / развернуть
Неплохо. А осциллографа не было? Находим самый короткий импульс в посылке — по нему и видно битрейт.
+1
Осциллограф, конечно, есть. Но перебрать 5 скоростей в терминалке из ряда 9600, 19200, 38400, 57600 и 115200 намного быстрее.
Редко попадаются нестандартные скорости. Бывает ещё, что 9-битный режим используется. В этом случае 15 комбинаций будет.
0
8 — меняется, что означает пока не понятно
Чексумма какая-то, быть может?
0
  • avatar
  • Vga
  • 30 мая 2019, 02:09
Вполне вероятно. Дальше ещё протокол ковырять будем, там прояснится этот момент. Отпишусь тогда о результатах.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.