TellStick protocol

Introduction

Telldus TellStick protocol looks like:
[prefix[prefix parameters]][command][parameter 1]..[parameter n]['+']

Each value in [ and ] is representing one byte.

Command is one ascii character. Not all commands have parameters which makes it optional. Prefix is always optional. Note: Due to memory limitations, the parameters is limited in length to 79 bytes.

An example command to turn on a ArcTech codeswitch A1 may look like: S$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$kk$$kk$$kk$$}+

TellStick returns to a known command like this:
['+'][command][parameters][13][10]

[13] and [10] are the ascii characters 10 and 13.

An example to query a TellStick on its firmware version:
Command:
V+
Response:
+V2
The TellStick in the example has the firmware version 2.

Commands

S - Send command

This command tells TellStick to send a command. The parameters to this command is the data-packet to send.

Each of the characters in the parameters makes the antenna alternate high/low/high etc. The time before the alternation is 10 us timer the ASCII value. For example, $ has the ascii-value 36 and k has 107. The command: ['S']['$']['k']['$']['k']['$']['+'] makes the following wavepattern on the antenna:

  _____                 _____                 _____
 |     |               |     |               |     |
 |     |               |     |               |     |
 |     |_______________|     |_______________|     |
 |<===>|<=============>|<===>|<=============>|<===>|
  360us      1070us     360us      1070us     360us
 

T - Send command, extended

The extended command was developed to overcome the limitations och the length of the data to 79 bytes. The idea is to have four fixed times on the pulses so the information about what to send only needs 2 bits instead of 8 in the command S

The parameters to the command is:
[t0][t1][t2][t3][length][d1]..[dn]

t0-t3: Times 1 to 4. The times are in the same form as S. Each time is multiplied with the factor of 10.

length: How many pulses to send. Since the data sent to TellStick is sent in groups of four pulses (one byte) and the actual data might not have pulses even divided with four.

d1..dn: Each byte is the description for four pulses.

Example:
['T'][127][255][24][1][6][98][80]['+']

T: Send extended.

127,255,24,1: Times 1270 us, 2550 us, 24 us and 10 us

6: Six pulses to send.

98,80: The data in binary is 10011000,10000000. If we group it in groups of two bits we get 10 01 10 00 10 00 00 00. Since the length is only six pulses the last two pulses is discarded, giving: 10 01 10 00 10 00.

Matching those bits to the times gives the following times:
10 => 2 => t2 => 240 us
01 => 1 => t1 => 2550 us
10 => 2 => t2 => 240 us
00 => 0 => t0 => 1270 us
10 => 2 => t2 => 240 us
00 => 0 => t0 => 1270 us

This is equal if you used S:
['S'][24][255][24][127][24][127]['+']

V - Firmware version

This command queries the TellStick on its firmware version.

Example:
» V+
« +V2

Prefixes

The prefixes are commands that can be prepended before some of the commands and cannot be used standalone. They are used to alter the behavior of the command.

D - Debug

P - Pause

The pause is how low TellStick will wait between two packets. The value is in ms.

Example, % has the ascii-value 37. The following packet will be sent with a pause of 37 ms between the packets:
» P%S$k$k$+

R - Repeat

This tells TellStick how many times to send the packet.

Example, ! has the ascii-value 33. The following packet will be sent 33 times:
» R!S$k$k$+