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

Включение бойлера при условии...

Добавлено: Пн фев 27, 2017 11:12 pm
annakin
Добрый вечер, ребята что я делаю не так ?
Есть кнопка включения бойлера:
КнопкаПоказать
Объект бойлера:Показать
Метод switchПоказать

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

$status=$this->getProperty("status");
if ($status) {
 $this->callMethod('turnOff');
} else {
 $this->callMethod('turnOn');
}
Теперь сама проблема:
В Gps_track есть действие когда я вхожу в зону дома и выхожу из зоны дома, нужно включить бойлер но при условии если время вхождения в зону является больше 16:00 если нет то ничего не делаем.
Так вот я создал действия Entering там нужно указать сценарии для его выполнения.
Я создал сценарии и указал его в Entering:
Сценарии для бойлера.Показать

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

if (timeBetween(getGlobal('ThisComputer.timeNow'),getGlobal('Boler.TimeOn'))) {
 if (getGlobal('Boler.status')) {
 setGlobal("Boler.status",0);
 callMethod('Boler.switch');
 } 

} else {
 if (!getGlobal('Boler.status')) {
 setGlobal("Boler.status",1);
 callMethod('Boler.switch');
Но я что-то делаю не так, направьте на путь истинный.

Re: Включение бойлера при условии...

Добавлено: Пн фев 27, 2017 11:32 pm
DimSun75
А что в итоге не работает-то?

и наверное все-таки не timeBetween(getGlobal('ThisComputer.timeNow'),getGlobal('Boler.TimeOn')), а timeAfter(getGlobal('Boler.TimeOn'))

Re: Включение бойлера при условии...

Добавлено: Пн фев 27, 2017 11:47 pm
annakin
DimSun75 писал(а):А что в итоге не работает-то?

и наверное все-таки не timeBetween(getGlobal('ThisComputer.timeNow'),getGlobal('Boler.TimeOn')), а timeAfter(getGlobal('Boler.TimeOn'))
Сделал как вы написали:
СпойлерПоказать

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

if timeAfter(getGlobal('Boler.TimeOn')) {
 if (getGlobal('Boler.status')) {
 setGlobal("Boler.status",0);
 callMethod('Boler.switch');
 } 

} else {
 if (!getGlobal('Boler.status')) {
 setGlobal("Boler.status",1);
 callMethod('Boler.switch');
 
Шас вот что пишет при попытке вручную вызвать сценарии:
СпойлерПоказать

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

Parse error: syntax error, unexpected 'timeAfter' (T_STRING), expecting '(' in /var/www/modules/scripts/scripts.class.php(139) : eval()'d code on line 1

Re: Включение бойлера при условии...

Добавлено: Вт фев 28, 2017 12:04 am
DimSun75
Скобочку открывающуюся перед timeAfter забыли ;)

Re: Включение бойлера при условии...

Добавлено: Вт фев 28, 2017 9:40 pm
annakin
DimSun75 писал(а):Скобочку открывающуюся перед timeAfter забыли ;)
Друг прости я не силён в ПХП, подскажи где я допустил ошибку с скобками, потому что ругается вот так:

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

Parse error: syntax error, unexpected '{' in /var/www/modules/scripts/scripts.class.php(139) : eval()'d code on line 1
Вот код:
СпойлерПоказать

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

if (timeAfter(getGlobal('Boler.TimeOn')){
    if (getGlobal('Boler.status'))
    { 
        setGlobal("Boler.status",0);
        callMethod('Boler.switch');
    }
else
{
        
    if (!getGlobal('Boler.status')){
    setGlobal("Boler.status",1);
    callMethod('Boler.switch');
 }
}
}
Всё ошибку нашли))
Пасиб земляку Сергею

Re: Включение бойлера при условии...

Добавлено: Вт фев 28, 2017 9:48 pm
DimSun75

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

if (timeAfter(getGlobal('Boler.TimeOn'))
{
    if (getGlobal('Boler.status'))
    { 
        setGlobal("Boler.status",0);
        callMethod('Boler.switch');
    }
}
else
{
        
    if (!getGlobal('Boler.status'))
   {
       setGlobal("Boler.status",1);
       callMethod('Boler.switch');
   }
}


Re: Включение бойлера при условии...

Добавлено: Вт фев 28, 2017 9:56 pm
DimSun75
А это точно логика, какая нужна? По этому коду получается так: если время больше Boler.TimeOn, тогда если Boler.status==1, то делаем Boler.status=0. А если время меньше Boler.TimeOn, тогда если Boler.status == 0 делаем Boler.status=1. Так должно быть?

Re: Включение бойлера при условии...

Добавлено: Вт фев 28, 2017 10:10 pm
annakin
DimSun75 писал(а):

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

if (timeAfter(getGlobal('Boler.TimeOn'))
{
    if (getGlobal('Boler.status'))
    { 
        setGlobal("Boler.status",0);
        callMethod('Boler.switch');
    }
}
else
{
        
    if (!getGlobal('Boler.status'))
   {
       setGlobal("Boler.status",1);
       callMethod('Boler.switch');
   }
}

 
Вот правильный код:
СпойлерПоказать

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

if (timeAfter(getGlobal('Boler.TimeOn')))
{
    if (getGlobal('Boler.status')){ 
        setGlobal("Boler.status",0);
        callMethod('Boler.switch');
    }else{
        
    if (!getGlobal('Boler.status')){
    setGlobal("Boler.status",1);
    callMethod('Boler.switch');
}
}
}
 
Шас работает супер, если время ниже указного то Алиса не включит бойлер если выше то включит при условии если я буду в радиусе 500 метров от дома.

Re: Включение бойлера при условии...

Добавлено: Вт фев 28, 2017 10:13 pm
annakin
DimSun75 писал(а):А это точно логика, какая нужна? По этому коду получается так: если время больше Boler.TimeOn, тогда если Boler.status==1, то делаем Boler.status=0. А если время меньше Boler.TimeOn, тогда если Boler.status == 0 делаем Boler.status=1. Так должно быть?
Ну я шас задал время и запустил сценарии и он отработал как положено.
Я только учу ПХП поэтому могу сделать гдето ошибку в Логике ))

Re: Включение бойлера при условии...

Добавлено: Вт фев 28, 2017 10:15 pm
DimSun75
annakin писал(а): Вот правильный код:
СпойлерПоказать

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

if (timeAfter(getGlobal('Boler.TimeOn')))
{
    if (getGlobal('Boler.status')){ 
        setGlobal("Boler.status",0);
        callMethod('Boler.switch');
    }else{
        
    if (!getGlobal('Boler.status')){
    setGlobal("Boler.status",1);
    callMethod('Boler.switch');
}
}
}
 
Шас работает супер, если время ниже указного то Алиса не включит бойлер если выше то включит при условии если я буду в радиусе 500 метров от дома.

Хм, сдается мне, что если время ниже указанного, и бойлер включен (ну так сложилось), то Алиса его выключит. При какой значении Boler.status бойлер включен?