Main

<<< Сценарии

Подключаем датчик открытия въездных ворот

Ниже описан сценарий с использованием датчиков типа типа «сухой контакт» (нормально замкнутый) для информирования об открытии , либо закрытии въездных ворот (ворот гаража, входной двери и т.д.) и запуска различных сценариев "умного дома".
В данном случае, предполагается наличие подключенного контроллера Arduino по данной схеме Схема контроллера и датчика гаражной (любой) двери, ворот.

1. Задаём класс объектов keySensors со следующими свойствами класса:

2. Задаем методы данного класса:

3. Пишем код для данного метода

$this->setProperty('status',$params['status']);
$this->setProperty('updatedTimestamp',time());

4. Добавляем объект для данного класса, например sensorGarage

В результате можно уже обращаться с такой ссылкой для установки

статус (закрыт)
http://АДРЕС_СЕРВЕРА/objects/?object=sensorGarage&op=m&m=statusChanged&status=1

статус открыт
http://АДРЕС_СЕРВЕРА/objects/?object=sensorGarage&op=m&m=statusChanged&status=0

В результате можно настроить код метода именно для этого сенсора:

if ((int)$params['status']==0) {
 say("Внимание! Открывается въезд в  гараж.",5);
} else {
 say("Гараж закрыт.",5);
}

if ($params['status']) {
 $this->setProperty('statusText','закрыт');
} else {
 $this->setProperty('statusText','открыт');
}

Обновление (12.03.2012)

Через некоторое время решил дополнить этот сценарий одной полезной функцией -- напоминанием о том, что гараж открыт. Для этого создадим скрипт напоминания под названием reminderGarage с таким вот кодом:

say('Напоминаю, что открыт гараж',5);
SetTimeOut("reminderGarageTimer","runScript('reminderGarage');", 15*60);

По сути, этот скрипт говорит, что гараж открыт и перепланирует запуск самого себя через 15 минут, созданием через функцию SetTimeOut таймера под названием reminderGarageTimer.

Осталось только немного модифицировать вышеприведённый метод сенсора (обработчик события от датчика) для первого запуска скрипта и очистки таймера, когда гараж закрыт:

if ((int)$params['status']==0) {
 SetTimeOut("reminderGarageTimer","runScript('reminderGarage');", 15*60);
 $this->setProperty('statusText','открыт');
 say("Внимание! Открывается въезд в  гараж.",5);
} else {
 ClearTimeOut("reminderGarageTimer");
 $this->setProperty('statusText','закрыт');
 say("Гараж закрыт.",5);
}

В коде добавилась функция SetTimeOut для планирования первого вызова скрипта напоминания через 15 минут и функция ClearTimeOut, которая очищает таймер при закрытии гаража, чтобы не было лишних напоминаний.

Так же я сделал в меню управления отдельную кнопку, на которую повесил такой код:

 ClearTimeOut("reminderGarageTimer");

Этот код просто "прибивает" таймер -- функция полезная на тот случай, если я открыл гараж и он у меня должен быть открыт длительное время в силу каких-то обстоятельств, при этом мне совсем не хочется слушать напоминание об этом каждые 15 минут.

MajorDomo

Project

Partners

edit SideBar

 

Blix theme adapted by David Gilbert, powered by PmWiki