Raspberry Pi als Zahlenschloss: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
Zeile 29: | Zeile 29: | ||
Hinweis: auf der alternativen Beagle Bone Black (BBB) unter Debian fehlt auch die kbd | Hinweis: auf der alternativen Beagle Bone Black (BBB) unter Debian fehlt auch die kbd | ||
:<code>sudo apt-get install kbd</code> | :<code>sudo apt-get install kbd</code> | ||
=== Neuer nicht privilegierter User === | === Neuer nicht privilegierter User === |
Version vom 20. März 2014, 20:38 Uhr
So ein [Raspberry Pi] (RPi) ist ein klasse Universalgerät. In Kombination mit diversen Dingen, wie hier einer Zahlentastatur, wird das ein fertiges FHEM-fähiges Zahlenschloss. Die Gesamtkosten sind sicherlich nicht höher als ein fertiges Gerät kosten würde -- wenn es denn zu kaufen wäre.
Diese Zahlentastatur kann man nicht nur als Schloss, sondern auch zum beliebigen Schalten von Aufgaben verwenden.
Überblick über die Vorgehensweise
- Eine RPi unter Debian Wheezy wird ohne Monitor z.B. an der Haustüre montiert.
- Eine wetterfeste USB-Zahlen-Tastatur wird nach außen geführt.
- Die RPi ist so eingestellt, dass nach dem Booten keine Desktop-Umgebung (Grafik) gestartet wird, sie daher mit der Konsole (/dev/tty1) startet.
- tty1 wird so eingestellt, dass sich automatisch ein nicht privilegierter User einloggt.
- Mit dem Einloggen startet sich ein Shell-Skript, das in einer Endlosschleife Zahlencodes einliest und das Ergebnis an FHEM schickt (FHEM muss nicht auf dem selben Rechner laufen)
- FHEM schaltet mit dem als dummy-Device angelegten Zahlencode über notify beliebige Anwendungen/Logiken.
Sicherheit
Für professionelle Aufgaben ist das nicht der Standard, den man erwarten würde.
- eine RPi ist auch nur ein Rechner und kann abstürzen
- eine USB-Tastatur vor die Haustür zu verlegen ist auch nicht jedermanns Sache. Eine USB-Buchse sollte auf jeden Fall nicht erreichbar sein, ein USB-Keylogger wäre sonst schnell installiert.
- wenn man diese Lösung zum Schalten von sicherheitskritischen Dingen, wie der Keymatic (Haustüre) oder der Alarmanlage verwendet, sollte man wissen, was man tut.
Benötigte Hardware
Analog zur NFC-Variante Raspberry Pi & NFC benötigt man anstatt NFC nur eine 8-Euro USB-Zahlentastatur. Für diesen Einsatzzweck eignet sich die Keysonic ACK-118 BK Numpad ([1]). Sie ist komplett in Silikon eingearbeitet und somit für den Außenbereich geeignet. Bei der Bestellung darauf achten, dass es sie in grau und in schwarz gibt.
Ganz edel: die vandalensichere und wetterfeste (IP65) Edelstahltastatur EKM-15 [2] kostet inkl. Mwst- und Versand 119.-EUR (Stand März 2014):
Betriebssystem/Shell-Skript auf RPi
Zusätzliche Software
Aufbauend auf der oben genannten NFC-Variante (ohne NFC-Teil) wird nur das Paket mingetty benötigt
sudo apt-get install mingetty
Hinweis: auf der alternativen Beagle Bone Black (BBB) unter Debian fehlt auch die kbd
sudo apt-get install kbd
Neuer nicht privilegierter User
Es werden nicht viele Rechte benötigt. Ein einfacher User, der keinen besonderen Gruppen angehört, reicht aus.
sudo useradd -m rpi
Dieser soll die Bash als Standardshell bekommen.
/etc/passwd
alt
rpi:x:1002:1003::/home/rpi:/bin/sh
neu
rpi:x:1002:1003::/home/rpi:/bin/bash
Automatisches Login
Beim Standard-Loginprogramm kann man sich nicht automatisch einloggen. Daher wird in der /etc/inittab das Standard getty gegen mingetty für tty1 ausgetauscht.
alt
1:2345:respawn:/sbin/getty --noclear 38400 tty1
neu
1:2345:respawn:/sbin/mingetty --autologin rpi --noclear tty1
Starten des Einlese-Skriptes
Am einfachsten ändern wir die /home/rpi/.bashrc
Einfach am Ende folgende Zeilen einfügen:
# Codeschloss fuer fhem
/usr/local/bin/kbd2fhem.sh
Einleseskript kbd2fhem.sh
/usr/local/bin/kbd2fhem.sh
#!/bin/bash # provided by Martin Haas 3/2013 # Skript, um Zahleneingaben von Tastatur an FHEM zu schicken FhemIP="192.168.0.x" LogFile="/home/rpi/kbd2fhem.log" while true do # NumLock vorsorglich aktivieren /usr/bin/setleds -D +num < /dev/tty1 # Zahlencode einlesen printf "Zahlencode: " read code # Eingabe echo 'Eingabe: '$code # nur Zahlen zulassen (nicht alles wird abgefangen) code=$(echo $code | tr -d "[:alpha:][:space:][:cntrl:][:punct:]äüöß") echo 'Verwendeter Zahlencode: '$code # Um prellende/fehlbediente Tastaturen auszuschliessen, wird keine Doppelzahl # akzeptiert. Beispiel: aus 33335533113 wird 35313 finalcode=${code:0:1} while [[ ${#code} -gt '' ]] do last=${code:0:1} code=${code/${code:0:1}} next=${code:0:1} [[ $next != $last ]] && finalcode=$finalcode${code:0:1} done # fuer FHEM vorbereiten code='kbd'$finalcode # nur bei erkanntem Zahlencode verschicken [[ $finalcode != '' ]] && echo "set $code irgendwas" | nc -w5 $FhemIP 7072 # ...aber alles loggen echo "`date`: $code detected" >>$LogFile # optisches Feedback /usr/bin/setleds -D -num < /dev/tty1 #NumLock-LED kurz ausschalten sleep 1 done
Das Skript muss ausführbar sein
sudo chmod +x /usr/local/bin/kbd2fhem.sh
Nach dem nächsten Booten ist die RPi bereit Zahlencodes an FHEM zu schicken.
FHEM vorbereiten
Zahlencode einem Dummy zuordnen
Beispiel-Eintrag in der fhem.cfg
# Keyboard. Eingegebener Zahlencode: 12345 (Beispiel) define kbd12345 dummy define kbdnot01 notify kbd12345 set lampe toggle
FHEM-Zugriff von extern
Sollte auf der RPi nicht auch FHEM laufen, so muss FHEM den Remote-Zugriff erlauben: Eintrag in fhem.cfg
define telnetPort telnet 7072 global
Hilfe/Support
- Fragen werden gerne im FHEM-Forum auf http://forum.fhem.de beantwortet.
- Für Feedback ist dieser Beitrag im Forum vorgesehen.