Страница 4 из 41

Re: Подключение контроллера MegaD-328

Добавлено: Вс апр 07, 2013 12:49 am
jonyzs
Я так понял что Дмитрий сделал что то хорошее,а как импортировать эти два класса?

Re: Подключение контроллера MegaD-328

Добавлено: Вс апр 07, 2013 1:12 am
Panchez
Внизу объектов пунк - Импортировать класс из файла:

Re: Подключение контроллера MegaD-328

Добавлено: Вс апр 07, 2013 1:21 am
jonyzs
спасибо,ступил конкретно,попробую щас мегу помучать

Re: Подключение контроллера MegaD-328

Добавлено: Вс апр 07, 2013 1:35 am
Panchez
Не за что. Я пока не разобрался, Дмитрий могли бы вы подробнее рассказать про конфигурирование, простой пример.

Re: Подключение контроллера MegaD-328

Добавлено: Вс апр 07, 2013 11:31 am
dimitrystd
Да, сделал небольшой мануал. Я писал код исходя из следующих определений:
- Физическая кнопка и лампочка принадлежат объекту 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

Добавлено: Вс апр 07, 2013 2:10 pm
Panchez
Спасибо Дмитрий, все получилось. Есть еще один вопрос, в megad.php при использовании нескольких контроллеров нужно их прописать так?
$object='MegaD1';
$object='MegaD2';

Re: Подключение контроллера MegaD-328

Добавлено: Вс апр 07, 2013 2:40 pm
dimitrystd
Нет, в вашем коде вы присваиваете последовательно два значения одной переменной. Т.е. в результате останется $object='MegaD2'. Внутренности моего файла:
$op='m';
$object='MegaD1';
$m='statusChanged';
Как я писал, поиск нужного объекта делается в statusChanged. На самом деле абсолютно всёравно имя какого объекта прописано в megad.php. Да, это немного конфузит. Именно поэтому я и писал, что лучше код вынести из statusChanged в отдельный скрипт и дёргать его из megad.php, тогда бы всё было логично.
Посмотрите методы, там в каждом есть строка закоментированная для записи в лог. Я их добавлял для себя пока разбирался как эта штука работает. Жаль что нет нормального дебагера.

Re: Подключение контроллера MegaD-328

Добавлено: Вс апр 07, 2013 2:59 pm
Panchez
У меня сейчас так же. Понял теперь!

Re: Подключение контроллера MegaD-328

Добавлено: Ср апр 10, 2013 8:59 pm
Jager
dimitrystd писал(а):Да, сделал небольшой мануал.
А можно пример "выключателя"?

Re: Подключение контроллера MegaD-328

Добавлено: Пт апр 12, 2013 12:11 am
dimitrystd
Так вроде ж мануал подробный с картинками. Там и ссылка выключателя есть http://127.0.0.1/objects/index.php?object=Storeroom&op=m&m=toggleSwitch. Приатачил последние версии классов. Там мегадевайс отдаёт 1\0 вместо ON\OFF. Это для совместимости с контролами меню.