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

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

annakin
Сообщения: 130
Зарегистрирован: Пн окт 28, 2013 5:06 pm
Откуда: Молдова
Благодарил (а): 11 раз
Поблагодарили: 10 раз

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

Сообщение annakin » Пн фев 27, 2017 11:12 pm

Добрый вечер, ребята что я делаю не так ?
Есть кнопка включения бойлера:
КнопкаПоказать
Объект бойлера:Показать
Метод 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');
Но я что-то делаю не так, направьте на путь истинный.
Server: Raspberry Pi 3 B+
OS: Rasbian
DimSun75
Сообщения: 318
Зарегистрирован: Вс янв 01, 2017 8:32 pm
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 44 раза

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

Сообщение DimSun75 » Пн фев 27, 2017 11:32 pm

А что в итоге не работает-то?

и наверное все-таки не timeBetween(getGlobal('ThisComputer.timeNow'),getGlobal('Boler.TimeOn')), а timeAfter(getGlobal('Boler.TimeOn'))
annakin
Сообщения: 130
Зарегистрирован: Пн окт 28, 2013 5:06 pm
Откуда: Молдова
Благодарил (а): 11 раз
Поблагодарили: 10 раз

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

Сообщение annakin » Пн фев 27, 2017 11:47 pm

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
Server: Raspberry Pi 3 B+
OS: Rasbian
DimSun75
Сообщения: 318
Зарегистрирован: Вс янв 01, 2017 8:32 pm
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 44 раза

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

Сообщение DimSun75 » Вт фев 28, 2017 12:04 am

Скобочку открывающуюся перед timeAfter забыли ;)
annakin
Сообщения: 130
Зарегистрирован: Пн окт 28, 2013 5:06 pm
Откуда: Молдова
Благодарил (а): 11 раз
Поблагодарили: 10 раз

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

Сообщение annakin » Вт фев 28, 2017 9:40 pm

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');
 }
}
}
Всё ошибку нашли))
Пасиб земляку Сергею
Последний раз редактировалось annakin Вт фев 28, 2017 9:56 pm, всего редактировалось 1 раз.
Server: Raspberry Pi 3 B+
OS: Rasbian
DimSun75
Сообщения: 318
Зарегистрирован: Вс янв 01, 2017 8:32 pm
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 44 раза

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

Сообщение DimSun75 » Вт фев 28, 2017 9:48 pm

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

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');
   }
}

DimSun75
Сообщения: 318
Зарегистрирован: Вс янв 01, 2017 8:32 pm
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 44 раза

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

Сообщение DimSun75 » Вт фев 28, 2017 9:56 pm

А это точно логика, какая нужна? По этому коду получается так: если время больше Boler.TimeOn, тогда если Boler.status==1, то делаем Boler.status=0. А если время меньше Boler.TimeOn, тогда если Boler.status == 0 делаем Boler.status=1. Так должно быть?
annakin
Сообщения: 130
Зарегистрирован: Пн окт 28, 2013 5:06 pm
Откуда: Молдова
Благодарил (а): 11 раз
Поблагодарили: 10 раз

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

Сообщение annakin » Вт фев 28, 2017 10:10 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');
   }
}

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

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

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 метров от дома.
Server: Raspberry Pi 3 B+
OS: Rasbian
annakin
Сообщения: 130
Зарегистрирован: Пн окт 28, 2013 5:06 pm
Откуда: Молдова
Благодарил (а): 11 раз
Поблагодарили: 10 раз

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

Сообщение annakin » Вт фев 28, 2017 10:13 pm

DimSun75 писал(а):А это точно логика, какая нужна? По этому коду получается так: если время больше Boler.TimeOn, тогда если Boler.status==1, то делаем Boler.status=0. А если время меньше Boler.TimeOn, тогда если Boler.status == 0 делаем Boler.status=1. Так должно быть?
Ну я шас задал время и запустил сценарии и он отработал как положено.
Я только учу ПХП поэтому могу сделать гдето ошибку в Логике ))
Server: Raspberry Pi 3 B+
OS: Rasbian
DimSun75
Сообщения: 318
Зарегистрирован: Вс янв 01, 2017 8:32 pm
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 44 раза

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

Сообщение DimSun75 » Вт фев 28, 2017 10:15 pm

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 бойлер включен?
Ответить