====== Casafan Funkfernsteuerung ======
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 [[https://github.com/merbanan/rtl_433|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
===== Decodierte Werte =====
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|
===== Pulslängen =====
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
===== Analyse =====
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:
* dass nur die Licht und Ventilatorstuerung übertragen wird
* der Timer in der Fernbedienung realisiert ist
* es werden immer alle Sollzustände übertragen und nicht die Änderung der Werte.