Вывод значения от датчика при обнаружении движения?!

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

Ответить
Аватара пользователя
Sandr
Сообщения: 126
Зарегистрирован: Пн ноя 16, 2015 5:10 pm
Благодарил (а): 19 раз
Поблагодарили: 29 раз

Вывод значения от датчика при обнаружении движения?!

Сообщение Sandr » Вс фев 10, 2019 9:49 pm

Прошу помочь с составлением алгоритма взаимодействия:

Есть "датчик А" MySensors присылающий в систему значение "SensorА.value"
Есть "датчик движения Б"

Задача - В случае если значение от Датчика А опустилось ниже порогового значения
Вывести голосовое сообщение при обнаружении движения от датчика Б

Дополнительные условия
- не повторять голосовое сообщение чаще чем раз в полчаса
- не произносить сообщение в ночное время
Win Home Serv 2011 / Intel Core i3 / 32 GB ram /
Сцена погода (вертикальная)
mySensor скетчи ( 4х канальный димер | Оптимизация скетчей )
Ну и конечно моя маленькая фабрика - 3D печать / фрезеровка / литье
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Вывод значения от датчика при обнаружении движения?!

Сообщение Chainik » Вс фев 10, 2019 10:20 pm

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
}
Последний раз редактировалось Chainik Пн фев 11, 2019 8:38 am, всего редактировалось 1 раз.
За это сообщение автора Chainik поблагодарили (всего 2):
Sandr (Пн фев 11, 2019 8:16 am) • maksimka (Сб фев 16, 2019 12:50 pm)
Рейтинг: 2.33%
Аватара пользователя
Sandr
Сообщения: 126
Зарегистрирован: Пн ноя 16, 2015 5:10 pm
Благодарил (а): 19 раз
Поблагодарили: 29 раз

Re: Вывод значения от датчика при обнаружении движения?!

Сообщение Sandr » Пн фев 11, 2019 8:25 am

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 печать / фрезеровка / литье
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Вывод значения от датчика при обнаружении движения?!

Сообщение Chainik » Пн фев 11, 2019 8:38 am

Sandr писал(а):
Пн фев 11, 2019 8:25 am
...
небольшая ошибка в коде, время надо указывать в кавычках:
...
Спасибо, поправлю в исходном коде, чтобы остался правильный вариант "для будущих поколений".
За это сообщение автора Chainik поблагодарил:
Sandr (Пн фев 11, 2019 8:44 am)
Рейтинг: 1.16%
Аватара пользователя
Sandr
Сообщения: 126
Зарегистрирован: Пн ноя 16, 2015 5:10 pm
Благодарил (а): 19 раз
Поблагодарили: 29 раз

Re: Вывод значения от датчика при обнаружении движения?!

Сообщение Sandr » Пн фев 11, 2019 8:44 am

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);
*/
Win Home Serv 2011 / Intel Core i3 / 32 GB ram /
Сцена погода (вертикальная)
mySensor скетчи ( 4х канальный димер | Оптимизация скетчей )
Ну и конечно моя маленькая фабрика - 3D печать / фрезеровка / литье
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Вывод значения от датчика при обнаружении движения?!

Сообщение Chainik » Пн фев 11, 2019 9:24 am

Sandr писал(а):
Пн фев 11, 2019 8:44 am
...
Еще вопрос - Как запустить этот скрипт при срабатывании конкретного датчика движения?
В системе, по дефолту, в классе датчиков движения
На событие висит обработчик

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

require(DIR_MODULES.'devices/SMotions_motionDetected.php');
...
Я так датчики движения подключать не пробовал (создавал свой класс, подключал через MegaD).
Тут надо понять, происходят ли какие-то изменения в MDM при срабатывании датчика, например, возможно, меняется свойство "status". Может быть там есть пункт "запускать метод при изменении".
Еще по коду вижу, что закомментирована строка с запуском метода "logicAction". Возможно, ее надо раскомментировать и вписать код туда.
Если все это относится к простым устройствам, тут не подскажу. Но на форуме очень много народу, кто ими пользуется. Они наверняка подскажут, как быть.
Ответить