Integration Request - Eyedro Solar-Ready Home WiFi Energy Monitor (EYEFI-2)

Eyedro makes an electricity monitoring solution consisting of a wifi connected module and two current sensors that clamp around the cables inside your electrical panel. The product costs $149 and includes access to your electricity usage data via their web portal for no extra cost. They also have an API that will output the data locally in JSON format.

This seems like a fairly easy integration and I wish I had the knowledge to implement it. I watched Frenck’s You Tube video on making an integration but it is beyond my capabilities. Would someone consider taking on this project?

Here is a link to the API documentation:

I was able to query the module in Node Red and received data just like in the documentation above:

http://192.168.0.34:8080/getdata
1 {
2 “data”: [ [988, 11665, 11800, 1360, 0], [989, 11665, 4854, 560, 0] ]
3 {

The ‘data’ array includes 2 elements, one for each sensor (A first, B second). Each sub-array includes 5 values that are:
1st: Power factor in milli-units meaning ‘988’ = 0.988
2nd: Voltage in cV meaning ‘11665’ = 116.65V
3rd: Amperage in mA meaning ‘11800’ = 11.8A
4th: Wattage in W meaning ‘988’ = 988W
5th: Ignore. Used by factory only.

Hello,

So how did you find the experience ?
I’m currently wondering if I should go with the EYEFI-2 or the aeotec zwave home energy monitor

Home assistant Integration is key here. I already use Red Node and have already a Z wave network integrated in Home Asssiant.

Will be very interested in your experience.

https://www.aartech.ca/zw095/aeotec-zwave-home-energy-monitor-gen-5.html

If you know how to create an integration or are willing to wait for someone else to create one, then the EyeDro would be your best bet. Unfortunately, there is no integration for the EyeDro at this moment. I was able to collect data from the EyeDro by manually querying it from Node Red - but I don’t know how to get the data out of Node Red and do anything with it. My reason for creating this post was to see if any developers would show any interest in creating something for it. I also contacted EyeDro and asked them to create an integration and they showed some interest - so I’m hoping they may come out with something.
I’m not familiar with the Aeotec unit, but after looking at the website there doesn’t seem to be any web interface or application. Is that correct? While the EyeDro (WiFi 2 model - not ethernet model) can send data locally, it also sends data to the cloud. This data is provided via download or on a web page that provides lots of good info like current usage, historical usage and most importantly - your power bill. Using the web interface, you can give EyeDro your power rate, fees, taxes etc, and it shows what your power bill will be for the month. Mine is usually accurate within a few dollars and this is a great feature. You can also display this information on your phone - but through the web page, not a dedicated app. I do think the web interface needs re-designing - it is not very modern looking but it is functional. Bottom line if you desire HA integration now, then Aeotec would be your only choice between these two.

2 Likes

I have been looking at this for a while, it’s a very slick setup, is affordable, and is made an hour from my house. I am hoping someone adopts this…

very basic API as mentioned by redscrewdriver

This is a feature request, if you vote in the top left corner, it will eventually get some attention. I will eventually get the eyedro system.

I voted and am posting so it can get more notice. I use the aeotech gen 1 but it’s so inaccurate, so it’s either go to gen 2 or eyedro which they are similar in price.

Voted, thanks OP for starting this. And I live in the same town as where it’s made :-), but no affiliation other than that.

Attached is a Node-Red flow that I used for a few minutes before my Eydro fail again. This is my second unit and they are really crappy. You will need to change the address and the Timestamp request in seconds. I am switching to Shelly EM3 which I just got yesterday.
Good luck with Eyedro

[{“id”:“a97a7f8.e7da98”,“type”:“tab”,“label”:“Eyedro”,“disabled”:false,“info”:""},{“id”:“c98ff2fc.e1fb7”,“type”:“http request”,“z”:“a97a7f8.e7da98”,“name”:"",“method”:“GET”,“ret”:“txt”,“paytoqs”:“ignore”,“url”:“http://10.0.3.113:8080/getdata",“tls”:"",“persist”:false,“proxy”:"",“authType”:"",“x”:90,“y”:40,“wires”:[[“3227a94e.1580f6”]]},{“id”:“3227a94e.1580f6”,“type”:“json”,“z”:“a97a7f8.e7da98”,“name”:"",“property”:“payload”,“action”:"",“pretty”:false,“x”:250,“y”:40,“wires”:[[“414c0399.24de2c”]],“info”:“payload.data[0][0]”},{“id”:“414c0399.24de2c”,“type”:“split”,“z”:“a97a7f8.e7da98”,“name”:"",“splt”:"\n",“spltType”:“str”,“arraySplt”:1,“arraySpltType”:“len”,“stream”:false,“addname”:"",“x”:250,“y”:300,“wires”:[[“2718e0b.701282”,“b4893977.24bcb8”,“233d00c1.17518”,“c188f42d.c25a68”,“dd2fe5b5.2c7368”,“d35beb2e.907118”,“5755a6b2.ec0898”,“24fdd142.c2bfbe”,“b2e2f975.d761d8”,“58def24c.0ed7dc”,“5b259799.8e5bd8”,“7054f9fe.1e8b98”]]},{“id”:“2718e0b.701282”,“type”:“ha-entity”,“z”:“a97a7f8.e7da98”,“name”:“PF1”,“server”:“bc748184.63e6e”,“version”:1,“debugenabled”:false,“outputs”:1,“entityType”:“sensor”,“config”:[{“property”:“name”,“value”:“PF1”},{“property”:“device_class”,“value”:“sesor”},{“property”:“icon”,“value”:""},{“property”:“unit_of_measurement”,“value”:""}],“state”:“payload[0][0]/1000”,“stateType”:“jsonata”,“attributes”:[],“resend”:true,“outputLocation”:"",“outputLocationType”:“none”,“inputOverride”:“allow”,“outputOnStateChange”:false,“outputPayload”:"$entity().state ? “on”: “off””,“outputPayloadType”:“jsonata”,“x”:450,“y”:20,“wires”:[[]],“info”:“states(‘sensor.PF1’)\npayload[0][0]”},{“id”:“b4893977.24bcb8”,“type”:“ha-entity”,“z”:“a97a7f8.e7da98”,“name”:“V1”,“server”:“bc748184.63e6e”,“version”:1,“debugenabled”:false,“outputs”:1,“entityType”:“sensor”,“config”:[{“property”:“name”,“value”:“V1”},{“property”:“device_class”,“value”:“sesor”},{“property”:“icon”,“value”:""},{“property”:“unit_of_measurement”,“value”:“V”}],“state”:“payload[0][1]/100”,“stateType”:“jsonata”,“attributes”:[],“resend”:true,“outputLocation”:"",“outputLocationType”:“none”,“inputOverride”:“allow”,“outputOnStateChange”:false,“outputPayload”:"$entity().state ? “on”: “off”",“outputPayloadType”:“jsonata”,“x”:450,“y”:80,“wires”:[[]],“info”:“states(‘sensor.PF1’)\npayload[0][0]”},{“id”:“233d00c1.17518”,“type”:“ha-entity”,“z”:“a97a7f8.e7da98”,“name”:“C1”,“server”:“bc748184.63e6e”,“version”:1,“debugenabled”:false,“outputs”:1,“entityType”:“sensor”,“config”:[{“property”:“name”,“value”:“C1”},{“property”:“device_class”,“value”:“sesor”},{“property”:“icon”,“value”:""},{“property”:“unit_of_measurement”,“value”:“A”}],“state”:“payload[0][2]/1000”,“stateType”:“jsonata”,“attributes”:[],“resend”:true,“outputLocation”:"",“outputLocationType”:“none”,“inputOverride”:“allow”,“outputOnStateChange”:false,“outputPayload”:"$entity().state ? “on”: “off”",“outputPayloadType”:“jsonata”,“x”:450,“y”:140,“wires”:[[]],“info”:“states(‘sensor.PF1’)\npayload[0][0]”},{“id”:“c188f42d.c25a68”,“type”:“ha-entity”,“z”:“a97a7f8.e7da98”,“name”:“P1”,“server”:“bc748184.63e6e”,“version”:1,“debugenabled”:false,“outputs”:1,“entityType”:“sensor”,“config”:[{“property”:“name”,“value”:“P1”},{“property”:“device_class”,“value”:“sesor”},{“property”:“icon”,“value”:""},{“property”:“unit_of_measurement”,“value”:“kW”}],“state”:“payload[0][3]/1000”,“stateType”:“jsonata”,“attributes”:[],“resend”:true,“outputLocation”:"",“outputLocationType”:“none”,“inputOverride”:“allow”,“outputOnStateChange”:false,“outputPayload”:"$entity().state ? “on”: “off”",“outputPayloadType”:“jsonata”,“x”:450,“y”:200,“wires”:[[]],“info”:“states(‘sensor.PF1’)\npayload[0][0]”},{“id”:“dd2fe5b5.2c7368”,“type”:“ha-entity”,“z”:“a97a7f8.e7da98”,“name”:“PF2”,“server”:“bc748184.63e6e”,“version”:1,“debugenabled”:false,“outputs”:1,“entityType”:“sensor”,“config”:[{“property”:“name”,“value”:“PF2”},{“property”:“device_class”,“value”:“sensor”},{“property”:“icon”,“value”:""},{“property”:“unit_of_measurement”,“value”:""}],“state”:“payload[1][0]/1000”,“stateType”:“jsonata”,“attributes”:[],“resend”:true,“outputLocation”:"",“outputLocationType”:“none”,“inputOverride”:“allow”,“outputOnStateChange”:false,“outputPayload”:"$entity().state ? “on”: “off”",“outputPayloadType”:“jsonata”,“x”:450,“y”:260,“wires”:[[]],“info”:“states(‘sensor.PF1’)\npayload[0][0]”},{“id”:“d35beb2e.907118”,“type”:“ha-entity”,“z”:“a97a7f8.e7da98”,“name”:“V2”,“server”:“bc748184.63e6e”,“version”:1,“debugenabled”:false,“outputs”:1,“entityType”:“sensor”,“config”:[{“property”:“name”,“value”:“V2”},{“property”:“device_class”,“value”:“sensor”},{“property”:“icon”,“value”:""},{“property”:“unit_of_measurement”,“value”:“V”}],“state”:“payload[1][1]/100”,“stateType”:“jsonata”,“attributes”:[],“resend”:true,“outputLocation”:"",“outputLocationType”:“none”,“inputOverride”:“allow”,“outputOnStateChange”:false,“outputPayload”:"$entity().state ? “on”: “off”",“outputPayloadType”:“jsonata”,“x”:450,“y”:320,“wires”:[[]],“info”:“states(‘sensor.PF1’)\npayload[0][0]”},{“id”:“5755a6b2.ec0898”,“type”:“ha-entity”,“z”:“a97a7f8.e7da98”,“name”:“C2”,“server”:“bc748184.63e6e”,“version”:1,“debugenabled”:false,“outputs”:1,“entityType”:“sensor”,“config”:[{“property”:“name”,“value”:“C2”},{“property”:“device_class”,“value”:“sensor”},{“property”:“icon”,“value”:""},{“property”:“unit_of_measurement”,“value”:“A”}],“state”:“payload[1][2]/1000”,“stateType”:“jsonata”,“attributes”:[],“resend”:true,“outputLocation”:"",“outputLocationType”:“none”,“inputOverride”:“allow”,“outputOnStateChange”:false,“outputPayload”:"$entity().state ? “on”: “off”",“outputPayloadType”:“jsonata”,“x”:450,“y”:380,“wires”:[[]],“info”:“states(‘sensor.PF1’)\npayload[0][0]”},{“id”:“24fdd142.c2bfbe”,“type”:“ha-entity”,“z”:“a97a7f8.e7da98”,“name”:“P2”,“server”:“bc748184.63e6e”,“version”:1,“debugenabled”:false,“outputs”:1,“entityType”:“sensor”,“config”:[{“property”:“name”,“value”:“P2”},{“property”:“device_class”,“value”:“sensor”},{“property”:“icon”,“value”:""},{“property”:“unit_of_measurement”,“value”:“kW”}],“state”:“payload[1][3]/1000”,“stateType”:“jsonata”,“attributes”:[],“resend”:true,“outputLocation”:"",“outputLocationType”:“none”,“inputOverride”:“allow”,“outputOnStateChange”:false,“outputPayload”:"$entity().state ? “on”: “off”",“outputPayloadType”:“jsonata”,“x”:450,“y”:440,“wires”:[[]],“info”:“states(‘sensor.PF1’)\npayload[0][0]”},{“id”:“b2e2f975.d761d8”,“type”:“ha-entity”,“z”:“a97a7f8.e7da98”,“name”:“PF3”,“server”:“bc748184.63e6e”,“version”:1,“debugenabled”:false,“outputs”:1,“entityType”:“sensor”,“config”:[{“property”:“name”,“value”:“PF3”},{“property”:“device_class”,“value”:“sensor”},{“property”:“icon”,“value”:""},{“property”:“unit_of_measurement”,“value”:""}],“state”:“payload[2][0]/1000”,“stateType”:“jsonata”,“attributes”:[],“resend”:true,“outputLocation”:"",“outputLocationType”:“none”,“inputOverride”:“allow”,“outputOnStateChange”:false,“outputPayload”:"$entity().state ? “on”: “off”",“outputPayloadType”:“jsonata”,“x”:450,“y”:500,“wires”:[[]],“info”:“states(‘sensor.PF1’)\npayload[0][0]”},{“id”:“58def24c.0ed7dc”,“type”:“ha-entity”,“z”:“a97a7f8.e7da98”,“name”:“C3”,“server”:“bc748184.63e6e”,“version”:1,“debugenabled”:false,“outputs”:1,“entityType”:“sensor”,“config”:[{“property”:“name”,“value”:“C3”},{“property”:“device_class”,“value”:“sensor”},{“property”:“icon”,“value”:""},{“property”:“unit_of_measurement”,“value”:“A”}],“state”:“payload[2][2]/1000”,“stateType”:“jsonata”,“attributes”:[],“resend”:true,“outputLocation”:"",“outputLocationType”:“none”,“inputOverride”:“allow”,“outputOnStateChange”:false,“outputPayload”:"$entity().state ? “on”: “off”",“outputPayloadType”:“jsonata”,“x”:450,“y”:620,“wires”:[[]],“info”:“states(‘sensor.PF1’)\npayload[0][0]”},{“id”:“5b259799.8e5bd8”,“type”:“ha-entity”,“z”:“a97a7f8.e7da98”,“name”:“P3”,“server”:“bc748184.63e6e”,“version”:1,“debugenabled”:false,“outputs”:1,“entityType”:“sensor”,“config”:[{“property”:“name”,“value”:“P3”},{“property”:“device_class”,“value”:“sensor”},{“property”:“icon”,“value”:""},{“property”:“unit_of_measurement”,“value”:“kW”}],“state”:“payload[2][3]/1000”,“stateType”:“jsonata”,“attributes”:[],“resend”:true,“outputLocation”:"",“outputLocationType”:“none”,“inputOverride”:“allow”,“outputOnStateChange”:false,“outputPayload”:"$entity().state ? “on”: “off”",“outputPayloadType”:“jsonata”,“x”:450,“y”:680,“wires”:[[]],“info”:“states(‘sensor.PF1’)\npayload[0][0]”},{“id”:“39f45e7f.e6bee2”,“type”:“inject”,“z”:“a97a7f8.e7da98”,“name”:"",“props”:[{“p”:“payload”},{“p”:“topic”,“vt”:“str”}],“repeat”:"",“crontab”:"",“once”:false,“onceDelay”:0.1,“topic”:"",“payload”:"",“payloadType”:“date”,“x”:80,“y”:160,“wires”:[[“c98ff2fc.e1fb7”]]},{“id”:“7054f9fe.1e8b98”,“type”:“ha-entity”,“z”:“a97a7f8.e7da98”,“name”:“V3”,“server”:“bc748184.63e6e”,“version”:1,“debugenabled”:false,“outputs”:1,“entityType”:“sensor”,“config”:[{“property”:“name”,“value”:“V3”},{“property”:“device_class”,“value”:“sensor”},{“property”:“icon”,“value”:""},{“property”:“unit_of_measurement”,“value”:“V”}],“state”:“payload[2][1]/100”,“stateType”:“jsonata”,“attributes”:[],“resend”:true,“outputLocation”:"",“outputLocationType”:“none”,“inputOverride”:“allow”,“outputOnStateChange”:false,“outputPayload”:"$entity().state ? “on”: “off”",“outputPayloadType”:“jsonata”,“x”:450,“y”:560,“wires”:[[]],“info”:“states(‘sensor.PF1’)\npayload[0][0]”},{“id”:“bc748184.63e6e”,“type”:“server”,“name”:“Home Assistant”,“legacy”:false,“addon”:true,“rejectUnauthorizedCerts”:true,“ha_boolean”:“y|yes|true|on|home|open”,“connectionDelay”:true,“cacheJson”:true}]

1 Like

And here is the flow:

and after it updates every 300 sec.

The Sense energy monitor and associated Integration really work well for me. Haven’t tried EyeDro.

with the new energy monitoring you would think this would get priority

Hi Albert, I tried to import this flow without success. I get syntax error "JSON Parse error: Unrecognized token ‘“’ ". Any help is highly appreciated!

Did you edit the http request so it has your eyedro IP address? Like this: http://10.0.3.113:8080/getdata.
Also I created the flow several firmware updates ago. I do not use the Eyedro any more as the data is of by 40% in some case. Shelly EM3 is much better

Thanks, Albert for sharing your NodeRed flow. I had a similar issue and I did update the IP address. Ultimately, I’m still hoping someone who has some coding knowledge would pick this up and create an integration. I watched a few YouTube videos and was able to add some commands to my config.yaml to gather data from the EyeDro. Unfortunately, (due to my lack of coding knowledge) I had to create a statement that caused Home Assistant to poll the EyeDro for voltage, amps, watts and power factor all at once. This caused the EyeDro to crash and stop responding to future calls. The power monitoring still worked, just not the API portion. There is a way to nest or group these commands so that Home Assistant can poll one time and gather all the data - but I couldn’t figure out how to do it. I emailed EyeDro about a year ago and requested that their developers create an integration and they seemed interested, but nothing ever happened. It is a shame because they seem to have a good product. I’m sure many others would be interested if they would add the integration. Maybe Lexx could pay them a personal visit since he lives in the same town!

I have this working as a REST sensor, I had to rip the values out of a string, since they are not JSON.

Remaining Issue:
HA won’t allow state_class: on a template sensor so I am stuck now, not able to utilize the built in energy functionality.

Its polled so not 100% accurate with the integral tool. I’m keeping an eye on it for a while.

I’ve also gotten it working using a RESTful sensor; I didn’t have to use any template sensors once I fiddled around with the JSON attributes path and value templates a bunch (fwiw, HA’s logging of this is pretty annoyingly bad :sweat_smile:).

Also worth mentioning: I was extremely impressed with Eyedro’s support; I had a bunch of pre-sales questions they were quick to answer (e.g.: note that the non-wifi version doesn’t have the local API), and they even swapped out the stock 200A CT clamps for 100A ones for me (to give me better accuracy as I only have 100A hydro service anyway).

You can apparently add the Integration - Riemann sum integral via GUI, but I chose to do it in the YAML (see the sensor: block below). Although I just got it working now and as a result don’t have enough data for the HA Energy charts to display, the total energy sensor does show up in the HA Energy sensor list, huzza!

sensor:
  - platform: integration
    source: sensor.eyedro_total_power
    name: "Eyedro total energy"
    unique_id: eyedro_total_energy
    round: 2

rest:
  - resource: http://[your eyedro's IP or hostname]:8080/getdata
    scan_interval: 10
    sensor:
      - name: "Eyedro total power"
        unique_id: eyedro_total_power
        json_attributes_path: "$.response"
        value_template: "{{ (value_json['data'][0][3] + value_json['data'][1][3])/1000 }}"
        unit_of_measurement: "kW"
        device_class: power
        state_class: measurement
      - name: "Eyedro total current"
        unique_id: eyedro_total_current
        json_attributes_path: "$.response"
        value_template: "{{ (value_json['data'][0][2] + value_json['data'][1][2])/1000 }}"
        unit_of_measurement: "A"
        device_class: current
        state_class: measurement
      - name: "Eyedro average voltage"
        unique_id: eyedro_average_voltage
        json_attributes_path: "$.response"
        value_template: "{{ (value_json['data'][0][1] + value_json['data'][1][1])/200 }}" #reported in tens of milivolts, but we want the average, so /2 /100 = /200
        unit_of_measurement: "V"
        device_class: voltage
        state_class: measurement
      - name: "Eyedro average power factor"
        unique_id: eyedro_average_pf
        json_attributes_path: "$.response"
        value_template: "{{ (value_json['data'][0][0] + value_json['data'][1][0])/20 }}" #reported in tenths of a percent, but we want the average, so /2 /10 = /20
        unit_of_measurement: "%"
        device_class: power_factor
        state_class: measurement

Edit: for those of us in Ontario, there is a HACS integration for the Ontario Energy Board that can give you your ToU rates for use in the HA Energy dashboard.

Edit 2: fixed YAML typo, value_json['data'][0][1]value_json['data'][1][0] and /200 to /20 for the power factor value template.

Edit 3: fixed typo in Eydro total energyEyedro total energy. Now entity searches don’t drive you crazy :sweat_smile:

3 Likes

Thank you very much @_k_w , this REST sensor works perfectly for me. Great work!

Hello, I have two eyedro’s in my house and am unable to make this REST coding work for both devices, it does work for only one at a time. If I repeat the code for the second device, I get duplicate key errors. I am new at this, could someone help me resolve this issue?

Thank you

When you duplicate the code, are you adding a “2” or something at the end of the name and unique ID in the 2nd set of code?