данные - объект датчик - объект комната

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: данные - объект датчик - объект комната

Сообщение Bagir » Ср авг 27, 2014 3:28 pm

Изменения внес, жду обновления температуры с датчика.
А как быть, если в будущем я буду использовать и другие источники температуры, а не только 1-Wire. Например очень бы хотелось беспроводные Z-Wave для комнат. И MegaD для климата и вентиляции. Может быть с такими изменениями просто создать отдельный класс для 1-Wire датчиков?
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Vit
Сообщения: 867
Зарегистрирован: Вт янв 17, 2012 12:31 pm
Благодарил (а): 121 раз
Поблагодарили: 78 раз

Re: данные - объект датчик - объект комната

Сообщение Vit » Ср авг 27, 2014 9:01 pm

Bagir писал(а):Изменения внес, жду обновления температуры с датчика.
А как быть, если в будущем я буду использовать и другие источники температуры, а не только 1-Wire. Например очень бы хотелось беспроводные Z-Wave для комнат. И MegaD для климата и вентиляции. Может быть с такими изменениями просто создать отдельный класс для 1-Wire датчиков?
я думаю не обязательно, просто дописать код в tempChanged и запускать его для объектов при изменении в каким образом вы получаете температуру в объект разницы нет...
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: данные - объект датчик - объект комната

Сообщение Bagir » Ср авг 27, 2014 9:13 pm

Изучал примеры в CONNECT и на форуме. Вы как всегда Вы правы. Не нужно делать отдельный класс. Думаю что с Z-Wave будет так же как и с 1-Wire. Но я пока что даже не представляю, как это все будет выглядеть с ардуино. Как доберусь, увижу. Сейчас оставил себе оригинальный tempChanged с оригинальным кодом

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

//$params['t']
 $this->setProperty("updated",time());
 $this->setProperty("updatedTime",date("H:i",time()));
 $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=1;
} elseif ($t<$old_temp) {
 $d=-1;
} else {
 $d=0;
}
$this->setProperty('direction',$d);

$linked_room=$this->getProperty("LinkedRoom");
if ($linked_room) {
 setGlobal($linked_room.'.Temperature',$t);
} 
Создал новый метод valueChanged, куда поместил Ваш код. И связал его вызов с изменением свойства temp

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

$this->setProperty("updated",time());
$this->setProperty("updatedTime",date("H:i",time()));
$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); 

$linked_room=$this->getProperty("LinkedRoom");
if ($linked_room) {
  setGlobal($linked_room.'.Temperature',$this->getProperty("temp"));
} 
Получается, что в случае с 1-Wire и как я предполагаю, с Z-Wave тоже, метод tempChanged не будет выполняться. А в случае с ардуино, нужно будет переписать valueChanged на ничего, для конкретного объекта. Вообще то я думаю, что можно сделать и по красивей, но захотелось оставить шаблоны этих двух вариантов.
Вообщем решение на Ваш суд ))
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Ответить