помогите с кодом

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

Модератор: immortal

Ged
Сообщения: 105
Зарегистрирован: Чт окт 20, 2016 10:59 pm
Благодарил (а): 1 раз
Поблагодарили: 7 раз

Re: помогите с кодом

Сообщение Ged » Ср мар 01, 2017 9:15 am

Так и пришлось смотреть, как же у меня сделано...

Всю нашу магию (т.е. то что мы должны сделать) заносим в метод refresh.
Привязываем чтобы при изменении статуса вызывался метод refresh.

После этого, все управление объектом и в скриптах и в меню, сводится к изменению свойства статус.
В скриптах соответственно использование

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

getGlobal('Svet_3_spaln.status',1);
или

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

getGlobal('Svet_3_spaln.status',0);
Можно и через методы

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

callMethod("Svet_3_spaln.turnOn");
Работать будет в любом случае.

Соответственно, если вы прикрутили статус в переменную с названием "sostojanie", то через нее.
getGlobal('Svet_3_spaln.sostojanie');

Метод switch, служит только для переключение через методы turnOn и turnOff.
А иначе, действительно. При изменении статуса, запускаем метод и изменяем статус. Соответственно, кони бегают по кругу.

4 метода:
refresh - Получаем статус и вызываем магию. Получается, что у наследников нужно делать свою обработку этого блока

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

$status=$this->getProperty("status");
if ($status) {
 getURL('http://192.168.2.10/gpio?st=1&pin=12', 0);
} else {
 getURL('http://192.168.2.10/gpio?st=1&pin=12', 1);
}

switch - В зависимости от статуса вызываем противоположный метод turnOff/turnOn

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

$status=$this->getProperty("status");
if ($status) {
 $this->callMethod('turnOff');
} else {
 $this->callMethod('turnOn');
}

turnOff - Устанавливаем статус и вызываем метод refresh

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

$this->setProperty("status",0);
$this->callMethod("refresh");

turnOn - Устанавливаем статус и вызываем метод refresh

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

$this->setProperty("status",1);
$this->callMethod("refresh");
P.S. чой-то с постами я накосячил.... :-(
Последний раз редактировалось Ged Ср мар 01, 2017 9:40 am, всего редактировалось 1 раз.
DimSun75
Сообщения: 318
Зарегистрирован: Вс янв 01, 2017 8:32 pm
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 44 раза

Re: помогите с кодом

Сообщение DimSun75 » Ср мар 01, 2017 9:39 am

Можно и так. Только во втором getURL st=0 и в конце не 1, а 0. Чтобы каждый раз не переписывать метод refresh, добавляем в класс свойства IP и pin. Метод refresh такой:

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

$status=$this->getProperty("status");
if ($status) {
 getURL('http://'.$this -> getProperty("IP").'/gpio?st=1&pin='.$this -> getProperty("pin"), 0);
} else {
 getURL('http://'.$this -> getProperty("IP").'/gpio?st=0&pin='.$this -> getProperty("pin"), 0);
}
Теперь в каждом новом объекте нужно прописать адрес в IP и номер gpio в pin.
Ged
Сообщения: 105
Зарегистрирован: Чт окт 20, 2016 10:59 pm
Благодарил (а): 1 раз
Поблагодарили: 7 раз

Re: помогите с кодом

Сообщение Ged » Ср мар 01, 2017 9:44 am

DimSun75 писал(а):Можно и так. Только во втором getURL st=0 и в конце не 1, а 0. Чтобы каждый раз не переписывать метод refresh, добавляем в класс свойства IP и pin. Метод refresh такой:

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

$status=$this->getProperty("status");
if ($status) {
 getURL('http://'.$this -> getProperty("IP").'/gpio?st=1&pin='.$this -> getProperty("pin"), 0);
} else {
 getURL('http://'.$this -> getProperty("IP").'/gpio?st=0&pin='.$this -> getProperty("pin"), 0);
}
 
Теперь в каждом новом объекте нужно прописать адрес в IP и номер gpio в pin.
Уху. Чой-то как обычно, я написал много и сумбурно. Попробую коротко.

Вся наша чудо магия только в методе refresh, который привязываем к изменению свойства статус. Стандартные метода не трогаем.
Управление производим через изменение статуса в нужное состояние.

P.S. Метод switch полезен в скриптах помигай лампочкой. :-)
vitar78
Сообщения: 128
Зарегистрирован: Пт июл 15, 2016 3:12 am
Благодарил (а): 6 раз
Поблагодарили: 2 раза

Re: помогите с кодом

Сообщение vitar78 » Ср мар 01, 2017 10:10 am

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

$status=$this->getProperty("status");
if ($status) {
 getURL('http://192.168.2.10/gpio?st=1&pin=12', 0);
} else {
 getURL('http://192.168.2.10/gpio?st=1&pin=12', 1);
} 
 
Я извеняюсь но не является ли ошибкой в обоих запросах gpio?st=1 и не надо ли в нижнем заменить на gpio?st=0
Ged
Сообщения: 105
Зарегистрирован: Чт окт 20, 2016 10:59 pm
Благодарил (а): 1 раз
Поблагодарили: 7 раз

Re: помогите с кодом

Сообщение Ged » Ср мар 01, 2017 10:15 am

vitar78 писал(а): Я извеняюсь но не является ли ошибкой в обоих запросах gpio?st=1 и не надо ли в нижнем заменить на gpio?st=0
Естественно, я перепутал и поменял не то.
Вместо gpio?st=1, я поменял зачем-то в конце...

Ну и краше конечно будет:

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

getURL('http://192.168.2.10/gpio?st='.$state.'&pin=12', 0);
И можно еще раз прочитать комментарий DimSun75 viewtopic.php?f=4&t=3769&start=10#p47112
DimSun75
Сообщения: 318
Зарегистрирован: Вс янв 01, 2017 8:32 pm
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 44 раза

Re: помогите с кодом

Сообщение DimSun75 » Ср мар 01, 2017 10:18 am

vitar78 писал(а):

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

$status=$this->getProperty("status");
if ($status) {
 getURL('http://192.168.2.10/gpio?st=1&pin=12', 0);
} else {
 getURL('http://192.168.2.10/gpio?st=1&pin=12', 1);
} 
Я извеняюсь но не является ли ошибкой в обоих запросах gpio?st=1 и не надо ли в нижнем заменить на gpio?st=0
Да, там ошибка, второй getURL должен быть:

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

getURL('http://192.168.2.10/gpio?st=0&pin=12', 0);
 
Ну или как я писал
vitar78
Сообщения: 128
Зарегистрирован: Пт июл 15, 2016 3:12 am
Благодарил (а): 6 раз
Поблагодарили: 2 раза

Re: помогите с кодом

Сообщение vitar78 » Ср мар 01, 2017 1:35 pm

Ged писал(а):
DimSun75 писал(а):Можно и так. Только во втором getURL st=0 и в конце не 1, а 0. Чтобы каждый раз не переписывать метод refresh, добавляем в класс свойства IP и pin. Метод refresh такой:

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

$status=$this->getProperty("status");
if ($status) {
 getURL('http://'.$this -> getProperty("IP").'/gpio?st=1&pin='.$this -> getProperty("pin"), 0);
} else {
 getURL('http://'.$this -> getProperty("IP").'/gpio?st=0&pin='.$this -> getProperty("pin"), 0);
}
Теперь в каждом новом объекте нужно прописать адрес в IP и номер gpio в pin.
Уху. Чой-то как обычно, я написал много и сумбурно. Попробую коротко.

Вся наша чудо магия только в методе refresh, который привязываем к изменению свойства статус. Стандартные метода не трогаем.
Управление производим через изменение статуса в нужное состояние.

P.S. Метод switch полезен в скриптах помигай лампочкой. :-)
а откуда брать свойство pin, esp его не передаёт, или указывать вручную в свойствах?
DimSun75
Сообщения: 318
Зарегистрирован: Вс янв 01, 2017 8:32 pm
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 44 раза

Re: помогите с кодом

Сообщение DimSun75 » Ср мар 01, 2017 1:37 pm

vitar78 писал(а): а откуда брать свойство pin, esp его не передаёт, или указывать вручную в свойствах?
В ручную конечно.
vitar78
Сообщения: 128
Зарегистрирован: Пт июл 15, 2016 3:12 am
Благодарил (а): 6 раз
Поблагодарили: 2 раза

Re: помогите с кодом

Сообщение vitar78 » Ср мар 01, 2017 3:01 pm

DimSun75 писал(а):
vitar78 писал(а): а откуда брать свойство pin, esp его не передаёт, или указывать вручную в свойствах?
В ручную конечно.
а для чего тогда указывать в свойствах если можно прописать сразу в коде ?, или есть какой то практический смысл в этом
DimSun75
Сообщения: 318
Зарегистрирован: Вс янв 01, 2017 8:32 pm
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 44 раза

Re: помогите с кодом

Сообщение DimSun75 » Ср мар 01, 2017 3:04 pm

vitar78 писал(а):
DimSun75 писал(а):
vitar78 писал(а): а откуда брать свойство pin, esp его не передаёт, или указывать вручную в свойствах?
В ручную конечно.
а для чего тогда указывать в свойствах если можно прописать сразу в коде ?, или есть какой то практический смысл в этом
Если один такой объект, то смысла нет. Если несколько, то тогда для каждого объекта нужно править код. В моем случае, создаете новый объект и просто прописываете свойства
Ответить