Розробка Lua Плагінів
Структура Плагіна
Плагін розробляється як один lua файл, який повертає таблицю, що містить визначення плагіна. 1
Це включає наступні поля:
name
<string> - назва плагіна, має бути унікальною серед усіх плагінівversion
<table> - версія плагіна, має бути таблицею з 3 чисел (наприклад,{0,0,1}
)provided_interfaces
<table> - таблиця інтерфейсів, що надаються плагіном (див.: Визначення Інтерфейсу)overriden_interfaces
<table> - таблиця інтерфейсів, які плагін перевизначає (див.: Перевизначення Інтерфейсу)devices
<table> - прототипи пристроїв, доступні для реєстрації (див.: Визначення Типу Пристрою)
Також таблиця plugin
повинна містити функції зворотного виклику для подій життєвого циклу плагіна 2:
init(reason)
- ініціалізація плагіна, викликається один раз при завантаженні плагінаreason
<string> - причина ініціалізації плагіна
register(uuid)
- плагін зареєстровано, викликається, коли плагін зареєстровано в головній програмі хабаuuid
<string> - UUID плагіна
unregister(topic, payload)
- плагін скасовано реєстрацію, викликається, коли плагін скасовано реєстрацію з головної програми хабаtopic
<string> - MQTT topicpayload
<table> - MQTT payload
reconnect()
- плагіну потрібно перереєструватися, викликається, коли головна програма перезавантажуєтьсяdiscover_devices(topic, payload)
- виявити пристрої, викликається, коли плагін запитується для виявлення пристроївtopic
<string> - MQTT topicpayload
<table> - MQTT payload
device_create(topic, payload)
- викликається, коли запитується створення пристрою, потрібно надіслати запит на створення нового пристроюtopic
<string> - MQTT topicpayload
<table> - MQTT payload
device_created(topic, payload)
- зворотний виклик створеного пристрою, цей зворотний виклик повинен завершити створення пристрою, додавши його до БД або щось іншеtopic
<string> - MQTT topicpayload
<table> - MQTT payload
device_registered(id, name, params)
- пристрій зареєстровано, викликається, коли пристрій зареєстровано в головній програмі хабаid
<string> - ID пристроюname
<string> - назва пристроюparams
<table> - параметри пристрою
device_removed(topic, payload)
- пристрій видалено, викликається, коли пристрій видалено з головної програми хабаtopic
<string> - MQTT topicpayload
<table> - MQTT payload
Визначення Інтерфейсу
Інтерфейс - це набір дій і параметрів, які можуть бути реалізовані пристроєм, це дозволяє визначити можливості пристрою та надати додаткам загальний спосіб розуміння функціональності пристрою.
Інтерфейс визначається як таблиця з наступними полями
actions
<table> - таблиця дій, що надаються інтерфейсом (див.: Визначення Дії)parameters
<table> - таблиця параметрів, що надаються інтерфейсом (див.: Визначення Наданого Параметру)
Визначення Дії
Дія – це функція, яку може викликати програма для виконання певної дії на пристрої.
Кожне визначення дії містить поля name
, description
, arguments
та handler
.
name
<string> - назва дії, має бути унікальною серед усіх дій, що надаються інтерфейсомdescription
<string> - опис діїarguments
<table> - таблиця аргументів, які приймає діяname
<string> - назва аргументу, має бути унікальною серед усіх аргументів, що надаються дієюdescription
<string> - опис аргументуtype
<string> - тип аргументу, може бути одним із:string
,number
,boolean
,json
optional
<boolean> - чи є аргумент необов'язковимposition
<number> - номер аргументу для позиційного виклику дії (починаючи з 0)
handler
<function> - функція обробника дії, повинна приймати 2 аргументи:self
іargs
Визначення Наданого Параметру
Параметр – це значення, яке повідомляється в полі params
пристрою.
Параметр представлений у полі parameters
визначення інтерфейсу як таблиця, де ключ є назвою параметра, а значення є таблицею дескриптора параметра з наступними полями:
type
<string> - тип параметра, може бути одним із:string
,number
,boolean
,json
value
<string> - значення параметра за замовчуванням (?)
Перевизначення Інтерфейсу
Ще не реалізовано
Визначення Типу Пристрою
Тип пристрою - це кращий спосіб полегшити створення пристрою, надаючи прототип пристрою, який можна використовувати для створення нового пристрою.
Визначення типу пристрою складається з полів, які необхідно переслати в хаб у запиті на створення пристрою. Також це надає спосіб відображення додаткових полів в інтерфейсі користувача налаштувань пристрою:
type
<string> - тип пристрою (для доступних типів див.: Типи Пристроїв)role
<string> - роль пристрою (для доступних ролей див.: Ролі Пристрою)icon
<string> - іконка пристроюinterfaces
<table> - список інтерфейсів, реалізованих пристроємparameters
<table> - таблиця параметрів, що надаються пристроєм (див.: Визначення Параметру)
Типи Пристроїв
Див. C-Home API documentation для доступних типів пристроїв та їх вимог.
Ролі Пристрою
Див. C-Home API documentation для доступних ролей пристроїв та їх вимог.
Визначення Параметру
Параметр визначається в полі parameters
визначення типу пристрою як таблиця, де ключ є назвою параметра, а значення є таблицею дескриптора параметра з наступними полями:
type
<string> - тип параметра, може бути одним із:string
,number
,boolean
,json
value
<string> - значення параметра за замовчуваннямrole
<string> - роль параметра для UI (show
абоedit
), якщо поле відсутнє, параметр не відображається в UIlocale
<table> - відображуване ім'я для параметра в UI, є картою імен локалей до значень локалей (актуально лише якщоrole
присутній)
Приклад Плагіна
Ось приклад плагіна, який дозволяє додати комп'ютер як пристрій до Butler Smart Home, він надає спосіб надсилати WOL пакети на комп'ютер.
Додати фактичний код плагіна