-- local device id's, worden in dit script gebruikt -- Gebruik van id's voor devices in script betekent dat de naam van een device verandert kan worden -- zonder gevolgen voor dit script. local cDevP1Stroom = 1 -- Stroom van P1 smart meter local cDevP1Gas = 2 -- Gas van P1 smart meter local cDevStroomUnight = 13 -- Counter voor stroom met nacht tarief local cDevStroomUday = 14 -- Counter voor stroom met dag tarief local cDevStroomRnight = 15 -- Counter voor teruglevering met nacht tarief local cDevStroomRday = 16 -- Counter voor teruglevering met dag tarief local cDevStroomKosten = 21 -- Incremental counter voor totale stroom kosten local cDevStroomKosten2 = 41 -- Counter voor totale stroom kosten local cDevGasKosten = 20 -- Incremental counter voor totale gas kosten local cDevDagKosten = 40 -- local Time object, gebruikt om datum en/of van domoticz op te vragen local Time = require('Time') return { on = { devices = {cDevP1Stroom, cDevP1Gas}, --timer = { 'every 5 minutes' }, }, logging = { level = domoticz.LOG_DEBUG + domoticz.LOG_INFO, --level = domoticz.LOG_ERROR, marker = 'EnergieKosten', }, execute = function(domoticz, triggeredItem) -- Laat zien waardoor het script afgetrapt wordt if (triggeredItem.isDevice) then domoticz.log('Device ' .. triggeredItem.name .. ' is bijgewerkt', domoticz.LOG_FORCE) end if (triggeredItem.isTimer) then domoticz.log('Timer ' .. triggeredItem.trigger .. ' is gestart', domoticz.LOG_FORCE) end -- Dit script gebruikt de device namen van de slimmemeter. In dit geval 'Stroom' en 'Gas' --local SlimmeMeterStroom = 'Power' --local SlimmeMeterGas = 'Gas' -- Virtuele Devices in de UI die de kosten weergeven. 'Stroom Kosten', 'Gas kosten' en 'Stroom & Gas Kosten' --local StroomKosten = domoticz.devices('Stroom Kosten') --local GasKosten = domoticz.devices('Gas Kosten') --('Gas Kosten') --local Kosten = domoticz.devices('Stroom Kosten') --('Stroom & Gas Kosten') -- Vaste kosten in Euro's per *dag* (denk aan vastrecht) -- Terugleverkosten in Euro's per *dag* is opgezet door sommige leveranciers, zet op 0.0 als jouw leverancier dit (nog) niet heeft -- -- Voorbeeld: als de vaste kosten 5,99 per maand zijn, dan zijn ze 71,88 per jaar, en dat is 0,19693151 per dag -- Of in een rekenmachine bestendige forumule: (5,99 * 12) / 365 local kwhPrijsVast = 0.28124 local kwhTerugleverkosten = 0.0 local gasM3PrijsVast = 0.88787 -- Prijs in Euro's per Kwh (normaal en dal) en kubieke meter (M3) incl Belasting en BTW. local kwhPrijsNormaal = 0.34134 local kwhPrijsDal = 0.33892 local gasM3Prijs = 1.44354 local salderingsFactor = 1.0 -- 1.0 als 100% salderen, 0.5 als 50% salderen, 0 als geen salderen --------------------------------------------------------------------- --- HIER ONDER GEEN AANPASSINGEN MAKEN TENZIJ JE WEET WAT JE DOET --- --------------------------------------------------------------------- -- Uitlezen van de waardes uit de slimmemeter. local vandaagKwhUsed = domoticz.devices(cDevP1Stroom).counterToday local counterDeliveredToday = domoticz.devices(cDevP1Stroom).counterDeliveredToday local usage1 = domoticz.devices(cDevP1Stroom).usage1 -- dal tarief local usage2 = domoticz.devices(cDevP1Stroom).usage2 -- normaal tarief local return1 = domoticz.devices(cDevP1Stroom).return1 -- dal tarief local return2 = domoticz.devices(cDevP1Stroom).return2 -- normaal tarief local usage = domoticz.devices(cDevP1Stroom).usage local usageDelivered = domoticz.devices(cDevP1Stroom).usageDelivered local vandaagM3Gas = domoticz.devices(cDevP1Gas).counterToday -- Voor de usage en return waarden zijn deze reeds gesplits in dal en normaal tarief -- Verbruik en teruggave per tarief groep worden nu in een eigen counter ondergebracht -- Met deze eigen counters kunnen we nu het dagverbruik uitlezen domoticz.devices(cDevStroomUnight).updateCounter(usage1 * 1.000) domoticz.devices(cDevStroomUday).updateCounter(usage2 * 1.000) domoticz.devices(cDevStroomRnight).updateCounter(return1 * 1.000) domoticz.devices(cDevStroomRday).updateCounter(return2 * 1.000) domoticz.log('Usage1 (dal) ' .. tostring(usage1) .. '; counter Today value: '.. tostring(domoticz.devices(cDevStroomUnight).counterToday), domoticz.LOG_FORCE) domoticz.log('Usage2 (normaal)' .. tostring(usage2) .. '; counter Today value: '.. tostring(domoticz.devices(cDevStroomUday).counterToday), domoticz.LOG_FORCE) --domoticz.log('Usage1 counter ' .. tostring(domoticz.devices(cDevStroomUnight).counter), domoticz.LOG_FORCE) --domoticz.log('Usage2 counter ' .. tostring(domoticz.devices(cDevStroomUday).counter), domoticz.LOG_FORCE) -- Kosten gas berekenen voor de huidige dag, counter waarde * 100 voor twee cijfers achter komma -- local GasM3Kosten = math.floor(100 * domoticz.utils.round( (gasM3Prijs * vandaagM3Gas) + gasM3PrijsVast,2)) -- domoticz.log('GasM3Kosten [cent]=' .. tostring(GasM3Kosten) .. '; Gas counter Today value: '.. tostring(vandaagM3Gas), domoticz.LOG_INFO) -- GasM3Kosten is de nieuwe dagkosten voor gas, de gaskosten incremental counter bijwerken met verschil -- local GasKostenIncrement = GasM3Kosten - math.floor(domoticz.devices(cDevGasKosten).counterToday*100) -- domoticz.log('GasKostenIncrement [cent]=' .. tostring(GasKostenIncrement) .. '; Kosten vandaag='..tostring(math.floor(domoticz.devices(cDevGasKosten).counterToday*100)), domoticz.LOG_INFO) -- domoticz.devices(cDevGasKosten).updateCounter(GasKostenIncrement) -- Stroom verbruik wordt in twee totaal tellers bijgehouden voor nacht en dag tarief -- De totele tellerwaarde wordt in een extra (nieuwe) teller opgeslagen, -- zodat domoticz een een dagwaarde voor de teller berekend. Tevens zijn dan nacht verbruik bekend, en -- is de splitsing in de slimme meter gebruikt. local vandaagKwhUsed1 = 0 local vandaagKwhUsed2 = 0 local vandaagKwhReturn1 = 0 local vandaagKwhReturn2 = 0 local vandaagKwhKosten1 = 0 local vandaagKwhKosten2 = 0 -- Bepaal verschil (nu en vorige update) in nacht tarief, we doen dit over de gehele dag, -- maar niet de eerste dag dat de tarief counter actief is. if domoticz.devices(cDevStroomUnight).counter ~= domoticz.devices(cDevStroomUnight).counterToday then vandaagKwhUsed1 = math.floor(domoticz.devices(cDevStroomUnight).counterToday*1) end if domoticz.devices(cDevStroomRnight).counter ~= domoticz.devices(cDevStroomRnight).counterToday then vandaagKwhReturn1 = math.floor(domoticz.devices(cDevStroomRnight).counterToday*1) end -- Bepaal verschil (nu en vorige update) in dag tarief, we doen dit over de gehele dag, -- maar niet de eerste dag dat de tarief counter actief is. if domoticz.devices(cDevStroomUday).counter ~= domoticz.devices(cDevStroomUday).counterToday then vandaagKwhUsed2 = math.floor(domoticz.devices(cDevStroomUday).counterToday*1) else -- 1e dag voor dal/normaal tarief counterToday vandaagKwhUsed2 = math.floor(vandaagKwhUsed) end if domoticz.devices(cDevStroomRday).counter ~= domoticz.devices(cDevStroomRday).counterToday then vandaagKwhReturn2 = math.floor(domoticz.devices(cDevStroomRday).counterToday*1) end -- Wat is er netto verbruikt uit het net. --local vandaagKwh1 = vandaagKwhUsed1 - (vandaagKwhReturn1 * salderingsFactor) --local vandaagKwh2 = vandaagKwhUsed2 - (vandaagKwhReturn2 * salderingsFactor) --domoticz.log('Verbruik dal tarief stroom = ' .. tostring(vandaagKwh1), domoticz.LOG_INFO) --domoticz.log('Verbruik normaal tarief stroom = ' .. tostring(vandaagKwh2), domoticz.LOG_INFO) -- Kosten berekenen vandaagKwhKosten1 = math.floor(100 * ((kwhPrijsDal * domoticz.devices(cDevStroomUnight).counterToday) + kwhPrijsVast + kwhTerugleverkosten)) vandaagKwhKosten2 = math.floor(100 * ((kwhPrijsNormaal * domoticz.devices(cDevStroomUday).counterToday) + kwhPrijsVast + kwhTerugleverkosten)) domoticz.log('Kosten dal tarief stroom = ' .. tostring(vandaagKwhKosten1), domoticz.LOG_FORCE) domoticz.log('Kosten normaal tarief stroom = ' .. tostring(vandaagKwhKosten2), domoticz.LOG_FORCE) domoticz.log('Totaal kosten stroom = ' .. tostring(vandaagKwhKosten1+vandaagKwhKosten2), domoticz.LOG_FORCE) local newValue = tonumber(domoticz.utils.round((vandaagKwhKosten1+vandaagKwhKosten2)/100.0,2)) local iCounter = domoticz.devices(cDevStroomKosten) local counterDivider = 100 -- x is depending on the counter divider set for the device iCounter.incrementCounter( ( -1 * iCounter.counter * counterDivider ) + (counterDivider * newValue)) domoticz.devices(cDevStroomKosten2).updateCounter(vandaagKwhKosten1+vandaagKwhKosten2) domoticz.devices(cDevDagKosten).updateCustomSensor(tonumber(domoticz.utils.round( (vandaagKwhKosten1+vandaagKwhKosten2)/100.0,2))) -- Stroom kosten bijhouden in incremental counter, en deze ophogen met actuele verschil waarde --domoticz.devices(cDevStroomKosten).updateCounter(kwhKosten - math.floor(domoticz.devices(cDevStroomKosten).counterToday)) -- Totale kosten Gas en Elektriciteit --local Kostentotaal = kwhKosten + GasM3Kosten -- Virtual Devices in de UI updaten --local now = Time() -- current time --local rawHour = now.rawDate .. ' ' .. string.format("%02d",now.hour) .. ':00:00' --domoticz.log('Device ' .. StroomKosten.name .. ' is about to change: '..tostring(kwhKosten)..'; '..rawHour, domoticz.LOG_FORCE) --domoticz.log('Time object, rawDate: '.. now.rawDateTime ..', rawHour = ' .. rawHour, domoticz.LOG_FORCE) --local mc_kwhKosten = (StroomKosten.counter*100) + kwhKosten - (StroomKosten.counterToday*100) --domoticz.log('kwhKosten: ' .. tostring(mc_kwhKosten) .. '; StroomKosten.counter: '..tostring(StroomKosten.counter), domoticz.LOG_FORCE) --StroomKosten.updateCounter(mc_kwhKosten) --StroomKosten.updateHistory(rawHour, '-1;'..tostring(mc_kwhKosten)) --StroomKosten.updateHistory(now.rawDate, '-1;'..tostring(mc_kwhKosten)) --GasKosten.updateCounter(GasM3Kosten) --GasKosten.updateHistory(rawHour, '-1;'..tostring(GasM3Kosten)) --GasKosten.updateHistory(now.rawDate, '-1;'..tostring(GasM3Kosten)) --local JasonTest = domoticz.devices('jason-test') --JasonTest.updateCounter((JasonTest.counter + kwhKosten)//1) --JasonTest.updateHistory(rawHour, '-1;'..tostring((JasonTest.counter + kwhKosten)//1)) --JasonTest.updateHistory(now.rawDate, '-1;'..tostring((JasonTest.counter + kwhKosten)//1)) --domoticz.log('JASON-test device counter ' .. tostring(JasonTest.counter) .. '; counter Today value: '.. tostring(JasonTest.counterToday), domoticz.LOG_FORCE) --local StroomKostenOrg = domoticz.devices('StroomOrg') --StroomKostenOrg.updateCustomSensor(kwhKosten/100) --GasKosten.updateCustomSensor(GasM3Kosten) --Kosten.updateCustomSensor(Kostentotaal) end }