AN25 Detekce výpadku zařízení - 1 z 10 IP adres neodpovídá na PING (Lua skript) | Chytré zásuvky NETIO ovládané pomocí WiFi a LAN
Tagy: 
User library

Potřebujete nějak indikovat že jedno z deseti LAN zařízení nefunguje nebo není dostupné? Není důležité jestli vypadl kabel, připojení na WiFi nebo vypadla UPSka. Když jedno nebo více z deseti zařízení neodpovídá na PING, Lua script popsaný v téhle aplikační poznámce rozsvítí červené varovné světlo...

 

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

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

 

Dále popsaný Lua skript každých 15 sekund stále dokola kontroluje všechny zadané IP adresy podle seznamu. U každé adresy hlídá jestli nedošlo k výpadku a když tak na jak dlouho. Při delším výpadku než 60 sekund skript zapne výstup signalizující výpadek.

  • Na výstup lze připojit varovné světlo, nebo sirénu. Výhodou je, že červené světlo může být umístěno například na recepci kde je služba 24/7.
  • Skriptů lze spustit několik a hlídat tak různé skupiny IT zařízení.
  • Hlídaných zařízení nemusí být 10, může jich být 5 stejně jako 20.
  • Alarmový stav lze nastavit tak, aby se zobrazil (rozsvícením výstupu) až když vypadne 1 nebo 2 nebo 3 zařízení ze seznamu.
  • Alarmový stav lze indikovat také odesláním emailu.

 

Poznámka:      Detekce toho, zda zařízení fungují nebo ne, se provádí pomocí funkce PING. Některá zařízení mohou mít zakázánu odpověď na PING i když fungují. Některé IP kamery mohou například na PING odpovídat (Device OK), ale nemusí jim fungovat kódování obrazu.

 

IP WatchDog od NETIO products

NETIO podporuje IP WatchDog několika různými způsoby:

1) Funkce IP WatchDog v nastavení zařízení (web rozhraní). Detekuje odpověď od jedné IP adresy. Lze nastavit na každý výstup samostatně.
 

2) AN09: IP Watchdog 1 ze 2 - detekce dostupnosti zařízení na LAN pomocí pingu (Lua skript). Detekuje jako stav OK odpověď alespoň jedné ze dvou IP adres. Lze použít pro detekci připojení do internetu, protože záložní adresa (například google server 8.8.8.8) by měla fungovat stále.
 

3) AN24: PING detekce zařízení 1:1 - signalizace přítomnosti na síti (Lua skript). Detekuje a signalizuje přítomnost/nepřítomnost zařízení na síti. Vhodné například pro detekci zapnutí síťové tiskárny a odpojení části pracovních stolů při jejím vypnutí.
 

4) AN25: Detekce výpadku zařízení - 1 z 10 IP adres neodpovídá na PING (Lua skript). Tohle je jednoduchá funkce pro IT oddělení pro signalizaci sepnutí červeného světla. Světlo je rozsvítí, když 1 nebo více IP spojení z vložené tabulky (10 cílových adres) nefunguje po nějakou dobu (počet opakování).

 

Potřebujete IP WatchDog v jiném nasazení? Kontaktujte naší podporu.

 

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: IP Watchdog 1 from 10(uživatelsky definovatelné)
  • Description: Watchdog for 10 IP devices (uživatelsky definovatelné)
  • Trigger: System started up
  • Schedule: Always

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

 
------------NETIO AN25------------

------------Section 1------------
local IPs = -- Watched IP addresses
{
"192.168.101.185",
"192.168.101.136",
"192.168.1.155",
"192.168.1.25",
"192.168.0.36",
"192.168.2.56"  
}

local period = 5 -- period between pings [s]
local disconectedIPs = 1 -- number of maximum disconnected IP addresses
local maxMissedCycles = 2 -- number of maximum missed ping cycles
local controlOutput = 1 -- output for signalization (1-4)
local actionOK = 1 -- number of action for OK state (0-5)
local actionNoOK = 4 -- number of action for no OK state (0-5)
local periodAction = 1 -- periodical execution of actionNoOK (0/1)
local shortTimeMs = 2000 -- time for actions 2 and 3 [ms]
---------End of Section 1---------

local iterator = 1
local deadIPs = {}
local missedCycles = 0
local actionExecuted = false

function doAction()
  log("Doing NO OK action")
  setOutput(controlOutput,actionNoOK)
end

function doOKAction()
  log("Doing OK action")
  setOutput(controlOutput,actionOK)
end


function setOutput(output,action)
  if action == 0 then -- turn off
    devices.system.SetOut{output = output, value = false}
  elseif action == 1 then -- turn on
    devices.system.SetOut{output = output, value = true}
  elseif action == 2 then -- short off
    devices.system.SetOut{output = output, value = false}
    milliDelay(shortTimeMs,function() short(output,true) end)
  elseif action == 3 then -- short on
    devices.system.SetOut{output = output, value = true}
    milliDelay(shortTimeMs,function() short(output,false) end)   
  elseif action == 4 then -- toggle
    if devices.system["output" ..output.. "_state"] == 'on' then 
      devices.system.SetOut{output=output,value=false}
    else
      devices.system.SetOut{output=output, value=true}
    end
  elseif action == 5 then
    -- do nothing
  end
end


function pingIP()
  local IP = IPs[iterator]
  ping{address=IP, timeout=5, callback=checkResult}
end

function checkResult(o)
  if not o.success then
    logf("IP:%s is not OK",IPs[iterator])
    table.insert(deadIPs, IPs[iterator]) 
  end
  if iterator == #IPs then
    log("Last IP, checking dead IPs")
    checkCounters()
  end
  iterator = (iterator)%#IPs + 1
  delay(period,function() pingIP() end)
end  


function checkCounters()
  local reportString = "{"
  for i=1,#deadIPs,1 do 
    reportString = reportString .. deadIPs[i]
    if i<#deadIPs then
      reportString = reportString .. ", "
    end
  end
  reportString = reportString .. "}"
  logf("Dead IPs : %d - " .. reportString,#deadIPs)
  if #deadIPs >= disconectedIPs then
    log("Number of dead IPs exceeded limit.")
    missedCycles = missedCycles + 1
    logf("Missed cycles: %d/%d",missedCycles,maxMissedCycles)
    if missedCycles >= maxMissedCycles then
      log("Missed cycles limit exceeded")
      if (not actionExecuted) or (toboolean(periodAction)) then
        actionExecuted = true
        doAction()
      end
    end
  else
    missedCycles = 0
    if actionExecuted then
      log("Number of disconnected IPs is now in limit, excecuting OK action")
      actionExecuted = false
      doOKAction()
    end
  end
  deadIPs = {}
end

pingIP()

 

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

 

 

Princip

  • Skript periodicky kontroluje všechny zadané IP adresy (IPs).
  • Pokud v rámci jednoho kontrolního kola neodpovídá alespoň takový počet IP adres, který je uložen v proměnné disconectedIPs skript zvýší hodnotu proměnné counter.
  • Pokud hodnota proměnné counter přesáhne maximální povolený počet výpadků (maxMissedCycles), vykoná se akce (actionNoOK) s kontrolním výstupem (controlOutput).
  • Dojde-li v průběhu k obnovení připojení, proměnná counter se zresetuje na 0 a s kontrolním výstupem se vykoná akce actionOK.
  • Pomocí proměnné periodAction je možné nastavit, zdali bude akce actionNoOK vykonávána, po překročení hranice, v každém cyklu (periodAction = 1) nebo se vykoná jen jednou (periodAction = 0).
     
  • Na následujícím obrázku je ukázán princip fungování skriptu. Modrá čára znázorňuje počet nedostupných IP adres, červená čára znázorňuje maximální počet nedostupných IP adres (disconectedIPs) . Bílá kolečka indikují, kolikrát byla již červená čára překročena. Hodota maxMissedCycles je nastavena na 3 a proměnná periodAction na 1. První akce actionNoOK se vykoná v 9.cyklu a bude se vykonávat až do 11.cyklu. Ve 12.cyklu je již počet nedostupných IP adres pod hranicí disconectedIPs, vykoná se tedy akce actionOK.

 

 

Nastavení proměnných

  • IPs
    • Tabulka, která obsahuje seznam Stringů s kontrolovanými IP adresami.
    • Tabulka začíná a končí složenými závorkami, jednotlivé IP adresy musí být napsány v uvozovkách a odděleny čárkou.
    • IP adresy mohou být uvedeny i pomocí DNS ("www.google.com"), nicméně při výpadku DNS serveru bude tato IP adresa považována za neaktivní, i v případě, že je v pořádku.
       
    • Příklad pro 10 různých IP adres:

local IPs = {

"192.168.101.186",

"192.168.101.3"

"192.168.101.21",

"22.128.12.252",

"157.25.2.5",

"32.21.51.32",

"51.211.56.25",

"128.11.18.8",

"135.51.18.105",

"143.38.15.202" 

}

 

  • period
    • Tato proměnná slouží pro nastavení doby mezi ping kontrolami jednotlivých IP adres (v sekundách).
    • Minimální hodnota je 1.
    • Při nastavení periody na 5 sekund a 10 IP adesách budou všechny zkontrolovány za 50 sekund (doba jednoho cyklu).
    • Příklad pro nastaven periody na 5 sekund: period = 5
       
  • disconectedIPs
    • Minimální počet IP adres, které musí vypadnout, aby mohlo dojít ke spuštění akce.
    • Příklad pro spuštění akce při dlouhodobém výpadku 2 a více IP adres: disconectedIPs = 2
       
  • maxMissedCycles
    • Počet cyklů po který musí být nedostupný alespoň takový počet IP adres, který je nastaven v proměnné disconectedIPs. Pokud bude počet cyklů větší, vykoná se actionNoOK.
    • Příklad pro spuštění akce po 4 nedostupných cyklech: maxMissedCycles = 4 (maximální počet cyklů po který se akce nespustí je 4, akce se tedy spustí pokud ani v 5.cyklu bude nedostupný nastavený počet IP adres)
       
  • controlOutput
    • Proměnná nastavující výstup, který bude sloužit jako signalizační výstup (1 - 4)
    • Příklad pro nastavení výstupu 2: controlOutput = 2
       
  • actionOK
    • Proměnná ve které je možné nastavit akci, která se s kontrolním výstupem stane pokud počet nedostupných IP adres klesne pod hranici disconectedIPs.
    • Akce:
      •  0 - vypnutí výstupu
      •  1 - zapnutí výstupu
      •  2 - “Short off”, nastaví výstup do hodnoty 0, čeká čas v proměnné shortTimeMs  a nastaví výstup do hodnoty 1
      •  3 - “Short on”, nastaví výstup do hodnoty 1, čeká čas v proměnné shortTimeMs  a nastaví výstup do hodnoty 0
      •  4 - “toggle”, přepne stav výstupu na opačnou hodnotu (pokud byl zapnutý, pak ho vypne a naopak)
         
  • actionNoOK
    • Proměnná ve které je možné nastavit akci, která se s kontrolním výstupem stane pokud počet nedostupných IP adres dosáhne hranice disconectedIPs.
    • Akce mají stejná čísla jako u actionOK.
       
  • periodAction
    • Proměnná nastavující zdali se bude actionNoOK vykonávat vždy při překročení hranice maxMissedCycles nebo jen při prvním překročení.
       
  • shortTimeMs
    •  Nastavuje dobu v milisekundách, za kterou se výstup vypne/zapne v akci 2 respektive 3
    •  Minimální hodnota je 100ms.
    •  Příklad pro změnu stavu výstupu za 2 sekundy: shortTimeMs = 2000

 

Spuštění skriptu

Po nastavení všech parametrů a uložení skriptu je potřeba restartovat chytré zásuvky NETIO 4x. Po opětovném naběhnutí systému se skript spustí a začne kontrola definovaných IP adres.

V Logu najdete:

  • Výpadek jednoho ze zařízení s časem kdy se tak stalo
  • Aktivaci alarmu (zapnutí / vypnutí výstupu)
  • Kolik IP adres neodpovídá ve kterém čase

     

FAQ:

1) Je možné hlídat více než 10 IP adres?

Ano, v proměnné IPs můžete mít kolik IP adres potřebujete. V základním nastavení je jich 10 z ilustrativních důvodů. Více IP adres prodlužuje reakční dobu, pro kontrolu každé IP adresy počítejte cca 3-5 sekund.

 

2) Je možné v rámci reakce na výpadek zaslat email?

Jistě, je ale nutné v sekci Settings-Email nastavit email. Do kódu pak do funkce doAction() nebo doOKAction() (podle toho kdy chcete zaslat email) vložte příkaz:

mail(" ","NETIO IP Watchdog","Too many disconnected IP addresses")

 

3) Kde zjistím, zda vypadlo které z 10 hlídaných zařízení?

Do logu zařízení se zaznamenávají informace o nedostupných zařízeních.

 

4)Proč hlídám 2 za 10 zařízení

To je pouze ilustrativní příklad, počet hlídaných zařízení lze nastavit v proměnné disconectedIPs.

 


 

Podporované verze FW:

3.0.0. a vyšší (Archiv firmware)

 


 

 

This Application Note is compatible with:

Smart power socket NETIO

 

NETIO 4

NETIO 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). 

More about NETIO 4

 

Smart power socket NETIO 4All

 

NETIO 4All

NETIO 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.

More about NETIO 4All

Smart power socket NETIO

 

NETIO 4C

NETIO 4C is a small 110/230V PDU (Power Distribution Unit) with four controlled IEC-320 C13 (max 8A) power outlets. It includes an Ethernet switch and two LAN ports for network connections. Each of the four power outputs can be individually switched on/off over the web, from a mobile app, or using various M2M APIs (SNMP, MQTT, XML, Modbus/TCP, ..). Custom Lua scripts can run directly in the NETIO 4C device. As a distinctive feature, NETIO 4C provides a RS-232 serial port (3-pin) that can be controlled with a Lua script or used as a remote serial port.

More about NETIO 4C

 

Zeptejte se na cenu nebo technické parametry

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