Опрос электросчетчика Меркурий 230

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
kpp
Сообщения: 147
Зарегистрирован: 29 авг 2011, 15:03
Откуда: Київ-Дніпро

Re: Опрос электросчетчика Меркурий 230

Сообщение kpp » 18 мар 2019, 01:59

buv писал(а):
20 июл 2018, 11:10

UPDATE: Ошибка с конвертацией связана с работой sprintf. После добавления параметра --non-decimal-data к awk в файле merc230.sh всё заработало.

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

            echo $data | awk --non-decimal-data -Fx 'function preob(name,val)
Спасибо, включу в следующую версию скрипта.
"Та нам з тобою своє робити, відкрити очі і далі йти!
І зуби сильно стиснувши, маму ніжно любити, хто ж тоді, як не ми, брати?!"(с)

P_Dmitrij
Сообщения: 450
Зарегистрирован: 12 ноя 2019, 07:51

Re: Опрос электросчетчика Меркурий 230

Сообщение P_Dmitrij » 29 июл 2020, 01:55

Здравтвуйте, kpp! Большое спасибо за скрипт, сэкономили кучу времени на самостоятельную разработку! С вашего сайта скачать к сожалению не получается. Могли бы пожалуйста выложить последнюю версию в Git? Если кому будет интересно, чтобы заработал на ОС Openhabian, надо поправить в файле lib_funct.sh 2 места:
  • заменить "echo" на "/bin/echo" в процедуре HexToChar()
  • добавить ключ “--text” к команде grep в процедуре GetCommandLine()

kpp
Сообщения: 147
Зарегистрирован: 29 авг 2011, 15:03
Откуда: Київ-Дніпро

Re: Опрос электросчетчика Меркурий 230

Сообщение kpp » 29 июл 2020, 20:13

Доброе время суток!
Рад что кому-то помог ;)
Сервер пока в ремонте, в процессе.
"Та нам з тобою своє робити, відкрити очі і далі йти!
І зуби сильно стиснувши, маму ніжно любити, хто ж тоді, як не ми, брати?!"(с)

P_Dmitrij
Сообщения: 450
Зарегистрирован: 12 ноя 2019, 07:51

Re: Опрос электросчетчика Меркурий 230

Сообщение P_Dmitrij » 31 июл 2020, 01:28

Все команды запустил, уже сутки все работает без сбоев. Сделал опрос всех параметров раз в минуту на 9600 бод. Ну вы конечно с шелом заморочились серьезно :) Декодировать настройки парсера я так и не смог :) По ходу дела заменил echo на /bin/echo, добавил вывод команды coin (угол между фазами) по аналогии с coefw в case в процедуре Parser_com(), ну и кое-что по мелочи. Наверное в новой версии все это уже есть? Если не секрет, сколько же времени ушло у вас на написание скриптов?
Также опробовал устройство USR IOT N540, которое конвертирует RS485 в Ethernet. Интеграция - через socat по tcp. Все работает стабильно. Для статистики, список оборудования, мб кому пригодится:
  • Меркурий 236 ART-02 PQRS
  • USR IOT N540
  • Raspberry Pi3 B+, ОС Openhabian
  • Протокол обмена RS485, 9600 бод
  • Физический канал - витая пара ProLan UTP, 90м

kpp
Сообщения: 147
Зарегистрирован: 29 авг 2011, 15:03
Откуда: Київ-Дніпро

Re: Опрос электросчетчика Меркурий 230

Сообщение kpp » 31 июл 2020, 12:33

P_Dmitrij писал(а):
31 июл 2020, 01:28
Все команды запустил, уже сутки все работает без сбоев. Сделал опрос всех параметров раз в минуту на 9600 бод. Ну вы конечно с шелом заморочились серьезно :) Декодировать настройки парсера я так и не смог :) По ходу дела заменил echo на /bin/echo, добавил вывод команды coin (угол между фазами) по аналогии с coefw в case в процедуре Parser_com(), ну и кое-что по мелочи. Наверное в новой версии все это уже есть? Если не секрет, сколько же времени ушло у вас на написание скриптов?
Вообще говоря, программирование это моя профессия и хобби.
Я решил испытать шелл на прочность и возможность. И получилось неплохо. Да, многие говорили что это чушь и гемор. Но мне было интересно попрограммировать именно так.
Я результатом доволен.
У меня этот скрипт без сбоев работал с 2014 года. Полгода назад жесткий диск на сервере приказал долго жить, надеюсь будет свободная минутка поднять его и запустить снова.
Старался сделать максимально универсально, поэтому возможны проблемы с пониманием, нужно написать документацию ;)
Есть идеи для новой версии, пока нет времени.
Скрипты писались не так долго.. месяц - ядро, потом месяц на откладку, допилку. Это с отвлечением на основную работу и прочее, т.е. по сути "по ночам" :)
Последний раз редактировалось kpp 31 июл 2020, 12:39, всего редактировалось 2 раза.
"Та нам з тобою своє робити, відкрити очі і далі йти!
І зуби сильно стиснувши, маму ніжно любити, хто ж тоді, як не ми, брати?!"(с)

kpp
Сообщения: 147
Зарегистрирован: 29 авг 2011, 15:03
Откуда: Київ-Дніпро

Re: Опрос электросчетчика Меркурий 230

Сообщение kpp » 31 июл 2020, 12:34

P_Dmitrij писал(а):
31 июл 2020, 01:28
Также опробовал устройство USR IOT N540, которое конвертирует RS485 в Ethernet. Интеграция - через socat по tcp. Все работает стабильно.
Вот это круто, у меня просили потестировать через конвертер в Ethernet, но у меня не было устройства.
За это спасибо отдельное.
"Та нам з тобою своє робити, відкрити очі і далі йти!
І зуби сильно стиснувши, маму ніжно любити, хто ж тоді, як не ми, брати?!"(с)

P_Dmitrij
Сообщения: 450
Зарегистрирован: 12 ноя 2019, 07:51

Re: Опрос электросчетчика Меркурий 230

Сообщение P_Dmitrij » 31 июл 2020, 17:53

Да, получилось отлично, спасибо еще раз! Скопируйте пожалуйста по возможности актуальную версию в Git. Тут в соседней теме спрашивают про подключение счетчика Нева 303 по RS485, может быть пригодится ваш фреймворк. В принципе, дописать скрипт по аналогии с merc230.sh и все должно заработать. Это всяко проще, чем все с нуля писать.

Victor_S
Сообщения: 106
Зарегистрирован: 09 дек 2014, 16:57

Re: Опрос электросчетчика Меркурий 230

Сообщение Victor_S » 24 фев 2021, 01:26

Приветствую всех!
Давненько я не заходил сюда...:)
Но вот возникла проблема на ровном месте, надеюсь на вашу помощь.
Лет 5 назад я, по известному скрипту Андрея, прикрутил к своему "умному дому" опрос пары счетчиков Меркурий 236. Все нормально работало, за одним исключением.
Все это я реализовал на OrangePi Zero, включая MySQL и вэб-интерфейс. Соответственно, частые опросы счетчиков и постоянные записи в базу убивали карточку за полгода-год...:(
Недавно мне по наследству достался неттоп на атоме с обычным жестким диском и я решил избавиться от обоих моих микрокомпьютеров, перенеся их функции на данный неттоп.
Не задумываясь о последствиях...:), зашел на сайт Ubunta, и скачал последнюю версию сервера. Ну, и, естественно , версия PHP там оказалась выше 7-ой. И теперь функция count выдает ошибку если аргумент не массив или объект counttable.
Собственно, проблема в одной маленькой функции:
function dd($data = "")
{
$result1 = "";
$data2 = "";
for ( $j = 0; $j < count($data); $j++ )
{
$data2 = dechex(ord($data[0]));
if ( strlen($data2) == 1 )
$result1 = "0".$data2;
else
$result1 .= $data2;

}
return $result1;
}
Я сам не программист, и поэтому никак не могу понять что считает count($data)? И вообще зачем там цикл for? Мне видится, что он будет выполняться всегда только один раз, ну или не будет выполняться если $data - NULL. Я тупо вместо count($data) ставлю -1, и все работает как надо... Но ведь зачем-то это было придумано? В чем я ошибаюсь и как правильно переписать данную функцию для свежих php?

Ответить