С выбором куда слать запросы, в UART, в радио с выбором параметров связи и прочих штук.
Как раз думаю сделать в настройках переключатель для выбора: что активно для отправки, а что нет.
Цитата:
Практически везде, где устанавливаются подобные счетчики на столбах - автоматически собирают показания и отправляют их в личный кабинет раз в месяц, для этого их такие умные и устанавливали
У нас автоматически данные в кабинет не отправляют, все сами должны передавать.
Цитата:
МетерТулз вроде что-то отсылал в счётчик при закрытии окна.
Надо декомпилить программу саму бы.
Цитата:
В идеале - все данные должны отображаться в веб интерфейсе, возможно со статистикой (где ее хранить только вопрос)
Есть проект Power Meter они продают счетчик 1/3-фазный за счет получения параметров тока потребления через токовые трансформаторы на фазовых проводах, данные складывают в EEPROM, на плате используется D1 mini, прям как модуль просто в гребенку вставляется. (Трехфазное устройство с дисплеем, содержит три модуля измерения PZEM004T, модуль ESP8266, модуль питания. Оборудован монохромным OLED дисплеем, позволяет выводить на дисплей любое измеренное значение и показатели работы системы. — Сохранение измеряемых параметров во внутренней энергонезависимой памяти (глубина архива от 2х месяцев до 10 лет) — Web-интерфейс — Построение графиков измеренных значений через Web интерфейс (данные из памяти берут и на основе их строят график) — Настройка периодов измерений от 10 секунд до 24 часов — Синхронизация с сервером точного времени)
Если открыть корпус - интересный конструктор из модулей с али.
Цитата:
Так что я думаю логический финал проекта - опенсурс проект, со ссылкой на заказ готовых плат на JlcPcb и прошивкой на гитхабе
Согласен, но если контроллер без прошивки, то нарушений нет, так как это просто плата связи ESP с CC1101.
Меня так же очень интересует тема ОТА (обновление по воздуху), но пока не копал. А так же автодискавери в Home Assistens. Если кто поделится наработками - было бы супер.
Надо переписать код, а то там можно в трех соснах заблудиться.
Посмотрев немного еще код - заметил некоторые интересности: 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
Первый запрос от пульта к счётчику: 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]
Скачиваний: 63
Комментарий к файлу: следующие доработки мелкие, в основном немного в веб, а так же ограничения на кривые показания, основа взята тут на форуме My_Mirtek_GW_upd2 My_Mirtek_GW_upd4.zip [7.93 KiB]
Скачиваний: 77
Вот тут немного переработал код, теперь на формирование пакетов для отправки 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-ой таблицы)?
Вложения:
Комментарий к файлу: Обновленный код на основе картинок и upd2 My_Mirtek_GW_upd6.zip [7.94 KiB]
Скачиваний: 94
Посмотрев немного еще код - заметил некоторые интересности:
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-го байта передаются как: первый байт всегда младший и идет первым!!!
Если пройтись немного назад, есть ссылка на документ где все эти нюансы описаны.
Про стартовые байты все понятно (старт, адреса, стоп), просто в коде было 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)
То есть в коде 0x28 смысла большого и нет. И как вижу у Вас для этого кода используется короткая команда с длиной 0x20, а в коде ранее, наверное ошибочно, была длина 0х21 и 14-байт равный в 3-ем запросе 0x00, а в 4-ом 0x01. Раз полезной нагрузки для нас данная команда не несёт, то её не рассматриваем. Интересно считать текущий активный тариф день/ночь, а так же на пульте первой версии есть замочек (вроде состояние пломбы), а так же состояние внутреннего реле, которое показывает замкнуто, когда все ок, например когда у меня автомат не сработал, то сработало реле/автомат в счётчике и само включилось через 15 минут примерно.
А чем вы пользуетесь в аппаратной части, ведь программа без железной части не даёт возможности пройти далее режима выбора типа связи.
В типе подключений такого не наблюдаю (или у Вас другая программа?): И как к самому пульту удалось? Или Вы приобрели счетчик и как-то к нему коннектитесь по-другому?
Просите мою глупость, но не не понимаю про какой именно оптопорт речь, а так я понял что в программе вы выбираете подключение по RS232, но про сам оптопорт пока не ясно.
Можно фото стенда? А сам оптопорт как к счетчику добивает? Он высоко же. Потому что при соединении через COM-порт, он пытается приконнектится к счетчику или еще к чему-то. Ссори за глупые вопросы.
...А сам оптопорт как к счетчику добивает? Он высоко же. Потому что при соединении через COM-порт, он пытается приконнектится к счетчику или еще к чему-то. Ссори за глупые вопросы.
Оптопорт предназначен для соединения с прибором учёта при снятой крышке, и непосредственном контакте оптоголовки с ответной частью прибора. Когда прибор находится на опоре, то соединение через оптопорт невозможно. Но поскольку он лежит у меня на столе, то никаких ограничений нет. И ещё раз - при подключении шнура создаётся виртуальный COM порт, соединение выбирается по его номеру, и как RS232.
Теперь понятно, что нужно купить оптопорт и сам счетчик, иначе ничего не выйдет ((( печалька. На круг на Авито - 10к (для 1 фазного) для экспериментов и парсинга.
А что-то можете прояснить про следующие команды из раннего скетча: команда 0x10, команда 0x05 (0x04 подкоманда), команда 0x0A (0x01 подкоманда) и команда 0x2A (0x01 подкоманда)?
0x05 0x00 это запрос суммарных значений счетчика, а вот что делает 0x05 0x04 не ясно.
Последний раз редактировалось SysCat Вт июн 27, 2023 23:37:36, всего редактировалось 1 раз.
А что-то можете прояснить про следующие команды из раннего скетча: команда 0x05 (0x04 подкоманда), команда 0x0A (0x01 подкоманда) и команда 0x2A (0x01 подкоманда)?
0x05 0x00 это запрос суммарных значений счетчика, а вот что делает 0x05 0x04 не ясно.
Сейчас этот форум просматривают: zmey71 и гости: 14
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения