Posts: 83
Threads: 17
Joined: Feb 2021
Reputation:
3
Hi,
I bought a Homewizard Wi-fi P1 meter for reading out my electric meter.
This device has an API that returns it's data in plain text (not json).
For example:
Code: <Request>
GET http://{IP address}/api/v1/telegram
<Response>
HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: <length>
/ISK5\\\\2M550T-10111-
3:0.2.8(50)
0-0:1.0.0(181106140429W)
0-0:96.1.1(31333631353032362020202020202020)
1-0:1.8.1(10830.511*kWh)
1-0:1.8.2(002948.827*kWh)
...
I was wondering if there is any post on the forum someone knows of which should be a good start for a script to read out the data.
Thanks in advance,
Tig
Posts: 8017
Threads: 43
Joined: Jun 2015
Reputation:
463
Try this. This example assumes that strings like "1-0:1.8.2" are unique value keys that are unchanged between requests.
Code: url = 'http://{IP address}/api/v1/telegram'
response = require('socket.http').request(url)
lines = response:split('\n')
result = {}
for _, line in ipairs(lines) do
line = line:trim()
pos = line:find('(', 1, true)
if pos then
key = line:sub(1, pos - 1)
val = line:sub(pos + 1, -2)
val = val:gsub('[^%d%.]+', '')
result[ key ] = tonumber(val)
end
end
log(result)
grp.checkupdate('1/1/1', result['1-0:1.8.1'])
grp.checkupdate('1/1/2', result['1-0:1.8.2'])
Posts: 16
Threads: 6
Joined: Jun 2020
Reputation:
1
Code: --P1 poort van slimme meter via HomeWizard uitlezen
require('socket.http')
ip = '192.168.1.192' --Vul hier het IP adres van de HomeWizard P1 meter in
socket.http.TIMEOUT = 5
data = socket.http.request('http://'..ip..'/api/v1/telegram')
if data then
--log(data)
-- Totaal verbruik tarief 1 uitlezen kWh
tarief_1 = data:match'1-0:1.8.1%((%d+.%d+)'
tarief_1 = tonumber(tarief_1)
--log("Tarief 1: " .. tarief_1 .. " kWh")
grp.update('8/0/1', tarief_1)
-- Totaal verbruik tarief 2 uitlezen kWh
tarief_2 = data:match'1-0:1.8.2%((%d+.%d+)'
tarief_2 = tonumber(tarief_2)
--log("Tarief 2: " .. tarief_2 .. " kWh")
grp.update('8/0/2', tarief_2)
-- Totaal verbruik tarief 1 + 2
tarief_totaal = tarief_1 + tarief_2
--log("Totaal verbruik: " .. tarief_totaal .. " kWh")
grp.update('8/0/0', tarief_totaal)
-- Totaal verbruik €
verbruik_prijs_kWh = grp.getvalue('8/0/11')
totaal_verbruik_€ = tarief_totaal * verbruik_prijs_kWh
--log("Totaal verbruik: €" .. totaal_verbruik_€)
grp.update('8/0/13', totaal_verbruik_€)
-- Totale retourlevering tarief 1 uitlezen kWh
retour_1 = data:match'1-0:2.8.1%((%d+.%d+)'
retour_1 = tonumber(retour_1)
--log("Retour 1: " .. retour_1 .. " kWh")
grp.update('8/0/4', retour_1)
-- Totale retourlevering tarief 2 uitlezen kWh
retour_2 = data:match'1-0:2.8.2%((%d+.%d+)'
retour_2 = tonumber(retour_2)
--log("Retour 2: " .. retour_2 .. " kWh")
grp.update('8/0/5', retour_2)
-- Totale retourlevering tarief 1 + 2
retour_totaal = retour_1 + retour_2
--log("Totaal retour: " .. retour_totaal .. " kWh")
grp.update('8/0/3', retour_totaal)
-- Totaal retourlevering €
retour_prijs_kWh = grp.getvalue('8/0/12')
totaal_retour_€ = retour_totaal * retour_prijs_kWh
--log("Totaal retour: €" .. totaal_retour_€)
grp.update('8/0/14', totaal_retour_€)
-- Actuele tariefstand uitlezen T1/T2
actueel_tarief = data:match'14.0%((%d+)'
actueel_tarief = tonumber(actueel_tarief)
--log("Actueel tarief: T" .. actueel_tarief)
grp.update('8/0/10', actueel_tarief)
-- Actueel verbruik uitlezen kW
actueel_verbruik = data:match'1-0:1.7.0%((%d+.%d+)'
actueel_verbruik = tonumber(actueel_verbruik)
--log("Actueel verbruik: " .. actueel_verbruik .. " kW")
grp.update('8/0/6', actueel_verbruik)
-- Actueel verbruik W
actueel_verbruik_W = actueel_verbruik*1000
--log("Actueel verbruik: " .. actueel_verbruik_W .. " W")
grp.update('8/0/7', actueel_verbruik_W)
-- Actueel verbruik €
verbruik_prijs_kWh = grp.getvalue('8/0/11')
actueel_verbruik_€ = actueel_verbruik * verbruik_prijs_kWh
--log("Actueel verbruik: €" .. actueel_verbruik_€)
grp.update('8/0/15', actueel_verbruik_€)
-- Actuele retourlevering uitlezen kW
actueel_retour = data:match'1-0:2.7.0%((%d+.%d+)'
actueel_retour = tonumber(actueel_retour)
--log("Actueel retour: " .. actueel_retour .. " kW")
grp.update('8/0/8', actueel_retour)
-- Actuele retourlevering W
actueel_retour_W = actueel_retour *1000
--log("Actueel retour: " .. actueel_retour_W .. " W")
grp.update('8/0/9', actueel_retour_W)
-- Totale gasverbruik uitlezen m³
gas = data:match'.+%((%d+.%d+)'
gas = tonumber(gas)
--log("Gas: " .. gas .. " m³")
grp.update('8/1/0',gas)
-- Totaal gasverbruik €
verbruik_prijs_M³ = grp.getvalue('8/1/1')
totaal_gasverbruik = gas * verbruik_prijs_M³
--log("Totaal gasverbruik: €" .. totaal_gasverbruik_€)
grp.update('8/1/2', totaal_gasverbruik)
end
Posts: 83
Threads: 17
Joined: Feb 2021
Reputation:
3
Omg, you are amazing! Thank you very much I'll try it out asap!
Kudos to Admin & Danny!
Thanks
Posts: 16
Threads: 1
Joined: Jun 2016
Reputation:
0
Hello
how to read the peak from 1-0:1.6.0(230514091500S)(01.672*kW)
i try it like this but i don't get a good value:
-- Afnamepiek van dit maand 1-0:1.6.0(230514091500S)(01.672*kW)
afnamepiek = data:match([[1-0:1.6.0%(()(%d+)]])
if nil ~= afnamepiek then
afnamepiek = tonumber(afnamepiek)
--log("Afnamepiek: " .. afnamepiek .. " kW")
grp.checkupdate('32/0/13', afnamepiek)
end
Posts: 16
Threads: 1
Joined: Jun 2016
Reputation:
0
(25.10.2022, 09:09)Danny Wrote: Code: --P1 poort van slimme meter via HomeWizard uitlezen
require('socket.http')
ip = '192.168.1.192' --Vul hier het IP adres van de HomeWizard P1 meter in
socket.http.TIMEOUT = 5
data = socket.http.request('http://'..ip..'/api/v1/telegram')
if data then
--log(data)
-- Totaal verbruik tarief 1 uitlezen kWh
tarief_1 = data:match'1-0:1.8.1%((%d+.%d+)'
tarief_1 = tonumber(tarief_1)
--log("Tarief 1: " .. tarief_1 .. " kWh")
grp.update('8/0/1', tarief_1)
-- Totaal verbruik tarief 2 uitlezen kWh
tarief_2 = data:match'1-0:1.8.2%((%d+.%d+)'
tarief_2 = tonumber(tarief_2)
--log("Tarief 2: " .. tarief_2 .. " kWh")
grp.update('8/0/2', tarief_2)
-- Totaal verbruik tarief 1 + 2
tarief_totaal = tarief_1 + tarief_2
--log("Totaal verbruik: " .. tarief_totaal .. " kWh")
grp.update('8/0/0', tarief_totaal)
-- Totaal verbruik €
verbruik_prijs_kWh = grp.getvalue('8/0/11')
totaal_verbruik_€ = tarief_totaal * verbruik_prijs_kWh
--log("Totaal verbruik: €" .. totaal_verbruik_€)
grp.update('8/0/13', totaal_verbruik_€)
-- Totale retourlevering tarief 1 uitlezen kWh
retour_1 = data:match'1-0:2.8.1%((%d+.%d+)'
retour_1 = tonumber(retour_1)
--log("Retour 1: " .. retour_1 .. " kWh")
grp.update('8/0/4', retour_1)
-- Totale retourlevering tarief 2 uitlezen kWh
retour_2 = data:match'1-0:2.8.2%((%d+.%d+)'
retour_2 = tonumber(retour_2)
--log("Retour 2: " .. retour_2 .. " kWh")
grp.update('8/0/5', retour_2)
-- Totale retourlevering tarief 1 + 2
retour_totaal = retour_1 + retour_2
--log("Totaal retour: " .. retour_totaal .. " kWh")
grp.update('8/0/3', retour_totaal)
-- Totaal retourlevering €
retour_prijs_kWh = grp.getvalue('8/0/12')
totaal_retour_€ = retour_totaal * retour_prijs_kWh
--log("Totaal retour: €" .. totaal_retour_€)
grp.update('8/0/14', totaal_retour_€)
-- Actuele tariefstand uitlezen T1/T2
actueel_tarief = data:match'14.0%((%d+)'
actueel_tarief = tonumber(actueel_tarief)
--log("Actueel tarief: T" .. actueel_tarief)
grp.update('8/0/10', actueel_tarief)
-- Actueel verbruik uitlezen kW
actueel_verbruik = data:match'1-0:1.7.0%((%d+.%d+)'
actueel_verbruik = tonumber(actueel_verbruik)
--log("Actueel verbruik: " .. actueel_verbruik .. " kW")
grp.update('8/0/6', actueel_verbruik)
-- Actueel verbruik W
actueel_verbruik_W = actueel_verbruik*1000
--log("Actueel verbruik: " .. actueel_verbruik_W .. " W")
grp.update('8/0/7', actueel_verbruik_W)
-- Actueel verbruik €
verbruik_prijs_kWh = grp.getvalue('8/0/11')
actueel_verbruik_€ = actueel_verbruik * verbruik_prijs_kWh
--log("Actueel verbruik: €" .. actueel_verbruik_€)
grp.update('8/0/15', actueel_verbruik_€)
-- Actuele retourlevering uitlezen kW
actueel_retour = data:match'1-0:2.7.0%((%d+.%d+)'
actueel_retour = tonumber(actueel_retour)
--log("Actueel retour: " .. actueel_retour .. " kW")
grp.update('8/0/8', actueel_retour)
-- Actuele retourlevering W
actueel_retour_W = actueel_retour *1000
--log("Actueel retour: " .. actueel_retour_W .. " W")
grp.update('8/0/9', actueel_retour_W)
-- Totale gasverbruik uitlezen m³
gas = data:match'.+%((%d+.%d+)'
gas = tonumber(gas)
--log("Gas: " .. gas .. " m³")
grp.update('8/1/0',gas)
-- Totaal gasverbruik €
verbruik_prijs_M³ = grp.getvalue('8/1/1')
totaal_gasverbruik = gas * verbruik_prijs_M³
--log("Totaal gasverbruik: €" .. totaal_gasverbruik_€)
grp.update('8/1/2', totaal_gasverbruik)
end
Thank you this works perfect but i want to read this also :
"Afnamepiek van dit maand" in this format : 1-0:1.6.0(230514091500S)(01.672*kW)
Posts: 118
Threads: 15
Joined: Nov 2019
Reputation:
6
(01.03.2025, 21:23)Keitz Wrote: (25.10.2022, 09:09)Danny Wrote: Code: --P1 poort van slimme meter via HomeWizard uitlezen
require('socket.http')
ip = '192.168.1.192' --Vul hier het IP adres van de HomeWizard P1 meter in
socket.http.TIMEOUT = 5
data = socket.http.request('http://'..ip..'/api/v1/telegram')
if data then
--log(data)
-- Totaal verbruik tarief 1 uitlezen kWh
tarief_1 = data:match'1-0:1.8.1%((%d+.%d+)'
tarief_1 = tonumber(tarief_1)
--log("Tarief 1: " .. tarief_1 .. " kWh")
grp.update('8/0/1', tarief_1)
-- Totaal verbruik tarief 2 uitlezen kWh
tarief_2 = data:match'1-0:1.8.2%((%d+.%d+)'
tarief_2 = tonumber(tarief_2)
--log("Tarief 2: " .. tarief_2 .. " kWh")
grp.update('8/0/2', tarief_2)
-- Totaal verbruik tarief 1 + 2
tarief_totaal = tarief_1 + tarief_2
--log("Totaal verbruik: " .. tarief_totaal .. " kWh")
grp.update('8/0/0', tarief_totaal)
-- Totaal verbruik €
verbruik_prijs_kWh = grp.getvalue('8/0/11')
totaal_verbruik_€ = tarief_totaal * verbruik_prijs_kWh
--log("Totaal verbruik: €" .. totaal_verbruik_€)
grp.update('8/0/13', totaal_verbruik_€)
-- Totale retourlevering tarief 1 uitlezen kWh
retour_1 = data:match'1-0:2.8.1%((%d+.%d+)'
retour_1 = tonumber(retour_1)
--log("Retour 1: " .. retour_1 .. " kWh")
grp.update('8/0/4', retour_1)
-- Totale retourlevering tarief 2 uitlezen kWh
retour_2 = data:match'1-0:2.8.2%((%d+.%d+)'
retour_2 = tonumber(retour_2)
--log("Retour 2: " .. retour_2 .. " kWh")
grp.update('8/0/5', retour_2)
-- Totale retourlevering tarief 1 + 2
retour_totaal = retour_1 + retour_2
--log("Totaal retour: " .. retour_totaal .. " kWh")
grp.update('8/0/3', retour_totaal)
-- Totaal retourlevering €
retour_prijs_kWh = grp.getvalue('8/0/12')
totaal_retour_€ = retour_totaal * retour_prijs_kWh
--log("Totaal retour: €" .. totaal_retour_€)
grp.update('8/0/14', totaal_retour_€)
-- Actuele tariefstand uitlezen T1/T2
actueel_tarief = data:match'14.0%((%d+)'
actueel_tarief = tonumber(actueel_tarief)
--log("Actueel tarief: T" .. actueel_tarief)
grp.update('8/0/10', actueel_tarief)
-- Actueel verbruik uitlezen kW
actueel_verbruik = data:match'1-0:1.7.0%((%d+.%d+)'
actueel_verbruik = tonumber(actueel_verbruik)
--log("Actueel verbruik: " .. actueel_verbruik .. " kW")
grp.update('8/0/6', actueel_verbruik)
-- Actueel verbruik W
actueel_verbruik_W = actueel_verbruik*1000
--log("Actueel verbruik: " .. actueel_verbruik_W .. " W")
grp.update('8/0/7', actueel_verbruik_W)
-- Actueel verbruik €
verbruik_prijs_kWh = grp.getvalue('8/0/11')
actueel_verbruik_€ = actueel_verbruik * verbruik_prijs_kWh
--log("Actueel verbruik: €" .. actueel_verbruik_€)
grp.update('8/0/15', actueel_verbruik_€)
-- Actuele retourlevering uitlezen kW
actueel_retour = data:match'1-0:2.7.0%((%d+.%d+)'
actueel_retour = tonumber(actueel_retour)
--log("Actueel retour: " .. actueel_retour .. " kW")
grp.update('8/0/8', actueel_retour)
-- Actuele retourlevering W
actueel_retour_W = actueel_retour *1000
--log("Actueel retour: " .. actueel_retour_W .. " W")
grp.update('8/0/9', actueel_retour_W)
-- Totale gasverbruik uitlezen m³
gas = data:match'.+%((%d+.%d+)'
gas = tonumber(gas)
--log("Gas: " .. gas .. " m³")
grp.update('8/1/0',gas)
-- Totaal gasverbruik €
verbruik_prijs_M³ = grp.getvalue('8/1/1')
totaal_gasverbruik = gas * verbruik_prijs_M³
--log("Totaal gasverbruik: €" .. totaal_gasverbruik_€)
grp.update('8/1/2', totaal_gasverbruik)
end
Thank you this works perfect but i want to read this also :
"Afnamepiek van dit maand" in this format : 1-0:1.6.0(230514091500S)(01.672*kW) Just add this:
--Afnamepiek
afnamepiek = data:match'1-0:1.6.0%((%d+.%d+)'
afnamepiek = tonumber(afnamepiek)
--log("Afnamepiek: " .. afnamepiek .. " kW")
grp.update('8/0/10', afnamepiek)
|