Fhem: preiswerter 433 MHz Funkbewegungsmelder PIR

Update 25.01.2015 Blog-Beitrag erweitert

pir 433 mhz robins blog

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:

  • Unglaublich preiswert
  • im Haus einfach zu installieren, ggf. eingebaute Antenne rausfahren und gut is.
  • Meine getesteten Bewegungsmelder haben einen guten Erkennungsradius
  • Reichweite ungefähr 30m (durch 2 dicke Wände hindurch).
  • gesendet wird auf der üblichen 433 MHz Frequenz, dadurch entsteht auf der Empfängerseite kein großer Aufwand. Ich habe zum besseren Empfang einen Arduino Nano benutzt und einen 433 MHz Superhet-Empfänger
  • Batterie: 9V, sollte 6 bis 12 Monate je nach Anzahl der Alarme funktionieren
  • Nachteil: Auch wenn von der Software aus der Alarm abgeschaltet ist, ist der Sensor aktiv. Das zieht natürlich an der Batterie. Bei mir hält die Batterie mittlerweile 3 Monate, täglich 30 bis 40 Auslösungen von „Alarm“
433pir

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.

433mhz rxb6Falls 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.

 

pir 433 mhz robins blogIn 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.

433mhzempfaengerdontuseWichtig: 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.

  • In der Konfig: attr autocreate disable 0 stellen
  • Im PIR einen Alarm ausführen
  • Konfig abspeichern.
  • ggf. autocreate mit disable 1 wieder abschalten.

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.

pir 433 mhz 3 mit arduino robins blog

pir 433 mhz 2 mit arduino robins blog

433mhz pir robins blog

433mhz pir obins blog 2

War der Beitrag für Dich sinnvoll?
  • Langweilig (1)
  • Schlecht (3)
  • Nützlich (4)
  • Genial (6)
  • Interessant (9)
Dieser Beitrag wurde unter Fhem-Hausautomation, Raspberry Pi abgelegt und mit , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

69 Kommentare zu Fhem: preiswerter 433 MHz Funkbewegungsmelder PIR

  1. Christian sagt:

    Hallo Robin,

    auch ich suche nach einer Lösung meine Intertechno Fernbedienungen mit FHEM einzusetzen und die Tasten für FHEM Aktionen frei belegen zu können.

    Konntest du damals (dieser Beitrag ist ja schon etwas älter) noch diesbezüglich etwas heraus finden oder gar bauen? Dein Youtube Video (https://www.youtube.com/watch?v=sHT_ubQH4nk) klingt ja vielversprechend. Bin dann aber in diesen Blogbeitrag weitergeleitet worden.

    Danke dir.

    Gruß
    Christian

  2. Noice sagt:

    Hallo tim,

    versuch dich mal mit dem signalduino auf cul basis. Das sollte gehen.

    Grüsse Noice

  3. Robin sagt:

    Hallo Tim,
    ich weiss jetzt nicht wie das mit dem CUL geht, bei mir geht das mit

    define AliRF1 AliRF *****

    LG
    /robin

  4. Tim Werner sagt:

    hi leute,
    Ich habe mir einen PIR wie oben im Bild besorgt, dieser wird von meinem 433mhz CUL auch anerkannt, per autocreate legt fhem das gerät nun aber als IT Switch an und im anschluss bekomme ich im event monitor einen Unknown Code ****** angezeigt.
    kann jemand helfen ?

  5. Robin sagt:

    Hallo Thomas,

    damals bei mir, ich habe aber keine mehr, nur die 433 MHz Empfänger, die nur eine geringe Reichweite haben.

    LG
    /robin

  6. Thomas sagt:

    Hallo, kann man irgendwo auch einen passenden 433MHz Empfänger kaufen der keine 2 Monate Lieferzeit hat?
    Grüße Thomas

  7. Robin sagt:

    Hallo Noice,

    danke für die Info. Ich mache nichts mit CULs, aber für die anderen Blog-Leser sicherlich interessant.

    LG
    /robin

  8. Robin sagt:

    Hallo Tim,

    im Grunde soll nur der Code vom PIR gesnifft werden. Der PIR sendet immer den gleichen Code bei Alarm aus.
    Diese Nummer ist „einzigartig“, also jeder PIR, den Du kaufst hat eine andere Nummer.
    Auf die Nummer kann Fhem später reagieren.

    LG
    /robin

  9. Tim sagt:

    Hallo Robin,

    Ich verstehe diesen teil der Anleitung nicht ganz:
    -In der Konfig: attr autocreate disable 0 stellen
    -Im PIR einen Alarm ausführen
    -Konfig abspeichern.
    -ggf. autocreate mit disable 1 wieder abschalten.

    können sie mir dabei helfen?

  10. noice sagt:

    Hallo robin,

    Erstmal super Blog den du hier schreibst.

    Zur Info:
    Nach dem aktuellem fhem update funktionieren diese Bewegungsmelder auch mit einem CUL, Fhemduino oder signalduino.

    Grüsse aus Bayern

  11. DJ sagt:

    Hallo.
    Diese 433Mhz Möglichkeit ist, wie ich das sehe, nur auf diese speziellen PIR Sender bezogen.
    Ich habe kleine Sender mit Arduino gebaut, die mir aber nur fünfstellige Zahlen senden.
    Erste Stelle ist z.B. die Senderkennung, danach folgt Temperatur und Luftfeuchtigkeit.
    Auch werden hier noch besondere Zahlen gesendet für Alarm usw.
    Wie kann ich diese Zahlen in FHEM auswerten ?
    Kenne mich mit FHEM leider nicht so gut aus.

  12. Robin sagt:

    Hallo Heiner,
    du brauchst nur die 5V , GND und Data, sind dort mehrfach vorhanden. Ich teste das immer mit einem Sketch von RCSwitch, z.b. mit so einem Sketch: https://github.com/sui77/rc-switch
    Dann kannst du schon sehen, ob im Serial Monitor was ankommt, wenn du beispielsweise auf die Fernbedienung von Deinen Baumarkt-Steckdosen tippst. Der oben beschriebene Funkbewegungsmelder PIR sendet bei Bewegung eine Nummer aus, und zwar immer die gleiche. Diese ist nicht Intertechno-Kompatibel. Wäre ja auch unlogisch, sonst könnte man mit einer Fernbedienungs-Kombi ja eine Bewegungsalarm auslösen.

    LG
    /robin

  13. Heiner sagt:

    Hi,
    der Superheterodyne Reciever hat effectiv 8 PIN’s welche werden genutzt? Beide 5V und beide GND sowie Antenne und DATA?

    So hab ichs verschaltet, geflascht und im Initialised Status in fhem, aber es wird nichts emfangen, nun frage ich mich wie ich das Ding testen kann?

  14. Robin sagt:

    Hallo Gunnar,
    der 433 MHz Receiver Data-Pin kommt an Pin 2, ansonsten im Quellcode schauen
    mySwitch.enableReceive(0); // Receiver on interrupt 0 => that is pin #2

    LG
    /robin

  15. Gunnar sagt:

    Hallo Robin,

    hast Du einen Plan für mich, welche Pin wohin verbunden werden? 5V und Ground vom Empfänger habe ich. Allerdings liegt hier ein Empfänger und ein Sender rum. Bin noch nicht so bewandert bei Arduino. Danke!

    Gruß, Gunnar

  16. nisi80 sagt:

    Hallo Marc,

    kann man die PIRs auch mit einem Arduino und der CUL-Firmware nutzen?

  17. Marc sagt:

    Er erkennt: AliRF_008071

    Wie kann ich jetzt damit die Funksteckdose1 definieren ?

    define Funksteckdose1 AliRF_008071

    Das geht nicht ? Und ich finde leider kein Beispiel?

    Gruß Marc

  18. Robin sagt:

    Hallo Marc,

    ich würde auf der Fernbedienung eine Taste zur Funksteckdose drücken und verbose auf 5 stellen. Dann mal sehen, was ankommt.

    LG
    /robin

  19. Marc sagt:

    Hallo Robin, ich bin noch am verzweifeln. Ich würde gerne fhem nutzen um 433Mhz Tür Kontakte und Bewegungsmelder zu visualisieren und Funksteckdosen ( HX2272 ) entsprechend zu schalten. Mein aktuelles System: raspberry v1 an fritzbox mit installiertem fhem. Extern 1x Arduino mega +eth shield ( geht ). 1x Arduino nano mit dem sketch zum Daten an usb weiter reichen ( geht / open ). Mein Problem: ich verstehe nicht was ich machen muss um zb. einen code siehe log:
    016.01.08 18:42:09 5: arduino dispatch OK 5 329041 1
    2016.01.08 18:42:09 0: ERROR: Cannot autoload AliRF
    2016.01.08 18:42:09 5: Triggering arduino (1 changes)
    2016.01.08 18:42:09 5: Notify loop for arduino UNKNOWNCODE OK 5 329041 1
    2016.01.08 18:42:09 3: arduino: Unknown code OK 5 329041 1, help me!
    2016.01.08 18:42:10 5: JeeLink/RAW: /OK 5 3290
    2016.01.08 18:42:10 5: JeeLink/RAW: OK 5 3290/41 1

    also damit eine entsprechende Aktion auszuführen?!

    —-

    Hallo Marc,

    das sagt doch alles: 2016.01.08 18:42:09 0: ERROR: Cannot autoload AliRF
    36_AliRF.pm Modul fehlt. Ansonsten sieht es gut aus.
    Ich habe zufällig heute einen neuen PIR in Betrieb genommen. Im Log muss dann sowas kommen:

    2016.01.08 13:14:42 5: JeeLink/RAW: /8550553
    OK
    2016.01.08 13:14:42 5: arduino dispatch 8550553
    2016.01.08 13:14:42 3: arduino: Unknown code 8550553, help me!
    2016.01.08 13:14:42 5: JeeLink/RAW: OK /5 8550553 1

    2016.01.08 13:14:42 5: arduino dispatch OK 5 8550553 1
    2016.01.08 13:14:42 3: AliRF Unknown device 086699, please define it

    dann in fhem sowas eintragen:
    define AliRF5 AliRF 086699
    attr AliRF5 IODev arduino
    define AliRF5_an notify AliRF5:motion.* {\
    Log 2, „Bewegungsmelder 5 ALARM“;;\
    if($DEVICE eq „T“ && $READING eq „lights“ && $VALUE < 14) { fhem("set Schreibtischlampe on-for-timer 60");;}\ fhem("set Pushover1 msg 'Fhem: Alarm ' 'PIR-Sensor 5' '' 0 '' ");;\ } ist nur ein beispiel lg /robin ----- hast du 1 Beispiel für mich? was ich in die fhem kommandozeile eingeben muss? Sagen wir als bsp. ich definiere led13 als Ausgang am Arduino über Firmata und diese led soll an geschaltet werden wenn raw code ankommt: OK 5 329041 1 Ich hoffe du kannst mir helfen. Gruß Marc ---- Hallo Marc, Midnight commander installieren, wenn man sich nicht mit Linux auskennt. Der sieht so aus wie der Norton Commander. Oder Mountain-Duck nehmen. Dann die datei runterladen https://blog.moneybag.de/wp-content/uploads/2016/01/36_AliRF.pm_.txt und in /opt/fhem/Fhem kopieren. (nachher _.txt entfernen)

    LG
    /robin

    —-

    dann schiebe es doch auf einem server und hole es via wget auf dem pi zurück
    ich möchte den Beitrag aber hier abschließen, weil du im vollkommen falschen Thread bist.

    Robin

    Super 1000 Dank 😉
    Es geht jetzt ! Jetzt empfängt er sogar per autocreate . Ich danke dir!

    Dann noch eine Frage wenn ich zb eine funksteckdose anlegen möchte die den empfangscode : 334410 hat was gebe ich ein? Im komandofenster?

    Gruß Marc

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.