[Модуль] Sonoff (dev_sonoff)
Модератор: immortal
- nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
- Благодарил (а): 121 раз
- Поблагодарили: 2010 раз
Re: [Модуль] Sonoff (dev_sonoff)
Я пытаюсь)) честно. Оно работает, работает прикольно (в смысле моментально реагирует на всё), но отваливается иногда...я даже по ходу знаю причину, но пока не понял как решить.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
- samolet
- Сообщения: 472
- Зарегистрирован: Чт июн 29, 2017 10:29 am
- Благодарил (а): 46 раз
- Поблагодарили: 45 раз
Re: [Модуль] Sonoff (dev_sonoff)
спасибо что не забываешь, надеюсь скоро все получится
выноси на всеобшее, может вместе решим
выноси на всеобшее, может вместе решим
- nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
- Благодарил (а): 121 раз
- Поблагодарили: 2010 раз
Re: [Модуль] Sonoff (dev_sonoff)
Ну как хотите =D...залил обнову (надеюсь ничего не сломал?).
Чтобы переключить на сокеты - надо зайти в /scripts/cycle_dev_sonoff.php, закомментировать всё что в блоке HTTP POLLING, и раскомментировать всё, что ниже в блоке WSS POLLING. В HTTP POLLING PERIOD (он же для таймаута wss используется) - можете хоть 0 ставить. Тогда цикл с минимальным возможным временем крутиться будет. Но по идее даже если 20-30 сек ставить - вроде сразу всё отрабатывает. Это время просто, которое он ждёт сообщений. Как только сообщение приходит - он отрабатывает его сразу. Может быть задержка только если больше 1 сообщения одновременно привалило...этот момент просто пока не тестил.
А теперь о грустном. Цикл падает примерно каждые минут 5. И я даже знаю почему. В вебсокетах помимо основных сообщений есть служебные фрэймы. Одни из таких фрэймов - ping-pong. Т.е. в момент когда от сервера прилетает фрэйм ping я почти сразу ему должен ответить pong, иначе коннект разрывается. Через socket->read ping не читается, т.е. для служебных фрэймов свой синтаксис видимо. Вроде как некоторые обрывки переменных в классе sonoffws имеются (остались от библиотеки, которую я брал за основу, вот вроде она https://github.com/arthurkushman/php-wss). И скорее всего эта функция там должна быть где то закопана по-умолчанию, и должна работать сама по себе, даже без инициализации пользователем (но не уверен)...возможно я что-то нужное затёр, возможно этого не было там реализовано...яхз, но я пока не пойму как считать этот грёбанный пинг, и соответственно ответить pong.
Чтобы переключить на сокеты - надо зайти в /scripts/cycle_dev_sonoff.php, закомментировать всё что в блоке HTTP POLLING, и раскомментировать всё, что ниже в блоке WSS POLLING. В HTTP POLLING PERIOD (он же для таймаута wss используется) - можете хоть 0 ставить. Тогда цикл с минимальным возможным временем крутиться будет. Но по идее даже если 20-30 сек ставить - вроде сразу всё отрабатывает. Это время просто, которое он ждёт сообщений. Как только сообщение приходит - он отрабатывает его сразу. Может быть задержка только если больше 1 сообщения одновременно привалило...этот момент просто пока не тестил.
А теперь о грустном. Цикл падает примерно каждые минут 5. И я даже знаю почему. В вебсокетах помимо основных сообщений есть служебные фрэймы. Одни из таких фрэймов - ping-pong. Т.е. в момент когда от сервера прилетает фрэйм ping я почти сразу ему должен ответить pong, иначе коннект разрывается. Через socket->read ping не читается, т.е. для служебных фрэймов свой синтаксис видимо. Вроде как некоторые обрывки переменных в классе sonoffws имеются (остались от библиотеки, которую я брал за основу, вот вроде она https://github.com/arthurkushman/php-wss). И скорее всего эта функция там должна быть где то закопана по-умолчанию, и должна работать сама по себе, даже без инициализации пользователем (но не уверен)...возможно я что-то нужное затёр, возможно этого не было там реализовано...яхз, но я пока не пойму как считать этот грёбанный пинг, и соответственно ответить pong.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
- samolet
- Сообщения: 472
- Зарегистрирован: Чт июн 29, 2017 10:29 am
- Благодарил (а): 46 раз
- Поблагодарили: 45 раз
Re: [Модуль] Sonoff (dev_sonoff)
Никита, исправь пожалуйста а то после обновы индикатор в gsm потерялся. Тут выше код правильный он в файле dev_sonoff_devices_search.incsamolet писал(а): ↑Чт мар 21, 2019 10:06 pmО как еще получилось, удалил лишнюю строчку, тоже работает
//paging($res, 100, $out); // search result paging
$total=count($res);
for($i=0;$i<$total;$i++) {
foreach($res_online as $id_online){
if($res[$i]['ID']==$id_online['DEVICE_ID'] && $id_online['VALUE']==1 && $id_online['TITLE']=='online') $res[$i]['ONLINE']='1';
if($res[$i]['ID']==$id_online['DEVICE_ID'] && ($id_online['TITLE']=='rssi' || $id_online['TITLE']=='gsm_rssi')) {
if ($id_online['VALUE']>= -50) {$res[$i]['RSSI_LVL']=100; $res[$i]['RSSI_COLOR']='#5cb85c';}
elseif ($id_online['VALUE']>= -65) {$res[$i]['RSSI_LVL']=77; $res[$i]['RSSI_COLOR']='#f0ad4e';}
elseif ($id_online['VALUE']>= -80) {$res[$i]['RSSI_LVL']=52; $res[$i]['RSSI_COLOR']='#f0ad4e';}
elseif ($id_online['VALUE']>= -95) {$res[$i]['RSSI_LVL']=26; $res[$i]['RSSI_COLOR']='#d9534f';}
else {$res[$i]['RSSI_LVL']=0; $res[$i]['RSSI_COLOR']='#d9534f';}
}
}
$res[$i]['IMG']='/img/sonoff/'.$res[$i]['UIID'].'.jpg';
цикл пока не упал ни разу уже 30 минут ни чего не падает
заметил следующее
после вкл выкл с телефона статус в мажорик идет примерно 6-10 сек. когда как, а если с мажорика вкл. выкл. то статус в телефоне виден сразу, возможно это как то связано с нагрузкой на прогу мажордом.
Re: [Модуль] Sonoff (dev_sonoff)
Всем доброго времени суток!
Переключил на сокеты и отвалилось управление на 4-канальном сонофе.
Одноканальный РФ работает как надо. Посмотрим до утра как он себя вести будет.
сейчас утро - прошло 8,5 часов примерно)) модуль с рф пока еще не отвалился
Переключил на сокеты и отвалилось управление на 4-канальном сонофе.
Одноканальный РФ работает как надо. Посмотрим до утра как он себя вести будет.
сейчас утро - прошло 8,5 часов примерно)) модуль с рф пока еще не отвалился
- nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
- Благодарил (а): 121 раз
- Поблагодарили: 2010 раз
Re: [Модуль] Sonoff (dev_sonoff)
Странно, вроде не трогал этот файл...может на компе неактуальная версия была...хз...ок, поправлю.
А ты на сокеты то перевёл цикл? Закоментил в цикле то что сверху, раскоментил то что снизу, как я писал?samolet писал(а): ↑Сб апр 13, 2019 10:32 pmцикл пока не упал ни разу уже 30 минут ни чего не падает
заметил следующее
после вкл выкл с телефона статус в мажорик идет примерно 6-10 сек. когда как, а если с мажорика вкл. выкл. то статус в телефоне виден сразу, возможно это как то связано с нагрузкой на прогу мажордом.
У меня в МД статус почти сразу прилетает 1-1,5 сек задержка максимум.
А вы уверены что цикл не падает? В логе ошибками не сыплет? Может он падает, потом восстанавливается? Так то странно, потому что когда я из консоли только цикл запускаю - стабильно валится в момет ping-а. Спс за инфу с 4х канальным реле. Вполне возможно, что не всё учёл, ещё пересмотрю код.
А по поводу 4х канального - в управлении 100% ничего не трогал. Отвалилось именно управление? Или обратная связь от реле?
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Re: [Модуль] Sonoff (dev_sonoff)
цикл не падал - в логах за последние 2-3 часа он точно работал. правда до перезгрузки компа. после этого запустить цикл вообще не удалось, даже при переходе на http обратно. В 4-х канальном исчезли параметры switch - потому и не работало. И в HTTPS API URL пропали буквы "eu"
, а в WSS API URL - пустое поле. Восстановился из бэкапа - посмотрим что будет дальше.
, а в WSS API URL - пустое поле. Восстановился из бэкапа - посмотрим что будет дальше.
- samolet
- Сообщения: 472
- Зарегистрирован: Чт июн 29, 2017 10:29 am
- Благодарил (а): 46 раз
- Поблагодарили: 45 раз
Re: [Модуль] Sonoff (dev_sonoff)
Вот код, цикл не отвалился все работает, где надо раскоментил, и закоментилnick7zmail писал(а): ↑Вс апр 14, 2019 11:03 amСтранно, вроде не трогал этот файл...может на компе неактуальная версия была...хз...ок, поправлю.А ты на сокеты то перевёл цикл? Закоментил в цикле то что сверху, раскоментил то что снизу, как я писал?samolet писал(а): ↑Сб апр 13, 2019 10:32 pmцикл пока не упал ни разу уже 30 минут ни чего не падает
заметил следующее
после вкл выкл с телефона статус в мажорик идет примерно 6-10 сек. когда как, а если с мажорика вкл. выкл. то статус в телефоне виден сразу, возможно это как то связано с нагрузкой на прогу мажордом.
У меня в МД статус почти сразу прилетает 1-1,5 сек задержка максимум.
иногда ложные срабатывания на 4 канальном реле, не критично, но как факт, все остальное вроде хорошо
Код: Выделить всё
<?php
chdir(dirname(__FILE__) . '/../');
include_once("./config.php");
include_once("./lib/loader.php");
include_once("./lib/threads.php");
include_once("./lib/websockets/sonoffws.class.php");
set_time_limit(0);
// connecting to database
$db = new mysql(DB_HOST, '', DB_USER, DB_PASSWORD, DB_NAME);
include_once("./load_settings.php");
include_once(DIR_MODULES . "control_modules/control_modules.class.php");
$ctl = new control_modules();
include_once(DIR_MODULES . 'dev_sonoff/dev_sonoff.class.php');
$dev_sonoff_module = new dev_sonoff();
$dev_sonoff_module->getConfig();
$tmp = SQLSelectOne("SELECT ID FROM dev_sonoff_devices LIMIT 1");
if (!$tmp['ID'])
exit; // no devices added -- no need to run this cycle
echo date("H:i:s") . " running " . basename(__FILE__) . PHP_EOL;
$latest_check=0;
$checkEvery=$dev_sonoff_module->config['POLL_PERIOD'];
//websockets
$wssurl=$dev_sonoff_module->getWssUrl();
$sonoffws = new SonoffWS($wssurl, $config);
while (1)
{
//====================================HTTP POLLING===================================
/* setGlobal((str_replace('.php', '', basename(__FILE__))) . 'Run', time(), 1);
//http polling devices
if ((time()-$latest_check)>$checkEvery) {
$latest_check=time();
echo date('Y-m-d H:i:s').' Polling devices...';
$dev_sonoff_module->processCycle();
}*/
//====================================END HTTP POLLING===============================
//====================================WSS POLLING====================================
setGlobal((str_replace('.php', '', basename(__FILE__))) . 'Run', time(), 1);
echo date('Y-m-d H:i:s').' Polling devices...';
if($sonoffws->isConnected()) {
//выполняем если подключено
$read = array($sonoffws->getSocket());
$write = NULL;
$except = NULL;
if (false === ($num_changed_streams = stream_select($read, $write, $except, $checkEvery))) {
// Обработка ошибок
} elseif ($num_changed_streams > 0) {
// Как минимум на одном из потоков произошло что-то интересное
$recv=$sonoffws->receive();
if($dev_sonoff_module->config['DEBUG']) {
debmes('[wss] +++ '.$recv, 'cycle_dev_sonoff_debug');
}
$dev_sonoff_module->wssRecv($recv, $sonoffws);
}
} else {
//переподключаемся
$sonoffws = new SonoffWS($wssurl, $config);
$sonoffws->socketUrl=$wssurl;
$sonoffws->connect();
if($sonoffws->isConnected()) {
$dev_sonoff_module->wssInit($sonoffws);
}
}
//====================================END WSS POLLING================================
if (file_exists('./reboot') || IsSet($_GET['onetime']))
{
$db->Disconnect();
exit;
}
sleep(1);
}