[Сценарий] sensorTemp.statusChanged

Не требует установки программ или изменения файлов

Модераторы: immortal, newz20

Ответить
PAV
Сообщения: 949
Зарегистрирован: Пт дек 06, 2013 11:30 am
Откуда: Москва
Благодарил (а): 68 раз
Поблагодарили: 94 раза

[Сценарий] sensorTemp.statusChanged

Сообщение PAV » Чт июл 03, 2014 10:53 am

Это метод класса sensorTemp общий для всех сенсоров.
Вызывается как правило http запросом вида GET /objects/?object=sensorTemp11&op=m&m=statusChanged&t=25.3

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

//$params['t']
 $this->setProperty("updated",time());
 $this->setProperty("updatedTime",date("d/m/y H:i"));
 $this->setProperty("alive",1); 
 
$ot=$this->object_title;
$alive_timeout=(int)$this->getProperty("aliveTimeOut");
if (!$alive_timeout) {
 $alive_timeout=30*60;
}
clearTimeOut($ot."_alive");
setTimeOut($ot."_alive","sg('".$ot.".alive',0);",$alive_timeout); 

if (!isset($params['t'])) {
 return;
}


$old_temp=$this->getProperty('temp');
$t=round($params['t'],1);

if ($t>110) return;

$this->setProperty('temp',$t);
if ($params['uptime']) {
 $this->setProperty('uptime',$params['uptime']);
}

if ($t>$old_temp) {
 $d=2;
} elseif ($t<$old_temp) {
 $d=1;
} else {
 $d=0;
}
$this->setProperty('direction',$d);

$tmax=(int)$this->getProperty("tempMax");
$tmin=(int)$this->getProperty("tempMin");
if ($t > $tmax || $t < $tmin) {
$this->setProperty('alarm',1);
say("Внимание. Критическая температура датчика". $ot, 2);
}else{
$this->setProperty('alarm',0);
}
$linked_room=$this->getProperty("LinkedRoom");
if ($linked_room) {
 setGlobal($linked_room.'.Temperature',$t);
}
Последний раз редактировалось PAV Чт июл 03, 2014 3:58 pm, всего редактировалось 1 раз.
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: sensorTemp.statusChanged

Сообщение Ivan » Чт июл 03, 2014 3:46 pm

Укажите в описании через что у вас идёт запуск метода statusChanged

Я указал в таблице 1-Wire свойство объекта, в скрипте на изменение ничего не указывал. Чтобы выполнялся statusChanged, в свойстве temp класса указал запускать при изменении statusChanged. В итоге скрипт работает частично. То есть выполняется до строчки $params['t'] - понятное дело что это свойство никто не указывал при выполнении скрипта.

В итоге скрипт пришлось переписать. Смотрите у меня в connect

Опишите пожалуйста как и с чем вы использует этот скрипт
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
PAV
Сообщения: 949
Зарегистрирован: Пт дек 06, 2013 11:30 am
Откуда: Москва
Благодарил (а): 68 раз
Поблагодарили: 94 раза

Re: sensorTemp.statusChanged

Сообщение PAV » Чт июл 03, 2014 3:59 pm

Уточнил
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: sensorTemp.statusChanged

Сообщение Ivan » Чт июл 03, 2014 4:13 pm

Отлично. Сергей тоже это использует. И по умолчанию в системе такой же скрипт. Что вводит в заблуждение тех кто использует его из 1-Wire
Хорошо бы описать и для других вызовов
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Аватара пользователя
shemnik69
Сообщения: 590
Зарегистрирован: Пн дек 24, 2012 3:01 pm
Откуда: Саратов Saratov
Благодарил (а): 67 раз
Поблагодарили: 63 раза

Re: sensorTemp.statusChanged

Сообщение shemnik69 » Ср июл 09, 2014 11:52 am

Вопрос по скрипту..
В системе тот же скрипт что и у ВАс Ivan. опрос датчиков идет нормально и как бы претензий нет никак мне не удается увидеть связь параметров
$ot=$this->object_title;
$alive_timeout=(int)$this->getProperty("aliveTimeOut");
if (!$alive_timeout) {
$alive_timeout=30*60;
}
Что это отражает? В базе данных? это величина на что влияет?
И еще, по смыслу, каждый датчик логично, применимо например к квартире, "привязывают" к комнатам (зал, кухня тд) а если это объекты за пределами дома (баня и т.п) статус "уровня жизни" у меня всегда зеленый.... а как его увидеть конкретно на каждый датчик ни разберусь.
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: sensorTemp.statusChanged

Сообщение Ivan » Ср июл 09, 2014 1:00 pm

Данная част скрипта проверяет есть ли aliveTimeOut в свойствах объекта, если есть берёт из него если нет берёт по умолчанию 30*60 = 30 мин
То есть через какое время считать что датчик отвалился - обратите внимание, что данные с датчика могут приходить не не меняться в базе, потому что одинаковые, тогда время alive нужно увеличить на время гарантированное максимальное в за которое могут не меняться данные

Я сделал отдельно комнаты, к ним привязываю датчики. А в комнатах уже есть местоположение. От него можно и отталкиваться для вычисления средней температуры объекта.

Кстати вопрос к Сергею: Как из скрипта выбрать объекты из одного класса и определённого местоположения? (Без запросов SQL)

У меня пока 1 объект "Дом". Градусник который на улице я не привязывал к комнатам. Но скоро нужно будет делать несколько объектов
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: sensorTemp.statusChanged

Сообщение sergejey » Ср июл 09, 2014 2:29 pm

Ivan писал(а):Кстати вопрос к Сергею: Как из скрипта выбрать объекты из одного класса и определённого местоположения? (Без запросов SQL)
Такой функции нет. Можно только по классу с помощью getObjectsByClass("имя_класса"). Она возвращает массив с ID и TITLE объектов.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: sensorTemp.statusChanged

Сообщение Ivan » Ср июл 09, 2014 4:55 pm

Тогда придётся добавлять в класс свойство. Объект - и уже ориентироваться по нему. Что я благополучно делаю на проверку статуса checkAlive в скрипте состояния системы.

Pav тоже применяет AlertToSay - http://smartliving.ru/forum/viewtopic.php?f=13&t=1669 в тех же целях

Опять же вопрос Сергею: Для чего тогда "Местоположение" в объектах?
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: sensorTemp.statusChanged

Сообщение sergejey » Ср июл 09, 2014 5:01 pm

Ivan писал(а):Опять же вопрос Сергею: Для чего тогда "Местоположение" в объектах?
Для удобства работы в админке. Я часто переключаюсь в режим списка при работе с объектами и тогда удобно отфильтровать объекты по расположению.

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