# A example of EmonCMS sending data to be used in Grafana

**URL:** <https://community.openenergymonitor.org/t/a-example-of-emoncms-sending-data-to-be-used-in-grafana/10050>\
**Category:** Showcase\
**Tags:** grafana, nodered, graph, emoncms\
**Created:** [11 February 2019 14:20 UTC](https://community.openenergymonitor.org/t/a-example-of-emoncms-sending-data-to-be-used-in-grafana/10050 "2019-02-11T14:20:46Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![Soloam](https://community.openenergymonitor.org/letter_avatar_proxy/v4/letter/s/b3f665/32.png) [@Soloam](https://community.openenergymonitor.org/u/Soloam)\
**Post date:** [11 February 2019 14:20 UTC](https://community.openenergymonitor.org/t/a-example-of-emoncms-sending-data-to-be-used-in-grafana/10050/1 "2019-02-11T14:20:46Z")

</div>

Hello all, I’m here to share with you my beta dashboard, build in grafana and with data from EmonCMS. I’m using nodered to write the data from EmonCMS to a Influxdb DataBase, and then build the dashboard in grafana! The result is a pleasing dashboard that I display in a tablet!

 ![energy_mon](https://community.openenergymonitor.org/uploads/default/original/2X/8/8cd0f0523a273e26216b850f4b2d36ebcab48627.jpeg)

The system is new, so the data is still small.

Hope that this can inspire others to think in new implementations 😉

Best Regards to you all.

---

<div class="post-metadata">

**Author:** ![mauriciosti](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/mauriciosti/32/4265_2.png) [@mauriciosti](https://community.openenergymonitor.org/u/mauriciosti)\
**Post date:** [23 February 2019 01:42 UTC](https://community.openenergymonitor.org/t/a-example-of-emoncms-sending-data-to-be-used-in-grafana/10050/2 "2019-02-23T01:42:16Z")

</div>

Maybe u can show us how u send the data to influxdb??

---

<div class="post-metadata">

**Author:** ![Soloam](https://community.openenergymonitor.org/letter_avatar_proxy/v4/letter/s/b3f665/32.png) [@Soloam](https://community.openenergymonitor.org/u/Soloam)\
**Post date:** [25 February 2019 10:49 UTC](https://community.openenergymonitor.org/t/a-example-of-emoncms-sending-data-to-be-used-in-grafana/10050/3 "2019-02-25T10:49:11Z")

</div>

Hello @mauriciosti, at the moment I’m using NodeRed as a relay to duplicate the data to InfluxDB and then use it in Grafana!

 ![image](https://community.openenergymonitor.org/uploads/default/original/2X/2/239a1d46aa397c2d302d8c2e4a705fa62984add6.png)

I’m using the NodeRed node [node-red-node-emoncms](https://flows.nodered.org/node/node-red-node-emoncms), but I’ll be changing it only to use MQTT.

---

<div class="post-metadata">

**Author:** ![nigerninja](https://community.openenergymonitor.org/letter_avatar_proxy/v4/letter/n/f17d59/32.png) [@nigerninja](https://community.openenergymonitor.org/u/nigerninja)\
**Post date:** [11 May 2019 22:04 UTC](https://community.openenergymonitor.org/t/a-example-of-emoncms-sending-data-to-be-used-in-grafana/10050/4 "2019-05-11T22:04:25Z")

</div>

Hello!  
Nice dashboard you have. Can you please share the NodeRed Node used to relay to InfluxDb? This would be a good starting point to replicate something similar.

Thanks!

---

<div class="post-metadata">

**Author:** ![Laurent\_Hubaut](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/laurent_hubaut/32/10218_2.png) [@Laurent\_Hubaut](https://community.openenergymonitor.org/u/Laurent_Hubaut)\
**Post date:** [30 May 2019 08:14 UTC](https://community.openenergymonitor.org/t/a-example-of-emoncms-sending-data-to-be-used-in-grafana/10050/5 "2019-05-30T08:14:31Z")

</div>

Hi,  
I’m also interrested for a short explanation about this node

---

<div class="post-metadata">

**Author:** ![Soloam](https://community.openenergymonitor.org/letter_avatar_proxy/v4/letter/s/b3f665/32.png) [@Soloam](https://community.openenergymonitor.org/u/Soloam)\
**Post date:** [3 June 2019 15:47 UTC](https://community.openenergymonitor.org/t/a-example-of-emoncms-sending-data-to-be-used-in-grafana/10050/6 "2019-06-03T15:47:36Z")

</div>

This is my nodes in nodered. Probably not the best solution, but it works well to me. In short I read the voltage, watt and kwh (that I did not need, I could calculate in grafana, but its easier) and send it to a InfluxDB. Then I use this data to display in grafana.

```
[{"id":"545e66fb.ae5378","type":"subflow","name":"Devices / Persistance Service","info":"","category":"","in":[{"x":80,"y":60,"wires":[{"id":"3c28ab26.4612a4"}]}],"out":[]},{"id":"3c28ab26.4612a4","type":"influxdb out","z":"545e66fb.ae5378","influxdb":"723857d4.0da4e8","name":"","measurement":"","precision":"","retentionPolicy":"","x":200,"y":60,"wires":[]},{"id":"723857d4.0da4e8","type":"influxdb","z":"","hostname":"databases.myhome","port":"8086","protocol":"http","database":"nodered","name":"NodeRed","usetls":false,"tls":""},{"id":"19ebdfde.b83ae","type":"emoncms in","z":"169b9f58.fe0fa1","name":"Consumo Casa W","emonServer":"548ec955.705858","feedid":"11","x":730,"y":100,"wires":[["78a3ea47.67c544"]]},{"id":"e7756bbe.f19918","type":"subflow:545e66fb.ae5378","z":"169b9f58.fe0fa1","name":"","x":1830,"y":280,"wires":[]},{"id":"6fb596.43f90a6c","type":"emoncms in","z":"169b9f58.fe0fa1","name":"Consumo Casa KWh","emonServer":"548ec955.705858","feedid":"12","x":740,"y":140,"wires":[["78a3ea47.67c544"]]},{"id":"78a3ea47.67c544","type":"join","z":"169b9f58.fe0fa1","name":"","mode":"auto","build":"array","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"2","count":"","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":970,"y":120,"wires":[["f1a952b6.99cb7"]]},{"id":"7ea56c8b.df0b64","type":"change","z":"169b9f58.fe0fa1","name":"parts","rules":[{"t":"set","p":"parts.id","pt":"msg","to":"_msgid","tot":"msg"},{"t":"set","p":"parts.count","pt":"msg","to":"2","tot":"num"},{"t":"set","p":"voltage","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":370,"y":280,"wires":[["32591fd7.c1deb","4baf3a0c.e1af34"]]},{"id":"32591fd7.c1deb","type":"change","z":"169b9f58.fe0fa1","name":"parts","rules":[{"t":"set","p":"parts.index","pt":"msg","to":"0","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":530,"y":260,"wires":[["19ebdfde.b83ae","c24b8f37.a826b","a661e74b.a90008","7bc1e1e8.89627","c7fd01d1.f9876","1da03542.d3290b","c11a1977.e612e8"]]},{"id":"4baf3a0c.e1af34","type":"change","z":"169b9f58.fe0fa1","name":"parts","rules":[{"t":"set","p":"parts.index","pt":"msg","to":"1","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":530,"y":300,"wires":[["6fb596.43f90a6c","2fd5aca4.fd7024","d08de5b6.7ee8f8","ef94d2e9.33c9e","472d4ec8.41074","5552cbe5.2235d4","657b7532.71ee0c"]]},{"id":"c24b8f37.a826b","type":"emoncms in","z":"169b9f58.fe0fa1","name":"Consumo AC W","emonServer":"548ec955.705858","feedid":"21","x":720,"y":200,"wires":[["9b172eed.77e04"]]},{"id":"2fd5aca4.fd7024","type":"emoncms in","z":"169b9f58.fe0fa1","name":"Consumo AC KWh","emonServer":"548ec955.705858","feedid":"22","x":730,"y":240,"wires":[["9b172eed.77e04"]]},{"id":"9b172eed.77e04","type":"join","z":"169b9f58.fe0fa1","name":"","mode":"auto","build":"array","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"2","count":"","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":970,"y":220,"wires":[["36959a61.b67136"]]},{"id":"f1a952b6.99cb7","type":"change","z":"169b9f58.fe0fa1","name":"Device","rules":[{"t":"set","p":"deviceId","pt":"msg","to":"main","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1090,"y":120,"wires":[["bedfb4ac.91df48"]]},{"id":"36959a61.b67136","type":"change","z":"169b9f58.fe0fa1","name":"Device","rules":[{"t":"set","p":"deviceId","pt":"msg","to":"air_conditioner","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1090,"y":220,"wires":[["bedfb4ac.91df48"]]},{"id":"a661e74b.a90008","type":"emoncms in","z":"169b9f58.fe0fa1","name":"Consumo Maquina Roupa W","emonServer":"548ec955.705858","feedid":"23","x":760,"y":300,"wires":[["6c9ad83c.b17788"]]},{"id":"d08de5b6.7ee8f8","type":"emoncms in","z":"169b9f58.fe0fa1","name":"Consumo Maquina Roupa KWh","emonServer":"548ec955.705858","feedid":"24","x":770,"y":340,"wires":[["6c9ad83c.b17788"]]},{"id":"6c9ad83c.b17788","type":"join","z":"169b9f58.fe0fa1","name":"","mode":"auto","build":"array","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"2","count":"","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":970,"y":320,"wires":[["6f07e5dc.71a1bc"]]},{"id":"6f07e5dc.71a1bc","type":"change","z":"169b9f58.fe0fa1","name":"Device","rules":[{"t":"set","p":"deviceId","pt":"msg","to":"washing_machine","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1090,"y":320,"wires":[["bedfb4ac.91df48"]]},{"id":"7bc1e1e8.89627","type":"emoncms in","z":"169b9f58.fe0fa1","name":"Consumo Maquina Loiça W","emonServer":"548ec955.705858","feedid":"25","x":760,"y":400,"wires":[["86829a26.2943c8"]]},{"id":"86829a26.2943c8","type":"join","z":"169b9f58.fe0fa1","name":"","mode":"auto","build":"array","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"2","count":"","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":970,"y":420,"wires":[["d01bac9.228b95"]]},{"id":"d01bac9.228b95","type":"change","z":"169b9f58.fe0fa1","name":"Device","rules":[{"t":"set","p":"deviceId","pt":"msg","to":"dishwasher","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1090,"y":420,"wires":[["bedfb4ac.91df48"]]},{"id":"bedfb4ac.91df48","type":"function","z":"169b9f58.fe0fa1","name":"Range","func":"var range_arr = [['00:00','08:00'],['22:00','23:59']];\n\nif(msg.time !== undefined)\n var time = new Date(msg.time);\nelse\n var time = new Date();\n\nfor(var i=0;i<range_arr.length;i++){\n if(isInRange(time, range_arr[i])){\n return [msg,null];\n }\n}\n\n\nreturn [null,msg];\n\n\nfunction isInRange(value, range) {\n \n var time = new Date(value.getTime());\n time.setSeconds(0);\n \n var time_in = new Date(value.getTime());\n \n time_in.setHours(range[0].split(':')[0]);\n time_in.setMinutes(range[0].split(':')[1]);\n time_in.setSeconds(0);\n \n var time_out = new Date(value.getTime());\n time_out.setHours(range[1].split(':')[0]);\n time_out.setMinutes(range[1].split(':')[1]);\n time_out.setSeconds(0);\n \n \n return time.getTime()>=time_in.getTime() && time.getTime()<=time_out.getTime();\n}","outputs":2,"noerr":0,"x":1250,"y":280,"wires":[["518c34d8.5e092c"],["62366904.0b3d58"]]},{"id":"62366904.0b3d58","type":"change","z":"169b9f58.fe0fa1","name":"Set Range","rules":[{"t":"set","p":"trange","pt":"msg","to":"FVZ","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1430,"y":320,"wires":[["683d76b7.a627d8"]]},{"id":"518c34d8.5e092c","type":"change","z":"169b9f58.fe0fa1","name":"Set Range","rules":[{"t":"set","p":"trange","pt":"msg","to":"VZ","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1430,"y":260,"wires":[["683d76b7.a627d8"]]},{"id":"683d76b7.a627d8","type":"function","z":"169b9f58.fe0fa1","name":"InnoDB","func":"var newMsg = {};\nvar data = {};\nvar tags = {};\n\nif(msg.power !== undefined && msg.kwh !== undefined){\n var power = msg.power;\n var kwh = msg.kwh;\n}\nelse if(msg.payload !== undefined && Array.isArray(msg.payload)){\n if(msg.payload.length != 2)\n return null;\n \n var power = msg.payload[0];\n var kwh = msg.payload[1];\n}\n\nif(power === undefined || kwh === undefined)\n return null;\n\nnewMsg.measurement = (msg.measurement) || 'power';\n\nif(msg.voltage === undefined)\n msg.voltage = 24000;\n\ndata = {\n 'power': parseFloat(power),\n 'kwh' : parseFloat(kwh),\n 'volt' : parseFloat(msg.voltage/100),\n 'amp' : parseFloat(parseFloat(power) / (msg.voltage/100)),\n}\n\n\nif(msg.time !== undefined)\n data.time = msg.time;\n\ndata.trange = msg.trange || msg.payload.trange || \"\";\n\ntags.deviceId = msg.deviceId || msg.payload.deviceId;\n\nnewMsg.payload = [data,tags];\n\nreturn newMsg;","outputs":1,"noerr":0,"x":1600,"y":280,"wires":[["e7756bbe.f19918"]]},{"id":"180009d6.24d7a6","type":"emoncms in","z":"169b9f58.fe0fa1","name":"Voltage","emonServer":"548ec955.705858","feedid":"31","x":220,"y":280,"wires":[["7ea56c8b.df0b64"]]},{"id":"3126f0e4.395a4","type":"inject","z":"169b9f58.fe0fa1","name":"Start","topic":"","payload":"","payloadType":"date","repeat":"5","crontab":"","once":true,"onceDelay":"60","x":70,"y":280,"wires":[["180009d6.24d7a6"]]},{"id":"ef94d2e9.33c9e","type":"emoncms in","z":"169b9f58.fe0fa1","name":"Consumo Maquina Loiça KWh","emonServer":"548ec955.705858","feedid":"26","x":770,"y":460,"wires":[["86829a26.2943c8"]]},{"id":"548ec955.705858","type":"emoncms-server","z":"","server":"http://debian.myhome/emoncms","name":"EmonCMS Read"}]
```

---

<div class="post-metadata">

**Author:** ![PF-Henrique](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/pf-henrique/32/11027_2.png) [@PF-Henrique](https://community.openenergymonitor.org/u/PF-Henrique)\
**Post date:** [30 August 2019 13:22 UTC](https://community.openenergymonitor.org/t/a-example-of-emoncms-sending-data-to-be-used-in-grafana/10050/8 "2019-08-30T13:22:01Z")

</div>

Hello 🙂

How to add this to what you posted this way on node-red?  
will it work on any emoncms by default?  
should do some additional configuration?

Very thanks!

---

<div class="post-metadata">

**Author:** ![Oleg](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/oleg/32/17368_2.png) [@Oleg](https://community.openenergymonitor.org/u/Oleg)\
**Post date:** [22 March 2021 20:21 UTC](https://community.openenergymonitor.org/t/a-example-of-emoncms-sending-data-to-be-used-in-grafana/10050/9 "2021-03-22T20:21:51Z")

</div>

you can read data directly from emoncms [link](https://community.openenergymonitor.org/t/grafana-dashboard-with-direct-access-to-emoncms-data/17273)

---

<div class="post-metadata">

**Author:** ![Soloam](https://community.openenergymonitor.org/letter_avatar_proxy/v4/letter/s/b3f665/32.png) [@Soloam](https://community.openenergymonitor.org/u/Soloam)\
**Post date:** [22 March 2021 20:44 UTC](https://community.openenergymonitor.org/t/a-example-of-emoncms-sending-data-to-be-used-in-grafana/10050/10 "2021-03-22T20:44:46Z")

</div>

Thank you for this! I was unaware of this! Where does grafana store’s the pulled Data?

Thank you

---

<div class="post-metadata">

**Author:** ![Bill.Thomson](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/bill.thomson/32/1834_2.png) [@Bill.Thomson](https://community.openenergymonitor.org/u/Bill.Thomson)\
**Post date:** [22 March 2021 22:12 UTC](https://community.openenergymonitor.org/t/a-example-of-emoncms-sending-data-to-be-used-in-grafana/10050/11 "2021-03-22T22:12:50Z")

</div>

> [@Soloam](#):
>
> Where does grafana store’s the pulled Data?

Grafana only _displays_ data. That is to say, it doesn’t _store_ data.  
Oleg’s method reads the data _directly_ from emonCMS. i.e. emonCMS is where the data is stored.
