84 lines
3.0 KiB
Plaintext
84 lines
3.0 KiB
Plaintext
This is the inter-node communication protocol.
|
|
|
|
Hardware
|
|
========
|
|
|
|
AqHome uses synchronous serial communication, nodes are connected via 4 lines:
|
|
- 5V
|
|
- GND
|
|
- DATA (0V/3.3V)
|
|
- ATTN (0V/3.3V)
|
|
|
|
DATA and ATTN are only pulled low by nodes on the bus, pulled high only by a single node in the network via pull-up
|
|
resistor. This allows for multi-master mode. Every node sends data at will (after checking for free line).
|
|
In most cases the pull-up resistors are installed on the node with the 5V power supply.
|
|
|
|
|
|
5V, GND
|
|
-------
|
|
Power line 5V, mcu nodes use a voltage regulator to locally provide stable 3.3V.
|
|
|
|
|
|
DATA
|
|
----
|
|
Data line, normally high, bits are sampled on the rising edge.
|
|
|
|
|
|
CLK
|
|
----
|
|
Clock line, normally high. Pulled down at the beginning of a transmission, held low for a short time to let
|
|
other nodes on the network discover this state. After that data is clocked out on the DATA line at the rising edge
|
|
of the CLK line.
|
|
|
|
|
|
|
|
Protocol
|
|
========
|
|
|
|
The protocol is simple to reduce overhead and to keep the code size inside the mcu nodes small.
|
|
There is no generic request-reply protocol. Messages are not repeated on the lowlevel layer. However,
|
|
if a message can't be transmitted because of a busy line it might get retried later by the sending node (e.g. when
|
|
reporting sensor data). Also, some operations consist of a request and a reply, but that's on a higher level (e.g.
|
|
remotely setting a specific value in a node). The maximum size of a message is 24 bytes (max. 21 bytes payload).
|
|
|
|
|
|
Basic Message Format
|
|
--------------------
|
|
|
|
Nodes communicate via messages. The first byte of every message is the destination node address, so every node can determine
|
|
after the first byte whether it is interested in the following message. The last byte is a CRC8 checksum byte although this
|
|
is for historical reasons not a real CRC8 checksum (due to an implementation error in early versions).
|
|
|
|
Offset Length Meaning
|
|
---------------------------------------------------------------
|
|
0 1 destination address
|
|
1 1 remaining message length (excluding the CRC byte)
|
|
---------------------------------------------------------------
|
|
2 n payload data
|
|
---------------------------------------------------------------
|
|
2+n 1 CRC byte
|
|
|
|
|
|
Command Messages
|
|
----------------
|
|
|
|
Command messages are an extension to the Basic Message Format specifying the first two bytes of the payload.
|
|
The first byte of the payload is a command code (e.g. "100" for report of sensor data), followed by the
|
|
bus address of the sender. The remainder of the payload is defined by the type of message(i.e. the message code).
|
|
|
|
|
|
Offset Length Meaning
|
|
----------------------------------------------------------------
|
|
0 1 destination address
|
|
1 1 remaining message length
|
|
----------------------------------------------------------------
|
|
2 1 command code
|
|
3 1 source address
|
|
----------------------------------------------------------------
|
|
4 n remaining payload data (depending on command code)
|
|
----------------------------------------------------------------
|
|
4+n 1 CRC byte
|
|
|
|
|
|
|