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

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

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


SysCat
Открыл глаза
Сообщения: 62
Зарегистрирован: Вс авг 26, 2012 07:47:41

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

Сообщение SysCat »

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

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

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

Надо переписать код, а то там можно в трех соснах заблудиться.
Реклама
SysCat
Открыл глаза
Сообщения: 62
Зарегистрирован: Вс авг 26, 2012 07:47:41

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

Сообщение SysCat »

Посмотрев немного еще код - заметил некоторые интересности:
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. Наведена небольшая красота в вебке.

Вот тут тоже интересности заметил:
[uquote="Dismas",url="/forum/viewtopic.php?p=4137199#p4137199"]
СпойлерТак, совсем немного.

Код: Выделить всё

Первый запрос от пульта к счётчику:
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 - конец пакета
[/uquote]

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 КБ) 110 скачиваний
My_Mirtek_GW_upd4.zip
следующие доработки мелкие, в основном немного в веб, а так же ограничения на кривые показания, основа взята тут на форуме My_Mirtek_GW_upd2
(7.93 КБ) 121 скачивание
Реклама
SysCat
Открыл глаза
Сообщения: 62
Зарегистрирован: Вс авг 26, 2012 07:47:41

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

Сообщение SysCat »

Кстати, проводя разные изыскания пришел в выводу, что

Код: Выделить всё

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
SysCat
Открыл глаза
Сообщения: 62
Зарегистрирован: Вс авг 26, 2012 07:47:41

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

Сообщение SysCat »

Вот тут немного переработал код, теперь на формирование пакетов для отправки 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 КБ) 158 скачиваний
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Dismas
Потрогал лапой паяльник
Сообщения: 365
Зарегистрирован: Вс май 02, 2021 18:58:49
Откуда: 俄罗斯

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

Сообщение Dismas »

[uquote="SysCat",url="/forum/viewtopic.php?p=4433494#p4433494"]Посмотрев немного еще код - заметил некоторые интересности:

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

Код: Выделить всё

байты 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-го байта передаются как: первый байт всегда младший и идет первым!!!
Если пройтись немного назад, есть ссылка на документ где все эти нюансы описаны.
Реклама
SysCat
Открыл глаза
Сообщения: 62
Зарегистрирован: Вс авг 26, 2012 07:47:41

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

Сообщение SysCat »

Про стартовые байты все понятно (старт, адреса, стоп), просто в коде было 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
Реклама
Аватара пользователя
Dismas
Потрогал лапой паяльник
Сообщения: 365
Зарегистрирован: Вс май 02, 2021 18:58:49
Откуда: 俄罗斯

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

Сообщение Dismas »

[uquote="SysCat",url="/forum/viewtopic.php?p=4437353#p4437353"]...
а далее нестыковки:

Код: Выделить всё

transmitt_byte[3] = 0x20;
что интересно что тут указано что пакет короткий, но при этом указали подкоманду (байт 14)

Код: Выделить всё

transmitt_byte[9] = 0x1C; //команда запроса даты/времени
transmitt_byte[14] = 0x00;
packetType = 4; //количество ответных пакетов
а количество ответных пакетов указали 4, о великая сила Ctrl+C, Ctrl+V[/uquote]
Понятия не имею кто это писал и что имелось в виду, я отвечал на конкретный вопрос, как формируется 3 байт.
SysCat
Открыл глаза
Сообщения: 62
Зарегистрирован: Вс авг 26, 2012 07:47:41

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

Сообщение SysCat »

Спасибо за разъяснения, вместе мы сила!
Аватара пользователя
Dismas
Потрогал лапой паяльник
Сообщения: 365
Зарегистрирован: Вс май 02, 2021 18:58:49
Откуда: 俄罗斯

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

Сообщение Dismas »

[uquote="SysCat",url="/forum/viewtopic.php?p=4437353#p4437353"]Команды: 0x28[/uquote]
Чтение доп. режимов индикации.
Вложения
RD_IND.jpg
(248.14 КБ) 154 скачивания
SysCat
Открыл глаза
Сообщения: 62
Зарегистрирован: Вс авг 26, 2012 07:47:41

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

Сообщение SysCat »

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

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

Спасибо, что делитесь полезными изысканиями.
Аватара пользователя
Dismas
Потрогал лапой паяльник
Сообщения: 365
Зарегистрирован: Вс май 02, 2021 18:58:49
Откуда: 俄罗斯

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

Сообщение Dismas »

[uquote="SysCat",url="/forum/viewtopic.php?p=4437831#p4437831"]...А чем вы пользуетесь в аппаратной части, ведь программа без железной части не даёт возможности пройти далее режима выбора типа связи...[/uquote]
Как чем, прибором учёта лежащим на столе, к которому подключен лог. анализатор.
SysCat
Открыл глаза
Сообщения: 62
Зарегистрирован: Вс авг 26, 2012 07:47:41

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

Сообщение SysCat »

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

Изображение
Последний раз редактировалось SysCat Вт июн 27, 2023 22:54:08, всего редактировалось 1 раз.
Аватара пользователя
Dismas
Потрогал лапой паяльник
Сообщения: 365
Зарегистрирован: Вс май 02, 2021 18:58:49
Откуда: 俄罗斯

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

Сообщение Dismas »

[uquote="SysCat",url="/forum/viewtopic.php?p=4437919#p4437919"]А как Вам удалось программу к нему прикрутить, которая MsTool или как её там...
Я понял так что вы с программы посылаете запросы?[/uquote]
Так она, как ни странно, для этого и предназначена.
Если имеется в виду интерфейс, это оптопорт.
SysCat
Открыл глаза
Сообщения: 62
Зарегистрирован: Вс авг 26, 2012 07:47:41

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

Сообщение SysCat »

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

Можете сделать фотку стенда?
Аватара пользователя
Dismas
Потрогал лапой паяльник
Сообщения: 365
Зарегистрирован: Вс май 02, 2021 18:58:49
Откуда: 俄罗斯

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

Сообщение Dismas »

[uquote="SysCat",url="/forum/viewtopic.php?p=4437926#p4437926"]И как к самому пульту удалось?
Или Вы приобрели счетчик и как-то к нему коннектитесь по-другому?[/uquote]
К пульту что ???
Оптопорт при подключении создаёт виртуальный COM порт, выбираем его и вперёд.
SysCat
Открыл глаза
Сообщения: 62
Зарегистрирован: Вс авг 26, 2012 07:47:41

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

Сообщение SysCat »

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

Изображение

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

Оптопорт типа такого?
Изображение
Аватара пользователя
Dismas
Потрогал лапой паяльник
Сообщения: 365
Зарегистрирован: Вс май 02, 2021 18:58:49
Откуда: 俄罗斯

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

Сообщение Dismas »

[uquote="SysCat",url="/forum/viewtopic.php?p=4437930#p4437930"]...А сам оптопорт как к счетчику добивает? Он высоко же.
Потому что при соединении через COM-порт, он пытается приконнектится к счетчику или еще к чему-то.
Ссори за глупые вопросы.[/uquote]
Оптопорт предназначен для соединения с прибором учёта при снятой крышке,
и непосредственном контакте оптоголовки с ответной частью прибора.
Когда прибор находится на опоре, то соединение через оптопорт невозможно.
Но поскольку он лежит у меня на столе, то никаких ограничений нет.
И ещё раз - при подключении шнура создаётся виртуальный COM порт,
соединение выбирается по его номеру, и как RS232.

PS на фотке похожий.
SysCat
Открыл глаза
Сообщения: 62
Зарегистрирован: Вс авг 26, 2012 07:47:41

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

Сообщение SysCat »

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

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

0x05 0x00 это запрос суммарных значений счетчика, а вот что делает 0x05 0x04 не ясно.
Последний раз редактировалось SysCat Вт июн 27, 2023 23:37:36, всего редактировалось 1 раз.
Аватара пользователя
Dismas
Потрогал лапой паяльник
Сообщения: 365
Зарегистрирован: Вс май 02, 2021 18:58:49
Откуда: 俄罗斯

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

Сообщение Dismas »

[uquote="SysCat",url="/forum/viewtopic.php?p=4437938#p4437938"]А что-то можете прояснить про следующие команды из раннего скетча:
команда 0x05 (0x04 подкоманда), команда 0x0A (0x01 подкоманда) и команда 0x2A (0x01 подкоманда)?

0x05 0x00 это запрос суммарных значений счетчика, а вот что делает 0x05 0x04 не ясно.[/uquote]
Будет время посмотрю.
SysCat
Открыл глаза
Сообщения: 62
Зарегистрирован: Вс авг 26, 2012 07:47:41

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

Сообщение SysCat »

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

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

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

Вернуться в «Статьи»