Switch-Pi: Relais (Lampen, LED, …) am Raspberry einfach schalten und in openHAB integrieren…

Nachdem ich kürzlich meine Steinel L 620 Cam wieder zurückgeschickt habe ist mein aktuelles Bastelprojekt, meine bestehende Außenlampe Smart zu machen und um Kamera, Bewegungsmelder und Licht nachzurüsten. Da ich z.B. die Außenlampe auch über openHAB schalten möchte (die aber via Relais vom Raspberry angesteuert wird) soll das keine Insel-Lösung werden, die für sich alles kann, sie soll modular aufgebaut sein und mehrere Systeme sollen darauf zugreifen können.

Erster Schritt: Ein Relais, das an einen Rasbperry angeschlossen ist, soll remote geschalten werden können und auch in Openhab integriert werden. Damit soll dann die Birne aktiviert / deaktiviert werden können…

Der Python-Part…

Etwas Programmierung…

Das Relais ist an einem bestimmten PIN meines Rasbperry Zero angeschlossen, konkret PIN 22. Um dieses nicht nur aus einem anderen Python-Script, also dem, das die Kameraaufnahmen später verwalten soll, sobald Bewegung vor der Haustüre erkannt wird, nutzen zu können, soll es per Web-Server (ziemlich ähnlich zu SonOff-Geräten, die ich im Einsatz habe) steuerbar sein.

Dazu habe ich ein Python-Script erstellt, welches mit Systemstart automatisch geladen wird und auch einem definierbaren Port (bei mir 80) einen in Python mit enthaltenen Webserver lauschen lässt, der auf bestimmte Kommandos hört:

Für Code hier klicken: switch-pi.py auf github

Soll es auf einem anderen Port (z.B. 123) lauschen, einfach als erstes Argument beim Programmstart den Port mit übergeben:

sudo python3 /switch-pi.py 123

Um das Ganze auch beim Systemstart schnell geladen zu haben, so dass der Webserver immer bereit steht, genügt ein @reboot-Eintrag in der Crontab und ein Neustart des Raspberrys. Den Pfad natürlich entsprechend anpassen! Das langwierige Erstellen eines systemd-Dienstes / Startup-Scripts wollte ich mir ersparen.

@reboot sudo /usr/bin/python3 /home/pi/switch-pi/switch-pi.py

Bedienung des Webservers

Wird der Webserver aufgerufen, zeigt er auch gleich selbst an, wie er bedient werden will.

Output des Webservers ohne Parameter. 1 = HIGH, 2 = LOW

Ob und wie das Ganze funktioniert, kann man auch direkt per Browseraufruf testen.

Der openHAB-Part

in openhab habe ich dann ein Item zum Steuern der Lampe integriert, welches via http dann eben obigen Pfad aufruft.

Damit ich auch Änderungen am Status der Lampe mitbekomme, die nicht via openhab geschalten wurden, gibt es ein zweites „Dummy“-Item, welches ebenso per http alle 15 Sekunden den Status der Lampe abfragt.

Damit dann ggf. der geänderte Status auch in Openhab übertragen wird, gibt es noch eine kleine Rule dazu. Wer hier einen kombinierten und einfacheren Ansatz für mich hat – bitte gerne als Kommentar!

Item-Datei

Switch  EG_LICHT_CAM_PI    "Licht Eingang Cam-Pi" <light> {http=">[ON:GET:http://cam-pi.fritz.box/gpio/SET/21/0] >[OFF:GET:http://cam-pi.fritz.box/gpio/SET/21/1]"}
Number  EG_LICHT_CAM_PI_GET "Ret. Val [%d]" (debug) {http="<[http://cam-pi.fritz.box/gpio/GET/21:15000:REGEX((.*))]"}

Rules-datei

rule "Wert außerhalb Openhab geändert"
when 
    Item EG_LICHT_CAM_PI_GET changed
then 
    logInfo("rules", "rule switch-pi triggered")
    if ((EG_LICHT_CAM_PI_GET.state as DecimalType == 1) && (EG_LICHT_CAM_PI.state != OFF)) {
        EG_LICHT_CAM_PI.sendCommand(OFF)
    } 
    if ((EG_LICHT_CAM_PI_GET.state as DecimalType == 0) && (EG_LICHT_CAM_PI.state != ON)) {
        EG_LICHT_CAM_PI.sendCommand(ON)
    }
end

Nun viel Spaß damit.. Anmerkungen und Verbesserungsvorschläge gern als Kommentar!

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.