Модуль управления Laurent (Лоран)

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

DiminatorDK
Сообщения: 104
Зарегистрирован: Сб фев 20, 2016 12:19 pm
Благодарил (а): 7 раз
Поблагодарили: 2 раза

Re: Модуль управления Laurent (Лоран)

Сообщение DiminatorDK » Пт янв 19, 2018 11:24 am

Нет, кнопки которые физические работают идеально. И уже много лет. Кнопки надо притягивать к питанию и желательно иметь опторазвязку.
Я про тумблер в MajorDoMo. Или я настолько туп что не смог сделать тумблер или хз. Поэтому сделал кнопки, но и с ними какой-то трэш в плане реакции. Пробую прямой линк (тест) может включить, или просто тишина, пару раз обращусь - включается. Полная анархия.
DiminatorDK
Сообщения: 104
Зарегистрирован: Сб фев 20, 2016 12:19 pm
Благодарил (а): 7 раз
Поблагодарили: 2 раза

Re: Модуль управления Laurent (Лоран)

Сообщение DiminatorDK » Пт янв 19, 2018 2:54 pm

Я нашел модуль laurent.class.php

<?php

/**
* Summary of laurent_command
* @param mixed $host Host address
* @param mixed $command Command
* @param mixed $password Password (default = 'Laurent')
* @return int|string
*/
function laurent_command($host, $command, $password = 'Jerome')
{
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

if ($socket === false)
{
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
return 0;
}

$result = socket_connect($socket, $host, 2424);

if ($result === false)
{
$errorMessage = "socket_connect( $socket , $host , 2424) failed.\nReason: ($result) ";
$errorMessage .= socket_strerror(socket_last_error($socket)) . "\n";
echo $errorMessage;
return 0;
}

$in = '$KE' . "\r\n";
socket_write($socket, $in, strlen($in));

$res = '';
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ))
{
$res .= $out;

if (is_integer(strpos($out, "\n")))
{
break;
}
}

$in = '$KE,PSW,SET,' . $password . "\r\n";
socket_write($socket, $in, strlen($in));

$res = '';
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ))
{
$res .= $out;

if (is_integer(strpos($out, "\n")))
{
break;
}
}

$in = $command . "\r\n";
socket_write($socket, $in, strlen($in));

$res = '';
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ))
{
$res .= $out;
if (is_integer(strpos($out, "\n")))
{
break;
}
}

socket_close($socket);

return trim($res);
}

как я понимаю обращение происходит именно к этому классу. А как можно увидеть ход выполнения? Я в PHP слаб, но меня смущает строчка
$res = '';
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ))

если я правильно понимаю происходит обращение к модулю по порту 2048? Или я ошибаюсь?
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Модуль управления Laurent (Лоран)

Сообщение skysilver » Пт янв 19, 2018 2:59 pm

DiminatorDK писал(а):если я правильно понимаю происходит обращение к модулю по порту 2048? Или я ошибаюсь?
Ошибаешься. Это размер читаемых данных в байтах. Порт указан выше в строке $result = socket_connect($socket, $host, 2424);
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
DiminatorDK
Сообщения: 104
Зарегистрирован: Сб фев 20, 2016 12:19 pm
Благодарил (а): 7 раз
Поблагодарили: 2 раза

Re: Модуль управления Laurent (Лоран)

Сообщение DiminatorDK » Пт янв 19, 2018 3:44 pm

А можно как-то посмотреть прогресс выполнение класса? А то как-то в тишине все выполняется, непонятно что и как.
Duran
Сообщения: 29
Зарегистрирован: Чт июн 21, 2012 12:20 pm
Откуда: Архангельск
Благодарил (а): 1 раз
Поблагодарили: 0

Re: Модуль управления Laurent (Лоран)

Сообщение Duran » Пт янв 19, 2018 4:42 pm

Программно у меня все идеально выполнялось

пример выключения реле

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

$ipl1=gg('Laurent1.ip');
$result=laurent_command($ipl1, '$KE,REL,1,0', 'Laurent');
setGlobal("Laurent1.rele1_status", "0");
или вот (этот код может можно оптимизировать но нет времени :) ):

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

// реле 3 и 4 для закрытия
//отключаем все
$ipl1=gg('Laurent1.ip');
$result=laurent_command($ipl1, '$KE,REL,1,0', 'Laurent');
$result=laurent_command($ipl1, '$KE,REL,2,0', 'Laurent');
$result=laurent_command($ipl1, '$KE,REL,3,0', 'Laurent');
$result=laurent_command($ipl1, '$KE,REL,4,0', 'Laurent');
setGlobal("Laurent1.rele1_status", "0");
setGlobal("Laurent1.rele2_status", "0");
setGlobal("Laurent1.rele3_status", "0");
setGlobal("Laurent1.rele4_status", "0");
//включаем 3 и 4
$a=40;
$result=laurent_command($ipl1, '$KE,REL,3,1,'.$a, 'Laurent');
$result=laurent_command($ipl1, '$KE,REL,4,1,'.$a, 'Laurent');
//$result=laurent_command($ipl1, '$KE,REL,3,1', 'Laurent');
//$result=laurent_command($ipl1, '$KE,REL,4,1', 'Laurent');
setGlobal("Laurent1.rele3_status", "1");
setGlobal("Laurent1.rele4_status", "1");
setGlobal("Laurent1.shtory_status", "1");
DiminatorDK
Сообщения: 104
Зарегистрирован: Сб фев 20, 2016 12:19 pm
Благодарил (а): 7 раз
Поблагодарили: 2 раза

Re: Модуль управления Laurent (Лоран)

Сообщение DiminatorDK » Пт янв 19, 2018 5:04 pm

У меня немного другой модуль - Jerome. И у меня такое ощущение что что-то идет не так и сессия остается открытой какое-то время. А модуль поддерживается только одно открытое соединение.
Ответить