РадиоКот :: Дистанционное снятие показаний с электросчетчика КАСКАД-1-МТ
Например TDA7294

РадиоКот >Схемы >Цифровые устройства >Измерительная техника >

Теги статьи: Добавить тег

Дистанционное снятие показаний с электросчетчика КАСКАД-1-МТ

Автор: Slacky
Опубликовано 03.02.2023
Создано при помощи КотоРед.

Добрый день.

Долго не мог подступиться к реализации идеи удаленного снятия показаний и параметров сети со своего домашнего электросчетчика Каскад-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-интерфейса.

Свежий код и небольшое описание, как залить, как настроить можно найти тут

Готового устройства пока нет, но я над этим работаю.

Спасибо, что дочитали.



Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

18 3 2