Страница 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
}
небольшая ошибка в коде, время надо указывать в кавычках:

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

 timeBetween('06:00', '22:59'))
В остальном спасибо.

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". Возможно, ее надо раскомментировать и вписать код туда.
Если все это относится к простым устройствам, тут не подскажу. Но на форуме очень много народу, кто ими пользуется. Они наверняка подскажут, как быть.