Спасибо большое за помощь и консультации. Все работает. Новую версию проверю на неделе, старая вроде тоже хорошо работает, не вылетает. Данные исправно приходят.
Согласен, тогда будет наверное верно так (с учетом что в программе счетчика задано место для 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 раз.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Кодируется так же как и для 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 байт – значения по тарифам
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
У меня статусы были другие: 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.
Пока что идеи понять что это и как работает закончились.
Сейчас этот форум просматривают: Google [Bot] и гости: 47
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения