Supported devices: NETIO 4All, NETIO PowerPDU 4C, NETIO 4
The Lua script periodically checks the network presence of the configured IP address in specified intervals. The “IP address OK” state (or “KO”, depending on the invertState variable) is indicated by switching on the selected output.
It is possible to run the script in a specified time interval and on specific days only. For example, Monday to Friday 9:00 to 16:00.
When the status is unknown (immediately after powering up the device) or the current time is outside of the specified time interval, the output is set to a specified default state (defaultState).
AN24 applications
- Switching on the power of a back-up system when a server becomes unreachable / goes down
- When a notebook is switched on, the lights and air conditioning are also automatically switched on
- When a child turns on their notebook or tablet outside of an allowed time interval, an alarm is started (or the WiFi router is switched off)
Creating the rule
To create and run the Lua script, do the following:
1) In the Actions section of NETIO 4 web administration, click Create Rule to add a rule.
2) Fill in the following parameters:
- Enabled: checked
- Name: Copy ping state (user-defined)
- Description: IP Watchdog (user-defined)
- Trigger: System started up
- Schedule: any (does not affect the function in this configuration)
3) Copy the following code and paste it into the field for the Lua script:
------------NETIO AN24------------ ------------Section 1------------ local IP = "192.168.101.150" -- watched IP local output = 1 -- signalizing output (1 - 4) local invertState = 1 -- 0 = copy state, 1 = copy reversed state local period = 2 -- period between pings [s] local validPings = 3 -- number of pings for state change local startTime = "08:30:00" local endTime = "16:00:00" local days = "1100000" -- 0 - disabled, 1 - enabled local defaultState = 0 ---------End of Section 1--------- local results = {} for i=1,validPings do results[i] = 0 end local iterator = 1 local lastState = defaultState local setToDefaultState = 0 local startT = (3600*tonumber(startTime:sub(1,2)) + 60*tonumber(startTime:sub(4,5)) + tonumber(startTime:sub(7,8))) local endT = (3600*tonumber(endTime:sub(1,2)) + 60*tonumber(endTime:sub(4,5)) + tonumber(endTime:sub(7,8))) function pingDevice() local day = tonumber(os.date("%w")) -- os.date("%w") returns 0 for Sunday if day == 0 then day = 7 end --check day if days:sub(day,day) == "1" then local stringTime = os.date("%X") local time = (3600*tonumber(stringTime:sub(1,2)) + 60*tonumber(stringTime:sub(4,5)) + tonumber(stringTime:sub(7,8))) --check time if (endT>startT and time>startT and time<endt) and="" or="" time="">=startT)or(time<=endT))) then setToDefaultState=1 ping{address=IP, timeout=5, callback=checkResponse} else if toboolean(setToDefaultState) then setToDefaultState=0 delay(5,function() devices.system.SetOut{output=output,value=defaultState} for i=1,validPings do results[i] = 0 end end) end end end delay(period,function() pingDevice() end) end function checkResponse(o) if o.success then results[iterator] = 1 else results[iterator] = 0 end --check previous results local sum = 0 for i=1,validPings do sum = sum + results[i] end if sum == 0 then devices.system.SetOut{output=output,value=invertState} lastState = invertState elseif sum == validPings then devices.system.SetOut{output=output,value=1-invertState} lastState = 1-invertState else devices.system.SetOut{output=output,value=lastState} end iterator = iterator%validPings + 1 end logf("Watchdog on IP: %s started",IP) devices.system.SetOut{output=output,value=defaultState} pingDevice()
Method of operation
- The script starts when the NETIO 4x device is powered up.
- The specified signaling output (output) is set to the default state (defaultState).
- The reachability check of the specified IP address (IP) only takes place on selected days (days) and during the time interval specified by the startTime and endTime variables.
- The IP reachability is checked periodically. The period of the checks can be specified in the period variable (in seconds).
- The output state is also set periodically (if the output state is changed e.g. through the web interface, after a certain time the output is switched back to the state determined by the script).
- The output state is switched if the specified IP address responds (or fails to respond) to the number of ping requests specified in the validPings variable.
- For example, if period = 5 and validPings=3, the IP address must correctly respond to 3 ping requests in a row (in the course of 15 seconds) for the output to be switched on.
- After power up and outside of the specified time interval, the output is set to the specified default state (defaultState).
- With the invertState variable, it is possible to invert the output state (switched on when the IP is unavailable, and vice versa).
Setting the variables
-
IP
- Specifies the IP address to monitor.
- It is a string, so it must be enclosed in double quotes.
- For example, to monitor 192.168.101.20: IP = "192.168.101.20"
-
output
- Specifies the output that signals the state of the monitored IP address.
- Example – to specify output 2: output = 2
-
invertState
- Specifies whether or not the output state is inverted.
- Allowed values are 0 and 1.
- When the value is 0 (invertState = 0), the output is not inverted (reachable IP address = output switched on, unreachable IP address = output switched off).
- When the value is 1 (invertState = 1), the output is inverted (reachable IP address = output switched off, unreachable IP address = output switched on).
-
period
- Specifies the period between successive checks (in seconds).
- Example – to check every 60 seconds: period = 60
-
validPings
- Specifies the number of successive replies that need to be received in order to switch the output state (this is to avoid rapid switching in case of brief temporary outages).
- Example – to require 3 replies in a row: validPings=3 (to switch the output on, the script must receive 3 positive replies to ping requests in a row; to switch the output off, there must be 3 negative responses in a row).
-
startTime
- Specifies the start of the time interval when the script should run.
- It is a string, so it must be enclosed in double quotes.
- The format is "hh:mm:ss".
- Hours must be specified from 0 to 24.
- Example – to specify the start time of 8:00 (8:00am): startTime="08:00:00"
-
endTime
- Specifies the end of the time interval.
- It is a string, so it must be enclosed in double quotes.
- The format is "hh:mm:ss".
- Hours must be specified from 0 to 24.
- For the script to run non-stop, specify an endTime equal to startTime (e.g. startTime="00:00:00", endTime="00:00:00")
- Example – to specify the end time of 18:00 (6:00pm): endTime="18:00:00"
-
days
- Specifies the days of week when the script should be active.
- It is a string, so it must be enclosed in double quotes.
- A 1 at the position corresponding to a particular day means that the script should be active on that day; a 0 means that the script should be inactive.
- The format is "mtwtfss".
- Example – to run the script every day of week except on Sundays: days="1111110"
-
defaultState
- Specifies the default state. The output is switched to this state when the device is powered up and outside of the specified interval of activity.
- Allowed values are 0 (switch off) and 1 (switch on).
- Example – to set the default state to 1: defaultState=1
Note on the time interval settings:
- If the time interval crosses midnight, the day-of-week parameter takes priority. For example, if the script is set to run from 18:00 (startTime="18:00:00") to 5 am (endTime="05:00:00") on workdays only (days="1111100"), on Friday it will be activated at 18:00 (6 pm) and deactivated at 0:00 (midnight between Friday and Saturday). Then, it will be activated again on Monday at 0:00 (midnight).
Starting the script
After configuring all the parameters and saving the script, the NETIO smart sockets device needs to be restarted. After the system reboots, the script is started and the signaling output starts indicating the status of the monitored IP address. If the script doesn’t start, please check the settings.
FAQ:
1) How can I configure the script to run 24/7?
Set the startTime and endTime variables to the same value (such as startTime="00:00:00", endTime="00:00:00") and the days variable as follows: days="1111111".
2) Is it possible to monitor several IP addresses?
Yes, create a new script and set the variables (remember to also select another output to indicate the status).
NETIO supports various PING Watchdog formats:
- AN25: IP WatchDog 2 from 10 – list of monitored devices, failure indication by power output (Lua script)
- AN09: IP WatchDog 1 of 2 - PING based failure detection for 1 or 2 devices (Lua script)
- WatchDog function
Supported FW versions:
3.0.0 and higher (Firmware archive)
More about Lua:
https://wiki.netio-products.com
This Application Note is compatible with:
|
NETIO 4NETIO 4 is smart power socket (smart power strip) with four 230V/8A sockets, connected to LAN and WiFi. Each of the four power sockets can be individually switched on/off using various M2M API protocols. NETIO 4 is a unique product designed for IT, industry, smart homes, multimedia installations and other applications. Use the product whenever you need 230V sockets controlled by a mobile app, by a computer program (via M2M API) or by a custom script (Lua), and featuring a timer (Scheduler) or auto reboot functionality (IP WatchDog).
|
|
NETIO 4AllNETIO 4All is a PDU module featuring four 230V/8A power sockets with consumption metering for each socket as well as LAN and WiFi connectivity. Each of the four sockets can be individually switched on/off over the Web or using various M2M API protocols. Electricity consumption (A, W, kWh) can be measured at each power socket. NETIO 4All smart sockets are designed for remote measurement and control of electrical sockets. Use the product whenever you need 230V sockets controlled by a mobile app, by a computer program (via M2M API) or by a custom script (Lua) that runs directly in the NETIO 4All smart socket device. |
|
NETIO PowerPDU 4CNETIO PowerPDU 4C is a small 110/230V PDU (Power Distribution Unit). Each of the four IEC-320 C13 outlets can be independently controlled (On / Off / Reset / Toggle). Electrical parameters (A, W, kWh, TPF, V, Hz) are measured with high accuracy at each outlet. The device features two LAN ports (and a built-in Ethernet switch) for connecting to a LAN. Each power output supports ZCS (Zero Current Switching) to protect the connected equipment. |