Нет, кнопки которые физические работают идеально. И уже много лет. Кнопки надо притягивать к питанию и желательно иметь опторазвязку.
Я про тумблер в MajorDoMo. Или я настолько туп что не смог сделать тумблер или хз. Поэтому сделал кнопки, но и с ними какой-то трэш в плане реакции. Пробую прямой линк (тест) может включить, или просто тишина, пару раз обращусь - включается. Полная анархия.
Модуль управления Laurent (Лоран)
Модератор: immortal
-
- Сообщения: 104
- Зарегистрирован: Сб фев 20, 2016 12:19 pm
- Благодарил (а): 7 раз
- Поблагодарили: 2 раза
-
- Сообщения: 104
- Зарегистрирован: Сб фев 20, 2016 12:19 pm
- Благодарил (а): 7 раз
- Поблагодарили: 2 раза
Re: Модуль управления Laurent (Лоран)
Я нашел модуль 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? Или я ошибаюсь?
<?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? Или я ошибаюсь?
-
- Сообщения: 3006
- Зарегистрирован: Чт авг 21, 2014 8:28 am
- Откуда: Киров, Россия
- Благодарил (а): 400 раз
- Поблагодарили: 1753 раза
- Контактная информация:
Re: Модуль управления Laurent (Лоран)
Ошибаешься. Это размер читаемых данных в байтах. Порт указан выше в строке $result = socket_connect($socket, $host, 2424);DiminatorDK писал(а):если я правильно понимаю происходит обращение к модулю по порту 2048? Или я ошибаюсь?
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Мой CONNECT | Блоги | Telegram
-
- Сообщения: 104
- Зарегистрирован: Сб фев 20, 2016 12:19 pm
- Благодарил (а): 7 раз
- Поблагодарили: 2 раза
Re: Модуль управления Laurent (Лоран)
А можно как-то посмотреть прогресс выполнение класса? А то как-то в тишине все выполняется, непонятно что и как.
-
- Сообщения: 29
- Зарегистрирован: Чт июн 21, 2012 12:20 pm
- Откуда: Архангельск
- Благодарил (а): 1 раз
- Поблагодарили: 0
Re: Модуль управления Laurent (Лоран)
Программно у меня все идеально выполнялось
пример выключения реле
или вот (этот код может можно оптимизировать но нет времени ):
пример выключения реле
Код: Выделить всё
$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");
-
- Сообщения: 104
- Зарегистрирован: Сб фев 20, 2016 12:19 pm
- Благодарил (а): 7 раз
- Поблагодарили: 2 раза
Re: Модуль управления Laurent (Лоран)
У меня немного другой модуль - Jerome. И у меня такое ощущение что что-то идет не так и сессия остается открытой какое-то время. А модуль поддерживается только одно открытое соединение.