Emon Tx V4 and 433MHz Radio Formats

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

Done.

The other elements really need @TrystanLea input TBH. I don’t know enough to be able to comment. In the PR text, I do say that this needs reviewing and confirming.

I think it would be more accurate to write that classic JeeLib was written for the RFM12B.

Thanks @rupert @borpin

Yes my thinking here was not to overcomplicate the options, but I would like to relist it as I talk about all three formats anyway in the documentation.

Yes correct and it’s not compatible with the other formats.

Yes good idea, certainly applicable to folk with emonTx v2 units.

Yes but only one of those has a firmware option that can be used (the box is empty if you select lowpowerlabs).


I’ve created a new set of firmware releases for the emonTx3 that include support for the LowPowerLabs radio format:

Dont rush to update yet, Im still working through the documentation, update process and testing, so it might be worth waiting for one more release in the next few days before testing this.

Thanks @TrystanLea

Key thing is the matrix and. I suggest, common naming.

e.g.

What do I need/what is best to communicate

  • I have a V1 emonPi, and a new emonTX4 (the answer might be use classic for instance)
  • I have a V1 emonPi, a V1 emonTH and a new emonTX4.

Right now I have to say it is bewildering and was my reason for starting the table :slight_smile:

Whoops!

I haven’t got an entry for the emonTH V1 in the table! I think the change between V1 and V2 was that the V2 revision adds support for SI7021 temperature and humidity measurement, but the wireless remains the same. So I think the V1 entries in the table will be the same as for the V2.

And … yes …

But JeeLib might not. There were some emonTHs produced with the RFµ module ('328P + RFM12B), which requires a patched JeeLib but is fine with my rfmTxLib and rfm69TxLib. I can’t speak for the LPL.

@Robert.Wall
Thanks for the correction.

Are the RFu module units externally identifiable by the user as such?
Could they be referred to as emonTH V0?

Do any other early devices have RFu modules?

Sorry, I didn’t notice that