Давайте сначала расскажу идею, потом мои советы чтобы я изменил
1. Вся логика по работе с железом должна быть в классе MegaD. Т.е. если в объектах класса Light появляется код "getURL("
http://127.....", то значит чтото пошло не так
2. Хоть MegaD и знает как работать с объектом и может вкл. и выкл. его, но MegaD всёравно не должен хранить статус. Это потому что статус зависит от бизнеслогики, а она может быть сложной. Другими словами MegaD не должен хранить состояния (stateless). Он просто транслирует твои хотелки в команды протокола MegaD
3. Объект класса Light описывает бизнес логику светильника. Причём свитильник может быть физический, а может как у вас быть гибридный (кнопка которая напрямую не связана с другими светильниками).
Как бы я сделал:
1. Удалил бы метод "switchAlloffLight" из объекта Light. Хотя бы по той причине что он не нужен всем светильникам. Вторая причина - если нужно изменить логику, то вперёд её менять методах switchOn, switchOff
2. Итак идём в обьект TestLight. Ищем именно его метод switchOff
3. Как вам уже правильно подсказали, код метода switchOff должен быть
Код: Выделить всё
callMethod("Bedroom1.switchOff");
callMethod("Bedroom2.switchOff");
callMethod("Bedroom3.switchOff");
callMethod("Bedroom4.switchOff");
Обязательно в настройках метода выбрать - Не выполнять базовый метод. Ничего страшного не произойдёт, но будет бесполезная работа
4. Изменения одного switchOff мало. TestLight как бы виртуальный светильник, поэтому он не может считать своё состояние из MegaD. Поэтому нужно переписать getOutputPortState
5. Идём в метод getOutputPortState светильника TestLight и пишем там чтото вроде
И снова указываем - Не выполнять базовый метод.
6. Теперь поправим кнопку в меню. Там где "Запускать Объект.Метода" надо написать TestLight.switchOff
Вот теперь все объекты выглядят по феншую. И должно работать как из вне, так из вебинтерфейса.
Про железную кнопку которая не работает. Теперь она должна заработать. Цепочка вызовов будет такая:
- megad.php
- TestLight.toggleSwitch
- TestLight.getOutputPortState
- TestLight.switchOff
P.S. Сори если не заработает, пишу по памяти.