Страница 1 из 1
Вывод значения от датчика при обнаружении движения?!
Добавлено: Вс фев 10, 2019 9:49 pm
Sandr
Прошу помочь с составлением алгоритма взаимодействия:
Есть "датчик А" MySensors присылающий в систему значение "SensorА.value"
Есть "датчик движения Б"
Задача - В случае если значение от Датчика А опустилось ниже порогового значения
Вывести голосовое сообщение при обнаружении движения от датчика Б
Дополнительные условия
- не повторять голосовое сообщение чаще чем раз в полчаса
- не произносить сообщение в ночное время
Re: Вывод значения от датчика при обнаружении движения?!
Добавлено: Вс фев 10, 2019 10:20 pm
Chainik
Sandr писал(а): ↑Вс фев 10, 2019 9:49 pm
Прошу помочь с составлением алгоритма взаимодействия:
...
Можно попробовать так:
Код: Выделить всё
//Скрипт запускается при срабатывании датчика движения
$LimitValue = 50; //Пороговое значение
If (gg('SensorА.value') < $LimitValue && gg('SensorА.Silence') <> "1" && timeBetween('06:00', '22:59')) {
say("Шеф, все пропало! Гипс снимают, клиент уезжает...");
sg("SensorА.Silence", 1); //Пока свойство SensorА.Silence будет = 1, сообщение произноситься не будет
setTimeOut('myTimer_Silence','sg("SensorА.Silence", 0);',60*30); //через полчаса свойству SensorА.Silence будет присвоено значение = 0
}
Re: Вывод значения от датчика при обнаружении движения?!
Добавлено: Пн фев 11, 2019 8:25 am
Sandr
Chainik писал(а): ↑Вс фев 10, 2019 10:20 pm
Можно попробовать так:
Код: Выделить всё
//Скрипт запускается при срабатывании датчика движения
$LimitValue = 50; //Пороговое значение
If (gg('SensorА.value') < $LimitValue && gg('SensorА.Silence') <> "1" && timeBetween(06:00, 22:59)) {
say("Шеф, все пропало! Гипс снимают, клиент уезжает...");
sg("SensorА.Silence", 1); //Пока свойство SensorА.Silence будет = 1, сообщение произноситься не будет
setTimeOut('myTimer_Silence','sg("SensorА.Silence", 0);',60*30); //через полчаса свойству SensorА.Silence будет присвоено значение = 0
}
небольшая ошибка в коде, время надо указывать в кавычках:
В остальном спасибо.
Re: Вывод значения от датчика при обнаружении движения?!
Добавлено: Пн фев 11, 2019 8:38 am
Chainik
Sandr писал(а): ↑Пн фев 11, 2019 8:25 am
...
небольшая ошибка в коде, время надо указывать в кавычках:
...
Спасибо, поправлю в исходном коде, чтобы остался правильный вариант "для будущих поколений".
Re: Вывод значения от датчика при обнаружении движения?!
Добавлено: Пн фев 11, 2019 8:44 am
Sandr
Chainik писал(а): ↑Пн фев 11, 2019 8:38 am
Sandr писал(а): ↑Пн фев 11, 2019 8:25 am
...
небольшая ошибка в коде, время надо указывать в кавычках:
...
Спасибо, поправлю в исходном коде, чтобы остался правильный вариант "для будущих поколений".
Еще вопрос - Как запустить этот скрипт при срабатывании конкретного датчика движения?
В системе, по дефолту, в классе датчиков движения
На событие висит обработчик
Код: Выделить всё
require(DIR_MODULES.'devices/SMotions_motionDetected.php');
вот содержимое этого файла
Код: Выделить всё
<?php
$ot=$this->object_title;
if (!isset($params['statusUpdated'])) {
setTimeout($ot.'_motion_timer_status', '', 3);
}
if (isset($params['VALUE']) && !$params['VALUE'] && !isset($params['statusUpdated'])) {
$this->setProperty('status', 0);
return;
}
$motion_timeout=$this->getProperty('timeout'); // seconds timeout
if (!$motion_timeout) {
$motion_timeout=20; // timeout by default
}
$nobodysHome=getGlobal('NobodyHomeMode.active');
if (!isset($params['statusUpdated'])) {
$this->setProperty('status', 1);
}
setTimeout($ot.'_motion_timer', 'setGlobal("'.$ot.'.status", 0);', $motion_timeout);
if ($nobodysHome && $this->getProperty('ignoreNobodysHome')) {
return;
}
//$this->callMethod('logicAction');
ClearTimeOut("nobodyHome");
SetTimeOut("nobodyHome","callMethodSafe('NobodyHomeMode.activate');", 1*60*60);
$linked_room=$this->getProperty('linkedRoom');
if ($linked_room) {
callMethodSafe($linked_room.'.onActivity', array('sensor'=>$ot));
} elseif ($nobodysHome) {
callMethodSafe('NobodyHomeMode.deactivate', array('sensor'=>$ot, 'room'=>$linked_room));
}
/*
include_once(DIR_MODULES.'devices/devices.class.php');
$dv=new devices();
$dv->checkLinkedDevicesAction($this->object_title);
*/
Re: Вывод значения от датчика при обнаружении движения?!
Добавлено: Пн фев 11, 2019 9:24 am
Chainik
Sandr писал(а): ↑Пн фев 11, 2019 8:44 am
...
Еще вопрос - Как запустить этот скрипт при срабатывании конкретного датчика движения?
В системе, по дефолту, в классе датчиков движения
На событие висит обработчик
Код: Выделить всё
require(DIR_MODULES.'devices/SMotions_motionDetected.php');
...
Я так датчики движения подключать не пробовал (создавал свой класс, подключал через MegaD).
Тут надо понять, происходят ли какие-то изменения в MDM при срабатывании датчика, например, возможно, меняется свойство "status". Может быть там есть пункт "запускать метод при изменении".
Еще по коду вижу, что закомментирована строка с запуском метода "logicAction". Возможно, ее надо раскомментировать и вписать код туда.
Если все это относится к простым устройствам, тут не подскажу. Но на форуме очень много народу, кто ими пользуется. Они наверняка подскажут, как быть.