API script /http polling Powerfox Energy tracker
Moderator: leecollings
-
- Posts: 32
- Joined: Tuesday 28 August 2018 15:36
- Target OS: Linux
- Domoticz version: 2021/1
- Location: Germany
- Contact:
API script /http polling Powerfox Energy tracker
Hello Experts
i'm using Domoticz for several years now and also the dashticz dashboard with Ubuntu 20 on my Intel NUC. But what i missed all the years was a tracking of my power consumption.
Last year i installed my new CFOS powerbrain wallbox and together with this i also installed a Powerfox optical engerie tracker who communicates with the wallbox to realize photovoltaic surplus charging.
Now i want to read the powerfox data with domoticz...Powerfox offers a API interface what is described here https://www.powerfox.energy/wp-content/ ... en-API.pdf
Is anybody able to create a working plugin for that. Or is it realisable with the http polling(there a different polling addresses)? I'm noobish in programming so i need your help to make it work
Thanks Mirko
i'm using Domoticz for several years now and also the dashticz dashboard with Ubuntu 20 on my Intel NUC. But what i missed all the years was a tracking of my power consumption.
Last year i installed my new CFOS powerbrain wallbox and together with this i also installed a Powerfox optical engerie tracker who communicates with the wallbox to realize photovoltaic surplus charging.
Now i want to read the powerfox data with domoticz...Powerfox offers a API interface what is described here https://www.powerfox.energy/wp-content/ ... en-API.pdf
Is anybody able to create a working plugin for that. Or is it realisable with the http polling(there a different polling addresses)? I'm noobish in programming so i need your help to make it work
Thanks Mirko
- waltervl
- Posts: 5392
- Joined: Monday 28 January 2019 18:48
- Target OS: Linux
- Domoticz version: 2024.7
- Location: NL
- Contact:
Re: API script /http polling Powerfox Energy tracker
The values of
https://backend.powerfox.energy/api/2.0/my/main/current
Could fill an electricity instant and counter device
https://www.domoticz.com/wiki/Dummy_for ... counter.29
There are several ways to get this filled. I would go for the DzVents script way but this could also be done with python plugin, python script, http Json etc.
The only thing I don't now is how to login.
https://backend.powerfox.energy/api/2.0/my/main/current
Could fill an electricity instant and counter device
https://www.domoticz.com/wiki/Dummy_for ... counter.29
There are several ways to get this filled. I would go for the DzVents script way but this could also be done with python plugin, python script, http Json etc.
The only thing I don't now is how to login.
Domoticz running on Udoo X86 (on Ubuntu)
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
-
- Posts: 32
- Joined: Tuesday 28 August 2018 15:36
- Target OS: Linux
- Domoticz version: 2021/1
- Location: Germany
- Contact:
Re: API script /http polling Powerfox Energy tracker
Hi,
Thanks
Regarding the login.These are my personal credentials from powerfox email / password
The response I get
{"Outdated":false,"Watt":1347.0,"Timestamp":1643054398,"A_Plus":1305727.0,"A_Minus":181798.0}
Thanks
Regarding the login.These are my personal credentials from powerfox email / password
The response I get
{"Outdated":false,"Watt":1347.0,"Timestamp":1643054398,"A_Plus":1305727.0,"A_Minus":181798.0}
-
- Posts: 32
- Joined: Tuesday 28 August 2018 15:36
- Target OS: Linux
- Domoticz version: 2021/1
- Location: Germany
- Contact:
Re: API script /http polling Powerfox Energy tracker
Ok i added the virtual sensor IDX 1441 name Powerfox_Energy and started with a template for http in DzVents.
Now its not clear for me to put the informations from the http request ({"Outdated":false,"Watt":831.0,"Timestamp":1643100578,"A_Plus":1318663.0,"A_Minus":181798.0}) into the virtual counter ?
Now its not clear for me to put the informations from the http request ({"Outdated":false,"Watt":831.0,"Timestamp":1643100578,"A_Plus":1318663.0,"A_Minus":181798.0}) into the virtual counter ?
Code: Select all
return {
on = {
timer = {
'every 1 minutes' -- just an example to trigger the request
},
httpResponses = {
'https://mirkosercc%40googlemail.com:[email protected]/api/2.0/my/main/current' -- must match with the callback passed to the openURL command
}
},
logging = {
level = domoticz.LOG_INFO,
marker = 'template',
},
execute = function(domoticz, item)
if (item.isTimer) then
domoticz.openURL({
url = 'https://mirkosercc%40googlemail.com:[email protected]/api/2.0/my/main/current',
method = 'GET',
callback = 'https://mirkosercc%40googlemail.com:[email protected]/api/2.0/my/main/current', -- see httpResponses above.
})
end
if (item.isHTTPResponse) then
if (item.ok) then
if (item.isJSON) then
local someValue = item.json.someValue -- just an example
-- update some device in Domoticz
domoticz.devices('myTextDevice').updateText(someValue)
end
else
domoticz.log('There was a problem handling the request', domoticz.LOG_ERROR)
domoticz.log(item, domoticz.LOG_ERROR)
end
end
end
}
- waltervl
- Posts: 5392
- Joined: Monday 28 January 2019 18:48
- Target OS: Linux
- Domoticz version: 2024.7
- Location: NL
- Contact:
Re: API script /http polling Powerfox Energy tracker
You are on the right way.
change line
callback = 'https... etc' to
and line
httpResponses = {
'https.... etc
to
basis of a http dzvents script is below (see also documentation https://www.domoticz.com/wiki/DzVents:_ ... P_requests )
change line
callback = 'https... etc' to
Code: Select all
callback = 'Powerfoxtrigger'
httpResponses = {
'https.... etc
to
Code: Select all
httpResponses = { 'Powerfoxtrigger' }
Code: Select all
return {
on = {
timer = {'every 5 seconds'},
httpResponses = { 'trigger' }
},
execute = function(domoticz, item)
if (item.isTimer) then
domoticz.openURL({
url = '...',
callback = 'trigger'
})
end
if (item.isHTTPResponse) then
if (item.ok) then
...
end
end
end
}
Domoticz running on Udoo X86 (on Ubuntu)
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
- waltervl
- Posts: 5392
- Joined: Monday 28 January 2019 18:48
- Target OS: Linux
- Domoticz version: 2024.7
- Location: NL
- Contact:
Re: API script /http polling Powerfox Energy tracker
Additional:
to get the data in a Electricity (instand and counter) dummy device use
.updateElectricity(power, energy) eg domoticz.devices('myCounterDevice').updateElectricity(power, energy)
POWER = current power (Watt) = your json value for "Watt"
ENERGY = total cumulative energy in Watt-hours (Wh) = is your jsan value for "A_Plus"
See also
https://www.domoticz.com/wiki/DzVents:_ ... counter.29
What does "A_Minus" mean? Energy that is returned to the grid?
to get the data in a Electricity (instand and counter) dummy device use
.updateElectricity(power, energy) eg domoticz.devices('myCounterDevice').updateElectricity(power, energy)
POWER = current power (Watt) = your json value for "Watt"
ENERGY = total cumulative energy in Watt-hours (Wh) = is your jsan value for "A_Plus"
See also
https://www.domoticz.com/wiki/DzVents:_ ... counter.29
What does "A_Minus" mean? Energy that is returned to the grid?
Domoticz running on Udoo X86 (on Ubuntu)
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
-
- Posts: 32
- Joined: Tuesday 28 August 2018 15:36
- Target OS: Linux
- Domoticz version: 2021/1
- Location: Germany
- Contact:
Re: API script /http polling Powerfox Energy tracker
Wow thanks for your replies. I will test in the evening.
"What does "A_Minus" mean? Energy that is returned to the grid?" -> Yes the powerfox shows the current power in W , PLus : wh consumed from grid, Minus : sum of wh returned to grid
So the watts could be also negative (if the consumption of my home is less than the solar output)
"What does "A_Minus" mean? Energy that is returned to the grid?" -> Yes the powerfox shows the current power in W , PLus : wh consumed from grid, Minus : sum of wh returned to grid
So the watts could be also negative (if the consumption of my home is less than the solar output)
- waltervl
- Posts: 5392
- Joined: Monday 28 January 2019 18:48
- Target OS: Linux
- Domoticz version: 2024.7
- Location: NL
- Contact:
Re: API script /http polling Powerfox Energy tracker
OK, then perhaps better use a P1 Smart meter instead of a Electricity (instand and counter) dummy device
domoticz.devices('myCounterDevice').updateP1(usage1, usage2, return1, return2, cons, prod)
USAGE1;USAGE2;RETURN1;RETURN2;CONS;PROD
IDX = id of your device (This number can be found in the devices tab in the column "IDX")
USAGE1= total cumulative energy usage meter tariff 1 in Wh. your A_Plus
USAGE2= total cumulative energy usage meter tariff 2 in Wh. (in your case send always 0)
RETURN1= total cumulative energy return meter tariff 1 in Wh. your A_Minus
RETURN2= total cumulative energy return meter tariff 2 in Wh. (in your case send always 0)
CONS= actual usage power (Watt) your Watt
PROD= actual return power (Watt) (if your "Watt" value is negative, but send a positive value)
domoticz.devices('myCounterDevice').updateP1(usage1, usage2, return1, return2, cons, prod)
USAGE1;USAGE2;RETURN1;RETURN2;CONS;PROD
IDX = id of your device (This number can be found in the devices tab in the column "IDX")
USAGE1= total cumulative energy usage meter tariff 1 in Wh. your A_Plus
USAGE2= total cumulative energy usage meter tariff 2 in Wh. (in your case send always 0)
RETURN1= total cumulative energy return meter tariff 1 in Wh. your A_Minus
RETURN2= total cumulative energy return meter tariff 2 in Wh. (in your case send always 0)
CONS= actual usage power (Watt) your Watt
PROD= actual return power (Watt) (if your "Watt" value is negative, but send a positive value)
Domoticz running on Udoo X86 (on Ubuntu)
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
-
- Posts: 32
- Joined: Tuesday 28 August 2018 15:36
- Target OS: Linux
- Domoticz version: 2021/1
- Location: Germany
- Contact:
Re: API script /http polling Powerfox Energy tracker
Good Morning, i guess i made some steps further but the final hint is missing. This line i do not understand?
do i have to insert the json e.g this /json.htm?type=command¶m=udevice&idx=1453&nvalue=0&svalue=USAGE1;USAGE2;RETURN1;RETURN2;CONS;PROD
But the editor says there is an error near to the question mark??
i get this error log
2022-01-30 09:30:00.242 Error: UpdateMultiMeter: Error converting sValue values! (IDX: 1453, sValue: 'nil;nil;nil;nil;nil;nil', dType: 250, sType: 1)
Code: Select all
local someValue = item.json.someValue -- just an example
do i have to insert the json e.g this /json.htm?type=command¶m=udevice&idx=1453&nvalue=0&svalue=USAGE1;USAGE2;RETURN1;RETURN2;CONS;PROD
But the editor says there is an error near to the question mark??
i get this error log
2022-01-30 09:30:00.242 Error: UpdateMultiMeter: Error converting sValue values! (IDX: 1453, sValue: 'nil;nil;nil;nil;nil;nil', dType: 250, sType: 1)
Code: Select all
return {
on = {
timer = {
'every 20 seconds' -- just an example to trigger the request
},
httpResponses = { 'Powerfoxtrigger' } -- must match with the callback passed to the openURL command
},
logging = {
level = domoticz.LOG_INFO,
marker = 'Powerfox',
},
execute = function(domoticz, item)
if (item.isTimer) then
domoticz.openURL({
url = 'https://mirkosercc%40googlemail.com:[email protected]/api/2.0/my/main/current',
method = 'GET',
callback = 'Powerfoxtrigger', -- see httpResponses above.
})
end
if (item.isHTTPResponse) then
if (item.ok) then
if (item.isJSON) then
local someValue = item.json.someValue -- just an example
-- update some device in Domoticz
domoticz.devices('Stromverbrauch').updateP1(usage1, usage2, return1, return2, cons, prod)
IDX = '1453'
USAGE1= 'A_Plus'--total cumulative energy usage meter tariff 1 in Wh. your A_Plus
USAGE2= '0'--total cumulative energy usage meter tariff 2 in Wh. (in your case send always 0)
RETURN1= 'A_Minus'--total cumulative energy return meter tariff 1 in Wh. your A_Minus
RETURN2= '0'--total cumulative energy return meter tariff 2 in Wh. (in your case send always 0)
CONS= 'Watt'--actual usage power (Watt) your Watt
PROD= 'Watt'--actual return power (Watt) (if your "Watt" value is negative, but send a positive value)
end
else
domoticz.log('There was a problem handling the request', domoticz.LOG_ERROR)
domoticz.log(item, domoticz.LOG_ERROR)
end
end
end
}
- waltervl
- Posts: 5392
- Joined: Monday 28 January 2019 18:48
- Target OS: Linux
- Domoticz version: 2024.7
- Location: NL
- Contact:
Re: API script /http polling Powerfox Energy tracker
You have the order wrong.
From the openurl command you get a JSON from your meter.
From that JSON you have to read all the attributes that you can send to domoticz with the .updateP1() function.
So for example
local USAGE1 = item.json.A_Plus
local RETURN1 = item.json.A_Minus
etc.
For Watt you need first a check if it is positive or negative and then set CONS and PROD with the correct values
Be aware that variables are case sensitive in DzVents so use USAGE1 or usage1 all the way.
And better add some extra logging so you can see what you get. First try to get all the variables out, send the to the log and then send them to the P1 device.
From the openurl command you get a JSON from your meter.
From that JSON you have to read all the attributes that you can send to domoticz with the .updateP1() function.
So for example
local USAGE1 = item.json.A_Plus
local RETURN1 = item.json.A_Minus
etc.
For Watt you need first a check if it is positive or negative and then set CONS and PROD with the correct values
Be aware that variables are case sensitive in DzVents so use USAGE1 or usage1 all the way.
And better add some extra logging so you can see what you get. First try to get all the variables out, send the to the log and then send them to the P1 device.
Domoticz running on Udoo X86 (on Ubuntu)
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
-
- Posts: 32
- Joined: Tuesday 28 August 2018 15:36
- Target OS: Linux
- Domoticz version: 2021/1
- Location: Germany
- Contact:
Re: API script /http polling Powerfox Energy tracker
Ok i will try to put the variables from the http to the log first. Step by step:) Sorry but I’m not so familiar with that kind of programming. In the Wiki I miss some concrete examples who would help me to understand
- waltervl
- Posts: 5392
- Joined: Monday 28 January 2019 18:48
- Target OS: Linux
- Domoticz version: 2024.7
- Location: NL
- Contact:
Re: API script /http polling Powerfox Energy tracker
In the DzVents example forum there are a lot of examples for reading a JSON file and send the values to Domoticz like viewtopic.php?f=72&t=23406&hilit=Item.json
Domoticz running on Udoo X86 (on Ubuntu)
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
-
- Posts: 32
- Joined: Tuesday 28 August 2018 15:36
- Target OS: Linux
- Domoticz version: 2021/1
- Location: Germany
- Contact:
Re: API script /http polling Powerfox Energy tracker
So almost finished, still need to adjust the unit. The Json value is Wh and i need to devide by 1000 to get the right values displayed in Domoticz P1 counter..
and i need an if for the negative value of watt...
and i need an if for the negative value of watt...
Code: Select all
return {
on = {
timer = {
'every minute' -- just an example to trigger the request
},
httpResponses = { 'Powerfoxtrigger' } -- must match with the callback passed to the openURL command
},
logging = {
level = domoticz.LOG_INFO,
marker = 'Powerfox',
},
execute = function(domoticz, item)
if (item.isTimer) then
domoticz.openURL({
url = 'https://mirkosercc%40googlemail.com:[email protected]/api/2.0/my/main/current',
method = 'GET',
callback = 'Powerfoxtrigger', -- see httpResponses above.
})
end
if (item.isHTTPResponse) then
if (item.ok) then
if (item.isJSON) then
local USAGE1 = item.json.A_Plus
local RETURN1 = item.json.A_Minus
local CONS = item.json.Watt
domoticz.log(item.json.A_Plus , domoticz.LOG_INFO)
domoticz.log(item.json.A_Minus, domoticz.LOG_INFO)
domoticz.log(item.json.Watt, domoticz.LOG_INFO)
domoticz.log('Success updating receiving http values', domoticz.LOG_INFO)
end
domoticz.devices('Stromverbrauch').updateP1(item.json.A_Plus, '0', item.json.A_Minus, '0', item.json.Watt , '0')
domoticz.log('Success updating Device P1', domoticz.LOG_INFO)
end
end
end
}
- waltervl
- Posts: 5392
- Joined: Monday 28 January 2019 18:48
- Target OS: Linux
- Domoticz version: 2024.7
- Location: NL
- Contact:
Re: API script /http polling Powerfox Energy tracker
The divider is done by Domoticz setting for divider (in menu Setup - Settings tab Counter)
So you have to always supply Wh values for P1 (and also other Electricity Counters)!
See also https://www.domoticz.com/wiki/Domoticz_ ... mart_meter
Perhaps also try to supply integer values and not fractional eg 1305727.0 if you run into strange results.
So you have to always supply Wh values for P1 (and also other Electricity Counters)!
See also https://www.domoticz.com/wiki/Domoticz_ ... mart_meter
Perhaps also try to supply integer values and not fractional eg 1305727.0 if you run into strange results.
Domoticz running on Udoo X86 (on Ubuntu)
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
-
- Posts: 32
- Joined: Tuesday 28 August 2018 15:36
- Target OS: Linux
- Domoticz version: 2021/1
- Location: Germany
- Contact:
Re: API script /http polling Powerfox Energy tracker
ok, but why still a dot is shown? i activated the p1 "no decimals" in the settings
- waltervl
- Posts: 5392
- Joined: Monday 28 January 2019 18:48
- Target OS: Linux
- Domoticz version: 2024.7
- Location: NL
- Contact:
Re: API script /http polling Powerfox Energy tracker
What values are you sending according your log?
What is the setting of menu Setup - Settings tab Counter?
What is the setting of menu Setup - Settings tab Counter?
Domoticz running on Udoo X86 (on Ubuntu)
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
-
- Posts: 32
- Joined: Tuesday 28 August 2018 15:36
- Target OS: Linux
- Domoticz version: 2021/1
- Location: Germany
- Contact:
Re: API script /http polling Powerfox Energy tracker
so it should show me 1434 Kwh , 196Kwh , 2991W
If i get a negative value from the powerfox for Watt it will not work and i have no idea how to realize it in the script
If i get a negative value from the powerfox for Watt it will not work and i have no idea how to realize it in the script
- waltervl
- Posts: 5392
- Joined: Monday 28 January 2019 18:48
- Target OS: Linux
- Domoticz version: 2024.7
- Location: NL
- Contact:
Re: API script /http polling Powerfox Energy tracker
There is an issue with decimals yes or no especially on graphs.
So that seemsnto be a bug.
I will come back for the negative value.
So that seemsnto be a bug.
I will come back for the negative value.
Domoticz running on Udoo X86 (on Ubuntu)
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
- waltervl
- Posts: 5392
- Joined: Monday 28 January 2019 18:48
- Target OS: Linux
- Domoticz version: 2024.7
- Location: NL
- Contact:
Re: API script /http polling Powerfox Energy tracker
DzVents is based on Lua so math.abs() function should work.
It would perhaps also help to use math.floor() to get numbers without decimals. math.floor(1234.0) will give 1234
Code: Select all
GetWatt = item.json.Watt
If GetWatt < 0 then
CONS = 0
PROD = math.abs(GetWatt)
else
CONS = GetWatt
PROD = 0
end
Last edited by waltervl on Monday 31 January 2022 12:59, edited 1 time in total.
Domoticz running on Udoo X86 (on Ubuntu)
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
Who is online
Users browsing this forum: No registered users and 1 guest