[Модуль] Sonoff (dev_sonoff)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Аватара пользователя
samolet
Сообщения: 472
Зарегистрирован: Чт июн 29, 2017 10:29 am
Благодарил (а): 46 раз
Поблагодарили: 45 раз

Re: [Модуль] Sonoff (dev_sonoff)

Сообщение samolet » Ср апр 10, 2019 5:43 pm

что то поздновато выпустили, нам такое уже не надо
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: [Модуль] Sonoff (dev_sonoff)

Сообщение nick7zmail » Пт апр 12, 2019 9:35 pm

samolet писал(а):
Пт апр 05, 2019 10:11 pm
Никита привет, ждем обновы, обещал вебсокеты дописать
Я пытаюсь)) честно. Оно работает, работает прикольно (в смысле моментально реагирует на всё), но отваливается иногда...я даже по ходу знаю причину, но пока не понял как решить.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
samolet
Сообщения: 472
Зарегистрирован: Чт июн 29, 2017 10:29 am
Благодарил (а): 46 раз
Поблагодарили: 45 раз

Re: [Модуль] Sonoff (dev_sonoff)

Сообщение samolet » Сб апр 13, 2019 12:13 am

спасибо что не забываешь, надеюсь скоро все получится
выноси на всеобшее, может вместе решим
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: [Модуль] Sonoff (dev_sonoff)

Сообщение nick7zmail » Сб апр 13, 2019 11:45 am

Ну как хотите =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.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
samolet
Сообщения: 472
Зарегистрирован: Чт июн 29, 2017 10:29 am
Благодарил (а): 46 раз
Поблагодарили: 45 раз

Re: [Модуль] Sonoff (dev_sonoff)

Сообщение samolet » Сб апр 13, 2019 9:52 pm

потестим, почти час полет норм.
Последний раз редактировалось samolet Сб апр 13, 2019 11:13 pm, всего редактировалось 2 раза.
Аватара пользователя
samolet
Сообщения: 472
Зарегистрирован: Чт июн 29, 2017 10:29 am
Благодарил (а): 46 раз
Поблагодарили: 45 раз

Re: [Модуль] Sonoff (dev_sonoff)

Сообщение samolet » Сб апр 13, 2019 10:32 pm

samolet писал(а):
Чт мар 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';
Никита, исправь пожалуйста а то после обновы индикатор в gsm потерялся. Тут выше код правильный он в файле dev_sonoff_devices_search.inc


цикл пока не упал ни разу уже 30 минут ни чего не падает

заметил следующее

после вкл выкл с телефона статус в мажорик идет примерно 6-10 сек. когда как, а если с мажорика вкл. выкл. то статус в телефоне виден сразу, возможно это как то связано с нагрузкой на прогу мажордом.
arsrem
Сообщения: 2
Зарегистрирован: Сб мар 16, 2019 9:02 am
Благодарил (а): 0
Поблагодарили: 0

Re: [Модуль] Sonoff (dev_sonoff)

Сообщение arsrem » Вс апр 14, 2019 1:47 am

Всем доброго времени суток!
Переключил на сокеты и отвалилось управление на 4-канальном сонофе.
Одноканальный РФ работает как надо. Посмотрим до утра как он себя вести будет.


сейчас утро - прошло 8,5 часов примерно)) модуль с рф пока еще не отвалился
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: [Модуль] Sonoff (dev_sonoff)

Сообщение nick7zmail » Вс апр 14, 2019 11:03 am

samolet писал(а):
Сб апр 13, 2019 10:32 pm
Никита, исправь пожалуйста а то после обновы индикатор в gsm потерялся. Тут выше код правильный он в файле dev_sonoff_devices_search.inc
Странно, вроде не трогал этот файл...может на компе неактуальная версия была...хз...ок, поправлю.
samolet писал(а):
Сб апр 13, 2019 10:32 pm
цикл пока не упал ни разу уже 30 минут ни чего не падает

заметил следующее

после вкл выкл с телефона статус в мажорик идет примерно 6-10 сек. когда как, а если с мажорика вкл. выкл. то статус в телефоне виден сразу, возможно это как то связано с нагрузкой на прогу мажордом.
А ты на сокеты то перевёл цикл? Закоментил в цикле то что сверху, раскоментил то что снизу, как я писал?
У меня в МД статус почти сразу прилетает 1-1,5 сек задержка максимум.
arsrem писал(а):
Вс апр 14, 2019 1:47 am
Всем доброго времени суток!
Переключил на сокеты и отвалилось управление на 4-канальном сонофе.
Одноканальный РФ работает как надо. Посмотрим до утра как он себя вести будет.


сейчас утро - прошло 8,5 часов примерно)) модуль с рф пока еще не отвалился
А вы уверены что цикл не падает? В логе ошибками не сыплет? Может он падает, потом восстанавливается? Так то странно, потому что когда я из консоли только цикл запускаю - стабильно валится в момет ping-а. Спс за инфу с 4х канальным реле. Вполне возможно, что не всё учёл, ещё пересмотрю код.

А по поводу 4х канального - в управлении 100% ничего не трогал. Отвалилось именно управление? Или обратная связь от реле?
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
arsrem
Сообщения: 2
Зарегистрирован: Сб мар 16, 2019 9:02 am
Благодарил (а): 0
Поблагодарили: 0

Re: [Модуль] Sonoff (dev_sonoff)

Сообщение arsrem » Вс апр 14, 2019 12:33 pm

цикл не падал - в логах за последние 2-3 часа он точно работал. правда до перезгрузки компа. после этого запустить цикл вообще не удалось, даже при переходе на http обратно. В 4-х канальном исчезли параметры switch - потому и не работало. И в HTTPS API URL пропали буквы "eu"
, а в WSS API URL - пустое поле. Восстановился из бэкапа - посмотрим что будет дальше.
Аватара пользователя
samolet
Сообщения: 472
Зарегистрирован: Чт июн 29, 2017 10:29 am
Благодарил (а): 46 раз
Поблагодарили: 45 раз

Re: [Модуль] Sonoff (dev_sonoff)

Сообщение samolet » Вс апр 14, 2019 7:01 pm

nick7zmail писал(а):
Вс апр 14, 2019 11:03 am
samolet писал(а):
Сб апр 13, 2019 10:32 pm
Никита, исправь пожалуйста а то после обновы индикатор в gsm потерялся. Тут выше код правильный он в файле dev_sonoff_devices_search.inc
Странно, вроде не трогал этот файл...может на компе неактуальная версия была...хз...ок, поправлю.
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);
}
Ответить