AN06 Denní report emailem (Lua) | Chytré zásuvky NETIO ovládané pomocí WiFi a LAN
Tagy: 
User library

AN06 je dvojice Lua skriptů, které jednou denně odešlou emailem denní report s přehledem počtu zapnutí pro každý výstup a spotřebované energie v kWh a v nějaké měně (kč / € / $ ). Každý den dostanete emailem přehled o spotřebované elektřině za 1 a 7 dní pro každý výstup napájení (elektrickou zásuvku). 

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

 

Podporovaná zařízení: NETIO 4All, PowerPDU 4C, NETIO 4 (bez údajů o spotřebě),

 

Dvojice skriptů Skript A (Daily report) a Skript B (Switch counter) posílá jednou denně přehledně informace o jednotlivých výstupech (spotřeba [Wh / kWh), cena za spotřebovanou energii a počet přepnutí každého jednoho výstupu). V emailu jsou podrobné informace za posledních 24h, ale pro porovnání také průměr za uplynulých 7 dní.

 

První skript A (Daily report) slouží k periodickému odesílání emailu a vyčítání spotřeby. Druhý skript B (Switch counter) detekuje přepnutí jednotlivých výstupů, počítá je a stará se o jejich zaznamenávání.

 


Příklad emailu z AN06:

 

Nastavení emailu v NETIO 4x

NETIO 4x zařízení v jeho web konfiguraci, je třeba nastavit podmínky pro odesílání emailu.

 

Web zařízení - sekce Settings-Email nastavte zařízení následovně:

  • SMTP server
    • adresa smtp serveru Vašeho poskytovatele emailové služby (např. smtp.google.com, smtp.seznam.cz)
  • Enable SMTP authentication
    • zaškrtnuto
    • Username - emailová adresa
    • Password - heslo k emailové adrese
    • Enable TLS encryption - zašrtnuto
  • To
    • emailová adresa
  • Use custom sender address
    • volitelné
  • Send daily reports about NETIO 4All health
    • Volitelná  (neovlivňuje AN06)
    • Při zaškrtnutí posílá zařízení pravidelně dále uvedený report, který nemá nic společného s emailem z AN06.
       

Poznámka: Jedná se o doporučené nastavení, různí poskytovatelé emailových služeb mohou vyžadovat jiné nastavení. Doporučujeme nastavení zkontrolovat s doporučením konkrétního poskytovatele.

 

Příklad daily report emailu z NETIO 4x zařízení:

Daily report for device myNetio, date 2019-07-21.

== SYSTEM LOAD ==

 

    Hour   System load   Incomming traffic

------------------------------------------

   0 - 1             -           -

   1 - 2             -           -

   2 - 3             -           -

   3 - 4             -           -

   4 - 5             -           -

   5 - 6             -           -

   6 - 7             -           -

   7 - 8             -           -

   8 - 9             -           -

  9 - 10             -           -

 10 - 11             -           -

 11 - 12             -           -

 12 - 13             -           -

 13 - 14             -           -

 14 - 15             -           -

 15 - 16             -           -

 16 - 17             -           -

 17 - 18             -           -

 18 - 19             -           -

 19 - 20             -           -

 20 - 21             -           -

 21 - 22             -           -

 22 - 23             -           -

 23 - 24             -           -

 

== SYSTEM LOGS ==

Errors: 0

Warnings: 0

=== System ===

=== Manager ===

=== Networking ===

=== Users ===

=== Storage ===

=== Devices ===

 

Vytvoření pravidel (rule) pro Skripty A a B.

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

 

Skript A (Daily report)

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

  • Enabled: zaškrtnuto
  • Name: Daily report (uživatelsky definovatelné)
  • Description: Daily report about NETIO (uživatelsky definovatelné)
  • Trigger: System started up
  • Schedule: Always

 

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

 

------------NETIO AN06------------

------------Section 1------------
local electricityPrice = "0.12" -- price for kWh
local currency = "$" -- currency
local emailReport = "my.email@gmail.com" -- your email
---------End of Section 1---------

local emailTime = "01:00:00"

local initialEnergy = {}
local weekStats = {}

for i=1,7 do
  weekStats[i] = {energy={0,0,0,0},switches={0,0,0,0}}
end

function initialize()
  local stringTime = os.date("%X")
  local time = (3600*tonumber(stringTime:sub(1,2)) + 60*tonumber(stringTime:sub(4,5)) + tonumber(stringTime:sub(7,8)))
  
  local emTime = (3600*tonumber(emailTime:sub(1,2)) + 60*tonumber(emailTime:sub(4,5)) + tonumber(emailTime:sub(7,8)))
  
  for i=1,4 do
    initialEnergy[i] = devices.system["output" .. i .. "_cumulatedConsumption"]
  end

  delay(86400-time+emTime,function() dailyReport() end)
end

function dailyReport()
  local day = tonumber(os.date("%w"))
  -- os.date("%w") returns 0 for Sunday
  if day == 0 then day = 7 end
  
  local prevDay = day - 1
  if prevDay == 0 then prevDay = 7 end
  
  -- get data about switching
  if _G.weekSwitches[prevDay].switches == nil then
    weekStats[prevDay].switches = {0,0,0,0}
  else
    weekStats[prevDay].switches = _G.weekSwitches[prevDay].switches
    -- reset counter for previous day
    _G.weekSwitches[prevDay].switches = {0,0,0,0}
  end
  
  
  for i=1,4 do
    if devices.system["output" .. i .. "_cumulatedConsumption"] ~= nil then
      weekStats[prevDay].energy[i] = devices.system["output" .. i .. "_cumulatedConsumption"] - initialEnergy[i]
      initialEnergy[i] = devices.system["output" .. i .. "_cumulatedConsumption"]
    else
      weekStats[prevDay].energy[i] = 0
      initialEnergy[i] = 0
    end
  end

  -- formating email
  local text = "AN06 - Daily report from NETIO device\n"
  text = text .. os.date("%c") .. "\n"
  text = text .. "----------------------------------\n"
  text = text .. "Last 24 hours:\n"
  
  for i=1,4 do
    text = text .. "Output" .. i .. ": "
    text = text .. weekStats[prevDay].energy[i] .. "[Wh], "
    local price = computePrice(weekStats[prevDay].energy[i])
    text = text .. price .. currency .. ", "
    text = text .. weekStats[prevDay].switches[i] .. "x switched\n"
  end
  
  text = text .. "----------------------------------\n"
  text = text .. "Last 7 days:\n"
  
  for i=1,4 do
    text = text .. "Output" .. i .. ": "
    local sumEnergy = 0
    local sumSwitches = 0
    for j=1,7 do
      sumEnergy = sumEnergy + weekStats[j].energy[i]
      sumSwitches = sumSwitches + weekStats[j].switches[i]
    end
    text = text .. sumEnergy .. "[Wh], "
    local price = computePrice(sumEnergy)
    text = text .. price .. currency .. ", "
    text = text .. sumSwitches .. "x switched\n"
  end
    
  logf("Sending daily report, day: %d",day)
  mail(emailReport,"NETIO daily report",text,5)
  delay(86400,function() dailyReport() end)
end

function computePrice(energy)
  local price = string.gsub(electricityPrice,'%.','')
  return tonumber(price)*energy/100000 
end

log("Mail skript started")
-- Measurment variables are not available after power up, some delay is necessary
delay(1,function() initialize() end)

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

            

Skript B (Switch counter)

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

  • Enabled: zaškrtnuto
  • Name: Switch counter (uživatelsky definovatelné)
  • Description: Switching counter for daily report (uživatelsky definovatelné)
  • Trigger: DO state changed
  • Schedule: Always

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

 

 
------------NETIO AN06------------
local day = tonumber(os.date("%w"))
-- os.date("%w") returns 0 for Sunday
if day == 0 then day = 7 end

-- Initializing
if _G.weekSwitches == nil then
  _G.weekSwitches = {}
  for i=1,7 do
    _G.weekSwitches[i] = {switches={0,0,0,0}}
  end
  --Script is triggered once on power up for every output
  _G.weekSwitches[day] = {switches={-1,-1,-1,-1}}
end

-- Incrementing counter
for k in pairs(event.args) do
  _G.weekSwitches[day].switches[tonumber(k:sub(7,7))] = _G.weekSwitches[day].switches[tonumber(k:sub(7,7))] + 1
end

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

 

Po vytvoření obou skriptů, by v seznamu skriptů měly být vidět oba vytvořené skripty.

 

Princip

  • Skript A (Daily report) slouží k periodickému odesílání emailu a vyčítání spotřeby.
  • Skript B (Switch counter) detekuje přepnutí každého jednoho výstupu na zařízení, tyto změny stavu počítá v globální proměnné.
  • Při spuštění zařízení dojde k inicializaci Skriptu A  (Daily report) a vyčtou se současné hodnoty čítačů spotřeby. Skript poprvé odešle pravidelný email v 1:00 (1 a.m). Email obsahuje zprávu o spotřebě z jednotlivých výstupů, počtu přepnutí a ceně za spotřebovanou energii. Kromě informací o předchozím dni zasílá také informace o předchozích 7 dnech.
  • Skript obsahuje globální proměnnou _G.weekSwitches, která slouží k předávání informací ohledně počtu přepnutí. Při vytváření dalších skriptů je nutné dbát na to, aby takto nebyla pojmenovaná jiná proměnná.

 

Nastavení proměnných

  • electricityPrice
    • V této proměnné se nastavuje cena za jednu kWh.
    • Proměnnou je třeba zadat jako řetězec (string).
    • Hodnota musí být na 2 desetinná místa.
    • Vypočítaná cena je zaokrouhlena na celé číslo.
    • Příklad pro 12 centů za kWh: local electricityPrice = "12.00"
  • currency
    • Proměnná nastavující měnu, která byla zadána v proměnné electricityPrice.
    • Příklad pro ¢: local currency = "¢"
  • email
    • Emailová adresa na kterou se bude odesílat report.
    • Jedná se o řetězec (string), je tedy nutné ho uzavřít do uvozovek.
    • Příklad pro email my.email@gmail.com: local email =  "my.email@gmail.com"

 

 

FAQ

1) Je možné dostávat denní report jindy než v 1 hodinu ráno?

Ano, stačí upravit proměnnou emailTime. Je ovšem nutné zachovat formátování, například pro odesílání v 15:30 bude proměnná vypadat následovně: local emailTime= "15:30:00".

 

2) Je možné daily report použít i pro NETIO zásuvky, které neměří spotřebu elektřiny?

Ano, v emailu pouze budou na místech pro spotřebu a cenu vždy nuly.

 

3) Co se stane s emailem, pokud nebude NETIO připojené na síti v nastaveném čase?

V takovém případě se email neodešle. NETIO potřebuje spojení na SMTP server v okamžiku odesílání emailu.

 

4) Dojde při výpadku napájení k vyresetování údajů o spotřebě za poslední nedokončený den?

Ano, při výpadku napájení se vyresetují všechny údaje. Data pro posledních 7 dní jsou v emailu vždy až od doby kdy došlo k obnovení napájení.
 

5) Je možné poslat z NETIO email při startu zařízení?

Ano, již vytvořený skript a postup pro nastavení je možné najít v AN05.

 


 

Podporované verze FW:

3.1.0 a novější (Archiv firmware)

 


 

 

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