Raspberry Pi als Zahlenschloss: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „= RPi mit einer Zahlentastatur schaltet FHEM-Aufgaben = So eine RPi ist ein klasse Universalgerät. In Kombination mit diversen Dingen, wie hier einer Zahlenta…“) |
Keine Bearbeitungszusammenfassung |
||
(22 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
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. | |||
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. | 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ür montiert. | |||
= Überblick über die Vorgehensweise = | |||
* Eine RPi unter Debian Wheezy wird ohne Monitor z.B. an der | |||
* Eine wetterfeste USB-Zahlen-Tastatur wird nach außen geführt. | * Eine wetterfeste USB-Zahlen-Tastatur wird nach außen geführt. | ||
* | * Der RPi ist so eingestellt, dass nach dem Booten keine Desktop-Umgebung (Grafik) gestartet wird, er daher mit der Konsole (/dev/tty1) startet. | ||
* tty1 wird so eingestellt, dass sich automatisch ein nicht privilegierter User einloggt. | * 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) | * 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. | * FHEM schaltet mit dem als dummy-Device angelegten Zahlencode über notify beliebige Anwendungen/Logiken. | ||
== Sicherheit == | |||
= Sicherheit = | |||
Für professionelle Aufgaben ist das nicht der Standard, den man erwarten würde. | 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 RPi ist auch nur ein Rechner und kann abstürzen | ||
* eine USB-Tastatur vor die | * 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 | * wenn man diese Lösung zum Schalten von sicherheitskritischen Dingen, wie der [[HM-SEC-KEY KeyMatic|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 handeslübliche 8-Euro USB-Zahlentastatur. Diese ist optional komplett in Silikon eingearbeitet und somit für den Außenbereich geeignet. | |||
Ganz edel: die vandalensichere und wetterfeste (IP65) '''[http://www.va-tastatur.de/download/tastaturen/Viscotech-Datenblatt-EKM-15.pdf Edelstahltastatur EKM-15]''' 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 | |||
:<code>sudo apt-get install mingetty</code> | |||
Hinweis: auf dem alternativen Beagle Bone Black (BBB) unter Debian fehlt auch die kbd | |||
:<code>sudo apt-get install kbd</code> | |||
=== Neuer nicht privilegierter User === | |||
Es werden nicht viele Rechte benötigt. Ein einfacher User, der keinen besonderen Gruppen angehört, reicht aus. | |||
:<code>sudo useradd -m rpi</code> | |||
Dieser soll die Bash als Standardshell bekommen. | |||
''/etc/passwd'' | |||
alt | |||
:<code>rpi:x:100x:100x::/home/rpi:/bin/sh</code> | |||
neu | |||
:<code>rpi:x:100x:100x::/home/rpi:/bin/bash</code> | |||
== | === Automatisches Login === | ||
Bei neueren Raspberrys muss eingestellt werden, dass sie nicht mit einer Desktop-Umgebung starten, sondern mit der Textconsole/CLI (tty1). | |||
==== Raspberry Boot mit Console einstellen ==== | |||
Als root Programm "raspi-config" starten. Einstellung: ==> Boot Options ==> Desktop / CLI ==> Console Autologin Text console ==> save ==> reboot | |||
Hinweis (11/18): neuere Linuxe mit systemd scheinen "Console Autologin Text console" nicht mehr zu benötigen. CLI Console muss aber auf jeden Fall eingestellt sein. | |||
==== Automatisches Login mit Console ==== | |||
Beim Standard-Loginprogramm kann man sich nicht automatisch einloggen. Daher wird das Standard getty gegen mingetty für tty1 ausgetauscht. | |||
'''Ältere''' System V-Systeme. Datei '''/etc/inittab''': | |||
/ | alt | ||
:<code>1:2345:respawn:/sbin/getty --noclear 38400 tty1</code> | |||
neu | |||
:<code>1:2345:respawn:/sbin/mingetty --autologin rpi --noclear tty1</code> | |||
Bei '''neueren''' systemd-Systemen muss stattdessen die Datei | |||
'''/etc/systemd/system/getty@tty1.service.d/autologin.conf''' | |||
mit folgendem Code angelegt werden: | |||
:<code>[Service]</code> | |||
:<code>ExecStart=</code> | |||
:<code>ExecStart=-/sbin/mingetty --autologin rpi --noclear %I 115200,38400,9600 linux</code> | |||
== Starten des Einlese-Skriptes == | === Starten des Einlese-Skriptes === | ||
Am einfachsten ändern wir die /home/rpi/.bashrc | Am einfachsten ändern wir die /home/rpi/.bashrc | ||
Einfach am Ende folgende Zeilen einfügen: | Einfach am Ende folgende Zeilen einfügen: | ||
:<code># Codeschloss fuer fhem</code> | |||
:<code>/usr/local/bin/kbd2fhem.sh</code> | |||
=== SUDO für rpi einstellen === | |||
Je nach USB-Nummerntastatur ist es notwendig, dass NUMLOCK eingeschaltet wird. | |||
Das erledigt user rpi über sudo | |||
Als root: | |||
:<code>visudo</code> | |||
z.B. folgendes eintragen: | |||
:<code>rpi ALL=(ALL) NOPASSWD: /usr/bin/setleds</code> | |||
== Einleseskript kbd2fhem.sh == | === Einleseskript kbd2fhem.sh === | ||
/usr/local/bin/kbd2fhem.sh | /usr/local/bin/kbd2fhem.sh | ||
<nowiki>#!/bin/bash | <nowiki>#!/bin/bash | ||
# provided by Martin Haas 3/2013 | # provided by Martin Haas 3/2013 | ||
# 11/18: an moderneres Linuxe angepasst | |||
# Skript, um Zahleneingaben von Tastatur an FHEM zu schicken | # Skript, um Zahleneingaben von Tastatur an FHEM zu schicken | ||
FhemIP="192.168.0.x" | FhemIP="192.168.0.x" | ||
Zeile 89: | Zeile 102: | ||
while true | while true | ||
do | do | ||
# NumLock vorsorglich aktivieren | # NumLock vorsorglich aktivieren (siehe visudo oben) | ||
/usr/bin/setleds -D +num < /dev/tty1 | sudo /usr/bin/setleds -D +num < /dev/tty1 | ||
# Zahlencode einlesen | # Zahlencode einlesen | ||
printf "Zahlencode: " | printf "Zahlencode: " | ||
Zeile 100: | Zeile 113: | ||
echo 'Verwendeter Zahlencode: '$code | echo 'Verwendeter Zahlencode: '$code | ||
# Um prellende Tastaturen auszuschliessen, wird keine Doppelzahl | # Um prellende/fehlbediente Tastaturen auszuschliessen, wird keine Doppelzahl | ||
# akzeptiert. Beispiel: aus | # akzeptiert. Beispiel: aus 33335533113 wird 35313 | ||
finalcode=${code:0:1} | finalcode=${code:0:1} | ||
Zeile 117: | Zeile 130: | ||
# nur bei erkanntem Zahlencode verschicken | # nur bei erkanntem Zahlencode verschicken | ||
[[ $finalcode != '' ]] && | [[ $finalcode != '' ]] && | ||
echo "set $code irgendwas" | nc - | echo "set $code irgendwas" | nc -w3 $FhemIP 7072 | ||
# ...aber alles loggen | # ...aber alles loggen | ||
Zeile 123: | Zeile 136: | ||
# optisches Feedback | # optisches Feedback | ||
/usr/bin/setleds -D -num < /dev/tty1 #NumLock-LED kurz ausschalten | sudo /usr/bin/setleds -D -num < /dev/tty1 #NumLock-LED kurz ausschalten | ||
sleep 1 | sleep 1 | ||
done</nowiki> | done</nowiki> | ||
Das Skript muss ausführbar sein | Das Skript muss ausführbar sein | ||
:<code>sudo chmod +x /usr/local/bin/kbd2fhem.sh</code> | |||
Nach dem nächsten Booten ist die RPi bereit Zahlencodes an FHEM zu schicken. | Nach dem nächsten Booten ist die RPi bereit Zahlencodes an FHEM zu schicken. | ||
Kurtest: mit | |||
:<code>ps -ef | grep kbd</code> | |||
sollte der laufende Prozess /usr/local/bin/kbd2fhem.sh sichtbar sein. | |||
== FHEM vorbereiten == | |||
= FHEM vorbereiten = | === Zahlencode einem Dummy zuordnen === | ||
== Zahlencode einem Dummy zuordnen == | Beispiel-Eintrag in der fhem.cfg | ||
Beispiel Eintrag in der fhem.cfg | |||
<nowiki># Keyboard. Eingegebener Zahlencode: 12345 (Beispiel) | <nowiki># Keyboard. Eingegebener Zahlencode: 12345 (Beispiel) | ||
Zeile 141: | Zeile 155: | ||
define kbdnot01 notify kbd12345 set lampe toggle</nowiki> | define kbdnot01 notify kbd12345 set lampe toggle</nowiki> | ||
=== FHEM-Zugriff von extern === | |||
== FHEM-Zugriff von extern == | |||
Sollte auf der RPi nicht auch FHEM laufen, so muss FHEM den Remote-Zugriff erlauben: | Sollte auf der RPi nicht auch FHEM laufen, so muss FHEM den Remote-Zugriff erlauben: | ||
Eintrag in fhem.cfg | Eintrag in fhem.cfg | ||
:<code>define telnetPort telnet 7072 '''global'''</code> | |||
== Hilfe/Support == | |||
* Fragen werden gerne im FHEM-Forum auf [http://forum.fhem.de http://forum.fhem.de] beantwortet. | |||
* Für Feedback ist {{Link2Forum|Topic=11521|Message=67529|LinkText=dieser Beitrag}} im Forum vorgesehen. | |||
= Hilfe/Support = | |||
Fragen werden gerne im FHEM-Forum auf [http://forum.fhem.de http://forum.fhem.de] beantwortet. | |||
[[Kategorie:HOWTOS]] | |||
[[Kategorie:Raspberry Pi]] |
Aktuelle Version vom 24. November 2018, 15:29 Uhr
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ür montiert.
- Eine wetterfeste USB-Zahlen-Tastatur wird nach außen geführt.
- Der RPi ist so eingestellt, dass nach dem Booten keine Desktop-Umgebung (Grafik) gestartet wird, er 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 handeslübliche 8-Euro USB-Zahlentastatur. Diese ist optional komplett in Silikon eingearbeitet und somit für den Außenbereich geeignet.
Ganz edel: die vandalensichere und wetterfeste (IP65) Edelstahltastatur EKM-15 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 dem 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:100x:100x::/home/rpi:/bin/sh
neu
rpi:x:100x:100x::/home/rpi:/bin/bash
Automatisches Login
Bei neueren Raspberrys muss eingestellt werden, dass sie nicht mit einer Desktop-Umgebung starten, sondern mit der Textconsole/CLI (tty1).
Raspberry Boot mit Console einstellen
Als root Programm "raspi-config" starten. Einstellung: ==> Boot Options ==> Desktop / CLI ==> Console Autologin Text console ==> save ==> reboot
Hinweis (11/18): neuere Linuxe mit systemd scheinen "Console Autologin Text console" nicht mehr zu benötigen. CLI Console muss aber auf jeden Fall eingestellt sein.
Automatisches Login mit Console
Beim Standard-Loginprogramm kann man sich nicht automatisch einloggen. Daher wird das Standard getty gegen mingetty für tty1 ausgetauscht.
Ältere System V-Systeme. Datei /etc/inittab:
alt
1:2345:respawn:/sbin/getty --noclear 38400 tty1
neu
1:2345:respawn:/sbin/mingetty --autologin rpi --noclear tty1
Bei neueren systemd-Systemen muss stattdessen die Datei
/etc/systemd/system/getty@tty1.service.d/autologin.conf
mit folgendem Code angelegt werden:
[Service]
ExecStart=
ExecStart=-/sbin/mingetty --autologin rpi --noclear %I 115200,38400,9600 linux
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
SUDO für rpi einstellen
Je nach USB-Nummerntastatur ist es notwendig, dass NUMLOCK eingeschaltet wird. Das erledigt user rpi über sudo
Als root:
visudo
z.B. folgendes eintragen:
rpi ALL=(ALL) NOPASSWD: /usr/bin/setleds
Einleseskript kbd2fhem.sh
/usr/local/bin/kbd2fhem.sh
#!/bin/bash # provided by Martin Haas 3/2013 # 11/18: an moderneres Linuxe angepasst # 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 (siehe visudo oben) sudo /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 -w3 $FhemIP 7072 # ...aber alles loggen echo "`date`: $code detected" >>$LogFile # optisches Feedback sudo /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.
Kurtest: mit
ps -ef | grep kbd
sollte der laufende Prozess /usr/local/bin/kbd2fhem.sh sichtbar sein.
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.