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

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

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


Alecseyyy
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Чт дек 02, 2010 01:56:00

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

Сообщение Alecseyyy »

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

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

Сообщение SysCat »

Небольшие очепятки нашел в коде, уменьшая размерность массива забыл циклы поправить.
Вложения
My_Mirtek_GW_upd8.zip
исправлены очепятки
(8.75 КБ) 191 скачивание
Реклама
paulerr
Родился
Сообщения: 7
Зарегистрирован: Чт авг 10, 2023 01:24:02

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

Сообщение paulerr »

[uquote="SysCat",url="/forum/viewtopic.php?p=4455561#p4455561"]Небольшие очепятки нашел в коде, уменьшая размерность массива забыл циклы поправить.[/uquote]
В вордовом документе, который здесь был, написано про 4 байта данных о тарифах. Т.е на мой взгляд, сумма будет:

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

sum = float((resultbuffer[26] << 32) | (resultbuffer[25] << 16) | (resultbuffer[24] << 8) | resultbuffer[23]) / 100
и т1 и т2 соответственно.

И температура устройства может быть отрицательной. Надо знак проверять.

Можно от счетчика получить какой текущий тариф сейчас работает. Это в конфигурационном (14) байте. Как то так, например:

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

    MirtekCurrentT = ((resultbuffer[14] >> 2 ) & 0b00000011 ) + 1;
    Serial.print("Current Tariff: T");
    Serial.println(MirtekCurrentT);
SysCat
Открыл глаза
Сообщения: 62
Зарегистрирован: Вс авг 26, 2012 07:47:41

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

Сообщение SysCat »

[uquote="paulerr",url="/forum/viewtopic.php?p=4460021#p4460021"]В вордовом документе, который здесь был, написано про 4 байта данных о тарифах. Т.е на мой взгляд, сумма будет:

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

sum = float((resultbuffer[26] << 32) | (resultbuffer[25] << 16) | (resultbuffer[24] << 8) | resultbuffer[23]) / 100
и т1 и т2 соответственно.[/uquote]
Согласен, тогда будет наверное верно так (с учетом что в программе счетчика задано место для 4-х тарифов):
Всего у нас в полученном пакете после байтстаффинга 45 байт (0-44), 2-а последних это контрольная сумма и конец пакета, первых два - старт пакета.
Пример реально полученного пакета:
Packet_recive = 73 55 1E 0 FE FF XX XX 5 A8 3 5B 0 0 62 1 0 1 0 AF FE 18 0 AF FE 18 0 74 22 11 0 3B DC 7 0 0 0 0 0 0 0 0 0 DA 55
Packet_recive = start 73 55 | 1E | reserv 0 | pult FE FF | addr XX XX | command 5 | A8 3 5B 0 | type_erg 0 | 62 | koef_U 1 0 | koef_I 1 0 | sum AF FE 18 0 | sum_act_t AF FE 18 0 | t1 74 22 11 0 | t2 3B DC 7 0 | t3 0 0 0 0 | t4 0 0 0 0 | crc DA | stop 55

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

sum = float((resultbuffer[22] << 32) | (resultbuffer[21] << 16) | (resultbuffer[20] << 8) | resultbuffer[19]) / 100 // - полная сумма
sum_act_t = float((resultbuffer[26] << 32) | (resultbuffer[25] << 16) | (resultbuffer[24] << 8) | resultbuffer[23]) / 100 // - сумма по задействоанным тарифам
t1 = float((resultbuffer[30] << 32) | (resultbuffer[29] << 16) | (resultbuffer[28] << 8) | resultbuffer[27]) / 100;
t2 = float((resultbuffer[34] << 32) | (resultbuffer[33] << 16) | (resultbuffer[32] << 8) | resultbuffer[31]) / 100;
t3 = float((resultbuffer[38] << 32) | (resultbuffer[37] << 16) | (resultbuffer[36] << 8) | resultbuffer[35]) / 100;
t4 = float((resultbuffer[42] << 32) | (resultbuffer[41] << 16) | (resultbuffer[40] << 8) | resultbuffer[39]) / 100;
Причём sum_all равен sum_act_t.
[uquote="paulerr",url="/forum/viewtopic.php?p=4460021#p4460021"]И температура устройства может быть отрицательной. Надо знак проверять.[/uquote]
Кодируется так же как и для Cos ф (значение выше 128 (байтом 0x80) например 0x05 0x80 для -0,005 и 0x0F 0x80 для -0,015)?

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

if (resultbuffer[19] >= 128) {
cosinA = float((resultbuffer[18] | ((resultbuffer[19] - 128) << 8))) / -1000;}
else {cosinA = float((resultbuffer[18] | (resultbuffer[19] << 8))) / 1000;}
[uquote="paulerr",url="/forum/viewtopic.php?p=4460021#p4460021"]Можно от счетчика получить какой текущий тариф сейчас работает. Это в конфигурационном (14) байте. Как то так, например:

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

    MirtekCurrentT = ((resultbuffer[14] >> 2 ) & 0b00000011 ) + 1;
    Serial.print("Current Tariff: T");
    Serial.println(MirtekCurrentT);
[/uquote]
А тут можно по подробнее? Это получается байт который равен 0x62? Почему +1? Какие варианты получения ответа?
Проверил, при переходе 22:59 в 23:01 байт меняется с 0x62 на 0x66.
А как расшифровать A8 3 5B 0 ? иногда принимает значение A8 43 5B 0, причём этот кусок встречается в любом ответе на запрос вне зависимости от команды, проверял прохождение 22:59 на 23:01, не повлияло, пока изменение не понятно когда происходит.

Трейтий байт принятого пакета 0x1E он же в двоичной системе:
0x00011110b --> C 0 | V0 0 | D 0 | L4 1 | L3 1 | L2 1 | L1 1 | L0 0
Parameters:
бит C – кодирование данных,
0 - данные не закодированы;
1 - данные требуют раскодирования;
биты V0 – вид структуры пакета:
0 - пакета для устройств с малыми вычислительными мощностями (счетчиков);
1 - пакета для устройств с достаточными вычислительными мощностями (УСПД).
бит D – Направление движения пакета (1 – запрос к устройству, 0 – ответ устройства);
биты L4…L0 –длинна поля Data, значения могут принимать (0 до 31) в зависимости от структуры - 0x11110b -> 30 байт.

Согласно L4-L0 - длина пакета 30 байт:

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

0 62 1 0 1 0 AF FE 18 0 AF FE 18 0 74 22 11 0 3B DC 7 0 0 0 0 0 0 0 0 0
в аккурат между байтов A8 3 5B 0 и CRC, причём считается с 1 по 30 байт. Причём считается что L4 старший бит, а L0 младший, иначе длина получится 15, а не 30. А при запросе даты/времени данный байт длины равен 0x07h (0x00000111b), что для L4-L0 составляет 0x00111, что соответствует длине в 7 байт.

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

0x07h --> 0x0000111b
0x00000111b --> C 0 | V0 0 | D 0 | L4 0 | L3 0 | L2 1 | L1 1 | L0 1
бит C – кодирование данных,
0 - данные не закодированы;
биты V0 – вид структуры пакета:
0 - пакета для устройств с малыми вычислительными мощностями (счетчиков);
бит D – Направление движения пакета (1 – запрос к устройству, 0 – ответ устройства);
биты L4…L0 –длинна поля Data, значения могут принимать (0 до 31) в зависимости от структуры - 0x00111b -> 7 байт.

Теперь понятная расшифровка байта 3 при отправке:
Дата/время - команда 1C,

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

transmitt_byte[3] = 0x20; //тип запроса/пакета
0x20h --> 0x00100000b
0x00100000b --> C 0 | V0 0 | D 1 | L4 0 | L3 0 | L2 0 | L1 0 | L0 0

бит C – кодирование данных,
0 - данные не закодированы;
биты V0 – вид структуры пакета:
0 - пакета для устройств с малыми вычислительными мощностями (счетчиков);
бит D – Направление движения пакета (1 – запрос к устройству, 0 – ответ устройства);
биты L4…L0 –длинна поля Data, значения могут принимать (0 до 31) в зависимости от структуры - 0x00000b -> 0 байт, дополнительная подкоманда не передается.

Остальные (0x05, 0x00; 0x2b, 0x00; 0x2b, 0x10):

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

transmitt_byte[3] = 0x21; //тип запроса/пакета
0x21h --> 0x00100001b
0x00100001b --> C 0 | V0 0 | D 0 | L4 0 | L3 0 | L2 0 | L1 0 | L0 1

бит C – кодирование данных,
0 - данные не закодированы;
биты V0 – вид структуры пакета:
0 - пакета для устройств с малыми вычислительными мощностями (счетчиков);
бит D – Направление движения пакета (1 – запрос к устройству, 0 – ответ устройства);
биты L4…L0 –длинна поля Data, значения могут принимать (0 до 31) в зависимости от структуры - 0x00001b -> 1 байт, передается подкоманда transmitt_byte[14] = c14;.
Последний раз редактировалось SysCat Чт авг 10, 2023 23:17:00, всего редактировалось 1 раз.
Реклама
Эиком - электронные компоненты и радиодетали
paulerr
Родился
Сообщения: 7
Зарегистрирован: Чт авг 10, 2023 01:24:02

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

Сообщение paulerr »

[uquote="SysCat",url="/forum/viewtopic.php?p=4460201#p4460201"]Кодируется так же как и для Cos ф? (значение выше 128 (байтом 0x80))[/uquote]Да, только с учетом, что по описанию один байт.

В том же вордовом файле есть описание конфигурационного байта, который отдается на 05 команду:

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

*Конфигурационный байт:
Биты 1,0 – положение точки на ЖКИ
(00-«00000000»,  01-«0000000.0», 
 10-«000000.00», 11-«00000.000»)
Бит 3,2 – действующий тариф (0-1й);
Бит 5,4 – количество знаков ОУ (отчетное устройство)
	(0 - 6,1 - 7, 2 - 8, 3 - 8);
Бит 7,6 – Количество задействованных тарифов (0 - только 1й, 1 - 1й и 2й,
	      2 - 1й,2й,3й, 3 - 1й,2й,3й,4й);
вот приняли в этом байте 0х66 - > 0b01100110.
10 - 000000.00
01 - действующ тариф
10 - количество знаков ОУ
01 - 2 тарифа
Отсюда и "+1" , как я понял, что 00 - Т1, 01 - Т2, 10 - Т3, 11 - Т4. Т.е биты 3,2 будут меняться от времени запроса. Все остальное должно остаться неизменным.
Смотрите на время, которое отдает счетчик. Не факт , что оно совпадает с реальным.

вот с моего счетчика ответ на команду "0x05 00"
73 55 1E 0 FE FF EC 4 5 A8 1 53 0 0 66 1 0 1 0 D1 2F 22 0 D1 2F 22 0 FB 24 15 0 D6 A D 0 0 0 0 0 0 0 0 0 D2 55
2 стартовых пакета 73 55
1 параметры+длина 1E
1 резерв 00
2 адрес EC 04 (01260)
1 команда 05
4 статус A8 01 53 00 (A8 тип счетчика, 01 53 статус, 00 ошибок нет)
дальше ответ по команде, из описания

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

Выходные данные (30 байт):
1 байт – тип энергии,
1 байт – конфигурационный байт;
2 байта – коэф. трансформации по напряжению;
2 байта – коэф. трансформации по току;
4 байта - сумма полная; 
4 байта - сумма по задействованным тарифам;
16 байт – значения по тарифам
Реклама
SysCat
Открыл глаза
Сообщения: 62
Зарегистрирован: Вс авг 26, 2012 07:47:41

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

Сообщение SysCat »

Понял, при прохождении отметки 22:59 - байт равен 0x62h --> 0x01100010b превращается в байт 0x66h --> 0x01100110b

Согласно расшифровке:
0x62h (после 07:00 до 23:00) --> 0x011000010b
считаем справа на лево, итого:
бит 1,0 = 0x10b;
бит 3,2 = 0x00b;
бит 5,4 = 0x10b;
бит 7,6 = 0x10b.

Конфигурационный байт:
Биты 1,0 – положение точки на ЖКИ
(00-«00000000», 01-«0000000.0»,
10-«000000.00», 11-«00000.000»)
Бит 3,2 – действующий тариф (0-1й); --> 0x00b --> 0 --> t1
Бит 5,4 – количество знаков ОУ
(0 - 6,1 - 7, 2 - 8, 3 - 8 ) 0x00b, 0x01b, 0x10b, 0x11b; --> 0x10b --> 2 --> 8
Бит 7,6 – Количество задействованных тарифов (0 - только 1й, 1 - 1й и 2й,
2 - 1й,2й,3й, 3 - 1й,2й,3й,4й); что соответствует в бинарном формате 0x00b, 0x01b, 0x10b, 0x11b --> 0x01b --> 1

0x66h (после 23:00 до 07:00) --> 0x011000110b
считаем справа на лево, итого:
бит 1,0 = 0x10b;
бит 3,2 = 0x01b;
бит 5,4 = 0x10b;
бит 7,6 = 0x10b.

Конфигурационный байт:
Биты 1,0 – положение точки на ЖКИ
(00-«00000000», 01-«0000000.0»,
10-«000000.00», 11-«00000.000»)
Бит 3,2 – действующий тариф (0-1й); --> 0x01b --> 1 --> t2
Бит 5,4 – количество знаков ОУ
(0 - 6,1 - 7, 2 - 8, 3 - 8 ) 0x00b, 0x01b, 0x10b, 0x11b; --> 0x10b --> 2 --> 8
Бит 7,6 – Количество задействованных тарифов (0 - только 1й, 1 - 1й и 2й,
2 - 1й,2й,3й, 3 - 1й,2й,3й,4й); что соответствует в бинарном формате 0x00b, 0x01b, 0x10b, 0x11b --> 0x01b --> 1

[uquote="paulerr",url="/forum/viewtopic.php?p=4460229#p4460229"]4 статус A8 01 53 00 (A8 тип счетчика, 01 53 статус, 00 ошибок нет)[/uquote]
У меня статусы были другие: 0x03 0x5B и 0x43 0x5B.

0xA8 - Счетчик электроэнергии 3ф трансформаторный активно-реактивный (двунаправленный с параметрами сети)
Последний раз редактировалось SysCat Пт авг 11, 2023 00:00:27, всего редактировалось 1 раз.
Реклама
paulerr
Родился
Сообщения: 7
Зарегистрирован: Чт авг 10, 2023 01:24:02

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

Сообщение paulerr »

У меня ваш скетч не корректно работает с MQTT. Похоже, что валится при попытке отправки принятого длинного сырого пакета.
возможно эта строчка :

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

mqttClient.publish("mirtek/" + (String)MeterAdressValue + "/Packet_recive", packet);
Если эту строку закомментировать, то работает.

Для диагностики лог с сервера mosquitto

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

1691699273: Received PUBLISH from Mirtek_GW (d0, q0, r0, m0, 'mirtek/01260/Packet_send', ... (41 bytes))
1691699273: Received PUBLISH from Mirtek_GW (d0, q0, r0, m0, 'mirtek/01260/Packet_recive', ... (56 bytes))
1691699273: Received PUBLISH from Mirtek_GW (d0, q0, r0, m0, 'mirtek/01260/LastRequest', ... (22 bytes))
1691699283: Received PINGREQ from Mirtek_GW
1691699283: Sending PINGRESP to Mirtek_GW
1691699284: Received PUBLISH from Mirtek_GW (d0, q0, r0, m0, 'mirtek/01260/Packet_send', ... (43 bytes))
1691699284: Client Mirtek_GW closed its connection.
1691699289: New client connected from 192.168.13.162:57624 as Mirtek_GW (p2, c1, k10, u'mqttuser').
1691699289: Sending CONNACK to Mirtek_GW (0, 0)
Добавлено after 3 minutes 29 seconds:
[uquote="SysCat",url="/forum/viewtopic.php?p=4460234#p4460234"]У меня статусы были другие: 0x03 0x5B и 0x43 0x5B.[/uquote]
Можно разобрать побитно по тому же документу, понять что меняется.

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

Информационное поле
W SY M2 M1 P3 P2 P1 JL
JL - Есть изменения в журнале (0 - нет, 1- да);
P1 - Вскрытие пломбы крышки клеммной колодки;
P2 - Вскрытие пломбы крышки корпуса;
P3 - Вскрытие пломбы крышки модуля связи;
M1 - Воздействие постоянного магнитного поля
M2 - Воздействие переменного магнитного поля
SY - Синхронизация времени была в текущих сутках
W - Достигнут критический уровень потребительского баланса
0x43 - 0100 0011 . "Синхронизация времени была в текущих сутках". Возможно ваш вариант с двухсторонней телеметрией
Последний раз редактировалось paulerr Пт авг 11, 2023 00:05:16, всего редактировалось 1 раз.
SysCat
Открыл глаза
Сообщения: 62
Зарегистрирован: Вс авг 26, 2012 07:47:41

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

Сообщение SysCat »

[uquote="paulerr",url="/forum/viewtopic.php?p=4460237#p4460237"]У меня ваш скетч не корректно работает с MQTT. Похоже, что валится при попытке отправки принятого длинного сырого пакета.
возможно эта строчка :

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

mqttClient.publish("mirtek/" + (String)MeterAdressValue + "/Packet_recive", packet);
Если эту строку закомментировать, то работает.

Для диагностики лог с сервера mosquitto

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

1691699273: Received PUBLISH from Mirtek_GW (d0, q0, r0, m0, 'mirtek/01260/Packet_recive', ... (56 bytes)) - принял же 56 байт
....
1691699284: Client Mirtek_GW closed its connection. - дисконнект (возможно клиент и сервер не в одной сети)
1691699289: New client connected from 192.168.13.162:57624 as Mirtek_GW (p2, c1, k10, u'mqttuser') - коннект.
[/uquote]
Там пакет не сырой, обработан байтстафингом, странно конечно, у меня работает и других вроде тоже, у Вас по логам MQTT принял 56 байт "сырого" пакета (с учетом пробелов). Судя по логам ESP32 разорвал соединение с сервером MQTT (такое обычно когда они не в одной сети).

Саму отправку/прием пакетов сделал как дебаг, так как удаленно смотрел пакеты для парсинга новых данных и в новой версии уже отключил.
Последний раз редактировалось SysCat Пт авг 11, 2023 00:11:08, всего редактировалось 2 раза.
paulerr
Родился
Сообщения: 7
Зарегистрирован: Чт авг 10, 2023 01:24:02

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

Сообщение paulerr »

Сырой я так обозвал.. От 05 команды явно длиннее, чем ответ на запрос времени.
То, что я сам писал висло через 1-3 суток работы. Причем висяк еще и происходил со включенным передатчиком :shock: У меня метеостанция на 433 МГц терялась :)
Так что это может быть мой конкретный ESP32 глючит...
SysCat
Открыл глаза
Сообщения: 62
Зарегистрирован: Вс авг 26, 2012 07:47:41

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

Сообщение SysCat »

Тогда получается так:
0x01 --> 0x00000001b --> 0xW 0 | SY 0 | M2 0 | M1 0 | P3 0 | P2 0 | P1 0 | JL 1
JL - Есть изменения в журнале (0 - нет, 1- да);
P1 - Вскрытие пломбы крышки клеммной колодки (0 - нет, 1 - да);
P2 - Вскрытие пломбы крышки корпуса (0 - нет, 1- да);
P3 - Вскрытие пломбы крышки модуля связи (0 - нет, 1- да);
M1 - Воздействие постоянного магнитного поля (0 - нет, 1- да);
M2 - Воздействие переменного магнитного поля (0 - нет, 1- да);
SY - Синхронизация времени была в текущих сутках (0 - нет, 1- да);
W - Достигнут критический уровень потребительского баланса (0 - нет, 1- да).

0x03 --> 0x00000011b
JL - Есть изменения в журнале (0 - нет, 1- да);
P1 - Вскрытие пломбы крышки клеммной колодки (0 - нет, 1 - да);
P2 - Вскрытие пломбы крышки корпуса (0 - нет, 1- да);
P3 - Вскрытие пломбы крышки модуля связи (0 - нет, 1- да);
M1 - Воздействие постоянного магнитного поля (0 - нет, 1- да);
M2 - Воздействие переменного магнитного поля (0 - нет, 1- да);
SY - Синхронизация времени была в текущих сутках (0 - нет, 1- да);
W - Достигнут критический уровень потребительского баланса (0 - нет, 1- да).

0x43 --> 0x01000011b
JL - Есть изменения в журнале (0 - нет, 1- да);
P1 - Вскрытие пломбы крышки клеммной колодки (0 - нет, 1 - да);
P2 - Вскрытие пломбы крышки корпуса (0 - нет, 1- да);
P3 - Вскрытие пломбы крышки модуля связи (0 - нет, 1- да);
M1 - Воздействие постоянного магнитного поля (0 - нет, 1- да);
M2 - Воздействие переменного магнитного поля (0 - нет, 1- да);
SY - Синхронизация времени была в текущих сутках (0 - нет, 1- да);
W - Достигнут критический уровень потребительского баланса (0 - нет, 1- да).

0x5B --> 0x01011011b --> N 0 | AR 1 | ND 0 | W 1 | R2 1 | R1 0 | R0 1 | J 1
J – Положение заводской перемычки: (1 – отсутствует, 0 – установлен);
R0 – Наличие реле: (0 не имеет реле, 1 –имеет реле);
R1 – Тип реле: (0 – реле отключения, 1 – реле управления);
R2 – Состояние реле: (0 – держит нагрузку, 1 – отключило нагрузку);
IN – Импульсный вход учета: (0 – есть, 1 – нет);
ND - Возникновение аварийной ситуации (0 - нет аварии, 1 - авария);
AR – Авто-регистрация (0 – отключена, 1 – включена).
N – Небаланс токов: (0– нет небаланса, 1 – есть небаланс).

Позже тогда внесу доработки в код, расширив парсинг.
:)) paulerr - спасибо за доработки! Вместе мы сила!
paulerr
Родился
Сообщения: 7
Зарегистрирован: Чт авг 10, 2023 01:24:02

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

Сообщение paulerr »

[uquote="SysCat",url="/forum/viewtopic.php?p=4460250#p4460250"]P1 - Вскрытие пломбы крышки клеммной колодки (0 - нет, 1 - да)[/uquote] А что Вам на это говорят местные электросети?

[uquote="SysCat",url="/forum/viewtopic.php?p=4460250#p4460250"]R1 – Тип реле: (0 – реле отключения, 1 – реле управления);
R2 – Состояние реле: (0 – держит нагрузку, 1 – отключило нагрузку);[/uquote] фигня какая-то, электричество выключили?
Может не стоит это парсить, вопросов много будет?

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

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

Сообщение SysCat »

[uquote="paulerr",url="/forum/viewtopic.php?p=4460254#p4460254"]А что Вам на это говорят местные электросети?[/uquote]
У меня в свое время были перепутаны провода и при замене одиночных алюминиевых линий на витой кабель было не верное подключение, по стандарту по цветам одно, по факту те кто заводил в дом от столба руководствовался своей логикой. И при переключении мне не корректно подключили, так что получилось 2 фазы со столба в розетке сразу, возможно что-то тогда потом и ковыряли, меняли подключение, не помню точно был ли уже тогда счетчик или нет, но счетчик на столбе высоко, пока претензий не было. Мы же продвинулись и читаем значения со счетчика выше тех, которые заложены в пульте. :)

[uquote="paulerr",url="/forum/viewtopic.php?p=4460254#p4460254"][uquote="SysCat",url="/forum/viewtopic.php?p=4460250#p4460250"]R1 – Тип реле: (0 – реле отключения, 1 – реле управления);
R2 – Состояние реле: (0 – держит нагрузку, 1 – отключило нагрузку);[/uquote] фигня какая-то, электричество выключили?
Может не стоит это парсить, вопросов много будет?[/uquote]
При выключенном электричестве значений бы от счетчика не поступало бы, ранее пару раз срабатывало реле в самом счетчике когда станок запускал и были кз, но автоматы в доме не срабатывали, сработала защита в самом счетчике, тогда на пульте (4-х кнопочном) и рисовало разомкнутый контакт, через 15 минут оно самовосстанавливалось. Тут данные согласно Word-овскому файлу, возможно в нем тоже есть ошибки. Так же есть же реле NO и NC, может то которое установлено - инвертное и значения на самом деле нужно инвертировать?!

У Вас статус 0x01h 0x53h - Вам проще :))
0x53h --> 01010011b
J – Положение заводской перемычки: (1 – отсутствует, 0 – установлен);
R0 – Наличие реле: (0 не имеет реле, 1 –имеет реле);
R1 – Тип реле: (0 – реле отключения, 1 – реле управления);
R2 – Состояние реле: (0 – держит нагрузку, 1 – отключило нагрузку);
IN – Импульсный вход учета: (0 – есть, 1 – нет);
ND - Возникновение аварийной ситуации (0 - нет аварии, 1 - авария);
AR – Авто-регистрация (0 – отключена, 1 – включена).
N – Небаланс токов: (0 – нет небаланса, 1 – есть небаланс).


[uquote="paulerr",url="/forum/viewtopic.php?p=4460254#p4460254"]Возможно в веб морде стоит нарисовать по данным счетчика график потребления по месяцам. Он же в себе хранит срезы, вопрос только в месте на esp32[/uquote]
Это надо реализовывать работу с EEPROM, работу с RDTools, тема хорошая, но пока с этим не работал. В счетчике есть какие-то данные прям за разный период. Но надо делать парсинг.

Есть тоже интересный приборчик - PowerMeter там реализовано все на Demos W1 mini, данные хранятся в EEPROM откуда строятся графики в Web-интерфейсе --> вот так например:
СпойлерИзображение
Нам бы для начала реализовать OTA обновление прошивки бы :))

А вы заметили, что:
Бит 5,4 – количество знаков ОУ
(0 - 6,1 - 7, 2 - 8, 3 - 8 ) 0x00b, 0x01b, 0x10b, 0x11b;
2-я конфигурация - 8 символов и
3-я конфигурвция - 8 символов? :))
paulerr
Родился
Сообщения: 7
Зарегистрирован: Чт авг 10, 2023 01:24:02

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

Сообщение paulerr »

Мы тут доки смотрим от ИЭКа - может быть конфигурация разная с Миртеком
Для жилого дома точное соответствие фаз (L1, L2, L3) не сильно принципиально. Если есть 3х фазный двигатель, то прибором найти правильное чередование фаз. У нас уже пару лет идет замена старой проводки на СИП и уже раза три менялись фазы. В щитке стоит 3х фазный вольтметр, и хорошо видно изменения, ибо на разных фазах сильно напряжение гуляет по разному. Вот обещают в этом году закончить - на вводном автомате перекину провода для правильного чередования.

Про ОТА: для библиотеки IotWebConf есть пример IotWebConf04UpdateServer . Похоже на ОТА.
digiboy
Родился
Сообщения: 2
Зарегистрирован: Сб авг 19, 2023 09:45:24

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

Сообщение digiboy »

Всем привет!
SysCat, спасибо за старания!
В моем случае последняя сборка заработала после внесения следующих правок:
1. Почему-то принимаемый пакет после байта 0x55 содержит всегда еще один байт. Из-за этого вычисление CRC работало неверно. Для решения добавил в обработке байтстаффингом:

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

if (tempbuffer[i] == 0x55 and tempbuffer[i-1] != 0x73){
	break;	
	} 
2. Так же как у paulerr mqtt не получал никакие данные кроме даты последнего обращения к счетчику, пока не закомментил строчку

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

mqttClient.publish("mirtek/" + (String)MeterAdressValue + "/Packet_recive", packet);
3. int gdo0 = 2 (вместо 22); #define STATUS_PIN 16 (вместо 2). Тут не разбирался что к чему, саму схемку паял давно для первой версии скетча, сейчас просто подставил старые значения, т.к. с новыми все зависало глухо при отправке запроса
SysCat
Открыл глаза
Сообщения: 62
Зарегистрирован: Вс авг 26, 2012 07:47:41

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

Сообщение SysCat »

[uquote="digiboy",url="/forum/viewtopic.php?p=4464577#p4464577"]1. Почему-то принимаемый пакет после байта 0x55 содержит всегда еще один байт. Из-за этого вычисление CRC работало неверно. Для решения добавил в обработке байтстаффингом:

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

if (tempbuffer[i] == 0x55 and tempbuffer[i-1] != 0x73){
	break;	
	} 
[/uquote]
У Вас случаем не однофазный счетчик? Тут у Вас проверка, что если подряд НЕ идут 0x73 0x55 (стартовый пакет), странно что у вас он в конце попадается, но таким образом при первом значении 0x55 он должен выйти из цикла и далее не обрабатывать пакет, таким образом в результирующий буффер может попасть пакет не полностью, и парсинги не будут работать, если в середине пакета встретиться зачине 0x55 как значение, а не маркер старта/стопа пакета. Если я правильно понимаю.
[uquote="digiboy",url="/forum/viewtopic.php?p=4464577#p4464577"]2. Так же как у paulerr mqtt не получал никакие данные кроме даты последнего обращения к счетчику, пока не закомментил строчку

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

mqttClient.publish("mirtek/" + (String)MeterAdressValue + "/Packet_recive", packet);
[/uquote]
Очень странно у меня и знакомого все работает, но это строка более для отладки была, туда выводится полученный пакет.
[uquote="digiboy",url="/forum/viewtopic.php?p=4464577#p4464577"]3. int gdo0 = 2 (вместо 22); #define STATUS_PIN 16 (вместо 2). Тут не разбирался что к чему, саму схемку паял давно для первой версии скетча, сейчас просто подставил старые значения, т.к. с новыми все зависало глухо при отправке запроса[/uquote]
Тут физически надо перепаять 2 контакт на 22 между ESP32 и CC1101, что так же писалось выше.
digiboy
Родился
Сообщения: 2
Зарегистрирован: Сб авг 19, 2023 09:45:24

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

Сообщение digiboy »

У Вас случаем не однофазный счетчик?
Нет, счетчик 3ф, большой, с экраном.
но таким образом при первом значении 0x55 он должен выйти из цикла и далее не обрабатывать пакет, таким образом в результирующий буффер может попасть пакет не полностью, и парсинги не будут работать, если в середине пакета встретиться зачине 0x55 как значение, а не маркер старта/стопа пакета.
Почему-то в принимаемом пакете всегда есть хвост после байта 0x55. В середине 0x55 попасться не может, т.к. обрезка происходит ДО обратного байтстаффинга (то есть в сыром принимаемом пакете). А 55 в середине может появиться только после байтстаффинга.
Raincons
Родился
Сообщения: 5
Зарегистрирован: Пт окт 06, 2023 17:02:37

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

Сообщение Raincons »

Добрый день.
Никто не сталкивался с Миртеками у которых радиомодуль на 2400МГц? Интересно, чем к нему можно подключиться из доступных радиомодулей, какой там протокол радиосвязи, частота, модуляция и т.д. У производителя есть модем МИРТ-541, но он уж очень дорогой. Судя по всему, для MeterTools он выглядит как com-порт. Сомневаюсь, что там WiFi; по документам ZigBee - это отдельная опция.
Конкретно у меня модификация RF2400/2.

Производитель пишет очень мало:
СпойлерСкорость обмена информации при связи со счетчиком по радиоинтерфейсу
на 2400 МГц в радиоканале составляет 250 кБод/с.
• RF2400/1 – радиомодуль с модуляцией сигнала в радиоэфире №1, по умолчанию рабочая частота излучения 2404,880404 МГц;
• RF2400/2 – радиомодуль с модуляцией сигнала в радиоэфире №2;
• RF2400/3 – радиомодуль с модуляцией сигнала в радиоэфире №3, по умолчанию рабочая частота излучения 2404,880404 МГц;
• RF2400/4 – радиомодуль с модуляцией сигнала в радиоэфире №4;
• RF2400/5 – радиомодуль с модуляцией сигнала в радиоэфире №2 и возможность передачи информации об отключении питания у счетчика;
• RF2400/6 – радиомодуль работающей в стандарте Bluetooth 5.0 предназначенный для работы с индикаторным устройством. Модуль по умолчанию имеет встроенную антенну.
SysCat
Открыл глаза
Сообщения: 62
Зарегистрирован: Вс авг 26, 2012 07:47:41

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

Сообщение SysCat »

[uquote="Raincons",url="/forum/viewtopic.php?p=4485675#p4485675"]Добрый день.
Никто не сталкивался с Миртеками у которых радиомодуль на 2400МГц?[/uquote]
В MeterTools доступны следующие типы каналов связи: RS232, Ethernet, M2MConnect, HayesModem, TechReport, Bluetooth. Режима ZigBee не видно.
СпойлерИзображение
Так же вроде есть модуль на основе CC1101 на 2.4Ghz (2.4GHz Full-duplex UART 2km 100mw Wireless CC1100/CC1101 RF Transceiver Module)
СпойлерИзображение
https://www.alibaba.com/product-detail/ ... 98214.html

AS69-T20 2,4G nRF24L01 UART двунаправленный модуль беспроводной последовательной передачи
https://aliexpress.ru/item/32880748312. ... 5607378660
Raincons
Родился
Сообщения: 5
Зарегистрирован: Пт окт 06, 2023 17:02:37

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

Сообщение Raincons »

Купил миртек с опцией 2400/2 для экспериментов. Спасибо продавцу, он совершенно бесплатно добавил модуль 2400/2 от неисправного трехфазного счетчика. Но задачка подключения не такая простая, как я надеялся.
Модуль называется "ComMod Z", построен на контроллере EM357. Интернет утверждает, что это разработка ООО "ТелеПозиционный Проект". Больше никакой информации не нашел, кроме той, что модули с таким же названием ставились не только в счетчики миртек. Но не факт, что с аналогичной прошивкой и настройками.

Модуль ComMod Z
СпойлерИзображение Изображение
Другой модуль, установленный в счетчик
СпойлерИзображение
Подключается он к счетчику 4 выводами, GND, 5V, Rx, Tx, протокол UART. При старте происходит обмен модуля со счетчиком, потом тишина.
СпойлерИзображение[/url]
Первый канал - Rx модуля, второй - Tx.
Запрос и ответ:

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

73 55 20 00 0C F5 FF FF 1C 00 00 00 00 A1 55
73 55 07 00 FF FF 0C F5 1C 98 07 53 00 29 22 02 01 06 08 12 F1 55
F50C - это адрес счетчика, команда 1C - запрос даты-времени. Запрос и ответ повторяется 2 раза, различаются только секунды в ответе. Затем полная тишина.
Получается, что модуль знает адрес счетчика и конфигурируют его заранее. И он не просто прозрачный радиомодем, а способен самостоятельно получать данные и, видимо, отправлять их в радиоканал.
EM357 это ZigBee передатчик, но он может реализовать и "ZigBee-подобный" протокол, тогда без его прошивки не разобраться, что он и как передает. И получится ли его связать с китайскими ZigBee модулями. Надеюсь, что это все же обычный ZigBee.

Пока что идеи понять что это и как работает закончились.
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

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

Сообщение Ser60 »

[uquote="SysCat",url="/forum/viewtopic.php?p=4488839#p4488839"]Так же вроде есть модуль на основе CC1101 на 2.4Ghz (2.4GHz Full-duplex UART 2km 100mw Wireless CC1100/CC1101 RF Transceiver Module)[/uquote]CC1101 работает только на частотах ниже 1 ГГц. Там на сайте ошибка в описании.
Ответить

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