Спасибо, включу в следующую версию скрипта.buv писал(а): ↑20 июл 2018, 11:10
UPDATE: Ошибка с конвертацией связана с работой sprintf. После добавления параметра --non-decimal-data к awk в файле merc230.sh всё заработало.
Код: Выделить всё
echo $data | awk --non-decimal-data -Fx 'function preob(name,val)
Опрос электросчетчика Меркурий 230
Re: Опрос электросчетчика Меркурий 230
"Та нам з тобою своє робити, відкрити очі і далі йти!
І зуби сильно стиснувши, маму ніжно любити, хто ж тоді, як не ми, брати?!"(с)
І зуби сильно стиснувши, маму ніжно любити, хто ж тоді, як не ми, брати?!"(с)
Re: Опрос электросчетчика Меркурий 230
Здравтвуйте, kpp! Большое спасибо за скрипт, сэкономили кучу времени на самостоятельную разработку! С вашего сайта скачать к сожалению не получается. Могли бы пожалуйста выложить последнюю версию в Git? Если кому будет интересно, чтобы заработал на ОС Openhabian, надо поправить в файле lib_funct.sh 2 места:
- заменить "echo" на "/bin/echo" в процедуре HexToChar()
- добавить ключ “--text” к команде grep в процедуре GetCommandLine()
Re: Опрос электросчетчика Меркурий 230
Доброе время суток!
Рад что кому-то помог
Сервер пока в ремонте, в процессе.
Рад что кому-то помог
Сервер пока в ремонте, в процессе.
"Та нам з тобою своє робити, відкрити очі і далі йти!
І зуби сильно стиснувши, маму ніжно любити, хто ж тоді, як не ми, брати?!"(с)
І зуби сильно стиснувши, маму ніжно любити, хто ж тоді, як не ми, брати?!"(с)
Re: Опрос электросчетчика Меркурий 230
Все команды запустил, уже сутки все работает без сбоев. Сделал опрос всех параметров раз в минуту на 9600 бод. Ну вы конечно с шелом заморочились серьезно Декодировать настройки парсера я так и не смог По ходу дела заменил echo на /bin/echo, добавил вывод команды coin (угол между фазами) по аналогии с coefw в case в процедуре Parser_com(), ну и кое-что по мелочи. Наверное в новой версии все это уже есть? Если не секрет, сколько же времени ушло у вас на написание скриптов?
Также опробовал устройство USR IOT N540, которое конвертирует RS485 в Ethernet. Интеграция - через socat по tcp. Все работает стабильно. Для статистики, список оборудования, мб кому пригодится:
Также опробовал устройство USR IOT N540, которое конвертирует RS485 в Ethernet. Интеграция - через socat по tcp. Все работает стабильно. Для статистики, список оборудования, мб кому пригодится:
- Меркурий 236 ART-02 PQRS
- USR IOT N540
- Raspberry Pi3 B+, ОС Openhabian
- Протокол обмена RS485, 9600 бод
- Физический канал - витая пара ProLan UTP, 90м
Re: Опрос электросчетчика Меркурий 230
Вообще говоря, программирование это моя профессия и хобби.P_Dmitrij писал(а): ↑31 июл 2020, 01:28Все команды запустил, уже сутки все работает без сбоев. Сделал опрос всех параметров раз в минуту на 9600 бод. Ну вы конечно с шелом заморочились серьезно Декодировать настройки парсера я так и не смог По ходу дела заменил echo на /bin/echo, добавил вывод команды coin (угол между фазами) по аналогии с coefw в case в процедуре Parser_com(), ну и кое-что по мелочи. Наверное в новой версии все это уже есть? Если не секрет, сколько же времени ушло у вас на написание скриптов?
Я решил испытать шелл на прочность и возможность. И получилось неплохо. Да, многие говорили что это чушь и гемор. Но мне было интересно попрограммировать именно так.
Я результатом доволен.
У меня этот скрипт без сбоев работал с 2014 года. Полгода назад жесткий диск на сервере приказал долго жить, надеюсь будет свободная минутка поднять его и запустить снова.
Старался сделать максимально универсально, поэтому возможны проблемы с пониманием, нужно написать документацию
Есть идеи для новой версии, пока нет времени.
Скрипты писались не так долго.. месяц - ядро, потом месяц на откладку, допилку. Это с отвлечением на основную работу и прочее, т.е. по сути "по ночам"
Последний раз редактировалось kpp 31 июл 2020, 12:39, всего редактировалось 2 раза.
"Та нам з тобою своє робити, відкрити очі і далі йти!
І зуби сильно стиснувши, маму ніжно любити, хто ж тоді, як не ми, брати?!"(с)
І зуби сильно стиснувши, маму ніжно любити, хто ж тоді, як не ми, брати?!"(с)
Re: Опрос электросчетчика Меркурий 230
Вот это круто, у меня просили потестировать через конвертер в Ethernet, но у меня не было устройства.
За это спасибо отдельное.
"Та нам з тобою своє робити, відкрити очі і далі йти!
І зуби сильно стиснувши, маму ніжно любити, хто ж тоді, як не ми, брати?!"(с)
І зуби сильно стиснувши, маму ніжно любити, хто ж тоді, як не ми, брати?!"(с)
Re: Опрос электросчетчика Меркурий 230
Да, получилось отлично, спасибо еще раз! Скопируйте пожалуйста по возможности актуальную версию в Git. Тут в соседней теме спрашивают про подключение счетчика Нева 303 по RS485, может быть пригодится ваш фреймворк. В принципе, дописать скрипт по аналогии с merc230.sh и все должно заработать. Это всяко проще, чем все с нуля писать.
Re: Опрос электросчетчика Меркурий 230
Приветствую всех!
Давненько я не заходил сюда...
Но вот возникла проблема на ровном месте, надеюсь на вашу помощь.
Лет 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?
Давненько я не заходил сюда...
Но вот возникла проблема на ровном месте, надеюсь на вашу помощь.
Лет 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?