Bagir писал(а):Все, уже вижу солнышко сквозь тучи!
Если я правильно понял:
Vit писал(а):в котором выполняются какие то действия именно для этого объекта
Тут можно указать простые варианты, к примеру выключатель - лампочка.
Vit писал(а):тем самым будет вызываться родительский метод (т.е. метод класса) в котором можете указывать все что угодно
Ну а тут варианты по сложней. Допустим Датчик движения + фотореле = лампочка. Например, как Вы писали:
Код: Выделить всё
if (свойство объекта А ==5 && свойство объекта B ==3) {
запустить мой скрипт
}
не правильно)
Bagir писал(а):Все, уже вижу солнышко сквозь тучи!
Если я правильно понял:
Vit писал(а):в котором выполняются какие то действия именно для этого объекта
Тут можно указать простые варианты, к примеру выключатель - лампочка.
тут нет разницы что вы включаете или считываете...
"простые варианты" кода имеется ввиду просто сообщить что что то включилось или выключилось, ну и присвоить какие то значения каким то объектам. хотя это не догма..
в любом из методов можно выполнить любой код либо скрипт...
пример, надеюсь поймете логику
класс датчиков движения и объекты (т.е. сами датчики)
при сработке например датчика движения в кабинете выполняется метод этого объекта
в котором прописан код
который обозначает то что система голосом скажет "движение в кабинете"
ниже указано что после выполнения этого кода вызвать родительский метод
т.е. метод родительсткого класса inhouseMovementSensors
в котором прописан код общий для всех объектов этого класса (для всех датчиков движения)
этот код уже сложнее
Код: Выделить всё
$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 (!$last_register || ((time()-$last_register)>2*60*60)) { // срабатывало более 2х часов назад
if (timeBetween('06:00', '12:00')) { // движение замечено утром
runScript('morningGreeting'); // запускаем скрипт "доброе утро"
}
if (timeBetween('16:00', '01:00')) { // движение замечено вечером
runScript('eveningGreeting'); // запускаем скрипт "возвращение домой"
}
}
}
в нем уже выполняются какие то условия вызываются скрипты
надеюсь немного понятней стало...
написал почти пошагово