Script to parse Electricity from P1 Smart Meter reading  [Solved]

Easy to use, 100% Lua-based event scripting framework.

Moderator: leecollings

User avatar
McMelloW
Posts: 427
Joined: Monday 20 November 2017 17:01
Target OS: Raspberry Pi / ODroid
Domoticz version: V2024.1
Location: Harderwijk, NL
Contact:

Script to parse Electricity from P1 Smart Meter reading

Post by McMelloW »

The P1 Smart Meter with an USB connection cable hardware, creates a device with 6 different meter reading. Usage Low; Usage High; production Low; Production High; Consumption and Production. I wanted to see the readings in 6 different devices.
There is a lua-script that does this trick, but was not really happy with it. So, I decided to wrote a new one in dzVents. In fact, a script in dzVents is much more simple to write then Lua. Six vitual devices type Counter Incremental are created for the different values

The script is very straight forward. The values are fetchted from the P1 Smart Meter device (P1data) and put in a table (SMdata) in a fixed order. Then just update the devices with the accessory values from the table. That's all you have to do.

Code: Select all

--[[  dzVents script to Parse P1 Smart Meter Electricity value into seperated Meter Readings.

]]--  The following need updated for your environment get the 'Idx' or 'Name' of the Device tab.

local fetchIntervalMins = 1                 -- (Integer) (Minutes, Range 5-60) How often SE file is fetched
local P1data = 33                               -- Electra, P1 Smart Meter device
local idxu1 = 42                                 -- Meter Usage low, Virtual device, counter incremental
local idxu2 = 43                                 -- Meter Usage High, Virtual device, counter incremental
local idxr1 = 44                                  -- Meter Return Low, Virtual device, counter incremental
local idxr2 = 45                                  -- Meter Return High, Virtual device, counter incremental
local idxcons = 74                              -- Meter Actual Usage, Virtual device, counter incremental
local idxprod = 75                              -- Meter Actual Production, Virtual device, counter incremental

local ScriptVersion = '0.1.5'

return {
    active = true,
	logging = {
	    -- level = domoticz.LOG_DEBUG,    -- Uncomment this line to override the dzVents global logging setting
		marker = 'SME '.. ScriptVersion
	},
	on = {
		timer = { 'every minute' }
	},
	
	execute = function(domoticz, device)
	          
            -- Get values from device P1Data of the Smart Meter
    	    local SMdata = domoticz.devices(P1data).rawData
    	    
    	    -- Update the device and Debug meassages with the accessory values from table SMdata
            domoticz.devices(idxu1).updateCounter(SMdata[1])
            domoticz.log('Gebruik laag  = '.. SMdata[1], domoticz.LOG_DEBUG)
            domoticz.devices(idxu2).updateCounter(SMdata[2])
	    domoticz.log('Gebruik hoog  = '.. SMdata[2], domoticz.LOG_DEBUG)
            domoticz.devices(idxr1).updateCounter(SMdata[3])
    	    domoticz.log('Levering laag = '.. SMdata[3], domoticz.LOG_DEBUG)
            domoticz.devices(idxr2).updateCounter(SMdata[4])
	    domoticz.log('Levering hoog = '.. SMdata[4], domoticz.LOG_DEBUG)
	    domoticz.devices(idxcons).updateCounter(SMdata[5])
    	    domoticz.log('Actuele verbruik = '.. SMdata[5], domoticz.LOG_DEBUG)
    	    domoticz.devices(idxprod).updateCounter(SMdata[6])
	    domoticz.log('Actuele levering = '.. SMdata[6], domoticz.LOG_DEBUG)
    
    end -- execute
}
Comments and improvements are welcome
Greetings McMelloW
Gravityz
Posts: 583
Joined: Wednesday 16 December 2015 19:13
Target OS: NAS (Synology & others)
Domoticz version: 2022.2
Location: Netherlands
Contact:

Re: Script to parse Electricity form P1 Smart Meter reading

Post by Gravityz »

thanks for this(and unbelievable nobody thanked you for this)

i only use it to see the low and high actual meter values of the meter.
total production is already in the real P1 meter device
User avatar
McMelloW
Posts: 427
Joined: Monday 20 November 2017 17:01
Target OS: Raspberry Pi / ODroid
Domoticz version: V2024.1
Location: Harderwijk, NL
Contact:

Re: Script to parse Electricity form P1 Smart Meter reading

Post by McMelloW »

Thanks very much.
Greetings McMelloW
rwitkamp
Posts: 3
Joined: Sunday 16 December 2018 10:36
Target OS: Raspberry Pi / ODroid
Domoticz version:
Location: Netherlands
Contact:

Re: Script to parse Electricity form P1 Smart Meter reading

Post by rwitkamp »

Thanks McMelloW (Dank je wel!) for this script!

I'm migrating from Homeseer to Domoticz and reading P1 data was my first attempt to make things work. Your script helped me out and gave me a good idea of what Domitcz is capable off. I only cannot see why the variable local fetchIntervalMins = 1 is doing in this script. I cannot see it being used only than declare it and set the value to 1.

Regards,

Ron Witkamp
Soest
User avatar
waaren
Posts: 6028
Joined: Tuesday 03 January 2017 14:18
Target OS: Linux
Domoticz version: Beta
Location: Netherlands
Contact:

Re: Script to parse Electricity form P1 Smart Meter reading

Post by waaren »

rwitkamp wrote: Sunday 16 December 2018 10:41 Thanks McMelloW (Dank je wel!) for this script!

I'm migrating from Homeseer to Domoticz and reading P1 data was my first attempt to make things work. Your script helped me out and gave me a good idea of what Domitcz is capable off. I only cannot see why the variable local fetchIntervalMins = 1 is doing in this script. I cannot see it being used only than declare it and set the value to 1.

Regards,

Ron Witkamp
Soest
Probably a left over from the original Lua script. For recent dzVents versions the script can be changed to use native dzVents attributes (without the need for using rawData.)

Code: Select all

--  dzVents script to Parse P1 Smart Meter Electricity value into separate Meter Readings.

local fetchIntervalMins = 1    -- (Integer) Minutes frequence 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.7'

return {

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


    execute = function(dz, item)

    --  The following need updated for your environment get the 'Idx' or 'Name' of the Device tab.
        local P1data  = 33                                 -- Electra, P1 Smart Meter device
        local idxu1   = 42                                 -- Meter Usage low, Virtual device, counter incremental
        local idxu2   = 43                                 -- Meter Usage High, Virtual device, counter incremental
        local idxr1   = 44                                 -- Meter Return Low, Virtual device, counter incremental
        local idxr2   = 45                                 -- Meter Return High, Virtual device, counter incremental
        local idxcons = 74                                 -- Meter Actual Usage, Virtual device, counter incremental
        local idxprod = 75                                 -- Meter Actual Production, Virtual device, counter incremental
        
        -- Get values from device P1Data of the Smart Meter
        local SMdata = dz.devices(P1data)
  
        local function updateCounter(idx,value)   
            dz.devices(idx).updateCounter(value)
            dz.log("Set " .. dz.devices(idx).name .. " to: ",dz.LOG_DEBUG)
        end  

        -- Update the device and Debug meassages with the accessory values from table SMdata
        updateCounter(idxu1,SMdata.usage1)
        updateCounter(idxu2,SMdata.usage2)
        updateCounter(idxr1,SMdata.return1)
        updateCounter(idxr2,SMdata.return2)
        updateCounter(idcons,SMdata.usage)
        updateCounter(idprod,SMdata.usageDelivered)
    end 
}
Last edited by waaren on Sunday 16 December 2018 19:16, edited 1 time in total.
Debian buster, bullseye on RPI-4, Intel NUC.
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
Gravityz
Posts: 583
Joined: Wednesday 16 December 2015 19:13
Target OS: NAS (Synology & others)
Domoticz version: 2022.2
Location: Netherlands
Contact:

Re: Script to parse Electricity form P1 Smart Meter reading

Post by Gravityz »

tried the new script but it is generating an error
Status: dzVents: Error (2.4.8): SME 0.1.7: ...ar/scripts/dzVents/generated_scripts/dzV-P1 meter v2.lua:34: attempt to index local 'idx' (a number value)

when i comment out the dz.log line the error is gone.
User avatar
waaren
Posts: 6028
Joined: Tuesday 03 January 2017 14:18
Target OS: Linux
Domoticz version: Beta
Location: Netherlands
Contact:

Re: Script to parse Electricity form P1 Smart Meter reading

Post by waaren »

Gravityz wrote: Sunday 16 December 2018 17:16 tried the new script but it is generating an error
Status: dzVents: Error (2.4.8): SME 0.1.7: ...ar/scripts/dzVents/generated_scripts/dzV-P1 meter v2.lua:34: attempt to index local 'idx' (a number value)

when i comment out the dz.log line the error is gone.
Thx, corrected in my previous post
Debian buster, bullseye on RPI-4, Intel NUC.
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
DoMoAD
Posts: 13
Joined: Friday 11 May 2018 14:24
Target OS: Raspberry Pi / ODroid
Domoticz version: BETA
Location: Netherlands
Contact:

Re: Script to parse Electricity form P1 Smart Meter reading

Post by DoMoAD »

Thanks (dankjewel) Works great. I've used the RFXMeter counter as a dummydevice. It gives me two numbers. DATA is the actual number on the meter and in the right upper corner i've got a 0 (zero) or the number corresponding with data. It means that i've got two values and in dashticz i need value two.
manjh
Posts: 708
Joined: Saturday 27 February 2016 12:49
Target OS: Raspberry Pi / ODroid
Domoticz version: 2020.2
Location: NL
Contact:

Re: Script to parse Electricity form P1 Smart Meter reading

Post by manjh »

I defined dummy devices to receive the four main individual values, updated the idx's in the script, and ran it.
As a result I get this:

Code: Select all

2019-03-09 11:54:00.475 Status: dzVents: Info: SME 0.1.7: ------ Start internal script: P1_conversion_time:, trigger: every 1 minutes
2019-03-09 11:54:00.494 Status: dzVents: Debug: SME 0.1.7: Processing device-adapter for Power: P1 smart meter energy device adapter
2019-03-09 11:54:00.496 Status: dzVents: Debug: SME 0.1.7: Processing device-adapter for P1 afname laag: kWh device adapter
2019-03-09 11:54:00.496 Status: dzVents: Error (2.4.6): SME 0.1.7: Method updateCounter is not available for device "P1 afname laag" (deviceType=General, deviceSubType=kWh). If you believe this is not correct, please report.
2019-03-09 11:54:00.496 Status: dzVents: Debug: SME 0.1.7: Set P1 afname laag to:
2019-03-09 11:54:00.497 Status: dzVents: Debug: SME 0.1.7: Processing device-adapter for P1 afname hoog: kWh device adapter
2019-03-09 11:54:00.497 Status: dzVents: Error (2.4.6): SME 0.1.7: Method updateCounter is not available for device "P1 afname hoog" (deviceType=General, deviceSubType=kWh). If you believe this is not correct, please report.
2019-03-09 11:54:00.497 Status: dzVents: Debug: SME 0.1.7: Set P1 afname hoog to:
2019-03-09 11:54:00.498 Status: dzVents: Debug: SME 0.1.7: Processing device-adapter for P1 levering laag: kWh device adapter
2019-03-09 11:54:00.498 Status: dzVents: Error (2.4.6): SME 0.1.7: Method updateCounter is not available for device "P1 levering laag" (deviceType=General, deviceSubType=kWh). If you believe this is not correct, please report.
2019-03-09 11:54:00.498 Status: dzVents: Debug: SME 0.1.7: Set P1 levering laag to:
2019-03-09 11:54:00.499 Status: dzVents: Debug: SME 0.1.7: Processing device-adapter for P1 levering hoog: kWh device adapter
2019-03-09 11:54:00.499 Status: dzVents: Error (2.4.6): SME 0.1.7: Method updateCounter is not available for device "P1 levering hoog" (deviceType=General, deviceSubType=kWh). If you believe this is not correct, please report.
2019-03-09 11:54:00.499 Status: dzVents: Debug: SME 0.1.7: Set P1 levering hoog to:
2019-03-09 11:54:00.499 Status: dzVents: Info: SME 0.1.7: ------ Finished P1_conversion_time
Probably a user error on my part, but I don't see it... who can help me find what's wrong?
Hans
User avatar
waaren
Posts: 6028
Joined: Tuesday 03 January 2017 14:18
Target OS: Linux
Domoticz version: Beta
Location: Netherlands
Contact:

Re: Script to parse Electricity form P1 Smart Meter reading

Post by waaren »

manjh wrote: Saturday 09 March 2019 11:57 I defined dummy devices to receive the four main individual values, updated the idx's in the script, and ran it.
Probably a user error on my part, but I don't see it... who can help me find what's wrong?
You defined the virtual devices as KwH but as the comment states; they should be defined as counter incremental.
Debian buster, bullseye on RPI-4, Intel NUC.
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
manjh
Posts: 708
Joined: Saturday 27 February 2016 12:49
Target OS: Raspberry Pi / ODroid
Domoticz version: 2020.2
Location: NL
Contact:

Re: Script to parse Electricity form P1 Smart Meter reading

Post by manjh »

I decided to take a different route. My objective originally was to be able to take up the meter readings periodically, both in my home and in my vacation house (both have smart meters, and both have Domoticz running on a Raspberry-Pi).
So instead of storing the parsed value into a dummy device, I write them out to a file.
For anyone looking for a similar solution, here's the script that does this.
Remarks: since I use the mounted NAS frequently, I stored the path in a user variable.
A similar script will pick up the reading from the remote meter in the futre (still need to install the cable).
As soon as I have some more time, I will work on a program to read the values in the file. For now I just store the raw data.

Code: Select all

--  dzVents script to get P1 meter values and write them into a file on NAS

local fetchIntervalMins = 30
local ScriptVersion = '0.1.7'

return {

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

    execute = function(dz, item)

    --  The following need updated for your environment get the 'Idx' or 'Name' of the Device tab.
    local P1_data  = 849                                -- idx of smart meter device
    local Gas_data = 850                                -- idx of gas meter
    
    -- prepare header for output record
    local Rec_Hdr = "Utrecht "..os.date("%Y.%m.%d %H:%M")
        
    -- Get values from device P1Data of the smart meters:
    -- SMdata.usage1
    -- SMdata.usage2
    -- SMdata.return1
    -- SMdata.return2
    -- SMdata.usage
    -- SMdata.usageDelivered
    -- GASdata.counter
    -- GASdata.counterToday
    local SMdata = dz.devices(P1_data)
    local GASdata = dz.devices(Gas_data)

    -- build an output record from the SMdata table
    out_data =  Rec_Hdr.." "..
                SMdata.usage1 .." "..
                SMdata.usage2.." "..
                SMdata.return1.." "..
                SMdata.return2.." "..
                SMdata.usage.." "..
                SMdata.usageDelivered.." "..
                GASdata.counter.." "..
                GASdata.counterToday
    file_name = dz.variables('NAS_Path').value .. "Meterstanden Utrecht.txt"
    file = io.open(file_name, "a") 
    file:write(out_data.."\n")
    file:close() 

end 
}
Hans
manjh
Posts: 708
Joined: Saturday 27 February 2016 12:49
Target OS: Raspberry Pi / ODroid
Domoticz version: 2020.2
Location: NL
Contact:

Re: Script to parse Electricity form P1 Smart Meter reading

Post by manjh »

waaren wrote: Saturday 09 March 2019 12:37
manjh wrote: Saturday 09 March 2019 11:57 I defined dummy devices to receive the four main individual values, updated the idx's in the script, and ran it.
Probably a user error on my part, but I don't see it... who can help me find what's wrong?
You defined the virtual devices as KwH but as the comment states; they should be defined as counter incremental.
Got it. And (as usual) this helps me understand some things a bit better. I stumbled across your deepdump code, and it helped me understand the structure of the data. It also helped my find the attributes for the gas meter that I needed...
DeepDump is going into my "standard toolbox"... :)
Hans
User avatar
HenkSynology
Posts: 21
Joined: Tuesday 12 March 2019 17:33
Target OS: Windows
Domoticz version: 1.13191
Location: Stadskanaal, NL
Contact:

Re: Script to parse Electricity form P1 Smart Meter reading

Post by HenkSynology »

Hi McMelloW,

Thanks for the script. Leuk dat je het wilt delen.
I am a newbie, i have a Synology NAS server and install Domoticz.
That was no problem.
I buy a smart P1 cable and install it, that was no problem.
Its running and see the logging
I copy the script and put it in Event / dzVents, its running.
I see it in the log

Now I not now what i must do??
I try in hardware to make a dummy/Create Virtual Sensors , that no work
Scripts is running i see it in the log.
I see no Device for parse electricity only the device Power and Gas

can evryone help mee

Greeting from Netherlands Henk
manjh
Posts: 708
Joined: Saturday 27 February 2016 12:49
Target OS: Raspberry Pi / ODroid
Domoticz version: 2020.2
Location: NL
Contact:

Re: Script to parse Electricity form P1 Smart Meter reading

Post by manjh »

HenkSynology wrote: Tuesday 12 March 2019 17:53 Hi McMelloW,

Thanks for the script. Leuk dat je het wilt delen.
I am a newbie, i have a Synology NAS server and install Domoticz.
That was no problem.
I buy a smart P1 cable and install it, that was no problem.
Its running and see the logging
I copy the script and put it in Event / dzVents, its running.
I see it in the log

Now I not now what i must do??
I try in hardware to make a dummy/Create Virtual Sensors , that no work
Scripts is running i see it in the log.
I see no Device for parse electricity only the device Power and Gas

can evryone help mee

Greeting from Netherlands Henk
Henk,
can you explain what your ultimate goal is with these readings?
See my post a few back. I was trying the script to store into dummy devices, and made a mistake in defining. Before I realized that, I went back to the drawing board to chack what is was that I wanted.
My goal was not to store the values in a dummy device, I wanted to take meter readings at regular intervals, and store them on my NAS. For that it is not necessary to use dummy devices. So I took the parsing part from McMellow's script, added some code to put the values into a readable record, and write that directly to my NAS. That works just fine for me.

Since you mention you have a NAS attached, is this what you want?
If so, feel free to take my script and adjust it to your needs. You may need to change the idx of power and gas meter, and of course the path to the mounted NAS. Should work!
If you run Domoticz on the NAS itself, the path should not be difficult at all...
Hans
User avatar
HenkSynology
Posts: 21
Joined: Tuesday 12 March 2019 17:33
Target OS: Windows
Domoticz version: 1.13191
Location: Stadskanaal, NL
Contact:

Re: Script to parse Electricity form P1 Smart Meter reading

Post by HenkSynology »

Hello Hans,

I have 16 solar panels with a SMA 3-phase power flow.
Now when i need power i must pay 0,21 euro/kW, when i put power into the network i get also 0,21 euro/kW
But 2020/2021 change something in the Netherlands
When I need power i must pay 0,21 euro/kW, when i put power into the network i get 0,07 euro/kW
I don't like that :evil:

here is a bad rainy day for the solar panels.
you see in the afternoon that I deliver back to the net (the green line)
Image

I want to store the energy I return in a large water tank.
or let my freezer cool extra.
or charge a battery.

I need to extract the smart P1 meter,
I don't understand how to proceed

I made virtuel dummys
Image

Image

2019-03-13 17:30:00.409 Status: dzVents: Info: SME 0.1.5: ------ Start internal script: P1_extract:, trigger: every minute
2019-03-13 17:30:00.461 Status: dzVents: Error (2.4.6): SME 0.1.5: Method updateCounter is not available for device "idxu1" (deviceType=Usage, deviceSubType=Electric). If you believe this is not correct, please report.
Image

what im doing wrong ??
greetings Henk
Last edited by HenkSynology on Wednesday 13 March 2019 18:25, edited 1 time in total.
User avatar
HenkSynology
Posts: 21
Joined: Tuesday 12 March 2019 17:33
Target OS: Windows
Domoticz version: 1.13191
Location: Stadskanaal, NL
Contact:

Re: Script to parse Electricity form P1 Smart Meter reading

Post by HenkSynology »

2019-03-13 17:31:21.072 (P1data) P1 Smart Meter (Power)
2019-03-13 17:31:30.841 (P1data) P1 Smart Meter (Power)
2019-03-13 17:31:40.908 (P1data) P1 Smart Meter (Power)
2019-03-13 17:31:51.009 (P1data) P1 Smart Meter (Power)
2019-03-13 17:32:00.425 Status: dzVents: Info: SME 0.1.5: ------ Start internal script: P1_extract:, trigger: every minute
2019-03-13 17:32:00.479 Status: dzVents: Error (2.4.6): SME 0.1.5: Method updateCounter is not available for device "idxu1" (deviceType=Usage, deviceSubType=Electric). If you believe this is not correct, please report.
2019-03-13 17:32:00.481 Status: dzVents: Error (2.4.6): SME 0.1.5: Method updateCounter is not available for device "idxu2" (deviceType=Usage, deviceSubType=Electric). If you believe this is not correct, please report.
2019-03-13 17:32:00.483 Status: dzVents: Error (2.4.6): SME 0.1.5: Method updateCounter is not available for device "idxr1" (deviceType=Usage, deviceSubType=Electric). If you believe this is not correct, please report.
2019-03-13 17:32:00.486 Status: dzVents: Error (2.4.6): SME 0.1.5: Method updateCounter is not available for device "idxr2" (deviceType=Usage, deviceSubType=Electric). If you believe this is not correct, please report.
2019-03-13 17:32:00.489 Status: dzVents: Error (2.4.6): SME 0.1.5: Method updateCounter is not available for device "idxcons" (deviceType=Usage, deviceSubType=Electric). If you believe this is not correct, please report.
2019-03-13 17:32:00.491 Status: dzVents: Error (2.4.6): SME 0.1.5: Method updateCounter is not available for device "idxprod" (deviceType=Usage, deviceSubType=Electric). If you believe this is not correct, please report.
2019-03-13 17:32:00.491 Status: dzVents: Info: SME 0.1.5: ------ Finished P1_extract
2019-03-13 17:32:01.123 (P1data) P1 Smart Meter (Power)
2019-03-13 17:32:11.255 (P1data) P1 Smart Meter (Power)
2019-03-13 17:32:21.395 (P1data) P1 Smart Meter (Power)
2019-03-13 17:32:31.510 (P1data) P1 Smart Meter (Power)
2019-03-13 17:32:41.642 (P1data) P1 Smart Meter (Power)
2019-03-13 17:32:51.764 (P1data) P1 Smart Meter (Power)
2019-03-13 17:33:00.567 Status: dzVents: Info: SME 0.1.5: ------ Start internal script: P1_extract:, trigger: every minute
2019-03-13 17:33:00.620 Status: dzVents: Error (2.4.6): SME 0.1.5: Method updateCounter is not available for device "idxu1" (deviceType=Usage, deviceSubType=Electric). If you believe this is not correct, please report.
2019-03-13 17:33:00.622 Status: dzVents: Error (2.4.6): SME 0.1.5: Method updateCounter is not available for device "idxu2" (deviceType=Usage, deviceSubType=Electric). If you believe this is not correct, please report.
2019-03-13 17:33:00.625 Status: dzVents: Error (2.4.6): SME 0.1.5: Method updateCounter is not available for device "idxr1" (deviceType=Usage, deviceSubType=Electric). If you believe this is not correct, please report.
2019-03-13 17:33:00.627 Status: dzVents: Error (2.4.6): SME 0.1.5: Method updateCounter is not available for device "idxr2" (deviceType=Usage, deviceSubType=Electric). If you believe this is not correct, please report.
2019-03-13 17:33:00.629 Status: dzVents: Error (2.4.6): SME 0.1.5: Method updateCounter is not available for device "idxcons" (deviceType=Usage, deviceSubType=Electric). If you believe this is not correct, please report.
2019-03-13 17:33:00.632 Status: dzVents: Error (2.4.6): SME 0.1.5: Method updateCounter is not available for device "idxprod" (deviceType=Usage, deviceSubType=Electric). If you believe this is not correct, please report.
2019-03-13 17:33:00.633 Status: dzVents: Info: SME 0.1.5: ------ Finished P1_extract
2019-03-13 17:33:01.881 (P1data) P1 Smart Meter (Power)
User avatar
HenkSynology
Posts: 21
Joined: Tuesday 12 March 2019 17:33
Target OS: Windows
Domoticz version: 1.13191
Location: Stadskanaal, NL
Contact:

Re: Script to parse Electricity form P1 Smart Meter reading

Post by HenkSynology »

I have solved the problem

I must have made the dummie "counter incremental" and not dummy "usage"
Evrything works great now

McMelloW thannks for the script, im very happy
competer
Posts: 14
Joined: Wednesday 28 December 2016 7:17
Target OS: Raspberry Pi / ODroid
Domoticz version: Beta
Location: Nederland
Contact:

Re: Script to parse Electricity form P1 Smart Meter reading

Post by competer »

I get this error:
2019-06-13 14:50:02.825 Error: EventSystem: Lua script P1 Meter did not return a commandArray

What is going wrong?

Code: Select all

--  dzVents script to Parse P1 Smart Meter Electricity value into separate Meter Readings.

local fetchIntervalMins = 1    -- (Integer) Minutes frequence 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.7'

return {

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


    execute = function(dz, item)

    --  The following need updated for your environment get the 'Idx' or 'Name' of the Device tab.
        local P1data  = 11                                 -- Electra, P1 Smart Meter device
        local idxu1   = 101                                 -- Meter Usage low, Virtual device, counter incremental
        local idxu2   = 102                                 -- Meter Usage High, Virtual device, counter incremental
        local idxr1   = 103                                 -- Meter Return Low, Virtual device, counter incremental
        local idxr2   = 104                                 -- Meter Return High, Virtual device, counter incremental
        local idxcons = 105                                 -- Meter Actual Usage, Virtual device, counter incremental
        local idxprod = 106                                 -- Meter Actual Production, Virtual device, counter incremental
        
        -- Get values from device P1Data of the Smart Meter
        local SMdata = dz.devices(P1data)
  
        local function updateCounter(idx,value)   
            dz.devices(idx).updateCounter(value)
            dz.log("Set " .. dz.devices(idx).name .. " to: ",dz.LOG_DEBUG)
        end  

        -- Update the device and Debug meassages with the accessory values from table SMdata
        updateCounter(idxu1,SMdata.usage1)
        updateCounter(idxu2,SMdata.usage2)
        updateCounter(idxr1,SMdata.return1)
        updateCounter(idxr2,SMdata.return2)
        updateCounter(idcons,SMdata.usage)
        updateCounter(idprod,SMdata.usageDelivered)
    end 
}
there are 10 types of people in this world, those who understand binary and those who dont
User avatar
waaren
Posts: 6028
Joined: Tuesday 03 January 2017 14:18
Target OS: Linux
Domoticz version: Beta
Location: Netherlands
Contact:

Re: Script to parse Electricity form P1 Smart Meter reading

Post by waaren »

competer wrote: Thursday 13 June 2019 14:52 I get this error: 2019-06-13 14:50:02.825 Error: EventSystem: Lua script P1 Meter did not return a commandArray
You saved the script as Lua but it is a dzVents script.
Debian buster, bullseye on RPI-4, Intel NUC.
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
competer
Posts: 14
Joined: Wednesday 28 December 2016 7:17
Target OS: Raspberry Pi / ODroid
Domoticz version: Beta
Location: Nederland
Contact:

Re: Script to parse Electricity form P1 Smart Meter reading

Post by competer »

I migrated my domoticz from Synology to a Rapsberry Pi model 3 B+

This is the code i use:

Code: Select all

--  dzVents script to Parse P1 Smart Meter Electricity value into separate Meter Readings.

local fetchIntervalMins = 1    -- (Integer) Minutes frequence 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.7'

return {

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


    execute = function(dz, item)

    --  The following need updated for your environment get the 'Idx' or 'Name' of the Device tab.
        local P1data  = 93                                 -- Electra, P1 Smart Meter device
        local idxu1   = 43                                 -- Meter Usage low, Virtual device, counter incremental
        local idxu2   = 44                                 -- Meter Usage High, Virtual device, counter incremental
        local idxr1   = 45                                 -- Meter Return Low, Virtual device, counter incremental
        local idxr2   = 46                                 -- Meter Return High, Virtual device, counter incremental
        local idxcons = 47                                 -- Meter Actual Usage, Virtual device, counter incremental
        local idxprod = 48                                 -- Meter Actual Production, Virtual device, counter incremental
        
        -- Get values from device P1Data of the Smart Meter
        local SMdata = dz.devices(P1data)
  
        local function updateCounter(idx,value)   
            dz.devices(idx).updateCounter(value)
            dz.log("Set " .. dz.devices(idx).name .. " to: ",dz.LOG_DEBUG)
        end  

        -- Update the device and Debug meassages with the accessory values from table SMdata
        updateCounter(idxu1,SMdata.usage1)
        updateCounter(idxu2,SMdata.usage2)
        updateCounter(idxr1,SMdata.return1)
        updateCounter(idxr2,SMdata.return2)
        updateCounter(idcons,SMdata.usage)
        updateCounter(idprod,SMdata.usageDelivered)
    end 
}
Toon divices
Image

I get this error in the log

Code: Select all

2019-06-21 09:31:00.436 Error: dzVents: Error: (2.4.23) SME 0.1.7: There is no device with that name or id: 93
2019-06-21 09:31:00.436 Error: dzVents: Error: (2.4.23) SME 0.1.7: An error occurred when calling event handler P1 Meter
2019-06-21 09:31:00.436 Error: dzVents: Error: (2.4.23) SME 0.1.7: .../domoticz/scripts/dzVents/generated_scripts/P1 Meter.lua:38: attempt to index local 'SMdata' (a nil value)
Whos can help resolving this
there are 10 types of people in this world, those who understand binary and those who dont
Post Reply

Who is online

Users browsing this forum: manjh and 1 guest