Emon Tx V4 and 433MHz Radio Formats

A follow on question (sorry!) - will the future LowPowerLabs firmware for the original emonPi include continuous monitoring (emonLibCM) or the original default Discrete Sampling library?

If I’m involved - whatever update is needed for the ‘old’ emonPi, it won’t happen for a while. I’m far too busy with the emonTx V4 and it’s likely to remain like that for the foreseeable future. You can always use the emonPiCM set of software, which is available for the entire “emon” range (emonTx V2, V3.2, V3.4 but excluding the emonTx V4 and the long-obsolete emonGLCD and NanodeRF), and uses the rfm69nTxLib for transmitting and the (patched) RF69 library in the emonPi for receiving.

Yes it’s my intention to use adapt Roberts emonPiCM firmware to use the LowPowerLabs format. The changes are relatively small and for now @Robert.Wall I don’t plan to add anything relating to this to your work load :slight_smile:

I’m a bit delayed on this work though @rupert as I’m trying a finish a couple of emonTx4 documentation related updates, I might have been optimistic on timelines…

Thanks @Robert.Wall, @TrystanLea for the updates. I can understand that you’re both very busy at the moment and don’t have time to work on the ‘old’ emonPi. I’m very grateful for all the current work that you’re both doing. I was just interested in what the plan for the future was.

1 Like

It is high up on my priority list, so hopefully sooner than later!

For information, I have tried, to the best of my knowledge, to put together a table of device vs radio format which may be of interest. My apologies in advance for any errors! The table is a snapshot in time, as things will probably change in the future.

I have included the Mk2 PV Router by @calypso_rae as it is a very popular device.

Any corrections or comments are welcome.

1 Like

Thanks Rupert that’s a useful table will help me make sure I tick them off!

If you could send the table to me in an editable format (anything is fine), I’ll create a docs page for it.

Cheers

[edit]
Can you include the RFM12 as well please?

Note 5 is not accurate, the Mk2 PV router (English version) has always been supplied with an RFM12B
But there’s no reason why it cannot adopt the ‘Native’ format with an RFM69CW if desired.

I can’t comment about the French version.

Well I can only say that my recent Mk2 PV router (English version) kit came with an RFM69CW …

What I meant in the table was that the Mk2 PV router kit needed to include the RF hardware option and that the appropriate firmware was used.

I don’t know if or when Robin changed from supplying the RFM12B to the RFM69CW. His parts list includes both the RFM12B and the RFM69CW.

I believe there are some discussions at The emonPiCM - #42 by alandpearson on RFM12B vs RFM69CW. I don’t know if this helps.

@borpin message sent

There is also some information on how to to simultaneously receive (and perhaps transmit?) two (or more?) 433MHz Radio Formats at once on an emonBase, using two (or more?) receivers/transmitters…

1 Like

Having looked, I wouldn’t call it “simultaneous”. There are two parallel receivers, not one receiver switching between formats or receiving either format and correctly recognising and decoding it. I know it’s moot, but it could be misleading without a careful explanation.

Yes, I have been able to transmit as well. I used Node-RED to write commands to the serial port (i.e. /dev/ttyUSB0). I used commands recognized by the JeeLib Classic emonBase firmware (i.e. “1,1,18,16s”).

Here is the flow I used.

[{"id":"50369e7e.134d48","type":"tab","label":"RFM69Pi","disabled":false,"info":""},{"id":"6ebfa729.fcc488","type":"change","z":"50369e7e.134d48","name":"Set to Node 14","rules":[{"t":"set","p":"payload","pt":"msg","to":"14i","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":400,"y":300,"wires":[["27ce8704.60cb9"]]},{"id":"4359f4b5.c93904","type":"inject","z":"50369e7e.134d48","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":180,"y":220,"wires":[["a09016aa.10e5d"]]},{"id":"c4364baf.85c9a8","type":"debug","z":"50369e7e.134d48","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":890,"y":260,"wires":[]},{"id":"27ce8704.60cb9","type":"serial request","z":"50369e7e.134d48","name":"","serial":"e62ea184.4fae68","x":680,"y":260,"wires":[["c4364baf.85c9a8"]]},{"id":"3b31404f.b1383","type":"change","z":"50369e7e.134d48","name":"Send Test","rules":[{"t":"set","p":"payload","pt":"msg","to":"t","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":380,"y":260,"wires":[["27ce8704.60cb9"]]},{"id":"a09016aa.10e5d","type":"change","z":"50369e7e.134d48","name":"Send 10 to Node 16","rules":[{"t":"set","p":"payload","pt":"msg","to":"1,1,18,16s","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":420,"y":220,"wires":[["27ce8704.60cb9"]]},{"id":"41b71f4e.a5d8b8","type":"inject","z":"50369e7e.134d48","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":180,"y":300,"wires":[["6ebfa729.fcc488"]]},{"id":"5f4729d8.c27b8","type":"inject","z":"50369e7e.134d48","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":180,"y":260,"wires":[["3b31404f.b1383"]]},{"id":"c357fbf7.11986","type":"change","z":"50369e7e.134d48","name":"Set to Node 15","rules":[{"t":"set","p":"payload","pt":"msg","to":"15i","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":400,"y":340,"wires":[["27ce8704.60cb9"]]},{"id":"f7febe5f.2b97","type":"inject","z":"50369e7e.134d48","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":180,"y":340,"wires":[["c357fbf7.11986"]]},{"id":"38b808fd.5ad8d","type":"change","z":"50369e7e.134d48","name":"Send Group to 212","rules":[{"t":"set","p":"payload","pt":"msg","to":"212g","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":410,"y":180,"wires":[["27ce8704.60cb9"]]},{"id":"570230d2.c23818","type":"inject","z":"50369e7e.134d48","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":180,"y":180,"wires":[["38b808fd.5ad8d"]]},{"id":"9ae421d2.eaf73","type":"change","z":"50369e7e.134d48","name":"Change to Group 210 (OEM)","rules":[{"t":"set","p":"payload","pt":"msg","to":"210g","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":440,"y":140,"wires":[["27ce8704.60cb9"]]},{"id":"7a3f2102.553c78","type":"inject","z":"50369e7e.134d48","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":180,"y":140,"wires":[["9ae421d2.eaf73"]]},{"id":"ed57d65a.94645","type":"change","z":"50369e7e.134d48","name":"Get version","rules":[{"t":"set","p":"payload","pt":"msg","to":"v","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":390,"y":380,"wires":[["27ce8704.60cb9"]]},{"id":"64e2185c.62c77","type":"inject","z":"50369e7e.134d48","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":180,"y":380,"wires":[["ed57d65a.94645"]]},{"id":"f822bf42.42901","type":"comment","z":"50369e7e.134d48","name":"Testing and Learning About the RFM69Pi Connected to this emonBase","info":"","x":350,"y":60,"wires":[]},{"id":"cb6e5e28.f92878","type":"debug","z":"50369e7e.134d48","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":1170,"y":400,"wires":[]},{"id":"56fc52b6.622a04","type":"function","z":"50369e7e.134d48","name":"Convert to Binary, Highbit, Lowbit","func":"var number = msg.payload;\n\nmsg.payload = (number >>> 0).toString(2).padStart(16, '0');\nmsg.lowbit = msg.payload.substring(1, 8).padStart(8, '0');\nmsg.highbit = msg.payload.substring(9,16).padStart(8, '0');\nreturn msg;","outputs":1,"noerr":0,"x":740,"y":500,"wires":[["cb6e5e28.f92878","e3f8c806.066e3","4ef8b828.a2168","6d30b09c.ad087","29c53869.ab34e","28470d81.da2a2a"]]},{"id":"df123418.830c28","type":"change","z":"50369e7e.134d48","name":"Enter A Number in This Node","rules":[{"t":"set","p":"payload","pt":"msg","to":"374","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":400,"y":500,"wires":[["56fc52b6.622a04"]]},{"id":"e3f8c806.066e3","type":"debug","z":"50369e7e.134d48","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"lowbit","targetType":"msg","x":1170,"y":480,"wires":[]},{"id":"4ef8b828.a2168","type":"debug","z":"50369e7e.134d48","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"highbit","targetType":"msg","x":1170,"y":440,"wires":[]},{"id":"6d30b09c.ad087","type":"function","z":"50369e7e.134d48","name":"Convert High Bit, Low Bit to Original Number","func":"var binary = msg.lowbit + msg.highbit;\nmsg.payload = parseInt(binary, 2);\n\nreturn msg;","outputs":1,"noerr":0,"x":1270,"y":540,"wires":[["4e118804.c8d8a8"]]},{"id":"29c53869.ab34e","type":"function","z":"50369e7e.134d48","name":"Convert High Bit to Number","func":"var binary = msg.highbit;\nmsg.payload = parseInt(binary, 2);\n\nreturn msg;","outputs":1,"noerr":0,"x":1220,"y":580,"wires":[["9d174a53.373a2"]]},{"id":"28470d81.da2a2a","type":"function","z":"50369e7e.134d48","name":"Convert Low Bit to Number","func":"var binary = msg.lowbit;\nmsg.payload = parseInt(binary, 2);\n\nreturn msg;","outputs":1,"noerr":0,"x":1220,"y":620,"wires":[["b30a7d1b.55ff1"]]},{"id":"7f036d79.a28afc","type":"inject","z":"50369e7e.134d48","name":"","repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":180,"y":500,"wires":[["df123418.830c28"]]},{"id":"4e118804.c8d8a8","type":"debug","z":"50369e7e.134d48","name":"Return the Number","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":1550,"y":540,"wires":[]},{"id":"9d174a53.373a2","type":"debug","z":"50369e7e.134d48","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":1450,"y":580,"wires":[]},{"id":"b30a7d1b.55ff1","type":"debug","z":"50369e7e.134d48","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":1450,"y":620,"wires":[]},{"id":"76fe44491baf34b0","type":"comment","z":"50369e7e.134d48","name":"Testing and Learning the Binary Representation of Data","info":"","x":300,"y":440,"wires":[]},{"id":"e62ea184.4fae68","type":"serial-port","serialport":"/dev/ttyUSB0","serialbaud":"38400","databits":"8","parity":"none","stopbits":"1","waitfor":"","dtr":"none","rts":"none","cts":"none","dsr":"none","newline":"\\n","bin":"false","out":"char","addchar":"","responsetimeout":"10000"}]

Yes. I have tested using more than two transcievers and it works. Those that do so might want to look at this post by @Bill.Thomson, which describes how to keep the USB devices at predictable serial device names. How to match a ttyUSBX device to a USB Serial device

I would also recommend being more explicit about the node IDs, especially if you plan to use outbound messages. Here is what that looks like in my setup with an RFM69Pi and two Moteino USBs.

[interfacers]
### This interfacer manages the RFM12Pi/RFM69Pi/emonPi module
[[RFM2Pi]]
    Type = EmonHubJeeInterfacer
    [[[init_settings]]]
        com_port = /dev/ttyAMA0
        com_baud = 38400                        # 9600 for old RFM12Pi
    [[[runtimesettings]]]
        pubchannels = ToEmonCMS,
        subchannels = ToRFM12,

        group = 210
        frequency = 433
        baseid = 15                              # emonPi / emonBase nodeID
        quiet = true                            # Report incomplete RF packets (no implemented on emonPi)
        calibration = 230V                      # (UK/EU: 230V, US: 110V)
        #interval =  10                         # Interval to transmit time to emonGLCD (seconds)

### This interfacer manages a Moteino USB
[[MoteinoUSB0]]
     Type = EmonHubJeeInterfacer
      [[[init_settings]]]
           com_port = /dev/ttyUSB0
           com_baud = 38400
      [[[runtimesettings]]]
           pubchannels = ToEmonCMS,
           subchannels = ToRFM12,
        group = 210
        frequency = 433
        baseid = 14                              # emonPi / emonBase nodeID
        quiet = true                            # Report incomplete RF packets (no implemented on emonPi)
        calibration = 230V                      # (UK/EU: 230V, US: 110V)
        #interval =  10                         # Interval to transmit time to emonGLCD (seconds)

### This interfacer manages a Moteino USB
[[MoteinoUSB1]]
     Type = EmonHubJeeInterfacer
      [[[init_settings]]]
           com_port = /dev/ttyUSB1 
           com_baud = 38400
      [[[runtimesettings]]]
           pubchannels = ToEmonCMS,
           subchannels = ToRFM12,

        group = 210
        frequency = 433
        baseid = 16                              # emonPi / emonBase nodeID
        quiet = true                            # Report incomplete RF packets (no implemented on emonPi)
        calibration = 230V                      # (UK/EU: 230V, US: 110V)
        #interval =  10                         # Interval to transmit time to emonGLCD (seconds)

“In Parallel” is better than “Simultaneously”. I agree. Can the title of my original post be updated?

1 Like

@brandock
Thanks for the update.

OK?

2 Likes

Perfect. Thanks!

Brandon

I’ve created a PR (Added a 433 Format v device table by borpin · Pull Request #41 · openenergymonitor/learn · GitHub) with this - here is the page itself as it standsbefore it is checked/corrected/merged :slight_smile: learn/view/electricity-monitoring/networking/433-format-vs-device.md at bpo-rfm · borpin/learn · GitHub

Why didn’t you ask first?
emonTx_V2_CT123_Voltage_Temp_Pulse_rfm69n.zip (59.5 KB)

To me? (no idea who that is aimed at).
#16

I did above (from Rupert) as he had done the table.

@borpin
Thanks for making the table.

My comments:

  1. The yellow shading indicating the items available in the OEM shop is not present. Perhaps a # or dagger symbol could be used instead.

  2. perhaps note *5 should read ‘needs selection of correct hardware (e.g. including RF hardware and firmware)’ as both RFM12B and RFM69CW have been supplied

  3. In note *7 I originally said

‘The RFM69Pi module has all three formats available at emonBase with RFM69Pi (ATmega328) — OpenEnergyMonitor 0.0.1 documentation It can also be programmed from the emonSD software update page.’

However, looking recently at Admin/Update/Update Firmware Only/ttyAMA0/rfm69pi/,
there are only two format choices:
a) RFM69 LowPowerLabs
b) RFM69 JeeLib Classic
So the RFM69n choice seems to have disappeared? I’m sure it used to be there because I used it to change my RFM69Pi from JeeLib Classic to RFM69n.

And finally …

There is the rather thorny question of the capabilities of the RFM12B RF module, used in earlier versions of the hardware, vs the RFM69CW. With respect to the RFM12B vs the RFM69CW, I don’t have a lot of knowledge here, so some of the following may be wrong! I think the RFM12B is naturally compatible with the JeeLib classic format.

However, for other formats, considerations include:
1a) Different devices may use different (custom) drivers for the RF module
1b) the RFM12B hardware is different to the RFM69CW so I am not sure how compatible it is with the other two formats
1c) what firmware is available for the device in question
1d) what is the application - e.g. emonPi discrete sampling vs emonPiCM, and transmit vs receive
1e) what processor is being used - atmega328 vs AVR DB etc

So perhaps a note could be added, saying that the user might need to do further checking if his device uses an RFM12B and he wants to change from using the JeeLibs Classic format to one of the other formats.

One thing that I noticed is that the emonSD software update page at Admin/Update/Update Firmware Only/ttyAMA0/rfm12pi/, presumably for the RFM12B, has the two format choices:
a) RFM69 LowPowerLabs
b) RFM69 JeeLib Classic
but I don’t know if this works!

Any comments or corrections welcome!

1 Like