Спасибо за ответы!
else еще просто не дописана!
код одинаковый для turnOn и turnOff для совместимости дальше...
ну и для логики! А так как модули работают по переходу (фронту) 0 -> 1 , то вообще пользуюсь методом switch
А по сути моего вопроса, потом всё заработало! Просто там видимо нюансы когда несколько раз меняешь названия свойств или классов и перепривязываем это например к 1-wire, то не сразу всё начинает работать... ну или у меня так произошло!!!
Тут просто еще всплыло кое-что интересное:
например
если свойство объекта "Лампа.status" связываешь с 1-wire "sensed B" и предположим оно равно=1
(т.е. второй канал DS2406p чувствует, что лампа включена)
а "Лампа.trigOnOff" связываем с 1-wire "pio A" (первый канал DS2406p)
а в настройках "Лампа.status" ставим "Запускать метод при изменении: statusChanged", то
при включении света через комп метод "statusChanged" запускается
два раза, хотя
когда подаёшь
Код: Выделить всё
$this->setProperty("trigOnOff", 0);
$this->setProperty("trigOnOff", 1);
при выполнении первой строчки значение "Лампа.status" не меняется!!!
а вот если выключателем вручную "щёлкнуть", то "statusChanged" запускается один раз, как и должно быть!
пришлось выкручиваться:
метод: turnOff
Код: Выделить всё
$status=$this->getProperty("status");
if ($status) {
// было включено - выключаем
// переключание по фронту 0 -> 1
$this->setProperty("trigOnOff",0);
$this->setProperty("statusFlag",0);
$this->setProperty("trigOnOff",1);
$this->setProperty("statusFlag",1);
}
else {
// было выключено
}
метод: turnOn
Код: Выделить всё
$status=$this->getProperty("status");
if ($status) {
// было включено
}
else {
// было выключено - включаем
// переключание по фронту 0 -> 1
$this->setProperty("trigOnOff",0);
$this->setProperty("statusFlag",0);
$this->setProperty("trigOnOff",1);
$this->setProperty("statusFlag",1);
}
метод: switch
Код: Выделить всё
$status=$this->getProperty("status");
// переключает программа(1)
$this->setProperty("statusWhoTurn",1);
if ($status) {
$this->callMethod('turnOff');
} else {
$this->callMethod('turnOn');
}
метод: statusChanged
Код: Выделить всё
$status=$this->getProperty('status');
$statusFlag=$this->getProperty('statusFlag');
$this->setProperty('updatedTimestamp',time());
$this->setProperty("alive",1);
$ot=$this->object_title;
$alive_timeout=(int)$this->getProperty("aliveTimeOut");
if (!$alive_timeout) {
$alive_timeout=12*60*60; // 12 часов
}
//say($statusFlag);
if (($statusFlag) && ($status)) {
say($ot.' включена');
}
elseif (($statusFlag) && (!$status)) {
say($ot.' выключена');
}
clearTimeOut($ot."_alive");
setTimeOut($ot."_alive","sg('".$ot.".alive',0);",$alive_timeout);
только не бейте за мой плохой "английский", увы давно не писал программульки!!!
З.Ы. Слушайте, а почему у вас вставка кода в форум "раскрашивается" а у меня нет?