Energy monitor

This flow measures my kamstrup 162 smart meter which is connected to my raspberry pi3 with an usb cable. My raspberry pi3 is running hassio.

What this flow does is:

Start measuring gas usage on 0:00 and end at 23:59, and display this on the ui on daily basis. Calculate the costs from the start at 0:00 and outputs this to the ui.

e.g. 0:00 gas meter: 10000m3 0:20 gas meter: 10030m3 calc delta, multiply by costs per m3, display usage plus costs

Used cable: https://nl.aliexpress.com/item/Ftdi-usb-uart-ttl-kabel-voor-kaifa-ma105-Iskra-ME-382-Kamstrup-162-382-en351-landis/32843044297.html?spm=a2g0s.9042311.0.0.21934c4d0zlCmw

With a special thanks to ukmoose from the forum, who helped me with the example flow.

[{"id":"88fa0739.2e94a8","type":"tab","label":"Energie verbruik","disabled":false,"info":""},{"id":"9ca1a2c.bafe76","type":"inject","z":"88fa0739.2e94a8","name":"Start of the day","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"00 00 * * *","once":false,"onceDelay":0.1,"x":140,"y":120,"wires":[["90799776.afa048","de17266b.9b4b18","9cc1f9a1.27cf18"]]},{"id":"90799776.afa048","type":"change","z":"88fa0739.2e94a8","name":"Gas","rules":[{"t":"set","p":"payload","pt":"msg","to":"dailyusage","tot":"global"},{"t":"set","p":"dailyusage","pt":"global","to":"0","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":350,"y":80,"wires":[["159ea88.8d6ec58"]]},{"id":"cb270f6d.24d6e","type":"debug","z":"88fa0739.2e94a8","name":"Last Days","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":760,"y":80,"wires":[]},{"id":"675fb147.46d4c","type":"comment","z":"88fa0739.2e94a8","name":"Dagelijks verbruik en reset","info":"","x":150,"y":20,"wires":[]},{"id":"159ea88.8d6ec58","type":"function","z":"88fa0739.2e94a8","name":"Total usage","func":"msg.payload = \"Total usage today is \"+msg.payload\nreturn msg;","outputs":1,"noerr":0,"x":570,"y":80,"wires":[["cb270f6d.24d6e"]]},{"id":"2d264d5.9fe0bb2","type":"poll-state","z":"88fa0739.2e94a8","name":"Dal Tarief","server":"4463f6c4.b567b8","updateinterval":"2","outputinitially":false,"outputonchanged":false,"entity_id":"sensor.power_consumption_low","x":120,"y":360,"wires":[["47f912f1.565eec"]]},{"id":"47f912f1.565eec","type":"change","z":"88fa0739.2e94a8","name":"Convert","rules":[{"t":"set","p":"payload","pt":"msg","to":"$number(payload)","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":300,"y":360,"wires":[["4351a607.4d2808"]]},{"id":"4351a607.4d2808","type":"function","z":"88fa0739.2e94a8","name":"Power usage","func":"//Grab vorig dal from global variable for total usage\nvorigdal = global.get(\"totaaldal\")||0;\n\n//How much usage since the last update\nperiodedal = msg.payload - vorigdal;\n\n//Grab vorig dal from global variable for daily usage\ndagelijksdal = global.get(\"dagelijksdal\")||0;\n\ndagelijksdal = dagelijksdal + periodedal;\n\n//Update the global variables\nglobal.set(\"dagelijksdal\",dagelijksdal );\nglobal.set(\"totaaldal\", msg.payload);\n\nmsg.payload = parseFloat(dagelijksdal).toFixed(3)\n\nreturn msg;","outputs":1,"noerr":0,"x":530,"y":360,"wires":[["ef7ea479.50ec18"]]},{"id":"d5c007ef.eb55b8","type":"ui_gauge","z":"88fa0739.2e94a8","name":"Stroom nu","group":"88cbb72.df21948","order":1,"width":"3","height":"3","gtype":"donut","title":"Stroom nu","label":"W","format":"{{value}}","min":0,"max":"6000","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":510,"y":260,"wires":[]},{"id":"ef7ea479.50ec18","type":"function","z":"88fa0739.2e94a8","name":"KWh naar Euro","func":"kwhprijs = 0.23 //23 cent\ncalc = parseFloat(msg.payload * kwhprijs).toFixed(2);\nvar msg1 = {payload:calc};\nreturn [msg1];","outputs":1,"noerr":0,"x":760,"y":340,"wires":[["244e1b79.28b1a4"]]},{"id":"244e1b79.28b1a4","type":"ui_text","z":"88fa0739.2e94a8","group":"88cbb72.df21948","order":3,"width":"6","height":"1","name":"Dal tarief","label":"Dal tarief","format":"{{msg.payload}} Euro","layout":"row-spread","x":740,"y":380,"wires":[]},{"id":"939b58c5.b66018","type":"ui_chart","z":"88fa0739.2e94a8","name":"VerbruikGrafiek","group":"88cbb72.df21948","order":2,"width":0,"height":0,"label":"","chartType":"line","legend":"false","xformat":"dd HH:mm","interpolate":"linear","nodata":"","dot":false,"ymin":"","ymax":"","removeOlder":"1","removeOlderPoints":"10000","removeOlderUnit":"604800","cutout":0,"useOneColor":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"x":520,"y":300,"wires":[[],[]]},{"id":"de17266b.9b4b18","type":"change","z":"88fa0739.2e94a8","name":"Dal","rules":[{"t":"set","p":"payload","pt":"msg","to":"dagelijksdal","tot":"global"},{"t":"set","p":"dagelijksdal","pt":"global","to":"0","tot":"num"},{"t":"set","p":"vorigdal","pt":"msg","to":"0","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":350,"y":120,"wires":[["ed2ef7e.b41ce08"]]},{"id":"4d94f71a.934e88","type":"debug","z":"88fa0739.2e94a8","name":"Last Days","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":760,"y":120,"wires":[]},{"id":"ed2ef7e.b41ce08","type":"function","z":"88fa0739.2e94a8","name":"Total usage","func":"msg.payload = \"Total usage today is \"+msg.payload\nreturn msg;","outputs":1,"noerr":0,"x":570,"y":120,"wires":[["4d94f71a.934e88"]]},{"id":"1094f192.43f43e","type":"change","z":"88fa0739.2e94a8","name":"Convert","rules":[{"t":"set","p":"payload","pt":"msg","to":"$number(payload)*1000","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":300,"y":280,"wires":[["d5c007ef.eb55b8","939b58c5.b66018"]]},{"id":"f6258372.f7858","type":"poll-state","z":"88fa0739.2e94a8","name":"Gas","server":"4463f6c4.b567b8","updateinterval":"2","outputinitially":false,"outputonchanged":false,"entity_id":"sensor.gas_consumption","x":110,"y":720,"wires":[["94be3317.721d1"]]},{"id":"94be3317.721d1","type":"change","z":"88fa0739.2e94a8","name":"Convert","rules":[{"t":"set","p":"payload","pt":"msg","to":"$number(payload)","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":300,"y":720,"wires":[["a43aa836.e30f78"]]},{"id":"a43aa836.e30f78","type":"function","z":"88fa0739.2e94a8","name":"Gas usage","func":"//Grab previous value from global variable for total usage\npreviousvalue = global.get(\"totalvalue\")||0;\n\n//How much usage since the last update\nperiodvalue = msg.payload - previousvalue;\n\n//Grab previous value from global variable for daily usage\ndailyvalue = global.get(\"dailyusage\")||0;\n\ndailyvalue = dailyvalue + periodvalue;\n\n//Update the global variables.\nglobal.set(\"dailyusage\",dailyvalue );\nglobal.set(\"totalvalue\", msg.payload);\n\nmsg.payload = parseFloat(dailyvalue).toFixed(3)\n\nreturn msg;","outputs":1,"noerr":0,"x":490,"y":720,"wires":[["6bcc3e1a.d41b9","450350a7.1bd2e","6cae5772.5418d8"]]},{"id":"450350a7.1bd2e","type":"ui_gauge","z":"88fa0739.2e94a8","name":"Gas vandaag","group":"5dd90078.dcc25","order":1,"width":"3","height":"3","gtype":"donut","title":"Gas vandaag","label":"m3","format":"{{value}}","min":0,"max":"10","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":770,"y":660,"wires":[]},{"id":"6cae5772.5418d8","type":"ui_chart","z":"88fa0739.2e94a8","name":"VerbruikGrafiek","group":"5dd90078.dcc25","order":3,"width":"0","height":"0","label":"","chartType":"line","legend":"false","xformat":"dd HH:mm","interpolate":"linear","nodata":"","dot":false,"ymin":"","ymax":"","removeOlder":"1","removeOlderPoints":"10000","removeOlderUnit":"604800","cutout":0,"useOneColor":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"x":780,"y":700,"wires":[[],[]]},{"id":"6bcc3e1a.d41b9","type":"function","z":"88fa0739.2e94a8","name":"m3 naar Euro","func":"gasprijs = 0.71 //0.7060 cent\ncalc = parseFloat(msg.payload * gasprijs).toFixed(2);\nvar msg1 = {payload:calc};\nreturn [msg1];","outputs":1,"noerr":0,"x":780,"y":740,"wires":[["f380c562.31b788"]]},{"id":"f380c562.31b788","type":"ui_text","z":"88fa0739.2e94a8","group":"5dd90078.dcc25","order":2,"width":0,"height":0,"name":"Verbruik Euro","label":"Kosten vandaag","format":"{{msg.payload}} Euro","layout":"row-spread","x":780,"y":800,"wires":[]},{"id":"fcf6f7a3.5eb198","type":"poll-state","z":"88fa0739.2e94a8","name":"Elektra verbruik","server":"4463f6c4.b567b8","updateinterval":"2","outputinitially":false,"outputonchanged":false,"entity_id":"sensor.power_consumption","x":140,"y":280,"wires":[["1094f192.43f43e"]]},{"id":"5e57a412.1e905c","type":"poll-state","z":"88fa0739.2e94a8","name":"Normaal Tarief","server":"4463f6c4.b567b8","updateinterval":"2","outputinitially":false,"outputonchanged":false,"entity_id":"sensor.power_consumption_normal","x":130,"y":500,"wires":[["8a920a62.d4b098"]]},{"id":"8a920a62.d4b098","type":"change","z":"88fa0739.2e94a8","name":"Convert","rules":[{"t":"set","p":"payload","pt":"msg","to":"$number(payload)","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":320,"y":500,"wires":[["c5ace9b1.f967d8"]]},{"id":"c5ace9b1.f967d8","type":"function","z":"88fa0739.2e94a8","name":"Power usage","func":"//Grab vorig normaal from global variable for total usage\nvorignormaal = global.get(\"totaalnormaal\")||0;\n\n//How much usage since the last update\nperiodenormaal = msg.payload - vorignormaal;\n\n//Grab vorig normaal from global variable for daily usage\ndagelijksnormaal = global.get(\"dagelijksnormaal\")||0;\n\ndagelijksnormaal = dagelijksnormaal + periodenormaal;\n\n//Update the global variables\nglobal.set(\"dagelijksnormaal\",dagelijksnormaal );\nglobal.set(\"totaalnormaal\", msg.payload);\n\nmsg.payload = parseFloat(dagelijksnormaal).toFixed(3)\n\nreturn msg;","outputs":1,"noerr":0,"x":530,"y":500,"wires":[["c3bc14e5.1a6888"]]},{"id":"c3bc14e5.1a6888","type":"function","z":"88fa0739.2e94a8","name":"KWh naar Euro","func":"kwhprijs = 0.23 //23 cent\ncalc = parseFloat(msg.payload * kwhprijs).toFixed(2);\nvar msg1 = {payload:calc};\nreturn [msg1];","outputs":1,"noerr":0,"x":760,"y":500,"wires":[["397c1ee5.ddbed2"]]},{"id":"397c1ee5.ddbed2","type":"ui_text","z":"88fa0739.2e94a8","group":"88cbb72.df21948","order":4,"width":"6","height":"1","name":"Normaal tarief","label":"Normaal tarief","format":"{{msg.payload}} Euro","layout":"row-spread","x":760,"y":540,"wires":[]},{"id":"9cc1f9a1.27cf18","type":"change","z":"88fa0739.2e94a8","name":"Normaal","rules":[{"t":"set","p":"payload","pt":"msg","to":"dagelijksnormaal","tot":"global"},{"t":"set","p":"dagelijksnormaal","pt":"global","to":"0","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":360,"y":160,"wires":[["399201e2.91d64e"]]},{"id":"399201e2.91d64e","type":"function","z":"88fa0739.2e94a8","name":"Total usage","func":"msg.payload = \"Total usage today is \"+msg.payload\nreturn msg;","outputs":1,"noerr":0,"x":570,"y":160,"wires":[["49c330da.d8856"]]},{"id":"49c330da.d8856","type":"debug","z":"88fa0739.2e94a8","name":"Last Days","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":760,"y":160,"wires":[]},{"id":"4463f6c4.b567b8","type":"server","z":"","name":"Home Assistant","legacy":true},{"id":"88cbb72.df21948","type":"ui_group","z":"","name":"Elektra","tab":"bfc64ecd.f4499","order":8,"disp":true,"width":"6","collapse":false},{"id":"5dd90078.dcc25","type":"ui_group","z":"","name":"Gas","tab":"bfc64ecd.f4499","order":9,"disp":true,"width":"6","collapse":false},{"id":"bfc64ecd.f4499","type":"ui_tab","z":"","name":"Energie","icon":"dashboard","order":1}]

Flow Info

Created 5 years, 11 months ago
Rating: not yet rated

Owner

Actions

Rate:

Node Types

Core
  • change (x7)
  • comment (x1)
  • debug (x3)
  • function (x9)
  • inject (x1)
Other
  • poll-state (x4)
  • server (x1)
  • tab (x1)
  • ui_chart (x2)
  • ui_gauge (x2)
  • ui_group (x2)
  • ui_tab (x1)
  • ui_text (x3)

Tags

  • energy
  • monitor
  • usb
  • kamstrup
  • hassio
  • homeassistant
  • smartmeter
  • slimmemeter
  • usage
  • gas
  • power
  • stroom
  • dutch
  • kaifa
  • landris
  • iskra
Copy this flow JSON to your clipboard and then import into Node-RED using the Import From > Clipboard (Ctrl-I) menu option