Efergy e2 power meter

  • Hi,
    I just published on github (https://github.com/gtortone/MySensors-Efergy-e2) my last work about integration of Efergy e2 power meter with MySensors. The Efergy e2 electricity monitor (http://efergy.com/it/products/electricity-monitors/e2-classic) provides a sensor that wirelessly sends information about the amount of electricity you are using to the display monitor. The monitor converts this into kilowatt-hours.

    This sketch use a JeeNode v5 (http://jeelabs.net/projects/hardware/wiki/JeeNode) equipped with 433/868 MHz RFM12B module (www.hoperf.com/upload/rf/RFM12B.pdf) configured in OOK mode to capture wireless data (on pin D3) and forward it through NRF24L01+ with MySensors library.

    Comments and suggestions are very welcome !


    p.s. photos will be published soon !

  • Hero Member

    @gtortone very nice! I think I have one of these efergy e2s collecting dust. I would love to get more info on how you connected the RFM12B and where you purchased it from so I can get the correct type.

  • 0_1479895314189_Efergy-ook.jpg
    Photo #1: Efergy E2 OOK signal decoded by Zeroplus logic analyzer

    Photo #2: JeeNode module with RFM12B radio module

    Photo #3: NRF24L01+ JeeNode shield pluggable on SPI header of JeeNode

    Photo #4: Final result !

    Photo #5: Detail of RFM12B Data pin routed to D3 in order to perform software OOK decoding

    Photo #6: Efergy power meter display shows same value of software !

    Photo #7: First data gathered by Home Assistant (https://home-assistant.io) on Raspberry PI 3

    Some notes:

    1. I'm using a RFM12B radio module tuned for 868Mhz equipped with 433 MHz antenna... but everything goes fine due to RFM12B has frequency tuning

    2. I plan to do another setup using a simple 433 Mhz receiver or other Hoperf 433 Mhz receiver module (RFM12B are obsoleted modules)

  • @korttoma said:

    @gtortone very nice! I think I have one of these efergy e2s collecting dust. I would love to get more info on how you connected the RFM12B and where you purchased it from so I can get the correct type.

    Hi, as you can see in photos I just posted, you need to connect DATA pin of RFM12B to a digital input of Atmega328P (it must be a pin suitable for interrupt).

    RFM12B modules are not longer available... I have some of these (old) modules (all of them tuned for 868 Mhz) but I will do some tests with a cheap 433 MHz receiver (like this one: http://bit.ly/2gl6yXJ) or with a recent Hoperf transceiver modules (RFM69)


  • Hero Member

    @gtortone maybe we could even use one of these RXB6 433Mhz Superheterodyne Wireless Receiver Modules I used one for another project.

  • Hero Member

    Hi again @gtortone

    I finally found my efergy device from the bottom of a drawer.
    It says Model No: TX (ENGAGE HUB) on the back of the transmitter.
    And HK-1.0-UK on the ethernet hub device .

    I tried some libraries with my cheep 433MHz receiver module but I do not get anything.
    I guess I will have to wait for the RFM12b to get here and try your code and hope it works.

    Unless you have some idea how to use one of these cheep receivers? Or know about some good Library to sniff the code?

  • Hi @korttoma,

    I did not tested cheap 433 MHz modules yet... I will receive a couple of them next week !
    anywai RFM12b is a great module that has interesting features like frequency tuning and adjustable gain...

    If I will have updates on cheap modules I will update this thread !

  • Hero Member

    I have now received the RFM12b module, unfortunately I will not have time to set it up for the next 2 weeks but until then.
    Could you clarify how I need to wire it?
    Is it really enough to have RFM12B Data pin routed to D3?
    Do I need to somehow reprogram it using ISP to work in OOK mode?

    Did you have a chance to try any cheep 433MHz receiver yet?

  • @korttoma

    you need to connect RFM12b module to Arduino following this schematic (you can avoid to connect IRQ line...)


    after this cabling you need to connect RFM12b DATA pin to Arduino D3 pin (you can select a different pin but modify
    code accordingly...)

    only after this you can use the Mysensors-Efergy-e2 sketch (https://github.com/gtortone/MySensors-Efergy-e2) to get
    RF data;

    I tested my code with cheap RF modules (I received them some days ago) but the performance of these modules are very
    poor... I will try to do other work on cheap RF modules in the future...

    Thanks !

  • Hero Member

    @gtortone thanks for the clarification on the wiring of the RFM12b.

    In what way was the performance of cheap RF radio poor? Is the range just bad or does it miss transmissions? The first cheap radios I got also had poor reception, this is why I upgraded to the RXB6 from my earlier post. Can you share the code you used with the cheap RF radios maybe my RXB6 module performs better?

  • @korttoma

    Hi, I have these modules:

    the range is only few centimeters... I will try to do some antenna tuning but I don't expect any significative improvement.

    If you want to try with your RXB6 module the code is always the same, you have only to remove the configuration code lines related to RFM12b configuration;

  • Hero Member

    @gtortone that is the same useless junk I got from e-bay at first, range is terrible.

    This gives me some hope to get this working with the RXB6. I will test this as son as I can (might be a few weeks until I can).

  • Hero Member

    Hi @gtortone ,
    I finally found some time to hock up the RFM12B. Seems to be almost working. I just get the value "inf" for current. Do I have some datatype problem or maybe it should be calculated differently my Efergy engage hub?
    I'm using a Arduino Pro Mini 3.3V

    Attached the serial print.0_1484211281663_efergyLog.txt

    I should see values around 100W most of the time and some smaller down to 30W.

    Edit: It seems like it might be payload[6] that is equal to 255 at 100W and 254 at under 40W that is causing problems with the calculation.

    Edit2: Took 3 samples at around 30W, 60W and 100W. 0_1484220204136_efergyLog2.txt I need to find something so that I could test higher values to so I could figure out the formula to use.

  • Hi @korttoma,
    happy to read that you are getting "reasonable" values from RFM12B !!

    but I agree that in your case the decoding protocol needs some refinements...
    just a question: your line voltage is 110 or 240 ?

    take into account that from Efergy current sensor you get the value of "current" and
    not "power" than for 30W expected value from data is (V/30) [Ampere]...

  • Hi @korttoma,
    take a look to this decoding based on your collected data for 30W, 60W and 100W;

    everything seems to be ok !!


    p.s. I checked in your profile that you live in Finland and power voltage is 220/240 V 🙂

    • bytes #1: 0x09 fixed value
    • bytes #2: 0X50 fixed value
    • bytes #3: 0x2E fixed value
    • bytes #4: 0x40 fixed value
    • bytes #5: current MSB
    • bytes #6: current LSB
    • bytes #7: exponent
    • bytes #8: CRC
    • current detected = ((MSB << 😎 + LSB / 65535) / pow(2, (255-exponent))

    30 W = 0.13 A (@220V)

    9 - 0x09
    80 - 0x50
    46 - 0x2E
    64 - 0x40

    71 - 0x47
    172 - 0xAC
    254 - 0xFE
    184 - 0xB8

    0x47AC = 18348

    current = 18348 / 65535 / pow(2, 1) = 0.139 A

    60 W = 0.26 A (@220V)

    9 - 0x09
    80 - 0x50
    46 - 0x2E
    64 - 0x40

    69 - 0x45
    29 - 0x1D
    255 - 0xFF
    40 - 0x28

    0x451D = 17693

    current = 17693 / 65535 / pow(2, 0) = 0.269 A

    100 W = 0.45 A (@220V)

    9 - 0x09
    80 - 0x50
    46 - 0x2E
    64 - 0x40

    112 - 0x70
    163 - 0xA3
    255 - 0xFF
    217 - 0xD9

    0x70A3 = 28835 (10)

    current = 28835 / 65535 / pow(2, 0) = 0.439 A

  • Hero Member

    Thanks @gtortone your formula seems to work. I just need to find a way to test higher values.

    I almost had the same formula but I did not have the "65535". Could you explain where you got this value from?

    -- S --
    -- E --
    abc_value = 19660current = 0.15A - power = 34.50 W
    23701 TSF:MSG:SEND,9-9-0-0,s=9,c=1,t=17,pt=2,l=2,sg=0,ft=0,st=OK:34
    OK = 4 - short pk = 0 - long pk = 0 - crc bad = 0
    -- S --
    -- E --
    abc_value = 18349current = 0.28A - power = 64.40 W
    29693 TSF:MSG:SEND,9-9-0-0,s=9,c=1,t=17,pt=2,l=2,sg=0,ft=0,st=OK:64
    OK = 5 - short pk = 0 - long pk = 0 - crc bad = 0
    -- S --
    -- E --
    abc_value = 29491current = 0.45A - power = 103.50 W
    35688 TSF:MSG:SEND,9-9-0-0,s=9,c=1,t=17,pt=2,l=2,sg=0,ft=0,st=OK:103
    OK = 6 - short pk = 0 - long pk = 0 - crc bad = 0

  • Hi @korttoma,

    the value 65535 or 32768 often is used as multiplier from sensor that send metric;
    usually when you have to send a "small" float value (temperature, current) you can send it as integer
    multiplied by a big constant instead of sending it with a float value converted in binary...

    I just refined my formula with this that is more close to formula I found for my Efergy using a small

    current = 18348 / 32768 / pow(2, 255-254 + 1) = 0.139 A
    current = 17693 / 32768 / pow(2, 255-255 + 1) = 0.269 A
    current = 28835 / 32768 / pow(2, 255-255 + 1) = 0.439 A

  • Hero Member

    Hi @gtortone I'm working on finalizing this node and I'm having some trouble with stability. The node stays alive from a few minutes to 30min and then stops communicating.

    What kind of decoupling capacitors are you using in your setup?
    I now have 2 pc 0.1uF, 2 pc 47uF and one 0.33uF.

    I use a HLK-PM03, a Pro Mini 3.3, and the NRF24L01+

    Debugging output don't give me much to go in since it just stops responding.

  • @korttoma

    at the moment I'm defining some things in order to use RFM69 modules...
    in the past, on my NRF24L01+ I was using 10 uF capacitor but I had same problems of "stop responding"...

  • Hero Member

    @gtortone My node has now been running for more then 40min since I added the 0.1uF and 0.33uF tantalum caps. I'm hoping this will be the solution for me since I have no tools to debug any disturbance like this.

    EDIT: It failed again 😞

  • Hero Member

    Tried exchanging the NRF24L01+ with an RFM69 but it does not seem to work at all with this setup. Might be because the RFM69 is using the same frequency as the RFM12B or maybe I can not have the 2 in the same node because they are related.

  • Hero Member

    @gtortone did you have any chance to look at the "stop responding" issue of this device?

    I tried to add some more debug prints to your code today but if I add them to the wrong places the efergy receive function stops working and receives only 0 value. I guess it messes with the timing.

  • @korttoma Hi, I just returned to play with Efergy and Arduino. I realized that debug messages on UART reset the micro. Now I'm skipping (with a #define DEBUG and #ifdef) all debug messages and it seems to work fine. But take into account that now I'm not using any radio module... just to test the firmware.

  • Hero Member

    😄 What a coincidence. I returned to this project today also. Now trying to set this up as an Ethernet GW with local sensor without NRF radio. I still have to share the SPI bus with the Ethernet module though. I'll let you know how it goes.

    I think I did try removing the serial prints earlier but I'm not sure..

  • Hero Member

    The ethernet GW approach performs even worse than your original solution. I get one or 2 measurements and then nothing. Still responds to ping but no communication with the controller.
    I don't know how to debug this since it just stops working. Is there by any chance anything in the code that consumes memory?

  • Hi All,

    First of all, great work man!

    I was wondering do you know if we need to have established link between the wireless sensor and the receiver?

    I only have the wireless sensor so I was wondering if I can use this without the receiver?

    Any thoughts?

  • Hero Member

    @ailiev it "works" without the receiver but for me the node fails after about 1h so I gave up. I could try again now with the new MySensors 2.2.0 lib to see if it makes any difference (when I find some time).

  • Hi,

    I have been trying to receive the efergy signal using RFM69 and so far it's a dead end. I'm unable to receive any data on the RFM69 module.

    Since you guys talked about RFM69 module here, I thought you might have some insight to share.

  • Mod

    @shifaz I think you need the RFM12B to receive the data you want

  • @gtortone

    Any chance that I can see how you wired up the NRF24L01+? I bought the parts back in January 2017 and just found it in a drawer this evening. I assembled everything but the NRF24L01+ and I am a bit stuck right now.

    BTW: Great build - I really hope that I will get mine up and running 🙂


  • Banned

    Since you guys talked about RFM69 module here, I thought you might have some insight to share. (spam links removed by moderator)

  • @korttoma
    I resume an old topic: i'm trying to receive data from Energy2 whith arduino connected to an RXB6. I can't receive any data, and i don't know how to substitute the code block related to RF12 with a correct one for my receiver. Can someone help me? Thanks in advance, Mauro

  • Long story short, try 433.55 MHz

    I tried for years to received my Chacon Ecowatt 800 (a rebranded Efergy 2 classic) data. I knew the frequency wasn't 433.92 MHz.
    I lastly opened transmitter case to find which RF chip was used ... but I didn't get any datasheet for the "A71C03AUF" I found 😞

    On last resort, I sought a signal on all "433.92MHz" ISM band (433.05~434.79 MHz, with sdr-sharp). I did find something centered on 433.51 (433.47 and 433.56, FSK?) MHz.
    As for Somfy stuff (which uses 433.42 MHz), many generic receiver can't work with those *special" 433MHz frequencies.

    In the end, I tested this new frequency using rtl-433 and guess what, there's a working Efergy module ! Moreover, I did not make a great discover, 433.55MHz is well precised in the "efergy_e2_classic.c" module comments...

    RFM69 or NRF24L01 may be frequency ajustable!

Log in to reply

Suggested Topics