Объекты это универсальная сущность для хранения и обмена данными между подсистемами шлюза, например между скриптами.
Доступ к объекту осуществляется по его имени.
Просмотреть текущие объекты можно на странице Objects (/objects).
Используются для синхронизации данных между несколькими шлюзами, при изменении объекта на одном, он так же изенится и на остальных шлюзах.
Данный функционал в разработке.
Шлюз может слать уведомления в MQTT при изменении объекта, это включается через 3 параметр obj.setOpt().
Шлюз будет публиковать в топик вида: zgwXXXX/obj/OBJ_NAME
Для изменения объекта необходимо отправить значение объекта в топик zgwXXXX/obj/OBJ_NAME/set
Для запроса текущего значения объекта необходимо отправить пустой топик zgwXXXX/obj/OBJ_NAME/get
В данный момент объекты хранятся только в памяти и не сохраняются в флеш-память.
Для инициализации начальными значениями, можно использовать файл init.lua.
Можно установить объекту тип данных:
- STR - Строки (используется по умолчанию)
- BOOL - Бинарный (true / false)
- INT - Целое число
- FLOAT - Дробное число
Получение значения (текущего и предыдущего) объекта и проверка его существования:
local current_status, previous_status = obj.get("security.status")
if (current_status == nil) then current_status = 0 end
Установка значения объекта:
obj.set(ObjectName, ObjectValue)
Удаление объекта:
obj.remove(ObjectName)
Для изменения типа переменной сохраняемого значения можно сделать так:
obj.setOpt("security.status", "INT")
Включение уведомления об изменении в MQTT:
obj.setOpt("security.status", "INT", true)
Получение времени события в секундах lua list (curr,prev):
local curr, prev = obj.getTime("security.status")
print("Время предыдущего изменения:" .. prev .. ", И последнего: " .. curr .. " длительность события: " .. curr-prev)
Привязка к объекту скрипта, который запускается по изменению:
obj.onChange('room1.temperature', 'room1_trv_calibration.lua')
При вызове скрипта привязанного к объекту вызывается событие с типом SCRIPT_EVENT_TYPE_OBJ_CHANGE и значением 2 (с версии 2022.01.13d11).
Так же передается имя объекта, его текущее и предыдущее значение.
if Event.Type == 2 then
local Name = Event.Obj.Name
local Value = Event.Obj.Value
local OldValue = Event.Obj.OldValue
...
end