AN24 PING detekce zařízení 1:1 - signalizace přítomnosti na síti (Lua skript) | Chytré zásuvky NETIO ovládané pomocí WiFi a LAN
Tagy: 
User library

AN24 je Lua skript, který detekuje přítomnost IP adresy na síti a tuto detekci signalizuje zapnutím/vypnutím zvoleného výstupu. Lze tak vypnout část pracovních stolů při vypnuté centrální síťové tiskárně, nebo signalizovat že je někdo v kanceláři (IP adresa notebooku nebo telefonu).

 

Můžeme Vám nějak pomoci?

Podporovaná zařízení: NETIO 4All, PowerPDU 4C, NETIO 4

 

Lua skript periodicky s nastavenou periodou kontroluje dostupnost nastavené IP adresy. Na zvolený výstup indikuje zapnutím stav “IP adresa OK” (nebo KO v závislosti na proměnné invertState).

Skript je možné spouštět jen v určitém časovém interval a v určité dny. Například pondělí až pátek 9:00 – 16:00.

 

V nedefinovaném stavu (těsně po startu zařízení) nebo mimo časový interval je výstup uveden do nastavitelného výchozího stavu (defaultState).

 

Aplikace AN24

  • Při odpojení / výpadku serveru se zapne napájení pro záložní systém
  • Když zapnete notebook, automaticky se rozsvítí světlo a zapne klimatizace
  • Když dítě zapne notebook nebo tablet mimo určený vymezený čas, spustí se alarm (vypnete mu WiFi router).

 

Vytvoření pravidla (rule)

Pro vytvoření a spuštění Lua skriptu je nutné následující:

1) Ve webové administraci NETIO 4 v sekci Actions, přidejte pravidlo pomocí tlačítka Create Rule


 

2) Vyplňte následující parametry:

  • Enabled: zaškrtnuto
  • Name: Copy ping state (uživatelsky definovatelné)
  • Description: IP Watchdog (uživatelsky definovatelné)
  • Trigger: System started up
  • Schedule: libovolný (v této konfiguraci nemá vliv na funkci)

 

3) Do pole pro skript v jazyce Lua zkopírujte následující kód:

 
------------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()

 

4) Tvorbu pravidla ukončete stisknutím kliknutím na tlačítko Create Rule v dolní části obrazovky.

 

Princip

  • Skript se spustí po spuštění zařízení NETIO 4x.
  • Zvolený signalizační výstup (output) se nastaví do výchozího stavu (defaultState).
  • Kontrola dostupnosti IP adresy (IP) probíhá pouze ve vybraných dnech (days) a v časovém intervalu nastaveném pomocí proměnných startTime a endTime.
  • Kontrola dostupnosti IP adresy probíhá periodicky. Periodu kontrol je možné nastavit pomocí proměnné period [sekundy].
  • Nastavení stavu výstupu je prováděno periodicky (dojde-li k přepnutí stavu výstupu například pomocí webového rozhraní, výstup se po určité době opět nastaví do stavu ve kterém by podle skriptu měl být).

 

  • Aby došlo k přepnutí výstupu, musí nastavená IP adresa odpovědět/neodpovědět na tolik dotazů ping, kolik je hodnota proměnné validPings.
  • Například, aby došlo k zapnutí výstupu, musí při hodnotě period = 5 a validPings=3 IP adresa pozitivně odpovědět 3x v řadě (během 15 sekund) na dotaz ping.
  • Těsně po startu a mimo nastavený časový interval je výstup uveden do výchozího stavu (defaultState).
  • Pomocí proměnné invertState je pak možné invertovat stav výstupu (zapnutý výstup při nedostupné IP adrese a naopak).

 

Nastavení proměnných

  • IP
    • Nastavuje hlídanou IP adresu
    • Jedná se o řetězec (string), musí se tedy vložit do uvozovek
    • Příklad pro hlídání IP adresy 192.168.101.20: IP = "192.168.101.20"
  • output
    • Nastavuje výstup, na který se bude promítat stav hlídané IP adresy
    • Příklad pro výstup 2: output = 2
  • invertState
    • Proměnná indikující otočení stavu výstupu.
    • Jediné přípustné hodnoty jsou 0 a 1.
    • Je-li hodnota 0 (invertState = 0), dostupnost IP adresy se přímo kopíruje na výstup (dostupná IP adresa - zapnutý výstup, nedostupná IP adresa - vypnutý výstup).
    • Je-li hodnota 1 (invertState = 1), dostupnost IP adresy se kopíruje na výstup obráceně (dostupná IP adresa - vypnutý výstup, nedostupná IP adresa - zapnutý výstup).
  • period
    • Proměnná nastavující periodu jednotlivých kontrol (v sekundách).
    • Příklad pro kontrolu každých 60 sekund: period = 60
  • validPings
    • V této proměnné je možné nastavit, kolik po sobě jdoucích odpovědí musí skript obdržet, aby došlo k přepnutí stavu výstupu (při krátkodobém výpadku nedojde k rychlému přepnutí stavu výstupu).
    • Příklad pro 3 odpovědi v řadě: validPings=3 (pro zapnutí výstupu je potřeba obdržet 3 pozitivní odpovědi na ping za sebou, pro vypnutí výstupu je potřeba obdržet 3 negativní odpovědi na ping za sebou).
  • startTime
    • Proměnná nastavující začátek časového intervalu pro který skript běží.
    • Jedná se o řetězec (string), musí se tedy vložit do uvozovek.
    • Formát proměnné je "hh:mm:ss”.
    • Hodiny je nutné zadávat v rozmezí 0-24.
    • Příklad pro začátek v 8:00 (8:00 a.m): startTime="08:00:00"
  • endTime
    • Proměnná nastavující konec časového intervalu.
    • Jedná se o řetězec (string), musí se tedy vložit do uvozovek.
    • Formát proměnné je "hh:mm:ss”.
    • Hodiny je nutné zadávat v rozmezí 0-24.
    • Pro nonstop aktivaci skriptu stačí nastavit hodnotu endTime stejnou jako startTime (například startTime="00:00:00", endTime="00:00:00")
    • Příklad pro konec v 18:00 (6:00 p.m): endTime="18:00:00"
  • days
    • Proměnná nastavující ve které dny je skript aktivní.
    • Jedná se o řetězec (string), musí se tedy vložit do uvozovek.
    • Má-li skript v daný den běžet, je nutné na jeho místo dát 1, má-li být vypnutý, pro vypnutí v daný den, na jeho místě bude 0.
    • Formát proměnné je "mtwtfss”.
    • Příklad pro zapnutí skriptu po celý týden kromě neděle: days="1111110"
  • defaultState
    • Proměnná nastavující stav, do kterého bude výstup uveden po zapnutí zařízení a poté, co skončí interval, ve kterém je skript aktivní.
    • Jediné přípustné hodnoty jsou 0 (vypnout) a 1 (zapnout).
    • Příklad pro nastavení výchozího stavu na 1: defaultState=1

 

Poznámka k nastavení časového intervalu:

  • Pokud časový interval překračuje půlnoc, má větší prioritu konkrétní den. Například, má-li skript běžet od 18:00 (startTime="18:00:00") do 5:00 (endTime="05:00:00") a pouze ve všední dny (days="1111100"), tak v pátek bude skript aktivován v 18:00 a deaktivován v sobotu v 0:00. Skript se znovu spustí v pondělí v 0:00.

 

Spuštění skriptu

Po nastavení všech parametrů a uložení skriptu je potřeba restartovat chytré zásuvky NETIO. Po opětovném naběhnutí systému se skript spustí a kontrolní výstup se začne nastavovat podle hlídané IP adresy. Pokud se skript nespustí zkontrolujte nastavení.

 

FAQ:

1) Jak nastavit aby skript fungoval 24 hodin, 7 dní v týdnu?

Stačí nastavit proměnné startTime a endTime tak, aby se jejich hodnoty rovnaly (např. startTime="00:00:00", endTime="00:00:00") a proměnnou days: days="1111111".

 

2) Je možné takto kontrolovat více IP adres?

Ano, stačí vytvořit další skript a nastavit příslušné proměnné (je nutné změnit i výstup, který bude indikovat dostupnost IP adresy).

 

 

 

NETIO podporuje různé formáty PING Watchdogu:

 


 

Podporované verze FW:

3.0.0 a vyšší (Archiv firmware

Více o Lua:

https://wiki.netio-products.com

 


 

 

Tato Aplikační poznámka může být použita v:

Smart power socket NETIO

 

NETIO 4

NETIO 4 je PDU modul čtyř zásuvek 230V/8A s připojením do počítačové sítě pomocí LAN a WiFi. Každou ze zásuvek lze individuláně vypnout/zapnout pomocí různých M2M API protokolů. NETIO 4 je unikátní produkt, který najde uplatnění v IT, průmyslu, chytrých domech, multimediálních instalacích atd. Všude, kde potřebujete zásuvky na 230V ovládané z mobilní aplikace, z nějakého programu (M2M API), z uživatelského skriptu (Lua), z funkcí časovač (Scheduler) a automatický restartér (IP WatchDog).

Více o NETIO 4

 

Smart power socket NETIO 4All

 

NETIO 4All

NETIO 4All je PDU modul čtyř elektrických zásuvek 230V/8A s měřením spotřeby na každé zásuvce, který lze připojit do počítačové sítě pomocí LAN a WiFi. Každou ze čtyř zásuvek lze individuálně vypnout/zapnout přes web nebo pomocí různých M2M API protokolů. Na každé zásuvce lze měřit její spotřebu elektřiny (A, W, kWh). Chytré zásuvky NETIO 4All jsou určeny pro aplikace vzdáleného měření a ovládání elektrických zásuvek.

Více o NETIO 4All

 
NETIO PowerPDU 4C is small PDU with power measurement and IEC-320 outputs

 

NETIO PowerPDU 4C

NETIO PowerPDU 4C je malé PDU (Power Distribution Unit) na 110/230V. Každý ze čtyř výstupů IEC-320 C13 lze ovládat samostatně (On / Off / Reset / přepni). Na každém výstupu jsou měřeny elektrické veličiny (A, W, kWh, TPF, V, Hz) s vysokou přesností. Zařízení obsahuje dva LAN porty pro připojení do sítě (vestavěný Ethernet switch). Každý výstup napájení podporuje ZCS (Zero Current Switching), to znamená šetrné ovládání připojených zařízení.

Více o NETIO PowerPDU 4C

 

Zeptejte se na cenu nebo technické parametry

Pro otestování zařízení použijte jméno/heslo demo/demo