Raspberry Pi als Türöffner – Relais Modul schalten – Teil 2

raspberry.tips
raspberry.tips - Raspberry.Tips - Projekte, Tutorials und News rund um den Mini-Computer Raspberry Pi

Nachdem nun unsere Schaltung soweit fertig ist und getestet wurde können wir uns der Software zum Steuern des Relais widmen. Da ich plane meinen Pi3 nicht nur als Türöffner zu verwenden, sondern weitere HomeMatic Komponenten anzusteuern ist die Auswahl der Software zur Steuerung der Relais GPIOs via Webseite recht eingeschränkt.

Steuerungssoftware

Auch weiterhin fehlt eine richtige Alternative zu FHEM für die Hausautomatisierung, daher verwende ich auch für dieses Projekt die zwar recht komplizierte aber modular erweiterbare Automatisierungslösung FHEM. Die aktuelle Version ist die 5.7 vom 15.11.2015.

Wer die Grundeinrichtung auf seinem Raspberry Pi noch erledigen muss kann hierzu die Einsteiger-Tutorials verwenden.

FHEM installieren

Die Installation von FHEM ist, da es Debian Pakete gibt, recht einfach. Als erstes aktualisieren wir unser System und installieren Perl, auf welchem FHEM basiert. Mit einem Reboot aktivieren wir die neue Firmware.

sudo apt-get update & sudo apt-get upgrade
sudo rpi-update
sudo apt-get install perl libdevice-serialport-perl libio-socket-ssl-perl libwww-perl python-dev python-rpi.gpio 
sudo reboot

Dann holen wir uns das FHEM 5.7 Installationspaket von der Webseite

wget http://fhem.de/fhem-5.7.deb

Die Installation von FHEM starten wir dann mit folgendem Kommando

sudo dpkg -i fhem-5.7.deb

Wenn die Installation erfolgreich durchgelaufen ist könnt ihr die FHEM Webseite über den Browser eures Rechners oder vom Raspberry Pi aufrufen, ersetzt ggf. die IP-Adresse mit der eures PIs (ifconfig gibt die IP aus).

  • Von eurem Rechner: http://raspberrypi:8083/fhem oder http://<IP-Adresse>:8083/fhem
  • Vom Raspberry Pi Desktop: http://localhost:8083/fhem

FHEM Webseite

FHEM absichern

Bei so einem sensiblen Aufgabenbereich wie der Türöffnung sollte euer Raspberry Pi zwinged abgesichert sein, passende Tutorials findet ihr hier:

  • Raspberry Pi absichern
  • Passwort des Benutzers Pi ändern
  • Firewall Iptables unter Raspbian einrichten (später nach der Einrichtung von FHEM)

Ebenfalls muss natürlich die FHEM Installation entsprechend abgesichert werden, das passiert indem wir den Zugang zur Webseite mit einem Benutzer und Passwort absichern. Es gibt verschiedene Seiten die wir absichern müssen.

  • URL für den Smartphone Zugriff – http://raspberrypi:8084/fhem
  • URL für den Zugriff via normalem Browser – http://raspberrypi:8083/fhem
  • URL für den Zugriff via Tablet – http://raspberrypi:8085/fhem

Wir kodieren nun in einer SSH Sitzung auf unserem RasPi den Benutzer und das Passwort im Format <Benutzer>:<Passwort> in einen einfachen Base64 String, ich verwende als Benutzer “raspberrytips” und als Passwort “Passwort“.

echo -n raspberrytips:MeinPasswort| base64

Die Kombination ergibt bei mir “cmFzcGJlcnJ5dGlwczpQYXNzd29ydA==”. Die Einrichtung des Benutzer / Passwort  erledigen wir im Browser

FHEM Kommandozeile

Benutzer Passwort für die Smartphone Seite setzen

attr WEBphone basicAuth cmFzcGJlcnJ5dGlwczpQYXNzd29ydA==

Benutzer Passwort für den normalen Webzugang setzen

attr WEB basicAuth cmFzcGJlcnJ5dGlwczpQYXNzd29ydA==

Benutzer Passwort für den Zugang via Tablet s

attr WEBtablet stylesheetPrefix touchpad
attr WEBtablet basicAuth cmFzcGJlcnJ5dGlwczpQYXNzd29ydA==

Nach einem Neustart fragt euch der Webserver nach eurem Benutzername und Passwort.

shutdown restart

FHEM Telnet absichern

Die Software bringt einen eigenen Telnet Server mit der auf Port 7072 lauscht, ohne Passwort ist das natürlich ein Einfallstor, daher vergeben wir auch hier ein Passwort, bei mir als Beispiel “Passwort”.

attr telnetPort password Passwort

FHEM Tweaks

Da SD-Karten nicht für dauerhafte Schreib- und Lesevorgänge gemacht worden sind (sie gehen schneller kaputt) optimiere ich Raspbian noch mit zwei Einstellungen um unnötiges Schreiben auf die Kartenzu vermeiden.

Ich deaktiviere die SWAP Datei (Auslagerungsdatei für den Arbeitsspeicher)

sudo dphys-swapfile swapoff
sudo dphys-swapfile uninstall
sudo update-rc.d dphys-swapfile remove

Ich verlagere die Verzeichnisse /var/run und /var/log in dem Arbeitsspeicher, hierzu editiere ich die Datei /etc/fstab

sudo nano /etc/fstab

Folgende Zeilen füge ich ans Ende der Datei an

none /var/run tmpfs size=5M,noatime 00
none /var/log tmpfs size=5M,noatime 00

GPIOs mit FHEM steuern

Das Prinzip beim Schalten der GPIO Pins mit FHEM auf dem Raspberry Pi ist recht einfach. Ich verwende hier ein Python Script, ein einfaches Shell Script ist natürlich auch möglich. Wichtig! Das Script muss zu eurem Öffner passen, laut Dokumentation erwartet mein Türöffner einen kurzen Schaltimpuls, er öffnet die Türe dann von selbst. Bei mir muss nicht dauerhaft durchgeschalten werden wie bei klassischen E-Öffnern. Ich habe eine Hörmann Türe mit AutoLock (Selbst-verriegelnd) und Komfortöffner, verbaut ist darin ein “GU-SECURY Automatic mit A-Öffner” der Firma Gretsch-Unitas.

  1. Wir erstellen ein Python Script das unabhängig von FHEM die GPIO schalten kann
  2. Wir legen in FHEM einen Dummy Schalter an welcher das Script aufruft

Dummy Schalter anlegen

Als erstes erstellen wir daher unser Script unter /usr/sbin mit dem Editor Nano

sudo nano /usr/sbin/fhem-tuere.py

Wir fügen dann folgenden Code ein

#!/usr/bin/env python
# Tueroeffner Script fuer SainSmart Relais Modul von www.raspberry.tips
import time
import sys, getopt
import RPi.GPIO as GPIO

def main(argv):

   # Setzt GPIO low (0) oder high (1)
   gpioLowHigh = ''
   # Pin welchen wir ansteuern wollen bei mir 3
   gpioPin = ''
   # Dauer wie lange durchgeschalten werden soll in Sekunden
   gpioPinDuration = ''

   GPIO.setwarnings(False)

   try:
      opts, args = getopt.getopt(argv,"o:g:s:",["gpioOption=","gpioPin=","gpioPinDuration="])
   except getopt.GetoptError:
      print 'test.py -o <gpioOption> -g <gpioPin> -s <gpioPinDuration>'
      sys.exit(2)
   for opt, arg in opts:
      if opt in ("-o", "--gpioOption"):
         gpioLowHigh = arg
      elif opt in ("-g", "--gpioPin"):
         gpioPin = arg
      elif opt in ("-s", "--gpioPinDuration"):
         gpioPinDuration = arg

   # Initialisierung GPIOs im Board Modus und PIN
   GPIO.setmode(GPIO.BOARD)
   GPIO.setup(int(gpioPin), GPIO.OUT)

   # Schalten:
   # LOW = Relais schaltet durch
   # HIGH = Relais schaltet nicht durch - Standart beim SainSmart

   if gpioLowHigh == "0":
      GPIO.output(int(gpioPin), GPIO.LOW)
      time.sleep(int(gpioPinDuration))
      GPIO.output(int(gpioPin), GPIO.HIGH)

   if gpioLowHigh == "1":
      GPIO.output(int(gpioPin), GPIO.HIGH)
      time.sleep(int(gpioPinDuration))

#Aufruf der Main Funktion
if __name__ == "__main__":
   main(sys.argv[1:])

Speichert mit SRG+X, Y und Enter. Dann setzen wir noch +X und machen das Script ausführbar

sudo chmod +x /usr/sbin/fhem-tuere.py

Das Script wird mit zwei Parametern aufgerufen, -g (–gpioPin) für den Pin der geschalten werden soll und -s (–gpioPinDuration) für die Dauer. Zum Testen könnt ihr z.B. Pin 3 insg. 5 Sekunden schalten. Das Klackern des Relais sollte entsprechend zu hören sein.

sudo fhem-tuere.py -o 0 -g 3 -s 5

Nachdem unser Python Script zum Schalten der GPIOs nun funktioniert müssen wir es in FEHM einbauen. Das erfolgt anhand eines Dummy Schalters. Wir fügen als erstes den Benutzer “fehm” zur Gruppe “gpio” hinzu, sonst darf FHEM die GPIOs nicht ansteuern.

sudo adduser fhem gpio

Zum Anlegen des Schalters wechseln wir wieder auf die FHEM Webseite und geben folgendes Kommando ein

define Haustuere dummy

FHEM dummy Schalter

Wir landen auf den Einstellungen des erzeugten Dummy Schalters

FHEM Dummy Einstellungen

  • NAME ist der vergebene Name
  • TYPE ist der Typ des fhem-device, hier dummy.
  • STATE ist der Status des Geräts

Wir ordnen der Haustüre zum einfachen Verwalten noch einen Raum zu. Bei mir wird der Schalter “Haustüre” nun einem zu erstellenden Raum “Flur” zugeordnet

attr Haustuere room Flur

Dann erstellen wir quasi eine Beschreibung für den Schalter. Die erste Zeile hinterlegt eine Aktionen für den Schalter (Öffnen). Die zweite weißt der Aktion Öffnen den Status offen zu. Zusätzlich hinterlegen wir noch Icons für den Schalter und für den Status des Schalters.

attr Haustuere webCmd Oeffnen
attr Haustuere eventMap /Oeffnen:offen

attr Haustuere icon control_building_outside
attr Haustuere devStateIcon offen:fts_door_right_open

Nach einem Klick auf “Save config” und dann auf dem Raum “Flur” sehen wir unseren erstellten Schalter

FHEM Relais Schalter

Schalter Ereignis definieren

Da der Zugriff auf die GPIOs via Python leider root Rechte benötigt müssen wir dem Benutzer FHEM leider noch rechte für das sudo Kommando geben.

sudo nano /etc/sudoers

Ganz unten fügen wir die Zeile ein und speichern mit STRG + X, Y und Enter

fhem ALL=(ALL) NOPASSWD: ALL

Den Schalter haben wir bereits via FHEM eingerichtet, nun müssen wir noch ein Ereignis hinterlegen. Das erstellte Python Script soll mit entsprechenden Parametern aufgerufen werden und die Türe öffnen. Daher Erstellen wir das Ereignis “haustuere_oeffnen, das auf den Tastendruck “Hastuere:Oeffnen” lauscht und unser Python Script ausführt.

define haustuere_oeffnen notify Haustuere:Oeffnen {system('sudo python /usr/sbin/fhem-tuere.py -o 0 -g 3 -s 5&');;}

Nach dem Speichern des Ereignisses durch “Save config” solltet ihr beim Klicken auf “Öffnen” das gewünschte Klicken eures Relais hören. Glückwunsch, jetzt könnt ihr eure Haustüre via Raspberry Pi öffnen!

Relais verkabeln

Als letztes muss noch das gebaute Relais aus dem ersten Teil der Serie mit dem Türöffner verbunden werden, bei mir ist die Verbindung recht simpel, der G-U Autmatic Öffner hat drei Anschlüsse, Plus, Minus und eine Schaltleitung. Wenn zwischen Plus und der Schaltleitung durchgeschalten wird öffnet sich die Haustüre. Meine vorhandene Sprechanlage macht nichts anderes als 12V zwischen Plus und der Schaltleitung durchzuschalten.

Die Lösung ist also recht simpel, wir verbinden Pin 2 und Pin 3 des Relais als parallelen sSchließer zwischen Plus und der Schaltleitung. Vereinfacht dargestellt ergibt sich bei mir folgende Schaltung:

Relais Anschliessen

Einbau in den Sicherungskasten

Den Einbau war nach entfernen der Schutzabdeckung recht einfach, die Hutschienen Gehäuse an die Schiene Klemmen und alles sauber verkabel. Zusätzlich habe ich, da in meinem Sicherungskasten natürlich weder WLAN noch LAN verfügbar war, eine Schuko-Steckdose für Hutschienen besorgt und daran einen Powerline Adapter angeschlossen. Somit hat mein Pi auch im Sicherungskasten Netzwerkzugang.

Zur Optimierung des Powerline habe ich übrigens die Schucko Steckdose auf die Sicherung hängen müssen, auf welcher auch der andere Adapter an meinem Router hing, sonst war keine Übertragung möglich.

raspberry pi im sicherungskasten

Wichtig! Netzspannung ist lebensgefährlich! Lasst die Finger vom Sicherungskasten wenn ihr euch unsicher seit und arbeitet grundsätzlich niemals unter Last!

FHEM Tuning für den Raspberry Pi

Zur Optimierung von FHEM auf dem Raspberry Pi 3 habe ich noch folgende Optionale Konfigurationen erledigt.
Da ich LAN verwende deaktiviere ich WLAN und Bluetooth durch das Eintragen folgender Zeilen in die Datei “/etc/modprobe.d/raspi-blacklist.conf”, das spart etwas Strom.

#wifi	 	 
blacklist brcmfmac	 	 
blacklist brcmutil	 	 
#bt	 	 
blacklist btbcm	 	 
blacklist hci_uart

Um Raspbian für den Dauerbetrieb zu optimieren deaktiviere ich noch swap

sudo dphys-swapfile swapoff	 	 
sudo dphys-swapfile uninstall	 	 
sudo update-rc.d dphys-swapfile remove

und leite durch editieren von /etc/fstab die sehr oft benutzten Verzeichnisse in dem RAM um. Fügt einfach folgende Zeile ans Ende der Datei an.

tmpfs /var/tmp tmpfs nodev,nosuid,size=100M 0 0

Zusätzlich benutze ich in FHEM noch die SYSMON Funktion, um Parameter wie Temperatur, CPU-Frequenz, RAM, Dateisystem auf der SD-Karte bzw. dem ggf. angeschlossenen USB Stick sowie den Datentransfer über Ethernet bzw. ggf. WLAN anzuzeigen. Details gibt es im FHEM WiKi


wallpaper-1019588
I’m Living with an Otaku NEET Kunoichi!? – Trailer stellt Theme-Songs vor
wallpaper-1019588
Hell Teacher: Jigoku Sensei Nube – Neue Infos zum Anime enthüllt
wallpaper-1019588
[Session-Life] Weekly Watched 2024 November
wallpaper-1019588
DIY-Haustierspielzeug: Kreative Ideen, um Deinem Tier Freude und Abwechslung zu bieten