![]() |
|
![]() |
![]() |
Теги статьи: |
Дистанционное снятие показаний с электросчетчика КАСКАД-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 уже корректно проверяется.
Хорошо, что мне попался счетчик, у которого в пакете постоянно фигурировал 0x73 0x11. А то бы долго разбирались, почему у кого-то работает, а у кого-то нет.
Подробности про stuffing и про то, как правильно сформировать пакет тут. Смотреть самый последний счетчик IEK «STAR 104/1». Счетчик не Каскад, но протокол видимо такой же.
В общем нашел схему оптопорта
Спаял на макетке, поключил к преобразователю USB-UART.
И оригинальная программа MeterTools прекрасно прочитала оба счетчика. Немного посмотрел обмен через Wireshark и получил 4 тарифа, ток, напряжение и мощность. А больше и не нужно.
Передавать показания собирался с помощью Bluetooth LE. Для этого использовал модуль от Ai-Thinker TB-04-KIT. В действующем устройстве использоваться будет только модуль, но для экспериментов удобней пользоваться KIT. В общем подключил к модулю оптопорт через UART. Все работает.
Модуль передает в виде двух рекламных пакетов 3 тарифа, мощность и напряжение в Home Assistant, являясь по сути маячком.
Лог.
Схема устройства. С питанием пока не решил, но остальное верно.
Первоначальная настройка производится из web-интерфейса.
Свежий код и небольшое описание, как залить, как настроить можно найти тут
Готового устройства пока нет, но я над этим работаю.
Спасибо, что дочитали.
Все вопросы в Форум.