Использование системы в различных ситуациях, вопросы программирования сценариев.
Модератор: immortal
-
annakin
- Сообщения: 130
- Зарегистрирован: Пн окт 28, 2013 5:06 pm
- Откуда: Молдова
-
Благодарил (а):
11 раз
-
Поблагодарили:
10 раз
Сообщение
annakin » Пн фев 27, 2017 11:12 pm
Добрый вечер, ребята что я делаю не так ?
Есть кнопка включения бойлера:
Код: Выделить всё
$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 раза
Сообщение
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 раз
Сообщение
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 раза
Сообщение
DimSun75 » Вт фев 28, 2017 12:04 am
Скобочку открывающуюся перед timeAfter забыли
-
annakin
- Сообщения: 130
- Зарегистрирован: Пн окт 28, 2013 5:06 pm
- Откуда: Молдова
-
Благодарил (а):
11 раз
-
Поблагодарили:
10 раз
Сообщение
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 раза
Сообщение
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 раза
Сообщение
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 раз
Сообщение
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 раз
Сообщение
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 раза
Сообщение
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 бойлер включен?