Lua: различия между версиями

Материал из HOMEd Wiki
мНет описания правки
(нет различий)

Версия от 11:40, 19 марта 2024

HOMEd > Lua

Общие сведения

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