Вопросы и замечания по статьям и схемам, представленным на нашем сайте

При поддержке РадиоКОТструктор.ру


Ответить

Re: Модуль отображения информации МИРТ-830 из ардуины

Пт май 26, 2023 08:27:52

С выбором куда слать запросы, в UART, в радио с выбором параметров связи и прочих штук.

Как раз думаю сделать в настройках переключатель для выбора: что активно для отправки, а что нет.
Практически везде, где устанавливаются подобные счетчики на столбах - автоматически собирают показания и отправляют их в личный кабинет раз в месяц, для этого их такие умные и устанавливали

У нас автоматически данные в кабинет не отправляют, все сами должны передавать.
МетерТулз вроде что-то отсылал в счётчик при закрытии окна.

Надо декомпилить программу саму бы.
В идеале - все данные должны отображаться в веб интерфейсе, возможно со статистикой (где ее хранить только вопрос)

Есть проект Power Meter они продают счетчик 1/3-фазный за счет получения параметров тока потребления через токовые трансформаторы на фазовых проводах, данные складывают в EEPROM, на плате используется D1 mini, прям как модуль просто в гребенку вставляется. (Трехфазное устройство с дисплеем, содержит три модуля измерения PZEM004T, модуль ESP8266, модуль питания. Оборудован монохромным OLED дисплеем, позволяет выводить на дисплей любое измеренное значение и показатели работы системы.
— Сохранение измеряемых параметров во внутренней энергонезависимой памяти (глубина архива от 2х месяцев до 10 лет)
— Web-интерфейс
— Построение графиков измеренных значений через Web интерфейс (данные из памяти берут и на основе их строят график)
— Настройка периодов измерений от 10 секунд до 24 часов
— Синхронизация с сервером точного времени)

Если открыть корпус - интересный конструктор из модулей с али.
Так что я думаю логический финал проекта - опенсурс проект, со ссылкой на заказ готовых плат на JlcPcb и прошивкой на гитхабе

Согласен, но если контроллер без прошивки, то нарушений нет, так как это просто плата связи ESP с CC1101.

Меня так же очень интересует тема ОТА (обновление по воздуху), но пока не копал.
А так же автодискавери в Home Assistens.
Если кто поделится наработками - было бы супер.

Надо переписать код, а то там можно в трех соснах заблудиться.

Re: Модуль отображения информации МИРТ-830 из ардуины

Пн июн 19, 2023 12:45:48

Посмотрев немного еще код - заметил некоторые интересности:
1.Во всех местах функций формирования пакета установлен байт 7 в 0x09, а в функции формировании 9 пакета байт 7 установлен в 0xff
Код:
transmitt_byte[7] = 0x09;

если почитать тут форум и разные картинки - то у человека при общении через оптопорт тут стоит 0xff;
2. Байт 3 для 1 и 2 пакета равен 0х20, а для остальных 0х21:
Код:
transmitt_byte[3] = 0x20;

3. Команды запроса параметров хранятся в байте 9, что в принципе может оптимизировать код заменив формирователи пакетов на функцию с передачей команды, так как многие параметры одни и те же для разных команд:
Код:
transmitt_byte[9] = 0x1c;

4. С 3-его запроса появляется байт 14, судя по всему это переключение какие дополнительные мгновенные параметры передавать. Принимает значение 0x00, 0x01, 0x04 (тут в коде), а ранее при обмене с программой показано что принимает значение (0x00, 0x10, 0x13):
Код:
transmitt_byte[14] = 0x00;

5. Счетчик пакетов которые должны прилететь packetType принимает значение 3 и 4, откуда мы знаем сколько должно прилететь?
Код:
packetType=3;

6. Проверку кривых значений расширил, чтобы в MQTT не прилетало
Код:
110>v1>400 or 110>v2>400 or 110>v3>400 or i1>60 or i2>60 or i3>60

7. Наведена небольшая красота в вебке.

Вот тут тоже интересности заметил:
СпойлерТак, совсем немного.
Код:
Первый запрос от пульта к счётчику:
73 55 20 00 7C 64 FE FF 01 00 00 00 00 CE 55
73 - преамбула
55 - начало пакета
20 - циклический адрес (ну или как там по умному)
     в зависимости от длинны пакета, по нему считается
     контрольная сумма
7C 64 - сетевой адрес в hex (мл. байт старший байт)
FE FF - канал связи (от оптопорта другие значения)
01 - открыть канал связи
00 00 00 00 - пароль (по умолчанию - 0)
CE - контрольная сумма
55 - конец пакета
Эти данные появляются в RAM процессора при формировании запроса к счётчику.
Затем загружаются в СС1101 по SPI  и передаются в эфир.

Ответ так же начинается с
Код:
73 55 04 00 FE FF 7C 64 01 A8 05 5B 00 09 05 7C 64 A7 55
73 - преамбула
55 - начало пакета
04 - циклический адрес
00
FE FF - тип соединения (адрес или устройство ?)
7C 64 - сетевой адрес
01 - на какую команду ответ
A8 - ?
05 - ? изменяется в зависимости от дня
5B - ?
00 - ?
09 05 - версия ПО (9.5)
7C 64 - сетевой адрес
A7 - КС
55 - конец пакета


20 - циклический адрес. принимает значение 20 или 21 при отправке, при этом с кодом 0x20 пакет на 1 байт короче чем с 0x21
FE FF - канал связи (от оптопорта другие значения), у нас же в коде который тут писали 09 FF, ранее в 9 пакете было FF FF. при этом при отправке пакета байты 5 и 6 стоят как адрес счетчика (тут в примере 7C 64, 0 байт не показан), а 7 и 8 равны 09 FF или в этом примере FE FF, или в 9 пакете были FF FF, а при приеме они меняются местами, на 5 и 6 становятся 09 FF / FE FF / FF FF (смотря что отправили), а на места 7 и 8 становится адрес счетчика в данном примере 7C 64, далее 9-ый байт команды и в приеме и в передаче.

Вот тут картинка обмена от Vittaly76 (p=4209313#p4209313), тоже интересности наблюдаю:
СпойлерИзображение Изображение

при обмене видим что команда
Код:
transmitt_byte[9]=0x2B;

посылается 3 раза, но используется разный байт 14 (на картинке он 13, так как там не показан 0-ой байт)
Код:
transmitt_byte[14]=0x00;

Он принимает значения 0x00, 0x10, 0x13, при значении 0x10 третий справа байт - судя по картинкам это внутренняя температура счетчика на столбе (при этом там 3 обмена показаны и 0x23 соответствует 35 градусам в программе, а 0x24 соответственно 36 градусам).
При этом у нас в коде он принимает значения 0x00 для 3, 5 и 9 запроса, 0x01 для 4, 6 и 7 запроса, и 0x04 для 8-го запроса, при этом 0x13 и 0х10 у нас не запрашивается.


Если кто в теме помогите сделать обновление через веб или ОТА, так как удаленный доступ к ESP есть, а удаленно так прошивать не получится, надо ОТА или Web Update.
Вложения
RequestPacket.zip
Тут показаны запросы в виде столбцов для наглядности, можно в функцию со входными параметрами превратить
(14.03 KiB) Скачиваний: 35
My_Mirtek_GW_upd4.zip
следующие доработки мелкие, в основном немного в веб, а так же ограничения на кривые показания, основа взята тут на форуме My_Mirtek_GW_upd2
(7.93 KiB) Скачиваний: 36

Re: Модуль отображения информации МИРТ-830 из ардуины

Вт июн 20, 2023 01:05:15

Кстати, проводя разные изыскания пришел в выводу, что
Код:
void packetParser_7_mqtt() {
  if ( (resultbuffer[0] == 0x73) and (resultbuffer[1] == 0x55) and (resultbuffer[2] == 0x1E) and (resultbuffer[6] == (atoi(MeterAdressValue) & 0xff)) and
       (resultbuffer[7] == ((atoi(MeterAdressValue) >> 8) & 0xff)) and (resultbuffer[8] == 0x2B) and (resultbuffer[12] == 0x0)

тут параметр проверки
Код:
resultbuffer[12] == 0x0
на самом деле скорей всего должен проверяться не 12-ый, а 13-ый байт
Код:
resultbuffer[13] == 0x0

Re: Модуль отображения информации МИРТ-830 из ардуины

Чт июн 22, 2023 09:09:51

Вот тут немного переработал код, теперь на формирование пакетов для отправки 2 функции: 1я - короткая, без 14 байка подкоманды с кодом 0x20, 2-я длинная с подкомандой в 14-ом байте с кодом пакетов 0x21. Привожу список передаваемых значений пакетов того что было и того что стало:

Изображение

Так же наблюдаются интересности для значений мощностей.

Изображение

Если взять расчетную P рст (которая считается математически в программе как i1*u1 и т.д.), и взять показание мощности P со счетчика, то они далеко не совпадают, но если визуально сравнивать с S взятой со счетчика, то не учитывая десятые доли, то оно совпадает. Cогласно программе MeterTools (картинкам от Vittaly76 ) то P измеряется в кВт, Q измеряется кВар (возможно реактивная мощность), а S в кВА (вольт-амперы), маленькая к - это приставка кило (x1000). Но если полученные значения для P и S делить на 1000, то очень сильно округляются, так что для наглядности считаю что лучше P оставить в Вт, а S в ВА. Скорей всего S это полная мощность, Q-реактивная, P-активная.

Объясните откуда взяты команды и подкоманды для первой таблицы собранные из кода My_Mirtek_GW_upd2 и за что они отвечают?
Нужно ли вообще считывать линейные напряжения Uab, Ubc, Uac (5-я команда 2-ой таблицы)?
Вложения
My_Mirtek_GW_upd6.zip
Обновленный код на основе картинок и upd2
(7.94 KiB) Скачиваний: 43

Re: Модуль отображения информации МИРТ-830 из ардуины

Вс июн 25, 2023 18:45:59

Посмотрев немного еще код - заметил некоторые интересности:

2. Байт 3 для 1 и 2 пакета равен 0х20, а для остальных 0х21:

Код:
байты start1 start2
0x73 0x55 стартовая последовательность
третий байт - parameters
бит     7 "1" - данные шифруются "0" - нет
        6 "0"- пакет для устр. с малыми вычисл. мощн. (счётчики) "1"- с с большими (УСПД)
        5  направление пакета "1" запрос "0" ответ
        4,3,2,1,0  - длинна пакета (включая байт parameters)
четвёртый байт
        0x00  - резерв, всегда равен "0"
пятый и шестой...
addr dest
            2 байта Адрес устройства (может принимать значения от 0 до 65535 00001…65000 (0х0001…0хFDE8) - адреса счетчиков)
              65535 (0xFFFF) - адрес для широковещательных команд
Address Source: Адрес программы опроса = 0xFFFF
Command: Код команды - число от 0 до 255, служит идентификатором для расшифровки структуры поля Data
Password / Status: Пароль для пакета запроса, Статус для пакета ответа.
Пароль заполняется только для пакетов, которые адресованы устройству
Пакет перед посылкой подлежит обработке механизмом байтстаффинга.
Пакет при приеме подлежит обработке механизмом обратного байтстаффинга.
Стартовая последовательность - 0х73 0х55, стоповая - 0х55, все что между ними, подлежит байтстаффингу.
При байтстаффинге анализируется каждый байт, и:
0х55 заменяется на 0х73 0х11,
0х73 заменяется на 0х73 0х22.
При обратном байтстаффинге проводится противоположная замена.
Все значения более 1-го байта передаются как: первый байт всегда младший и идет первым!!!

Если пройтись немного назад, есть ссылка на документ где все эти нюансы описаны.

Re: Модуль отображения информации МИРТ-830 из ардуины

Пн июн 26, 2023 20:45:37

Про стартовые байты все понятно (старт, адреса, стоп), просто в коде было 9 разных команд, и многие не распарсены, по этому и был вопрос про команды к счетчику (первая табличка, незаполненные поля).

Изображение

Команды: 0x28 (0x00, 0x01 подкоманда), команда 0x05 (0x04 подкоманда), команда 0x0A (0x01 подкоманда) и команда 0x2A (0x01 подкоманда)

получается раз
Address Source: Адрес программы опроса = 0xFFFF

то 0x09 0xFF лучше поменять везде на 0xFF 0xFF?

Байт 3 для 1 и 2 пакета равен 0х20, а для остальных 0х21

Это я понял что 0x20 для тех пакетов где нет 14 байта подкоманды, а 0x21 для тех где есть подкоманда.

Так же было не понятно немного (возможно ошибка) что при функции
Код:
RequestPacket_9_pre()

а далее нестыковки:
Код:
transmitt_byte[3] = 0x20;

что интересно что тут указано что пакет короткий, но при этом указали подкоманду (байт 14)
Код:
transmitt_byte[9] = 0x1C; //команда запроса даты/времени
transmitt_byte[14] = 0x00;
packetType = 4; //количество ответных пакетов

а количество ответных пакетов указали 4, о великая сила Ctrl+C, Ctrl+V

Re: Модуль отображения информации МИРТ-830 из ардуины

Пн июн 26, 2023 21:27:23

...
а далее нестыковки:
Код:
transmitt_byte[3] = 0x20;

что интересно что тут указано что пакет короткий, но при этом указали подкоманду (байт 14)
Код:
transmitt_byte[9] = 0x1C; //команда запроса даты/времени
transmitt_byte[14] = 0x00;
packetType = 4; //количество ответных пакетов

а количество ответных пакетов указали 4, о великая сила Ctrl+C, Ctrl+V

Понятия не имею кто это писал и что имелось в виду, я отвечал на конкретный вопрос, как формируется 3 байт.

Re: Модуль отображения информации МИРТ-830 из ардуины

Вт июн 27, 2023 10:29:50

Спасибо за разъяснения, вместе мы сила!

Re: Модуль отображения информации МИРТ-830 из ардуины

Вт июн 27, 2023 12:16:06

Команды: 0x28

Чтение доп. режимов индикации.
Вложения
RD_IND.jpg
(248.14 KiB) Скачиваний: 46

Re: Модуль отображения информации МИРТ-830 из ардуины

Вт июн 27, 2023 19:44:16

То есть в коде 0x28 смысла большого и нет.
И как вижу у Вас для этого кода используется короткая команда с длиной 0x20, а в коде ранее, наверное ошибочно, была длина 0х21 и 14-байт равный в 3-ем запросе 0x00, а в 4-ом 0x01. Раз полезной нагрузки для нас данная команда не несёт, то её не рассматриваем.
Интересно считать текущий активный тариф день/ночь, а так же на пульте первой версии есть замочек (вроде состояние пломбы), а так же состояние внутреннего реле, которое показывает замкнуто, когда все ок, например когда у меня автомат не сработал, то сработало реле/автомат в счётчике и само включилось через 15 минут примерно.

А чем вы пользуетесь в аппаратной части, ведь программа без железной части не даёт возможности пройти далее режима выбора типа связи.

Спасибо, что делитесь полезными изысканиями.

Re: Модуль отображения информации МИРТ-830 из ардуины

Вт июн 27, 2023 22:14:50

...А чем вы пользуетесь в аппаратной части, ведь программа без железной части не даёт возможности пройти далее режима выбора типа связи...

Как чем, прибором учёта лежащим на столе, к которому подключен лог. анализатор.

Re: Модуль отображения информации МИРТ-830 из ардуины

Вт июн 27, 2023 22:46:29

А как Вам удалось программу к нему прикрутить, которая MeterTools...
Я понял так что вы с программы посылаете запросы?

Изображение
Последний раз редактировалось SysCat Вт июн 27, 2023 22:54:08, всего редактировалось 1 раз.

Re: Модуль отображения информации МИРТ-830 из ардуины

Вт июн 27, 2023 22:50:18

А как Вам удалось программу к нему прикрутить, которая MsTool или как её там...
Я понял так что вы с программы посылаете запросы?

Так она, как ни странно, для этого и предназначена.
Если имеется в виду интерфейс, это оптопорт.

Re: Модуль отображения информации МИРТ-830 из ардуины

Вт июн 27, 2023 22:56:26

В типе подключений такого не наблюдаю (или у Вас другая программа?):
Изображение
И как к самому пульту удалось?
Или Вы приобрели счетчик и как-то к нему коннектитесь по-другому?

Можете сделать фотку стенда?

Re: Модуль отображения информации МИРТ-830 из ардуины

Вт июн 27, 2023 23:04:09

И как к самому пульту удалось?
Или Вы приобрели счетчик и как-то к нему коннектитесь по-другому?

К пульту что ???
Оптопорт при подключении создаёт виртуальный COM порт, выбираем его и вперёд.

Re: Модуль отображения информации МИРТ-830 из ардуины

Вт июн 27, 2023 23:07:38

Просите мою глупость, но не не понимаю про какой именно оптопорт речь, а так я понял что в программе вы выбираете подключение по RS232, но про сам оптопорт пока не ясно.

Изображение

Можно фото стенда?
А сам оптопорт как к счетчику добивает? Он высоко же.
Потому что при соединении через COM-порт, он пытается приконнектится к счетчику или еще к чему-то.
Ссори за глупые вопросы.

Оптопорт типа такого?
Изображение

Re: Модуль отображения информации МИРТ-830 из ардуины

Вт июн 27, 2023 23:25:38

...А сам оптопорт как к счетчику добивает? Он высоко же.
Потому что при соединении через COM-порт, он пытается приконнектится к счетчику или еще к чему-то.
Ссори за глупые вопросы.

Оптопорт предназначен для соединения с прибором учёта при снятой крышке,
и непосредственном контакте оптоголовки с ответной частью прибора.
Когда прибор находится на опоре, то соединение через оптопорт невозможно.
Но поскольку он лежит у меня на столе, то никаких ограничений нет.
И ещё раз - при подключении шнура создаётся виртуальный COM порт,
соединение выбирается по его номеру, и как RS232.

PS на фотке похожий.

Re: Модуль отображения информации МИРТ-830 из ардуины

Вт июн 27, 2023 23:28:53

Теперь понятно, что нужно купить оптопорт и сам счетчик, иначе ничего не выйдет ((( печалька.
На круг на Авито - 10к (для 1 фазного) для экспериментов и парсинга.

А что-то можете прояснить про следующие команды из раннего скетча:
команда 0x10, команда 0x05 (0x04 подкоманда), команда 0x0A (0x01 подкоманда) и команда 0x2A (0x01 подкоманда)?

0x05 0x00 это запрос суммарных значений счетчика, а вот что делает 0x05 0x04 не ясно.
Последний раз редактировалось SysCat Вт июн 27, 2023 23:37:36, всего редактировалось 1 раз.

Re: Модуль отображения информации МИРТ-830 из ардуины

Вт июн 27, 2023 23:36:32

А что-то можете прояснить про следующие команды из раннего скетча:
команда 0x05 (0x04 подкоманда), команда 0x0A (0x01 подкоманда) и команда 0x2A (0x01 подкоманда)?

0x05 0x00 это запрос суммарных значений счетчика, а вот что делает 0x05 0x04 не ясно.

Будет время посмотрю.

Re: Модуль отображения информации МИРТ-830 из ардуины

Вт июн 27, 2023 23:38:13

Благодарствую, а еще команда 0x10.

Вот мои визуальные изыскания:
Изображение Изображение Изображение

на основе их и сделаны парсинги в последних скетчах.
Ответить