Страница 1 из 3

как правильно опрашивать реле и прочее

Добавлено: Пт авг 03, 2018 12:23 pm
sega6549
всем привет, подскажите как правильнее сделать, есть несколько устройств допустим 5, опрашиваются по hhtp get, необходимо их опрашивать каждые 10 секунд или еще лучше чаще, я создал 5 методов которые просто опрашивают, запускаются они через сценарий который циклично запускается каждые 10 секунд примерно так

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

clearTimeout("myscript1_timer");
callMethod('prihojaya.get_value');
callMethod('zal.get_value');
callMethod('vanna.get_value');
callMethod('kyhnya.get_value');
callMethod('spalnya.get_value');
setTimeOut("myscript1_timer","runScript('status_reley');",5); 
проблема в том что каждый из этих запросов выполняется достаточно долго, если взять и просто через браузер запросить состояние то проходит примерно секунды полторы прежде чем придет ответ, в итоге имеем куча ошибок в админке, как лучше поступить, сначала я хотел все в одном методе опрашивать что бы запросы происходили по очереди, но там необходимо еще и парсить ответ так как приходит еще и мусор всякий вместе с ответом
ps я бы может и не парился и сделал бы опрос реже например раз в минуту, но если мне нужно будет еще больше запросов делать, например 40 запросов на всякие датчики, релюхи и прочее, как тут быть?

Re: как правильно опрашивать реле и прочее

Добавлено: Пт авг 03, 2018 1:01 pm
skysilver
Надо менять сами устройства. Строить систему на принципе опросов железок со стороны сервера - это гиблое и тупиковое занятие. Тем более с большой частотой. Устройства сами должны слать на сервер события об изменении своих состояний.

Re: как правильно опрашивать реле и прочее

Добавлено: Пт авг 03, 2018 1:03 pm
Chainik
Еще вариант, кроме "тут всю систему надо менять", такой: опрос каждого устройства запускать со своим индивидуальным setTimeOut. Тогда он будет запускаться каждый в своем индивидуальном процессе.

Re: как правильно опрашивать реле и прочее

Добавлено: Пт авг 03, 2018 1:20 pm
sega6549
Chainik писал(а):
Пт авг 03, 2018 1:03 pm
Еще вариант, кроме "тут всю систему надо менять", такой: опрос каждого устройства запускать со своим индивидуальным setTimeOut. Тогда он будет запускаться каждый в своем индивидуальном процессе.
а если совпадут таймеры?

Re: как правильно опрашивать реле и прочее

Добавлено: Пт авг 03, 2018 1:21 pm
sega6549
"тут всю систему надо менять" я не против если подскажете лучший вариант, естественно не меняя железо)

Re: как правильно опрашивать реле и прочее

Добавлено: Пт авг 03, 2018 1:39 pm
skysilver
sega6549 писал(а):
Пт авг 03, 2018 1:21 pm
"тут всю систему надо менять" я не против если подскажете лучший вариант, естественно не меняя железо)
Что за железо используется?

Re: как правильно опрашивать реле и прочее

Добавлено: Пт авг 03, 2018 2:22 pm
sega6549
про железо не скажу, тут стоит умный дом от компании 1m, у них все модули и датчики можно опросить только http get, сами они ни чего не присылают но управляются через тот http get

Re: как правильно опрашивать реле и прочее

Добавлено: Пт авг 03, 2018 3:04 pm
Chainik
sega6549 писал(а):
Пт авг 03, 2018 1:20 pm
Chainik писал(а):
Пт авг 03, 2018 1:03 pm
Еще вариант, кроме "тут всю систему надо менять", такой: опрос каждого устройства запускать со своим индивидуальным setTimeOut. Тогда он будет запускаться каждый в своем индивидуальном процессе.
а если совпадут таймеры?
Если название таймеров совпадет, то более свежий таймер "затрет" более "старый". И течение таймера начнется с начала.
Однако можно сделать названия таймеров уникальными, добавив к наименованию таймера ".time()". Ну т.е. TimerName.time()

Re: как правильно опрашивать реле и прочее

Добавлено: Пт авг 03, 2018 3:06 pm
sega6549
Chainik писал(а):
Пт авг 03, 2018 3:04 pm
sega6549 писал(а):
Пт авг 03, 2018 1:20 pm
Chainik писал(а):
Пт авг 03, 2018 1:03 pm
Еще вариант, кроме "тут всю систему надо менять", такой: опрос каждого устройства запускать со своим индивидуальным setTimeOut. Тогда он будет запускаться каждый в своем индивидуальном процессе.
а если совпадут таймеры?
Если название таймеров совпадет, то более свежий таймер "затрет" более "старый". И течение таймера начнется с начала.
Однако можно сделать названия таймеров уникальными, добавив к наименованию таймера ".time()". Ну т.е. TimerName.time()
я так и делаю, каждый таймер уникален, я говорил про время, допустим у всех таймеров стоит 10 секунд, не будут ли они воевать между собой и не получится так что выполнился один таймер а второй нет

Re: как правильно опрашивать реле и прочее

Добавлено: Пт авг 03, 2018 3:30 pm
Chainik
Я, конечно, не специалист, но представляется, что все зависит от производительности системы, т.е. способности "переварить" осуществление большого количества операций в ограниченное время.
Ну можно запускать таймеры в разбежкой в 1 секунду.
Т.е. выставить для таймера № 1 задержку в 1 сек., для таймера № 2 - 2 сек. и т.д. Они же ведь у вас в одном скрипте будут запускаться. Только тогда общее время перезапуска скрипта должно быть больше максимальной задержки в таймерах.