Archiv für den Monat: Februar 2014

LIRC neue Fernbedienung anlernen

Damit eine Fernbiedienung mit LIRC funktioniert, muss man Sie erst anlernen. Es sei denn, es gibt schon eine fertige Konfiguration.
Ich habe 2 Universal- Fernbedienungen, aber hier keine fertige Konfiguration. Das ist allerdings kein Problem, das Anlernen ist ganz einfach. Außer die Fernbedienung wird nicht erkannt und im RAW Format gespeichert. Diese würde ich bei Seite legen, da RAW nicht so genau ist. Zum Anlernen der Fernbedienung darf der Dienst LIRC nicht laufen. So kann man den Dienst anhalten:

/etc/init.d/lirc stop

Zum Konfigurieren der Tasten muss man die verfügbaren Namen kennen, diese Liste habe ich in den Editor kopiert.

irrecord –list-namespace

Hier habe ich mir meine benötigten Tasten rausgesucht.

Das sind meine Tasten:
KEY_0
KEY_1
KEY_2
KEY_3
KEY_4
KEY_5
KEY_6
KEY_7
KEY_8
KEY_9
KEY_PAUSE
KEY_PLAY
KEY_POWER
KEY_NEXT
KEY_PREVIOUS
KEY_STOP
KEY_VCR
KEY_CHANNELDOWN
KEY_CHANNELUP
KEY_VOLUMEDOWN
KEY_VOLUMEUP
KEY_RECORD
KEY_MUTE
KEY_E
KEY_F
KEY_G
KEY_H
KEY_MENU
KEY_SETUP
KEY_A
KEY_UP
KEY_DOWN
KEY_RIGHT
KEY_LEFT
KEY_OK
KEY_LAST
KEY_102ND

Jetzt muss „irrecord“ ausgeführt werden. Hier wird der gedrückten Taste ein Name hinterlegt.

irrecord -d /dev/lirc0 /root/lircd.conf

Am Anfang kommt ein Hinweistext, hier kann man mit Return bestätigen.
Jetzt soll man nach Eingabe von Return unterschiedliche Tasten drücken. Pro Taste wird ein Punkt am Bildschirm ausgegeben werden.
Das Ganze macht man so lange, bis der Assistent etwas Neues erwarten.
Jetzt verlangt der Assistent immer einen Namen, z.B. KEY_0. Nach Eingabe soll die Taste 0 gedrückt werden.
Das Ganze macht man bis man keine Tasten mehr hat oder man bricht vorher hab. Das Ganze macht man mit der Taste Return.

Jetzt muss die Konfigurations-datei am richtigen Ort abgelegt werden:
cp /root/lircd.conf /etc/lirc/lircd.conf

Nachdem am Anfang der Dienst gestoppt wurde, sollte man jetzt LIRC wieder starten:

/etc/init.d/lirc start

Jetzt kann man seine Aufnahme testen:

irw

Nach Eingabe des Befehls sollte man auf die Fernbedienung drücken. Als Ergebnis sieht man seine programmierten Tasten:

0000000000000002 00 KEY_1 /root/lircd.conf
0000000000000004 00 KEY_2 /root/lircd.conf
0000000000000005 00 KEY_3 /root/lircd.conf
0000000000000008 00 KEY_6 /root/lircd.conf
0000000000000007 00 KEY_5 /root/lircd.conf
0000000000000006 00 KEY_4 /root/lircd.conf
0000000000000009 00 KEY_7 /root/lircd.conf
000000000000000a 00 KEY_8 /root/lircd.conf
000000000000000b 00 KEY_9 /root/lircd.conf
0000000000000009 00 KEY_7 /root/lircd.conf
000000000000000a 00 KEY_8 /root/lircd.conf
000000000000000b 00 KEY_9 /root/lircd.conf
0000000000000006 00 KEY_4 /root/lircd.conf
0000000000000007 00 KEY_5 /root/lircd.conf
0000000000000008 00 KEY_6 /root/lircd.conf
0000000000000008 01 KEY_6 /root/lircd.conf
0000000000000008 00 KEY_6 /root/lircd.conf
0000000000000008 00 KEY_6 /root/lircd.conf
0000000000000008 00 KEY_6 /root/lircd.conf

Falls etwas nicht funktioniert, sollte der lirc Treiber kontrolliert werden:
lsmod
modprobe lirc_dev
dmesg

Sollte hier kein fehler vorliegen, sollte man die Konfiguration (irrecord) prüfen:

/etc/init.d/ stop
mode2 -d /dev/lirc0

Jetzt auf der Fernbedienung rumdrücken und es sollte etwas am Bildschirm erscheinen. Damit kann man sehen, ob der IR-Empfänger überhaupt was empfangen kann. Sollte auch das funktionieren, muss man die hardware.conf überprüfen:

sudo nano /etc/lirc/hardware.conf

Die Zeile DEVICE sollte so aussehen:
DEVICE=/dev/lirc0

Ist auch das richtig, wurde vielleicht die lirc.conf nicht ins richtige Verzeichnis erstellt.
Am Besten überprüfen, ob die lircd.conf vorhanden ist.


cp -v /root/lircd.conf /etc/lirc/lircd.conf
chown root:root /etc/lirc/lircd.conf

LIRC jetzt wieder starten:
/etc/init.d/lirc start

Jetzt wieder irw ausführen und an der Fernbedienung drücken. Sollte da nichts erscheinen und vorher kein Fehler aufgetaucht sein, ist die Aufzeichnung der Tasten nicht in Ordnung. Es muss die Fernbedienung neu angelegt werden.

irrecord -d /dev/lirc0 /root/lircd.conf

Bei dem Befehl irw, werden nur angelernte Tasten ausgegeben!

Raspberry Pi von USB-Festplatte betreiben

Raspian Pi kann nur von SD-Karten booten, gleich von USB booten ist nicht möglich. Wer Angst wegen Schreibzugriffe auf der SD-Karte hat, kann die SD-Karte auch nur zum booten verwenden. Das eigentliche System kann auf der USB-Festplatte oder USB-Stick laufen. Externe USB-Festplatten sollten eine eigene Stromversorgung haben.

Als erstes sollte sicher gestellt werden, dass die Patition MBR ist und nicht GPT. Es sollten auch keine Daten mehr drauf sein die benötigt werden. Alle Daten von der Festplatte gehen verloren!

Schließt eure USB-Festplatte am Raspberry Pi an und bootet ganz normal von euer SD-Karte. Meine Festplatte lautet /dev/sda , solltet ihr eine weitere Festplatte betreiben, kann das z.B. /dev/sdb sein.

Wer jetzt GPT hat, kann so auf MBR umstellen:
sudo parted /dev/sda

Jezt wird parted gestartet und erwartet einen Befehl:
mklabel msdos

Jetzt gebt quit als Befehl ein um parted zu beenden. Jetzt kann die Festplatte partitioniert werden:

sudo cfdisk /dev/sda

Ich habe 170 GB für eine Linux-Partition, 2GB für Swap eingerichtet. Danach muss man die Partition auswählen und den Typ der Partition angeben. Linux-Partition bekommt Type 83 und SWAP Type 82. Nun die Partitionsdaten auf die Platte schreiben und cfdisk beenden. Das Dateisystem kann nun angelegt werden:

sudo mkfs.ext4 /dev/sda1
sudo mkswap /dev/sda2

Ab jetzt kann man die Festplatte schon verwenden, man muss die Festplatte nur noch zur Verfügung stellen mit:

sudo mount /dev/sda1 /mnt

Kopiert eure Daten von der SD-Karte auf die Festplatte:
cd /mnt
sudo cp -axuv / .

Da booten von der Festplatte nicht möglich ist, löschen wir den Boot-Ordner von der Festplatte. Nicht von der SD-Karte!


sudo rm -R /mnt/boot
sudo nano /mnt/etc/fstab

Sucht die Zeile und setzt eine Raute davor:

#/dev/mmcblk0p2 / ext4 defaults,noatime 0 0

Fügt unter dieser Zeile diese Einträge hinzu:

/dev/sda1 / ext4 defaults,errors=remount-ro 0 1
/dev/sda2 none swap sw 0 0

Auf der SD-Karte muss nun cmdline.txt bearbeitet werden.

sudo nano /boot/cmdline.txt

In der einen Zeile muss root=/dev/mmcblk0p2 durch root=/dev/sda1 ersetzt werden, damit wird das System von der Platte gebootet. Jetzt kann man die SWAP-Partition noch verwenden mit:

sudo swapon -a

Jetzt soll man mit sudo reboot neustarten. Zum Testen kann man dann df -h eingeben:

Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf
rootfs 182G 2,5G 170G 2% /
/dev/root 182G 2,5G 170G 2% /
devtmpfs 211M 0 211M 0% /dev
tmpfs 44M 264K 44M 1% /run
tmpfs 5,0M 0 5,0M 0% /run/lock
tmpfs 470M 0 470M 0% /run/shm
https://dav.box.com/dav 10G 0 10G 0% /home/pi/Desktop/box.com

Wie man sehen kann hat /dev/root nun 170 GB : ), habe das Gefühl es geht schneller als von der SD-Karte. Jetzt kann man noch das dphys-swapfile deaktivieren:

sudo update-rc.d dphys-swapfile remove

Anschließend sollten Sie einen Neustart des Systems durchführen.

sudo shutdown -r now

Nach dem Neustart können Sie durch swapon überprüfen ob die Auslagerungsdatei nicht mehr verwendet wird. Bzw. nur unser angelegte SWAP-Partition verwendet wird:

swapon -s

Das Ergebniss sollte so aussehen:

Filename Type Size Used Priority
/dev/sda2 partition 1954444 0 -1

433 MHz Funk Transmitter am Raspberry Pi

FS1000A ist ein Transmitter modul, das am Raspberry Pi angeschlossen werden kann. Der Transmitter kann mit 3 bis 5 Volt umgehen.
Wobei bei 5 Volt mehr Leistung bzw. größere Reichweiten erziehlt werden. Auch bei 5 Volt komme ich maximal bis zum Nebenraum, danach reagiert der Empfänger schwer bis garnicht. Trotz intensiver Suche habe ich kein Handbuch bzw. Datasheet zu diesem Sender finden können.
Laut Internet soll der Sender auch 12V vertragen, dies kann ich aber nicht bestätigen oder verneinen. Ich habe mich für 5V entschieden, da ich keine zusätzliche Stromversorgung brauche und mir die Reichweite locker reicht.

FS1000A

Das Anschließen geht so einfach, dass man keinen Schaltplan braucht:

GND – Ground —-> Pin 6
VCC – Spannung —-> Pin 2 (5V) oder Pin 1(3.3V)
DATA – Daten —-> Pin 11 (GPIO 17)

Ihr könnt auch einen anderen GPOI verwenden, da ich aber auch IR Receiver, Power/Reset-Switch und Kontroll-LED verwende bietet sich GPIO 17 an. Als Software bietet sich rcswitch-pi oder PowerPi an. wiringPi wird für beide Anwendungen benötigt.

wiringPi:

sudo apt-get install git-core
sudo apt-get update
sudo apt-get upgrade
git clone git://git.drogon.net/wiringPi
cd wiringPi
git pull origin
cd wiringPi
./build

rcswitch:
git clone https://github.com/r10r/rcswitch-pi.git
cd rcswitch-pi
make

Zum Schalten mit rcswitch-pi muss man die Funksteckdose mit einem Code versehen (Dipschalter).
Ich habe zum Testen mal 10000A eingestellt und eine Lampe angeschlossen. Wir sollten noch im Verzeichnis rcswitch-pi sein, da jetzt den Befehle eingeben:

Zum Einschalten:
./send 10000 1 1

Zum Ausschalten:

./send 11111 1 0

IMG_0720

Raspberry Pi mit IR Remote

Ich habe noch eine alte Universal Fernbedienung (TCM 64745) und einen TSOP34136 Infared Receiver (datasheet). TSOP38238 und TSOP4838 sollten auch funktionieren, sind aber nicht von mir getestet. TSOP38238 wird auch in eBay angeboten, aber etwas teuer ; ). Hier erstmal der Schaltplan:

Raspberry_IR

1 = OUT, 2 = GND, 3 = VS

Um via GPIO Ports eine einzelne Infrarot Empfänger Diode anzusprechen, benötigt man noch LIRC. Bei Raspbian muss das noch eingerichtet werden, bei OpenELEC ist LIRC von Haus aus eingerichtet.


sudo apt-get install lirc liblircclient-dev

Damit das Modul beim Neustart automatisch geladen wird, muss /etc/modules bearbeitet werden.

sudo nano /etc/modules

Fügt folgende Zeilen am Ende der Datei ein:

lirc_dev
lirc_rpi gpio_in_pin=18

Jetzt die Config /etc/lirc/hardware.conf bearbeiten, so sollte das Ergebnis aussehen:

# /etc/lirc/hardware.conf
#
# Arguments which will be used when launching lircd
LIRCD_ARGS="--uinput"

# Don't start lircmd even if there seems to be a good config file
# START_LIRCMD=false

# Don't start irexec, even if a good config file seems to exist.
# START_IREXEC=false

# Try to load appropriate kernel modules
LOAD_MODULES=true

# Run "lircd --driver=help" for a list of supported drivers.
DRIVER="default"
# usually /dev/lirc0 is the correct setting for systems using udev
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"

# Default configuration files for your hardware if any
LIRCD_CONF=""
LIRCMD_CONF=""

Jetzt sollte das System neugestartet werden.

sudo shutdown -r now

Ob alles geklappt hat, kann man wie folgt testen:


/etc/init.d/lirc stop
mode2 -d /dev/lirc0

Nach Eingabe einfach auf die Fernbedienung drücken. Ich habe auch 2 verschiedne Windows Media Center Edition (MCE) Fernbedienungen getestet, die haben bei mir nur schlecht bis garnicht funktioniert. Am besten ging es mit den normalen Fernbedienungen.