This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

Homewizard Energy API P1 Telegram
#1
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
Reply
#2
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'])
Reply
#3
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
Reply
#4
Omg, you are amazing! Thank you very much I'll try it out asap!
Kudos to Admin & Danny!
Thanks
Reply


Forum Jump: