Schlagwort-Archive: Raspberry Pi

NFC Modul für den Raspberry Pi

Zu dem NFC Modul welches ich bei Farnell element14 bestellt habe gehört das Modul selbst, ein kleiner Zettel mit Mini Anleitung und eine RFID Karte. Das Modul ist ungefähr so groß wie der Rasbperry Pi und wird direkt auf die GPIO Ports gesetzt. Durch das aufsetzen des Moduls sind leider die anderen GPIO Ports nicht mehr nutzbar.

Damit das Modul genutzt werden kann muss SPI aktiviert werden.
Hierfür auf der Kommandozeile sudo raspi-config ausführen und unter den Advancded Options SPI aktivieren, im Anschluss den Rasbperry Pi neustarten.

Über einem Windows oder Linux Rechner (nicht über den Rasbperry Pi) die benötigte Software hier herunterladen und entpacken. In den entpackten Verzeichnissen befindet sich die card_polling.zip, diese muss auf den Rasbperry Pi kopiert und werden.

Für das kompilieren der polling Software muss zunächst cmake installiert werden.

Als root auf der Kommandozeile:
apt-get update
apt-get install cmake

Nun als Pi user in das Verzeichniss wechseln in der die zip Datei liegt und mit unzip card_polling.zip entpacken.
Nach dem entpacken müssen folgende Befehle ausgeführt werden:

cd ~/card_polling/build
cmake ../source
make

Nun über ./card_polling die kompilierte Software starten und das polling beginnt.

/home/pi/card_polling/build# ./card_polling
/****** Begin Polling ******/
No card or Tag detected
No card or Tag detected
MIFARE Ultralight detected
UID: 04 F1 DE 81 A0 22 80

MIFARE Ultralight detected
UID: 04 F1 DE 81 A0 22 80

No card or Tag detected
No card or Tag detected

Sobald eine RFID Karte auf das Modul gelegt wird, gibt die Software den Typ und die UID der Karte aus.

NFC Paket

NFC montiert

UPDATE:Leider hatte ich vergessen die verwendete Distribution mit anzugeben, ich nutze hier Raspian. Danke für den Hinweis Marco

[Raspberry Pi] Browser nach Systemstart im Fullscreen starten

Ein Kollege fragte mich neulich wie er am einfachsten auf drei Fernsehern verschiedene Urls für Präsentationen öffnen könnte. Er dachte zunächst daran einen Rechner mit entsprechender Grafikkarte zu kaufen, ich konnte ihn jedoch überzeugen anstatt eines Rechners, drei Raspberry Pi´s zu verwenden.

Der Plan ist, das der Raspberry Pi hochfährt und automatisch den Browser öffnet.
Um Resourcen zu sparen, wird der midori Browser über die Kommandozeile gestartet und nicht über einen Desktop. Das setzt voraus, das der Pi Benutzer nach dem hochfahren des Systems an der Kommandozeile angemeldet ist.

Hierfür muss die Datei /etc/inittab wie folgt angepasst werden:

Vorher
1:2345:respawn:/sbin/getty --noclear 38400 tty1
nachher
#1:2345:respawn:/sbin/getty --noclear 38400 tty1
1:2345:respawn:/bin/login -f pi tty1 /dev/tty1 2>&1

Damit der Browser den gesamten Bildschirm ausfüllt (Kiosk Mode) und zum Beispiel der Mauszeiger nicht dargestellt wird, müssen noch weitere Programme installiert werden.

apt-get install matchbox x11-xserver-utils unclutter

Das Script sieht dann wie folgt aus:
#!/bin/sh
unclutter &
matchbox-window-manager & :
xset -dpms
xset s off
while true; do
/usr/bin/midori -e Fullscreen -a https://www.itbasic.de
done

Hier eine kurze Erklärung:
unclutter – lässt den Mauszeiger verschwinden
matchbox-window-manager – sorg für den Kiosk Modus
midori -e Fullscreen -a URL – startet den Browser
xset -dpms und xset s off deaktiviert den Bildschirmschoner
Die while Schleife sorgt dafür, das der Browser bei einem Absturz neu gestartet wird.

Nach einem chmod 755 presentation.sh, lässt sich das ganze dann über xinit /home/pi/presentation.sh starten. Um es wieder zu beenden reicht strg + alt + F1 und im Anschluss strg + c.

Automatischer Start

Ein Eintrag in der /home/pi/.profile reicht nun aus, damit die Präsentation nach dem Systemstart gestartet wird.

Ich habe jedoch das folgende Script in der /home/pi/.profile hinterlegt, welches prüft ob der Raspberry Pi eine IP Adresse über den dhcp Server bekommen hat. Wenn keine IP Adresse vorhanden ist, wird die Präsentation nicht gestartet und dafür ein Hinweis auf der Konsole ausgegeben.

start.sh:
#!/bin/bash
ifconfig | grep 192
if [ $? -eq 0 ]
then
xinit /home/pi/presentation.sh
else
echo "!!! keine Netzwerkverbindung !!!"
echo "Bitte stellen Sie eine Netzwerkverbindung her und"
echo "fuehren Sie xinit /home/pi/presentation.sh aus"
fi

Betriebssystem klonen

Für die zwei weiteren Fernseher muss mein Kollege einen Klone der SD Karte erstellen.
Das ganze lässt sich unter linux über dd einfach realisieren.

1. Image der SD Karte erstellen
dd if=/pfad/zur/sd/karte of=/home/user/sd-image.img
2. SD Karte wechseln und Image auf die neue SD Karte spielen
dd if=/home/user/sd-image.img of=/pfad/zur/sd/karte

Auf diesem Weg lässt sich ein Backup des gesamten System erstellen, hilfreich wenn man des öfteren verschiedene Programm etc ausprobieren möchte.

Hostnamen ändern

Zum Abschluss muss noch der Hostname in der /etc/hostname und /etc/hosts angepasst werden, da sonst der Hostname dreimal im Netzwerk vorhanden ist.

Quellen:
Browser im Kiosk Modus starten: https://github.com/MobilityLab/TransitScreen/wiki/Raspberry-Pi
Autologin:http://elinux.org/RPi_Debian_Auto_Login

Isc-dhcp-server startet nicht

Ein Kollege brachte mir seinen Raspberry Pi vorbei, auf dem er raspbmc installiert hatte. Zusätzlich richtete er ihn als Access point ein, jedoch hatte seit kurzem das Problem, das der isc-dhcp-server nicht mehr startete.

Beim manuellen starten über die Kommandozeile kam folgendes:
/etc/init.d/isc-dhcp-server start
[FAIL] Starting ISC DHCP server: dhcpd[....] check syslog for diagnostics. ... failed!
failed!

Zunächst schaute ich in die /var/log/syslog

Nov 16 20:42:19 raspbmc dhcpd: For info, please visit https://www.isc.org/softw>
Nov 16 20:42:19 raspbmc dhcpd: Wrote 2 leases to leases file.
Nov 16 20:42:19 raspbmc dhcpd:.
Nov 16 20:42:19 raspbmc dhcpd: No subnet declaration for wlan1 (no IPv4 address>
Nov 16 20:42:19 raspbmc dhcpd: ** Ignoring requests on wlan1. If this is not w>
Nov 16 20:42:19 raspbmc dhcpd: you want, please write a subnet declaration
Nov 16 20:42:19 raspbmc dhcpd: in your dhcpd.conf file for the network segme>
Nov 16 20:42:19 raspbmc dhcpd: to which interface wlan1 is attached. **
Nov 16 20:42:19 raspbmc dhcpd:.
Nov 16 20:42:19 raspbmc dhcpd:.
Nov 16 20:42:19 raspbmc dhcpd: Not configured to listen on any interfaces!

Um einen Fehler in der Konfiguration auszuschließen, überprüfte ich die /etc/default/isc-dhcp-server, die /etc/network/interfaces und /etc/dhcp/dhcpd.conf.
Einen Fehler konnte ich nicht finden.
Bei ifconfig fiel mir jedoch auf, das das WLAN interface nicht die zugewiesene IP Adresse bekommen hatte.
Nach einem /etc/init.d/network restart auf der Kommandozeile, war die konfigurierte IP Adresse zugewiesen und auch der DHCP Server konnte gestartet werden.

Workaround

Nach einer Recherche im Internet fand ich heraus, das ich nicht der einzigste war der das Problem hatte. In einem Forum stieß ich auf einen Eintrag, das beim Hochfahren des Systems sich die interfaces und der DHCP Server in die quere kommen. Eine konkrete Lösung für das Problem fand ich jedoch nicht, also habe ich als workaround folgendes in der /etc/rc.local vor exit 0 eingetragen.

ifdown wlan1
ifup wlan1
sleep 20
service isc-dhcp-server start

Falls jemand eine andere Lösung hat, immer her damit.

[Fhem] am Wochenende bleibt die Lampe aus

Um am frühen Morgen geweckt zu werden gibt es Wecker, Radios, Handys, Kinder oder ein Aufwachlicht. Jedoch möchte der ein oder Andere am Wochenende gerne länger schlafen.

Wenn ein Aktor am Wochenende (Samstag/Sonntag) zu einer anderen Zeit beziehungsweise gar nicht geschaltet werden soll, kann über die Variable $we eine entsprechende Abfrage erstellt werden. Am Wochenende hat die Variable den Wert 1, unter der Woche den Wert 0.

Folgende Zeile schaltet die Lampe um 6:30 ein, jedoch nicht am Wochenende:


define Licht_SchlafzimmerAn at *06:30 { if ((!$we)) { fhem "set Licht_Schlafzimmer on" } }

Temperatursensoren in FHEM einbinden

Die OneWire Temperatursensoren kann ich wie hier beschrieben, bereits über die Kommandozeile auslesen. Um die Sensoren in fhem einzubinden würde man normalerweise OWFS nutzen, jedoch kann OWFS keine Sensoren direkt am GPIO Port auslesen. Möchte man auf OWFS nicht verzichten, müßten die Dallas Sensoren über ein DS 2482-100S ausgelesen werden.

Eine Alternative wäre ein Shellscript, welches die Temperatur ausliest und in fhem eingebunden werden kann.

Ich habe mich jedoch für das Modul 58_GPIO4.pm entschieden, welches man hier runterladen kann:
https://github.com/mhop/fhem-mirror/blob/master/contrib/58_GPIO4.pm

Das Modul muss in dem Ordner FHEM abgelegt und fhem neugestartet werden.

In der fhem.cfg reicht dann folgendes aus, damit die Werte über die Weboberfläche ausgegeben werden:


# Sensor definieren
define FlurTemp GPIO4 28-000004b91510
# Model des Sensors angeben
attr FlurTemp model DS18B20
# ensprechendes Icon setzen
attr FlurTemp icon icoKLIMA
# Raum zuweisen
attr FlurTemp room Flur

Temperatursensor in fhem

Temperatursensor in fhem