Vraag


Acties:
  • 0 Henk 'm!

  • Jklaus
  • Registratie: Maart 2013
  • Laatst online: 17-06 22:35
Mijn vraag

Ik wil graag van onderstaande (json) output

http://{ip adres}/api/v1/smartmeter?limit=1

ouput: [["2021-05-13 21:34:10", 1620934450, 0, 5443.23, 6025.95, 0.0, 0.0, "D", 441, 0, 3284.128]]

De waarde 441 is het huidige verbruik in wattage per uur

Relevante software en hardware die ik gebruik

P1 Monitor
Home Assistant

Wat ik al gevonden of geprobeerd heb
Om heel eerlijk te zijn heb ik een halfuurtje gegoogeld maar zag al snel dat ik het niet snel zou gaan vinden.

Ik vermoed dat er ergens in Home assistant een "create identity" knop/config is waar ik aangeef dat hij om de zoveel tijd naar "http://{ip adres}/api/v1/smartmeter?limit=1" moet gaan en de 9e waarde (441) moet opslaan en dit steeds herhalen.

NB:
ik wil deze identity gaan gebruiken om een melding te geven wanneer een bepaalde wattage word verbruikt

Alle reacties


Acties:
  • +1 Henk 'm!

  • I-King
  • Registratie: Maart 2003
  • Laatst online: 16:06
Ik denk dat je met je vraag hier Home Assistant: Open source Python3 home automation - deel 4 het beste op je plek bent.

Acties:
  • 0 Henk 'm!

  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 13-09 15:20

SA007

Moderator Tweaking
Sowieso is dit topic meer voor het Domotica forum.

Acties:
  • 0 Henk 'm!

  • AUijtdehaag
  • Registratie: Oktober 2006
  • Niet online
Ik heb iets soortgelijks gemaakt met node-red om een json uit te lezen.

In dit geval om het P1 telegram uit te lezen van de P1 smartmeter wifi van home-wizzard
code:
1
[{"id":"809d03f5.6564","type":"tab","label":"P1 Homewizard energy","disabled":false,"info":""},{"id":"bc712104.b8f81","type":"http request","z":"809d03f5.6564","name":"","method":"GET","ret":"txt","paytoqs":"ignore","url":"http://192.168.0.194/api/v1/telegram","tls":"","persist":false,"proxy":"","authType":"","x":290,"y":160,"wires":[["8d3f28e4.d9b9b8","2a95c25c.3506ce"]]},{"id":"cb5ec559.1b6098","type":"interval","z":"809d03f5.6564","name":"interval","interval":"60","onstart":false,"msg":"ping","showstatus":true,"unit":"seconds","statusformat":"YYYY-MM-D HH:mm:ss","x":90,"y":220,"wires":[["bc712104.b8f81"]]},{"id":"8ec3e146.f6514","type":"inject","z":"809d03f5.6564","name":"Inject","props":[{"p":"payload","v":"","vt":"date"},{"p":"topic","v":"","vt":"string"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":100,"y":160,"wires":[["bc712104.b8f81"]]},{"id":"9e4ad400.468af","type":"debug","z":"809d03f5.6564","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":710,"y":140,"wires":[]},{"id":"8b924a2b.0db6a8","type":"comment","z":"809d03f5.6564","name":"Smart meter Out","info":"","x":520,"y":100,"wires":[]},{"id":"8d3f28e4.d9b9b8","type":"function","z":"809d03f5.6564","name":"countersGlobal","func":"var ts = new Date().getTime();\nvar energy = {\n                ts: ts, \n                total_power_import_t1_kwh:0,\n                total_power_import_t2_kwh:0,\n                total_power_export_t1_kwh:0,\n                total_power_export_t2_kwh:0,\n                active_power_w:0,\n                voltage_l1_v:0,\n                voltage_l2_v:0,\n                voltage_l3_v:0,\n                active_power_l1_w:0,\n                active_power_l2_w:0,\n                active_power_l3_w:0\n            };\nvar gas = {ts:ts, total_gas_m3:0};\nvar arr=msg.payload.split('\\r\\n');\n\nfor (i=0;i<arr.length;i++){\n    if(arr[i].startsWith(\"1-0:1.8.1\")) energy.total_power_import_t1_kwh += parseFloat(arr[i].substring(10,20))*1;\n    if(arr[i].startsWith(\"1-0:1.8.2\")) energy.total_power_import_t2_kwh += parseFloat(arr[i].substring(10,20))*1;\n    if(arr[i].startsWith(\"1-0:2.8.1\")) energy.total_power_export_t1_kwh += parseFloat(arr[i].substring(10,20))*1;\n    if(arr[i].startsWith(\"1-0:2.8.2\")) energy.total_power_export_t2_kwh += parseFloat(arr[i].substring(10,20))*1;\n    if(arr[i].startsWith(\"1-0:1.7.0\")) energy.active_power_w += parseFloat(arr[i].substring(10,20))*1000;\n    if(arr[i].startsWith(\"1-0:2.7.0\")) energy.active_power_w -= parseFloat(arr[i].substring(10,20))*1000;\n    if(arr[i].startsWith(\"1-0:32.7.0\")) energy.voltage_l1_v += parseFloat(arr[i].substring(11,16))*1;\n    if(arr[i].startsWith(\"1-0:52.7.0\")) energy.voltage_l2_v += parseFloat(arr[i].substring(11,16))*1;\n    if(arr[i].startsWith(\"1-0:72.7.0\")) energy.voltage_l3_v += parseFloat(arr[i].substring(11,16))*1;\n    if(arr[i].startsWith(\"1-0:22.7.0\")) energy.active_power_l1_w += parseFloat(arr[i].substring(11,17))*1000;\n    if(arr[i].startsWith(\"1-0:21.7.0\")) energy.active_power_l1_w -= parseFloat(arr[i].substring(11,17))*1000;\n    if(arr[i].startsWith(\"1-0:42.7.0\")) energy.active_power_l2_w += parseFloat(arr[i].substring(11,17))*1000;\n    if(arr[i].startsWith(\"1-0:41.7.0\")) energy.active_power_l2_w -= parseFloat(arr[i].substring(11,17))*1000;\n    if(arr[i].startsWith(\"1-0:62.7.0\")) energy.active_power_l3_w += parseFloat(arr[i].substring(11,17))*1000;\n    if(arr[i].startsWith(\"1-0:61.7.0\")) energy.active_power_l3_w -= parseFloat(arr[i].substring(11,17))*1000;\n    \n    if(arr[i].startsWith(\"0-1:24.2.1\")) {\n        gasData = arr[i].split('(');\n        gas.total_gas_m3 = parseFloat(gasData[2].substring(0, gasData[2].length - 4))*1000;\n        dateString = gasData[1].substring(0, gasData[1].length - 2);\n        d = new Date();\n        d.setFullYear(parseInt(dateString.substring(0,2))+2000);\n        d.setMonth(parseInt(dateString.substring(2,4))-1);\n        d.setDate(parseInt(dateString.substring(4,6)));\n        d.setHours(parseInt(dateString.substring(6,8)));\n        d.setMinutes(parseInt(dateString.substring(8,10)));\n        d.setSeconds(parseInt(dateString.substring(10,12)));\n        d.setMilliseconds(0);\n        gas.ts = d.valueOf();\n    }\n}\n\nglobal.set(\"energy\", energy);\nglobal.set(\"gas\", gas);\n\nreturn [{payload:{energy, gas}}];\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":520,"y":140,"wires":[["9e4ad400.468af","e052d.71ecaad38"]]},{"id":"2a95c25c.3506ce","type":"debug","z":"809d03f5.6564","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":510,"y":200,"wires":[]},{"id":"aade1dbb.0bf92","type":"mqtt out","z":"809d03f5.6564","name":"","topic":"","qos":"","retain":"","broker":"f935c11c.41462","x":1030,"y":200,"wires":[]},{"id":"3ce8aedf.6655b2","type":"join","z":"809d03f5.6564","name":"","mode":"custom","build":"merged","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":".1","count":"","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":910,"y":200,"wires":[["aade1dbb.0bf92"]]},{"id":"e052d.71ecaad38","type":"change","z":"809d03f5.6564","name":"move to msg","rules":[{"t":"set","p":"topic","pt":"msg","to":"p1","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":730,"y":200,"wires":[["3ce8aedf.6655b2"]]},{"id":"b01c3b99.6eb9b8","type":"mqtt in","z":"809d03f5.6564","name":"","topic":"p1","qos":"2","datatype":"json","broker":"f935c11c.41462","x":850,"y":280,"wires":[["88f9ad67.bb31c"]]},{"id":"88f9ad67.bb31c","type":"debug","z":"809d03f5.6564","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1010,"y":280,"wires":[]},{"id":"f935c11c.41462","type":"mqtt-broker","name":"MQTT","broker":"127.0.0.1","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

Afbeeldingslocatie: https://tweakers.net/i/lIPrzXjmIJ6xichUS4N4PxeN3x4=/800x/filters:strip_icc():strip_exif()/f/image/Rpy6PAwmWUhgtMe60ed4WEp9.jpg?f=fotoalbum_large

PVOutput Github - Div ESP TK: MHI - Clack - Marstek


Acties:
  • 0 Henk 'm!

  • Septillion
  • Registratie: Januari 2009
  • Laatst online: 17:08
Dat zou prima moeten lukken met een Rest sensor.

Denk dat je iets krijgt als:
YAML:
1
2
3
4
5
6
sensor:
  - platform: rest
    name: "Wh Sensor"
    resource: http://{ip adres}/api/v1/smartmeter?limit=1
    value_template: "{{ value_json[0][8] }}"
    unit_of_measurement: "Wh"


Als je uit dezelfde JSON meerdere sensoren wilt vullen zal je de hele JSON even naar een sensor moeten schrijven en kan je met meerdere Template sensors haal je dan de individuele data uit de JSON.

Acties:
  • 0 Henk 'm!

  • Jklaus
  • Registratie: Maart 2013
  • Laatst online: 17-06 22:35
@Septillion

Thnx! hiermee ben ik een heel stuk verder gekomen!

Heb nu alleen de volgende uitdaging. Dit is mijn huidige configuration.yaml

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
sensor:
  - platform: rest
    name: P1 Monitor
    json_attributes:
      - CONSUMPTION_GAS_M3
      - CONSUMPTION_KWH_HIGH
      - CONSUMPTION_KWH_LOW
      - CONSUMPTION_W
    resource: 'http://192.168.1.25/api/v1/smartmeter?limit=1&sort=asc&json=object&round=on'
    value_template: "{{ value_json.p1monitor }}"
    scan_interval: 10
  - platform: template
    sensors:
      consumption_gas_m3:
        friendly_name: "Gas M3"
        value_template: "{{ state_attr('sensor.json_p1monitor', 'consumption_gas_m3') }}"
      consumption_kwh_high:
        friendly_name: "KWH Hoog"
        value_template: "{{ state_attr('sensor.json_p1monitor', 'consumption_kwh_high') }}"
      consumption_kwg_low:
        friendly_name: "KWH laag"
        value_template: "{{ state_attr('sensor.json_p1monitor', 'consumption_kwg_low') }}"
      consumption_w:
        friendly_name: "WH"
        value_template: "{{ state_attr('sensor.json_p1monitor', 'consumption_w') }}"


Als ik de ontwikelaar tools check krijg ik netjes het volgende:

Entiteit: sensor.p1_monitor

output:
code:
1
2
3
4
5
CONSUMPTION_GAS_M3: 3279
CONSUMPTION_KWH_HIGH: 5999
CONSUMPTION_KWH_LOW: 5415
CONSUMPTION_W: 415
friendly_name: P1 Monitor


Alleen kan nu geen kaart maken met CONSUMPTION_W want dit is de output bij de ontwikkelaars optie:

Entiteit: sensor.consumption_w

output:

code:
1
friendly_name: WH


Dus geen waardes niks.

Acties:
  • 0 Henk 'm!

  • winDOS
  • Registratie: November 2002
  • Laatst online: 09-09 11:11

winDOS

6.22

@Jklaus Moet je valuetemplate van je sensoren dan niet dit zijn:

code:
1
value_template: "{{ state_attr('sensor.p1_monitor', 'consumption_gas_m3') }}"


Je sensor heet immers sensor.p1_monitor en niet sensor.json_p1monitor.

C:\>Signature.bat


Acties:
  • 0 Henk 'm!

  • KC27
  • Registratie: December 2009
  • Niet online
@Jklaus
Ik heb het zelf niet getest, maar zijn die json attributes niet hoofdletter gevoelig?
Als je je configuratie test op fouten (Ontwikkelingshulpmiddelen en Services) wat komt er dan in het logboek?

WP: Alpha Innotec MSW2-6S | PV: 20 x 300 Wp AEG | ACCU: 2x16x280Ah LiFePO4 3 x Multiplus II 48/3000 | DYN: Tibber | Gasloos | Day Ahead Optimizer


Acties:
  • 0 Henk 'm!

  • Septillion
  • Registratie: Januari 2009
  • Laatst online: 17:08
sensor.json_p1monitor vs sensor.p1_monitor? :D
Pagina: 1