"Простые устройства" были задуманы для того, чтобы снять с пользователя заботы по базовой интеграции типового оборудования в систему.
Пока поддерживаются такие типы устройств:
* Управляемое реле/Выключатель
* Диммер
* Датчик движения
* Кнопка
* Датчик температуры
* Датчик влажности
Для устройств автоматически создаются классы, свойства, методы, объекты (не надо заморачиваться вообще что это такое). Так же, через интерфейс работы с простыми устройствами можно их добавить в меню и на сцены. Кроме того, простые устройства и их функции появляются в интерфейсе программирования blockly и могут быть использованы в любых сценариях.
Ничего отдельно программировать не нужно, но при желании можно -- добавлять новые свойства классов, править код методов и т.п. При обновлении системы будет обновляться только базовая структура, базовый код и представление.
В дальнейшем планируется расширение набора устройств, их функций, внешнего представления, а так же интеграция других модулей, связанных с оборудованием.
1. Через интерфейс пользователя. Аналог использования связанных объектов/свойств.
Возьмём к примеру как я это делал для модуля noolite. После добавления устройства в систему есть закладка Данные -- в этой закладке таблица данных, у каждой записи которой есть поля LINKED_OBJECT, LINKED_PROPERTY и LINKED_METHOD. В шаблон вывода данных на этой закладке (файл noodevices_edit_data.html) добавляем следующую конструкцию для каждой записи:
[#if SDEVICE_TYPE!=""#]
[#module name="devices" action="link" type="<#PROPERTIES.SDEVICE_TYPE#>" source_table="noocommands" source_table_id="<#PROPERTIES.ID#>" linked_object="<#PROPERTIES.LINKED_OBJECT#>"#]
[#else#]
[#endif#]
внешне оно будет выглядеть вот так:
http://c2n.me/3G99vCK.png
или так, если устройство привязано:
http://c2n.me/3G99Ccb.png
значение SDEVICE_TYPE должно быть заполнено самим модулем, т.к. типы возможных простых устройств и типы данных не будут совпадать.
для заполнения SDEVICE_TYPE я добавил такой код в файл noodevices_edit.inc.php:
http://c2n.me/3G98eOX.png
т.е. в зависимости от того, какой тип данных я выставляю возможный тип простого устройства.
простые устройства могут быть следующих типов:
relay, dimmer, button, sensor_temp, sensor_humidity
если для данных нельзя подобрать устройство, то ставим SDEVICE_TYPE пустым, чтобы закрыть возможность привязки устройства к этим данным. если мы считаем, что пользователь сам сможет выбрать, какой тип устройства лучше всего подходит, то можем ставить любое значение, например any -- тогда окно привязки к устройству откроется, но тип устройства не будет выбран заранее
2. Второй способ привязки к простым устройствам это программный. Этот способ можно использовать, если в процессе сканирования вы можете сами определить тип устройства и не хотите напрягать пользователя лишним действием, т.е. создаём простое устройство автоматически. Пример кода:
include_once(DIR_MODULES.'devices/devices.class.php');
$dev=new devices();
$device_type='relay'; // тип устройства (см выше допустимые типы)
$options=array(); // опции добавления
$options['TABLE']='noocommands'; // таблица, куда потом запишется LINKED_OBJECT и LINKED_PROPERTY
$options['TABLE_ID']=22; // ID записи в вышеназванной таблице (запись уже должна быть создана такая)
$options['LOCATION_ID']=1; // ID расположения (не обязательно)
$options['LINKED_OBJECT']='NooSwitch1'; // название связанного объекта, который создастся автоматически, если такого нет (не обязательно)
$options['TITLE']='MyDevice'; // название устройства (не обязательно)
$options['ADD_MENU']=1; // добавлять интерфейс работы с устройством в меню (не обязательно)
$options['ADD_SCENE']=1; // добавлять интерфейс работы с устройством на сцену (не обязательно)
$result=$dev->addDevice($device_type, $options); // добавляем устройство -- возвращает 1 в случае успешного добавления
вышеописаный код надо выполнять для каждого автоматически найденного устройства