-
Notifications
You must be signed in to change notification settings - Fork 13
Technical details of the EDF EcoManager and accessories
Current Cost designed and manufacture a range of "EcoManager" energy monitors for the utility company EDF.
- EcoManager communicates with up to 14 IAMs (Individual Appliance Monitors) and 1 whole-house transmitter
- The EcoManager and IAMs can both transmit and receive; the whole-house transmitter can only transmit.
- RFM network ID (synchron word) = 0x2DD4
- 12 bytes packet composed of 11 bytes data + 1 bytes checksum
- Devices have dynamic 32-bit UIDs (randomly generated during pairing) generated by base station and IAMs (when turned on/off by switch, or pairing)
These are very similar to Current Cost IAMs except for several vital differences:
- Each EDF IAM can both send and receive (the CC IAMs can only send).
- Each EDF IAM also has a relay to turn the appliance on or off. This relay can be activated using the manual override switch on the EDF IAM or over RF.
- Each EDF IAM will only report its wattage when polled by the EDF EcoManager base station or when the manual override switch is operated.
- The packets appear to include a simple checksum! (The CC Transmitters don't bother with a checksum.)
The EDF IAM does not spontaneously transmit measured power consumption. Instead it only transmits measured power consumption when polled by the EcoManager. The delay between sending a poll request and receiving a response is about 20ms.
It appears that it is possible to poll the EDF IAM as rapidly as you want but it appears that the EDF IAM only bothers to take a sample once every six seconds or so. In other words, it appears to not sample the wattage when you ping the EDF IAM but instead it asynchronously measures the wattage every six seconds or so and stores this value ready for transmission when you poll for it.
Appears to use the same communications protocol as the Current Cost whole-house CT unit (see the Technical details of Current Cost RF protocol wiki page for details). As such, the whole-house transmitter transmits measured power data once every six seconds without waiting for a poll request from the base unit.
There are some physical differences between the EDF Whole-House transmitter and the Current Cost CT unit: the EDF unit can only accommodate a single CT clamp, connected using an RJ?? connector whilst the Current Cost transmitter can accommodate 3 CT clamps connected using a small power jack.
- 433.97 MHz (the Current Cost kit uses 433.90 MHz)
- 3.918 kbps datarate
- baseband bandwidth = 67 kHz
This is what is transmitted by the EcoManager and IAMs. Note that the preamble and sync word are trimmed off by the RFM receiver.
(bytes are in hex unless otherwise stated)
Bytes | Description | Function | Contents (hex) |
---|---|---|---|
1 | preamble | allow RX to lock on | 55 |
2 | sync word | label this packet as data not noise | 2DD4 |
11 | payload data | - | see below |
1 | checksum | - | modular sum on previous 11 bytes |
The data does not appear to be "manchesterised" (unlike the Current Cost packets and EDF Whole House transmitter packets).
Bytes | Description | Abbreviation | Contents (hex) |
---|---|---|---|
1 | device class | DC | 46=Base, 52=IAM, 55=WholeHouseTX |
4 | UID destination if from base, source if from IAM | UID | - |
1 | - | - | always 00 |
2 | command bytes | CMD | see below |
2 | current power consumption | WATTS | see below |
1 | state (is this IAM on or off?) | S |
- for IAMs: 4F=off, 53=on IE bit 2 indicates the state of the IAM switch. - for base always 4F |
1 | checksum | CHK | modular sum on 11 byte payload data |
Hex (lsb/msb) | ASCII | Description |
---|---|---|
50 53 | P S | Poll State (ask IAM for current and output state) |
4F 46 | O F | turn IAM OFF |
4F 4E | O N | turn IAM ON |
41 4B | A K | AcKnowledge (in response to pairing request) |
Hex (lsb/msb) | ASCII | Description |
---|---|---|
41 4B | A K | AcKnowledge (send base current wattage and output state) |
43 4F | C O | Pairing request |
Measured power consumption of appliance. First byte is least significant byte. Only non-zero in response packets from IAM to base (i.e. CMD=AK or CMD=CO) or when manual override switch is turned on. Represents the power reading as an unsigned 12-bit int, in watts of the IAM. Maximum possible reading (through experimentation) appears to be 0xFF0A, or 2.81kW.
The checksum byte is the modular sum on the 11 bytes of payload data. This can be calculated by summing together the 11 bytes of payload data using a 1-byte accumulator and ignoring the overflow or, equivalently, by summing together the 11 bytes of payload data using a multi-byte int representation and taking the least significant byte, for example consider the data packet 46 55 10 00 01 00 50 53 00 00 4F 9E
:
- Sum together data bytes (11):
0x46 + 0x55 + 0x10 + 0x01 + 0x50 + 0x53 + 0x4F = 0x19E
- Take LSB 8-bits:
0x19E & 0xFF = 0x9E == [CK]
DC | UID | 00 | CMD | WATTS | S | CHK | Description |
---|---|---|---|---|---|---|---|
Polling IAMs: | |||||||
46 | 55 10 00 01 | 00 | 50 53 | 00 00 | 4F | 9E | Poll state request from:base to:IAM0x55100001 |
52 | 55 10 00 01 | 00 | 41 4B | 3E 00 | 53 | D5 |
State reply from:IAM0x55100001 to:base, reading = 0x003E = 62W, output=ON |
46 | 55 10 00 01 | 00 | 50 53 | 00 00 | 4F | 9E | Poll state request from:base to:IAM0x55100001 |
52 | 55 10 00 01 | 00 | 41 4B | 00 00 | 4F | 93 |
State reply from:IAM0x55100001 to:base, reading = 0x0000 = 0W, output=OFF |
46 | 55 10 00 03 | 00 | 50 53 | 00 00 | 4F | A0 | Poll state request from:base to:IAM0x55100003 |
52 | 55 10 00 03 | 00 | 41 4B | 00 00 | 53 | 99 |
State reply from:IAM0x55100003 to:base, reading = 0x0000 = 0W, output=ON |
Pairing IAM to base: | |||||||
52 | 21 84 25 64 | 00 | 43 4F | 00 00 | 4F | 61 |
Pairing request from:IAM0x21842564 to:base, reading = 0W, output=OFF |
46 | 21 84 25 64 | 00 | 41 4B | 00 00 | 4F | 0A | Pairing acknowledge from:base to:IAM0x21842564 |
IAM transmission after switch is operated | |||||||
52 | 55 10 00 03 | 00 | 41 4B | 07 00 | 53 | A0 | On (packet repeated twice) |
52 | 55 10 00 03 | 00 | 41 4B | 00 00 | 4F | 95 | Off (packet repeated twice) |
52 | 55 10 00 03 | 00 | 41 4B | 11 00 | 53 | AA | On, 17Watts (packet repeated twice) |
52 | 55 10 00 03 | 00 | 41 4B | FF 08 | 53 | A0 | On, 2303Watts (packet repeated twice) |
All communications between the base and a SINGLE IAM are synchronous. There are 3 possible scenarios:
Base station sends out poll every ~1m to each IAM. The IAM, if active, responds with its current state.
Base -> Poll state (CMD=0x5053, PS) -> IAM IAM -> State (CMD=0x414B, AK) -> Base
If the IAM is toggled using the button on it, it will send a state update to the base station to notify it. The message is repeated twice, around 366ms apart. There is no ACK by the base station (?)
IAM -> State (CMD=0x414B, AK) -> Base (~366ms gap) IAM -> State (CMD=0x414B, AK) -> Base
When an IAM is set to pairing mode it randomly generates a 32-bit UID suggestion and broadcasts this with the pairing command every ~2s, for approx. 25s. When the user selects and pairs this IAM to the base station by selecting a channel, it is sent an acknowledge command by the base station, which stops it broadcasting and tells the IAM to use that UID from now on.
If the pairing request times out then the IAM reverts to its original UID.
IAM -> Pairing req. (CMD=0x434F, CO) -> Base . 2s . 2s . 2s . . . Base -> Acknowledge (CMD=0x414B, AK) -> IAM
If you poll an IAM while it is in pairing mode then it will respond to polls addressed to the new candidate UID (and not to its old UID), even if the new UID hasn't been acknowledged by the base station.
See this post by kevinT on homeautomationhub.com for a detailed explanation of what's compatible with what.
- "Eco Manager Teardown and help identify RF" forum thread on JeeLabs
- Jack Kelly's notes on pinging an EDF IAM
A huge amount of the information on this page was deduced by Matt Thorpe and Paul Cooper. Many thanks!