Fernseher über HDMI (CEC) per Raspberry PI steuern

Wie der begeisterte Bastler bestimmt schon gemerkt hat, kann man mit dem Raspberry PI so einige coole Geräte steuern.
So ist es vielleicht auch nützlich den Fernseher ansteuern zu können. Dafür braucht man generell kein Raspberry PI, sondern nur HDMI und ein CEC-fähigen Fernseher, Endgerät. CEC ist ein definiertes Steuerprotokoll, worüber sich Entertainment Geräte steuern lassen und so z.B. eingeschaltet, ausgeschaltet werden können.
Je nach Hersteller heißt das aber nicht immer CEC, sondern z.B. Anynet+ bei Samsung oder Bravia Theatre Sync bei Sony. Hier findet ihr noch einen ganz einfach geschrieben Artikel der CEC erklärt.
Mit der Software „cec-client“ könnt ihr unter einem Linux-Gerät euren Fernseher via HDMI steuern.
Ich beschreibe hier kurz die Installation und ein paar nützliche Befehle.
Schritt 1: Notwendige Abhängigkeiten installieren

sudo apt-get install autoconf build-essential git liblockdev1-dev libtool libudev-dev pkg-config 

Schritt 2: Quellcode herunterladen
Die Quellen für libcec bzw. cec-client sind offen verfügbar unter: https://github.com/Pulse-Eight/libcec.

git clone git://github.com/Pulse-Eight/libcec.git

Schritt 3: Konfigurieren

cd libcec/
./bootstrap
./configure --with-rpi-include-path=/opt/vc/include --with-rpi-lib-path=/opt/vc/lib --enable-rpi

Schritt 4: Kompilieren

make
sudo make install
sudo ldconfig

Schritt 5: Testen
Nun probieren wir aus, ob der cec-client denn funktioniert, er müsste den Raspberry PI erkennen.

pi@RPI ~ $ cec-client -l
Found devices: 1
device: 1
com port: RPI
vendor id: 2708
product id: 1001
firmware version: 1
type: Raspberry Pi

So und nun zum interessanten Teil: Fernseher per HDMI steuern.
Prüft ob an eurem Fernseher die HDMI-CEC Funktion eingeschaltet ist. Dies ist Standardmäßig nicht immer der Fall. In der Regel findet sich dies immer irgendwo unter Einstellungen -> System -> HDMI.
Fernseher per CEC-Client einschalten: 
Folgenden Befehl einfach über die Kommandozeile absetzen.

echo "on 0" | sudo cec-client -s -d 1

Das -s brauchen wir, damit der cec-client im „Single Command“ Mode arbeitet, und unseren Befehl per echo-pipe entgegen nimmt.
Das -d 1 setzt das Loglevel und sorgt für eine überschaubare Rückmeldung. Ihr könnt das ruhig mal weglassen und die komplette Ausgabe analysieren.
Fernseher per CEC-Client ausschalten:

echo "standby 0" | sudo cec-client -s -d 1

Power-Status per CEC-Client auslesen:

echo "pow 0" | sudo cec-client -s -d 1

Fernseher per CEC-Client auf HDMI1,HDMI2,HDMI3, usw. umschalten:

echo "tx 4F 82 10 00" | cec-client -s

Wofür das 4F steht weiß ich ehrlich gesagt nicht, die 82 steht für den „Active Source“ Befehl, die 10 ist bei meinem Sony Fernseher HDMI1, die 00 ist das Ziel als Broadcast.
Um auf HDMI4 umzuschalten wäre der Befehl also:

echo "tx 4F 82 40 00" | cec-client -s

Da muss man ein bisschen herumprobieren, kann je nach Fernseher etwas unterschiedlich sein.
Hilfreich kann folgende Seite sein: www.cec-o-matic.com, dort kann man sich die HDMI Befehle passend zusammenklicken.

Howto: Raspberry Pi – Wlan Stick installieren (TP-Link TL-WN725N)

TL-WN725N_compressedFür meinen Raspberry Pi habe ich mir einen USB Wlan Stick zugelegt. Der TP-Link TL-WN725N ist extrem klein und kostet auch nur ca. 6,50€ (Amazon).
Einfach reinstecken – Plug & Play hat nicht funktioniert.
Nach ein bisschen Recherche habe ich dann herausgefunden, dass es von diesem Modell 2 Versionen gibt.
Eine v1 welche ohne weiteres auf Anhieb funktioniert und eine v2 wofür man noch explizit die Treiber installieren muss.
Wie findet man heraus welche Version man hat ? Das wird in diesem Blogbeitrag sehr gut beschrieben. Grob zusammengefasst sieht man es an der VID/PID:

pi@raspberrypi ~ $ lsusb
(...)
Bus 001 Device 008: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter <<<<---- V1
(...)
Bus 001 Device 010: ID 0bda:8179 Realtek Semiconductor Corp. <<<<---- V2 

[stextbox id=“warning“]Mit einem Update der Raspberry Firmware / Kernel kann es sein, dass der derzeit genutzte Treiber nicht mehr eingebunden werden kann. Daher würde ich empfehlen,  zuerst die Firmware via: rpi-update zu aktualisieren und im Anschluss den Treiber zu installieren, bevor man sich doppelte Arbeit macht.[/stextbox]
Mein Raspberry läuft momentan mit folgendem Kernel:

root@raspberrypi:/home/pi/rtl8188eu# uname -a
Linux raspberrypi 3.10.21+ #604 PREEMPT Mon Dec 2 20:17:09 GMT 2013 armv6l GNU/Linux

Nun kommen wir zum Teil der schon bestimmt hundert mal im Netz zu finden ist:
1. Treiber herunterladen

wget https://dl.dropboxusercontent.com/u/80256631/8188eu-20131113.tar.gz

2. Entpacken

tar -zxvf 8188eu-20131113.tar.gz

3. Readme lesen und wenn nicht vorhanden die Firmware-Datei kopieren

sudo cp rtl8188eufw.bin /lib/firmware/rtlwifi

4. Kernel Modul installieren

install -p -m 644 8188eu.ko /lib/modules/3.10.21+/kernel/drivers/net/wireless/
insmod /lib/modules/3.10.21+/kernel/drivers/net/wireless/8188eu.ko
depmod -a

Damit ist das Kernel Modul installiert und der Treiber sollte laufen. Ob alles korrekt ist, kann man in der dmesg Ausgabe sehen:

dmesg
[11017.157267] Chip Version Info: CHIP_8188E_Normal_Chip_TSMC_A_CUT_1T1R_RomVer(0)
[11017.212202] usbcore: registered new interface driver r8188eu
[11017.392585] r8188eu: Firmware Version 11, SubVersion 1, Signature 0x88e1
[11017.939313] r8188eu: MAC Address = 64:66:b3:1b:dc:6e
[11019.532822] r8188eu: ERROR assoc success

Das Gerät sollte nun auch via ifconfig sichtbar sein:

wlan0 Link encap:Ethernet Hardware Adresse 64:66:b3:1b:dc:6e
inet Adresse:192.168.10.104 Bcast:192.168.10.255 Maske:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metrik:1
RX packets:290 errors:0 dropped:2 overruns:0 frame:0
TX packets:9 errors:0 dropped:1 overruns:0 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:1000
RX bytes:52803 (51.5 KiB) TX bytes:1578 (1.5 KiB)

Anschließend kann die Wlan Verbindung zum Access Point wie bei jedem Linux eingerichtet werden. Wie das geht habe ich hier separat beschrieben.
Troubleshooting:
Falsche Treiberversion für den aktuellen Kernel:

modprobe 8188eu
ERROR: could not insert '8188eu': Exec format error

Den Fehler sieht man häufig – der Treiber ist einfach für einen anderen Kernel kompiliert.
Im raspberrypi.org Forum findet man aber einen Beitrag, wo bisher alle Treiber für den aktuellen Kernel geliefert wurden.
Zitat (MrEngman):
The currently available drivers are for raspbian 3.10.18+ #577 to #596. Use command uname -a to determine the version you are using and download the necessary file, untar it and install it, and the firmware file if necessary, using the commands below.
Driver files

#577 - 8188eu-20131105.tar.gz https://dl.dropboxusercontent.com/u/80256631/8188eu-20131105.tar.gz
#579 - 8188eu-20131106.tar.gz https://dl.dropboxusercontent.com/u/80256631/8188eu-20131106.tar.gz
#585 - 8188eu-20131106.tar.gz https://dl.dropboxusercontent.com/u/80256631/8188eu-20131106.tar.gz
#585 - 8188eu-20131106.tar.gz https://dl.dropboxusercontent.com/u/80256631/8188eu-20131106.tar.gz
#587 - 8188eu-20131110.tar.gz https://dl.dropboxusercontent.com/u/80256631/8188eu-20131110.tar.gz
#590 - 8188eu-20131111.tar.gz https://dl.dropboxusercontent.com/u/80256631/8188eu-20131111.tar.gz
#592 - 8188eu-20131111.tar.gz https://dl.dropboxusercontent.com/u/80256631/8188eu-20131111.tar.gz
#594 - 8188eu-20131113.tar.gz https://dl.dropboxusercontent.com/u/80256631/8188eu-20131113.tar.gz
#596 - 8188eu-20131113.tar.gz https://dl.dropboxusercontent.com/u/80256631/8188eu-20131113.tar.gz

(via)

Howto: Raspberry PI – WLAN Verbindung einrichten

300px-RaspberryPiDie Einrichtung in ein WLan ist beim Raspberry PI identisch zu den „großen“ Distributionen wie Ubuntu, Suse, Debian etc. Raspbian basiert ja sogar auf Debian.
Hier kurz und knapp erklärt, was man konfigurieren muss, damit sich der PI mit eurem Access Point verbindet:
Als erstes prüfen ob das Wlan Gerät korrekt erkannt wurde. Die meisten USB-Sticks funktionieren per Plug & Play ohne noch groß Treiber zu installieren.
Es gibt jedoch ein paar Ausnahmen – wie z.B. der „TP-Link TL-WN725N“ – wie man den zum Laufen bekommt beschreibe ich in einem anderem Beitrag noch ausführlich.
1. ifconfig
Hier sollte eine Ausgabe erscheinen wie diese (bis auf die IP-Adresse etc.):

wlan0 Link encap:Ethernet Hardware Adresse 64:66:b3:1b:dc:6e
inet Adresse:192.168.10.104 Bcast:192.168.10.255 Maske:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metrik:1
RX packets:290 errors:0 dropped:2 overruns:0 frame:0
TX packets:9 errors:0 dropped:1 overruns:0 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:1000
RX bytes:52803 (51.5 KiB) TX bytes:1578 (1.5 KiB)

2. Interface bearbeiten
In dieser Datei steht die Konfiguration der Netzwerkgeräte. In meinem Beispiel verwende ich DHCP von meiner Fritz-Box.
Die Zugangsdaten zum Access-Point werden in einer extra Datei (/etc/wpa_supplicant/wpa_supplicant.conf) gespeichert.
vi /etc/network/interfaces

allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

3. Zugangsdaten eintragen
Hier werden die SSID, Kennwort und die Verschlüsselung festgelegt. Ich verwende noch die WPA-Verschlüsselung.
Die SSID und das Kennwort sollte in Anführungszeichen stehen. Weitere Beispiele für WPA2, WEP oder 802.1x gibt es hier.
vi /etc/wpa_supplicant/wpa_supplicant.conf

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="Constey"
psk="meinKennwort"
# Protocol type can be: RSN (for WP2) and WPA (for WPA1)
proto=WPA
# Key management type can be: WPA-PSK or WPA-EAP (Pre-Shared or Enterprise)
key_mgmt=WPA-PSK
# Pairwise can be CCMP or TKIP (for WPA2 or WPA1)
pairwise=TKIP
#Authorization option should be OPEN for both WPA1/WPA2 (in less commonly used are SHARED and LEAP)
auth_alg=OPEN
}

Anschließend die Konfiguration fürs Netzwerk neu laden:

service networking restart

Eventuell hilft auch ein:

ifdown wlan0
ifup wlan0

Wenn die Verbindung zum Access Point korrekt hergestellt wurde, sollte ifconfig eine Ausgabe identisch zu der von oben erzeugen.
Nachtrag: 07.03.2015 – Wenn man Probleme hat und sich der PI nicht zum Wlan verbinden will kann man seine Konfiguration wie folgt testen:

wpa_supplicant -i wlan0 -D wext -c /etc/wpa_supplicant/wpa_supplicant.conf -d

Raspberry Pi als Nagios Poller installieren und in Centreon aufnehmen

300px-RaspberryPiEin kleiner Raspberry Pi bietet sich ja quasi als Nagios Poller an, wenn man ein kleines, günstiges und stromsparendes Gerät zum Überwachen von Servern, PC’s,  Druckern, oder vielem mehr sucht.
Ich beschreibe hier wie man einen zweiten Nagios-Server in eine bestehende Nagios / Centreon Umgebung aufnehmen kann. Wie man Nagios bzw. auch mit der wesentlich einfacheren Konfigurationsoberfläche Centreon installieren kann habe ich bereits beschrieben. Da hat sich bis auf ein paar Versionsnummern auch nichts verändert. Daher verweise ich an den passenden Stellen auf meinen alten Beitrag.
Wer einfach nur Nagios auf einem Raspyberry installieren will, kann hier auch einfach bis Punkt 2 folgen. Einfach am Ende Centreon nicht mitinstallieren.
Als Grundsystem für den Raspberry wird wegen der Einfachheit ein Debian RAW-Image verwendet. Dieses könnt ihr euch hier herunterladen: http://www.raspberrypi.org/downloads
Achtung: Die NDOUtils funktionieren nicht im Zusammenspiel mit dem „hard float“ Raspberry Image. Wenn ihr die NDOutils einsetzt müsst ihr die „Soft-float“ Debian Version verwenden.
(Ich verwende noch die NDOutils!)

Bis auf die Abhängigkeiten ist fast alles identisch zur normalen Installation von Nagios – wie ich es schon hier beschrieb.
1. Abhängigkeiten Installieren

apt-get install apache2 libapache2-mod-php5 build-essential libgd2-xpm-dev mysql-client gcc make g++ lsb-release libssl-dev

2. Nagios + Plugins herunterladen und installieren
Könnt ihr aus dem Beitrag hier entnehmen: https://constey.de/2012/06/how-to-install-nagios-centreon-nagvis-check_mk-ubuntu-12-04-server/
(
Wenn man nur Nagios installieren will, ohne Centreon – ist man hier fertig.)
3. Zusätzlichen centreon Benutzer anlegen
Da der Centreon Central Server mit dem User centreon arbeitet, und diesen auch für den Austausch von Config-Dateien etc. verwendet, muss dieser auch hier angelegt werden.

/usr/sbin/useradd -m -s /bin/bash centreon
passwd centreon

4. Noch den Centreon User in die Nagios Gruppen aufnehmen

/usr/sbin/usermod -G nagcmd centreon
/usr/sbin/usermod -G nagios centreon

5. SSH Authentifizierung per Keyfile einrichten & in Centreon aufnehmen
Haltet euch hier an die Doku von Centreon. Diese ist sehr gut, und bebildert.
http://en.doc.centreon.com/DistributedArchitecture
In der Sudo Konfiguration muss der centreon Benutzer ebenfalls analog dem nagios Benutzer berechtigt werden:

centreon   ALL=NOPASSWD: /etc/init.d/nagios restart
centreon   ALL=NOPASSWD: /etc/init.d/nagios stop
centreon   ALL=NOPASSWD: /etc/init.d/nagios start
centreon   ALL=NOPASSWD: /etc/init.d/nagios reload
centreon   ALL=NOPASSWD: /usr/sbin/nagiostats
centreon   ALL=NOPASSWD: /usr/sbin/nagios *

Außerdem muss der Schritt: „Setting up key authentication using SSH“ noch mit dem centreon Benutzer ausgeführt werden. Also:

su centreon
ssh-keygen
(alles mit Enter bestätigen (kein Kennwort!)
ssh-copy-id -i ~/.ssh/id_rsa.pub centreon@{IP_ADDRESS}

Hat man nun den Poller im Centreon angelegt, wie in der Doku hier beschrieben, kann man Testweise einen Host anlegen, der von dem neuen Poller abgefragt werden soll.
Anschließend unter Configuration -> Monitoring Engines, die Konfiguration exportieren und den neuen Poller neustarten lassen.
Wichtige Infos zum Debuggen findet man in den Logfiles von Centreon. Ein Beispiel für ein funktionierenden Poller:

vi /usr/local/centreon/log/centcore.log
2013-06-18 14:22:01 - Info: copied rotated file for instance 5
2013-06-18 14:34:54 - Start: Send config files on poller 5
2013-06-18 14:35:05 - End: Send config files on poller 5
2013-06-18 14:35:18 - Init Script : 'sudo /etc/init.d/nagios restart' On poller 101.1.39 (5)
2013-06-18 14:35:18 - Engine : Running configuration check...done.
2013-06-18 14:35:18 - Engine : Stopping nagios: .done.
2013-06-18 14:35:18 - Engine : Starting nagios: done.
2013-06-19 00:00:42 - Info: copied rotated file for instance 5
Timeout, server 10.0.199.39 not responding.^M
2013-06-20 00:01:00 - Info: copied rotated file for instance 5
Timeout, server 10.0.199.39 not responding.^M
2013-06-20 23:59:49 - Info: copied rotated file for instance 5

Sollten die neu angelegten Hosts zwar in der Centreon Konfiguration sein, aber nicht unter Monitoring auftauchen muss geprüft werden, ob der ndoutils Dienst korrekt läuft.
Dazu das Nagios-Log auf dem Poller checken:

vi /usr/local/nagios/var/nagios.log
[1371558916] Nagios 3.5.0 starting... (PID=7777)
[1371558916] Local time is Tue Jun 18 14:35:16 CEST 2013
[1371558916] LOG VERSION: 2.0
[1371558916] ndomod: NDOMOD 1.5.2 (06-08-2012) Copyright (c) 2009 Nagios Core Development Team and Community Contributors
[1371558916] ndomod: Successfully connected to data sink. 0 queued items to flush.
[1371558916] Event broker module '/usr/local/nagios/bin/ndomod.o' initialized successfully.

 

Raspberry Pi mit OpenElec (XBMC) per Handy fernsteuern

Ich habe mir auch mal das Spielzeug Raspberry gekauft. Mein Model B hat von Werk aus auch schon direkt 512 MB Ram.
Nachdem ich mir openelec in der Version r12368 auf den Stick gemacht hatte funktionierte soweit erst einmal alles.
Etwas doof ist natürlich, dass man Tastatur, Maus und HDMI Kabel schon vor dem Booten eingesteckt haben muss aber gut.
Zum Glück gibt es ja genug „Fernbedienungs“-Apps 🙂
Bisher nutzte ich die offizielle XBMC Android App. Doch hier bekam ich beim Verbindungsversuch lediglich folgende Fehlermeldung:

I/O Exception (java.io.FileNotFoundException)
http: //192.168.10.45:8080/xbmcCmds/xbmcHttp?command=GetSystemInfo(120)

Nach einiger Recherche haben viele anderen auch das Problem. Es ist auch schon als Fehler im offiziellen git gemeldet.
Abhilfe schafft bisher nur die Verwendung von einem anderem App. Ich habe bei mir Yatse Widged installiert und es funktioniert top.