LogicMachine Forum
Homewizard Energy API P1 Telegram - Printable Version

+- LogicMachine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: Scripting (https://forum.logicmachine.net/forumdisplay.php?fid=8)
+--- Thread: Homewizard Energy API P1 Telegram (/showthread.php?tid=4320)



Homewizard Energy API P1 Telegram - tigi - 25.10.2022

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


RE: Homewizard Energy API P1 Telegram - admin - 25.10.2022

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'])



RE: Homewizard Energy API P1 Telegram - Danny - 25.10.2022

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



RE: Homewizard Energy API P1 Telegram - tigi - 25.10.2022

Omg, you are amazing! Thank you very much I'll try it out asap!
Kudos to Admin & Danny!
Thanks


RE: Homewizard Energy API P1 Telegram - Keitz - 01.03.2025

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


RE: Homewizard Energy API P1 Telegram - Keitz - 01.03.2025

(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)


RE: Homewizard Energy API P1 Telegram - Joep - 05.03.2025

(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)