RPI_GPIO output

Begonnen von Maergsche, 13 Juni 2014, 14:57:45

Vorheriges Thema - Nächstes Thema

Maergsche

Hallo, ich nutze an meinem RaspberryPi seit kurzem das Modul RPI_GPIO und
steuere damit eine Relaikarte an.

Wenn ich den Pi nun starte, ist das Relai auch aus, so wie es sein soll ... sobald Fhem
geladen ist schaltet das Relai an. Im Fhem ist der schalter dann auf "off" obwohl das Relai an ist!

Schalte ich nun im Fhem auf "on" so schaltet das Relai aus.

Wie kann ich den GPIO so konfigurieren, dass er beim starten des RaspberrPI und auch beim Laden
von Fhem aus bleibt?

Danke schonmal für eure Hilfe!

PS: auch beim Absetzen des Befehles "rereadcfg" schaltet das Relai kurz aus und dann wieder an.


define Pin11 RPI_GPIO 17
attr Pin11 direction output
attr Pin11 room Haus

Puschel74

Hallo,

da wohl kein direktes FHEM-Anfängerproblem sondern eher Modulbezogen hab ich das mal hier her verschoben (wo es lt. Maintainer.txt hin sollte)  ;)

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Maergsche

#2
Hallo,

so nun bin ich schon mal ein schritt weiter!

Mit...
attr Pin11 active_low yes
... mit "on" in Fhem schalte ich nun das Relai an und "off" wieder aus.

Der Befehl steht übrigends nicht in der Commandref !

Bei einem Neustart des PI's und bei einem "shutdown restart" schaltet das Relai aber
weiterhin für wennige Sekunden auf "on". Da scheint doch was beim Inizialisieren schief
zu gehen... Ich habs nun erstmal aufgegeben! Ich Hoffe also auf euch  8) ;)



klausw

Zitat von: Maergsche am 13 Juni 2014, 15:51:14
Hallo,

so nun bin ich schon mal ein schritt weiter!

Mit...
attr Pin11 active_low yes
... mit "on" in Fhem schalte ich nun das Relai an und "off" wieder aus.

Der Befehl steht übrigends nicht in der Commandref !

Bei einem Neustart des PI's und bei einem "shutdown restart" schaltet das Relai aber
weiterhin für wennige Sekunden auf "on". Da scheint doch was beim Inizialisieren schief
zu gehen... Ich habs nun erstmal aufgegeben! Ich Hoffe also auf euch  8) ;)

active_low im commandref wird nachgeliefert. Das es noch keinem aufgefallen ist 8)

Aber das passt schon, die Relaismodule die man käuflich erwerben kann haben meist invertierte Logik.

Was beim Booten passiert kann ich nicht beeinflussen. Aber wenn es während fhem Start passiert ist vielleicht abstellbar. Sind es wirklich mehrere Sekunden? Oder eher der Bruchteil einer Sekunde?
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

hexenmeister

#4
Ich hatte ein ähnliches Problem, allerdings in Verbindung mit Firmata. Da das RelayModul gegen Masse schaltete, kam es beim Start zu einem kurzen Einschalten. Das Problem habe ich durch das Vorschalten eines Transistors (zwecks Invertieren des Signals) gelöst.
(http://s6z.de/cms/images/content/arduino/Gong/Schema_Arduino_Klingel.png)
(s. die orangene Teilschaltung)

Maergsche

Zitat von: klausw am 13 Juni 2014, 18:32:51
active_low im commandref wird nachgeliefert. Das es noch keinem aufgefallen ist 8)

Aber das passt schon, die Relaismodule die man käuflich erwerben kann haben meist invertierte Logik.

Was beim Booten passiert kann ich nicht beeinflussen. Aber wenn es während fhem Start passiert ist vielleicht abstellbar. Sind es wirklich mehrere Sekunden? Oder eher der Bruchteil einer Sekunde?

Hallo Klausw,

so die letzen Tage waren bei mir etwas stressig, so dass ich mich nun erst jetzt wieder um das Thema kümmen konnte ... "Leider" bin ich auch dieses Wochenende nicht zu Hause, doch wollte ich nun endlich mal eine Rückmeldung geben.

Mein Relai hat auch eine Invertierte Logik, was erstmal ja kein Problem darstellen sollte....  Wenn ich den PI komplett ohne Definiton der GPIO's in der fhem.cfg neu starte, dann schaltet auch kein Relai. Mit der GPIO Definiton in der fhem.cfg schaltet das Relai beim Neustart.

Auch bei einem 'rereadcfg' schaltet das Relai. Somit muss es vom Modul '51_RPI_GPIO.pm' kommen.

Ich habe folgende Vermuttung:
Und zwar wird bei jedem 'rereadcfg' der GPIOxx neu in /sys/class/gpio/ angelegt (Egal, ob bereits vorhanden, oder nicht!). Dabei wird im default der Parameter auf 'active_low' auf 0 gesetzt. Im Späteren Verlauf wird dann der  'active_low' Parameter wieder auf 1 gesetzt. Ziehl ist es also, dass der GPIO nicht immer neu gesetzt wird.

Anbei noch ein Video mit der Schaltzeit.... Ich denke das erklärt das Timing am besten (bei Absetzen des 'rereadcfg' habe ich kräftig auf die Taste gehauen, damit du das Timing bis zum 1. Schalten des Relais auch hast :-) )

Gruß und Dank
Marc

klausw

Hi Marc,

stimmt, beim define wird der GPIO immer exportiert. Sicher ist sicher  8)

Ich hänge Dir mal eine neue Modulversion an.

Änderungen:
- gpio wird nur exportiert wenn er nicht vorher schon angelegt ist
- wenn der fhem user schreibrechte auf  /sys/class/gpio/export hat wird der gpio darüber angelegt (sonst, falls vorhanden, über gpio utility)
- als erstes wird active_low gesetzt
- danach wird der gpio, wenn es ein output sein soll mit  echo <high|low> /sys/class/gpio/gpioxx/direction din einem befehl auf output und level gesetzt

Das ganze klappt aber nur bei neueren raspbian Versionen (nicht älter als 6 Monate)
Bei diesen sind die gpios in der group gpio und können direkt von jedem, der auch Mitglied in dieser Gruppe ist genutzt werden.
Bei älteren Versionen läuft das über das gpio utility, da funktioniert das leider nicht.

Grüße
Klaus
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Maergsche

Hallo Klaus,

danke für die schnelle Antwort. Ich habe das Modifizierte Modul getestet,
doch leider hat sich in Bezug auf das Relaischalten nix verändert, er schaltet
noch immer wie vorher einmal ein und dann wieder aus ...

Was ich bestätigen kann, ist dass der GPIO nicht mehr angelegt wird... hier mal ein 'list' meines Verzeichnisses:
(vor und nach dem 'rereadcfg'

pi@RasPiFhem /sys/class/gpio/gpio23 $ ls -l
total 0
-rwxrwx--- 1 root gpio 4096 Jun 27 14:38 active_low
-rwxrwx--- 1 root gpio 4096 Jun 27 14:38 direction
-rwxrwx--- 1 root gpio 4096 Jun 27 14:38 edge
drwxrwx--- 2 root gpio    0 Jun 27 14:38 power
lrwxrwxrwx 1 root gpio    0 Jun 27 14:38 subsystem -> ../../../../class/gpio
-rwxrwx--- 1 root gpio 4096 Jun 27 14:38 uevent
-rwxrwx--- 1 root gpio 4096 Jun 27 14:38 value
pi@RasPiFhem /sys/class/gpio/gpio23 $ ls -l
total 0
-rwxrwx--- 1 root gpio 4096 Jun 27 14:43 active_low
-rwxrwx--- 1 root gpio 4096 Jun 27 14:43 direction
-rwxrwx--- 1 root gpio 4096 Jun 27 14:38 edge
drwxrwx--- 2 root gpio    0 Jun 27 14:38 power
lrwxrwxrwx 1 root gpio    0 Jun 27 14:38 subsystem -> ../../../../class/gpio
-rwxrwx--- 1 root gpio 4096 Jun 27 14:38 uevent
-rwxrwx--- 1 root gpio 4096 Jun 27 14:43 value


Man kann sehen, dass in activ_low, direction, und value bei einem 'rereadcfg' geschrieben wird.

Gruß Marc

Maergsche

Hallo nochmal,

nun verstehe ich das nicht mehr ... ich habe nochmal ein rereadcfg ausgeführt und
nun wurde der GPIO wieder exportiert.

pi@RasPiFhem /sys/class/gpio/gpio23 $ ls -l
total 0
-rwxrwx--- 1 root gpio 4096 Jun 27 14:43 active_low
-rwxrwx--- 1 root gpio 4096 Jun 27 14:43 direction
-rwxrwx--- 1 root gpio 4096 Jun 27 14:38 edge
drwxrwx--- 2 root gpio    0 Jun 27 14:38 power
lrwxrwxrwx 1 root gpio    0 Jun 27 14:38 subsystem -> ../../../../class/gpio
-rwxrwx--- 1 root gpio 4096 Jun 27 14:38 uevent
-rwxrwx--- 1 root gpio 4096 Jun 27 14:43 value
pi@RasPiFhem /sys/class/gpio/gpio23 $ ls -l
total 0
pi@RasPiFhem /sys/class/gpio/gpio23 $ cd ..
pi@RasPiFhem /sys/class/gpio $ ls
export  gpio23  gpio24  gpiochip0  unexport
pi@RasPiFhem /sys/class/gpio $ cd gpio23
pi@RasPiFhem /sys/class/gpio/gpio23 $ ls -l
total 0
-rwxrwx--- 1 root gpio 4096 Jun 27 14:52 active_low
-rwxrwx--- 1 root gpio 4096 Jun 27 14:52 direction
-rwxrwx--- 1 root gpio 4096 Jun 27 14:52 edge
drwxrwx--- 2 root gpio    0 Jun 27 14:52 power
lrwxrwxrwx 1 root gpio    0 Jun 27 14:52 subsystem -> ../../../../class/gpio
-rwxrwx--- 1 root gpio 4096 Jun 27 14:52 uevent
-rwxrwx--- 1 root gpio 4096 Jun 27 14:52 value

Gruß Marc

klausw

#9
schau mal ins log
da sollte drinstehen, was er gemacht hat

ich sehe gerade, das ich den value in der StateFn nochmal setze.
Es sollte sich aber eigentlich nicht negativ auswirken.
Das muss ich mir nochmal in ruhe anschauen.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

fhainz

Bei mir funktioniert es! Nach dem Neustart werden die GPIO's nicht mehr geschaltet.
Danke!!


Grüße

klausw

Zitat von: Maergsche am 27 Juni 2014, 14:54:00
danke für die schnelle Antwort. Ich habe das Modifizierte Modul getestet,
doch leider hat sich in Bezug auf das Relaischalten nix verändert, er schaltet
noch immer wie vorher einmal ein und dann wieder aus ...
wenn ich genauer hinschaue ist das logisch ... ich habe den code an der falschen stelle eingebaut :-/
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Maergsche

Hallo Klaus,
ich bin gerade auf dem Weg nach Berlin, und komme auch nicht vor Sonntag zurück, sofern brauchst du keine panischen Codeänderungen machen  ;)

An dieser Stelle schonmal danke, dass Du dich dem Themas widmest. 

Schöne Grüße
Marc

klausw

#13
so, neuer Versuch
gpio wird nur exportiert wenn noch nicht vorhanden

direction wird jetzt bei output pins erst gesetzt, wenn das erste mal ein value geschrieben werden soll (durch schreiben von high bzw. low in direktion wird der GPIO direkt gesetzt)


grüße
Klaus
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Maergsche

Hallo Klaus,

leider keine guten Nachrichten ... Im Grunde hat sich nix verändert mit der neuen Version (Allerdings hatte ich auch nicht all zu lange Zeit zu testen) 

Ich habe das neue Modul eingespielt, Rechte angepasst und ein "reload" des Modules sowie einen "sutdown restart" durchgeführt.

Bei einem "reread.cfg" schaltet das Relai wie gehabt einmal ein und wieder aus ...

Bei einem "rereadcfg" werden weiterhin Daten in activ_low,direction und value geschrieben...

pi@RasPiFhem /sys/class/gpio/gpio23 $ ls -l
total 0
-rwxrwx--- 1 root gpio 4096 Jun 30 15:53 active_low
-rwxrwx--- 1 root gpio 4096 Jun 30 15:53 direction
-rwxrwx--- 1 root gpio 4096 Jun 30 08:16 edge
drwxrwx--- 2 root gpio    0 Jun 30 08:16 power
lrwxrwxrwx 1 root gpio    0 Jun 30 08:16 subsystem -> ../../../../class/gpio
-rwxrwx--- 1 root gpio 4096 Jun 30 08:16 uevent
-rwxrwx--- 1 root gpio 4096 Jun 30 15:53 value
pi@RasPiFhem /sys/class/gpio/gpio23 $


Wenn ich ein weiteres mal "rereadcfg" absende, dann wird der GPIO wieder neu angelegt...

pi@RasPiFhem /sys/class/gpio/gpio23 $ ls -l
total 0
-rwxrwx--- 1 root gpio 4096 Jun 30 15:58 active_low
-rwxrwx--- 1 root gpio 4096 Jun 30 15:58 direction
-rwxrwx--- 1 root gpio 4096 Jun 30 15:58 edge
drwxrwx--- 2 root gpio    0 Jun 30 15:58 power
lrwxrwxrwx 1 root gpio    0 Jun 30 15:58 subsystem -> ../../../../class/gpio
-rwxrwx--- 1 root gpio 4096 Jun 30 15:58 uevent
-rwxrwx--- 1 root gpio 4096 Jun 30 15:58 value
pi@RasPiFhem /sys/class/gpio/gpio23 $


Hier mal ein paar Test's von mir:
16:05  rereadcfg ausgeführt >    Neu angelegt
16:06  rereadcfg ausgeführt  >    Neu angelegt
16:07  rereadcfg ausgeführt  >    Neu angelegt
16:08  rereadcfg ausgeführt  >    Neu angelegt
16:09  rereadcfg ausgeführt  >    Neu angelegt
16:10  rereadcfg ausgeführt  >    Neu angelegt
16:12  rereadcfg ausgeführt  >    Neu angelegt
16:13  shutdown restart ausgeführt  > nur activ_low,direction,value geschrieben
16:15  shutdown restart ausgeführt  > nur activ_low,direction,value geschrieben

Nun habe ich mal die Inhalte der Dateien active_low, direction, value bei einem "shutdown restart" beobachtet.... und konnte feststellen, dass der Parameter "Value"
kurzzeitig auf 1 geht. Das kommt auch hin mit der Zeit wo das Relai schaltet
(bin momentan nicht zu Hause)

Dann habe ich gleichzeitig den Timestamp der Dateien und den Inhalt der Dateien beobachtet, indem ich bei einem "shutdown restart" folgenden Befehl mehrfach hintereinander ausgeführt habe... (Da gibt es sicher bessere Lösungen, aber es funktionierte  ::) )

Das Ergebnis war sehr interessant! Denn ohne, dass sich der Timestamp vom Value verändert hat, hat sich der Inhalt geändert...

Hier mal zusammengefasst...
1. Activ_low und direction bekommen ein neuen Timestamp (Wert ändert sich nicht), parallel ändert sich der Value-Wert von 0 auf 1  (Timestamp ändert sich nicht)
2. Nach ein paar Sekunden ändert sich der Value-Wert von 1 auf 0, sowie der Timestamp von Value.

Ich habe mal das Output angehängt...

Gruß Marc