Klik HIER om een account aan te maken, zodat je alle scripts en posts kunt bekijken!

Auteur Topic: P1-meter opsplitsen in hoog/laag verbruik en verbruik/teruglevering  (gelezen 2375 keer)

Joost

  • Administrator
  • Full Member
  • *****
  • Berichten: 146
    • Bekijk profiel
P1-meter opsplitsen in hoog/laag verbruik en verbruik/teruglevering
« Gepost op: 03 november 2019, 09:52:51 »
Met onderstaand dzVents-script kun je de waarde die de P1-kabel van de slimme meter uitleest opsplitsen in VerbruikLaag, VerbruikHoog, TerugleveringLaag en TerugleveringHoog:

--[[ 
    dzVents script to Parse P1 Smart Meter Electricity value into separate Meter Readings.
    Please note that initially counter today will show wrong value at the GUI until next day
    To be used for domoticz version >= V4.11305

]] --
local fetchIntervalMins = 1    -- (Integer) Minutes frequency of this script execution 1 = every minute, 10 = every 10 minutes, etc ) must be one of (1,2,3,4,5,6,10,12,15,20,30)
local ScriptVersion = '0.1.8' -- domoticz > V4.11305 / dzVents >= 2.4.28
 
return {

    on =      {
                        timer = { 'every ' .. fetchIntervalMins .. ' minutes' }
              },
             
    logging = {
                         level = domoticz.LOG_DEBUG,    -- Uncomment this line to override the dzVents global logging setting
                         marker = 'SME '.. ScriptVersion
              },

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

    execute = function(dz, item)

        -- Add device-names between quotes or device idx without quotes
        local P1  = dz.devices(44) -- Electra, P1 Smart Meter device (idx or "name") (required)

        -- Enter names / idx for devices you want below these comment-lines
        -- These devices must be created as new incremental counters. Script might produce wrong values
        -- when used with existing ones that already contain values
        -- The remaining lines can be removed or commented 
        local usageLow = dz.devices('Verbruik Laag') -- Meter Usage low, Virtual device, counter incremental
        local usageHigh = dz.devices('Verbruik Hoog') -- Meter Usage High, Virtual device, counter incremental
        local returnLow  = dz.devices('Teruglevering Laag')  -- Meter Return Low, Virtual device, counter incremental
        local returnHigh = dz.devices('Teruglevering Hoog')  -- Meter Return High, Virtual device, counter incremental

        -- These devices must be created as Usage (electric)
        local usage = dz.devices('Huidig verbruik')  -- current Usage
        local usageDelivered = dz.devices('Huidige teruglevering')  -- current Return

        -- No changes required below this line ---
       
        lastP1 = dz.data.lastP1

        local function updateCounter(dv, value, previousValue )
            if not(dv) then return end
            if not(previousValue) then
                dz.log("No previous data for " .. dv.name .. " yet; skipping this run",dz.LOG_DEBUG)
                return
            end
            if dv.counter ~= 0 then
                value = value - previousValue
            end
            dv.updateCounter(value)
            dz.log("Increment " .. dv.name .. " with: " .. value,dz.LOG_DEBUG)
        end 

        local function updateEnergy(dv, value )
           if not(dv) then return end
           dv.updateEnergy(value)
           dz.log("Set " .. dv.name .. " to: " .. 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)

        updateEnergy(usage, P1.usage)
        updateEnergy(usageDelivered, P1.usageDelivered)

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

Auteur: waaren

gerrithkd

  • Newbie
  • *
  • Berichten: 4
    • Bekijk profiel
Re: P1-meter opsplitsen in hoog/laag verbruik en verbruik/teruglevering
« Reactie #1 Gepost op: 26 augustus 2020, 22:41:54 »
Hoi Joost,
Bedankt voor dit leuke script.
Ik probeer het uit te breiden met het verbruik exclusief teruglevering, maar krijg de juiste syntax niet voor elkaar. Echt een beginnersprobleem, help!

De uitbreiding ziet er zo uit:

  -- These devices must be created as Usage (electric)
        local usage = dz.devices('Huidig verbruik')  -- current Usage
        local usageDelivered = dz.devices('Huidige teruglevering')  -- current Return
        local usagePVdelivered = dz.devices(54) -- current Usage PV production     (toegevoegd)
        local usageReal = dz.devices(59) -- current Usage PV excluded                  (toegevoegd)

verder onderaan in het script:

-- calculate usage with PV-production excluded
        usageReal = usagePVdelivered + usage - usageDelivered -- dit moet nog bijgewerkt

foutmelding in log:
 2020-08-26 22:34:00.430 Error: dzVents: Error: (3.0.2) SME 0.1.8: An error occurred when calling event handler ElektriciteitInDetail
2020-08-26 22:34:00.430 Error: dzVents: Error: (3.0.2) SME 0.1.8: ...ipts/dzVents/generated_scripts/ElektriciteitInDetail.lua:81: attempt to perform arithmetic on a table value (local 'usagePVdelivered')

Via de dzVents WiKi heb ik de oplossing niet gevonden.

gerrithkd

  • Newbie
  • *
  • Berichten: 4
    • Bekijk profiel
Re: P1-meter opsplitsen in hoog/laag verbruik en verbruik/teruglevering
« Reactie #2 Gepost op: 31 augustus 2020, 14:34:47 »
Inmiddels is de uitbreiding, met enige hulp van het Domotica forum, werkend.