Помогите новичку!!!!

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
gis
Сообщения: 42
Зарегистрирован: 17 дек 2018, 15:26
Откуда: Калужская область

Re: Помогите новичку!!!!

Сообщение gis » 10 янв 2019, 22:44

Спасибо за информацию. Очень жаль, что так, можно было бы и галочку там прикрутить, если кто-то считает эту информацию избыточной. А так приходится забивать сеть запросами раз в секунду. Я не представляю, пока, как на сервере определить, что порт уже выключился, если ему была послана, например, такая команда - 8:1;p3600;8:0. Запускать на сервере таймер? А если такая команда может быть послана несколькими входами (например, разными датчиками движения)? Запускать несколько таймеров и потом их сравнивать? Все было бы намного проще, если бы порт при изменении своего состояния мог отправлять эту информацию на сервер.

Ruslan
Сообщения: 2184
Зарегистрирован: 06 янв 2014, 20:44

Re: Помогите новичку!!!!

Сообщение Ruslan » 10 янв 2019, 23:23

Опрашивать выход (где расположено, например, реле) раз в секунду -- не очень удачная идея. Мега, конечно, не умрет и сеть не развалится, но есть способы получше.
Нет ничего проще запустить таймер на сервере. В Мажордомо, например, это делается в одну строчку кода (https://ab-log.ru/forum/viewtopic.php?f ... 440#p28440).
В вашем примере все будет укладываться в 2 строчки кода:

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

file_get_contents("http://192.168.0.14/sec/?cmd=8:1");
setTimeOut('myTimer_1','file_get_contents("http://192.168.0.14/sec/?cmd=8:0");',60*60);
Если таймеры запускаются несколькими датчиками движения (выключателями, герконами и т.д.), то ничего сравнивать не надо. Предполагаю, что если текущий таймер не завершил свой отсчет, а в это время другой датчик движения запустил новый таймер "на эту же тему", то текущий таймер надо "ликвидировать". В Мажордомо при запуске одноименного таймера текущий таймер (с тем же именем) "ликвидируется". Т.е. смело можете писать тот же самый код:

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

setTimeOut('myTimer_1','file_get_contents("http://192.168.0.14/sec/?cmd=8:0");',60*60);
В крайнем случае, можно в коде принудительно прервать отсчет таймера:

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

clearTimeOut('myTimer_1');
Так что никаких сложностей в описанной вами ситуации не вижу.

Ответить