Общие сведения
Cкрипт homed.lua
это подключаемый модуль языка Lua, упрощающий написание скриптов для автоматизации работы сервисов HOMEd. Для работы скрипта необходимо наличие допонительных модулей:
lua-cjson
lua-mosquitto
Загрузить актуальную версию скрипта можно на GitHub.
Функции модуля
tickEvent(timestamp)
Функция, которая вызывается каждую секунду в процессе работы скрипта. Аргументы:
timestamp
- текущая метка времени в формате Unix Time
deviceEvent(service, device, endpoint, data)
Функция, которая вызывается каждый раз, когда скрипт получает сообщение с данными от устройства. Аргументы:
service
- сервис, например "zigbee"
device
- адрес или имя устройства (если в конфигурации включен параметр names
)
endpoint
- номер конечной точки, от которого поступили данные (nil, если это "одноканальное" устройство)
data
- таблица с данными, соответствует содержимому JSON-объекта в MQTT-сообщении
deviceRequest(service, device, endpoint, data)
Отправка запроса для управления устройством. Аргументы:
service
- сервис, например "zigbee"
device
- адрес или имя устройства
endpoint
- номер конечной точки, от которого поступили данные (nil, если это "одноканальное" устройство)
data
- таблица с данными, соответствует содержимому JSON-объекта в MQTT-сообщении
setHost(value)
Настройка адреса MQTT-брокера. Аргументы:
value
- адрес, по умолчанию localhost
setPort(value)
Настройка номера порта MQTT-брокера. Аргументы:
value
- номер порта, по умолчанию 1883
setUsername(value)
Настройка имени пользователя для подключения к MQTT-брокеру. Аргументы:
value
- имя пользователя, по умолчанию отсутствует (nil)
setPassword(value)
Настройка пароля для подключения к MQTT-брокеру. Аргументы:
value
- пароль, по умолчанию отсутствует (nil)
setPrefix(value)
Настройка корневого MQTT-топика. Аргументы:
value
- корневой топик, по умолчанию homed
start()
Запуск подключения к брокеру и таймера, вызывающего функцию tickEvent
.
stop()
Отключение от брокера и остановка таймера, вызывающего функцию tickEvent
.
Использование скриптов
Чтобы написать скрипт автоматизации, нужно создать папку, в которой будет находиться скрипт, например:
$ mkdir -p /opt/lua
В эту папку необходимо скачать файл модуля:
$ wget -O /opt/lua/homed.lua https://raw.githubusercontent.com/u236/homed-lua-module/main/homed.lua
И создать файл скрипта, например, /opt/lua/my.lua
. Пример скрипта:
homed = require('homed')
homed.tickEvent = function(timestamp)
-- данный пример изменяет состояние реле каждые 5 минут
time = os.date('*t')
if time.sec == 0 and time.min % 5 == 0 then
homed.deviceRequest('zigbee', 'my relay', nil, {status = 'toggle'})
end
end
homed.deviceEvent = function(service, device, endpoint, data)
-- данный пример включает реле, если обранужено нажатие на кнопку
if (device == 'my button' and data['action'] == 'singleClick') then
homed.deviceRequest('zigbee', 'my relay', nil, {status = 'on'})
end
end
homed.start()
Запуск скрипта:
$ lua /opt/lua/my.lua