AN13 STE2 teploměr (HW group) - NETIO zásuvky reagují na teplotu | NETIO products: Networked power sockets
Tagy: 
3rd party HW-SW

STE2 od firmy HW group je LAN/WiFi teploměr/vlhkoměr. Aplikační poznámka NETIO AN13 představuje funkční Lua script, kterým lze propojit chytré zásuvky NETIO 4x a teploměr STE2. Elektrické zásuvky 230V se spínají podle hodnoty teploty (vlhkosti) senzoru připojeného do STE2. Zařízení spolu komunikují po LAN síti, hodnoty jsou přenášeny v .xml souboru. Script lze upravit i pro jiná zařízení a data ve formátu xml. 

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

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 4AllNETIO 4CNETIO 4

 

Komunikace mezi NETIO 4x a STE2

 

  1. NETIO 4x odesílá CGI požadavek na STE2
  2. STE2 odpovídá zasláním xml
  3. 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:

 

  • Komunikace mezi NETIO 4x a 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ě

  1. STE2 připojte pomocí ethernetového kabelu do vaší lokální sítě
  2. NETIO 4x připojte pomocí ethernetového kabelu do vaší lokální sítě

 

NETIO jako Wi-Fi Access Point

  1. STE2 připojte pomocí ethernetového kabelu do vaší lokální sítě
  2. NETIO 4x připojte pomocí ethernetového kabelu do vaší lokální sítě
  3. NETIO 4x přepněte do režimu Wi-Fi Access Point
  4. 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

 

  • 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čí.

 

  •  ID senzoru lze zjistit na webové stránce STE2 v sekci SENSORS v druhém sloupci ID

 

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

 

  • Funkční Lua script, kterým lze propojit chytré zásuvky NETIO 4x a teploměr STE2

 

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: 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 = 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="https://" .. 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

local function round(s) -- converts string to number and rounds
  local n = 0
  local tenth = 0
  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.

 

  • Script lze upravit i pro jiná zařízení a data ve formátu xml.

 

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.

 

  • Hystereze se nachází uvnitř intervalu a definuje velikost pásma necitlivosti při překročení jednoho z limitů.

 

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) J​e 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)


Klíčová slova:

XML, cgiGet, XML API, HTTP požadavek, xml parser, teplota, HW Group, STE2, WiFi, NETIO ovládané na základě teploty

 

Zeptejte se na cenu nebo technické parametry

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