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

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

sega6549
Сообщения: 530
Зарегистрирован: Чт авг 20, 2015 11:32 am
Откуда: Ярославль
Благодарил (а): 61 раз
Поблагодарили: 75 раз
Контактная информация:

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

Сообщение sega6549 » Пт авг 03, 2018 12:23 pm

всем привет, подскажите как правильнее сделать, есть несколько устройств допустим 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 запросов на всякие датчики, релюхи и прочее, как тут быть?
Тут можно задать вопрос по MajorDoMo VK
Канал по MajorDoMo youtube
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

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

Сообщение skysilver » Пт авг 03, 2018 1:01 pm

Надо менять сами устройства. Строить систему на принципе опросов железок со стороны сервера - это гиблое и тупиковое занятие. Тем более с большой частотой. Устройства сами должны слать на сервер события об изменении своих состояний.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

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

Сообщение Chainik » Пт авг 03, 2018 1:03 pm

Еще вариант, кроме "тут всю систему надо менять", такой: опрос каждого устройства запускать со своим индивидуальным setTimeOut. Тогда он будет запускаться каждый в своем индивидуальном процессе.
sega6549
Сообщения: 530
Зарегистрирован: Чт авг 20, 2015 11:32 am
Откуда: Ярославль
Благодарил (а): 61 раз
Поблагодарили: 75 раз
Контактная информация:

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

Сообщение sega6549 » Пт авг 03, 2018 1:20 pm

Chainik писал(а):
Пт авг 03, 2018 1:03 pm
Еще вариант, кроме "тут всю систему надо менять", такой: опрос каждого устройства запускать со своим индивидуальным setTimeOut. Тогда он будет запускаться каждый в своем индивидуальном процессе.
а если совпадут таймеры?
Тут можно задать вопрос по MajorDoMo VK
Канал по MajorDoMo youtube
sega6549
Сообщения: 530
Зарегистрирован: Чт авг 20, 2015 11:32 am
Откуда: Ярославль
Благодарил (а): 61 раз
Поблагодарили: 75 раз
Контактная информация:

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

Сообщение sega6549 » Пт авг 03, 2018 1:21 pm

"тут всю систему надо менять" я не против если подскажете лучший вариант, естественно не меняя железо)
Тут можно задать вопрос по MajorDoMo VK
Канал по MajorDoMo youtube
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

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

Сообщение skysilver » Пт авг 03, 2018 1:39 pm

sega6549 писал(а):
Пт авг 03, 2018 1:21 pm
"тут всю систему надо менять" я не против если подскажете лучший вариант, естественно не меняя железо)
Что за железо используется?
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
sega6549
Сообщения: 530
Зарегистрирован: Чт авг 20, 2015 11:32 am
Откуда: Ярославль
Благодарил (а): 61 раз
Поблагодарили: 75 раз
Контактная информация:

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

Сообщение sega6549 » Пт авг 03, 2018 2:22 pm

про железо не скажу, тут стоит умный дом от компании 1m, у них все модули и датчики можно опросить только http get, сами они ни чего не присылают но управляются через тот http get
Тут можно задать вопрос по MajorDoMo VK
Канал по MajorDoMo youtube
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

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

Сообщение Chainik » Пт авг 03, 2018 3:04 pm

sega6549 писал(а):
Пт авг 03, 2018 1:20 pm
Chainik писал(а):
Пт авг 03, 2018 1:03 pm
Еще вариант, кроме "тут всю систему надо менять", такой: опрос каждого устройства запускать со своим индивидуальным setTimeOut. Тогда он будет запускаться каждый в своем индивидуальном процессе.
а если совпадут таймеры?
Если название таймеров совпадет, то более свежий таймер "затрет" более "старый". И течение таймера начнется с начала.
Однако можно сделать названия таймеров уникальными, добавив к наименованию таймера ".time()". Ну т.е. TimerName.time()
sega6549
Сообщения: 530
Зарегистрирован: Чт авг 20, 2015 11:32 am
Откуда: Ярославль
Благодарил (а): 61 раз
Поблагодарили: 75 раз
Контактная информация:

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

Сообщение sega6549 » Пт авг 03, 2018 3:06 pm

Chainik писал(а):
Пт авг 03, 2018 3:04 pm
sega6549 писал(а):
Пт авг 03, 2018 1:20 pm
Chainik писал(а):
Пт авг 03, 2018 1:03 pm
Еще вариант, кроме "тут всю систему надо менять", такой: опрос каждого устройства запускать со своим индивидуальным setTimeOut. Тогда он будет запускаться каждый в своем индивидуальном процессе.
а если совпадут таймеры?
Если название таймеров совпадет, то более свежий таймер "затрет" более "старый". И течение таймера начнется с начала.
Однако можно сделать названия таймеров уникальными, добавив к наименованию таймера ".time()". Ну т.е. TimerName.time()
я так и делаю, каждый таймер уникален, я говорил про время, допустим у всех таймеров стоит 10 секунд, не будут ли они воевать между собой и не получится так что выполнился один таймер а второй нет
Тут можно задать вопрос по MajorDoMo VK
Канал по MajorDoMo youtube
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

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

Сообщение Chainik » Пт авг 03, 2018 3:30 pm

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