Подключение контроллера MegaD-328
Модератор: immortal
-
- Сообщения: 86
- Зарегистрирован: Чт фев 21, 2013 11:35 pm
- Благодарил (а): 4 раза
- Поблагодарили: 2 раза
Re: Подключение контроллера MegaD-328
Я так понял что Дмитрий сделал что то хорошее,а как импортировать эти два класса?
Re: Подключение контроллера MegaD-328
Внизу объектов пунк - Импортировать класс из файла:
С уважением
Александр.
Александр.
Re: Подключение контроллера MegaD-328
Не за что. Я пока не разобрался, Дмитрий могли бы вы подробнее рассказать про конфигурирование, простой пример.
С уважением
Александр.
Александр.
-
- Сообщения: 80
- Зарегистрирован: Пн апр 01, 2013 10:20 pm
- Откуда: Днепропетровск
- Благодарил (а): 7 раз
- Поблагодарили: 3 раза
Re: Подключение контроллера MegaD-328
Да, сделал небольшой мануал. Я писал код исходя из следующих определений:
- Физическая кнопка и лампочка принадлежат объекту Light
- Вся работа с железякой MegaD должна быть в отдельном "слое" (клас Megadevice)
- Решение включить или не включить принимается в Light
Итак начнём настройку
1. Настраиваем объекты Megadevice. У меня в квартире будет 3 физических девайса, поэтому надо создать 3 объекта и настроить каждый
настройка каждого
2. Пишем код для методов
2.1. statusChanged - Вызывается из megad.php когда произошло событие на input. По хорошему этот метод надо убрать из класа Megadevice, потому как он должен быть статический. Но система поддерживает только экземплярные методы. Его можно перенести в скрипты. Я пока решил оставить тут. Не буду вставлять код, там есть коментарии как работает:
- Найти конкретный объект девайса по айпи
- Найти Light у которого входящий девайс и порт совпадают
- Вызвать switchPressed. В этом методе Light будет принимать решение
2.2 Метод getOutput. Ему на вход нужна параметры:
- 'output' - номер порта
- 'propertyName' - имя свойства лампочки, к примеру Storeroom.enabled или Playroom.enabled. Мне этот параметр не нравится, но методы не умеют возвращать значения. Надо было крутить или через глобальные переменные, или сразу сказать в какое свойство положить значение. Лучше бы докрутить чтоб методы могли возвращать значение.
2.3 Метод setOutput - тоже 2 параметра 'output', 'value'. К примеру 8, 1 (включить 8 порт). Проверяем (свет должен вкл или выкл)
http://127.0.0.1/objects/index.php?object=MegaD1&op=m&m=setOutput&output=8&value=2
3. На каждую комнату заводим объекты Light
настройка каждого
- В данном примере кнопка и лампочки подключены к одному мегадевайсу, поэтому значения inputDevice и outputDevice совпадают. Но будет у меня случай когда не совпадают
- inputPort где висит кнопка на мегадевайсе
- outputPort где висит лампочка на мегадевайсе
4. Пишем код для методов
Я думаю из описания ясно кто что делает, я опишу только последовательность вызовов
- switchPressed - Базовая реализация очень простая, вызывает toggleSwitch. Некоторые наследники будут менять её
- toggleSwitch - Перечитывает текущее состояние порта на девайсе, чтоб знать наверняка, и потом либо switchOn или switchOff
- switchOn - Просто дёргает MegaD1.setOutput. Ожидается что каждая комната сможет добавить логику и сюда тоже
- В объекте Storeroom метод switchOn перекрыт. Новый метод ставит ещё таймер на выключение (забывают в кладовке тушить свет)
Примеры:
http://127.0.0.1/objects/index.php?object=Storeroom&op=m&m=switchPressed
http://127.0.0.1/objects/index.php?object=Storeroom&op=m&m=toggleSwitch
p.s. К администрации. Нельзя прикрепить больше 3х картинок. Пришлось выкладывать на гугл. Но не факт что я когда то удалю картинки. Можно немного поднять ограничение по кол-ву, но зарезать по размеру например?
- Физическая кнопка и лампочка принадлежат объекту Light
- Вся работа с железякой MegaD должна быть в отдельном "слое" (клас Megadevice)
- Решение включить или не включить принимается в Light
Итак начнём настройку
1. Настраиваем объекты Megadevice. У меня в квартире будет 3 физических девайса, поэтому надо создать 3 объекта и настроить каждый
настройка каждого
2. Пишем код для методов
2.1. statusChanged - Вызывается из megad.php когда произошло событие на input. По хорошему этот метод надо убрать из класа Megadevice, потому как он должен быть статический. Но система поддерживает только экземплярные методы. Его можно перенести в скрипты. Я пока решил оставить тут. Не буду вставлять код, там есть коментарии как работает:
- Найти конкретный объект девайса по айпи
- Найти Light у которого входящий девайс и порт совпадают
- Вызвать switchPressed. В этом методе Light будет принимать решение
2.2 Метод getOutput. Ему на вход нужна параметры:
- 'output' - номер порта
- 'propertyName' - имя свойства лампочки, к примеру Storeroom.enabled или Playroom.enabled. Мне этот параметр не нравится, но методы не умеют возвращать значения. Надо было крутить или через глобальные переменные, или сразу сказать в какое свойство положить значение. Лучше бы докрутить чтоб методы могли возвращать значение.
2.3 Метод setOutput - тоже 2 параметра 'output', 'value'. К примеру 8, 1 (включить 8 порт). Проверяем (свет должен вкл или выкл)
http://127.0.0.1/objects/index.php?object=MegaD1&op=m&m=setOutput&output=8&value=2
3. На каждую комнату заводим объекты Light
настройка каждого
- В данном примере кнопка и лампочки подключены к одному мегадевайсу, поэтому значения inputDevice и outputDevice совпадают. Но будет у меня случай когда не совпадают
- inputPort где висит кнопка на мегадевайсе
- outputPort где висит лампочка на мегадевайсе
4. Пишем код для методов
Я думаю из описания ясно кто что делает, я опишу только последовательность вызовов
- switchPressed - Базовая реализация очень простая, вызывает toggleSwitch. Некоторые наследники будут менять её
- toggleSwitch - Перечитывает текущее состояние порта на девайсе, чтоб знать наверняка, и потом либо switchOn или switchOff
- switchOn - Просто дёргает MegaD1.setOutput. Ожидается что каждая комната сможет добавить логику и сюда тоже
- В объекте Storeroom метод switchOn перекрыт. Новый метод ставит ещё таймер на выключение (забывают в кладовке тушить свет)
Примеры:
http://127.0.0.1/objects/index.php?object=Storeroom&op=m&m=switchPressed
http://127.0.0.1/objects/index.php?object=Storeroom&op=m&m=toggleSwitch
p.s. К администрации. Нельзя прикрепить больше 3х картинок. Пришлось выкладывать на гугл. Но не факт что я когда то удалю картинки. Можно немного поднять ограничение по кол-ву, но зарезать по размеру например?
Re: Подключение контроллера MegaD-328
Спасибо Дмитрий, все получилось. Есть еще один вопрос, в megad.php при использовании нескольких контроллеров нужно их прописать так?
$object='MegaD1';
$object='MegaD2';
$object='MegaD1';
$object='MegaD2';
С уважением
Александр.
Александр.
-
- Сообщения: 80
- Зарегистрирован: Пн апр 01, 2013 10:20 pm
- Откуда: Днепропетровск
- Благодарил (а): 7 раз
- Поблагодарили: 3 раза
Re: Подключение контроллера MegaD-328
Нет, в вашем коде вы присваиваете последовательно два значения одной переменной. Т.е. в результате останется $object='MegaD2'. Внутренности моего файла:
Посмотрите методы, там в каждом есть строка закоментированная для записи в лог. Я их добавлял для себя пока разбирался как эта штука работает. Жаль что нет нормального дебагера.
Как я писал, поиск нужного объекта делается в statusChanged. На самом деле абсолютно всёравно имя какого объекта прописано в megad.php. Да, это немного конфузит. Именно поэтому я и писал, что лучше код вынести из statusChanged в отдельный скрипт и дёргать его из megad.php, тогда бы всё было логично.$op='m';
$object='MegaD1';
$m='statusChanged';
Посмотрите методы, там в каждом есть строка закоментированная для записи в лог. Я их добавлял для себя пока разбирался как эта штука работает. Жаль что нет нормального дебагера.
-
- Сообщения: 708
- Зарегистрирован: Сб авг 18, 2012 10:21 am
- Благодарил (а): 26 раз
- Поблагодарили: 183 раза
Re: Подключение контроллера MegaD-328
А можно пример "выключателя"?dimitrystd писал(а):Да, сделал небольшой мануал.
-
- Сообщения: 80
- Зарегистрирован: Пн апр 01, 2013 10:20 pm
- Откуда: Днепропетровск
- Благодарил (а): 7 раз
- Поблагодарили: 3 раза
Re: Подключение контроллера MegaD-328
Так вроде ж мануал подробный с картинками. Там и ссылка выключателя есть http://127.0.0.1/objects/index.php?object=Storeroom&op=m&m=toggleSwitch. Приатачил последние версии классов. Там мегадевайс отдаёт 1\0 вместо ON\OFF. Это для совместимости с контролами меню.
- Вложения
-
- Objects.zip
- (2.69 КБ) 364 скачивания