Moving existing installation to new native RFM69 format?

Ok so I have a EmonPi running successfully since 2015, with EmonTX3 sending data as well.

I have read the posts from Robert on the new format, and it seems that it will allow the EmonPi to do CM like the EmonTX3?

Is it as simple as flashing the EmonPi and the EmonTX over to the new RFM69 format so they can all talk to each other - is this now the default going forward?

I am adding an EmonTX4 this morning, but its USB connected to the Pi and I ordered with the legacy FW anyway on it - so does not really affect the main topic of the EmonPi and EmonTX3 moving to new radio format.

Stability is more important to me than the EmonPi doing CM, so if its more robust to leave it alone I will just retain the old format radio. If there are advantages to making the change I can switch over while I am doing changes.

Thanks for any pointers/tips from those that have made the change.

As the release post says, if you don’t want CM on your emonPi, there’s no need to change. If you do, then you must use the native message format because this allows almost all of the radio reception processing to be done inside the RFM69CW. Running emonLibCM on an emonPi with JeelIb ‘Classic’ resulted in about 15 - 20% (from memory) success rate for data from a single emonTx.

Do you really think I’d have released the software if it didn’t work???

Hi Robert, not questioning in anyway if it works or the quality of the implementation!

I read some posts that say after reboot the FW is reset to the old version etc - but of course I am trying to absorb a few years of changes and things change over time - I guess phrased better if I write the new library format to the EmonPi and change my EmonTX’s over is this bleeding edge or now “standard”?

CM on the EmonPi would be favourable, as it has the house CU and the solar on it at present.

Hello Paul, just a note to say that there are 3 formats, in order of date of firmware release:

  1. JeeLib Classic (shipped as standard on all our units up to November this year)
  2. JeeLib Native (thanks to Robert Wall, developed to enable continuous monitoring on the emonPi)
  3. LowPowerLabs (latest available with the emonTx4, adopted to make use of acknowledgment and retry mechanism).

Robert posted a useful comparison of these here: Emon Tx V4 and 433MHz Radio Formats
and there’s more on them in the docs too: Technical Guide — OpenEnergyMonitor 0.0.1 documentation

JeeLib Native and LowPowerLabs are very similar in that they use the RFM69 native functionality - but they are not compatible due to different settings. I will be releasing emonPi and emonTx3 firmware that works with the LowPowerLabs format soon, so I might advise waiting for that.

Ok thanks, that helps!

So I have classic on my vintage emonpi, Robert’s CM firmware is with Jeelib native? And the Lowpowerlabs is just for emontx4 at present and new hw, I would not want to run that yet as there is no emontx3 fw for that radio format, I think I got it now.

I will leave my EmonPi alone, I ordered my EmonTx4 from the shop with the legacy fw so it’s reporting OK to the emonpi over radio (although I will direct usb it to power the emontx4).

1 Like

Hi Trystan, is there already a LPL version for the emonPi to test? I’m just setting up my system completely new after moving to a new location, so it would be nice to be able to switch everything to LowPowerLabs right away…

This (LPL) is a very interesting development and very welcome.
LPL has an established ecosystem and this allows integration of it with emon*, particularly as mentioned moteino, but also STM32 (although in fairness STM32 with RFM69 native was quite an easy port already as OEM & JCW already did the groundwork).

Will you also revise firmware for the older OEM devices (TH, GLCD - happy to help with that one) ?
Will the emonpi firmware LPL version be based on Robert’s CM firmware ?

The only downside of this for me is I have a bunch of RFM12B based devices which can’t run LPL, but could do RFM69 native, so I guess I’ll have to ‘bridge’ (should be easy enough with a USB jee node).

I’ll also be interested to know does this change at all the serial protocol (historically based on JCW RFDemo )?

No further work will be done by me on the RFM69 ‘native’ library. It was developed specifically to allow continuous monitoring on the emonPi (the “emonPiCM”) and sketches for all the previous emonTx and emonTH variants, including notes for converting the emonGLCD sketches, were produced. However, it was never formally adopted and the sudden appearance of LPL instead was a complete surprise.

@alandpearson - you are correct about the RFM12B devices and the LPL library, but it’s probably not correct to assume that this means the RFM12B cannot transmit a radio packet conforming to the LPL data format; but I think it is probably true to say that it’s not feasible to modify or rewrite JeeLib to receive the LPL data format.

See the emonPiCM release documentation in this forum for more details, which might be helpful, because it will obviously be much more economical and much more efficient to transmit in the appropriate format, rather than adding a relay in the signal chain.

I think it would be a comparatively trivial exercise to convert the code for transmitting from the RFM12B in RFM69 ‘native’ format to the LPL format, data rate and frequency. Encryption would be possible - it’s included in the JeeLabs documentation - but subject to processor load and memory availability. But I shall not be embarking on that exercise.

Thanks Robert, interesting points.
As soon as I saw the work done to move to RFM69 native, I made the switch on my ecosystem (around 10 RFM12B and 7 or 8 OEM RFM69 devices). As you know I also made GLCD work again with the latest PHP code in emonhub. The switch was a no-brainer due to the better behaviour of the RFM69 devices in native mode (an end to going deaf for example & the re-init every 60 secs in some cases), and a parallel project I had going with STM32 & RFM69 made all of it align nicely. So I’m fairly wed to RFM69 jeelib.

You make a great point. Both RFM69 native (Jeelib packet format) and Low Power Labs operate the RFM69 in it’s native mode, it is simply the packet format that is different. Your original analysis went into great detail on it on the thread where you released CM.

For me, I’ve got 3 choices for my non-OEM devices (sadly the majority - Roller Blind controllers on nearly every window with RFm12 Jeenodes)

  1. The relay approach. I think this is the easiet. I’ve already got a minimal emonhub only install on a piW for a heatmeter. Plug a JeenodeUSB in it and it can receive the RF12’s ‘RFM69 native’ packets and push them via MQTT into emonpi / openhab. Heck, thinking about it, they don’t need to go near emoncms at all anymore, that was just a side affect of receiving them on emonpi to get them exposed via MQTT.

  2. There was back in the day a LPL implementation for RFM12. I might look at that. I may also be brave/stupid enough to see how hard it would be to change the packet format in JeeLib RF69m to match LPL, but I doubt I have the patience/skills/time.

  3. Desolder all the RFM12Bs and replace with RFM69s… not likely

I can’t recall ever seeing that.


As I wrote above, inside RFM69nTxLib.cpp are two quite separate sections - one for the '69 and one for the '12B. It’s just a matter of swapping a few bytes around for the format change and checking/changing a few bytes in the set-up for the data rate etc. The hardest part would be finding what the values you need are inside LPL - and there the '69 section will help, having all the register numbers to look for.

I’ve thought about that. I considered making a ‘U’ shaped soldering iron bit about 15 mm wide and spanning something like 15 mm to desolder all 14 joints at the same time. Then I quickly gave up on the idea.

Robin Emley’s Mk2 PV Router is the best for that - he set his pads very wide apart and uses jumper wires to reach to the RFM. Dead easy to desolder one at a time.

Full disclosure, I did not look at it to see if it is compatible with RFM69 LPL.

That explains it. I gave up trying to understand Github. I won’t live long enough to learn.

I’m going to be honest here, I have completely lost track of the different RFM combinations against the different hardware.

I have a feeling there was a table @TrystanLea did for it, but I can’t find it.

Could a table be done that lists the OEM HW, the Firmware Options, and the recommended Firmware?

I’m sure I am not the only one for whom this is a completely opaque subject!


The table was made on 19/12/2022 so it may not be completely up to date now


Lighting up this topic again.

I’d also take a look at radiohead, which seems to be even better than LPL, and works across a much broader range of systems and hardware.
It has many of the key features (retries etc) and may prove to be more reliable than LPL implementation, which doesn’t seem to have been actively developed in the past few years, and limited to RFM69 as far as I can see.

While it may be frustrating to even think about changing mid-stream to yet another protocol format, a serious look at radiohead is merited. It is simple, small, highly portable and built for this purpose. It seems to be much very well architected and has been about since 2014, while still actively developed.

Go on, take a look.

Heck, it even works with motedino, stm32, esp8266 and pi Pico - no porting required.