Raspberry Pi als Zahlenschloss: Unterschied zwischen den Versionen

Aus FHEMWiki
K (Kategorisiert; weitere kleine Änderungen)
Zeile 1: Zeile 1:
= RPi mit einer Zahlentastatur schaltet FHEM-Aufgaben =
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.
So eine 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.
Diese Zahlentastatur kann man nicht nur als Schloss, sondern auch zum beliebigen Schalten von Aufgaben verwenden.


 
== Überblick über die Vorgehensweise ==
 
= Überblick über die Vorgehensweise =
* Eine RPi unter Debian Wheezy wird ohne Monitor z.B. an der Haustüre montiert.
* 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.
* Eine wetterfeste USB-Zahlen-Tastatur wird nach außen geführt.
Zeile 15: Zeile 11:
* 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 Haustüre 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.
* 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.
* 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 8.-EUR USB-Zahlentastatur. Für diesen Einsatzzweck eignet sich die '''Keysonic ACK-118 BK Numpad'''. Sie ist komplett in Silikon eingearbeitet und somit für den Außenbereich prima geeignet.
Bei der Bestellung darauf achten, dass es sie in grau und in schwarz gibt.
Natürlich kann man auch edle wetterfeste Edelstahl-Tastaturen (möglichst mit Eingabe-Taste) verbauen -- sie kosten aber auch gleich ein Vermögen.


== 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'''. 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.


Natürlich kann man auch edle wetterfeste Edelstahl-Tastaturen (möglichst mit Eingabe-Taste) verbauen - sie kosten aber auch gleich ein Vermögen.


= Betriebssystem/Shell-Skript auf RPi =
== Betriebssystem/Shell-Skript auf RPi ==
== Zusätzliche Software ==
=== Zusätzliche Software ===
Aufbauend auf der oben genannten NFC-Variante (ohne NFC-Teil) wird nur das Paket mingetty benötigt
Aufbauend auf der oben genannten NFC-Variante (ohne NFC-Teil) wird nur das Paket mingetty benötigt
:<code>sudo apt-get install mingetty</code>


<nowiki>sudo apt-get install mingetty</nowiki>
=== Tastaturprellschutz (optional) ===
 
Bei der Zahleneingabe lösen Anfänger schnell ein Tastaturprellen aus. Wir setzen die Tastatur auf maximalen Delay-Wert. Da dies in der Praxis trotzdem evtl. nicht ausreicht, wird ein Tastaturprellen im Skript (s.u.) selbst abgefangen. Insofern ist diese Einstellung hier nur noch optional und für den Fall gedacht, dass man das Skript abändern möchte.
 
== Tastaturprellschutz (optional) ==
Bei der Zahleneingabe lösen Anfänger schnell ein Tastaturprellen aus. Wir setzen die Tastatur auf maximalen Delay-Wert.  
Da dies in der Praxis trotzdem evtl. nicht ausreicht, wird ein Tastaturprellen im Skript (s.u.) selbst abgefangen. Insofern ist diese Einstellung hier nur noch optional und für den Fall gedacht, dass man das Skript abändern möchte.
 
Eingabe in ''/etc/rc.local''in vorletzter Zeile (vor exit 0)


<nowiki>kbdrate -d 1000 /dev/tty1
Eingabe in ''/etc/rc.local'' in der vorletzten Zeile (vor exit 0)
exit 0</nowiki>
:<code>kbdrate -d 1000 /dev/tty1</code>
:<code>exit 0</code>


 
=== Neuer nicht privilegierter User ===
== Neuer nicht privilegierter User ==
Es werden nicht viele Rechte benötigt. Ein einfacher User, der keinen besonderen Gruppen angehört, reicht aus.
Es werden nicht viele Rechte benötigt. Ein einfacher User, der keinen besonderen Gruppen angehört, reicht aus.
:<code>sudo useradd -m rpi</code>


<nowiki>sudo useradd -m rpi</nowiki>
=== Automatisches Login ===
 
 
== 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.
Beim Standard-Loginprogramm kann man sich nicht automatisch einloggen. Daher wird in der /etc/inittab das Standard getty gegen mingetty für tty1 ausgetauscht.
/etc/inittab


alt
alt
 
:<code>1:2345:respawn:/sbin/getty --noclear 38400 tty1</code>
<nowiki>1:2345:respawn:/sbin/getty --noclear 38400 tty1</nowiki>
neu
neu
:<code>1:2345:respawn:/sbin/mingetty --autologin rpi --noclear tty1</code>


<nowiki>1:2345:respawn:/sbin/mingetty --autologin rpi --noclear tty1</nowiki>
=== 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>


<nowiki># Codeschloss fuer fhem
=== Einleseskript kbd2fhem.sh ===
/usr/local/bin/kbd2fhem.sh</nowiki>
 
 
== Einleseskript kbd2fhem.sh ==
/usr/local/bin/kbd2fhem.sh
/usr/local/bin/kbd2fhem.sh


Zeile 127: Zeile 103:
  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>
<nowiki>sudo chmod +x /usr/local/bin/kbd2fhem.sh</nowiki>
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.


 
== FHEM vorbereiten ==
 
=== Zahlencode einem Dummy zuordnen ===
= FHEM vorbereiten =
== Zahlencode einem Dummy zuordnen ==
Beispiel Eintrag in der fhem.cfg
Beispiel Eintrag in der fhem.cfg


Zeile 141: Zeile 114:
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>


define telnetPort telnet 7072 '''global'''
== Hilfe/Support ==
 
* Fragen werden gerne im FHEM-Forum auf [http://forum.fhem.de http://forum.fhem.de] beantwortet.
= Hilfe/Support =
* Für Feedback ist [http://forum.fhem.de/index.php?t=msg&amp;th=11521&amp;goto=67529&amp;rid=196#msg_67529 dieser Beitrag] im Forum vorgesehen.
Fragen werden gerne im FHEM-Forum auf [http://forum.fhem.de http://forum.fhem.de] beantwortet.


Für Feedback ist [http://forum.fhem.de/index.php?t=msg&amp;th=11521&amp;goto=67529&amp;rid=196#msg_67529 dieser Beitrag] im Forum vorgesehen.
[[Kategorie:HOWTOS]]
[[Kategorie:HOWTOS]]
[[Kategorie:Raspberry Pi]]

Version vom 23. September 2013, 08:22 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. 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.

Natürlich kann man auch edle wetterfeste Edelstahl-Tastaturen (möglichst mit Eingabe-Taste) verbauen - sie kosten aber auch gleich ein Vermögen.

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

Tastaturprellschutz (optional)

Bei der Zahleneingabe lösen Anfänger schnell ein Tastaturprellen aus. Wir setzen die Tastatur auf maximalen Delay-Wert. Da dies in der Praxis trotzdem evtl. nicht ausreicht, wird ein Tastaturprellen im Skript (s.u.) selbst abgefangen. Insofern ist diese Einstellung hier nur noch optional und für den Fall gedacht, dass man das Skript abändern möchte.

Eingabe in /etc/rc.local in der vorletzten Zeile (vor exit 0)

kbdrate -d 1000 /dev/tty1
exit 0

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

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 Tastaturen auszuschliessen, wird keine Doppelzahl 
    # akzeptiert. Beispiel: aus 3333553311 wird 3531 
    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