SmartLiving.ru

Обсуждение проекта
 
Текущее время: Вт окт 24, 2017 5:09 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 14 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Обновления датчика движения
СообщениеДобавлено: Ср дек 07, 2016 2:43 pm 
Не в сети

Зарегистрирован: Вт ноя 25, 2014 2:06 pm
Сообщения: 119
Благодарил (а): 20 раз.
Поблагодарили: 0 раз.
Приветствую всех помогите разобраться с датчиком движения
Есть объект HallSensor класса MotionSensors в нем есть свойство Status которое обновляется через модуль esp8266_wifiot по движению , все работает нормально, но как только ставишь метод "statusChanged" при изменении свойства Status почему то сам Status обновляется на пустое значения
[Показать] Скрытый текст: "statusChanged"
Код:

$params
['status'] =$this->getProperty('status');
$this->setProperty('status',$params['status']); // выставляем статус сенсора
$this->setProperty('updatedTimestamp',time()); // выставляем время срабатывания сенсора

$this->setProperty('alive',1);
$ot=$this->object_title;
$alive_timeout=(int)$this->getProperty("aliveTimeOut");
if (!$alive_timeout) {
 $alive_timeout=24*60*60;
}
clearTimeOut($ot."_alive");
setTimeOut($ot."_alive","sg('".$ot.".alive',0);",$alive_timeout);

if ($params['status']) {
 
 $this
->setProperty('motionDetected',1);
 clearTimeOut($this->object_title.'_detected'); 
 setTimeOut
($this->object_title.'_detected',"setGlobal('".$this->object_title.".motionDetected',0);",30);

 $linked_room=$this->getProperty('LinkedRoom');
 if ($linked_room!='') {
  callMethod($linked_room.'.onActivity');
 }

 if ($this->object_title=='sensorMovement3' || $this->object_title=='sensorMovementRemote1' || $this->object_title=='sensorMovementRemote2') {
  //|| $this->object_title=='sensorMovement5'
  return; // не реагируем на движение в спальне, по ip-сенсорам и по сенсору на втром этаже
 }

 ClearTimeOut("nobodyHome"); 
 SetTimeOut
("nobodyHome","callMethod('NobodyHomeMode.activate');", 1*60*60); // выполняем если целый час никого не было

 if (getGlobal('NobodyHomeMode.active')) {
  callMethod('NobodyHomeMode.deactivate');
 }

 $last_register=registeredEventTime('inhouseMovement'); // проверяем когда в последний раз срабатывало событие "движение внутри дома"
  registerEvent('inhouseMovement',$this->name,2); // регистрируем событие "движение внутри дома" 
  if (timeBetween('05:00', '12:00') && ((time()-$last_register)>2*60*60)) {
   runScript('Greeting'); // запускаем скрипт "доброе утро"
  }


что интересно работало пару обновлений назад (просто не заметил когда работать перестало)

_________________
Windows 10 + Raspberry Pi3 + ESP8266


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обновления датчика движения
СообщениеДобавлено: Ср дек 07, 2016 2:59 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 28, 2013 8:14 am
Сообщения: 3423
Откуда: Екатеринбург
Благодарил (а): 91 раз.
Поблагодарили: 689 раз.
ингвар писал(а):

что интересно работало пару обновлений назад (просто не заметил когда работать перестало)


Зачем эта конструкция??
Код:
$params['status'] =$this->getProperty('status');
$this->setProperty('status',$params['status']);  

Что-то мне подсказывает что виновата она.

*** Сообщение запрещено. Сообщение похоже на спам. ***

_________________
Raspberry Pi3 + Broadlink + esp8266 (blynk) + Arduino Mega (AMS)
Уважаемые пользователи! Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Помощь пользователям | Создание сцен | Код Arduino/esp


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обновления датчика движения
СообщениеДобавлено: Ср дек 07, 2016 5:37 pm 
Не в сети

Зарегистрирован: Вт ноя 25, 2014 2:06 pm
Сообщения: 119
Благодарил (а): 20 раз.
Поблагодарили: 0 раз.
nick7zmail писал(а):
ингвар писал(а):

Что-то мне подсказывает что виновата она.


Я их убирал но из-за этого не срабатывал код после "if ($params['status']) "

_________________
Windows 10 + Raspberry Pi3 + ESP8266


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обновления датчика движения
СообщениеДобавлено: Ср дек 07, 2016 7:27 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 28, 2013 8:14 am
Сообщения: 3423
Откуда: Екатеринбург
Благодарил (а): 91 раз.
Поблагодарили: 689 раз.
ингвар писал(а):
Я их убирал но из-за этого не срабатывал код после "if ($params['status']) "

Ну вы понимаете, что вы берете $params['status'] (которого изначально вообще не существует скорее всего), присваиваете ему свойство статус из запущенного объекта (не известно применяется ли оно, или так и остается несуществующим), и тут же обратно свойству status обратно присваивате значение из $params['status'], что по факту вообще должно перезапустить метод повторно, и вызвать циклический вызов этого метода и возможное дальнейшее зависание цикла main...

а if можно проводить и напрямую по if($this->getProperty('status')) {}

_________________
Raspberry Pi3 + Broadlink + esp8266 (blynk) + Arduino Mega (AMS)
Уважаемые пользователи! Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Помощь пользователям | Создание сцен | Код Arduino/esp


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обновления датчика движения
СообщениеДобавлено: Чт дек 08, 2016 4:09 pm 
Не в сети

Зарегистрирован: Вт ноя 25, 2014 2:06 pm
Сообщения: 119
Благодарил (а): 20 раз.
Поблагодарили: 0 раз.
nick7zmail писал(а):
а if можно проводить и напрямую по if($this->getProperty('status')) {}

переписал код
[Показать] Скрытый текст:
Код:
//$params['status'] =$this->getProperty('status');
//$this->setProperty('status',$params['status']); // выставляем статус сенсора HallSensor.status
$this->setProperty('updatedTimestamp',time()); // выставляем время срабатывания сенсора

$this->setProperty('alive',1);
$ot=$this->object_title;
$alive_timeout=(int)$this->getProperty("aliveTimeOut");
if (!$alive_timeout) {
 $alive_timeout=24*60*60;
}
clearTimeOut($ot."_alive");
setTimeOut($ot."_alive","sg('".$ot.".alive',0);",$alive_timeout);

if ($this->getProperty('status')) {
 
 $this
->setProperty('motionDetected',1);
 clearTimeOut($this->object_title.'_detected'); 
 setTimeOut
($this->object_title.'_detected',"setGlobal('".$this->object_title.".motionDetected',0);",30);

 $linked_room=$this->getProperty('LinkedRoom');
 if ($linked_room!='') {
  callMethod($linked_room.'.onActivity');
 }

 if ($this->object_title=='sensorMovement3' || $this->object_title=='sensorMovementRemote1' || $this->object_title=='sensorMovementRemote2') {
  //|| $this->object_title=='sensorMovement5'
  return; // не реагируем на движение в спальне, по ip-сенсорам и по сенсору на втром этаже
 }

 ClearTimeOut("nobodyHome"); 
 SetTimeOut
("nobodyHome","callMethod('NobodyHomeMode.activate');", 1*60*60); // выполняем если целый час никого не было

 if (getGlobal('NobodyHomeMode.active')) {
  callMethod('NobodyHomeMode.deactivate');
 }

 $last_register=registeredEventTime('inhouseMovement'); // проверяем когда в последний раз срабатывало событие "движение внутри дома"
  registerEvent('inhouseMovement',$this->name,2); // регистрируем событие "движение внутри дома" 
  if (timeBetween('05:00', '12:00') && ((time()-$last_register)>2*60*60)) {
   runScript('Greeting'); // запускаем скрипт "доброе утро"
  }
}

данные статуса стали работать нормально, но всеравно скрипт после if ($this->getProperty('status')) не срабатывает , помогите в чем может быть проблема ,
что интересно раньше работало я не чего не трогал просто после какого то недавнего обновления перестала работать

_________________
Windows 10 + Raspberry Pi3 + ESP8266


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обновления датчика движения
СообщениеДобавлено: Сб дек 10, 2016 7:56 pm 
Не в сети

Зарегистрирован: Вт ноя 25, 2014 2:06 pm
Сообщения: 119
Благодарил (а): 20 раз.
Поблагодарили: 0 раз.
чего то ни как не соображу что к чему
есть датчик движение который через модуль esp8266_wifiot по движению обновляет свойство status в объекте Hallsensor в свойстве оно меняется на 1, а метод видит что оно равно 0 как это побороть?
помогите тогда или ткните где почитать

написал вот так :
$s = $this->getProperty('status');
if ($s==1){}
так заработало, но правильно ли это?

_________________
Windows 10 + Raspberry Pi3 + ESP8266


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обновления датчика движения
СообщениеДобавлено: Сб дек 10, 2016 8:29 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 28, 2013 8:14 am
Сообщения: 3423
Откуда: Екатеринбург
Благодарил (а): 91 раз.
Поблагодарили: 689 раз.
ингвар писал(а):
чего то ни как не соображу что к чему
есть датчик движение который через модуль esp8266_wifiot по движению обновляет свойство status в объекте Hallsensor в свойстве оно меняется на 1, а метод видит что оно равно 0 как это побороть?
помогите тогда или ткните где почитать

написал вот так :
$s = $this->getProperty('status');
if ($s==1){}
так заработало, но правильно ли это?

Да вроде все правильно. Если метод не классовый - можно напрямую к свойству обращаться
Код:
if (gg('объект.св-во')==1){} 

А если классовый - то все правильно сделали...а что вас смущает то?))

_________________
Raspberry Pi3 + Broadlink + esp8266 (blynk) + Arduino Mega (AMS)
Уважаемые пользователи! Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Помощь пользователям | Создание сцен | Код Arduino/esp


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обновления датчика движения
СообщениеДобавлено: Сб сен 16, 2017 1:35 am 
Не в сети

Зарегистрирован: Чт июн 02, 2016 9:33 pm
Сообщения: 356
Благодарил (а): 78 раз.
Поблагодарили: 19 раз.
Помогите плиз разобраться что делать этот метод statusChanged? Датчик движения у меня есть. Обычно я сам писал логику исходя из своих знаний языка, но этот код я не могу прочитать. Буду признателен если опишите хотя бы в общих чертах зачем он был написан.

_________________
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обновления датчика движения
СообщениеДобавлено: Вт сен 19, 2017 10:50 am 
Не в сети
Site Admin

Зарегистрирован: Пн сен 05, 2011 6:48 pm
Сообщения: 4100
Откуда: Минск, Беларусь
Благодарил (а): 66 раз.
Поблагодарили: 1091 раз.
Gelezako писал(а):
Помогите плиз разобраться что делать этот метод statusChanged? Датчик движения у меня есть. Обычно я сам писал логику исходя из своих знаний языка, но этот код я не могу прочитать. Буду признателен если опишите хотя бы в общих чертах зачем он был написан.


А что именно интересует?
Я сейчас свои датчики дома перевожу все в Простые устройства. Если говорить языком алгоритмов, то суть кода обработки движения сводится к следующему:
1. Установить статус в 1
2. Установить таймер на сброс статуса в 0 через 20 секунд
3. Вызвать метод Действие
4. Деактивировать режим "никого нет дома", если он активен
5. Вызвать метод onActivity для комнаты (если датчик привязан к комнате).

В основном всё. Действия на движения я обычно не привязываю к датчикам, а привязываю к комнатам, т.к. датчиков в комнате может быть несколько и они могут меняться (были беспроводные, стали проводные и т.п.)

_________________

Сергей Джейгало, разработчик MajorDoMo
Профиль Connect -- информация, сотрудничество, услуги


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обновления датчика движения
СообщениеДобавлено: Вт сен 19, 2017 10:24 pm 
Не в сети

Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Сообщения: 288
Благодарил (а): 20 раз.
Поблагодарили: 59 раз.
А нельзя
2. Установить таймер на сброс статуса в 0 через 20 секунд
вынести в настройки?
А то, кмк, это заточено под определенный тип датчика, который меняет своё состояние гарантированно раньше 20 с.
Если датчик чуть поумнее, он будет пролонгировать своё активное состояние, дожидаясь отсутствия движения.
Если ходить перед датчиком 300 с, он выдаст 1 в начале, потом будет ждать окончания движения 300 с.
А через 20 с таймаутом статус движения сбросится - никого нету, так? И 280 с статус не поменяется, выходит?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB