tradetracker

Slimme meter (p1) opsplitsen naar 4 tellers Domoticz met Lua

()

Je wilt graag je slimme meter gegevens verdelen over 4 sensoren zodat je weet wat je Verbruik laag & hoog en natuurlijk je Teruglevering laag & hoog is . Nu kan je dit zelf doen maar dit kan je ook automatische uit laten voeren. Dit gaat met het volgende timer script geschreven in lua voor Domoticz vanaf versie v2020.1 werkt dit goed daaronder onbekend.

Update : 29/08/2020-/-v1.10: verbeteringen in tegengaan van pieken in verwerkt

Wat is dubbeltarief?

Het dubbeltarief bestaat uit een normaal tarief (verbruik hoog en teruglevering hoog) en een daltarief (verbruik laag en teruglevering laag). Het daltarief betaalt u ’s nachts, in het weekend en tijdens feestdagen. We noemen dit ook wel daluren.

U betaalt het normaal tarief op werkdagen van 7.00 tot 21.00 uur of 23.00 uur. In de ene regio stopt het hoge tarief om 21.00 uur, en in de andere regio om 23.00 uur. De netbeheerder bepaalt of de daluren om 21.00 uur of om 23.00 uur beginnen. Vraag uw netbeheerder hoe laat in uw regio het daltarief begint.

Slimme meter (p1) opsplitsen naar 4 tellers Domoticz met Lua 1

Om te beginnen ga je naar instellingen
en daarna ook instellingen
daarna klik je het knopje overige aan

Slimme meter (p1) opsplitsen naar 4 tellers Domoticz met Lua 2

Nu zal bijna onder aan het vakje DZEVENTS staan hier moet het vinkje voor staan. En nu moet je boven aan de pagina op Bewaar Instellingen drukken anders slaat hij het niet op.



Advertentie :


Virtuele tellers maken

Eerst maak je een nieuwe dummy aan (onder hardware), en hier maak je 4 sensoren aan vanaf die dummy zodat je altijd weet waar wat bij hoort. (en 2 stuks als je geen zonnepanelen hebt)

dummy slimmemeter splits

Maak 4 dummy sensoren met de namen tussen de (‘ *** ‘) met als type virtueel apparaat, teller incrementeel dit is belangrijk anders werkt het niet!!

dummy slimmemeter sensortype

Voorbeeld tekst staat hier onder

        local usageLow = dz.devices('Verbruik Laag') -- Metergebruik laag, virtueel apparaat, teller incrementeel
        local usageHigh = dz.devices('Verbruik Hoog') -- Metergebruik Hoog, Virtueel apparaat, teller incrementeel
        local returnLow  = dz.devices('Teruglevering Laag')  -- Meter Return Low, Virtueel apparaat, teller incrementeel
        local returnHigh = dz.devices('Teruglevering Hoog')  -- Meter Return High, Virtual device, Virtueel apparaat, teller incrementeel

De naam en sensor type moeten overeen komen anders werkt het niet .

slimmemeter splits aparaten

Deze 4 sensoren zou je nu moeten krijgen onder het knopje overige.
De kans is groot dat de eerste dag je geen goede gegevens krijgt maar de dag erna zou het goed moeten zijn. De eerste gegevens krijg je pas nadat het script gedraaid heeft.

p1 splits

Het script en de behorende uitleg volgt hieronder:

Nu mag je weer naar instellingen gaan , daarna naar meer opties.
Daarna naar Gebeurtenissen.
En mag je op het plusje drukken. (plaatje is van pvoutput maar stappen zijn het zelfde)

Slimme meter (p1) opsplitsen naar 4 tellers Domoticz met Lua 3

Hier ga je naar DZEVENTS en dan Timer.
(dit zorgt er voor dat het script een aantal minuten gaat aftellen en dan de schakelaar om haalt en je een bericht via telegram krijgt wat er gebeurd)

Slimme meter (p1) opsplitsen naar 4 tellers Domoticz met Lua 4

En hier geef je aan welke gegevens je wilt gaan gebruiken, verander tussen de () welke IDX je wilt gaan gebruiken.

local P1  = dz.devices(1) -- Electra, P1 Smart Meter device (idx or "name") (required)

De naam en sensor type moeten overeen komen anders werkt het niet .

        local usageLow = dz.devices('Verbruik Laag') -- Metergebruik laag, virtueel apparaat, teller incrementeel
        local usageHigh = dz.devices('Verbruik Hoog') -- Metergebruik Hoog, Virtueel apparaat, teller incrementeel
        local returnLow  = dz.devices('Teruglevering Laag')  -- Meter Return Low, Virtueel apparaat, teller incrementeel
        local returnHigh = dz.devices('Teruglevering Hoog')  -- Meter Return High, Virtual device, Virtueel apparaat, teller incrementeel

Deze 4 sensoren zou je nu moeten krijgen onder het knopje overige, bij geen zonnepanelen 2.

Slimme meter (p1) opsplitsen naar 4 tellers Domoticz met Lua 5

Heb je geen zonnepanelen dan kan je die regels uitzetten met — ervoor te plaatsten.

  --      local returnLow  = dz.devices('Teruglevering Laag')  -- Meter Return Laag, Virtueel apparaat, teller incrementeel
 --       local returnHigh = dz.devices('Teruglevering Hoog')  -- Meter Return Hoog, Virtueel apparaat, teller incrementeel
 --       updateCounter(returnLow, P1.return1, lastP1.return1)
--        updateCounter(returnHigh, P1.return2, lastP1.return2)

        
--        lastP1.return1 = P1.return1
 --       lastP1.return2 = P1.return2

[wpdm_package id=’6372′]

De Complete gebruikte code staat hieronder en na eigen instellingen veranderen.
Of alleen je p1 als je de namen hetzelfde hebt overgenomen van mijn voorbeelden.

Nu selecteer je onderstaande script en plakt deze er in :

--[[ 
     dzVents script dzVents script time
     om P1 Smart Meter Elektriciteitswaarde te ontleden in afzonderlijke Meterstanden.
     Houd er rekening mee dat de teller van vandaag aanvankelijk tot de volgende dag bij de GUI een verkeerde waarde zal weergeven.
     Script gedownload van huizebruin.nl
	 www.huizebruin.nl/domoticz/slimme-meter-(p1)-opsplitsen-naar-4-tellers-domoticz-met-lua/
    29/08/2020-/-v1.10: verbeteringen in tegengaan van pieken in verwerkt

   
     Te gebruiken voor domoticz versie >= V4.11305
]] --
local fetchIntervalMins = 20    -- (Geheel) Minutenfrequentie van deze scriptuitvoering 1 = elke minuut, 10 = elke 10 minuten, enz.) Moet een van (1,2,3,4,5,6,10,12,15,20,30) zijn.
local ScriptVersion = '1.10' -- domoticz > V2020.1 / dzVents >= 2.4.28
 
return {

    on =      {
                        timer = { 'every ' .. fetchIntervalMins .. ' minutes' }
              },
             
    logging = {
                         level = domoticz.LOG_DEBUG,    -- Maak commentaar op deze regel om de instelling van dzVents global logging te overschrijven
                         marker = 'Afzonderlijke Meterstanden '.. ScriptVersion
              },

    data = { lastP1 = { initial = {} }},

    execute = function(dz, item)

        -- Voeg apparaatnamen toe tussen aanhalingstekens of apparaat-idx zonder aanhalingstekens
        local P1  = dz.devices(1) -- Electra, P1 Smart Meter device (idx or "name") (required)

--[[ Voer namen / idx in voor apparaten die je wilt onder deze commentaarregels
     Deze apparaten moeten worden gemaakt als nieuwe incrementele tellers. Script kan verkeerde waarden opleveren
     bij gebruik met bestaande die al waarden bevatten
     De resterende regels kunnen worden verwijderd of becommentarieerd 
]]--
        local usageLow = dz.devices('Verbruik Laag') -- Metergebruik laag, virtueel apparaat, teller incrementeel
        local usageHigh = dz.devices('Verbruik Hoog') -- Metergebruik Hoog, Virtueel apparaat, teller incrementeel
        local returnLow  = dz.devices('Teruglevering Laag')  -- Meter Return Laag, Virtueel apparaat, teller incrementeel
        local returnHigh = dz.devices('Teruglevering Hoog')  -- Meter Return Hoog, Virtueel apparaat, teller incrementeel

        -- Onder deze regel zijn geen wijzigingen vereist ---
               lastP1 = dz.data.lastP1

        local function updateCounter(dv, value, previousValue )
            if not(dv) then return end
            if not(previousValue) then
                dz.log("Geen eerdere gegevens voor " .. dv.name .. " nog; deze run overslaan",dz.LOG_DEBUG)
                return
            end
            if (dv.counter ~=0 or dv.counter ~= nil) then
            value = value - previousValue
            end
            dv.updateCounter(value)
            dz.log("Increment " .. dv.name .. " with: " .. value,dz.LOG_DEBUG)
        end 

        -- Update the device
        updateCounter(usageLow, P1.usage1, lastP1.usage1)
        updateCounter(usageHigh, P1.usage2, lastP1.usage2)
        updateCounter(returnLow, P1.return1, lastP1.return1)
        updateCounter(returnHigh, P1.return2, lastP1.return2)

        lastP1.usage1 = P1.usage1
        lastP1.usage2 = P1.usage2
        lastP1.return1 = P1.return1
        lastP1.return2 = P1.return2
     end
}

Deze sla je op als Afzonderlijke Meterstanden
Nu druk je op AAN en daarna op OPSLAAN.

Slimme meter (p1) opsplitsen naar 4 tellers Domoticz met Lua 6

Ik heb hem om de 20 minuten draaien omdat hij van mij niet elke minuut ververst hoeft te worden scheelt ook meer in schrijven van de sd kaart, als ik aan het einde van de dag maar een melding krijg op telegram met de laatste gegevens. (script komt zeer binnenkort online)


( voor de test of het werkt kan je de tijd aanpassen naar een paar minuten )
Mits je dit verandert hebt.
check je log voor eventuele fouten


Nee deze werkt niet met de npn sensor.
Maar je zou deze kunnen proberen:
TZT TL-W5MC1  https://s.click.aliexpress.com/e/_DELCdTl
of
TCRT5000 Infrarood lijn detectie https://opencircuit.nl/product/tcrt5000-infrarood-lijn-detectie-module

 Vanaf vandaag ook leverbaar: de p1 slimme meter kabel . Deze kabel heeft een ingebouwde FT232RL chip, waarmee je bijna alle slimme meters kan uitlezen. De RJ12 (6p6C) kabel kan direct op de slimme meter worden aangesloten, waardoor deze kan worden uitgelezen met bijvoorbeeld Domoticz. Maar er zijn uiteraard nog veel meer opties.  De lengte van de kabel is 1,80 meter.




Spelfouten, taalfouten of inhoudelijke fouten ontdekt?
Stuur dan een mailtje naar de auteur van dit artikel!

Tevreden met deze website?

Als je dit artikel met interesse hebt gelezen klik dan op Vind ik Leuk .
Voor u een kleine moeite voor mij een compliment.


Alvast Bedankt.

Als je feedback, tips of iets anders hebt,
Aarzel dan niet om hieronder een reactie achter te laten.

Wat vond je van deze post?

Klik op een ster om deze te beoordelen!

Gemiddelde score / 5. Aantal stemmen:

Er heeft nog niemand gestemd. Wees de eerste, het kost niets en geen registratie!

Huizebruin
Huizebruin

Oprichter van Huizebruin.nl
Ontwikkelaar van de S0tool en diverse projecten op huizebruin-projecten.nl
Oprichter van de Huizebruin Domotica Community op Discord

Artikelen: 162

55 reacties

  1. Hey leuke scrip maar ik heb een vraagje ik gebruikt verschillende PZEM modules en daarop wemos d1 en daar krijg ik zoiets van binnen 0, 234.10;0.00;0.00;2.72
    =Spaning;stroom;vermogen;kwh, nu ben ik bezig omdat via jouw script van hier boven op te splitsen in 4 virtuele sesors maar dat lukt niet echt weet je hier op oplossing voor misschien, om van die een waarde 4 verschillende waardes te maken ?

  2. Hallo Arjen,

    Bedankt voor je reactie.
    Mooi dat het gelukt is.
    Veel plezier ermee.

  3. Ik ben programmeur maar ik snap er weinig van. Dingen uit het voorbeeld zie ik niet terug.

    “En hier geef je aan welke gegevens je wilt gaan gebruiken, verander tussen de () welke IDX je wilt gaan gebruiken” <— Wat bedoel je hier ?? Waar? hoe ? Ik zie alleen een Soort voorbeeld script op mijn scherm.

    Edit: Ah ik snap het al. Verder lezen 🙂

    Thnks gast.

  4. Hallo ErikHB,

    Bedankt voor je reactie.
    Ik ga er eens naar kijken hoe dit werkt.
    Bedankt voor het delen.

  5. Hartelijk dank voor het mooie voorbeeld. Dit diende als startpunt voor mijn eerste schreden op het dzVents vlak en ook het werken met persistente data.

    Toch vond ik het zelf uitrekenen van dagelijkse verbruiken/opbrengsten niet erg bevredigend. Daarom heb ik ook naar andere tellers gekeken hoe die zouden reageren op het ’toedienen’ van cumulatieve verbruiksgegevens (P1.usage1/2 en P1.return1/2). Het blijkt dat de basis ‘Counter’ sensor dit uitstekend aankan en dan automatisch de dagelijkse verbruiken uitrekent.

    Ga als volgt te werk. Maak virtuele sensors van type ‘Counter’ aan voor import hoog/laag en export hoog/laag (verschijnen in de device list als type ‘RFXMeter’). Daarna kun je simpel de waarden uit je P1 Smart Meter voeden:

        importedLow.updateCounter(P1_SmartMeter.usage1)
        importedHigh.updateCounter(P1_SmartMeter.usage2)
        exportedLow.updateCounter(P1_SmartMeter.return1)
        exportedHigh.updateCounter(P1_SmartMeter.return2)
    

    Meer is niet nodig en je krijgt keurig je cumulatieve en dagelijkse verbruik in de virtuele sensors te zien. Ben je helemaal van de persistente data af en heb je de routine ‘updateCounter(dv, value, previousValue )’ niet meer nodig.

    Bijkomend voordeel is dat je ook historische data aan je database kunt toevoegen (table ‘Meter_Calendar’) en die wordt dan ook correct weergegeven in de grafieken. Dat lukt niet met de Incremental Counter op de juiste wijze.

  6. Hallo Jeroen,

    Bedankt voor je reactie.
    Ik heb nog geen ervaring met 3 fasen meter.
    zou je me wat meer info kunnen geven over de meter?

  7. Bedankt voor het mooie script, alleen loop ik tegen het volgende aan: Klopt het dat dit script niet werkt met een 3 fase aansluiting ivm de metering per fase of blijft de usage 1 en 2 dan toch gewoon op te vragen / uit te lezen?

    Volgens mij al gevonden en geeft de P1 gewoon de usage 1/2 en return 1/2 door.
    Lijkt nu al te werken met nieuw aangemaakte virtuele sensoren.

  8. Hallo Bram,

    Bedankt voor je reactie.
    Heb je alle stappen doorgenomen wat ervoor stond?
    Dan zou het moeten gaan lukken.
    Heb je ook al wel een mail terug gestuurd mocht je meer hup nodig zijn.

  9. Hey Huizebruin,

    Zelf heb ik geen verstand van programmeren. Leuk dat je een script deelt. Tot aan het script knippen en plakken lukt me maar heb geen idee welke dingen ik aan moet passen aan mijn eigen situatie. Het script ziet er een beetje overweldigend uit. Is er misschien een ingevuld script beschikbaar?

    Met vriendelijke groet,

    Bram

  10. Hallo Longdude.

    Bedankt voor je reactie.
    Kan kloppen dat het er daar iets anders uit ziet ja,
    Maar ga niet van mijn foto’s uit ik heb een eigen skin dus die ziet er ook anders uit dan origineel.

  11. Ik heb dit trouwens op een synology met domoticz draaien. Ziet er iets anders uit maar werkt exact hetzelfde

  12. Hallo Longdude,

    Bedankt voor je reactie,
    Mooi dat het gelukt is.
    Veel plezier ermee

  13. Superhandig, ik had al een script waarbij altijd het totale verbruik werd weergegeven, maar dit is veel handiger zo. Nog geen zonnepanelen, dat komt nog wel. Wel laten staan maar uit gecodeerd. Dank voor dit!

  14. Ja dat klopt. Ik vond het heel vervelend dat je eerst 1 dag moest wachten voordat je normale waarden krijgt maar dan nog steeds blijft die hoge waarde in je history en je reports staan. Het is simpel maar het werkt. Ook als ik de raspberry reset of als de p 1 verbinding tijdelijk wegvalt dan telt hij daarna gewoon weer verder.
    Ik hoop dat je er iets aan hebt.
    Zou het script naar je kunnen sturen maar jou email heeft een no-reply dus mijn antwoord via email zal wel niet aankomen.
    Groeten, Wim

  15. Hallo Wim,

    Bedankt voor je bericht.
    Als ik het goed begrijp is dat de hoge waardes dan uit blijven als dit verandert wordt ?
    Zo ja ga ik het script aanpassen.
    En bedankt voor de terugkoppeling

Geef een reactie...

Deze site gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie gegevens worden verwerkt.

Huizebruin.nl
Privacyoverzicht

Deze site maakt gebruik van cookies, zodat wij je de best mogelijke gebruikerservaring kunnen bieden. Cookie-informatie wordt opgeslagen in je browser en voert functies uit zoals het herkennen wanneer je terugkeert naar onze site en helpt ons team om te begrijpen welke delen van de site je het meest interessant en nuttig vindt.