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

Материал из HOMEd Wiki
мНет описания правки
мНет описания правки
Строка 1: Строка 1:
{{DISPLAYTITLE:Lua}}
{{DISPLAYTITLE:Lua}}
{{Breadcrumbs|Lua}}
{{Breadcrumbs|Lua}}
{{Warning|ВНИМАНИЕ! Информация на этой странице сильно устарела!}}


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

Версия от 10:15, 29 января 2025

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