Not all blog posts can be about successful implementations or achievements. Sometimes, failure happens as well This is the case for my domotics implementation. Does that mean I have given up on getting it to work? Certainly not, but I'm stuck and don't have to luxury that is time, so close to the deadline with plenty of other things left to do.
Here's what I did manage to figure out so far ...
Domestia
As you may or may not know, I moved house during the challenge, beginning of July. The new house has a domotics installation by Domestia, a belgian domotics brand from what I could find.
The installation consists of two relay modules, capable of turning lights and outlets on or off. There are also two dimmer modules for lights. When we started replacing the halogen bulbs by LED ones, we noticed the dimmers no longer worked, and had to replace the dimmers by LED compatible ones.
Next to the electrical wires, the modules have a three way connector labeled A, B and GND. Searching the datasheets, it is explained the domotics modules are connected to a RS485 bus for communication.
The wiring is illustrated in the module's manual:
The RS485 bus could be an entry point in reading the lights or outlets' status, and eventually control them.
Here's what it looks like in real life:
The RS485 bus can be accessed via the dimmer's blue, green and orange wires, labeled A, B and GND.
Read
According to this, the pins' functions are the following:
- A: Data+ (non-inverted)
- B: Data- (inverted)
- GND: ground
I started by first connecting my oscilloscope to the bus, verifying there is activity. Probe 1 was connected to line A, probe 2 to line B. This is what I saw:
Three things can be observed/confirmed at a glance:
- there is a constant flow of data
- there is a short sequence followed by a long one: request vs response?
- line B is indeed an inverted version of line A
Knowing there is data present, I could perhaps find a script or piece of software able to decode the data. For that purpose, I bought a generic RS485 to Serial USB module.
Using a basic serial tool, I was able to dump the raw hexadecimal data. A new observation, is that every new line, starts with the hexadecimal value "0x0C".
With a script I found and modified to suit my needs, I captured the raw data and jumped to a new line every time the "0x0C" value appeared.
#!/usr/bin/env python # Original script from http://stackoverflow.com/questions/31868997/using-pyserial-to-get-device-data-through-rs485 # Modified to print full hex sequences per line instead of individual values import serial import binascii import time ser = serial.Serial() data = "" def initSerial(): global ser ser.baudrate = 9600 ser.port = '/dev/tty.usbserial-A50285BI' ser.stopbits = serial.STOPBITS_ONE ser.bytesize = 8 ser.parity = serial.PARITY_NONE ser.rtscts = 0 def main(): initSerial() global ser global data ser.open() while True: mHex = ser.read() if len(mHex)!= 0: if not binascii.hexlify(bytearray(mHex)).find("0c"): print data data = binascii.hexlify(bytearray(mHex)) else: data = data + " " + binascii.hexlify(bytearray(mHex)) time.sleep(0.05) if __name__ == "__main__": main()
Some of the captured sequences:
0c 08 08 08 08 08 08 08 08 08 08 18 08 a8 08 ff 08 ff 0c 08 08 08 08 08 08 08 08 08 08 18 08 a8 08 ff 08 ff 0c 08 08 08 08 08 08 08 08 08 08 18 08 aa 08 ff 08 fe 0c 08 08 08 08 08 08 08 08 08 08 18 08 a8 08 fe 08 ff 0c 08 08 08 08 08 08 08 08 08 08 18 08 a8 08 ff 08 fe 0c 08 08 08 08 08 08 08 08 08 08 18 08 a8 08 fe 85 ff 0c 08 08 08 08 0a 08 08 0a 08 08 18 08 a8 08 fe 08 ff 0c 08 08 08 08 08 08 08 08 08 08 18 08 a8 08 ff 08 ff 0c 08 08 08 08 08 08 08 08 08 08 18 08 a8 08 ff 08 ff 0c 08 08 08 08 08 08 08 08 08 08 18 08 a8 08 ff 08 ff 0c 08 08 08 08 08 08 08 08 08 08 18 08 a8 08 fe 08 ff 0c 08 08 08 08 08 08 08 08 08 08 18 08 a8 08 ff 85 ff 0c 0a 08 08 08 08 08 08 08 08 08 18 08 a8 08 ff 08 fe 0c 08 08 08 08 08 08 08 08 08 08 18 08 aa 08 fe 85 ff 22 20 0c 08 08 08 08 0a 08 08 08 18 08 a8 08 ff 84 ff 0c 08 0a 08 08 08 08 08 08 08 08 18 08 a8 08 ff 08 ff 0c 08 08 08 08 08 08 08 08 08 08 18 08 a8 08 ff 85 ff 22 20 0c 08 08 08 08 08 08 08 08 18 08 a8 08 ff 08 ff 0c 08 08 08 08 08 08 08 08 08 08 18 08 a8 08 ff 08 fe 0c 08 08 08 08 08 08 08 08 08 08 18 08 a8 08 fe 08 ff 0c 08 08 08 08 08 08 08 08 08 08 18 08 a8 08 ff 08 ff 0c 08 08 08 08 08 08 08 08 08 08 18 08 a8 08 ff 08 fe 0c 08 08 08 08 08 08 08 08 08 08 18 08 a8 08 ff 85 ff 0c 08 08 08 08 08 08 08 08 08 08 18 0a a8 0a fe 08 ff 0c 08 08 08 08 08 08 08 08 08 08 18 08 a8 08 fe 08 ff 0c 08 08 08 08 08 08 08 08 08 08 18 08 a8 0a ff 08 fe 0c 08 08 08 08 08 08 08 08 08 08 1a 08 a8 08 ff 08 ff 0c 08 08 08 08 08 08 08 08 08 08 18 08 a8 08 ff 08 ff 0c 08 08 08 08 08 08 08 08 08 08 18 08 a8 08 ff 85 ff 0c 08 08 08 08 08 08 08 08 08 08 18 08 a8 08 fe 08 fe 0c 08 08 08 08 08 08 08 08 08 08 18 08 a8 08 ff 08 fe 0c 08 08 08 08 08 08 08 08 08 0a 18 08 a8 08 ff 08 ff 0c 08 08 08 08 08 08 08 08 08 08 18 08 a8 08 fe 08 ff 22 20 0c 08 08 08 08 08 08 08 08 18 08 a8 08 ff 08 ff 0c 08 08 08 08 08 0a 08 08 08 08 18 08 a8 08 fe 08 ff 0c 08 08 08 08 08 08 08 08 08 08 18 08 a8 08 ff 08 fe 22 20
There is a very repetitive pattern, with occasionally different values. But what does it do or mean?
Interpret
This is where I got blocked. This is a bit too low-level for me, so any help would be greatly appreciated! Before being able to go any further, I need to be able to make sense of the data. Until then, this feature will be parked. The goal is still to be able to control and monitor the domotics, but sadly It most likely won't be achieved in this challenge.
Now, if you do have knowledge or know about tools which could help me further, feel free to leave a comment below
Navigate to the next or previous post using the arrows. |
Top Comments