Monitor energy peeks - smart meter script

Moderator: leecollings

Post Reply
renerene
Posts: 351
Joined: Wednesday 03 August 2016 11:36
Target OS: -
Domoticz version:
Contact:

Monitor energy peeks - smart meter script

Post by renerene »

If you have a smart meter cable you can use this script to get power notifications right after high consumption of a device.
You have to add a string variable 'luaWatt' with value 0;1493412184;0;0
The script needs 'device' as trigger

Example Log of the output:
2017-04-28 22:45:54.590 EventSystem: Script event triggered: luaTuinlichtTeller
2017-04-28 22:45:54.682 LUA: Agelopen 10 seconden was het gemiddeld verbruik 2533 Watt. Kosten ca. 0.18 ct
2017-04-28 22:45:54.685 EventSystem: Script event triggered: luaWatt


Here is the lua:

Code: Select all

local function round(num, n)
    --n is het aantal decimalen, maar kun je ook weglaten
  local mult = 10^(n or 0)
  return math.floor(num * mult + 0.5) / mult
end

commandArray = {}
tijdgrens = 0  --seconden afvalvertraging
grenswaarde = 1500 --Watt
kwh=25 -- eurocent
dv=tostring(next(devicechanged))

if dv == 'Stroom' then
    stroom1, stroom2, temp1, temp2, verbruik1, verbruik2 = otherdevices_svalues['Stroom']:match("([^;]+);([^;]+);([^;]+);([^;]+);([^;]+);([^;]+)")
    verbruik=verbruik1+verbruik2
    eerste,laatste,aantal,totaal=uservariables['luaWatt']:match("([^;]+);([^;]+);([^;]+);([^;]+)")

    --nieuwe energiepiek, start timer:
    if verbruik > grenswaarde then
        print ('<font color="purple">hoog verbruik') 
        if eerste == '0' then eerste = tostring(os.time()) end
        aantal=aantal+1
        totaal=totaal+verbruik
        laatste = tostring(os.time()) --tijdstip vastleggen
    end

    aantal = tonumber (aantal)
    verbruik = tonumber (verbruik)
    
    --al een tijdje laag energieniveau?
    if aantal > 0 and verbruik < grenswaarde and os.difftime (os.time(), laatste) > tijdgrens then
        duur= os.difftime (laatste, eerste)
        kosten=round((kwh/3600/1000)*totaal*duur/aantal,2)
        if duur > 120 then
            melding = 'Afgelopen '..tostring(round(duur/60))..' minuten was het gemiddeld verbruik '..tostring(round(totaal/aantal))..' Watt. Kosten ca. '..kosten..' ct'
        else
            melding = 'Afgelopen '..duur..' seconden was het gemiddeld verbruik '..tostring(round(totaal/aantal))..' Watt. Kosten ca. '..kosten..' ct'
        end
        print ('<font color="purple">'..melding)  
        commandArray['SendNotification']='energie#'..melding..'#'..0
        aantal = 0
        totaal = 0
        eerste = 0
    end
    
    -- save the globals
    commandArray['Variable:luaWatt'] = eerste..';'..laatste..';'..aantal..';'..totaal
end

return commandArray
Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest