Hallo,
ich bin dabei mich in das Thema einzuarbeiten und möchte letzendlich die Möglichkeiten des Raspberry Pi nutzen.
Sprich ich möchte Ausgänge ein und ausschalten (das habe ich schon zum laufen) und ich möchte Eingänge auslesen.
Der Zustand der Eingänge liegt ja als Datei vor.
Ein Shell-Script zu schreiben der dieses ausliest ist auch kein Problem.
Wie bekomme ich dieses nun auf FHEM.
FHEM müte regelmäßig zum Beispiel alle 10 Sekunden das Script ausführen, den Rückgabewert in eine Variable schreiben und auf der Web-Seite aktualiesieren.
Wer kann mir da weiter helfen ?
Gruß Ralf
Hallo Ralf,
hier (//forum.fhem.de/index.php?t=msg&goto=91827&rid=0&srch=GPIO#msg_91827) und hier (http://forum.fhem.de/index.php?topic=13236.msg91441#msg91441) gab's schon mal was dazu. Vielleicht hilft Dir das weiter.
Gruß PeMue
Hi PeMue,
ja die Artikel habe ich gelesen und auch noch andere im Forum sie bezihen sich alle auf die Ausgänge und das läuft auch.
Ich möchte aber die Eingänge lesen und auf der WEB Oberfläche ausgeben.
Gruß Ralf
Hallo Ralf,
bei RN Wissen (//www.rn-wissen.de/index.php/Raspberry_PI:_GPIO) wirst Du fündig. Einfach die WiringPi Bibliothek (//projects.drogon.net/raspberry-pi/wiringpi/download-and-install/) installieren und auf der Raspberry Pi Konsole mit
gpio readall
mal schauen, welcher Pin wie geschaltet ist und z.B. mit
gpio -g read 24
auslesen bzw. auf der fhem Konsole dann mit
{qx(gpio -g read 24)}
auslesen.
Gruß PeMue
Hallo PeMue,
danke für die IInfo. Habe es mal Innstalliert und auf den RPi läuft dieses auch.
Aber mit der einbindung in FHEM (fhem.cfg) geht es nicht.
define act_on_gpio_17 notyfy gpio_17 {
if ("%" ne "off") {\
qx(gpio -g write 17 1)\
} else {
qx(gpio -g write 17 0)\
}\
}
Da ich das seten schon drin hatte habe ich dieses damit erstmal versucht einzubinden.
Aber der Ausgang wird nicht umgeschatet.
Vorher hatte ich anstatt der Zeile mit qx dieses drin stehen:
system("/usr/local/bin/fhem-gpio.sh 17 0 &")
Dieses ist ein Script was auf den RPi liegt.
Was mache ich falsch bei der qx Zeile ?
Gruß Ralf
Hallo Ralf,
kommt keine Fehlermeldung bei fhem?
Es sollte eigentlich so notify heißen.
Mit ist aber nicht klar, was der GPIO Pin machen soll.
Ist das ein Eingang und über das Lesen und Setzen soll fhem etwas tun? Dann müsstest Du zyklisch auslesen und fhem sagen, was es im Falle von "1" tun soll.
Oder ist der Pin ein Ausgang (wegen write?) und Du willst mit fhem ereignisgesteuert den Pin (und das was dranhängt) anschalten.
Oder die kombinierte Version: über einen Pin liest Du etwas und wenn auf "1" ist, wird ein anderer Pin geschaltet ...
Beschreib erstmal in Worten, was Du machen willst, dann findet sich eine Lösung.
Gruß PeMue
Hi,
also letzendlich möchte ich ein Raum überwachen.
Ich möchte über zwei Kontakte einlesen an den ein Türkontakt und ein Fensterkontakt hängt.
Über ein dritten KOmtakt der als OUT konfiguriert ist eine Lampe an machen.
Von der daher benötige ich also read und auch write.
Das wirte hatte ich mit einem sh Script und über den system Befehl genacht aber darüber kann ich keine Werte einlesen.
Das was du mir geschickt hat ist ja ein Prgramm das beides kann, sprich wenn ich dieses ansteuern kann wäre ich ein Stück weiter.
Deshalb habe ich ersteinmal den Write den ich über mein Script gemacht hatte über das neue Programm versucht zu machen und das hat nicht geklappt.
Sichlich muß ich dann zyklisches einlesen und so auch einbauen aber so weit bin ich noch nicht.
Von da her wolte ich jetzt erdsteinmal das eine (write) zum laufen bringen bis ich dann mit read beginne.
Fehler stehen nicht im Log nur set gpio_17 on bzw. set gpio_17 off, aber es passiert nichts.
Gruß Ralf
Hallo Ralf,
kopiere mal folgendes
#------------------------------------------------------------------------------
# RPiSetGPIO:
# set GPIO port pin
#
# reference:
# http://wiringpi.com/the-gpio-utility/
#------------------------------------------------------------------------------
sub RPiSetGPIO ($$)
{
my ($port, $value) = @_;
# test, if WiringPi is installed
if (-e "/usr/local/bin/gpio")
{
# range of port/nomenclature/direction should be also checked tbd.
# check and adjust parameter value
$value = ($value > 1) ? 1 : $value;
$value = ($value < 0) ? 0 : $value;
# set the GPIO value
my $command = "gpio -g write " . $port . " " . $value;
#Log(1, $command);
qx($command);
}
else {return "error: WiringPi is not installed"};
}
#-----RPiSetGPIO---------------------------------------------------------------
#------------------------------------------------------------------------------
# RPiReadGPIO:
# reads GPIO port pin
#------------------------------------------------------------------------------
sub RPiReadGPIO ($)
{
my ($port) = @_;
# test, if WiringPi is installed
if (-e "/usr/local/bin/gpio")
{
# range of port/nomenclature should be also checked tbd.
# read the GPIO value
my $command = "gpio -g read " . $port;
#Log(1, $command);
my $result = qx($command);
return $result;
}
else {return "error: WiringPi is not installed"};
}
#-----RPiReadGPPIO-------------------------------------------------------------
in Deine 99_MyUtils.pm. Ist noch relativ rudimentär, aber Du solltest mit
RPiReadGPIO(<port>)
bzw. mit
RPiSetGPIO(<port>, <value>)
auf die Ports zugreifen können. Wenn die Routine halbwegs vernünftig funktioniert, werde ich sie in die RPiUtils mit einbauen.
Gruß PeMue
Edit:
Frage an die Runde: Kennt jemand eine Möglichkeit, den Status (ob input/output/...) eines Pins beim Raspberry Pi auszulesen? Ich würde ungerne auf einen als input (ggf. mit anliegendem high) geschalteten Pin ein low schreiben wollen. Oder ist der Raspberry Pi hier fehlertolerant und führt das gar nicht aus? WiringPi gibt diesbezüglich leider nichts her ...
Zitat von: PeMue schrieb am Do, 12 September 2013 17:11Hallo Ralf,
Frage an die Runde: Kennt jemand eine Möglichkeit, den Status (ob input/output/...) eines Pins beim Raspberry Pi auszulesen? Ich würde ungerne auf einen als input (ggf. mit anliegendem high) geschalteten Pin ein low schreiben wollen. Oder ist der Raspberry Pi hier fehlertolerant und führt das gar nicht aus? WiringPi gibt diesbezüglich leider nichts her ...
Die HiPi Perl Bibliothek unterstützt das meines Wissens, mit ihr kann man auch die Interruptfunktion unter Perl nutzen.
http://raspberry.znix.com/
Dieser Thread ist ja schon etwas älter, aber ich bin im Forum darüber gestolpert da ich nach einer Möglichkeit suche eine GPIO eines Raspberry dauerhaft zu überwachen. Sobald sich der Zustand des GPIO ändert (High/low) soll etwas in FHEM passieren (dabei ist es erstmal egal ob etwas geschaltet wird, eine whatsapp Nachricht gesandt wird oder sonst was).
Ein Device für den passenden GPIO Eingang habe ich angelegt und in den Readings wird mir auch das Pinlevel angezeigt. Leider nie so richtig "live". Immer erst wenn ich die Seite im Browser aktualisiere bekomme ich das aktuelle Pinlevel angezeigt. Im Event monitor wird dies auch nicht angezeigt, sonst könnte ich es mir ja dort abgreifen.
Daher habe ich mich mal an diesem Thread versucht und den Code in meien 99_myutils eingefügt. Danach den Befehl RPiReadGPIO(<port>)
ausgeführt aber dann wird mir von FHEM gesagt, dass RPiReadGPIO kein bekanntes Kommando ist. Auch dann steht weder im Log noch im Event Monitor etwas darüber (Fehlermeldung bspw)...
Da nun 2 Jahre vergenagen sind, gibt es womöglich andere Lösungswege die ich bisher hier nicht gefunden habe.
Kann mir jemand Tipps geben?
Danke.
Gruß
Christian
benutze doch das Modul RPI_Gpio
Beschreibung findest du in der commandref
Danke, Tomaten auf den Augen
Hallo,
ich versuche es mal in diesem alten Thread. Ich möchte über das RPI GPIO vier Eingänge abfragen. Habe auf einem Testsystem das neueste debian Image 2016-02-09-raspbian-jessie-lite.img installiert und die üblichen updates und Zusatzmodule für FHEM eingespielt.
FHEM kann ich dann, wie erwartet über Web erreichen.
Jetzt wollte ich das Modul RPI_GPIO verwenden und habe entsprechend der Command Referenz sudo adduser fhem gpio
sudo reboot auf der Linux Kommandozeile ausgeführt. Danach ist FHEM nicht mehr über WEB erreichbar. Ein /etc/init.d/fhem status sagt, dass fhem running ist.
Woran kann das liegen?
Viele Grüße
Wolfgang
schau mal, was das logfile sagt:
cat /opt/fhem/log/fhem-2016-02.log
erstmal danke für die schnelle Antwort.
Das log sieht so aus:
2016.02.13 15:15:45 1: Including fhem.cfg
2016.02.13 15:15:45 3: telnetPort: port 7072 opened
2016.02.13 15:15:46 3: WEB: port 8083 opened
2016.02.13 15:15:46 3: WEBphone: port 8084 opened
2016.02.13 15:15:46 3: WEBtablet: port 8085 opened
2016.02.13 15:15:46 2: eventTypes: loaded 0 events from ./log/eventTypes.txt
2016.02.13 15:15:46 1: Including ./log/fhem.save
2016.02.13 15:15:46 1: usb create starting
2016.02.13 15:15:46 3: Probing CUL device /dev/ttyAMA0
2016.02.13 15:15:47 3: Probing TCM_ESP3 device /dev/ttyAMA0
2016.02.13 15:15:47 3: Probing FRM device /dev/ttyAMA0
irgend wie fehlt da was am Ende im Vergleich zu meinen anderen FHEM Installationen. Warum das Probing TCM_ESP3 und Probing FRM device da steht, kenne ich so auch nicht. Ist zwar ein ganz 'nacktes' FHEM, also noch ohne irgend eine zusätzliches define, aber wie oben erwähnt, vor dem adduser und reboot konnte ich mich wie gewohnt auf der FHEM Web-Oberfläche bewegen.
Ich habe das ganze jetzt auch schon zweimal vom flashen der SDcard angefangen durchgeführt und das Verhalten ist reproduzierbar.
VG Wolfgang
Wie ein adduser zum Absturz von Fhem führen soll ist mir schleierhaft.
Aber dann sollte es nach sudo deluser fhem gpio
ja wieder laufen.
Du könntest mal die autocreate Sachen in der fhem.cfg auskommentieren. Es scheint, das er dort hängen bleibt.
habe das mit
sudo deluser fhem gpio
ausprobiert und dann läuft fhem auch wieder wie gewohnt. Der log sieht dann so aus
2016.02.13 16:53:40 1: Including fhem.cfg
2016.02.13 16:53:40 3: telnetPort: port 7072 opened
2016.02.13 16:53:40 3: WEB: port 8083 opened
2016.02.13 16:53:40 3: WEBphone: port 8084 opened
2016.02.13 16:53:40 3: WEBtablet: port 8085 opened
2016.02.13 16:53:40 2: eventTypes: loaded 0 events from ./log/eventTypes.txt
2016.02.13 16:53:40 1: Including ./log/fhem.save
2016.02.13 16:53:40 1: usb create starting
2016.02.13 16:53:41 3: Probing CUL device /dev/ttyAMA0
2016.02.13 16:53:41 3: Probing TCM_ESP3 device /dev/ttyAMA0
2016.02.13 16:53:41 3: Probing FRM device /dev/ttyAMA0
2016.02.13 16:53:46 1: usb create end
2016.02.13 16:53:46 2: SecurityCheck: WEB,WEBphone,WEBtablet has no basicAuth attribute. telnetPort has no password/globalpassword attr ibute. Restart FHEM for a new check if the problem is fixed, or set the global attribute motd to none to supress this message.
2016.02.13 16:53:46 0: Featurelevel: 5.7
2016.02.13 16:53:46 0: Server started with 9 defined entities (version $Id: fhem.pl 9893 2015-11-15 08:43:05Z rudolfkoenig $, os linux, user fhem, pid 453)
Mit der Auskommentierung des autocreate werde ich gleich noch versuchen.
...mit auskommentiertem autocreate funktioniert fhem auch nach adduser fhem gpio ???
VG Wolfgang
Zitat von: pechnase am 13 Februar 2016, 17:08:22
...mit auskommentiertem autocreate funktioniert fhem auch nach adduser fhem gpio ???
FRM steht bei dir im Log als letztes.
Dort vermute ich den Fehler.
Mit RPI_GPIO sollte es nichts zu tun haben. Das Modul wird erst bei einem define geladen.
Hallo ich hab irgendwie ein ganz komischen Fehler.
Ich kann über Fhem die GPIO nicht schalten. Ich kann aber über Shell die LED an schalten und über Fhem aus. Aber ich kann sie nicht über Fhem einschalten.
ich steh gerade wirklich auf dem Schlauch
hoffe ihr könnt mir helfen.
###GPIO###
define GPIO_14_L1 dummy
attr GPIO_14_L1 room GPIO,
attr GPIO_14_L1 setList on off
define on_GPIO_14_L1 notify GPIO14__L1:on {\
system("/usr/local/bin/gpio write 15 1")}
define off_GPIO_14_L1 notify GPIO_14_L1:off {\
system("/usr/local/bin/gpio write 15 0")}
define GPIO_3_L2 dummy
attr GPIO_3_L2 room GPIO,
attr GPIO_3_L2 setList on off
define on_GPIO_3_L2 notify GPIO3__L2:on {\
system("/usr/local/bin/gpio write 9 1")}
define off_GPIO_3_L2 notify GPIO_3_L2:off {\
system("/usr/local/bin/gpio write 9 0")}
Wenn Du Dir folgendes anguckst:
define on_GPIO_14_L1 notify GPIO14__L1:on ...
define off_GPIO_14_L1 notify GPIO_14_L1:off
Was fällt Dir auf?
Kleiner Hinweis noch: Gucke dir die Unterschiede im Namen von GPIO14_L1 an ... dann wird Dir auffallen, das Du beim "on" zwei _ hast, beim off dagegen nur eines.
Kurzgefasst:
Der on wird niemals Trickern ....
ach ver.....
Danke ich hab das voll übersehen
Hallo hänge mich auch mal hier ran ...
kann mir jemand erklären was das in der Doku bedeutet?
"Es funktioniert auch mit der Jessie Version. Allerdings NICHT wenn ein Kernelupgrade durchgeführt wird"
Kann ich das nun mit dem aktuellen Versionen verwenden? Oder muss ich immer damit rechnen das es wieder mal nicht geht?
Ich möchte 8 pins schalten ...
Kannst du. Wenn du ein aktuelles Raspbian Image verwendest wird es funktionieren. Es kann nur Probleme geben, wenn du ein bestehendes System upgradest. Z.B von wheezy auf jessie.
Gesendet von meinem HTC One mit Tapatalk
Also ich verwende das raspbian jessie lite, und updates mache ich nur übers apt-get upgrade / apt-get update .... damit sollte es dann passen oder?
Update ist kein Problem. Upgrade kann eins sein.
Ich weiss es auch nicht genau. Aber die meisten Probleme bezüglich Rpi Gpio hier im Forum tauchen nach solchen Aktionen auf.
Aber es ist eigentlich ganz einfach: Wenn alles funktionierte und plötzlich nix mehr geht weil ein Upgrade/Kernelupdate gemacht wurde möchte ich nicht belästigt werden 😁.
Meistens werden die Rechte zerschossen und dann laufen die Gpios nur noch mit Root Rechten. I. Diesem Fall hilft nur eine Neuinstallation.
Gesendet von meinem HTC One mit Tapatalk
hmmm okey danke für die antwort .... werde mal überlegen müssen ob das dann das richtige ist ... wenn es mit jedem update zu einem Ausfall kommen kann ...
oder ob ich die Relais doch anderes anbinden werde
Wie gesagt update ist kein Problem.
Und wenn die Rechte nicht mehr passen dann kannst du sie auch noch in der rc.local oder so korrigieren.
Gesendet von meinem HTC One mit Tapatalk