Gasverbruik per graaddag tonen in Domoticz

De winter staat voor de deur en in de meeste huizen gaat de verwarming weer aan. Indien je een slimme thermostaat hebt kun je het gasverbruik in Domoticz loggen. Je hebt dan inzicht in het gasverbruik per dag, week, maand of jaar. Maar wat zegt dit verbruik? Eigenlijk niet zo heel veel. In een strenge winter zal je meer verbruiken dan in een zachte winter, maar je kunt dit niet met elkaar vergelijken. Daarom gaan we het gasverbruik per graaddag tonen in Domoticz.

 

Benodigdheden

Gasverbruik per graaddagen

Het aantal graaddagen per dag is het verschil tussen de temperatuur in huis en de gemiddelde buitentemperatuur op die dag. Een graaddag wordt gemeten als het gedurende een gehele dag precies één graad onder de stookgrens van 18 °C graden is. Is de gemiddelde buitentemperatuur 18 °C of hoger, dan is het aantal graaddagen nul. Graaddagen zijn dus geen dagen, maar rekeneenheden. Zodra we het aantal graaddagen per dag weten zetten we dit af tegen het gasverbruik per dag.

Een rekenvoorbeeld:

Op een bepaalde dag is de gemiddelde buitentemperatuur 6,4 °C en het gasverbruik op dezelfde dat is 1,2 m3. Het gasverbruik per graaddag is dan 1,2 / (18 – 6,3) = 0,1026 m3/graaddag.

Gemiddelde buitentemperatuur

De buitentemperatuur kun je zelf loggen met een temperatuursensor i.c.m. met een RFXCOM of je kunt gebruikmaken van een script dat wij eerder geplaatst hebben om de buitentemperatuur in Domoticz te krijgen (helaas geeft Weather Underground geen nieuwe API keys meer uit. Momenteel werken wij aan een nieuw weer-script, dat binnenkort online komt). We gaan er even vanuit dat de buitentemperatuur reeds beschikbaar is in jouw Domoticz-omgeving. Om het gasverbruik per graaddag te kunnen berekenen moeten we de gemiddelde buitentemperatuur per dag weten.

We gaan eerst een virtuele temperatuursensor aanmaken. Ga naar Setup -> Hardware en kies bij Type voor Dummy. Je mag zeg een herkenbare naam kiezen:

Zodra de Dummy Hardware toegevoegd is kunnen de virtuele sensoren gaan aanmaken. Klik hiervoor op Create Virtual Sensors (in het donkerblauw).

Klik nu op Create Virtual Sensor (donkerblauw). Geef de temperatuursensor de naam “Gemiddelde buitentemperatuur” en kies bij Sensor Type voor “Temperature”. Nadat je op “OK” hebt geklikt vind je de nieuwe virtuele temperatuursensor terug op het tabblad “Temperature”.

gemiddelde buitentemperatuur

Nu is het tijd om de gemiddelde buitentemperatuur iedere vijf minuten te laten berekenen. Dat doen we door onderstaand script te gebruiken. Ga naar Setup > More Options > Events. Maak een nieuw LUA script aan van het type Time en kopieer onderstaand script. Enkele regels moet je nog even aanpassen:

  • 7: Debugging kun je op “YES” zetten, indien je tegen problemen aanloopt.
  • 15: Indien je de virtuele temperatuursensor een andere naam hebt gegeven kun je dat hier aanpassen.
  • 18: Zet hier de naam neer van de sensor van de buitentemperatuur.
  • 22: Wijzig het IP-adres van Domoticz
local function DeviceUpdate(idx, value1)
    local cmd = string.format("%d|0|%.2f", idx, value1)
  --print(cmd)
    table.insert (commandArray, { ['UpdateDevice'] = cmd } )
end

Debug = "NO" -- Debugging aanzetten ("YES") of uitzetten ("NO")
 
commandArray = {}
 
local m = os.date('%M')
if (m % 5 == 0) then -- script loopt iedere 5 minuten

-- Variabelen instellen
local temperature_name	= 'Gemiddelde Temp buiten'
local temperature_idx	= otherdevices_idx[temperature_name]

local uitlees_name	= 'Temperatuur buiten'
local uitlees_idx	= otherdevices_idx[uitlees_name]

--Temperaturen van afgelopen 24 uur opvragen
local sQuery			= 'curl "http://192.168.3.53:8080/json.htm?type=graph&sensor=temp&idx='..tostring(uitlees_idx)..'&range=day"'
local handle=assert(io.popen(sQuery))
local raw = handle:read('*all')
handle:close()

--Ontvangen waarden verwerken
json = assert(loadfile '/home/pi/domoticz/scripts/lua/JSON.lua')()
local jsonData = json:decode(raw)

if Debug=='YES' then
  print (jsonData.title)
  print (jsonData.status)
  print (jsonData.result[1].d)
  print (jsonData.result[1].te)
end

--Gemiddelde temperatuur van afgelopen 24 uur bepalen
local sum = 0
local ave = 0
local elements = #jsonData.result
     
for i = 1, elements do
    sum = sum + jsonData.result[i].te
end
     
ave = sum / (elements-1)

if Debug=='YES' then
  print('Gemiddeld: '..tostring(ave))
end

--Gemiddelde temperatuur opslaan in virtuele temperatuur sensor
DeviceUpdate(temperature_idx,ave)

end
return commandArray

Na maximaal vijf minuten moet je de eerste gemiddelde buitentemperatuur in de virtuele sensor kunnen zien. Let op! Dit is niet de gemiddelde buitentemperatuur van vandaag, maar van de laatste 24 uur.

Gasverbruik per graaddag sensor

We gaan nu een virtuele sensor aanmaken waar het gasverbruik per graaddag in bijgehouden wordt. Ga naar Setup > Hardware en klik weer op Create Virtual Sensors (donkerblauw). Geef de sensor de naam “Gasverbruik per graaddag”, selecteer “Custom Sensor” bij Sensor Type en type bij Axis Label “m3/gd”.

gasverbruik per graaddag in domoticz

Ga naar Setup > More Options > Events. Maak een nieuw dzVents script aan van het type Timer en kopieer onderstaand script. Indien je de namen van de sensoren niet gewijzigd hebt dan hoef je aan het script niets te wijzigen (namen staan op regel 6, 13 en 24). Het script draait iedere dam om 23.58 uur, zodat we de gemiddelde temperatuur van deze dag kunnen gebruiken (en niet de gemiddelde temperatuur van de afgelopen 24 uur). Daarnaast houdt het script rekening met de winter d.m.v. een factor. Ook wordt er rekening gehouden met het feit dat graaddagen nooit negatief kunnen zijn.

return {
          on   = { timer    = { "at 23:58"}},

  execute = function(domoticz)
        local Date = domoticz.time.year..domoticz.time.month..domoticz.time.day
        local meantempOutside = domoticz.devices('Gemiddelde Temp buiten').temperature
        local baseTemp = 18
        local factor = 1
        local degreesday = baseTemp - meantempOutside
        if (domoticz.time.month >= 4 and domoticz.time.month <= 9) then factor = 0.8 end
        if (domoticz.time.month >= 11 or domoticz.time.month <= 2) then factor = 1.1 end
        degreesdays = degreesday * factor
        local GasUsage = domoticz.devices('Gas').counterToday
        local GasUsageperDegreesday = domoticz.round((GasUsage / degreesdays),3)
        if (degreesday <= 0) then 
            degreesdays = 0 
            GasUsageperDegreesday = 0
        end
        domoticz.log('Gemiddelde temperatuur buiten (laatste 24u): '..meantempOutside)
        domoticz.log('Gasverbruik vandaag: '..GasUsage..' m3')
        domoticz.log('Aantal graaddagen: '..degreesdays)
        domoticz.log('Gasverbruik: '..GasUsageperDegreesday..' m3 per graaddag')
        
        domoticz.devices('Gas per graaddag').updateCustomSensor(GasUsageperDegreesday)

  end
}

 

Iedere dag om 23.58 uur kun je nu het gasverbruik per graaddag bekijken!

3 gedachten over “Gasverbruik per graaddag tonen in Domoticz

  • 29 oktober 2018 om 09:11
    Permalink

    de mensen die hier mee bezig zijn (logging red.) uploaden waarschijnlijk hun data al naar mindergas.nl. Is er niet een manier om de data van mindergas.nl terug in te lezen in Domoticz? dan ben je er ook.

    Beantwoorden
  • 29 oktober 2018 om 18:02
    Permalink

    Voor zover ik weet kun je alleen naar mindergas.nl uploaden en geen gegevens naar Domoticz downloaden. Daarnaast ben ik het liefst zo min mogelijk afhankelijk van derden…

    Beantwoorden
  • 20 november 2018 om 09:54
    Permalink

    Joost,

    Op een of andere manier wil het niet lukken met de gemiddelde dagtemperatuur.
    Het script haalt bij mij 2016 ‘elements’ uit de database, dat zijn gegevens over 7 dagen. Het klopt ook wel dat er langer teruggekeken wordt dan 24 uur, want toen ik laatst een week op vakantie was, is mijn Wemos getript en kreeg ik geen verse metingen terug. Toch bleef de berekende gemiddelde temperatuur meer dan een dag veranderen, terwijl je na 24 uur een constante waarde of foutmelding zou verwachten. Ook wijkt de door het script berekende waarde af met wat ik zelf over 24 uur bereken.
    Nu staat mijn ‘short log sensors’ op 7 dagen.
    Ik heb wat debug-regels aan het script toegevoegd, zie hier de output:

    2018-11-20 09:40:01.050 Status: LUA: Graph temp day
    2018-11-20 09:40:01.050 Status: LUA: OK
    2018-11-20 09:40:01.050 Status: LUA: 2018-11-13 09:35
    2018-11-20 09:40:01.050 Status: LUA: 9.8
    2018-11-20 09:40:01.051 Status: LUA: Sum: 12654.8
    2018-11-20 09:40:01.051 Status: LUA: Elements: 2016
    2018-11-20 09:40:01.051 Status: LUA: Gemiddeld: 6.2771825396826

    Beantwoorden

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *