как к одному выключателю привязать два объекта?

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

Модератор: immortal

Unreal
Сообщения: 15
Зарегистрирован: Чт сен 08, 2016 3:01 pm
Благодарил (а): 8 раз
Поблагодарили: 0

как к одному выключателю привязать два объекта?

Сообщение Unreal » Ср сен 21, 2016 9:45 am

Всем доброго дня!
Только начал увлекаться умным домом, программированием не владею, в интернете не нешел решения.
В зале две группы светильников, в меню управления, в разделе освещение/зал/ создал три выключателя: Весь свет, Группа1, Группа2, в объектах Relays/Switch4zal1grupp и Switch5zal2grupp.
Группа1 привязал к Switch4zal1, Группа2 к Switch5zal2grupp соответственно.
Подскажите, пожалуйста, как к выключателю Весь свет привязать два объекта Switch4zal1grupp и Switch5zal2grupp, чтобы включать и выключать весь свет в зале?
Спасибо!
Вложения
1.jpg
1.jpg (284.6 КБ) 7548 просмотров
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: как к одному выключателю привязать два объекта?

Сообщение nick7zmail » Ср сен 21, 2016 11:07 am

Вписать код выключателя. Не видя ваших свойств у объектов - конкретного ничего не подскажу, но в кратце - выбираете не связанный объект, а код, и пишите на включение

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

sg('Switch5zal1grupp.status', 1);
sg('Switch5zal2grupp.status', 1); 
На выключение то же самое только с 0.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Unreal
Сообщения: 15
Зарегистрирован: Чт сен 08, 2016 3:01 pm
Благодарил (а): 8 раз
Поблагодарили: 0

Re: как к одному выключателю привязать два объекта?

Сообщение Unreal » Чт сен 22, 2016 4:07 pm

Спасибо, что ответили.
Но я не понимаю как прописать код на включение и на отключение.
При редактировании объекта Весь свет я могу вписать только один код, либо на включение
sg('Switch4zal1grupp.status', 1);
sg('Switch5zal2grupp.status', 1);
либо на выключение
sg('Switch4zal1grupp.status', 0);
sg('Switch5zal2grupp.status', 0);
и они работают (спасибо), но работают только при включении выключателя Весь свет. Возможно надо добавить какое-то условие?
Вот например в КНОПКЕ я добавлял два состояния вкл и выкл и код на включение и выключение соответственно. А как быть с выключателем? Там могу написать только один код.
Вложения
2.jpg
2.jpg (225.57 КБ) 7466 просмотров
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: как к одному выключателю привязать два объекта?

Сообщение nick7zmail » Чт сен 22, 2016 5:22 pm

Аа...у вас выключатель в меню...на сцене просто можно 2 состояния прописать, и для каждого свой код... а тут будет примерно так

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

if (gg('общий статус')==0) {
sg('Switch4zal1grupp.status', 0);
sg('Switch5zal2grupp.status', 0);
} else {
sg('Switch4zal1grupp.status', 1);
sg('Switch5zal2grupp.status', 1);
}
Привяжите к выключателю любой объект (к примеру SwitchAllzal) и свойство (к примеру status), и впишите вместо "общий статус" "SwitchAllzal.status"
За это сообщение автора nick7zmail поблагодарил:
Unreal (Ср окт 05, 2016 2:07 pm)
Рейтинг: 1.16%
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Unreal
Сообщения: 15
Зарегистрирован: Чт сен 08, 2016 3:01 pm
Благодарил (а): 8 раз
Поблагодарили: 0

Re: как к одному выключателю привязать два объекта?

Сообщение Unreal » Ср окт 05, 2016 2:06 pm

Спасибо большое!!!
Все получилось, принцип понял, уже легче)
Unreal
Сообщения: 15
Зарегистрирован: Чт сен 08, 2016 3:01 pm
Благодарил (а): 8 раз
Поблагодарили: 0

Re: как к одному выключателю привязать два объекта?

Сообщение Unreal » Ср окт 05, 2016 2:39 pm

Понял, но не до конца)
При включении в меню управления группа1 и группа 2 - выключатель весь свет остается выключенным
думаю, надо что-то вроде этого

if (gg('Switch4zal1grupp.status')==1)
И
(gg('Switch5zal2grupp.status')==1)
{sg(SwitchAllzal.status', 1);}
else {
sg('SwitchAllzal.status', 0);
}

но где и как (синтаксис никакой).
TbIKBA
Сообщения: 21
Зарегистрирован: Пн фев 29, 2016 10:21 pm
Благодарил (а): 0
Поблагодарили: 3 раза

Re: как к одному выключателю привязать два объекта?

Сообщение TbIKBA » Ср окт 05, 2016 8:22 pm

Если я правильно понял задачу, то как-то так

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

// Если одна из групп включена, то все выключаем
if ((gg('Switch4zal1grupp.status') ==1) || (gg('Switch5zal2grupp.status')==1) {
sg('Switch4zal1grupp.status', 0);
sg('Switch5zal2grupp.status', 0);
} else {
// иначе ничего не включено, значит все включаем
sg('Switch4zal1grupp.status', 1);
sg('Switch5zal2grupp.status', 1);
} 
Но без понимания того, какое оборудование и объекты вы используете нет гарантии, что физически будет переключаться свет. Вы уверены, что при изменении статуса объекта у вас отправляется что-то на реле?
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: как к одному выключателю привязать два объекта?

Сообщение nick7zmail » Чт окт 06, 2016 6:36 am

"И" это "&&", "ИЛИ" это "||", загуглите "PHP Операторы сравнения" - там еще много интересных функций, которые понадобится вам могут.
Я вам код написал - что если вы щелкаете общим выключателем, он смотрит в каком положении этот общий выключатель, и вне зависимости от того что было включено/выключено до этого - включает или выключает обе группы. Разумеется мой код подразумевает, что выставление свойства, к примеру Switch4zal1grupp.status - включает или выключает соответствующую группу.

PS: не совсем правильно понял вопрос...перечитал - дошло, что вам надо, только товарищ выше почему-то что-то не то написал, как мне кажется. Моя версия

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

// Если одна из групп включена, то все выключаем
if ((gg('Switchzal1group.status') ==1) || (gg('Switchzal2group.status')==1) {
sg('SwitchzalAll.status', 1);
} else {
// иначе ничего не включено, значит все включаем
sg('SwitchzalAll.status', 0);
} 
Перепроверьте имена объектов)) И привязать надо метод к свойствам Switchzal1group.status и Switchzal2group.status
За это сообщение автора nick7zmail поблагодарил:
Unreal (Пт окт 07, 2016 11:06 am)
Рейтинг: 1.16%
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
TbIKBA
Сообщения: 21
Зарегистрирован: Пн фев 29, 2016 10:21 pm
Благодарил (а): 0
Поблагодарили: 3 раза

Re: как к одному выключателю привязать два объекта?

Сообщение TbIKBA » Чт окт 06, 2016 9:56 am

В вашем коде вы включаете свет, если что-то включено и выключаете, если все выключено. Если оба света будут включены, то вы также будете пытаться их включить.
SwitchzalAll, это, как я понимаю, дополнительный объект для отображения статуса выключателя?
У меня был примерно похожий вопрос, и самый простой вариант - либо создать еще один объект, либо дополнительное свойство у обоих объектов. Этот дополнительный объект нужен для привязки в меню, он отображает статус включения для двух обоих объектов - Switch5zal1grupp и Switch5zal2grupp.

Дополню код - если ТС использует объекты класса Relays, то вероятнее всего смены статуса ему недостаточно. Поэтому предполагаю, что код выглядит так:

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

// Если одна из групп включена, то все выключаем
if ((gg('Switch4zal1grupp.status') ==1) || (gg('Switch5zal2grupp.status')==1) {
callMethod('Switch4zal1grupp.turnOff'); // выключаем свет
callMethod('Switch4zal2grupp.turnOff'); 
sg('SwitchzalAll.status, 0); // записываем, что мы все выключили
} else {
// иначе ничего не включено, значит все включаем
callMethod('Switch4zal1grupp.turnOn'); // включаем свет
callMethod('Switch4zal2grupp.turnOn'); 
sg('SwitchzalAll.status, 1); // записываем, что мы все включили
} 
Я не знаю как в реализации базового класса Relays (сейчас нет возможности посмотреть), но в дочернем классе Noolite методы turn/on включают в себя смену статуса у объекта. Если в классе Relays такого нет, то в коде также нужно добавить sg('объект.status', статус-в-зависимости-от-метода);

Но теперь проблема - при включении/выключении света в зале по отдельности для каждого элемента (не из слайдера) SwitchzalAll не будет меняться, а значит информация в нем будет неактуальная. Значит надо переопределять методы turnOn/turnOff для того, чтобы устанавливать SwitchzalAll.status.
В общем ТС, сделайте кнопку, а не слайдер, будет проще.

Сергей, задумайтесь пожалуйста о том, чтобы элемент меню можно было привязать не только к свойству объекта, но и к результату работы метода, тогда решение задачи ТС было бы гораздо проще :)
За это сообщение автора TbIKBA поблагодарил:
Unreal (Пт окт 07, 2016 11:06 am)
Рейтинг: 1.16%
Unreal
Сообщения: 15
Зарегистрирован: Чт сен 08, 2016 3:01 pm
Благодарил (а): 8 раз
Поблагодарили: 0

Re: как к одному выключателю привязать два объекта?

Сообщение Unreal » Пт окт 07, 2016 11:06 am

Сделал так:
в каждую группу добавил

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

if ((gg('Switch4zal1grupp.status') ==1) && (gg('Switch5zal2grupp.status')==1)) {
sg('SwitchAllzal.status', 1);
} else {
sg('SwitchAllzal.status', 0);
}
теперь при включении группа 1 и группа 2 вместе подтягивается и выключатель весь свет тоже в состояние вкл

Всем огромное спасибо, буду экспериментировать дальше)
Ответить