Да, я знаю о существовании модулей Меркурий и Энергомера... И о еще кучи тем об электросчетчиках Меркурий...
Но, все же , позвольте продолжить...
Как мне казалось, я закрыл для себя эту тему еще лет 5 назад. Однако обстоятельства вынудили вернуться к этой теме более углубленно.
В свое время я пытался сам, еще до появления вышеперечисленный модулей, создать модуль для Меркурия 236. Но тогда у меня Majordomo крутился еще под Windows и решить проблему с нормальным(гарантированным) чтением com порта я так и не смог. Плюнул, и реализовал обработку электросчетчиков на микрокомпьютере под linux, со своим LAMP. Из MD просто вызывалась отдельная вэб-страничка, хостящаяся на микрокомпьютере. И все б ничего, но за эти годы я задолбался менять флэшки. Опрос 2-х счетчиков велся в непрерывном цикле и писался в mysql, убивая флэшку за пол-года, год, полтора... В общем достался мне по наследству неттоп на атоме с обычным диском, и я решил заменить им пару микрокомпьютеров выполнявших функции связи с электросчетчиками, метеостанции и MQTT-брокера. Не особо задумываясь о последствиях..., зашел на сайт ubuntu, и установил последнюю версию сервера(20.04). В комплекте получил php версии 7.4.3... И тут же получил проблемы со "своим" скриптом для электросчетчиков... Я не зря слово своим взял в кавычки... Как и подавляющее количество людей, выложивших свои скрипты в сеть(включая и модуль "Меркурий"), ноги у всех растут из одного скрипта с сайта ab-log.ru. Скрипты каждого лишь дополняли и расширяли возможности "базового" , и все без исключения использовали 2 небольшие функции для чтения данных со счетчиков. Вот о них то и пойдет речь... Почему здесь , а не на ab-log.ru? Похоже форум там окончательно умер, увы... Более чем неделю назад, я попытался задать вопрос, увы - тишина полная... Довольно лирики... теперь конкретно:
Функций2 и вопросов 2.
Забыл предупредить... Я не программист(не кодер) и никогда этим не занимался, но более 20 лет в должности сисадмина на не маленьком предприятии, научили немного логическому мышлению и какому-никакому чтению чужих кодов...
1. Функция dd()
Код: Выделить всё
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;
}
Я переписал у себя данную функцию следующим образом:
Код: Выделить всё
function dd($data = "")
{
$result1 = "";
$data2 = "";
if (isset($data) && !empty($data))
// for ( $j = 0; $j < count2($data); $j++ )
{
$data2 = dechex(ord($data[0]));
if ( strlen($data2) == 1 )
$result1 = "0".$data2;
else
$result1 .= $data2;
}
return $result1;
}
Разбор второй функции оставлю на второй пост ибо и так много буков получилось...