Die Casafan Funkfernbediungen verwenden keine Standardcodes bzw. keinen gängigen 433MHz Chips für die Kommunikation sondern eine Microcontroller. Deshalb muss man die Codes mittels eines Software-Defined-Radio (SDR) decodieren. Die günstigste Lösung ist ein SDR auf Basis eines RTL-Chipsets. Mit der geeigneten Software kann man dann die 433MHz Signale mit folgendem Kommando decodieren:
rtl_433 -A -R 0
Das Ergebnis sieht dann z.B. wie folgt aus:
Detected OOK package 2020-01-04 12:47:06 Analyzing pulses... Total count: 224, width: 321.51 ms (80377 S) Pulse width distribution: [ 0] count: 70, width: 396 us [392;412] ( 99 S) [ 1] count: 154, width: 796 us [792;804] ( 199 S) Gap width distribution: [ 0] count: 154, width: 400 us [400;412] ( 100 S) [ 1] count: 63, width: 804 us [800;812] ( 201 S) [ 2] count: 6, width: 9620 us [9620;9624] (2405 S) Pulse period distribution: [ 0] count: 56, width: 800 us [796;820] ( 200 S) [ 1] count: 105, width: 1200 us [1196;1208] ( 300 S) [ 2] count: 56, width: 1600 us [1596;1608] ( 400 S) [ 3] count: 6, width: 10020 us [10020;10028] (2505 S) Level estimates [high, low]: 15885, 18 RSSI: -0.1 dB SNR: 29.5 dB Noise: -29.6 dB Frequency offsets [F1, F2]: 18679, 0 (+71.3 kHz, +0.0 kHz) Guessing modulation: Pulse Width Modulation with multiple packets Attempting demodulation... short_width: 396, long_width: 796, reset_limit: 9628, sync_width: 0 Use a flex decoder with -X 'n=name,m=OOK_PWM,s=396,l=796,r=9628,g=816,t=160,y=0' pulse_demod_pwm(): Analyzer Device bitbuffer:: Number of rows: 7 [00] {32} 90 a0 c1 29 : 10010000 10100000 11000001 00101001 [01] {32} 90 a0 c1 29 : 10010000 10100000 11000001 00101001 [02] {32} 90 a0 c1 29 : 10010000 10100000 11000001 00101001 [03] {32} 90 a0 c1 29 : 10010000 10100000 11000001 00101001 [04] {32} 90 a0 c1 29 : 10010000 10100000 11000001 00101001 [05] {32} 90 a0 c1 29 : 10010000 10100000 11000001 00101001 [06] {32} 90 a0 c1 29 : 10010000 10100000 11000001 00101001
Die Werte lassen sich wie folgt durch Ausprobieren decodieren:
Byte 1 | Ventilator-ID | ||||||||||||||||
Byte 2 | Ventilator-ID | ||||||||||||||||
AUS | MAX | MIN | |||||||||||||||
Byte 3 | 1 | L | Licht | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | … | 0 | 1 | |
2 | Licht | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | … | 1 | 1 | |||
3 | Licht | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | … | 1 | 1 | |||
4 | Licht | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | … | 1 | 1 | |||
5 | Licht | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | … | 1 | 1 | |||
6 | Licht | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | … | 1 | 1 | |||
7 | Laufrichtung | 0 | V | 1 | R | ||||||||||||
8 | H | unbenutzt | 1 | fix | |||||||||||||
Byte 4 | 1 | L | unbenutzt | 1 | fix | ||||||||||||
2 | unbenutzt | 0 | fix | ||||||||||||||
3 | unbenutzt | 0 | fix | ||||||||||||||
4 | unbenutzt | 1 | fix | ||||||||||||||
AUS | 1 | 2 | 3 | 4 | 5 | 6 | |||||||||||
5 | Ventilatorstufe | 0 | 1 | 0 | 0 | 1 | 0 | 1 | |||||||||
6 | Ventilatorstufe | 0 | 0 | 1 | 0 | 0 | 1 | 1 | |||||||||
7 | Ventilatorstufe | 0 | 0 | 0 | 1 | 1 | 1 | 1 | |||||||||
8 | H | unbenutzt | 0 | fix |
Um dann senden zu können muss man noch die Pulslängen im Milisekunden und deren Folge kennen. Diese lassen sich mittels des Kommandos:
rtl_433 -w OOK:-
ermitteln. Für einen Block sieht das z.B. so aus:
412 404 796 404 800 804 400 404 800 400 800 400 804 400 800 804 400 400 804 804 396 404 800 404 800 400 800 404 800 400 800 804 400 804 400 404 800 400 800 400 804 400 800 408 796 404 796 404 800 404 800 404 796 404 800 804 400 404 800 404 796 804 400 9624
Es gibt also zwei Pulslängen: 400ms und 800 ms. Das entspricht auch den vom ersten Kommando ermittelten Werten. Die erste Spalte ist das Sendesignal (pulse) und die zweite die Pause (gap). Jedem 400ms Signal geht eine 800ms Pause voran und jedem 800ms Signal geht eine 400ms Pause voran.
Es zeigt sich ausserdem: