From ef1002e240adab02a8c9a77ba5b17a629bb0d675 Mon Sep 17 00:00:00 2001 From: klauswitt Date: Mon, 6 Jan 2014 20:35:10 +0000 Subject: [PATCH] correction for attr poll_interval and german documentation git-svn-id: svn://svn.code.sf.net/p/fhem/code/trunk@4581 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/51_RPI_GPIO.pm | 86 ++++++++++++++++++++++------------------ 1 file changed, 47 insertions(+), 39 deletions(-) diff --git a/fhem/FHEM/51_RPI_GPIO.pm b/fhem/FHEM/51_RPI_GPIO.pm index 517dcfe89..5ed778c01 100644 --- a/fhem/FHEM/51_RPI_GPIO.pm +++ b/fhem/FHEM/51_RPI_GPIO.pm @@ -60,7 +60,7 @@ sub RPI_GPIO_Define($$) { "define RPI_GPIO "; } - #Prüfen, ob GPIO bereits verwendet + #Prüfen, ob GPIO bereits verwendet foreach my $dev (devspec2array("TYPE=$hash->{TYPE}")) { if ($args[2] eq InternalVal($dev,"RPI_pin","")) { return "GPIO $args[2] already used by $dev"; @@ -70,7 +70,7 @@ sub RPI_GPIO_Define($$) { my $name = $args[0]; $hash->{RPI_pin} = $args[2]; - #export Pin alte Version -> wird jetzt über direction gemacht (WiringPi Programm GPIO) + #export Pin alte Version -> wird jetzt über direction gemacht (WiringPi Programm GPIO) #my $exp = IO::File->new("> /sys/class/gpio/export"); #print $exp "$hash->{RPI_pin}"; #$exp->close; @@ -118,12 +118,20 @@ sub RPI_GPIO_Set($@) { my $val = fileaccess($hash, "value"); #alten Wert des GPIO direkt auslesen $cmd = $val eq "0" ? "on" :"off"; } - if ($cmd eq 'on') { +if ($cmd eq 'on') { fileaccess($hash, "value", "1"); - $hash->{STATE} = 'on'; + #$hash->{STATE} = 'on'; + readingsBeginUpdate($hash); + #readingsBulkUpdate($hash, 'Pinlevel', $valalt); + readingsBulkUpdate($hash, 'state', "on"); + readingsEndUpdate($hash, 1); } elsif ($cmd eq 'off') { fileaccess($hash, "value", "0"); - $hash->{STATE} = 'off'; + #$hash->{STATE} = 'off'; + readingsBeginUpdate($hash); + #readingsBulkUpdate($hash, 'Pinlevel', $valalt); + readingsBulkUpdate($hash, 'state', "off"); + readingsEndUpdate($hash, 1); } else { my $slist = join(' ', keys %setsoutp); return SetExtensions($hash, $slist, @a); @@ -192,7 +200,7 @@ sub RPI_GPIO_Attr(@) { } if ($attr eq 'direction') { - if (!$val) { #$val nicht definiert: Einstellungen löschen + if (!$val) { #$val nicht definiert: Einstellungen löschen $msg = "$hash->{NAME}: no direction value. Use input output"; } elsif ($val eq "input") { #fileaccess($hash, "direction", "in"); @@ -308,7 +316,7 @@ sub RPI_GPIO_Undef($$) { sub RPI_GPIO_Except($) { my ($hash) = @_; - #seek($hash->{filehandle},0,0); #an Anfang der Datei springen (ist nötig falls vorher schon etwas gelesen wurde) + #seek($hash->{filehandle},0,0); #an Anfang der Datei springen (ist nötig falls vorher schon etwas gelesen wurde) #chomp ( my $firstval = $hash->{filehandle}->getline ); #aktuelle Zeile auslesen und Endezeichen entfernen my $eval = fileaccess($hash, "edge"); #Eintstellung Flankensteuerung auslesen my ($valst, $valalt, $valto, $valcnt) = undef; @@ -319,7 +327,7 @@ sub RPI_GPIO_Except($) { select(undef, undef, undef, $debounce_time); } - seek($hash->{filehandle},0,0); #an Anfang der Datei springen (ist nötig falls vorher schon etwas gelesen wurde) + seek($hash->{filehandle},0,0); #an Anfang der Datei springen (ist nötig falls vorher schon etwas gelesen wurde) chomp ( my $val = $hash->{filehandle}->getline ); #aktuelle Zeile auslesen und Endezeichen entfernen if ( ( $val == 1) && ( $eval ne ("falling") ) ) { @@ -344,26 +352,26 @@ sub RPI_GPIO_Except($) { $valto = "off"; } #Log 1, "Toggle ist jetzt $valto"; - if (( AttrVal($hash->{NAME}, "toggletostate", "no") ) eq ( "yes" )) { #wenn Attr "toggletostate" gesetzt auch die Variable für den STATE wert setzen + if (( AttrVal($hash->{NAME}, "toggletostate", "no") ) eq ( "yes" )) { #wenn Attr "toggletostate" gesetzt auch die Variable für den STATE wert setzen $valst = $valto; } -#Zählfunktion - if (!defined($hash->{READINGS}{Counter}{VAL})) { #Zähler existiert nicht -> anlegen - #Log 1, "Zähler war nicht def"; +#Zählfunktion + if (!defined($hash->{READINGS}{Counter}{VAL})) { #Zähler existiert nicht -> anlegen + #Log 1, "Zähler war nicht def"; $valcnt = "1"; } else { $valcnt = $hash->{READINGS}{Counter}{VAL} + 1; - #Log 1, "Zähler ist jetzt $valcnt"; + #Log 1, "Zähler ist jetzt $valcnt"; } } - delete ($hash->{READINGS}{Toggle}) if ($eval ne ("rising" || "falling")); #Reading Toggle löschen wenn kein Wert in Variable + delete ($hash->{READINGS}{Toggle}) if ($eval ne ("rising" || "falling")); #Reading Toggle löschen wenn kein Wert in Variable readingsBeginUpdate($hash); readingsBulkUpdate($hash, 'Pinlevel', $valalt); readingsBulkUpdate($hash, 'state', $valst); readingsBulkUpdate($hash, 'Toggle', $valto) if ($valto); readingsBulkUpdate($hash, 'Counter', $valcnt) if ($valcnt); readingsEndUpdate($hash, 1); - #Log 1, "RPIGPIO: Except ausgelöst: $hash->{NAME}, Wert: $val, edge: $eval,vt: $valto, $debounce_time s: $firstval"; + #Log 1, "RPIGPIO: Except ausgelöst: $hash->{NAME}, Wert: $val, edge: $eval,vt: $valto, $debounce_time s: $firstval"; } sub updatevalue($) { @@ -380,7 +388,7 @@ sub updatevalue($) { } readingsBeginUpdate($hash); readingsBulkUpdate($hash, 'Pinlevel', $valalt); - readingsBulkUpdate($hash, 'state', $valst) if (( AttrVal($hash->{NAME}, "toggletostate", "yes") ) eq ( "no" )); + readingsBulkUpdate($hash, 'state', $valst) if (( AttrVal($hash->{NAME}, "toggletostate", "no") ) eq ( "no" )); readingsEndUpdate($hash, 1); } else { Log 1, "$hash->{NAME}: readout of Pinvalue fail"; @@ -449,7 +457,7 @@ sub inthandling($$) { my ($hash, $arg) = @_; my $msg = ''; if ( $arg eq "start") { - #FH für value-datei + #FH für value-datei my $pinroot = qq($gpiodir/gpio$hash->{RPI_pin}); my $valfile = qq($pinroot/value); $hash->{filehandle} = IO::File->new("< $valfile"); @@ -641,12 +649,12 @@ sub inthandling($$) {

    - Das Raspberry Pi ermöglicht direkten Zugriff zu einigen GPIO's über den Pfostenstecker P1 (und P5 bei V2). Die Steckerbelegung ist in den Tabellen unter Define zu finden. - Dieses Modul ermöglicht es, die herausgefühten GPIO's direkt als Ein- und Ausgang zu benutzen. Die Eingänge können zyklisch abgefragt werden oder auch sofort bei Pegelwechsel gesetzt werden.

    - Wichtig: Niemals Spannung an einen GPIO anlegen, der als Ausgang eingestellt ist! Die interne Logik der GPIO's arbeitet mit 3,3V. Ein überschreiten der 3,3V zerstört den GPIO und vielleicht auch den ganzen Prozessor!

    + Das Raspberry Pi ermöglicht direkten Zugriff zu einigen GPIO's über den Pfostenstecker P1 (und P5 bei V2). Die Steckerbelegung ist in den Tabellen unter Define zu finden. + Dieses Modul ermöglicht es, die herausgefühten GPIO's direkt als Ein- und Ausgang zu benutzen. Die Eingänge können zyklisch abgefragt werden oder auch sofort bei Pegelwechsel gesetzt werden.

    + Wichtig: Niemals Spannung an einen GPIO anlegen, der als Ausgang eingestellt ist! Die interne Logik der GPIO's arbeitet mit 3,3V. Ein überschreiten der 3,3V zerstört den GPIO und vielleicht auch den ganzen Prozessor!

    Vorbereitung:
    - Auf GPIO Pins wird im Modul über sysfs zugegriffen. Die Dateien befinden sich unter /system/class/gpio und können nur mit root erreicht werden. + Auf GPIO Pins wird im Modul über sysfs zugegriffen. Die Dateien befinden sich unter /system/class/gpio und können nur mit root erreicht werden. Dieses Modul nutzt das gpio Tool von der WiringPi. Bibliothek um GPIS zu exportieren und die korrekten Nutzerrechte zu setzen. Installation WiringPi:

    @@ -663,7 +671,7 @@ sub inthandling($$) {
       Define
       
      define <name> RPI_GPIO <GPIO number>

      - Alle verfügbaren GPIO number sind in den folgenden Tabellen zu finden

      + Alle verfügbaren GPIO number sind in den folgenden Tabellen zu finden

      @@ -727,16 +735,16 @@ sub inthandling($$) { set <name> <value>

      value ist dabei einer der folgenden Werte:
      -
      • Für GPIO der als output konfiguriert ist +
        • Für GPIO der als output konfiguriert ist
            off
            on
            toggle
          - Die set extensions werden auch unterstützt.
          + Die set extensions werden auch unterstützt.
        • -
        • Für GPIO der als input konfiguriert ist +
        • Für GPIO der als input konfiguriert ist
            readval
          @@ -755,7 +763,7 @@ sub inthandling($$) {
            get <name>

            - Gibt "high" oder "low" entsprechend dem aktuellen Pinstatus zurück und schreibt den Wert auch in das reading Pinlevel + Gibt "high" oder "low" entsprechend dem aktuellen Pinstatus zurück und schreibt den Wert auch in das reading Pinlevel

          @@ -763,34 +771,34 @@ sub inthandling($$) {
          • direction
            Setzt den GPIO auf Ein- oder Ausgang.
            - Standard: input, gültige Werte: input, output

            + Standard: input, gültige Werte: input, output

          • interrupt
            - kann nur gewählt werden, wenn der GPIO als Eingang konfiguriert ist
            - Aktiviert Flankenerkennung für den GPIO
            - bei jedem interrupt Erwignis werden die readings Pinlevel und state aktualisiert
            - Standard: none, gültige Werte: none, falling, rising, both

            + kann nur gewählt werden, wenn der GPIO als Eingang konfiguriert ist
            + Aktiviert Flankenerkennung für den GPIO
            + bei jedem interrupt Ereignis werden die readings Pinlevel und state aktualisiert
            + Standard: none, gültige Werte: none, falling, rising, both

          • poll_interval
            - Fragt den Zustand des GPIO regelmäßig ensprechend des eingestellten Wertes in Minuten ab
            - Standard: -, gültige Werte: Dezimalzahl

            + Fragt den Zustand des GPIO regelmäßig ensprechend des eingestellten Wertes in Minuten ab
            + Standard: -, gültige Werte: Dezimalzahl

          • toggletostate
            Funktioniert nur bei auf falling oder rising gesetztem Attribut interrupt
            Wenn auf "yes" gestellt wird bei jedem Triggerereignis das state reading invertiert
            - Standard: no, gültige Werte: yes, no

            + Standard: no, gültige Werte: yes, no

          • pud_resistor
            Interner Pullup/down Widerstand
            - Standard: -, gültige Werte: off, up, down

            + Standard: -, gültige Werte: off, up, down

          • debounce_in_ms
            - Wartezeit in ms bis nach ausgelöstem Interrupt der entsprechende Pin abgefragt wird. Kann zum entprellen von mechanischen Schaltern verwendet werden
            - Standard: 0, gültige Werte: Dezimalzahl

            + Wartezeit in ms bis nach ausgelöstem Interrupt der entsprechende Pin abgefragt wird. Kann zum entprellen von mechanischen Schaltern verwendet werden
            + Standard: 0, gültige Werte: Dezimalzahl

          • restoreOnStartup
            - Wiederherstellen der Portzustände nach Neustart
            - Standard: on, gültige Werte: on, off

            + Wiederherstellen der Portzust&äuml;nde nach Neustart
            + Standard: on, gültige Werte: on, off