Stroom-, gas- en waterkosten zichtbaar maken in Domoticz

In een eerder artikel hebben we uitgelegd hoe je door middel van 3 Python scripts de stroom-, gas- en waterkosten zichtbaar kunt maken in Domoticz. Aangezien ik niet zo’n fan van Python ben heb ik verder gekeken hoe dit makkelijker kan. Gelukkig is de oplossing vrij eenvoudig: een dzVents script zodat alle kosten met één script te zien zijn in Domoticz. Om het waterverbruik in Domoticz te krijgen kun je de eerder geplaatste handleidingen volgen: Waterverbruik met LUA script of Waterverbruik met Python script.

Om het stroom- en gasverbruik inzichtelijk te krijgen moet je de Toon thermostaat koppelen aan Domoticz. Onderstaande zeven sensoren krijg je dan te zien. In dit voorbeeld gaat het om IDX 6 (Stroomverbruik) en IDX 7 (Gasverbruik).

Maak nu een Dummy hardware aan:

Klik vervolgens op “Create Virtual Sensors” en maak een Virtual Sensor aan van het type Custom Sensor. Maak ook een Custom sensor aan met de naam “Gaskosten” en een sensor met de naam “Waterkosten”

custom sensor Domoticz

Alle kosten-sensoren zijn nu in Domoticz zichtbaar, het is tijd voor het dzVents-script. Ga naar Setup > More Options > Events. Maak een nieuw dzVents script aan van het type Timer en kopieer onderstaand script. Indien de namen van de zes sensoren overeenkomen dan hoef je aan het script niets te wijzigen (de namen van de sensoren staan op regel 6 t/m 14). Het script draait iedere 5 minuten, indien gewenst kun je dat op regel 2 aanpassen.

return {
    on = { timer   = { "every 5 minutes" }},                    -- script draait iedere 5 minuten
    -- on = { devices = { "Stroom","Gas","Waterverbruik" }},    -- Verwijder -- aan het begin van deze regel en plaats -- voor bovenstaande regel als 
                                                                -- je het script wilt draaien zodra er een nieuw verbruik aan Domoticz is doorgegeven

    execute = function(dz)
        -- Devices
        local vandaagKwh      = dz.devices('Stroom').counterToday         -- Stroommeter device
        local vandaagM3Gas    = dz.devices('Gas').counterToday            -- Gasmeter device
        local vandaagM3Water  = dz.devices('Waterverbruik').counterToday  -- Watermeter device
        
        local StroomKosten  = dz.devices('Stroomkosten')                -- Stroomkosten device
        local GasKosten     = dz.devices('Gaskosten')                   -- Gaskosten device
        local WaterKosten   = dz.devices('Waterkosten')                 -- Waterkosten device

        -- Eenheidsprijs in Euro's / Kwh - M3
        local kwhPrijs      = 0.23029
        local gasM3Prijs    = 0.5836
        local waterM3Prijs  = 0.8200

       	if (dz.time == 'Between 23:00 and 07:00') or (dz.day == 'Saturday') or (dz.day == 'Sunday') then
		    kwhPrijs = 0.21266 -- Daltarief
	    else
		    kwhPrijs = 0.23029 -- Normaal tarief
	    end 
        
        -- Vaste kosten in Euro's per dag (zoals vastrecht) 
        local kwhPrijsVast = 0.0000
        local gasM3PrijsVast = 0.0000
        local waterM3PrijsVast = 0.0000
        
        -- Kosten berekenen
        local kwhKosten      = tonumber(dz.utils.round( (kwhPrijs * vandaagKwh),2) + kwhPrijsVast)--)--:gsub("%.",",")   -- rounded to two decimals and replace dot by comma
        local GasM3Kosten    = tonumber(dz.utils.round( (gasM3Prijs * vandaagM3Gas),2) + gasM3PrijsVast)--)--:gsub("%.",",")
        local WaterM3Kosten  = tonumber(dz.utils.round( (waterM3Prijs * vandaagM3Water)/1000,2) + waterM3PrijsVast)--)--:gsub("%.",",")
        
        -- Kosten updaten
          StroomKosten.updateCustomSensor(kwhKosten)
          GasKosten.updateCustomSensor(GasM3Kosten)
          WaterKosten.updateCustomSensor(WaterM3Kosten)
    end
}

 

Na maximaal vijf minuten zie je dat de kosten voor de eerste keer zichtbaar zijn:

stroom-, gas- en waterkosten in domoticz

15 gedachten over “Stroom-, gas- en waterkosten zichtbaar maken in Domoticz

  • 1 november 2018 om 11:08
    Permalink

    Hoi Joost,

    Allereerst dank voor alle leuke onderwerpen op je site.
    Het uitbreiden van de mogelijkheden van Domoticz staat al een tijd op mijn TODO lijst 😉

    Ik vroeg me af waarom je de voorkeur hebt voor dzEvents,
    wat als ik het goed begrijp een (proprietary variatie zijn op?) LUA script(s is),
    tov Python. Ik lees nl overal dat Python *de* ‘fastets growing major programming language’ is.

    Anne.

    Beantwoorden
  • 1 november 2018 om 19:06
    Permalink

    Leuk idee en net script. Een vraag. Is er een reden dat je niet gekozen hebt om de prijzen in gebruikersvariabelen op te nemen?

    Beantwoorden
    • 1 november 2018 om 19:21
      Permalink

      Ik ben zelf niet zo’n fan van user variables, omdat je niet kunt aangeven in welke scripts ze gebruikt worden (ik heb zo’n 30 user variables in gebruik).

      Beantwoorden
  • 3 januari 2019 om 11:27
    Permalink

    Ik heb het script nog niet geprobeerd, maar als ik het zo zie, lijkt hij nog geen rekening te houden met verschil in hoog en laag tarief. Klopt dat en heb je een idee hoe je dat dan wel voor elkaar zou kunnen krijgen?

    Beantwoorden
    • 19 januari 2019 om 15:43
      Permalink

      Script hield geen rekening met hoog en laag tarief inderdaad. Ik heb even zitten proberen met zo’n dzVents script en onderstaande if then else constructie lijkt nu te werken. Ik heb overigens de Watermeter uitgecomment omdat ik die niet heb.

      return {
      on = { timer = { “every minute” }}, — script draait iedere 5 minuten
      — on = { devices = { “Stroom”,”Gas”,”Waterverbruik” }}, — Verwijder — aan het begin van deze regel en plaats — voor bovenstaande regel als
      — je het script wilt draaien zodra er een nieuw verbruik aan Domoticz is doorgegeven
      execute = function(Domoticz)
      — Devices
      local vandaagKwh = Domoticz.devices(‘Stroom’).counterToday — Stroommeter device
      local vandaagM3Gas = Domoticz.devices(‘Gas’).counterToday — Gasmeter device
      –local vandaagM3Water = Domoticz.devices(‘Waterverbruik’).counterToday — Watermeter device

      local StroomKosten = Domoticz.devices(‘Stroomkosten’) — Stroomkosten device
      local GasKosten = Domoticz.devices(‘Gaskosten’) — Gaskosten device
      –local WaterKosten = Domoticz.devices(‘Waterkosten’) — Waterkosten device
      — Eenheidsprijs in Euro’s / Kwh – M3

      local kwhPrijs = 0

      if (Domoticz.time == ‘Between 23:00 and 07:00’) or (Domoticz.day == ‘Saturday’) or (Domoticz.day == ‘Sunday’) then
      kwhPrijs = 0.20978 — Daltarief
      else
      kwhPrijs = 0.2283 — Normaal tarief

      end

      local gasM3Prijs = 0.76767
      –local waterM3Prijs = 0.8200

      — Vaste kosten in Euro’s per dag (zoals vastrecht)
      local kwhPrijsVast = 0.82917808
      local gasM3PrijsVast = 0.66435616
      –local waterM3PrijsVast = 0.0000

      — Kosten berekenen
      local kwhKosten = tonumber(Domoticz.utils.round( (kwhPrijs * vandaagKwh)+ kwhPrijsVast,2) )–)–:gsub(“%.”,”,”) — rounded to two decimals and replace dot by comma
      local GasM3Kosten = tonumber(Domoticz.utils.round( (gasM3Prijs * vandaagM3Gas) + gasM3PrijsVast,2))–)–:gsub(“%.”,”,”)
      –local WaterM3Kosten = tonumber(Domoticz.utils.round( (waterM3Prijs * vandaagM3Water)/1000,2) + waterM3PrijsVast)–)–:gsub(“%.”,”,”)

      — Kosten updaten
      StroomKosten.updateCustomSensor(kwhKosten)
      GasKosten.updateCustomSensor(GasM3Kosten)
      –WaterKosten.updateCustomSensor(WaterM3Kosten)
      end
      }

      Beantwoorden
      • 30 april 2019 om 22:54
        Permalink

        Inderdaad dit werkt alleen was ik even stuk gelopen op het deeltje ‘ execute = function(Domoticz) ‘. In het originele voorbeeld staat ‘execute = function(dz)’ en als je dan twee stukken code merge dan gaat het mis.

        Ik ben er blij mee het werkt!!

        Beantwoorden
  • 26 maart 2019 om 20:17
    Permalink

    Geweldig artikel.. net als zovele welke hier op de site staan!
    Hoe kom jij trouwens aan die custom icons voor je gas en water sensoren? Zou je ze evt willen delen?

    Beantwoorden
  • 5 mei 2019 om 16:36
    Permalink

    ik krijg een melding in de log :
    2019-05-05 16:34:29.732 Status: dzVents: Error (2.4.6): error loading module ‘Hoog en laag tarief’ from file ‘/home/pi/domoticz/scripts/dzVents/generated_scripts/Hoog en laag tarief.lua’:
    2019-05-05 16:34:29.732 …cripts/dzVents/generated_scripts/Hoog en laag tarief.lua:2: unexpected symbol near char(226)
    en er staat een rood kruisje voor line 2

    Beantwoorden
  • 13 mei 2019 om 09:11
    Permalink

    ik krijg een melding in de log :
    2019-05-05 16:34:29.732 Status: dzVents: Error (2.4.6): error loading module ‘Hoog en laag tarief’ from file ‘/home/pi/domoticz/scripts/dzVents/generated_scripts/Hoog en laag tarief.lua’:
    2019-05-05 16:34:29.732 …cripts/dzVents/generated_scripts/Hoog en laag tarief.lua:2: unexpected symbol near char(226)
    en er staat een rood kruisje voor line 2

    Beantwoorden
  • 26 mei 2019 om 19:24
    Permalink

    kan je iets maken waarbij de terug geleverde stroom wordt verrekend?

    Beantwoorden
    • 26 mei 2019 om 20:53
      Permalink

      Hoi Maarten,

      Ik heb geen terug geleverde stroom, helaas kan ik je hier niet mee helpen.

      Beantwoorden
    • 28 mei 2019 om 03:20
      Permalink

      Hoi Maarten,

      Dat zou niet al te moeilijk moeten zijn.
      Ne zoals in het voorbeeld de kwhKosten worden berekend kun je dat ook doen voor de kwhOpbrengsten.
      Je kunt dan nog een extra virtual sensor aanmaken waarin je het verschil opslaat.

      Anne.

      Beantwoorden
      • 1 juni 2019 om 14:36
        Permalink

        Ja binnenkort eens in verdiepen.
        Ik draai nu 4.10717 en al mijn scrips worden niet meer getriggerd 🙁
        dzEvents staan aan

        Beantwoorden
  • 1 september 2019 om 21:33
    Permalink

    electricityTodaysCost = electricityTodaysCost – t[today].r1 * dz.data.energyCosts.CostEnergyR1
    electricityTodaysCost = electricityTodaysCost – t[today].r2 * dz.data.energyCosts.CostEnergyR2

    toevoegen aan het script op regel 138,139
    draai het al een aantal maanden zonder problemen 🙂

    Beantwoorden

Geef een reactie

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