Спасибо большое за помощь и консультации. Все работает. Новую версию проверю на неделе, старая вроде тоже хорошо работает, не вылетает. Данные исправно приходят.
Согласен, тогда будет наверное верно так (с учетом что в программе счетчика задано место для 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
А тут можно по подробнее? Это получается байт который равен 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,
бит C – кодирование данных, 0 - данные не закодированы; биты V0 – вид структуры пакета: 0 - пакета для устройств с малыми вычислительными мощностями (счетчиков); бит D – Направление движения пакета (1 – запрос к устройству, 0 – ответ устройства); биты L4…L0 –длинна поля Data, значения могут принимать (0 до 31) в зависимости от структуры - 0x00000b -> 0 байт, дополнительная подкоманда не передается.
бит 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 раз.
Кодируется так же как и для Cos ф? (значение выше 128 (байтом 0x80))
Да, только с учетом, что по описанию один байт.
В том же вордовом файле есть описание конфигурационного байта, который отдается на 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 байт – значения по тарифам
У меня статусы были другие: 0x03 0x5B и 0x43 0x5B.
Можно разобрать побитно по тому же документу, понять что меняется.
Код:
Информационное поле 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 раз.
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') - коннект.
Там пакет не сырой, обработан байтстафингом, странно конечно, у меня работает и других вроде тоже, у Вас по логам MQTT принял 56 байт "сырого" пакета (с учетом пробелов). Судя по логам ESP32 разорвал соединение с сервером MQTT (такое обычно когда они не в одной сети).
Саму отправку/прием пакетов сделал как дебаг, так как удаленно смотрел пакеты для парсинга новых данных и в новой версии уже отключил.
Последний раз редактировалось SysCat Пт авг 11, 2023 00:11:08, всего редактировалось 2 раз(а).
Сырой я так обозвал.. От 05 команды явно длиннее, чем ответ на запрос времени. То, что я сам писал висло через 1-3 суток работы. Причем висяк еще и происходил со включенным передатчиком У меня метеостанция на 433 МГц терялась Так что это может быть мой конкретный ESP32 глючит...
Тогда получается так: 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 - спасибо за доработки! Вместе мы сила!
У меня в свое время были перепутаны провода и при замене одиночных алюминиевых линий на витой кабель было не верное подключение, по стандарту по цветам одно, по факту те кто заводил в дом от столба руководствовался своей логикой. И при переключении мне не корректно подключили, так что получилось 2 фазы со столба в розетке сразу, возможно что-то тогда потом и ковыряли, меняли подключение, не помню точно был ли уже тогда счетчик или нет, но счетчик на столбе высоко, пока претензий не было. Мы же продвинулись и читаем значения со счетчика выше тех, которые заложены в пульте.
фигня какая-то, электричество выключили? Может не стоит это парсить, вопросов много будет?
При выключенном электричестве значений бы от счетчика не поступало бы, ранее пару раз срабатывало реле в самом счетчике когда станок запускал и были кз, но автоматы в доме не срабатывали, сработала защита в самом счетчике, тогда на пульте (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 – есть небаланс).
Возможно в веб морде стоит нарисовать по данным счетчика график потребления по месяцам. Он же в себе хранит срезы, вопрос только в месте на esp32
Это надо реализовывать работу с 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 символов?
Мы тут доки смотрим от ИЭКа - может быть конфигурация разная с Миртеком Для жилого дома точное соответствие фаз (L1, L2, L3) не сильно принципиально. Если есть 3х фазный двигатель, то прибором найти правильное чередование фаз. У нас уже пару лет идет замена старой проводки на СИП и уже раза три менялись фазы. В щитке стоит 3х фазный вольтметр, и хорошо видно изменения, ибо на разных фазах сильно напряжение гуляет по разному. Вот обещают в этом году закончить - на вводном автомате перекину провода для правильного чередования.
Всем привет! SysCat, спасибо за старания! В моем случае последняя сборка заработала после внесения следующих правок: 1. Почему-то принимаемый пакет после байта 0x55 содержит всегда еще один байт. Из-за этого вычисление CRC работало неверно. Для решения добавил в обработке байтстаффингом:
Код:
if (tempbuffer[i] == 0x55 and tempbuffer[i-1] != 0x73){ break; }
2. Так же как у paulerr mqtt не получал никакие данные кроме даты последнего обращения к счетчику, пока не закомментил строчку
3. int gdo0 = 2 (вместо 22); #define STATUS_PIN 16 (вместо 2). Тут не разбирался что к чему, саму схемку паял давно для первой версии скетча, сейчас просто подставил старые значения, т.к. с новыми все зависало глухо при отправке запроса
1. Почему-то принимаемый пакет после байта 0x55 содержит всегда еще один байт. Из-за этого вычисление CRC работало неверно. Для решения добавил в обработке байтстаффингом:
Код:
if (tempbuffer[i] == 0x55 and tempbuffer[i-1] != 0x73){ break; }
У Вас случаем не однофазный счетчик? Тут у Вас проверка, что если подряд НЕ идут 0x73 0x55 (стартовый пакет), странно что у вас он в конце попадается, но таким образом при первом значении 0x55 он должен выйти из цикла и далее не обрабатывать пакет, таким образом в результирующий буффер может попасть пакет не полностью, и парсинги не будут работать, если в середине пакета встретиться зачине 0x55 как значение, а не маркер старта/стопа пакета. Если я правильно понимаю.
3. int gdo0 = 2 (вместо 22); #define STATUS_PIN 16 (вместо 2). Тут не разбирался что к чему, саму схемку паял давно для первой версии скетча, сейчас просто подставил старые значения, т.к. с новыми все зависало глухо при отправке запроса
Тут физически надо перепаять 2 контакт на 22 между ESP32 и CC1101, что так же писалось выше.
но таким образом при первом значении 0x55 он должен выйти из цикла и далее не обрабатывать пакет, таким образом в результирующий буффер может попасть пакет не полностью, и парсинги не будут работать, если в середине пакета встретиться зачине 0x55 как значение, а не маркер старта/стопа пакета.
Почему-то в принимаемом пакете всегда есть хвост после байта 0x55. В середине 0x55 попасться не может, т.к. обрезка происходит ДО обратного байтстаффинга (то есть в сыром принимаемом пакете). А 55 в середине может появиться только после байтстаффинга.
Добрый день. Никто не сталкивался с Миртеками у которых радиомодуль на 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 предназначенный для работы с индикаторным устройством. Модуль по умолчанию имеет встроенную антенну.
Добрый день. Никто не сталкивался с Миртеками у которых радиомодуль на 2400МГц?
В 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
Купил миртек с опцией 2400/2 для экспериментов. Спасибо продавцу, он совершенно бесплатно добавил модуль 2400/2 от неисправного трехфазного счетчика. Но задачка подключения не такая простая, как я надеялся. Модуль называется "ComMod Z", построен на контроллере EM357. Интернет утверждает, что это разработка ООО "ТелеПозиционный Проект". Больше никакой информации не нашел, кроме той, что модули с таким же названием ставились не только в счетчики миртек. Но не факт, что с аналогичной прошивкой и настройками.
Модуль ComMod Z Спойлер Другой модуль, установленный в счетчик Спойлер
Подключается он к счетчику 4 выводами, GND, 5V, Rx, Tx, протокол UART. При старте происходит обмен модуля со счетчиком, потом тишина. Спойлер[/url] Первый канал - Rx модуля, второй - Tx. Запрос и ответ:
F50C - это адрес счетчика, команда 1C - запрос даты-времени. Запрос и ответ повторяется 2 раза, различаются только секунды в ответе. Затем полная тишина. Получается, что модуль знает адрес счетчика и конфигурируют его заранее. И он не просто прозрачный радиомодем, а способен самостоятельно получать данные и, видимо, отправлять их в радиоканал. EM357 это ZigBee передатчик, но он может реализовать и "ZigBee-подобный" протокол, тогда без его прошивки не разобраться, что он и как передает. И получится ли его связать с китайскими ZigBee модулями. Надеюсь, что это все же обычный ZigBee.
Пока что идеи понять что это и как работает закончились.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения