The SLS gateway has automation support based on the scripting programming language lua. The script editor is located in the menu Actions -> Scripts. To write a script, you need to create a new file, for example, with the name script.lua and enter the lua code into it.
Script stdout using the print command displays information on the screen of the Scripts page and in the system log of the gateway. You can run the test script by pressing the RUN button.
- Running the script when the device state changes. On the Zigbee tab, go to the device settings and specify the script file name (prefix / optional) in the SimpleBind window.
- Running the script on time. Expected.
- Running the script on a mqtt subscription. Expected.
- Running the script when calling the http api. Expected.
Call the host server using the GET method at path http.get(host, path)
Example switching gpio 12 for wifi-iot firmware
http.get ("192.168.1.34", "/gpio?st=2&pin=12")
Example switching gpio for MegaD when pressing btn_2 of the Jager remote control once
if Event.State.Value == "btn_2_single" then
http.get("192.168.2.200", "/objects/?object=MegaD1-12&op=m&m=switch")
end
Request for information from a third-party resource
local Response = http.get("wtfismyip.com", "/text")
print ("My IP:"..Response)
Getting device status value from cache zigbee.value("ieeard", "temperature")
- We get the temperature value and round to the nearest
temp = zigbee.value("0x00158D0001A2D2FE", "temperature")
temp = math.floor(temp)
print ("Current temperature:"..temp.."C °")
Instead of the device address, you can use FriendlyName (including Cyrillic), or the current device address on the network (0x9EC8).
- We get the temperature value and round to the nearest
temp = zigbee.value("sensor in the room", "temperature")
temp = math.floor(temp)
print ("Current temperature:"..temp.."C °")
Invokes the GET command on the cover. Used to manually read states from devices. Example: zigbee.get("lamp1", "brightness")
Setting device value zigbee.set(Ident, StateName, StateValue)
An example script that, when the lumi.sensor_switch switch button is pressed, turns on the lamp_1 lighting:
if zigbee.value("lumi.sensor_switch", "click") == "single" then
- toggle lamp
current_brightness = zigbee.value("lamp_1", "brightness")
if current_brightness == 0 then
zigbee.set("lamp_1", "brightness", 255)
else
zigbee.set("lamp_1", "brightness", 0)
end
- print current temperature
temp = zigbee.value("lumi.weather", "temperature")
print("Current temperature:" .. temp)
end
The Event structure, for example, allows you to use the same script for different states or devices.
Possible use cases: Event.Name - Script file name Event.nwkAddr - nwkAddr of the device that called the script Event.ieeeAddr - ieeeAddr of the device that called the script Event.FriendlyName - FriendlyName of the device that called the script Event.State.Name - The name of the state that called the script Event.State.Value - New state value
Example script for turning on the light:
if Event.State.Value == "single" then
value = 255
elseif Event.State.Value == "double" then
value = 0
else
return
end
zigbee.set("lamp_1", "brightness", value)
os.time() returns Unix time.
obj.get(ObjectName)/obj.set(ObjectName,ObjectValue) for saving and receiving an object for data exchange between scripts
mqtt.pub(topic, payload) publishes the payload value to the topic topic on the MQTT server.