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


 

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.


 

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

67 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
    • 25 november 2018 om 10:49
      Permalink

      Geert,

      Om de gegevens naar 24 uur te zetten ga je naar Setup > Settings > Log history en dan vul je 1 dag (i.p.v. 7 dagen) in.

      Beantwoorden
  • 24 november 2018 om 21:37
    Permalink

    mijn berekening blijft op nul graden staan. Ik denk dat dit komt doordat het device dat wordt uitgelezen meer informatie dan alleen temperatuur bevat (namelijk ook luchtvochtigheid en luchtdrul). Moet ik dan iets aanpassen aan het script?

    Klopt het verder dat de sensornaam volgens de bovenstaande screenshots ‘Gemiddelde buitentemperatuur’ is, en niet ‘Gemiddelde Temp buiten’ zoals in het script staat?

    Beantwoorden
    • 25 november 2018 om 10:46
      Permalink

      Hoi Sander, de sensornaam had ik tussendoor gewijzigd, waardoor de screenshot inderdaad niet juist was. Ik heb nu een juiste screenshot in het artikel gezet (mogelijk zie je de oude screenshot nog door cache).

      Indien je een device gebruikt met temperatuur en luchtvochtigheid, dan moet je die eerst splitsen, zie dit artikel: https://ehoco.nl/gecombineerde-sensor-in-domoticz-splitsen/

      Beantwoorden
      • 25 november 2018 om 13:45
        Permalink

        dankje Joost! Ook zonder splitsing werkt mn gemiddelde buitentemp sensor nu. Kennelijk herkent het script het temperatuur gedeelte dus gewoon. Mn gasverbruik per graaddag wil nog niet helemaal lukken helaas. De uitkomst blijft op nul steken en log geeft volgende: ” 2018-11-25 13:43:00.585 Status: dzVents: Error (2.4.6): error loading module ‘m2 per graaddag berekenen’ from file ‘/home/pi/domoticz/scripts/dzVents/generated_scripts/m2 per graaddag berekenen.lua’:
        2018-11-25 13:43:00.585 …/dzVents/generated_scripts/m2 per graaddag berekenen.lua:23: ‘}’ expected (to close ‘{‘ at line 1) near ”

        (toffe site dit trouwens, heel mooi startpunt voor iemand die dit speelgoed net leert kennen)

        Beantwoorden
          • 25 november 2018 om 13:57
            Permalink

            doet het nu. Valt me wel op dat het script qua type steeds terugspringt naar ‘device’ ipv ‘timer’. Maakt dit uit of wat veroorzaakt dit?

          • 25 november 2018 om 14:06
            Permalink

            Geen idee waarom het script bij jou terugsprint naar device i.p.v. timer. Pas op regel 2 eens een paar keer de tijd aan om te testen of het script wel iedere keer draait.

            Uiteindelijk hoeft het script maar één keer per dag te draaien, zo laat mogelijk.

        • 20 februari 2019 om 19:44
          Permalink

          Hoi Sander
          ik heb deze melding ook steeds :dzVents:

          Error (2.4.6): error loading module ‘m2 per graaddag berekenen’ from file ‘/home/pi/domoticz/scripts/dzVents/generated_scripts/m2 per graaddag berekenen.lua’:
          2018-11-25 13:43:00.585 …/dzVents/generated_scripts/m2 per graaddag berekenen.lua:23: ‘}’ expected (to close ‘{‘ at line 1) near ”

          Wat heb jij er aan gedaan om het te verhelpen ????

          Alvast bedankt
          Rene

          Beantwoorden
  • 11 december 2018 om 21:13
    Permalink

    Beste….

    Is het niet mogelijk om de graaddagen apart ook in een dummy weer te geven?
    Zou mooi zijn om dit ook onafhankelijk te zien.

    Zou daarnaast dit ook kunnen met de verbruikte KWh voor mijn warmtepomp?
    Zou apart zijn als ik KWh om kan reken [ 2kWh voor 1M³ ] zodat ik mooi vergelijk kan zien, voor mijn verbruik van de Warmtepomp TOV van graaddagen..

    GAS is zo oldscool.

    Beantwoorden
  • 5 januari 2019 om 21:12
    Permalink

    Bedankt voor de uitgebreide beschrijving. Was hier naar op zoek en nu was het gewoon knippen en plakken.

    Ik kwam er vandaag alleen wel achter dat de gemiddelde temperatuur niet klopte. Na wat zoek werk blijkt bij het ophalen van de json data hij niet een dag aan data ophaalt maar 5 dagen aan data.
    Mogelijk komt dit door een instelling die ik zelf ergens gedaan heb ivm dataretentie maar uiteindelijk klopt het dus niet.

    Ik heb het nu opgelost door in de for loop in regel 43 te starten op positie 1153 ipv 1 (for i = 1153, elements do)

    Nu klopt de waarde wel.
    Mogelijk dat dit bij meer domiticz installaties mis gaat ?

    Beantwoorden
    • 5 januari 2019 om 21:18
      Permalink

      De short log history van de short log sensors op 1 dag zetten in Domoticz, dan werkt het perfect!

      Beantwoorden
    • 6 januari 2019 om 15:34
      Permalink

      Zie mijn bericht van 20 november. Je heb je instelling ‘short log sensors’ waarschijnlijk op 4 dagen staat.
      Ik heb het ook zo opgelost. Geen fraaie oplossing; je haalt nu 5 keer zoveel data op dan je nodig hebt, maar het werkt wel.
      Geert

      Beantwoorden
      • 16 januari 2019 om 21:15
        Permalink

        Zelf heb ik er voor gekozen om de laatste (24*60/5)=288 elementen mee te nemen … dan kan iedereen de short-log gewoon lekker laten staan:

        for i = (elements-288), elements do
        sum = sum + jsonData.result[i].te
        end

        ave = sum / 288 — number of elements

        Beantwoorden
        • 9 december 2019 om 01:04
          Permalink

          Hier zit volgens mij een klein denkfoutje in … “for i = (elements-288), elements do” neemt namelijk 289 elementen mee. Dat komt door de werking van een “for-loop”. Bedenk maar wat er gebeurt als je de volgende for-loop neemt: “for i = (10-2), 10 do” .. deze zal voor i de waardes 8, 9 en 10 doorlopen en dat zijn er 3 en niet 2.

          Volgens mij moet het als volgt zijn:

          for i = (elements-287), elements do
          sum = sum + jsonData.result[i].te
          end

          ave = sum / 288

          Beantwoorden
  • 21 januari 2019 om 19:46
    Permalink

    Top site dit! Echter gaat er bij mij wat mis:

    2019-01-21 19:40:00.858 Error: EventSystem: in Gemiddelde temp buiten: [string “local function DeviceUpdate(idx, value1)
    …”]:41: attempt to get length of field ‘result’ (a nil value)

    Zie ik in de logging staan. Iemand een idee?

    Beantwoorden
  • 21 januari 2019 om 19:54
    Permalink

    Goedenavond, toffe site! Ik krijg de volgende fout:

    2019-01-21 19:40:00.858 Error: EventSystem: in Gemiddelde temp buiten: [string “local function DeviceUpdate(idx, value1)
    …”]:41: attempt to get length of field ‘result’ (a nil value)

    Dit is mijn ingestelde script:

    local function DeviceUpdate(idx, value1)
    local cmd = string.format(“%d|0|%.2f”, idx, value1)
    –print(cmd)
    table.insert (commandArray, { [‘UpdateDevice’] = cmd } )
    end

    Debug = “YES” — 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 = ‘Gem Temp Buiten’
    local temperature_idx = otherdevices_idx[temperature_name]

    local uitlees_name = ‘Temp/Hum Buiten’
    local uitlees_idx = otherdevices_idx[uitlees_name]

    –Temperaturen van afgelopen 24 uur opvragen
    local sQuery = ‘curl “http://192.168.2.100:8082/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 ‘/volume1/@appstore/domoticz/var/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

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

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

    end
    return commandArray

    Ik heb zelf mijn twijfels bij het opgeslagen path voor het script. Hier stond een URL voor PI, maar ik werk met Synology NAS. Wat moet ik dan invullen?

    Thanks!

    Beantwoorden
  • 21 januari 2019 om 21:39
    Permalink

    Hoi Sander,
    In het script voor de “gemiddelde buiten temperatuur” wordt het volgende script gebruikt:
    {code}json = assert(loadfile ‘/home/admin/domoticz/scripts/lua/JSON.lua’)(){code}
    Deze verwijzing heb ik aangepast, omdat mijn domoticz anders is geconfigureerd.
    Moet ik het JSON.lua aanpassen om het “gemiddelde buiten temperatuur” te laten functioneren?
    Het “Graaddag” script zie ik wel opgeslagen worden onder:
    “/home/admin/domoticz/scripts/dzVents/generated_scripts/”
    Zou het “gemiddelde buiten temperatuur” script ook ergens opgeslagen moeten worden?
    Het JSON.lua script is sinds de installatie van Domoticz niet gewijzigd.

    Heb jij een idee, wat er bij mijn configuratie fout gaat?

    Beantwoorden
  • 11 februari 2019 om 16:27
    Permalink

    Bij mij wordt de gemiddelde dag temperatuur mooi berekend, maar graaddagen blijft op 0 staan. Heb geen fout meldingen in mijn log. Als ik het lua script opsta als timer, springt hij bij mij ook steeds terug op device.

    kan iemand mij helpen, alvast bedankt.

    groet Rene

    Beantwoorden
    • 11 februari 2019 om 18:08
      Permalink

      even een vraagje tussendoor…
      Bereken je graaddagen überhaupt wel met een gemiddelde buiten temp over 24 uur?
      De graaddagen is toch live..?

      Beantwoorden
  • 2 mei 2019 om 08:13
    Permalink

    Bij Overige staat bij mij netjes de m3/gd waarde, maar deze is rood gekleurd.
    Deze rode kleur zie ik bij alle andere temperaturen en schakelaars niet, dus waarom bij deze wel denken jullie ?

    Beantwoorden
    • 9 oktober 2019 om 22:27
      Permalink

      Deze m3/gd waarde is rood omdat deze waarde maar 1 x per dag wordt geupdate door het script. Ik zoek nog naar een manier om dit op te lossen. Iemand een idee?

      Beantwoorden
      • 10 oktober 2019 om 07:11
        Permalink

        Setup > Settings > tabblad Other > Sensor timeout

        Beantwoorden
  • 2 mei 2019 om 22:47
    Permalink

    zou iemand dit script ook zo kunnen maken dat je in domoticz een graaddagen teller hebt.
    Dus dat het makkelijk om te zien is hoeveel graaddagen er zijn geweest?

    Beantwoorden
  • 18 oktober 2019 om 16:38
    Permalink

    Geweldig artikel!

    Ik heb een vraag, gezeur in de marge meer. Bij de calculatie om 2358 wordt het verbruik per graaddag een dag later geboekt. Ik zag dat de waardes over gisteren op vandaag geboekt werden.

    Is de oplossing door de calculatie om 2353 uur te laten plaatsvinden?

    Hoe ga jij hier mee om?

    Beantwoorden
    • 19 oktober 2019 om 19:46
      Permalink

      Ik heb daar geen last van. Je kunt het script op ieder willekeurig moment laten draaien, maar het beste is uiteraard zo laat mogelijk.

      Beantwoorden
  • 2 november 2019 om 11:26
    Permalink

    Bedankt Joost, ik wilde al zoiets als dit maken en dit heeft me nogal wat tijd bespaard 🙂 Bedankt!

    Opmerkingen ter verbetering:
    – in regel 28 van je 1e script moet je ook nog je eigen directory zetten (mijn installatie staat niet onder ‘pi’ maar onder een andere gebruikersnaam). MIsschien dat bij de instructie zetten>
    – In je 2e script staat ook een (inmiddels) verouderde functie blijkbaar in regel 14 want ik krijg deze ‘info’ in de log: “domoticz.round deprecated. Please use domoticz.utils.round.”

    Vreemd zij effect: in je originele script zie ik output ‘Gemiddelde temperatuur buiten (laatste 24u): 14.010000228882’ in de logs, met domoticz.utils.round wordt dat ‘Gemiddelde temperatuur buiten (laatste 24u): 14′, maar dat zou eigenlijk helemaal geen effect moeten hebben want die ’round’ zit daar niet… Mysterie 🙂

    Beantwoorden
  • 21 november 2019 om 09:20
    Permalink

    Joost,

    Leuk om hiermee te stoeien!

    MBT tot item “gasverbruik per graaddag”: de sensor bleef bij mij op 0 staan. In de instructie wordt de sensor aangemaakt met “gasverbruik per graaddag”, terwijl het dzVentz script een andere naam hanteert: “gas per graaddag”. Heb de naam van de sensor renamed naar “gas per graaddag”, nu werkt de functie. Kwam hierop door de logging te bekijken van het moment van draaien script. Zou je hier naar kunnen kijken?

    Beantwoorden
  • 6 februari 2020 om 07:41
    Permalink

    Goedemorgen,

    Mooi scriptje! Inmiddels de gemiddelde temperatuur per dag prima op orde.
    De graaddagen blijft ook na gisteren op 0 staan.
    Ook geen vermelding in de logs om 23:58.

    Ik ga eens op zoek naar een manier om dit script handmatig te starten ter verificatie.

    Beantwoorden
  • 27 maart 2020 om 11:24
    Permalink

    Joost,
    De gemiddelde buitentemperatuur wordt goed berekent.
    Echter het DzVents script voor de berekening van het gasverbruik per graaddag heeft in mijn webbrowser maar 12 regels terwijl jij in de beschrijving verwijs naar regel 13 en 24.
    Ook in ander browsers mis ik deze regels.
    Is dit een probleem op de website?
    Waar kan ik het complete script vinden?

    Beantwoorden
    • 27 maart 2020 om 12:31
      Permalink

      Het script werd inderdaad niet goed weergegeven, is nu opgelost!

      Beantwoorden
  • 20 april 2020 om 14:31
    Permalink

    Hoi,

    Sinds de nieuwe domoticz 2020.1 versie, krijg ik bijgaande foutmelding:

    2020-04-20 13:55:00.219 Error: EventSystem: in Gemiddelde buitentemperatuur berekenen: [string “local function DeviceUpdate(idx, value1) …”]:34: attempt to get length of a nil value (field ‘result’)

    Enig idee wat hier niet goed gaat? En wat er verbetert moet worden?

    Beantwoorden
    • 21 april 2020 om 07:07
      Permalink

      Waar haal jij de temperatuur vandaan? Een van de grote gratis API’s van Dark Sky is offline getrokken door de nieuwe eigenaar.

      Wel zit er een rechtstreekse koppeling naar Buienradar in de nieuwe Domoticz. Even de coördinaten van je adres invoeren en de rest wijst voor zich.

      Beantwoorden
    • 30 april 2020 om 13:52
      Permalink

      Ik heb deze melding ook nog steeds, heb jij al een oplossing?

      Beantwoorden
  • 20 april 2020 om 15:24
    Permalink

    Joost, superleuk om allemaal te proberen, echter loop ik tegen 2 issues aan op mijn Synology met Domoticz: bij script 1 gemiddelde temparetauutr geeft hij aan:
    “Error: EventSystem: in Script #1: [string “local function DeviceUpdate(idx, value1) …”]:32: attempt to index a nil value (local ‘jsonData’)”
    Wat zegt dit?

    En bij het splitsen van de temperatuur en luchtvochtigheid krijg ik de volgende melding:
    “Error: EventSystem: in Script #3: [string “commandArray = {} …”]:14: ‘)’ expected near ‘”
    Wat zegt dit? Of veroorzaakt dit ook de fout bij script 1 omdat dit nog een temp/hum meter is en niet goed gesplits?

    Beantwoorden
  • 1 mei 2020 om 14:32
    Permalink

    Volgens mij kan het berekenen van het gemiddelde wel eenvoudiger. Ik heb onderstaand script hiervoor gemaakt. Kun je zelf opgeven hoeveel uren data hij moet berekenen:

    return {
    active = true,
    on = {
    devices = {‘Buiten’} — netatmo buiten temp sensor
    },
    data = {
    temperatures = { history = true, maxHours = 24 }
    },
    execute = function(domoticz, sensor)

    — haal de data uit de sensor van de netatmo
    domoticz.data.temperatures.add(sensor.temperature)

    — custom sensor die we willen updaten
    local BuitenGemTemp = domoticz.devices(‘Gemiddelde Temp Buiten’)

    — bereken het gemiddelde
    local tempAverage = domoticz.data.temperatures.avg()

    — update de customsensor met de gemiddelde temp
    BuitenGemTemp.updateTemperature(tempAverage)

    end
    }

    Beantwoorden
  • 24 september 2020 om 12:39
    Permalink

    Joost, een top script loopt lekker door.

    Echter zie ik bij mij dat het script een uur lang dezelfde waarde opslaat in het device. Terwijl ik echter maar één run moment heb staan.
    Hiermee gaat natuurlijk de cijfers wat in de war.
    Heeft iemand een idee wat heb ik fout heb staan?

    Beantwoorden
    • 26 september 2020 om 09:30
      Permalink

      Je geeft aan dat het script maar 1x per dag draait, dan wordt ook maar 1x per dag de waarde in de Domoticz database opgeslagen (en dat is ook goed). De grafiek toont ieder uur (tot 23.58 uur) dezelfde waarde, maar dat is verder niet interessant.

      Beantwoorden
    • 19 oktober 2021 om 13:04
      Permalink

      Dag,

      ik loop tegen hetzelfde aan. Ik krijg keurig om 23:58 een berichtje met de m3 per graaddag. In de database zie ik vanaf 24.00 uur iedere vijf minuten een waarde staan. Het script heb ik letterlijk overgenomen.

      Als enig idee wat de oorzaak is?

      Beantwoorden
  • 24 september 2020 om 19:36
    Permalink

    Ik krijg de eerste sensor niet werkend (Gemiddelde Temp buiten).

    Mijn error log geeft de volgende output:

    2020-09-24 19:30:00.643 Error: EventSystem: in Gemiddelde Temp buiten: /home/pi/domoticz/scripts/lua/JSON.lua:808: HTML passed to JSON:decode(): Unauthorized401 Unauthorized
    2020-09-24 19:31:00.627 Error: dzVents: local netWork not open for dzVents openURL call !
    2020-09-24 19:31:00.627 Error: dzVents: check dzVents wiki (look for ‘Using dzVents with Domoticz’)
    2020-09-24 19:32:00.637 Error: dzVents: local netWork not open for dzVents openURL call !
    2020-09-24 19:32:00.638 Error: dzVents: check dzVents wiki (look for ‘Using dzVents with Domoticz’)
    2020-09-24 19:32:01.041 Error: dzVents: Error: (3.0.2) WUS: [0003] Lokatie nil/0; Probleem bij het ophalen van de locatie gegevens van domoticz
    2020-09-24 19:33:00.676 Error: dzVents: local netWork not open for dzVents openURL call !
    2020-09-24 19:33:00.676 Error: dzVents: check dzVents wiki (look for ‘Using dzVents with Domoticz’)

    Het lijkt een rechten probleem te zijn, maar hoe kan ik dat fixen?

    Beantwoorden
    • 26 september 2020 om 09:31
      Permalink

      Setup > Settings > Local Networks (no username/password)

      Hier moet je even de juiste ip-adres(sen) invullen.

      Beantwoorden
      • 26 september 2020 om 10:30
        Permalink

        Bedankt! De eerste error is daarmee opgelost. Nu krijg ik alleen deze nog:

        Error: EventSystem: in Gemiddelde Temp buiten: /home/pi/domoticz/scripts/lua/JSON.lua:808: HTML passed to JSON:decode(): Unauthorized401 Unauthorized

        Enig idee hoe ik dit kan oplossen? Alvast veel dank 🙂

        Beantwoorden
  • 3 december 2020 om 10:12
    Permalink

    Hallo,

    Ik heb inmiddels dit script zonder enig probleem toegepast! waarvoor dank!
    Maar ik heb een vraag: het Gasverbruik in mijn huis bestaat naast verwarmen van de CV ook uit een deel verwarmen warmwater.
    In de huidige berekening word dit deel van het gas ook meegenomen in de graaddag berekening.
    Is er een methode om bijv 0,5 kuub gas minder te rekenen?

    Beantwoorden
  • 4 december 2020 om 10:20
    Permalink

    Hallo allemaal, ik ben een absolute newby met dit.
    Ik krijg dezelfde melding als Kramer:
    “Error: EventSystem: in Scr_gem_buiten_temp: [string “local function DeviceUpdate(idx, value1) …”]:42: attempt to index a nil value (local ‘jsonData’)”

    Mijn script ziet er zo uit:
    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 = ‘Gem_buiten_temp’
    local temperature_idx = otherdevices_idx[temperature_name]

    local uitlees_name = ‘Grond_temp’
    local uitlees_idx = otherdevices_idx[uitlees_name]

    –Temperaturen van afgelopen 24 uur opvragen
    local sQuery = ‘curl “http://http://192.168.178.206:8084//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’)()
    json = assert(loadfile ‘/volume1/domoticz/var/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

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

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

    end
    return commandArray

    Alvast bedankt voor jullie hulp in deze!

    Beantwoorden
  • 13 december 2020 om 15:36
    Permalink

    Hallo,

    Ik ben een absolute beginner. Ik heb Domoticz op mijn NAS geinstalleerd en maak gebruik van de Buienradar API. Ik heb het eerste script gekopieerd en aangepast naar mijn eigen locatie en namen. Ik krijg een foutmelding, Error: EventSystem: in Scr_gem_buiten_temp: [string “local function DeviceUpdate(idx) …”]:2: bad argument #2 to ‘format’ (number expected, got nil)
    Mijn script staat hieronder. Iemand enig idee?

    local function DeviceUpdate(idx)
    local cmd = string.format(“%d|0|%.2f”, idx)
    –print(cmd)
    table.insert (commandArray, { [‘UpdateDevice’] = cmd } )
    end

    Debug = “YES” — Debugging aanzetten (“YES”) of uitzetten (“NO”)

    commandArray = {}

    local m = os.date(‘%M’)
    if (m % 1 == 0) then — script loopt iedere 5 minuten

    — Variabelen instellen
    local temperature_name = ‘Gem_buiten_temp’
    local temperature_idx = otherdevices_idx[temperature_name]

    local uitlees_name = ‘Grond_temp’
    local uitlees_idx = otherdevices_idx[uitlees_name]

    –Temperaturen van afgelopen 24 uur opvragen
    local sQuery = ‘curl “http://192.168.178.206:8084/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 ‘/volume1/domoticz/var/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

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

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

    end
    return commandArray

    Beantwoorden
  • 10 februari 2021 om 02:35
    Permalink

    En ook dit script heb ik met enige aanpassing gebruikt om de gemiddelde temperatuur van de sensor op mijn eigen dak en de daarbij horende graaddag(en) automatisch te laten berekenen in Domoticz

    Ook hiervoor bedankt 🙂

    Anne.

    Beantwoorden
  • 21 april 2021 om 12:17
    Permalink

    Hallo allemaal,

    Sinds een update van docker domoticz image (linuxserver/domoticz) loopt bij mij het scrip voor het berekenen van de gemiddelde temperatuur vast.

    De foutboodschap is: Error: EventSystem: in Average temperature: [string “local function DeviceUpdate(idx, value1)…”]:28: cannot open /home/superuser/data/docker/domoticz/config/scripts/lua/JSON.lua: No such file or directory

    Ik zie de file JSON.lua staan, heb eigenlijk het vermoeden dat de oorsprong van de fout in de query ligt: local sQuery = ‘curl “http://10.0.0.34:8082/json.htm?type=graph&sensor=temp&idx=’..tostring(uitlees_idx)..’&range=day”‘

    Als ik de variabele “day” opvraag, dan heeft die de waarde nil.
    Als ik zelf het curl statement uitvoer in Chrome lukt het me niet om een juiste waarde voor “day” te vinden. curl antwoordt met error status.
    – Voor debugging, weten jullie wat voor format “day” heeft? Met bijv. “0421” of “20210421” lukt het niet.
    – Weten jullie waar de lua global “day” gedefinieerd wordt?

    Jelger

    Beantwoorden
  • 21 april 2021 om 19:53
    Permalink

    Hallo allemaal,

    Kan toch een verkeerde “day” parameter uitsluiten, als ik een print doe van de variabele “raw” zie ik de waarnemingen voorbij komen.

    Dan weer naar het fileload commando: Het absolute pad naar JSON.lua is goed, een cat /home/…/JSON.lua laat de inhoud zien. Heb verder van alles geprobeerd met andere eigenaren en met andere lees/schrijf rechten, geen resultaat.

    Iemand nog een idee, niet zo simpel dit.

    Jelger

    Beantwoorden
  • 21 april 2021 om 20:19
    Permalink

    Goedenavond allemaal,

    Probleem opgelost. Domoticz draait bij mij in een container. Nu had ik het absolute pad op de host genomen, maar het moet dus het pad in de container zijn: /config/scripts/lua/JSON.lua.

    Ben wel blij zeg!

    Jelger

    Beantwoorden
  • 18 september 2021 om 08:58
    Permalink

    Dank voor het idee. Ik zag in de comments dat veel mensen problemen krijgen doordat de gemiddelde temperatuur uit domoticz’ shortlog van de buiten temperatuur sensor wordt gelezen. Hier is een dzvents scriptje om de gemiddelde temperatuur over de laatste 24 uur bij te houden, zonder die short log te lezen. En ik heb het interval een beetje langer gemaakt: 15 minuten, om het aantal waarden een beetje binnen de perken te houden. Mijns inziens heeft het niet zo veel nut om elke 5 minuten waarden te gebruiken.

    local TIMER_EVENT_NAME = ‘every 15 minutes’
    local OUTSIDE_TEMPERATURE_NAME = ‘Buiten: TempHum’
    local AVERAGE_TEMPERATURE_NAME = ‘Buiten: Gemiddelde temperatuur’

    return {
    on = {
    timer = {
    TIMER_EVENT_NAME
    }
    },
    logging = {
    — level = domoticz.LOG_INFO,
    marker = ‘average outside temp’,
    },
    data = {
    temperatures = { history = true, maxHours = 24 }
    },
    execute = function(domoticz, item)
    if item.isTimer and TIMER_EVENT_NAME == item.trigger then
    local outside_temperature_device = domoticz.devices(OUTSIDE_TEMPERATURE_NAME)
    local average_temperature_device = domoticz.devices(AVERAGE_TEMPERATURE_NAME)
    if nil == outside_temperature_device then
    domoticz.log( ‘Device ‘ .. OUTSIDE_TEMPERATURE_NAME .. ‘ not found.’, domoticz.LOG_ERROR)
    elseif nil == average_temperature_device then
    domoticz.log( ‘Device ‘ .. AVERAGE_TEMPERATURE_NAME .. ‘ not found.’, domoticz.LOG_ERROR)
    else
    domoticz.data.temperatures.add(outside_temperature_device.temperature)
    average_temperature_device.updateTemperature(domoticz.data.temperatures.avg())
    end
    end
    end
    }

    Beantwoorden
  • 28 november 2021 om 13:24
    Permalink

    Hallo,
    Ik heb het script omgebouwd voor mijn (Windows) situatie. Aangezien ik nog geen fysieke temp sensor heb, probeer ik het werkend te krijgen met het Buienradar script. Maar krijg geen data te zien. In de log staat daarom ook de volgende foutmelding:
    string “local function DeviceUpdate(idx, value1)…”]:41: attempt to index a nil value (local ‘jsonData’)
    Als ik een print doe van de Raw zegt hij ook dat hij leeg is. [string “local function DeviceUpdate(idx, value1)…”]:25: global ‘Print’ is not callable (a nil value)
    ik heb het idee dat vanwege de Buienradar data deze curl opdracht niet goed uitgelezen wordt.
    local sQuery = ‘curl “http://192.168.178.120:8080/json.htm?type=graph&sensor=temp&idx=’..tostring(uitlees_idx)..’&range=day”‘
    Wie kan mij hierin helpen?

    Beantwoorden
    • 29 november 2021 om 14:44
      Permalink

      Hoi Jan,

      Wat gebeurt er als je het commando op de command prompt uitvoert, en dan dus de juiste idx invult?
      Bijvoorbeeld voor idx 20211129:
      curl “http://192.168.178.120:8080/json.htm?type=graph&sensor=temp&idx=20211129&range=day”

      Kan het een rechten ding zijn dat je de URL niet kunt benaderen?

      Anne.

      Beantwoorden
      • 4 december 2021 om 15:43
        Permalink

        Hallo Anne,
        Dan is de melding hetzelfde. En wanneer ik met Json de waardes ophaal kan ik veel data ophalen (ook remote), maar Graph&Sensor kent hij niet. Heeft dit te maken omdat dit niet op een RPi is maar onder Windows 7?
        ik hoor je graag,
        Jan

        Beantwoorden
      • 5 december 2021 om 12:49
        Permalink

        sorry ik had t verkeerd gelezen. ik had het in de webbrowser gedaan, puur met http.
        in de command prompt gaf hij aan, dat hij dit commando niet kende. Ik heb toen Curl geïnstalleerd. En idd zoals je al vermoedde, geeft hij aan dat ik geen rechten heb.
        Unauthorized401 Unauthorized
        Nadat ik de beveiliging er af gehaald heb, kreeg ik dit antwoord.
        {
        “ActTime” : 1638703917,
        “AstrTwilightEnd” : “18:33”,
        “AstrTwilightStart” : “06:25”,
        “CivTwilightEnd” : “17:09”,
        “CivTwilightStart” : “07:49”,
        “DayLength” : “08:01”,
        “NautTwilightEnd” : “17:52”,
        “NautTwilightStart” : “07:06”,
        “ServerTime” : “2021-12-05 12:31:57”,
        “SunAtSouth” : “12:29”,
        “Sunrise” : “08:29”,
        “Sunset” : “16:29”,
        “app_version” : “2021.1”,
        “status” : “OK”,
        “title” : “Devices”
        }
        Dus daar gaat het goed (denk ik) maar in de log blijft de fout staan. Het volgende probleem zal dan wel zijn dat hij het JSON.lua niet goed kan runnen. Ik denk dat onder windows de regel moet zijn: json = assert(loadfile “C:\\Program Files\\Domoticz\\scripts\\lua\\JSON.lua”)()
        toch?

        Beantwoorden
        • 5 december 2021 om 13:09
          Permalink

          Nog een foutje gevonden. Ik had de verkeerde IDX laten staan met allerlei testen. vandaar dat ik de verkeerde output kreeg. de curl:
          curl “http://192.168.178.120:8080/json.htm?type=graph&sensor=temp&idx=82&range=day”
          geeft dit antwoord: volgens mij klopt dat beter.
          {
          “d” : “2021-12-04 07:10”,
          “te” : 4.2999999999999998
          },
          {
          “d” : “2021-12-04 07:15”,
          “te” : 4.5
          },
          {
          “d” : “2021-12-04 07:20”,
          “te” : 4.5
          },
          {
          “d” : “2021-12-04 07:25”,
          “te” : 4.5
          },
          Maar error komt nog steeds. 47: attempt to index a nil value (local ‘jsonData’)

          Beantwoorden
  • 3 december 2021 om 15:49
    Permalink

    Mooi script en het werk, alleen geeft Domticz een error dat lua script te lang duurt. Is dat op te lossen?

    Error: EventSystem: Warning!, lua script Gemiddelde buiten Temperatuur has been running for more than 10 seconds

    Beantwoorden
  • 25 juni 2022 om 12:32
    Permalink

    Ook hier ‘ineens’ de vaker voorkomende foutmelding:

    2022-06-25 00:45:00.740 Error: EventSystem: in Gemiddelde temperatuur: [string “local function DeviceUpdate(idx, value1) …”]:32: attempt to index a nil value (local ‘jsonData’)

    Heeft tijden goed gewerkt, maar ineens niet meer. Heb nog niet direct oplossingen langs zien komen hier?

    Beantwoorden
  • 28 juni 2022 om 12:12
    Permalink

    Werkt dit script nog goed voor iemand?

    Ik krijg geregeld foutmeldingen, en gemiddeld aantal graaddagen staat op 2000+
    de deviceupdate functie zou voor problemen zorgen.

    local function DeviceUpdate(idx, value1)
    local cmd = string.format(“%d|0|%.2f”, idx, value1)
    –print(cmd)
    table.insert (commandArray, { [‘UpdateDevice’] = cmd } )
    end

    Debug = “YES” — 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 Buitentemp’
    local temperature_idx = 64 –otherdevices_idx[temperature_name]

    –local uitlees_name = ‘Ground Temperature (10 cm)’
    local uitlees_idx = 50 –otherdevices_idx[uitlees_name]

    –Temperaturen van afgelopen 24 uur opvragen
    local sQuery = ‘curl “http://10.0.0.30: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

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

    –Gemiddelde temperatuur opslaan in virtuele temperatuur sensor
    –DeviceUpdate(temperature_idx,ave)
    commandArray[‘Gemiddelde Buitentemp’]=tostring(ave)

    end
    return commandArray

    Beantwoorden
  • 14 oktober 2022 om 08:35
    Permalink

    Ik probeer van alles maar krijg de gemiddelde temperatuur sensor niet werkend.

    Zou iemand voor mij een werkend script kunnen plaatsen?

    Alvast bedankt. (hieronder de foutmelding)

    2022-10-14 08:34:00.551 Error: EventSystem: in Gemiddelde Temp buiten: /home/avdstreek/domoticz/scripts/lua/JSON.lua:808: HTML passed to JSON:decode(): HTTP Status 400 – Bad Requestbody {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}HTTP Status 400 – Bad Request

    Beantwoorden
  • 1 november 2022 om 00:16
    Permalink

    Ik gebruik een virtuele sensor “Temperatuur buiten” die ik heb aangemaakt dmv splitsen buienradar sensor TempHumBaro (type Temp + Humidity + Baro) als input voor onderstaande:

    — start script
    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.1.5: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

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

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

    end
    return commandArray
    — end script

    Beantwoorden
  • 15 maart 2023 om 14:10
    Permalink

    Is het niet veel handiger om de gemiddelde temp te lezen uit de TempHumBaro data? Die wordt door Domoticz sowieso al weergegeven!

    Hoe kan dat worden gedaan?

    Beantwoorden
  • 17 juli 2023 om 21:31
    Permalink

    Sinds de upgrade naar 2023.1 werken de scripts niet meer krijg een melding unauthorized en kan nog geen oplossing vinden.

    Beantwoorden
    • 18 juli 2023 om 11:30
      Permalink

      Heb de oorzaak gevonden.
      Bij instellingen -> beveiliging moet je je locale netwerk ip invullen (mag * als wildcard gebruiken)
      bijv: 192.xxx.xxx.* waardoord de curl weer werkt.

      Beantwoorden

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.