Raspberry Pi: GPIOs schalten: Unterschied zwischen den Versionen
Froggy (Diskussion | Beiträge) (→Bash Script: Rechteänderung mit chmod, chown hat bei meiner Standard-Installation nicht funktioniert) |
Froggy (Diskussion | Beiträge) (Bash-Script und Dummy-Schalter zusammensortiert) |
||
Zeile 1: | Zeile 1: | ||
Mit FHEM lassen sich auch die '''GPIOs''' des [[Raspberry Pi]] steuern. Generell gibt es einige Möglichkeiten, eine entsprechende Steuerung zu verwirklichen. Als Informationsquelle empfiehlt sich hier die [http://elinux.org/RPi_Low-level_peripherals Low-Level Peripherals Seite des Embedded Linux Wiki] | Mit FHEM lassen sich auch die '''GPIOs''' des [[Raspberry Pi]] steuern. Generell gibt es einige Möglichkeiten, eine entsprechende Steuerung zu verwirklichen. Als Informationsquelle empfiehlt sich hier die [http://elinux.org/RPi_Low-level_peripherals Low-Level Peripherals Seite des Embedded Linux Wiki] | ||
== Perl-Modul == | == Perl-Modul == | ||
Zeile 39: | Zeile 13: | ||
* Es werden udev-Regeln erstellt (das macht Raspbian automatisch mit der gpio Gruppe). siehe hierzu https://stackoverflow.com/a/30940526 | * Es werden udev-Regeln erstellt (das macht Raspbian automatisch mit der gpio Gruppe). siehe hierzu https://stackoverflow.com/a/30940526 | ||
* Verwendung vom "WiringPi" tool (s.u.) | * Verwendung vom "WiringPi" tool (s.u.) | ||
'''WiringPi installieren: (normalerweise nicht notwendig)''' | '''WiringPi installieren: (normalerweise nicht notwendig)''' | ||
Zeile 57: | Zeile 29: | ||
[https://github.com/zhaolei/WiringOP Orange PI] | [https://github.com/zhaolei/WiringOP Orange PI] | ||
[https://github.com/blecher-at/WiringOP-Zero Orange PI Zero] | [https://github.com/blecher-at/WiringOP-Zero Orange PI Zero] | ||
'''FHEM - RPI_GPIO Device erstellen''' | '''FHEM - RPI_GPIO Device erstellen''' | ||
Zeile 70: | Zeile 41: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Dummy-Schalter == | == Bash Script == | ||
Zum Schalten der GPIOs via Bash kann folgendes Script (fhem-gpio.sh) verwendet werden: | |||
{{Randnotiz|RNTyp=Info|RNText=Das Script benötigt entsprechende Rechte. Der Benutzer muss dazu in der Gruppe gpio sein! Einfach zum Test kann es auch mit root (z.B. per sudo) aufgerufen werden.}} | |||
<syntaxhighlight lang="bash">#!/bin/bash | |||
PORT=$1; | |||
if ! [ -d /sys/class/gpio/gpio$PORT ] | |||
then | |||
echo "$PORT" > /sys/class/gpio/export | |||
echo "out" > /sys/class/gpio/gpio$PORT/direction | |||
fi | |||
STATE=$2; | |||
if [ $STATE -ge 1 ] | |||
then | |||
STATE=1 | |||
fi | |||
echo "$STATE" > /sys/class/gpio/gpio$PORT/value | |||
</syntaxhighlight> | |||
Der Einfachheit halber kann das Script unter /usr/sbin kopiert werden. Für den Aufruf unten muss es ausführbar gemacht werden: <code>sudo chmod +x /usr/sbin/fhem-gpio.sh</code> | |||
Der Aufruf des Scripts erfolgt dann mit Angabe der Pinnummer sowie des Zustands des Pins, z. B.: | |||
<syntaxhighlight lang="bash">fhem-gpio.sh 17 1 # Pin 17 in High-Zustand versetzen | |||
fhem-gpio.sh 17 0 # Pin 17 in Low-Zustand versetzen | |||
</syntaxhighlight> | |||
=== Dummy-Schalter === | |||
Über einen Dummy-Schalter kann das Bash-Script dann getriggert werden. (fhem muss in der Grupp gpio sein) | Über einen Dummy-Schalter kann das Bash-Script dann getriggert werden. (fhem muss in der Grupp gpio sein) | ||
Version vom 17. August 2021, 21:35 Uhr
Mit FHEM lassen sich auch die GPIOs des Raspberry Pi steuern. Generell gibt es einige Möglichkeiten, eine entsprechende Steuerung zu verwirklichen. Als Informationsquelle empfiehlt sich hier die Low-Level Peripherals Seite des Embedded Linux Wiki
Perl-Modul
Das Modul RPI_GPIO für den Zugriff auf die GPIO Pins des Raspberry wird bereits mit FHEM mitgeliefert. Die Ansteuerung der GPIOs erfolgt über das Filesystem (sysFs). Daher werden in den meisten Anwendungsfällen keine weiteren Programme/Treiber benötigt.
Die WiringPi Bibliothek wird nur benötigt, wenn die internen Pullups/Pulldowns genutzt werden sollen oder dem FHEM User keine direkten Zugriffsrechte auf das GPIO Verzeichnis gegeben werden können.
Die GPIOs werden über die BCM GPIO Nummerierung angesprochen und NICHT über die WiringPi Nummerierung.
Installationsschritte sind in der commandref zu finden. Diskussions Thread im Forum
Installation
Der Benutzer „fhem“ muss Zugriff auf die sysfs dateien haben. Dafür gibt es mehrere Möglichkeiten:
- Der Benutzer „fhem“ wird der Gruppe „gpio“ hinzugefügt (funktioniert nur unter manchen Distributionen, z.B. Raspbian):
sudo adduser fhem gpio
- Es werden udev-Regeln erstellt (das macht Raspbian automatisch mit der gpio Gruppe). siehe hierzu https://stackoverflow.com/a/30940526
- Verwendung vom "WiringPi" tool (s.u.)
WiringPi installieren: (normalerweise nicht notwendig)
sudo apt-get install git-core
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build
sudo reboot
Known issues mit WiringPi
- active_low wird nicht korrekt exportiert, und damit sieht es so aus als wurde das setting ignoriert. Das ist ein Fehler im WiringPi. Gefixte Version
WiringPi für andere Hardware als RaspberryPI
FHEM - RPI_GPIO Device erstellen
define [Name] RPI_GPIO [port]
z.B.: define GPIO17 RPI_GPIO 17
Um den Port schalten zu können ist es nötig den RPI_GPIO als output zu definieren.
attr GPIO17 direction output
"set GPIO17 on" # Pin 17 in High-Zustand versetzen
"set GPIO17 off" # Pin 17 in Low-Zustand versetzen
Bash Script
Zum Schalten der GPIOs via Bash kann folgendes Script (fhem-gpio.sh) verwendet werden:
#!/bin/bash
PORT=$1;
if ! [ -d /sys/class/gpio/gpio$PORT ]
then
echo "$PORT" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio$PORT/direction
fi
STATE=$2;
if [ $STATE -ge 1 ]
then
STATE=1
fi
echo "$STATE" > /sys/class/gpio/gpio$PORT/value
Der Einfachheit halber kann das Script unter /usr/sbin kopiert werden. Für den Aufruf unten muss es ausführbar gemacht werden: sudo chmod +x /usr/sbin/fhem-gpio.sh
Der Aufruf des Scripts erfolgt dann mit Angabe der Pinnummer sowie des Zustands des Pins, z. B.:
fhem-gpio.sh 17 1 # Pin 17 in High-Zustand versetzen
fhem-gpio.sh 17 0 # Pin 17 in Low-Zustand versetzen
Dummy-Schalter
Über einen Dummy-Schalter kann das Bash-Script dann getriggert werden. (fhem muss in der Grupp gpio sein)
Im Fall von FS20 sähe eine entsprechende Schalter-Definition beispielsweise so aus:
define gpio_17 FS20 [Hauscode] [Devicecode]
attr gpio_17 dummy 1
define act_on_gpio_17 notify gpio_17 {\
if ("$EVENT" ne "off") {\
system("fhem-gpio.sh 17 1 &")\
} else {\
system("fhem-gpio.sh 17 0 &")\
}\
}