<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://wiki.fhem.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tremor</id>
	<title>FHEMWiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.fhem.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tremor"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Tremor"/>
	<updated>2026-04-14T19:46:31Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Raspberry_Pi_%26_NFC&amp;diff=3933</id>
		<title>Raspberry Pi &amp; NFC</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Raspberry_Pi_%26_NFC&amp;diff=3933"/>
		<updated>2013-12-17T13:07:50Z</updated>

		<summary type="html">&lt;p&gt;Tremor: /* libnfc */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[http://de.wikipedia.org/wiki/Near_Field_Communication &#039;&#039;&#039;NFC (Near Field Communication)&#039;&#039;&#039;] boomt zur Zeit. Wir kennen die Technik bereits von unseren Ausweiskarten, auch der neue Personalausweis hat so einen Chip.&lt;br /&gt;
&lt;br /&gt;
Was die Sicherheit angeht, scheint man sich da ziemlich sicher zu sein. Das wird auch für Zahlungen per NFC-Chip auch in immer mehr Smartphones beworben.&lt;br /&gt;
&lt;br /&gt;
== FHEM-Aufgaben mit passiven NFC-TAGs steuern ==&lt;br /&gt;
Hier soll aufgezeigt werden, wie man relativ günstig einen kompletten NFC-Reader baut, der billige passive NFC-TAGs (ca. 2.-EUR/Stück) einliest und die NFC-ID an FHEM schickt. Auch wird gezeigt, wie FHEM diese verarbeitet.&lt;br /&gt;
Diese NFC-TAGs gibt es als Aufkleber, Schlüsselanhänger, Ausweiskarten. Wer will kann auch sein NFC-taugliches Smartphone einsetzen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;In einer Secure-Anwendung ist eine NFC-ID nur ein Teil des Sicherheitskonzeptes. Hier wird nur die NFC-ID ausgelesen und an FHEM geschickt.&#039;&#039;&#039;&lt;br /&gt;
Wer übrigens nur per NFC-Smartphone per Internet FHEM steuern will, der braucht nur einen eingerichteten FHEM-Server und eine App wie NFC Launcher.&lt;br /&gt;
Alle anderen, die auch Kindern und Smartphones ohne NFC-Chip den Zugang zum NFC-System gewähren wollen, benötigen dagegen einen NFC-Reader (dann mit Aufkleber/Schlüsselanhänger).&lt;br /&gt;
&lt;br /&gt;
Auch mehrere RPi-NFC-Reader sind parallel möglich.&lt;br /&gt;
&lt;br /&gt;
== Sicherheit ==&lt;br /&gt;
Das gesamte [[FS20 Allgemein|FS20-Konzept]] war sicherheitstechnisch noch nie überzeugend. Auch ein [[Raspberry Pi]] ist &amp;quot;nur&amp;quot; ein Rechner und kann auch abstürzen. Das gesamte Konzept hier mit NFC/USB/WLAN ist ebenfalls nichts, was insbesondere im professionellen Bereich eingesetzt werden sollte.&lt;br /&gt;
&lt;br /&gt;
Sehr interessant und lehrreich(!) sind etliche Beiträge im FHEM-Forum von Henryk Plötz (Chaos Computer Club Berlin), der die hier eingesetzte Technik sehr [http://forum.fhem.de/index.php/topic,10347.msg59966.html ausführlich erklärt].&lt;br /&gt;
&lt;br /&gt;
Definitiv ist dies hier keine Lösung, die im sicherheitskritischen Bereich heutige Sicherheitsstandards erfüllt. Aus professioneller Sicht kann man diese Lösung hier getrost als &amp;quot;Spielzeug&amp;quot; ansehen.&lt;br /&gt;
Ob man hiermit auch seine [[HM-SEC-KEY KeyMatic|HM Keymatic]] (Haustüre) oder Alarmanlage schalten will, sollte man sich gut überlegen.&lt;br /&gt;
&lt;br /&gt;
== Benötigte Hardware ==&lt;br /&gt;
* Raspberry Pi (2x USB erforderlich) mit Netzteil (45 EUR)&lt;br /&gt;
* optional Gehäuse (8 EUR)&lt;br /&gt;
* SD-Karte (möglichst schnell, muss nicht groß sein) (10 EUR)&lt;br /&gt;
* USB-NFC-Reader. SCM SCL3711 ist getestet, evtl. gehen auch andere Geräte &amp;lt;nowiki&amp;gt;[https://github.com/henryk/libopenkey [5]&amp;lt;/nowiki&amp;gt;] funktioniert dieser Stick nicht.&lt;br /&gt;
* NFC-TAGS. Standard-Tags mit Milfare-Classic reichen hier vollkommen aus. Einfach mal z.B. bei Amazon/Ebay &amp;quot;NFC TAG&amp;quot; eingeben. (ca. 1-2 EUR/Stück)&lt;br /&gt;
* USB-Verlängerungskabel (4 EUR)&lt;br /&gt;
* empfohlen: WLAN-USB-Stick EDIMAX EW-7811UN (11.-EUR)&lt;br /&gt;
= Benötigte Software =&lt;br /&gt;
* ein Debian Wheezy muss auf der RPi laufen. Für die Installationsanleitung &amp;lt;nowiki&amp;gt;[http://elinux.org/RPi_Easy_SD_Card_Setup ist das hier]&amp;lt;/nowiki&amp;gt; ein guter Startpunkt. Die RPi sollte so eingerichtet werden, dass man sich per ssh einloggen kann.&lt;br /&gt;
* &amp;amp;gt;= libnfc-1.6.0-rc1 aus dem Internet mit Bauanleitung (nicht schwer).&lt;br /&gt;
* Zusatzpakete mit Abhängigkeiten wie pcscd.&lt;br /&gt;
&lt;br /&gt;
=== libnfc ===&lt;br /&gt;
Eine sehr gute Bauanleitung mit Auflistung aller zusätzlich benötigten Pakete ist [http://nfc-tools.org/index.php?title=Libnfc#Debian_.2F_Ubuntu hier] zu finden. Dort direkt in den Bereich Debian/Ubuntu gehen. Die anderen Bereiche sind nicht relevant.&lt;br /&gt;
&lt;br /&gt;
Der pcscd wird hierbei installiert. Gemäß [http://nfc-tools.org/index.php?title=Devices_compatibility_matrix der Fussnote auf der Kompatiblitätsliste] wird er nicht von allen Geräten benötigt und sollte wie bei dem hier verwendetem SCL SCM3711 abgeschaltet werden.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@raspberrypi:~# /etc/init.d/pcscd stop&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Um beim nächsten Booten nicht mehr aktiv zu sein:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@raspberrypi:~# update-rc.d pcscd remove&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Skripte, Einstellungen für WLAN, NFC-auslesen, FHEM-Config, Start-/Stop-Skript ==&lt;br /&gt;
=== WLAN ===&lt;br /&gt;
Die Angaben gelten für den WLAN-USB-Stick EDIMAX EW-7811UN und können bei anderen Geräten abweichen.&lt;br /&gt;
&lt;br /&gt;
Neu angelegt: /etc/wpa.conf&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;network={&lt;br /&gt;
ssid=&amp;quot;&amp;amp;lt;SSID&amp;amp;gt;&amp;quot;&lt;br /&gt;
proto=RSN&lt;br /&gt;
key_mgmt=WPA-PSK&lt;br /&gt;
pairwise=CCMP TKIP&lt;br /&gt;
group=CCMP TKIP&lt;br /&gt;
psk=&amp;quot;&amp;amp;lt;Passwort&amp;amp;gt;&amp;quot;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Modifiziert: /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;auto lo &lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
iface eth0 inet dhcp&lt;br /&gt;
auto wlan0&lt;br /&gt;
iface wlan0 inet dhcp&lt;br /&gt;
wpa-conf /etc/wpa.conf&lt;br /&gt;
iface default inet dhcp&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Natürlich dürfen hier nicht gleichzeitg WLAN-Stick und RJ45 (Kupfer-Kabel) eingesteckt sein.&lt;br /&gt;
&lt;br /&gt;
=== Das Laden falscher Kernel-Module verhindern ===&lt;br /&gt;
Wenn wir jetzt einfach den NFC-Stick einstecken würden, dann würden original Kernel-Module geladen, die aber so nicht funktionieren.&lt;br /&gt;
&lt;br /&gt;
Wir &amp;quot;blacklisten&amp;quot; daher einige Kernelmodule.&lt;br /&gt;
Folgendes in die neue /etc/modprobe.d/blacklist-libnfc.conf schreiben:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;blacklist pn533&lt;br /&gt;
blacklist nfc&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
=== WLAN und Funktionstest ===&lt;br /&gt;
So ein NFC-Reader an der Haustür kann ein wichtiges Haussteuerungsmodul werden. So hat ein Test, ob das WLAN noch vorhanden ist Sinn.&lt;br /&gt;
Folgendes ist optional:&lt;br /&gt;
&lt;br /&gt;
Datei /usr/local/bin/rpi_network_chk.sh&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
# Restartet das Netzwerk, wenn kein Ping mehr auf die Fritzbox möglich&lt;br /&gt;
# Hintergrund: Raspberry PI hat das WLAN nach Fritzboxausfall nicht mehr aufgebaut&lt;br /&gt;
FritzBox=&#039;192.168.0.254&#039;&lt;br /&gt;
LogFile=&amp;quot;/var/log/nfc2fhem.log&amp;quot;&lt;br /&gt;
 /bin/ping -c1 $FritzBox&lt;br /&gt;
 pingtest=$?&lt;br /&gt;
 [[ $pingtest != 0 ]] &amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
    {&lt;br /&gt;
      echo &amp;quot;`date`: WLAN nicht ok, restarting network&amp;quot; &amp;amp;gt;&amp;amp;gt; $LogFile&lt;br /&gt;
      /etc/init.d/networking restart&lt;br /&gt;
    }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Datei muss ausführbar sein:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@raspberrypi:~# chmod +x /usr/local/bin/rpi_network_chk.sh&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Dieses Skript kann z.B. alle 10 min ausgeführt werden.&lt;br /&gt;
Eintrag in /etc/crontab:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;*/10 * * * * root /usr/local/bin/rpi_network_chk.sh &amp;amp;gt;&amp;amp;gt;/dev/null 2&amp;amp;gt;&amp;amp;amp;1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== Funktionstest ==&lt;br /&gt;
Wenn die folgenden Tests nicht erfolgreich sind, dann braucht man nicht weiterzumachen.&lt;br /&gt;
&lt;br /&gt;
=== NFC-Stick-Erkennung ===&lt;br /&gt;
Wir öffnen als root die messages. Wer nicht als root unterwegs ist, muss vor allen Befehlen noch ein &amp;quot;sudo&amp;quot; davorstellen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@raspberrypi:~# tail -f /var/log/messages&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nun stecken wir den NFC-Stick ein. Er muss erkannt werden:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Jan 19 21:09:30 raspberrypi kernel: [88321.631101] usb 1-1.3: new full-speed USB device number 7 using dwc_otg&lt;br /&gt;
Jan 19 21:09:30 raspberrypi kernel: [88321.767620] usb 1-1.3: New USB device found, idVendor=04e6, idProduct=5591&lt;br /&gt;
Jan 19 21:09:30 raspberrypi kernel: [88321.767651] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0&lt;br /&gt;
Jan 19 21:09:30 raspberrypi kernel: [88321.767668] usb 1-1.3: &#039;&#039;&#039;Product: SCL3711-NFC&amp;amp;amp;RW&#039;&#039;&#039;Jan 19 21:09:30 raspberrypi kernel: [88321.767680] usb 1-1.3: Manufacturer: SCM Micro&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nun wird es spannend:&lt;br /&gt;
Ein &amp;quot;nfc-list&amp;quot; sollte eine lange Liste ergeben, ein &amp;quot;nfc-list | grep &amp;quot;NFC device&amp;quot;&amp;quot; folgendes:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@raspberrypi:~# nfc-list | grep &amp;quot;NFC device&amp;quot;&lt;br /&gt;
NFC device: SCM Micro / SCL3711-NFC&amp;amp;amp;RW - PN533 v2.7 (0x07) opened&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Wer nicht bis hier erfolgreich war, muss suchen, alles weitere baut darauf auf.&lt;br /&gt;
&lt;br /&gt;
Bei einem aufgelegten NFC-Tag sollte dieser erkannt werden:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@raspberrypi:~# nfc-list | grep NFCID&lt;br /&gt;
   UID (NFCID1): a2 d7 94 ee&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== NFCID-Daemon nfc2fhem installieren ==&lt;br /&gt;
Mehr als ein einfaches und kurzes shell-Skript wird hier nicht benötigt.&lt;br /&gt;
&lt;br /&gt;
/usr/local/bin/nfc2fhem.sh&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#!/bin/bash&lt;br /&gt;
# provided by Martin Haas 1/2013&lt;br /&gt;
# Skript, das die NFC-ID eines NFC-Tags ausliest und an FHEM schickt&lt;br /&gt;
# FHEM muss je nach fhem.cfg nicht lokal sein.&lt;br /&gt;
FhemIP=&amp;quot;192.168.0.x&amp;quot;&lt;br /&gt;
LogFile=&amp;quot;/var/log/nfc2fhem.log&amp;quot;&lt;br /&gt;
CheckIntervall=300   # wie oft [sec] soll geprüft werden ob NFC Reader noch vorhanden ist&lt;br /&gt;
SleepTime=0.5      # wie oft [sec] soll nach einem NFC-Tag gesucht werden&lt;br /&gt;
 &lt;br /&gt;
############################&lt;br /&gt;
declare -i nextcheck=$(date +&amp;quot;%s&amp;quot;)+$CheckIntervall&lt;br /&gt;
&lt;br /&gt;
while true&lt;br /&gt;
do&lt;br /&gt;
    NFCID=&amp;quot;$(nfc-list | grep NFCID)&amp;quot;&lt;br /&gt;
    [[ $NFCID != &#039;&#039; ]] &amp;amp;amp;&amp;amp;amp; &lt;br /&gt;
    {&lt;br /&gt;
        NFCID=&amp;quot;$(echo $NFCID | cut -d&amp;quot;:&amp;quot; -f2 | sed &#039;s/ //g;s/)//g;s/(//g&#039;)&amp;quot;&lt;br /&gt;
        echo &amp;quot;set $NFCID irgendwas&amp;quot; | nc -w5 $FhemIP 7072&lt;br /&gt;
        echo &amp;quot;`date`: $NFCID detected&amp;quot; &amp;amp;gt;&amp;amp;gt;$LogFile&lt;br /&gt;
        sleep 4&lt;br /&gt;
    }&lt;br /&gt;
    sleep $SleepTime&lt;br /&gt;
    #Test ob Checkintervall vorbei um nach Reader zu suchen&lt;br /&gt;
    aktdate=$(date +&amp;quot;%s&amp;quot;) &lt;br /&gt;
    [[ $aktdate &amp;amp;gt; $nextcheck ]] &amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
    {&lt;br /&gt;
        nextcheck=$aktdate+$CheckIntervall&lt;br /&gt;
        NFCDevice=&amp;quot;$(nfc-list | grep &amp;quot;No NFC device found&amp;quot;)&amp;quot;&lt;br /&gt;
        [[ $NFCDevice != &#039;&#039; ]] &amp;amp;amp;&amp;amp;amp;  &lt;br /&gt;
        {&lt;br /&gt;
            echo &amp;quot;`date`: NFC Reader unavailable&amp;quot; &amp;amp;gt;&amp;amp;gt;$LogFile&lt;br /&gt;
            echo &amp;quot;{ Log 2, \&amp;quot;nfc2fhem: NFC Reader unavailable\&amp;quot; }&amp;quot; | nc -w5 $FhemIP 7072&lt;br /&gt;
        }&lt;br /&gt;
    } &lt;br /&gt;
done&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Das Skript muss ausführbar sein&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;chmod +x /usr/local/bin/nfc2fhem.sh&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Start-/Stop-Skript ===&lt;br /&gt;
Nach dem Booten soll nfc2fhem.sh automatisch gestartet werden:&lt;br /&gt;
&lt;br /&gt;
Wir erstellen die Datei /etc/init.d/nfc2fhem&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#!/bin/sh&lt;br /&gt;
# description: Start or stop the scan of NFC-Tags for fhem&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:       nfc2fhem.sh&lt;br /&gt;
# Required-Start:    $local_fs $remote_fs&lt;br /&gt;
# Required-Stop:    $local_fs $remote_fs&lt;br /&gt;
# Default-Start:    2 3 4 5&lt;br /&gt;
# Default-Stop:     0 1 6&lt;br /&gt;
# Short-Description:  NFC 2 FHEM&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
set -e&lt;br /&gt;
cd /usr/local/bin &lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
&#039;start&#039;)&lt;br /&gt;
    echo &amp;quot;Starting nfc2fhem...&amp;quot;&lt;br /&gt;
    nohup ./nfc2fhem.sh&amp;amp;amp;&lt;br /&gt;
    RETVAL=$?&lt;br /&gt;
   &amp;amp;#160;;;&lt;br /&gt;
&#039;stop&#039;)&lt;br /&gt;
    echo &amp;quot;Stopping nfc2fhem...&amp;quot;&lt;br /&gt;
    pkill nfc2fhem.sh&lt;br /&gt;
    RETVAL=$?&lt;br /&gt;
   &amp;amp;#160;;;&lt;br /&gt;
&#039;status&#039;)&lt;br /&gt;
    cnt=`ps -ef | grep &amp;quot;nfc2fhem&amp;quot; | grep -v grep | wc -l`&lt;br /&gt;
    if [ &amp;quot;$cnt&amp;quot; -eq &amp;quot;2&amp;quot; ]&lt;br /&gt;
    then&lt;br /&gt;
        echo &amp;quot;nfc2fhem is not running&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;quot;nfc2fhem is running&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
   &amp;amp;#160;;;&lt;br /&gt;
*)&lt;br /&gt;
    echo &amp;quot;Usage: $0 { start | stop | status }&amp;quot;&lt;br /&gt;
    RETVAL=1&lt;br /&gt;
   &amp;amp;#160;;;&lt;br /&gt;
esac&lt;br /&gt;
exit $RETVAL&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit folgendem startet nfc2fhem.sh bei jedem reboot automatisch:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;root@raspberrypi:# update-rc.d nfc2fhem defaults&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== FHEM vorbereiten ==&lt;br /&gt;
In FHEM nutzen wir das dummy-Modul. Damit können wir mit jedem TAG eine Aufgabe ausführen, mit Logiken natürlich entsprechend mehr.&lt;br /&gt;
&lt;br /&gt;
Beispiel-Eintrag in fhem.cfg&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#Ein an FHEM geschickter NFC-Tag sieht z.B. so aus: 02ec8ee9&lt;br /&gt;
#NFC-Tag Test&lt;br /&gt;
define 02ec8ee9 dummy&lt;br /&gt;
define nfcnot1 notify 02ec8ee9 set lampe toggle&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Weitere Beispiele sind in der commandref.html zu finden: [http://fhem.de/commandref.html#notify [6]]&lt;br /&gt;
&lt;br /&gt;
=== FHEM-Zugriff von extern ===&lt;br /&gt;
Sollte auf der RPi nicht auch FHEM laufen, so muss FHEM den Remote-Zugriff erlauben:&lt;br /&gt;
Eintrag in fhem.cfg&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;define telnetPort telnet 7072 &#039;&#039;&#039;global&#039;&#039;&#039;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hilfe/Support ==&lt;br /&gt;
Fragen werden gerne im FHEM-Forum auf [http://forum.fhem.de http://forum.fhem.de] beantwortet.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Raspberry Pi]]&lt;/div&gt;</summary>
		<author><name>Tremor</name></author>
	</entry>
</feed>