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($$) {