Прошу помочь с составлением алгоритма взаимодействия:
Есть "датчик А" MySensors присылающий в систему значение "SensorА.value"
Есть "датчик движения Б"
Задача - В случае если значение от Датчика А опустилось ниже порогового значения
Вывести голосовое сообщение при обнаружении движения от датчика Б
Дополнительные условия
- не повторять голосовое сообщение чаще чем раз в полчаса
- не произносить сообщение в ночное время
Вывод значения от датчика при обнаружении движения?!
Модератор: immortal
- Sandr
- Сообщения: 126
- Зарегистрирован: Пн ноя 16, 2015 5:10 pm
- Благодарил (а): 19 раз
- Поблагодарили: 29 раз
Вывод значения от датчика при обнаружении движения?!
Win Home Serv 2011 / Intel Core i3 / 32 GB ram /
Сцена погода (вертикальная)
mySensor скетчи ( 4х канальный димер | Оптимизация скетчей )
Ну и конечно моя маленькая фабрика - 3D печать / фрезеровка / литье
Сцена погода (вертикальная)
mySensor скетчи ( 4х канальный димер | Оптимизация скетчей )
Ну и конечно моя маленькая фабрика - 3D печать / фрезеровка / литье
-
- Сообщения: 1462
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 260 раз
- Поблагодарили: 454 раза
Re: Вывод значения от датчика при обнаружении движения?!
Можно попробовать так:
Код: Выделить всё
//Скрипт запускается при срабатывании датчика движения
$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
}
Последний раз редактировалось Chainik Пн фев 11, 2019 8:38 am, всего редактировалось 1 раз.
- Рейтинг: 2.33%
- Sandr
- Сообщения: 126
- Зарегистрирован: Пн ноя 16, 2015 5:10 pm
- Благодарил (а): 19 раз
- Поблагодарили: 29 раз
Re: Вывод значения от датчика при обнаружении движения?!
небольшая ошибка в коде, время надо указывать в кавычках: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 }
Код: Выделить всё
timeBetween('06:00', '22:59'))
Последний раз редактировалось Sandr Пн фев 11, 2019 8:44 am, всего редактировалось 2 раза.
Win Home Serv 2011 / Intel Core i3 / 32 GB ram /
Сцена погода (вертикальная)
mySensor скетчи ( 4х канальный димер | Оптимизация скетчей )
Ну и конечно моя маленькая фабрика - 3D печать / фрезеровка / литье
Сцена погода (вертикальная)
mySensor скетчи ( 4х канальный димер | Оптимизация скетчей )
Ну и конечно моя маленькая фабрика - 3D печать / фрезеровка / литье
-
- Сообщения: 1462
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 260 раз
- Поблагодарили: 454 раза
Re: Вывод значения от датчика при обнаружении движения?!
Спасибо, поправлю в исходном коде, чтобы остался правильный вариант "для будущих поколений".
- Рейтинг: 1.16%
- Sandr
- Сообщения: 126
- Зарегистрирован: Пн ноя 16, 2015 5:10 pm
- Благодарил (а): 19 раз
- Поблагодарили: 29 раз
Re: Вывод значения от датчика при обнаружении движения?!
Еще вопрос - Как запустить этот скрипт при срабатывании конкретного датчика движения?
В системе, по дефолту, в классе датчиков движения
На событие висит обработчик
Код: Выделить всё
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);
*/
Win Home Serv 2011 / Intel Core i3 / 32 GB ram /
Сцена погода (вертикальная)
mySensor скетчи ( 4х канальный димер | Оптимизация скетчей )
Ну и конечно моя маленькая фабрика - 3D печать / фрезеровка / литье
Сцена погода (вертикальная)
mySensor скетчи ( 4х канальный димер | Оптимизация скетчей )
Ну и конечно моя маленькая фабрика - 3D печать / фрезеровка / литье
-
- Сообщения: 1462
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 260 раз
- Поблагодарили: 454 раза
Re: Вывод значения от датчика при обнаружении движения?!
Я так датчики движения подключать не пробовал (создавал свой класс, подключал через MegaD).Sandr писал(а): ↑Пн фев 11, 2019 8:44 am...
Еще вопрос - Как запустить этот скрипт при срабатывании конкретного датчика движения?
В системе, по дефолту, в классе датчиков движения
На событие висит обработчик...Код: Выделить всё
require(DIR_MODULES.'devices/SMotions_motionDetected.php');
Тут надо понять, происходят ли какие-то изменения в MDM при срабатывании датчика, например, возможно, меняется свойство "status". Может быть там есть пункт "запускать метод при изменении".
Еще по коду вижу, что закомментирована строка с запуском метода "logicAction". Возможно, ее надо раскомментировать и вписать код туда.
Если все это относится к простым устройствам, тут не подскажу. Но на форуме очень много народу, кто ими пользуется. Они наверняка подскажут, как быть.