Conrad BEL-8006 radiothermostaat

From Frack - Hackerspace Friesland
Jump to navigationJump to search
Project: Conrad BEL-8006 radiothermostaat
BEL8006thermostaatset.jpg
Status lopend
Betrokkenen
Afbeelding Anoniem.png Martijn
Martijn (Martijn) Rol: deelnemer Deskundig met: Digitale Fabricatie, Elektronica, Hydroponics, Robotica, Software, Solderen, Stappenmotor Werkt aan: Geen projecten :(
,
Gebruiker Fugu.jpg Fugu
Gebruiker Fugu.jpgLammert (Fugu) Rol: deelnemer Deskundig met: Arduino, CNC, CNC-Frezen, ENC28J60, Glasvezel lassen, Linux, Netwerken, Stellaris Launchpad Werkt aan: Geen projecten :(
Kennisgebied(en) Python, AVR, Arduino, Reverse engineering
ProjectoverzichtProject toevoegen

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.

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%.

Links