RS485 Bus Paul Novus 300 (Focus 200) - Schack17/PaulFocusNovus GitHub Wiki

The Paul Bus is a serial RS485 with 9 Bits (yes 9 - not 8! see knx-user-forum.de: Neues Plugin ComfoAir (KWL Wohnraumlüftung Zehnder, Paul, Wernig))

Package Format

Byte No. 1+2 3 4 5+6 7-31
Description 2 Target Address Command n or n-0x80=Data Length 2 Checksum 0-n Data
Example 01 02 80 05 7d 8c 00 00 00 00 00

Commands

Command Length Data Length Timing (every ms) Example Name Comment
00 20 14 5000 00 00 00 0e 7b 01 01 00 05 17 06 12 02 00 37 25 13 04 00 00 7=?(01), 8=?(00), 9=Weekday (Mo=0), 10=Monthday, 11=Month, 12=Year, 13=?(02), 14=?(00), 15=Second, 16=Minute, 17=Hour, 18=?(04), 19=?(00), 20=?(00) Timer: current time No address and no command id!
80 11 5 ? 01 05 80 05 65 4b 00 00 00 00 00 Address broadcast request The address in byte 1+2 is not the source address, its the target address
81 6/24 0/18 ? 01 01 81 12 3e 37 00 00 01 07 01 8f 00 45 54 41 30 30 33 36 45 32 39 41 Address broadcast answer The data contains the Bus Version (01 07 01), S/N, firmware version etc. (e.g.: .......ETA0036E29A)
82 ? ?
83 6 0 ? 01 00 83 00 7f 38 Broadcast request to get 85er answer from every slave?
84 6 0 ~100 01 04 84 00 28 7d I'm alive
85 9 3 5000 01 00 85 03 ba 9b 08 00 01 Ping?
100 01 00 85 03 b9 b6 1a 00 ?? Bypass State? 6.Byte: 01=off, , 0d=closed, 1d=opened
01 00 85 03 03 5a 90 00 00 Ping?
01 00 85 03 29 33 1d 00 01 Ping?
85 10 4 ??? 01 00 85 04 nn nn 55 00 00-0a 00 Ping?
85 25/32 nn ? 01 00 85 3f 56 51 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 06 00 00 07 00 00 08 00 00 0a 00 83 54 65 6d 70 46 72 6f 6d 42 75 53 44 45 46 52 0b 00 04 16 06 12 0c 00 39 02 16 0f 00 00 Status? / Set ventilation level 6. Byte Subcommand? (26 / 44)
85 39 nn ? 01 00 85 21 f3 b5 26 00 38 09 c3 00 01 44 00 5e 81 00 c3 00 82 00 50 00 83 00 c8 00 84 00 73 00 85 00 36 0d ae 00 01 Status Last Byte Bypass? 0=open, 1=closed
86 ? ?
87 ? ? ? 01 01 87 83 47 6a 00 ee b0 ? Length=4.Byte-0x80

Command 85

Data Length 13 and 21 has 4 or 5 Blocks:

Header? Subcommand Block 1 Block 2 Block 3 Block 4 Block 5 Other
01 00 85 13 94 ef 44 00 a9 81 00 af 00 82 00 bd 00 83 00 ff 00 84 00 ff 00
01 00 85 21 1a 5f 26 00 18 0f 1a 00 00 44 00 a8 81 00 af 00 82 00 b9 00 83 00 ff 00 84 00 ff 00 85 00 14 0f 1a 00 00 (Timer?)

The Blocks nummerates the temperatures T1-4 (5?) 81-0x80=1

Temperature Id for Device Version left Id for Device Version right
Outdoor - House in after defroster T1 T2
Incoming air - rooms in T2 T1
Indoor / Outgoing air - rooms out T3 T4
Outgoing air - house out T4 T3

And the 3. and 4. Byte after the number is the temperature: 0x04 0x01=26.0

Calc: (b[3] << 8 | b[2]) / 10.0

Checksum

  1. Byte changed and Checksum changed: 01 02 80 05 7d 8c 00 00 00 00 00 01 03 80 05 ae cb 00 00 00 00 00

Calculation in python:

`def crc16_ccitt(crc, data): msb = crc >> 8 lsb = crc & 255 for c in data: # x = ord(c) ^ msb x = c ^ msb x ^= (x >> 4) msb = (lsb ^ (x >> 3) ^ (x << 4)) & 255 lsb = (x ^ (x << 5)) & 255 return (msb << 8) + lsb

def novus_crc(data): # '3254' --> '0xcb6' --> 'b6 0c' crc = crc16_ccitt(0, data) return [int(formatLeadingZero(hex(crc)[-2:]), 16), int(formatLeadingZero(hex(crc)[2:][:-2]), 16)] `

Known Addresses

Address Name
0100 TFT (Display)
0101 Master
0102 TFT (Bedienteil)
0103 ?
0104 Slave
0105 Defrosterheizung
0106 Elektroheizregister
0107 EWT-Klappe
0108 Defrosterheizung
0109 ?