FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: ChHerrm am 13 August 2015, 19:11:12

Titel: Problem mit Auslesen eines GPIO-Pins in 99_myUtils
Beitrag von: ChHerrm am 13 August 2015, 19:11:12
Hallo!
Ich habe momentan das Problem, dass ich einen GPIO-Pin über FHEM nicht ausgelesen bekomme. Das Ziel ist, dass ich dauerhaft nebenbei den True-Zustand des Pins feststelle und daraufhin ein Python-Skript ausführe. Bisher habe ich es weder in der Config-Datei geschafft noch über 99_myUtils.

Aktuell sieht es folgendermaßen in der 99_myUtils-Datei aus: sub
Alarmpin_auslesen()
{
  my ($ALARM) = {system('sudo gpio read 29')};
  if (($ALARM) == 1)
  {
    system('sudo python2 /opt/fhem/log/SerielleBefehle/Alarm.py&');;
  }
}

Hierfür bekomme ich auch keine Fehlermeldung, es wird aber auch nicht ausgeführt. Wie genau muss ich diese Funktion in der cfg-Datei aufrufen damit es ständig durchlaufen wird?

Kann mir jemand dabei helfen? :-\ Was ich an Material in anderen Forumsbeiträgen gefunden habe, lief in meinem Fall nicht so richtig, daher habe ich inzwischen keine Idee dafür mehr :(
Titel: Antw:Problem mit Auslesen eines GPIO-Pins in 99_myUtils
Beitrag von: ChHerrm am 14 August 2015, 10:04:05
Okay vielleicht nochmal besser formuliert und inzwischen etwas anders versucht:

In der 99_myUtils.pm:

sub
Alarmpin_auslesen($)
{
  my ($ALARM) = @_;
  $ALARM = system('sudo gpio read 29');;
  if (($ALARM) == 1)
  {
    system('sudo python2 /opt/fhem/log/SerielleBefehle/Alarm.py&');;
  }

}



In der fhem.cfg dann eingesetzt:

define Alarmmeldung dummy
define TEST notify Alarmmeldung:* { Alarmpin_auslesen($ALARM);; }


In welcher der Dateien die Anweisung umgesetzt wird ist mir eigentlich egal, hauptsache der Pinzustand wird abgefragt und bei Bedarf dann das Pythonskript ausgeführt. Hat niemand eine Idee dazu?
Titel: Antw:Problem mit Auslesen eines GPIO-Pins in 99_myUtils
Beitrag von: Wzut am 14 August 2015, 12:30:38
und wie soll der dummy denn dein notify triggern ?
Ich würde :
a. den dummy und die sub Alarmpin_auslesen in der 99_myUtils rauswerfen
b. mit dem Modul RPI_GPIO den Pin überwachen, das notify auf den high/low state dieses device hetzen und das externe Skript auch direkt darin aufrufen
Titel: Antw:Problem mit Auslesen eines GPIO-Pins in 99_myUtils
Beitrag von: bergadler am 14 August 2015, 13:58:44
Hallo,

schau mal in diesen Thread:

http://forum.fhem.de/index.php/topic,38069.msg303865.html#msg303865 (http://forum.fhem.de/index.php/topic,38069.msg303865.html#msg303865)

Gruß
Titel: Antw:Problem mit Auslesen eines GPIO-Pins in 99_myUtils
Beitrag von: ChHerrm am 17 August 2015, 17:40:54
Okay ich habe das jetzt versucht anders umzusetzen mit Hilfe des Threads, RPI_GPIO und ohne 99_myUtils. Die Schritte:
Auf dem Raspberry Pi 2:
echo "21" > sys/class/gpio/export
echo "in" > /sys/class/gpio/export



FHEM in der fhem.cfg-Datei:
define Alarmpin RPI_GPIO 21
attr Alarmpin direction input
attr Alarmpin restoreOnStartup yes
get Alarmpin
define Alarmmerker notify Alarmpin:high {system('sudo python2 /opt/fhem/log/SerielleBefehle/Alarm.py&');;}


Dann bekomme ich aber die Fehlermeldung "Current Value for Alarmpin". Wie muss ich das verbessern? Funktioniert das überhaupt per get?
Titel: Antw:Problem mit Auslesen eines GPIO-Pins in 99_myUtils
Beitrag von: Wzut am 17 August 2015, 19:20:59
wozu das get ?
Du hast doch das wunderschöne Attribut interrupt , das weckt schon dein notify wenn es Zeit ist :)
Titel: Antw:Problem mit Auslesen eines GPIO-Pins in 99_myUtils
Beitrag von: Puschel74 am 17 August 2015, 19:34:50
Ausserdem hat ein get in der Konfig nichts zu suchen.
Titel: Antw:Problem mit Auslesen eines GPIO-Pins in 99_myUtils
Beitrag von: ChHerrm am 17 August 2015, 20:56:58
Okay danke für die Hinweise. Leider läuft es aber immer noch nicht. Wenn ich das Folgende eingebe, ist danach nicht mal mehr FHEM erreichbar (seit ich "interrupt both" ergänzt habe). Erst muss ich FHEM in der Shell stoppen und nochmal starten. Die Pinbezeichnung des GPIO21 bezieht sich auf die Darstellung dieser Seite, durchgezählt also Pin 40: http://www.element14.com/community/docs/DOC-73950/l/raspberry-pi-2-model-b-gpio-40-pin-block-pinout (http://www.element14.com/community/docs/DOC-73950/l/raspberry-pi-2-model-b-gpio-40-pin-block-pinout)
Sollte also denke ich auch stimmen von der Bezeichnung her. Also was stimmt am folgenden Code noch immer nicht?

define Alarmpin RPI_GPIO 21
attr Alarmpin direction input
attr Alarmpin interrupt both
attr Alarmpin restoreOnStartup yes
define Alarmmerker notify Alarmpin:high {system('sudo python2 /opt/fhem/log/SerielleBefehle/Alarm.py&');;}
Titel: Antw:Problem mit Auslesen eines GPIO-Pins in 99_myUtils
Beitrag von: Wzut am 18 August 2015, 07:38:19
Dann fang doch ersteinmal klein an und lasse interrupt und restoreOnStartup weg , nutze statt dessen ein kurzes Intervall wie z.B. 5
Für das Modul gibt es auch einen eigenen Fred : http://forum.fhem.de/index.php/topic,16519.0.html
Ob dein GPIO21 eine Sonderrolle hat kann ich nicht sagen, habe keinen Pi2 auf dem Basteltisch, d.h. ich muss mich an die Pin Nr. in der commandref des RPI_GPIO Moduls halten.
Titel: Antw:Problem mit Auslesen eines GPIO-Pins in 99_myUtils
Beitrag von: ChHerrm am 18 August 2015, 10:55:22
Hm bisher gibt's noch immer keinen Erfolg zu verzeichnen, obwohl das doch eigentlich keine soo große Hürde sein kann :-\ Habe jetzt wie in dem anderen Thread und der Referenz erwähnt mit:

echo 29 > /sys/class/gpio/export
chown -R fhem:root /sys/devices/virtual/gpio/*
chown -R fhem:root /sys/class/gpio/*


in die Datei /etc/rc.local zu schreiben, da es ja eigentlich fast nur noch an den Rechten hängen kann. Aber auch danach nichts.

In der fhem.cfg siehts folgendermaßen aus (sicherheitshalber sowohl mit GPIO Nr. 21 als auch 29 darin enthalten):

define Alarmpin RPI_GPIO 29
attr Alarmpin direction input
attr Alarmpin poll_interval 1
define Alarmmerker notify Alarmpin:low {system('sudo python2 /opt/fhem/log/SerielleBefehle/Alarm.py&');;}


Egal ob ich den Pegel high oder low erkennen möchte, tut sich nichts. Im Terminal wird der Pegelwechsel aber erkannt.
Das Logfile gibt mir folgenden Fehler:

2015.08.18 10:52:59 5: Alarmpin, in fileaccess: value
2015.08.18 10:52:59 1: Can't open file: Alarmpin, value
2015.08.18 10:52:59 1: Alarmpin: readout of Pinvalue fail

Was gibt es sonst noch zu verbessern oder mal auf anderem Weg zu versuchen? Liegt es noch immer an Rechten? FHEM hat bei mir eigentlich alle Rechte, kann ja auch die Skripte etc ausführen.
Titel: Antw:Problem mit Auslesen eines GPIO-Pins in 99_myUtils
Beitrag von: Wzut am 18 August 2015, 11:57:54
Zitat von: ChHerrm am 18 August 2015, 10:55:22
chown -R fhem:root /sys/devices/virtual/gpio/*

---snipp ---
2015.08.18 10:52:59 5: Alarmpin, in fileaccess: value

gibt es bei mir unter /sys/devices/virtual/ nichts, schau doch bitte mal mit "ls -l /sys/class/gpio" nach wie die Dateien wirklich heissen und welche Rechte vorhanden sind.
Ich kann bei mir z.B. den owner root.gpio gar nicht ändern, statdessen ist der User fhem  in der Gruppe gpio (falls dein fhem unter dem User fhem User läuft)
Titel: Antw:Problem mit Auslesen eines GPIO-Pins in 99_myUtils
Beitrag von: ChHerrm am 18 August 2015, 12:50:35
Also unter "ls -l /sys/class/gpio" bekomme ich:

lrwxrwxrwx 1 root gpio 0 Aug 18 10:51 gpio29 -> ../../devices/soc/3f200000.gpio/gpio/gpio29

Aber wie es mit der Information jetzt weitergeht, weiß ich nicht so recht :-\
Titel: Antw:Problem mit Auslesen eines GPIO-Pins in 99_myUtils
Beitrag von: Wzut am 18 August 2015, 14:11:19
Zitat von: Wzut am 18 August 2015, 11:57:54
statdessen ist der User fhem  in der Gruppe gpio (falls dein fhem unter dem User fhem User läuft)

wie packt man unter Linux einen User in eine Gruppe ?
Tante Goggle kennt bestimmt ne Antwort ...
Titel: Antw:Problem mit Auslesen eines GPIO-Pins in 99_myUtils
Beitrag von: ChHerrm am 18 August 2015, 16:43:31
Hm auch danach habe ich es nicht zum Laufen bekommen, aber nun einen anderen Weg für die Umsetzung genutzt und das Ganze ohne IO-Pins gebastelt. Funktioniert jetzt auch, das Thema hat sich somit erledigt. Trotzdem danke für die Hilfe! :)
Titel: Antw:Problem mit Auslesen eines GPIO-Pins in 99_myUtils
Beitrag von: kurtklaiber am 19 August 2015, 11:29:20
Ich hatte ein ähnliches Problem. Da sieht mir ganz nach einem Problem der Berechtigung aus. Ich konnte das Problme wie folgt lösen:

Achtung: Auch wenn das Kommando chmod 660 ... durch chmod 666 ... (Zugriffsrecht fuer alle) wird kein Zugriffsrecht für others zugelassen. Wenn andere Benutzeraccounts als der Standarduser "pi" auf die GPIO-Pins zugreifen sollen, müssen Sie zusätzlich in die Gruppe gpio eingetragen werden:

sudo usermod -a -G gpio <Username>

Nähere Informationen dazu findest du hier:

http://www.netzmafia.de/skripten/hardware/RasPi/RasPi_GPIO_Shell.html

Viel Glück