![]() |
![]() |
||||||||||||
Дистанционное снятие показаний с электросчетчика КАСКАД-1-МТ
Автор: Slacky Добрый день. Долго не мог подступиться к реализации идеи удаленного снятия показаний и параметров сети со своего домашнего электросчетчика Каскад-1-МТ. Многотарифный, однофазный. Для связи на борту имеет только оптопорт. Но наконец то взялся. Все уперлось в протокол. Информации в сети крохи. Радиокота почитывал давно, да и в поисковике решения на нем тоже находились. Вот и тут попалось обсуждение счетчика Каскад - https://radiokot.ru/forum/viewtopic.php?f=25&t=171991. Стало понятно, в какую сторону копать. Для экспериментов прикупил занедорого на авито такой же счетчик, как у меня в электрощитке. Стал разбираться и выяснил, что на одну и ту же команду счетчики присылают разные по длине ответы. Разница в один байт. На том, который присылал на один байт меньше, CRC проверялась корректно. А вот на том, который присылал на один байт больше, CRC не сходилась. В общем выяснилось (сын помог найти :) ), что в готовом пакете применен так называемый byte stuffing. Когда значения дополняются или заменяются другими. Так, как у этого счетчика в пакете управляющие символы выбраны 0x73 и 0x55, вот над ними и происходит колдовство. Берем готовый пакет. И прогоняем его (без двух передних и двух завершающих байтов) на предмет поиска 0x55 и 0x73. И если находим, то 0x55 заменяем на 0x72 0x11, а 0x73 заменяем на 0x73 0x22. В результате такого преобразования пакет и увеличивается. В считанном пакете нужно сделать обратную операцию, найти все 0x73 0x11 и 0x73 0x22, а потом заменить на 0x55 и 0x73 соответственно. Вот тогда пакет уменьшается и crc уже корректно проверяется. 73550400ffff8d4e0130067311000a048d4e0655 - пришедший пакет от счетчика
73550400ffff8d4e01300655000a048d4e0655 - после stuffing'а Хорошо, что мне попался счетчик, у которого в пакете постоянно фигурировал 0x73 0x11. А то бы долго разбирались, почему у кого-то работает, а у кого-то нет. Подробности про stuffing и про то, как правильно сформировать пакет тут. Смотреть самый последний счетчик IEK «STAR 104/1». Счетчик не Каскад, но протокол видимо такой же. В общем нашел схему оптопорта Спаял на макетке, поключил к преобразователю USB-UART. И оригинальная программа MeterTools прекрасно прочитала оба счетчика. Немного посмотрел обмен через Wireshark и получил 4 тарифа, ток, напряжение и мощность. А больше и не нужно. Передавать показания собирался с помощью Bluetooth LE. Для этого использовал модуль от Ai-Thinker TB-04-KIT. В действующем устройстве использоваться будет только модуль, но для экспериментов удобней пользоваться KIT. В общем подключил к модулю оптопорт через UART. Все работает. Модуль передает в виде двух рекламных пакетов 3 тарифа, мощность и напряжение в Home Assistant, являясь по сути маячком. Лог. send bytes: 15
request pkt: 0x735520008d4effff0100000000d655 resp bytes: 20 package first start: 0x73550400ffff8d4e01300655000a048d4e0655 send bytes: 15 request pkt: 0x735520008d4effff0500000000ae55 resp bytes: 42 package current data: 0x73551a00ffff8d4e0530065500bed62300aa2030010000eb260b005a8d0a0079220e00000000003f55 tariff1: 7308,59 tariff2: 6915,46 tariff3: 9263,29 send bytes: 16 request pkt: 0x735521008d4effff290000000001aa55 resp bytes: 19 package volts: 0x73550300ffff8d4e2930065500016a59b455 volts: 228,90 send bytes: 15 request pkt: 0x735520008d4effff2d00000000cc55 resp bytes: 21 package power: 0x73550500ffff8d4e2d30065500000000aa202955 power: 0,00 Save config to flash address - 0x42500 Схема устройства. С питанием пока не решил, но остальное верно. Первоначальная настройка производится из web-интерфейса. Свежий код и небольшое описание, как залить, как настроить можно найти тут Готового устройства пока нет, но я над этим работаю. Спасибо, что дочитали.
Все вопросы в Форум.
|
|
||||||||||||
![]() |
![]() |


![]() |
![]() |
|||
|
||||
![]() |
![]() |