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) + kwhPrijsVast),2) --)--:gsub("%.",",")   -- rounded to two decimals and replace dot by comma
        local GasM3Kosten    = tonumber(dz.utils.round( (gasM3Prijs * vandaagM3Gas) + gasM3PrijsVast),2) --)--:gsub("%.",",")
        local WaterM3Kosten  = tonumber(dz.utils.round( (waterM3Prijs * vandaagM3Water)/1000 + waterM3PrijsVast),2) --)--: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

20 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
    • 6 oktober 2019 om 11:35
      Permalink

      Hoi Maarten,

      Zou je je script hier eens bij willen zetten?
      Mijn script gaat maar tot regel 39.
      Ook ik ben geïnteresseerd in de teruglevering kosten te verrekenen.
      Dank U.

      Beantwoorden
  • 29 september 2019 om 20:29
    Permalink

    Prachtig script.
    Echter als ik bij vaste kosten ipv 0.0 invoer maar onderstaande:

    — Vaste kosten in Euro’s per dag (zoals vastrecht)
    local kwhPrijsVast = 0.14795
    local gasM3PrijsVast = 0.14795

    Dan is er geen afronding op 2 getallen (bij 0,0 als vastprijs wel.
    Hoe zou ik dat op kunnen lossen?

    Ik draai Domoticz V4.11337

    Beantwoorden
    • 29 september 2019 om 20:55
      Permalink

      Script is nu aangepast, zodat bij gebruik van vaste kosten ook de afronding op 2 decimalen wordt toegepast.

      Beantwoorden
  • 6 oktober 2019 om 19:59
    Permalink

    Bedankt voor het juist afronden.
    Ik draaide Domoticz V4.11337, maar heb nu een schone installatie gedaan en draai nu Domoticz V4.10717 (laatste stable) en waag me even niet meer aan de Beta releases.

    Helaas lijkt e.e.a. Niet meer getriggerd te worden.
    alles blijft op 1 EUR staan.

    Maarten Duijst schreef op 1 september 2019 om 21:33 als oplossing:

    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

    Maar er is helemaal geen regel 138,139 in je script.
    Waar moet ik dat dan neerzetten om alles werkend (trigger) te krijgen onder Domoticz V4.10717 (laatste stable)?

    Beantwoorden
  • 28 oktober 2019 om 22:52
    Permalink

    Hallo George,

    Maarten gebruikt volgens mij een ander script. Maar met de onderstaande regel kun je de teruglevering uit je stroommeting halen.

    local vandaagKwhOpgewekt = dz.devices(‘Stroomverbruik’).counterDeliveredToday — Stroommeter device

    Als je deze waarde aftrekt van het verbruik dan heb je de energiekosten per dag.

    — Kosten berekenen
    local kwhKosten = tonumber(dz.utils.round( ((kwhPrijs * (vandaagKwh-vandaagKwhOpgewekt) + kwhPrijsVast)),2))–:gsub(“%.”.”.”) — rounded to two decimals and replace dot by comma

    Beantwoorden

Geef een reactie

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