Každou vteřinu si stáhne Lua script v chytrých zásuvkách NETIO soubor .xml přes HTTP.
Lua script rozparsuje přijatý XML soubor a na základě ID senzoru načte do vnitřní proměnné aktuální hodnotu senzoru.
Může se jednat o teplotu (°C / °F / °K) nebo o hodnotu vlhkosti (%RH), vše závisí na ID senzoru, pro Lua script je to jen číslo. Pokud není online teploměr STE2 na síti, nebo je senzor odpojený, hodnota není validní a Lua script nastaví výstup do v záhlaví definované hodnoty „invalidState“.
Změřená hodnota se porovná s hodnotou rozsahu (lowLimit, highLimit) a když je uvnitř rozsahu (SafeRange), nastaví se výstup do definované hodnoty „validValue“.
Někdy se stane, že změřená hodnota osciluje kolem hraniční hodnoty bezpečného rozsahu (SafeRange). Pro zamezení příliš častého zapínání a vypínání například záložní klimatizace slouží hodnota hystereze uvnitř bezpečného rozsahu.
Příklad použití hystereze – pro zapnutí záložní klimatizace při teplotě mimo rozsah 0 až 30 °C s hysterezí 2 °C se klimatizace zapne, když teplota vystoupá nad 30°C, ale vypne se, až když teplota klesne pod 28°C.
Web teploměr STE2
Doporučené zařízení třetí strany
Výrobce: HW group s.r.o. (Česká republika)
Produkt: STE2: WiFi a Ethernet teploměr s DI vstupy
WiFi senzor teploty a vlhkosti se dvěma DI vstupy pro dveřní kontakt. Do sítě jej lze připojit pomocí WiFi nebo Ethernet rozhraní s podporou PoE (802.3af). STE2 je dodáván s napájecím adaptérem a senzorem teploty. LAN a WiFi teploměr STE2 podporuje SNMP rozhraní. WiFi teploměr STE2 lze připojit do online portálu SensDesk nebo k SMS gateway.
Podporovaná zařízení: NETIO 4All, NETIO PowerPDU 4C, NETIO 4
Komunikace mezi NETIO 4x a STE2
- NETIO 4x odesílá CGI požadavek na STE2
- STE2 odpovídá zasláním xml
- NETIO 4x z xml vyparsuje požadovanou hodnotu, porovná ji s proměnnou a popřípadě změní stav výstupu
Ukázka xml zaslaného z STE2:
- Zvýrazněné je ID senzoru a jeho hodnota, ta je zaslána jen jako číslo, nezáleží tedy na jednotkách. Kód bude pracovat stejně pro všechny jednotky (°C, °F, %RH, ...)
Propojení NETIO 4x a STE2
Propojení pomocí lokální sítě
- STE2 připojte pomocí ethernetového kabelu do vaší lokální sítě
- NETIO 4x připojte pomocí ethernetového kabelu do vaší lokální sítě
NETIO jako Wi-Fi Access Point
- STE2 připojte pomocí ethernetového kabelu do vaší lokální sítě
- NETIO 4x připojte pomocí ethernetového kabelu do vaší lokální sítě
- NETIO 4x přepněte do režimu Wi-Fi Access Point
- STE2 připojte k síti vytvořenou NETIO 4x
Zjištění ID senzoru
- Po zapojení STE2 do vaší sítě zjistíte jeho IP adresu pomocí HWg-Config
- ID senzoru lze zjistit na webové stránce STE2 v sekci SENSORS v druhém sloupci ID (viz obrázek)
- Při zadání špatného ID se chyba zapíše do logu NETIO a akce se ukončí.
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: STE2 (uživatelsky definovatelné)
- Description: Temerature monitoring (uživatelsky definovatelné)
- Trigger: System started up
- Schedule: Always
3) Do pole pro skript v jazyce Lua zkopírujte následující kód:
------------Section 1------------ local output = 2 -- select output number (1 - 4) local validValue = 1 -- select state for value in safe range local invalidState = 0 -- select state for invalid values local lowLimit = 25 -- select lower limit local highLimit = 30 -- select upper limit local hysteresis = 2 -- select hysteresis local interval = 1 -- choose the period between controls (seconds) local sensorID = 36951 -- sensor id local ipSTE2 = "192.168.101.165" -- ip of your device ---------End of Section 1--------- local temp = 0 -- inner variable, do not change local function call() -- send request on STE2 cgiGet{url="http://" .. ipSTE2 .. "/values.xml", callback=getTemperature} end local function control() -- checking temperature local state = '' if validValue == 0 then state = 'off' else state = 'on' end if temp == -1000 then devices.system.SetOut{output=output, value=invalidState} --devices.system.SetOut{output=4, value=true} else --devices.system.SetOut{output=4, value=false} if devices.system["output" ..output.. "_state"] == state then if (temp < lowLimit or temp > highLimit) then devices.system.SetOut{output=output, value=1-validValue} end else if (temp >= (lowLimit+hysteresis) and temp <= (highLimit-hysteresis)) then devices.system.SetOut{output=output, value=validValue} end end end delay(interval,function() call() end) end function getTemperature(o) -- parse temperature info from xml response if o.result == 0 then local myxml = o.buffer if xml.check(myxml) then local parsed = xml.parse(myxml,xml.STRIP_PREFIXES) local nmbOfSensors = # (parsed.get("SenSet").children()) -- gets number of sensors local sensor = parsed.get("SenSet","Entry") for i=1,nmbOfSensors do -- iterates through sensors idVal = tonumber(sensor.get("ID").text) -- gets sensor id if sensorID == idVal then -- check sensor temp = round(sensor.get("Value").text) control() return else -- next sensor sensor = sensor.next end end logf("Can´t find sensor with ID: %d, shutting down protocol", id) else log("Invalid XML, next attempt in 10s.") devices.system.SetOut{output=output, value=invalidState} --devices.system.SetOut{output=4, value=true} delay(10, function() call() end) end else log(string.format("CGI get failed with error %d: %s. Next attempt in 10s.", o.result, o.errorInfo)) devices.system.SetOut{output=output, value=invalidState} --devices.system.SetOut{output=4, value=true} delay(10, function() call() end) end end function round(s) -- converts string to number and rounds local n = 0 local tenth = 0 if(s == nil) then return -1000 end for i=1,string.len(s) do local c = s:sub(i,i) if c == "." then tenth = tonumber(s:sub(i+1,i+1)) n = tonumber(s:sub(1,i-1)) end end if tenth >= 5 then if s:sub(1,1) == "-" then n = n-1 else n = n+1 end end return n end log("Temperature monitoring started") call()
4) Tvorbu pravidla ukončete stisknutím kliknutím na tlačítko Create Rule v dolní části obrazovky.
Princip
- Změřené hodnoty teploty, vlhkosti a DI stavů na STE2 jsou dostupné z webového rozhraní. Tam je lze ověřit.
- NETIO zašle http požadavek a STE2 pošle zpět soubor values.xml s hodnotami senzorů.
- Lua script hledá nastavené ID senzoru a jeho hodnotu zpracovává.
- Lua script vyparsuje hodnotu senzoru pro zadané ID, ta se zaokrouhlí na celé číslo, a dále se s ní pracuje.
- Pokud se hodnota nachází uvnitř SafeRange intervalu nastaveného proměnnými lowLimit a highLimit, výstup vybraný proměnnou output je v hodnotě validValue (nastaveno v záhlaví skriptu).
- Pokud se hodnota dostane mimo interval SafeRange, vybraná zásuvka(výstup) se nastaví na opačnou hodnotu, než je validValue.
- K opětovnému přepnutí výstupu do stavu validValue dojde, pokud se hodnota dostane zpět do rozsahu SafeRange.
-
Pro zamezení častého vypínání a zapínaní výstupu při oscilaci okolo mezní hodnoty je možné pomocí proměnné hysteresis nastavit hysterezi uvnitř intervalu.
Ošetření mezních stavů:
- Pokud dojde k výpadku online teploměru STE2 nebo k výpadku internetu, dojde po 30 sekundách k timeoutu, výstup se nastaví podle hodnoty invalidState a NETIO se bude pokoušet o obnovení spojení každých 10 sekund.
- Při utrženém senzoru (STE2 ukazuje hodnotu -999,9) dojde k přepnutí výstupu do stavu invalidState (stejně tak po timeoutu). Po opětovném připojení poběží skript normálně.
- Akce se spustí vždy po zapnutí zařízení NETIO.
Hystereze
- Ve skriptu lze pomocí proměnné hysteresis nastavit velikost hystereze. Hystereze se nachází uvnitř intervalu a definuje velikost pásma necitlivosti při překročení jednoho z limitů. Zabraňuje častému přepínání výstupu při oscilaci teploty kolem mezní hodnoty. Příklad pro mezí hodnoty -10 °C a 25 °C a hysterezi 5. Výstup se bude chovat jako-by zásuvka byla v limitu, pokud je průběh modrý. Pokud je červený, skript s ní pracuje jako s hodnotou mimo interval.
Nastavení proměnných
-
output
- Nastavuje ovládanou zásuvku.
- Příklad pro ovládání zásuvky 1: output = 1
-
validValue
- Nastavuje stav zásuvky, který nastane, pokud se hodnota nachází uvnitř nastaveného intervalu.
- Pro vypnutý výstup při hodnotě v bezpečném rozsahu nastavte validValue = 0, pro zapnutý výstup validValue = 1
-
invalidState
- Nastavuje, v jakém bude stavu výstup při chybě (např. utržený senzor, výpadek napájení STE2, chyba v síti apod.)
- Pokud chcete výstup vypnout nastavte: invalidState = 0, pokud jej chcete zapnout invalidState = 1.
-
lowLimit
- Nastavuje spodní hranici intervalu SafeRange. Při nižší hodnotě (teploty) se výstup nastaví podle proměnné validValue.
- Příklad pro nastavení hodnoty na 20(°C, °F, %RH, ...): lowLimit = 20
-
highLimit
- Nastavuje horní hranici intervalu SafeRange. Při vyšší hodnotě (teploty) se výstup nastaví podle proměnné validValue.
- Příklad pro nastavení hodnoty na 35(°C, °F, %RH, ...): highLimit = 35
-
hysteresis
- Nastavuje velikost hystereze. Více podrobností výše v kapitole Hystereze
- Příklad pro hysterezi 1(°C, °F, %RH, ...): hysteresis = 1
-
interval
- Nastavuje periodu, jak často bude zásuvka kontrolovat hodnotu ze zařízení STE2.
- Příklad pro kontrolu každé 2 sekundy: interval = 2
-
sensorID
- Nastavuje ID senzoru, ze kterého se načítá hodnota (viz výše).
- Příklad pro čtení ze senzoru s ID 2730: sensorID = 2730
-
ipSTE2
- Nastavuje IP zařízení STE2. Lze ji zjistit pomocí HWg – Config (viz výše).
- Jedná se string (řetězec), je tedy nutné ji dát do uvozovek.
- Pokud je u STE2 nastaven jiný HTTP Port než 80 (výchozí), je nutné ho za dvojtečku přidat do řetězce
- Příklad (port 80): ipSTE2 = "192.168.101.165"
- Příklad pro port 8080: ipSTE2 = "192.168.101.165:8080"
STE2 – produkt třetí strany
Web teploměr STE2 s LAN nebo WiFi rozhraním vyrábí firma HW group s.r.o. (Česká republika).
- Více informací najdete na www.HW-group.com / STE2.
- NETIO products a.s. tyto produkty neprodává, tento příklad slouží pouze našim zákazníkům pro usnadnění použití NETIO produktů.
Výrobce STE2 dodává v balení teplotní čidlo, které používá tato Aplikační Poznámka.
Do portu pro senzor lze připojit také čidlo vlhkosti, na které bude příklad reagovat také.
Zelené DI vstupy slouží pro připojení tlačítka nebo přepínače. Těmto vstupům, které slouží pro jednoduchý kontakt říká HW group „detektory“ a lze na ně připojit bezpotenciálový kontakt (dry contact) = mechanické tlačítko nebo vypínač. NETIO 4x umí reagovat na sepnutí/rozepnutí DI vstupu, ale k tomu slouží NETIO AN14.
Pro detekci výpadku STE2 zařízení lze použít NETIO AN09, které ověřuje přítomnost zařízení na síti pomocí opakovaného PINGu na jeho IP adresu a při detekci výpadku odpovědi na PING zapne NETIO zásuvku.
FAQ
1) Je možné mít zařízení propojená, bez připojení k internetu?
Ano, STE2 je možné připojit na wifi síť, kterou vytvoří NETIO4x v režimu Wi-Fi Access Point (NETIO Configuration mode) viz odstavec Propojení NETIO 4x a STE2.
2) Je možné pomocí této akce ovládat více výstupů v rámci jednoho zařízení NETIO?
Ano, veškerá práce se stavem výstupů probíhá ve funkci control. Zde si v závislosti na hodnotě proměnné temp můžete libovolně nastavit chování výstupů.
3) Lze kontrolovat hodnotu teploty častěji než jednou za sekundu?
Ne, jedna sekunda je minimální hodnota
4) Lze hlídat i jiné veličiny kromě teploty? Například vlhkost vzduchu nebo stav DI (Digital Input) vstupů (0/1).
Ano, teplota je použita jen jako příklad, je možné vyčítat jakékoli hodnoty ze senzorů na STE2. Skript pracuje pouze s hodnotou veličiny, nikoli s jednotkami, tudíž nezáleží na tom, jestli se bude jednat o °C, °F nebo %RH. Viz ukázka xml. Pro práci s DI vstupy si přečtěte NETIO AN14.
5) Mohu číst více senzorů z STE2 současně?
Ano, pro jednodušší instalace doporučujeme vytvořit nový skript s jiným ID senzoru. Proměnné si lze v rámci zařízení předávat pomocí globálních proměnných. Čtení více proměnných v rámci jedné akce je možné, ale vyžaduje složitější zásahy do
kódu.
6) Mohu toto pravidlo použít pro čtení teploty ze zařízení Poseidon2 od stejné firmy (HW group s.r.o.)?
Ano, kód bude fungovat i pro zařízení Poseidon2, xml soubory jsou velmi podobné. Testováno s Poseidon2 3266, firmware verze 1.4.8.
7) Lze detekovat utržený/nefunkční senzor na STE2?
Ano, výstup se nastaví podle proměnné invalidState. STE2 jako hodnotu nefunkčního senzoru hlásí -999,9 (NETIO pracuje se zaokrouhlenou hodnotou -1000). Pokud byste chtěli změnit chování zásuvky po detekování chybného senzoru, lze tak učinit ve funkci control v podmínce if temp == -1000.
8) Co se stane, pokud restartuji jedno nebo obě zařízení?
Při restartu STE2 se výstup nastaví podle proměnné invalidState. Po opětovném zapnutí zařízení, bude dále pokračovat kontrola teploty. Po restartu chytrých zásuvek NETIO 4x, akce se znovu spustí při zapnutí. Při vypnutém NETIO akce neběží, kontrola tedy neprobíhá. Při vypnutí obou zařízení (například při výpadku proudu) a jejich opětovném spuštění bude reakce na připojené senzory dále probíhat.
9) Je možné reagovat na DI vstupy na STE2?
Ano lze, kód a podrobnější návod naleznete v NETIO AN14.
10) Je možné detekovat chybný stav (výpadek STE2, utržený senzor, ...) a signalizovat jej pomocí zapnutí/vypnutí jiného výstupu?
V kódu jsou zakomentovány 4 příkazy, které v těchto situacích zapínají elektrickou zásuvky (výstup) 4. Vypadají takto:
--devices.system.SetOut{output=4, value=true} a --devices.system.SetOut{output=4, value=false}.
Pokud chcete, stačí je odkomentovat. Dva se nachází ve funkci control, další dva pak ve funkci getTemperature. Výstup 4 je možné jednoduše změnit na jiný přepsáním čísla v parametru output.
Podporovaná verze NETIO 4x firmwaru:
3.0.0 a vyšší (Archiv firmwware)
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í. |