Conrad BEL-8006 radiothermostaat
Om mijn cv beter te kunnen besturen heb ik een aantal conrad radiothermostaten gekocht met een basisstation. Deze heb ik even aan de scope gehangen en ik ben toen het protocol gaan reverse engineeren.
Contents
system specs
frequentie: 868.35 MHz
Berichtopbouw
Elk bericht begint met een syncpuls van 2050 us gevolgd door een pauze van 1000 us. hierna worden de bits gecodeerd:
1 = 400 us high, 200 us low 0 = 200 us high, 400 us low
Most significant bit wordt eerst verstuurd.
Tot nu toe heb ik twee soorten/lengtes berichten voorbij zien komen. Een 0xA9 bericht wordt altijd gevolgd door een 0xAA bericht, behalve bij de synchronisatiecyclus, hij lijkt dus optionee..
0xA9 bericht
Dit bericht stuurt de klepstand door.
Veld | Lengte (bytes) | Bijzonderheden |
---|---|---|
Startbyte | 1 | 0xA9 |
Securitycode | 2 | Securitycode, adres waar de ontvanger op luistert, 0 t/m 9999, in BCD |
Onbekend | 1 | 0x40 of 0xC0 (context: settings, LE H (learn heater?)) |
Onduidelijk | 1 | hoge 4 bits hebben iets te maken met aantal kleppen (no H, number of heaters), 1 heater = 0x0, 16 heaters = 0xF. De lage 4 bits worden ingesteld als je de LE H functie gebruikt. |
dag + tijd | 4 | dag/uur/minuut/seconde, in BCD, maandag = 1, zondag = 7 |
calibratietijdstip | 3 | dag/uur/minuut waarop de aandrijving zichzelf moet calibreren |
Klepstand | 1 | in procenten |
Checksum | 1 | securitycode t/m klepstand ge-XOR'ed |
Voorbeeld:
A9 03 00 40 00 01 00 44 30 05 12 30 0A 1B
securitycode = 0003 aantal kleppen = 1 dag = 1 = maandag tijd = 00:44:30 volgende calibratie = vrijdag om 12:30 klepstand = 10%
A9 03 00 40 20 01 01 20 30 05 12 30 00 54
securitycode = 0003 aantal kleppen = 3 dag = 1 = maandag tijd = 01:20:30 volgende calibratie = vrijdag om 12:30 klepstand = 0%
na in het menu LE H op 2 gezet te hebben A9 03 00 C0 21 01 01 30 49 05 12 30 00 BC
securitycode = 0003 aantal kleppen = 3 ???? = 2 dag = 1 = maandag tijd = 01:30:49 volgende calibratie = vrijdag om 12:30 klepstand = 0%
0xAA bericht
Dit bericht stuurt de klep-offset waardes door. dit heeft iets met het aantal kleppen te maken, in de handleiding wordt dit getal als P2 aangeduid, P2 kan op de zender 1 t/m 16 zijn, dit wordt gecodeerd als 0x0 t/m 0xF.
Veld | Lengte (bytes) | Bijzonderheden |
---|---|---|
Startbyte | 1 | 0xAA |
Securitycode | 2 | Securitycode, adres waar de ontvanger op luistert, 0 t/m 9999, in BCD |
Offset waardes | 16 | 16 x offset waarde 0 t/m 50, als de MSB 1 is, is het negatief, dus 0x81 = -1, 0x9E = -30 |
Checksum | 1 | securitycode + offset waardes ge-XOR'ed |
Voorbeeld:
AA 03 00 9E 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 97
securitycode = 0003 klep 1 offset = -30 klep 2 offset = 10 klep 3 offset = 0 ... klep 16 offset = 0
synchronisatie
Bij het starten van het basisstation stuurt de unit 1 minuut lang elke 2 seconden een bericht om de klep op 0% te zetten. De ontvangers synchroniseren op dit bericht. Vervolgens zullen de ontvangers halverwege elke minuut 7 seconden lang luisteren naar commando's.
code
Er is een library beschikbaar, maar die moet ik nog uploaden, deze regelt de synchronisatie en stuurt berichten met behulp van interrupts. De code is vanwege het gebruik van Timer3 alleen geschikt voor de Arduino Mega2560
Tips & Tricks
Omdat het interne mechaniek geen feedback lijkt te hebben, en mijn units na een dag al ongeveer de kluts kwijt zijn in de zin van dat de klep steeds meer open blijft staan, vermoed ik dat het goed is om de kleppen met wat grotere afstanden te laten bewegen. De oorspronkelijke besturing geeft ook als uitstuursignaal naar de kleppen:
percentage = (T_setpoint - T_measured) * 50 met stappen met 10%.