Страница 1 из 2

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

Добавлено: Пн авг 25, 2014 2:43 am
Bagir
Класс tempSensors. Почему в коде метода tempChanged указано $params['t'], в то время как свойство его температуры temp?
Я связал 1-Wire датчик с объектом класса tempSensors. История пишется, графики рисуются. Но у этого объекта есть еще свойство LinkedRoom. Я так понимаю, это сделано для того, чтобы сливать нужные данные в объекты комнат. Я создал объект комната класса Rooms. У него есть свойство Temperature. На сколько я понял, при изменении температуры объекта датчика, она должна передаваться в объект комната. Но это не происходит. Код в методе tempChanged объекта датчика заканчивается на

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

if (!isset($params['t'])) {
 return;
}
И это правильно, т.к. параметр 't' действительно не задан. А кем он вообще должен быть задан? Если речь идет о привязке к 1-wire датчику, так там свойство temp. И исполняется ли вообще метод tempChanged при изменении температуры при привязке к датчику 1-wire? Или же tempChanged со своим параметром 't' задуман для других замыслов?
Пока что я не понимаю этой конструкции с температурой. Расскажите пожалуйста!
И еще вопрос: где правильнее хранить историю температуры. В объекте датчик или в объекте комната?
Если при проверке в 5 минут я укажу хранение данных 365 дней, сильно база распухнет?

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

Добавлено: Пн авг 25, 2014 8:02 am
Ivan
Уже обсуждалось

't' нужно для тех у кого температура передаётся через URL от ардуины. У кого через 1-Wire нужно переписывать скрипт. Смотри в моём Connect

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

Добавлено: Пн авг 25, 2014 2:12 pm
Bagir
Незная многих моментов, я не могу сам разобраться :(
Сейчас у меня есть 1-Wire датчик. В его настройках я указал связанный объект ts_office и его свойство temp и период обновления. Температура пишется в свойство датчика, но его метод tempChanged не выполняется. И соответственно не устанавливается свойство ts_office.alive и ts_office.aliveTimeOut. И данные не уходят в объект LinkedRoom. То есть объект датчика как бы и не живой, но температура обновляется. Наверное при работе 1-wire не использует метод tempChanged, и данные напрямую просто записываются в свойство объекта. Поправите если говорю ерунду.
Конечно можно самому запустить метод
http://127.0.0.1/objects/?object=ts_off ... anged&t=20
и тогда данные будут записаны и переданы объекту LinkedRoom. Как я понял, сделано это для получения температуры от других датчиков по http://, но тогда эта температура попытается записаться в датчик 1-wire, и конечно я получаю ошибку Notice: Read only value set#1
Конечно я могу наколхозить и сам, без точного понимания ситуации, но все же, расскажите пожалуйста как это будет правильно. А если это обсуждалось, то можно ссыль. Я толком не нашел поиском.

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

Добавлено: Ср авг 27, 2014 2:02 pm
Bagir
Общие размышления о датчиках и реле. Пишу как я представляю это сейчас, и чтобы знающие люди меня поправили. Объекту датчик можно передать данные двумя способами. Связанное свойство например с 1-Wire, Z-Wave и т.п. Или же через http://127.0.0.1/objects/?object=ts_off ... anged&t=25
С объектом реле все тоже самое. Если его свойство status связано, то когда мы его меняем, система отправит запрос и связанной реле. А в случае с http, когда связанной железки нету, мы настраиваем методы turnOff и turnOn, добавляя туда какое то действие.
Уточните картину пожалуйста. Полное понимание этого, возможно, даст мне ответ на предыдущий вопрос. Я так еще и не знаю, как быть с объектом термодатчика, связанным с 1-Wire

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

Добавлено: Ср авг 27, 2014 2:21 pm
sergejey
Bagir писал(а):Общие размышления о датчиках и реле. Пишу как я представляю это сейчас, и чтобы знающие люди меня поправили. Объекту датчик можно передать данные двумя способами. Связанное свойство например с 1-Wire, Z-Wave и т.п. Или же через http://127.0.0.1/objects/?object=ts_off ... anged&t=25
С объектом реле все тоже самое. Если его свойство status связано, то когда мы его меняем, система отправит запрос и связанной реле. А в случае с http, когда связанной железки нету, мы настраиваем методы turnOff и turnOn, добавляя туда какое то действие.
Уточните картину пожалуйста. Полное понимание этого, возможно, даст мне ответ на предыдущий вопрос. Я так еще и не знаю, как быть с объектом термодатчика, связанным с 1-Wire
Если я правильно понял вопрос, то да -- при работе через связанное свойство достаточно менять status. По сути turnOn/turnOff по-умолчанию ничего и не делает, кроме того что меняет статус.

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

Добавлено: Ср авг 27, 2014 2:27 pm
Bagir
Да, мне просто сейчас надо более менее понять суть, чтобы заведомо не уйти по кривой тропинке в лес и дебри ))
У меня сейчас объект датчика температуры связан с датчиков 1-Wire. Температура обновляется, но в LinkedRoom не передается. Я понимаю, почему это не происходит, т.к. при обновлении температуры не запускается метод tempChanged, в котором и происходит передача данных. Как быть?

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

Добавлено: Ср авг 27, 2014 3:00 pm
Ivan
Уже писал. Повторюсь.

Тот скрипт что используется по умолчанию не подходит для 1Wire
Вам нужно его переписать и в свойстве temp поставить запускать tempChanged

Заменить код в tempChanged

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

$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"));
}
Тот код что по умолчанию. Используется при передачи температуры из вне путём запуска tempChanged с параметром "t"
Чаще всего используется при обновлении температуры с Ардуино

p.s. Я уже писал Сергею об этом. Желательно как то стандартизировать подходы обновления температуры с разных мест. Но т.к движок позволяет гибко это делать у каждого свои подходы

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

Добавлено: Ср авг 27, 2014 3:02 pm
sergejey
Bagir писал(а):Да, мне просто сейчас надо более менее понять суть, чтобы заведомо не уйти по кривой тропинке в лес и дебри ))
У меня сейчас объект датчика температуры связан с датчиков 1-Wire. Температура обновляется, но в LinkedRoom не передается. Я понимаю, почему это не происходит, т.к. при обновлении температуры не запускается метод tempChanged, в котором и происходит передача данных. Как быть?
Пожалуй, самое простое это будет в настройках свойства температуры (для класса, а не для отдельного объекта) указать запуск метода tempChanged при изменении.

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

Добавлено: Ср авг 27, 2014 3:04 pm
Ivan
-

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

Добавлено: Ср авг 27, 2014 3:05 pm
Bagir
Я помню Ваш ответ! Но полностью не понимая ситуации, лезть с монтажкой в часовой механизм просто побоялся. У меня была такая мысль, переписать tempChanged и при изменении свойства запускать этот метод. Пока нету хоть какой то базы знаний, принимать такие решения еще рано. Спасибо большое за помощь!