В продолжение темы. Долго не мог понять почему код у меня не работает, хотя вроде в нем все правильно. OWFS зависает регулярно раз в сутки, перезапуск его скриптами не происходит. Выяснилось что вызовы runScript('au3_owstop'); и runScript('au3_owstart'); не работают....
В итоге у объекта oneWire я сделал дополнительные методы turnOn и turnOff, то есть получилось
oneWire
- checkHealth
turnOff
turnOn
в каждый метод написал код из скрипта, например в oneWire.turnOn - safe_exec('"C:\_majordomo\apps\autoitv3\AutoIt3.exe C:\_majordomo\apps\autoitv3\owstart.au3"');
и уже в метод проверки здоровья системы внес вызов этих двух методов последовательно, вместо вызова скриптов.
было:
Код: Выделить всё
$h1=gg("sHall.health");
$h2=gg("sOutside.health");
$h3=gg("sLiving.health");
$h=($h1+$h2+$h3)/3;
if($h<10 ){
runScript('au3_owstop');
runScript('au3_owstart');
}
$this->setProperty('health',$h);
$this->setProperty('healthColor','lightgray');
if($h==100){$this->setProperty('healthColor','green');}
if($h<100){$this->setProperty('healthColor','blue');}
if($h<75){$this->setProperty('healthColor','blue');}
if($h<50){$this->setProperty('healthColor','orange');}
if($h<25){$this->setProperty('healthColor','red');
say ('Внимание! Датчики температуры не работают!');
}
стало:
Код: Выделить всё
$h1=gg("sHall.health");
$h2=gg("sOutside.health");
$h3=gg("sLiving.health");
$h=($h1+$h2+$h3)/3;
if($h<10 )
{
$this->callMethod('turnOff');
$this->callMethod('turnOn');
}
$this->setProperty('health',$h);
$this->setProperty('healthColor','lightgray');
if($h==100){$this->setProperty('healthColor','green');}
if($h<100){$this->setProperty('healthColor','blue');}
if($h<75){$this->setProperty('healthColor','blue');}
if($h<50){$this->setProperty('healthColor','orange');}
if($h<25){$this->setProperty('healthColor','red');
say ('Внимание! Датчики температуры не работают!');
}
Проверил в ручную вызовы методов, теперь они убивают и запускают OWFS, осталось проверить временем. В моей системе пока 3 температурных датчика, так что переменных стало чуть меньше
И еще
Обратите внимание что из оригинального кода я убрал проверки
Код: Выделить всё
if($h1==100 || $h2==100 || $h3==100 || $h4==100){
$h=100;
}else{
$h=($h1+$h2+$h3+$h4)/4;
}
if($h1==0 && $h2==0 && $h3==0 && $h4==0){
runScript('au3_owstop');
runScript('au3_owstart');
}
первый if по сути должен быть с логическим И, а не ИЛИ, потому что получается что у системы только 2 состояния h=100 или h=0 В таком случае проверка далее и цвет не актуален.
Проверку на перезагрузку я решил сделать по общему здоровью системы, а не по одному датчику