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

Материал из HOMEd Wiki
мНет описания правки
 
мНет описания правки
 
Строка 22: Строка 22:
<code>device</code> - адрес или имя устройства (если в конфигурации включен параметр <code>names</code>)<br>
<code>device</code> - адрес или имя устройства (если в конфигурации включен параметр <code>names</code>)<br>
<code>endpoint</code> - номер конечной точки, от которого поступили данные (nil, если это "одноканальное" устройство)<br>
<code>endpoint</code> - номер конечной точки, от которого поступили данные (nil, если это "одноканальное" устройство)<br>
<code>data</code> - таблица с данными, соответствует содержимому JSON-объекта в MQTT
<code>data</code> - таблица с данными, соответствует содержимому JSON-объекта в MQTT-сообщении
----
----


Строка 30: Строка 30:
<code>device</code> - адрес или имя устройства<br>
<code>device</code> - адрес или имя устройства<br>
<code>endpoint</code> - номер конечной точки, от которого поступили данные (nil, если это "одноканальное" устройство)<br>
<code>endpoint</code> - номер конечной точки, от которого поступили данные (nil, если это "одноканальное" устройство)<br>
<code>data</code> - таблица с данными, соответствует содержимому JSON-объекта в MQTT
<code>data</code> - таблица с данными, соответствует содержимому JSON-объекта в MQTT-сообщении
----
----


=== <code>setHost(value)</code> ===  
=== <code>setHost(value)</code> ===  
Настройка адреса MQTT брокера. Аргументы:<br>
Настройка адреса MQTT-брокера. Аргументы:<br>
<code class="value">value</code> - адрес, по умолчанию localhost
<code class="value">value</code> - адрес, по умолчанию localhost
----
----


=== <code>setPort(value)</code> ===  
=== <code>setPort(value)</code> ===  
Настройка номера порта MQTT брокера. Аргументы:<br>
Настройка номера порта MQTT-брокера. Аргументы:<br>
<code class="value">value</code> - номер порта, по умолчанию 1883
<code class="value">value</code> - номер порта, по умолчанию 1883
----
----


=== <code>setUsername(value)</code> ===  
=== <code>setUsername(value)</code> ===  
Настройка имени пользователя для подключения к MQTT брокеру. Аргументы:<br>
Настройка имени пользователя для подключения к MQTT-брокеру. Аргументы:<br>
<code class="value">value</code> - имя пользователя, по умолчанию отсутствует (nil)
<code class="value">value</code> - имя пользователя, по умолчанию отсутствует (nil)
----
----


=== <code>setPassword(value)</code> ===  
=== <code>setPassword(value)</code> ===  
Настройка пароля для подключения к MQTT брокеру. Аргументы:<br>
Настройка пароля для подключения к MQTT-брокеру. Аргументы:<br>
<code class="value">value</code> - пароль, по умолчанию отсутствует (nil)
<code class="value">value</code> - пароль, по умолчанию отсутствует (nil)
----
----


=== <code>setPrefix(value)</code> ===  
=== <code>setPrefix(value)</code> ===  
Настройка корневого топика mqtt. Аргументы:<br>
Настройка корневого MQTT-топика. Аргументы:<br>
<code class="value">value</code> - корневой топик, по умолчанию homed
<code class="value">value</code> - корневой топик, по умолчанию homed
----
----

Текущая версия от 07:32, 20 марта 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