I touched on the smoke detectors and door/window sensors I ordered last week: – here are a few more details.
The smoke detectors were £5.75 each – http://www.ebay.co.uk/itm/260990530306#ht_3800wt_1385 (all now sold out, but more available on a separate listing from the same seller – http://stores.ebay.co.uk/greatgougo)
The door/window sensors were £2.50 each – http://www.ebay.co.uk/itm/200759112077?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649#ht_500wt_1170 (shop link if/when the listing ends – http://stores.ebay.co.uk/HI-AYY-STORE)
The RF signals broadcast by both devices are not decoded by the RFXCom receiver/transceiver RFXtrx433. This meant finding a way to receive and decode myself.
I already had a few jeenodes (http://jeelabs.com/products/jeenode) knocking about and a 433Mhz plug (http://jeelabs.com/products/ook-433-plug) – there are many alternatives available. I fired up some sketches from the jeelib library (https://github.com/jcw/jeelib/) but wasn’t getting any output when triggering the door/window sensors or the smoke detectors;
I found a discussion on the jeelabs forum (http://forum.jeelabs.net/node/87) which led me to an application called ProtocolAnalyzer (http://wiki.nethome.nu/doku.php/analyzer/start). ProtocolAnalyzer describes a real simple circuit design which brings the RF signal voltage down to a safe voltage to pump into the microphone/line-in port:
I didn’t even have the right components so I improvised:
I only had a 4K7 variable resistor rather than fixed, and I think those fixed resistors are about 370 ohm so I doubled up. I didn’t have any capacitors, so I’ve omitted for the time being but that might be the reason I’m getting slightly inconsistent results as you will see later.
I fired up ProtocolAnalyzer and immediately started to see data coming in (without activating the sensors)- this suggested my CurrentCost devices and such were probably being heard. Many of the signals were being identified as conforming to the "Pronto" protocol, but the data wasn’t very helpful (nor was the way in which it was being displayed). To read the data you had to drill-down on each record. As I ultimately wanted to compare a large result set in an attempt to find patterns and work out which bits/bytes/words meant what this wasn’t really practical.
So I disabled all of the decoders and enabled just the raw signal capture:
I could now drill down and determine the pulse spec:
Which I could then use in an Arduino sketch to capture data. I used the ookRelay2 sketch and modified the Home Easy (HEZ) decoding function to decode my new devices:
class HezDecoder : public DecodeOOK {
public:
HezDecoder () {}
// see also http://homeeasyhacking.wikia.com/wiki/Home_Easy_Hacking_Wiki
virtual char decode (word width) {
if (400 <= width && width < 1600) {
gotBit(width <= 600);
return 0;
}
if (width >= 3000 && pos >= 5) {
for (byte i = 0; i < 6; ++i)
gotBit(0);
alignTail(64); // keep last 56 bits
return 1;
}
return -1;
}
};
As soon as I activated one of the sensors data started to flood in:
[ookRelay2] HEZ 51 85 171 42 51 3 HEZ 166 106 85 101 102 32 51 85 171 42 51 3 HEZ 153 169 90 85 153 3 HEZ 51 85 171 42 51 3 HEZ 51 83 171 42 51 3 HEZ 51 85 171 42 51 3 HEZ 166 106 85 101 102 32 51 83 169 42 51 3 HEZ 51 85 171 42 51 3 HEZ 170 86 85 102 6 50 51 85 171 42 51 3 HEZ 51 85 171 42 51 3 HEZ 204 85 171 42 51 3 HEZ 51 83 181 170 50 3 HEZ 51 85 171 42 51 3
I’m not 100% sure of the reason for the receptions (I think some protocols rebroadcast multiple times to enable validation). Nor am I sure of the reason for the discrepancies (you can see most of the packets are HEZ 51 85 171 42 51 3 but a few contain different values).
I took the most common result and recorded it along with the jumper position (presumably indicating the home code):
I followed a methodical approach of moving the jumpers and recording the result- ending up with a pattern something like:
ABCD-EFGHIJ?? IJ GH EF AB CD NNNN-NNNNNNNN HEZ 51 51 51 51 51 3 NNNL-NNNNNNNN HEZ 51 51 51 51 179 2 NNNH-NNNNNNNN HEZ 51 51 51 51 83 3 NNLN-NNNNNNNN HEZ 51 51 51 51 43 3 NNLL-NNNNNNNN HEZ 51 51 51 51 171 2 NNLH-NNNNNNNN HEZ 51 51 51 51 75 3 NNHN-NNNNNNNN HEZ 51 51 51 51 53 3 NNHL-NNNNNNNN HEZ 44 51 51 51 181 2 NNHH-NNNNNNNN HEZ 51 51 51 51 85 3 NLNN-NNNNNNNN HEZ 51 51 51 179 50 3 NHNN-NNNNNNNN HEZ 51 51 51 83 51 3 LNNN-NNNNNNNN HEZ 51 51 51 43 51 3 HNNN-NNNNNNNN HEZ 51 51 51 53 51 3 NNNN-NNNNNNNN HEZ 51 51 51 51 51 3 NNNN-NNNNNNNL HEZ 51 51 51 51 51 3 NNNN-NNNNNNNH HEZ 51 51 51 51 51 3 NNNN-NNNNNNLN HEZ 50 51 51 51 51 3 NNNN-NNNNNNHN HEZ 51 51 51 51 51 3 NNNN-NNNNNLNN HEZ 43 51 51 51 51 3 NNNN-NNNNNHNN HEZ 53 51 51 51 51 3 NNNN-NNNNHHNN HEZ 85 51 51 51 51 3 NNNN-NNNNLLNN HEZ 171 50 51 51 51 3 NNNN-NNNHNNNN HEZ 51 53 51 51 51 3 NNNN-NNHHNNNN HEZ 51 85 51 51 51 3 NNNN-NHNNNNNN HEZ 51 51 83 51 51 3 NNNN-HNNNNNNN HEZ 51 51 53 51 51 3
So I could see that the jumpers in pairs appeared to directly affect each byte of data being returned. I think built this table to demonstrate how I think they correlate:
DDDD-AAAAAAAA 3210-76543210 A0 = Not Used A1 = Not Used HEZ AA32 AA54 AA76 DD32 DD10 NN = 51 NL = 43 NH = 53 LN = 179 LL = 171 LH = 181 HN = 83 HL = 75 HH = 85
Next steps:
- Configure each of the sensors with unique jumper configurations
- Determine and position the sensors
- Add the 433Mhz receiver to the jeenode connected to my raspberry pi (running DomotiGa) and modify the sketch to decode these signals as well as receiving 868Mhz broadcasts from other jeenodes
- Tweak the DomotiGa code to interpret the received data







Thanks for publishing this, I like the protocol analyser, just what I need for another job!
Cheers.
Good information, Thanks.
Slightly confused by the protocol Analyser hardware Schematic. Appears to be attached to the microphone socket ie on the PC end. Your photo shows a plug – I assume you have ‘Translated’ the schematic.
Freaklabs have a Wireshark bridge doing something similar in 2.4MHz with their lowcost freakduino chibi. See http://freaklabs.org/index.php/WSBridge.html
Hi Lee, would you know how to send/receive commands from the linux command line via the rfxtrx433 unit? I’m currently looking for a way for it to interface with heyu and am having trouble finding a linux cli program to do it. Thanks for the writeup.
From memory you can send simply by
but I seem to recall using minicom (http://en.wikipedia.org/wiki/Minicom) and also python with serial module.
Hope that helps.
L
Thanks for the info, could you elaborate on what the ‘blah’ bit would be? Are these hex coded instructions?
Just ascii i think. But as i say- you don’t get responses back so unless you’re just looking for one way communication without any acknowledgements, i doubt you’ll want to go down that route?
For the receiving side I’m looking into a perl script that monitors /dev/ttyUSB0 but have yet to work on that.
For the transmit side, I’m looking to activate a HomeEasy switch so no acknowledgement wouldn’t be a problem. I’m trying to keep resource demands as light as possible, if I can get away with a simple echo to the device that would be great.
Do you know if there’s any documentation for the ascii instructions?
Hi Tickett,
Love your project. I managed to reverse engineer my wireless thermostat using an arduino. Using the same arduino I can send a command to it via Domotiga however I can’t manage to read sensor values in Domotiga (of sensors connected to Arduino). Could I kindly ask you to publish the way you have altered the domotiga code for your meters and how do you identify your jeenodes in Domotiga (I’m lost with the address and type in Domotiga).
Thanks in advance,
Cheers,
Marco