Robins Blog – Technik und Multimedia

Fhem: preiswerter 433 MHz Funkbewegungsmelder PIR

Update: 11.02.2018 Bitte beachtet auch folgenden Blogbeitrag über die Sonoff 433 MHz Bridge

Update 25.01.2015 Blog-Beitrag erweitert

Heute beschreibe ich Euch, wie man preiswerte 433 MHz Funkbewegungsmelder, sogenannte PIRs an Eurem Hausausautomations-Server Fhem anschließt.

Diese Funkbewegungsmelder haben mehrere Vorteile, zu den Nachteilen komme ich weiter unten im Beitrag:

Selbstgebauter 433 MHz-Empfänger für Tür-Kontakt-Sensoren und Bewegungsmelder (PIR) für Fhem

Die Zutaten:

Empfangen von Daten vom PIR-Bewegungsmelder: Hier habe ich mit meinem Raspberry-Pi, welcher als Fhem-Server bei mir läuft einen Empfangstest  mit den 433 MHz Empfängern gemacht. Dieser Empfangstest ist bei mir nicht so gut angekommen, es wurde nur vereinzelnd etwas  empfangen.

Deshalb habe ich mir einen günstigen Arduino (Nano V 3.0) gekauft, welcher zusammen mit meinem 433 MHz – Superhet Modul als Empfänger arbeitet.

Falls jemand schnell einen 433 MHz-Empfänger benötigt, ich habe hier noch 3 zum Verkauf, 14,90 Euro inkl. Versand. Größere Reichweite, weil Superhet-Empfänger. Ich könnte Euch auch ein komplettes Modul zusammenlöten (Nano mit passenden Sketch und 433MHz Empfänger, Preis 31 Euro inkl. Versand). Einfach in den Kommentaren melden, siehe großes Foto oben.

 

In der Abbildung ist ein Bewegungsmelder zu sehen, welcher mit 433 MHz funktioniert. Kaufen bei amazon: 433MHZ Wireless PIR Bewegungsmelder für Home Alarm Home Security

Der PIR hat zwei LEDs (rot für Alarm und eine für Battery Low). Nicht für RFXtrx433-Sticks geeignet.

 

Diesen Aufbau hatte ich erst zum Testen auf meinem Steckbrett modelliert anschließend die Bauteile auf einer kleinen Platine verfrachtet. Den Arduino habe ich mit einem freien USB-Slot mit dem Fhem-Server verbunden. Testweise noch eine kleine LED angeschlossen, welche aufleuchtet, wenn der Digital-Pin 10 (frei wählbar) des Arduinos auf HIGH geht. d. h. der 433 MHz-Funkbewegungsmelder einen Bewegungsalarm empfängt.
[asa]B00CD2B1UG[/asa]

Wichtig: Nicht diese links auf dem Foto abgebildeten 433 MHz-Empfänger kaufen! Man sieht davon links die Vorderseite und rechts die Unterseite der Module. Diese sind zwar spottbillig, taugen aber überhaupt nichts! Die Reichweite beschränkt sich auf wenige Meter. Anhand des Fotos seht ihr, das ich auch etwas Lehrgeld bezahlen musste weil ich auch damals die preiswerten Empfänger gekauft habe. Also lieber die etwas teureren Empfänger nehmen, siehe oben!

Schaltungsaufbau: Lötkolben anwerfen oder Schaltung auf dem Steckbrett (Steckbrett Breadboard Experimentierboard Steckplatine 830 Kontakte
) zusammenbauen. Der Schaltungsaufbau ist einfach: Man verbindet den RF-Link-Empfänger (5V, GND) mit den Pins des Arduinos, welche auch so gekennzeichnet sind. Die VData-Leitung des RF-Link-Empfängers verbindet man mit Pin 2 des Arduinos, zumindest, wenn  man Sketch unten verwendet. Als Antenne verwendet man 17 cm langen Kupferdraht, siehe Foto.

Software:
Zunächst mit der Arduino mit einem Sketch (Software) betankt werden. Ich habe das in zwei Schritten gemacht. Man muß zunächst herausbekommen, welche ID der 433 MHz-Funkbewegungsmelder sendet, wenn ein Alarm ausgelöst wird. Da diese Bewegungsmelder keine DIP-Schalter haben (siehe Foto), muss man auf der Empfängerseite diese ID erst mal herausbekommen. Das hat für mich die Beispiel Datei example aus der RC_Switch Library erledigt. Diese Datei auf dem Arduino beamen, mit Umschalt-STRG-M den seriellen Monitor öffnen und kurz den Alarm des PIRs auslösen. Den Code seht ihr dann im Fenster des seriellen Monitors. Diesen aufschreiben und den Code mit diesem Sketch anpassen. Wichtig: Bei der Arduino-Software Duomilanove/AT386 zum Flashen einstellen. Wenn ihr mehrere Bewegungsmelder gekauft habt, dann den nächsten Code ermitteln. Anschließend den Sketch auf dem Arduino beamen.  Fertig.

Alternativ! Update der Software 25.01.2015: Ein Blog-Leser (Julian) hat mir einen einfacheren Sketch geschickt. Der sieht so aus:


#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
void setup() {
Serial.begin(57600);
mySwitch.enableReceive(0); // Receiver on interrupt 0 => that is pin #2
}
void loop() {
if (mySwitch.available()) {
unsigned long value = mySwitch.getReceivedValue();
if (value == 0) {
Serial.print("Unknown encoding");
} else {
Serial.println("OK 5 " + String(value) + " 1");
}
}
mySwitch.resetAvailable();
}

Bei diesem Sketch werden alle ankommenden 433 MHz – Signale durch den Arduino getunnelt. Hier sollte bei neuen 433 MHz Sensoren (PIRs oder TFKs) der Autocreate-Modus bei Fhem eingeschaltet werden. Damit sollten diese Geräte dann automatisch angelernt werden. Nach dem Anlernvorgang aber wieder diesen Modus abschalten, damit nicht der sonstige Sendemüll als neue Geräte bei Fhem erkannt werden.

Testen: Jetzt könnt ihr mal einen Alarm eines Bewegungssensors auslösen und es müsste in dem seriellen Monitor so etwas wie OK 5 123453 1 erscheinen, wobei 123453 die ID des PIR Sensors ist.

Jetzt verbindet ihr den Arduino via USB mit dem Raspberry Pi, auf dem der Fhem-Server läuft. Dort in die Konsole gehen und den Port des Arduinos ermitteln.

[sourcecode language=“text“ gutter=“false“]dmesg[/sourcecode]

eingeben und die Zeilen finden, welche den Port zeigen.


ftdi_sio 1-1.2:1.0: FTDI USB Serial Device converter detected
usb 1-1.2: Detected FT232RL
usb 1-1.2: Number of endpoints 2
usb 1-1.2: Endpoint 1 MaxPacketSize 64
usb 1-1.2: Endpoint 2 MaxPacketSize 64
usb 1-1.2: Setting MaxPacketSize 64
usb 1-1.2: FTDI USB Serial Device converter now attached to ttyUSB2

In dieser Konfiguration ttyUSB2

Wichtig: Erst Fhem auf dem neuesten Stand bringen, also ein Update machen!

Jetzt in Fhem in der Fhem-config gehen und diese Zeile dort eintragen

define arduino JeeLink /dev/ttyUSB2

Jetzt habt ihr den Arduino via USB mit dem Fhem Server verbunden.

Damit die Funkbewegungsmelder noch von Fhem erkannt werden, müssen noch eine Datei in das /opt/fhem/FHEM – Verzeichnis kopiert werden.  Die Datei 36_AliRF.pm ist noch nicht eingecheckt, deshalb zum Download hier.

Shutdown restart nicht vergessen.

Hex-Zahl für Fhem ermitteln: Nachdem der PIR erfolgreich im Arduino Nano Alarm geschlagen hat, müssen ihn noch für Fhem bekannt machen. Dazu wird zur Erkennung an Fhem noch eine Hex-Zahl benötigt, die ihr wie folgt herausbekommt.

Der oder die erkannten PIRs werden dann in der Menüleiste angezeigt.

Anwendungsgebiete: Die Bewegungssensoren haben eine Reichweite von ungefähr 8m. Der Winkel zur Seite ist ungefähr 45 Grad und liegt bei 2m, siehe Grafik auf dem Karton. Die drahtlose Verbindung zum Arduino funktioniert mit meinem Empfänger  tadellos. Die Alarmerkennung reagiert bei meinem Fhem und Raspberry Pi innerhalb 1s. Ich nutze den Bewegungsmelder für mein Nachtlicht. Vorteil von Fhem: Alle an Fhem angeschlossenen Lampen und auch andere Geräte (z.b. Garagentoröffner) können durch das Fhem-Scripting geschaltet werden.

Nachteile und Fazit: Obwohl die PIRs unschlagbar preiswert sind (ein Fs-20 kostet ungefähr 40 Euro, siehe hier: FS20 PIRI-2 Zweikanal-Funk-Bewegungsmelder ohne Unterkriechschutz (ohne Transceiver),  so gibt es doch ein paar Nachteile:
Wenn die Batterie leer ist, wird das nicht in der Zentrale (Fhem) angezeigt.
Die Reichweite ist im 868 MHz-Bereich besser, bei diesem Bewegungsmelder wird die 433 MHz Frequenz benutzt.
Es erfolgt kein Handshaking, ob das Signal wirklich beim Empfänger angekommen ist.

Wer damit leben kann und die PIRs nicht (nur) für Alarmzwecke verwendet, der ist bei diesen Geräten wunderbar aufgehoben. Ich verwende die Bewegungsmelder beispielsweise als Nachtlicht. Ihr werdet sicherlich noch andere Ideen haben.

Abhilfe:
In der config.txt auf der SD-Karte folgenden Eintrag machen:


arm_freq=1000
core_freq=500
sdram_freq=500
over_voltage=6

Danach sind die Fehlermeldungen im Log verschwunden, ohne Auswechseln der SD-Karte. Die SD-Karte ist also nicht defekt. Wichtig: Hier sollte man passende Kühlkörper für den Raspberry Pi kaufen, zum Beispiel diese hier: Kühlkörper für Raspberry Pi (3er Set passive Kühler) . Einfach auf dem Prozessor aufkleben und der Prozessor wird nur behagliche 55 Grad warm.

Die mobile Version verlassen