Podporovaná zařízení:
NETIO 4All, NETIO PowerPDU 4C, NETIO 4
Kapitoly
- Vytvoření pravidla (rule)
- Vytvoření Lua skriptu
- Využití Log file
- Možnosti spuštění skriptu
- Funkce Scheduler
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: Timed Blinker (uživatelsky definovatelné)
- Description: Blinking with outlet 1 (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:
------------Section 1------------ local output = 1 -- select output number (1 - 4) local interval = 1 -- select the interval between switching (seconds) local time1 = 23 -- start of inactivity xx:00 (0 - 24) local time2 = 5 -- end of inactivity xx:00 (0 - 24) ---------End of Section 1--------- local state = 0 function switch() devices.system.SetOut{output=output, value=state} state = not state delay(interval,function() checkTime() end) end function checkTime() local currentTime = os.date("*t").hour if time1 <= time2 then if ((currentTime < time1) or (currentTime >= time2)) then switch() else delay(1,function() checkTime() end) end else if ((currentTime < time1) and (currentTime >= time2)) then switch() else delay(1,function() checkTime() end) end end end checkTime()
4) Tvorbu pravidla ukončete stisknutím kliknutím na tlačítko Create Rule v dolní části obrazovky.
Vytvoření Lua skriptu
- Skript přepíná stav zásuvky, kontroluje čas a přepínání vypne ve zvoleném časovém intervalu.
- Pro vytvoření kódu bude potřeba proměnných, které budou nastavovat požadované parametry. Proměnné budou celkem 4 (číslo zásuvky, doba přepnutí, začátek a konec časového intervalu pro vypnutí).
- Kód je rozdělen do dvou funkcí. Jedna kontroluje čas a určuje, jestli má dojít k přepnutí. Tato funkce se jmenuje checkTime. Druhá funkce se stará o přepnutí stavu zásuvek. Jmenuje se switch*.
- Funkce je deklarována klíčovým slovem function, za nímž následuje jméno funkce. Funkce musí být ukončena klíčovým slovem end.
Proměnné
- Proměnné se deklarují pomocí klíčového slova local a jejich jména jsou output, interval, time1, time2.
- Proměnné označují následující:
-
output
- Nastavuje první přepínanou zásuvku
- Příklad pro nastavení zásuvky č.2: output=2
-
interval
- Nastavuje dobu mezi přepnutím stavů (v sekundách)
- Příklad pro dobu přepnutí 5 sekund: interval=5
-
time1
- Nastavuje začátek neaktivity skriptu (v hodinách)
- Příklad pro začátek v 22:00: time1=22
-
time2
- Nastavuje konec neaktivity skriptu (v hodinách)
- Příklad pro konec v 5:00: time2=5
- Tyto proměnné lze měnit podle potřeby v záhlaví kódu (Section 1)
- Dále skript obsahuje proměnnou, která si pamatuje, ve kterém stavu se zásuvka momentálně nachází a podle které se přepíná. Jmenuje se state. Její počáteční hodnota je nastavena na 0 (local state = 0).
Funkce switch
function switch() devices.system.SetOut{output=output, value=state} state = not state delay(interval,function() checkTime() end) end
- Tato funkce přepíná stav zásuvky, poté za dobu zvolenou v proměnné interval zavolá funkci checkTime, která zjistí, zda se má zásuvka opět přepnout.
- Změnu stavu zásuvky se provádí pomocí vnitřní funkce**: devices.system.SetOut{output=output, value=state}
- Funkce má 2 parametry. Prvním je vstup (output), kterým je proměnná output, nastavuje se output=output (první je název parametru, druhý pak proměnná). Druhý parametr je hodnota (value). Hodnota se nastavuje pomocí proměnné state (value=state).
- Poté funkce zajistí, že při příštím průběhu funkce se stavy změní. Prohodí se hodnota proměnné state (z 0 na 1, nebo z 1 na 0).
- K tomu slouží negace: state = not state
-
Nakonec se zavolá funkce checkTime s nastaveným zpožděním. K tomu se využívá vnitřní funkce delay. Prvním parametrem této funkce je zpoždění, tedy proměnná interval a druhým volaná funkce, tedy checkTime. Příkaz vypadá takto:
delay(interval,function() checkTime() end)
Funkce checkTime
function checkTime() currentTime = os.date("*t").hour if time1 <= time2 then if ((currentTime < time1) or (currentTime >= time2)) then switch() else delay(1,function() checkTime() end) end else if ((currentTime < time1) and (currentTime >= time2)) then switch() else delay(1,function() checkTime() end) end end end
- Po zjištění aktuálního času se využívá knihovní funkce*** os.date(). Pro snadnější práci se zavádí proměnná nazvaná currentTime, v níž je uložen současný stav, respektive hodina (vždy se bude jednat o celou hodinu).
- Vytvoření proměnné a uložení její hodnoty vypadá takto: local currentTime = os.date("*t").hour
- Poté se rozlišují případy, kdy interval neaktivity nepřesahuje přes půlnoc, například od 2:00 do 5:00 (sekce po if) a kdy přesahuje přes půlnoc, například od 22:00 do 8:00 (sekce po else). K tomu slouží jednoduchá podmínka, ve které se porovnávají hodnoty proměnných time1 a time2. Stejně jako funkci, je nutné i podmínky ukončit slovem end. Podmínka vypadá následovně:
function checkTime() currentTime = os.date("*t").hour if time1 <= time2 then ---- if section ---- else ---- else section ---- end end
-
Nejprve případ nepřesáhnutí půlnoci (if section).
- K přepnutí dochází v situaci, kdy čas je uvnitř zadaného intervalu. Tedy v situaci, kdy současný stav je buď menší než začátek intervalu (currentTime < time1) nebo (or) je větší nebo rovno konci intervalu (currentTime >= time2). Celá podmínka pak tedy vypadá takto: ((currentTime < time1) or (currentTime >= time2)).
- Pokud je tedy tato podmínka splněná, volá se funkce switch.
-
Pokud se v intervalu nenachází, volá se opět funkce checkTime s malou prodlevou. Prodleva mezi jednotlivými voláními je nastavena na 1 sekundu. Opět se využívá funkce delay. Instrukce je následující:
delay(1,function() checkTime() end)
-
Nyní situace, kdy interval překročí půlnoc (else section)
- Podmínka, která musí být splněna pro spuštění funkce switch je velmi podobná té, kterou byla použita v minulé sekci, jen musí být obě části podmínky splněny naráz. Místo or je použito and. Výsledný tvar je tedy: ((currentTime < time1) and (currentTime >= time2))
- Sekce else vypadá úplně stejně jako v předchozím případě, tedy: delay(1,function() checkTime() end)
Spuštění skriptu
- Ke spuštění skriptu bude stačit zavolat funkci checkTime. Úplně na konci skriptu je volání: checkTime()
- Skript je hotový, po uložení a restartu vašeho zařízení se spustí.
*Lua nerozdíl například od Java nemá funkci switch, nejedná se tedy o přetěžování
**Více o základních funkcích na wiki https://wiki.netio-products.com/
***Více informací o knihovních funkcích na http://lua-users.org/wiki/
Využití Log file
Kvůli kontrole kódu (debuggování) je možné využít Logfile, který můžete nalézt ve webové aplikaci.
- Pro zápis do Log file slouží funkce log a logf.
- Vhodným zápisem do Log file pro kód výše je například popis akce, která se se zásuvkou vykonává.
- Do funkce switch tedy před funkci, která přepíná stav zásuvky vložte podmínku, která bude podle stavu proměnné state rozhodovat o zápisu.
- Pokud chcete zapisovat i hodnoty proměnných (např. číslo zásuvky), je nutné použít funkci logf, na místo, kam chcete zapsat proměnnou, vložit příslušný symbol podle typu proměnné (%d pro číslo, %s pro řetězec, atd.).
- Pokud bude state == 1, pak bude funkce pro zápis do Log file vypadat například takto logf("Switching output %d on", output). Pro state == 0 pak například takto logf("Switching output %d off", output).
- Vaše upravená funkce switch pak bude vypadat takto
function switch() if state==1 then logf("Switching output %d on", output) else logf("Switching output %d off", output) end devices.system.SetOut{output=output, value=state} state = not state delay(interval,function() checkTime() end) end
Možnosti spuštění skriptu
- NETIO nabízí několik způsobů, kterými lze spustit skript
- U všech způsobů je kontrolován rozvrh (Schedule), skript se spouští jen když je rozvrh aktivní. Pokud chcete skript spouštět vždy, vyberte jako rozvrh Always.
System started up
- Skript s tímto nastavením se spustí vždy po zapnutí NETIO (naběhnutí systému trvá zhruba minutu).
- Nastavení „System started up“ je vhodné pro skripty, které běží nepřetržitě.
- Skript s nekonečnou smyčkou se zapíná hned po nastartování NETIO zásuvek a nelze jej vypnout jinak, než odškrtnutím políčka Enabled u nastavení spouštění skriptu a restartem zásuvek NETIO.
DO state changed
- Skript se spustí vždy když dojde ke změně stavu jakékoli zásuvky (zapnutí nebo vypnutí).
- Skript se spustí při změně stavu výstupu a není důležité co přepnutí výstupu vyvolalo (tlačítko na zařízení, přepnutí z web rozhraní, přepnutí výstupu z mobilní aplikace, jiný Lua skript, apod.)
Schedule has started or stopped
- K aktivaci skriptu dochází při začátku a konci rozvrhu.
- V tomto nastavení je nutné vybrat rozvrh (Schedule), který chcete používat.
System variables updated
- Skript je aktivován změnou jakékoli ze systémových proměnných (napětí, proud, účinník, spotřeba, atd…).
- Vhodné pro skripty hlídající spotřebu nebo proud protékající zásuvkou.
Incoming CGI request
- Skript se spustí vždy po zaslání CGI requestu na NETIO.
- CGI request má tvar: “NETIO_IP/event?”
- Například: “192.168.0.26/event?”
- Za otazníkem mohou následovat argumenty, se kterými lze dále pracovat
-
Po odeslání CGI requestu se zobrazí stránka s textem: OK (viz obrázek níže)
- Více o této možnosti spouštění najdete v NETIO AN04
Funkce Scheduler
Funkci Scheduler najdete ve všech produktech NETIO 4x. Scheduler zapíná/vypíná jednotlivé zásuvky (na obrázku zásuvka 1) podle času.
- Každé zásuvce lze přiřadit jiný rozvrh spínání.
- V editoru lze přes web rozhraní vytvořit váš vlastní časový rozvrh spínání.
- Funkce Scheduler zareaguje zapnutím nebo vypnutím zásuvky jen při změně času (konec nebo začátek zelené plochy). Zásuvku lze v čase mezi tím ovládat z jiného zdroje (tlačítka na panelu / web / mobilní rozhraní).
Jak je vidět na obrázku, rozvrh slouží k nastavení sepnutí zásuvky na delší intervaly (například celý víkend na obrázku). Pro rychlejší spínání lze použít Lua skript.
Podporované verze FW:
3.0.0 a novější (Archiv firmwware)
Více o Lua:
https://wiki.netio-products.com
Tato Aplikační poznámka může být použita v:
|
NETIO 4NETIO 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).
|
|
NETIO 4AllNETIO 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. |
|
NETIO PowerPDU 4CNETIO 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í. |