From d7adb36ca5ed30965c266d6e3994266e837ef348 Mon Sep 17 00:00:00 2001 From: Marko Oldenburg Date: Mon, 30 Mar 2020 17:29:07 +0200 Subject: [PATCH] fix return bug in Fn _getOutTempSensor --- 73_AutoShuttersControl.pm | 82 ++++++++++++++++++++++++++++++++------- 1 file changed, 67 insertions(+), 15 deletions(-) diff --git a/73_AutoShuttersControl.pm b/73_AutoShuttersControl.pm index ab1ab08..4d2579a 100644 --- a/73_AutoShuttersControl.pm +++ b/73_AutoShuttersControl.pm @@ -2732,22 +2732,35 @@ sub EventProcessingExternalTriggerDevice { my $reading = $shutters->getExternalTriggerReading; my $triggerValActive = $shutters->getExternalTriggerValueActive; + my $triggerValActive2 = $shutters->getExternalTriggerValueActive2; my $triggerValInactive = $shutters->getExternalTriggerValueInactive; my $triggerPosActive = $shutters->getExternalTriggerPosActive; + my $triggerPosActive2 = $shutters->getExternalTriggerPosActive2; my $triggerPosInactive = $shutters->getExternalTriggerPosInactive; - if ( $events =~ m{$reading:\s($triggerValActive)}xms - && !$shutters->getQueryShuttersPos($triggerPosActive) ) - { + if ( $events =~ m{$reading:\s($triggerValActive|$triggerValActive2)}xms ) { + + # && !$shutters->getQueryShuttersPos($triggerPosActive) + ASC_Debug( 'EventProcessingExternalTriggerDevice: ' . ' In der RegEx Schleife Trigger Val Aktiv' . ' - TriggerVal: ' - . $triggerValActive ); + . $triggerValActive + . ' - TriggerVal2: ' + . $triggerValActive2 ); - $shutters->setLastDrive('external trigger device active'); - $shutters->setNoDelay(1); - $shutters->setExternalTriggerState(1); - ShuttersCommandSet( $hash, $shuttersDev, $triggerPosActive ); + if ( $1 eq $triggerValActive2 ) { + $shutters->setLastDrive('external trigger2 device active'); + $shutters->setNoDelay(1); + $shutters->setExternalTriggerState(1); + ShuttersCommandSet( $hash, $shuttersDev, $triggerPosActive2 ); + } + else { + $shutters->setLastDrive('external trigger device active'); + $shutters->setNoDelay(1); + $shutters->setExternalTriggerState(1); + ShuttersCommandSet( $hash, $shuttersDev, $triggerPosActive ); + } } elsif ( $events =~ m{$reading:\s($triggerValInactive)}xms @@ -3473,8 +3486,7 @@ sub GetMonitoredDevs { my $linecount = 1; for my $notifydev ( sort keys( %{$notifydevs} ) ) { if ( ref( $notifydevs->{$notifydev} ) eq "HASH" ) { - for - my $shutters ( sort keys( %{ $notifydevs->{$notifydev} } ) ) + for my $shutters ( sort keys( %{ $notifydevs->{$notifydev} } ) ) { if ( $linecount % 2 == 0 ) { $ret .= ''; } else { $ret .= ''; } @@ -6117,12 +6129,12 @@ sub getExternalTriggerDevice { $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{LASTGETTIME} = int( gettimeofday() ); my ( $device, $reading, $valueActive, $valueInactive, $posActive, - $posInactive ) + $posInactive, $valueActive2, $posActive2 ) = FHEM::AutoShuttersControl::GetAttrValues( $self->{shuttersDev}, 'ASC_ExternalTrigger', 'none' ); ### erwartetes Ergebnis - # DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE +# DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE VALUEACTIVE2:POSACTIVE2 $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{device} = $device; @@ -6136,6 +6148,10 @@ sub getExternalTriggerDevice { $posActive; $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posinactive} = ( $posInactive ne 'none' ? $posInactive : $shutters->getLastPos ); + $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{valueactive2} = + $valueActive2; + $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posactive2} = + $posActive2; return $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{device}; @@ -6178,6 +6194,26 @@ sub getExternalTriggerValueActive { ->{valueactive}; } +sub getExternalTriggerValueActive2 { + my $self = shift; + + return $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} + ->{valueactive2} + if ( + exists( + $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} + ->{LASTGETTIME} + ) + && ( gettimeofday() - + $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} + ->{LASTGETTIME} ) < 2 + ); + $shutters->getExternalTriggerDevice; + + return $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} + ->{valueactive2}; +} + sub getExternalTriggerValueInactive { my $self = shift; @@ -6216,6 +6252,24 @@ sub getExternalTriggerPosActive { return $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posactive}; } +sub getExternalTriggerPosActive2 { + my $self = shift; + + return $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posactive2} + if ( + exists( + $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} + ->{LASTGETTIME} + ) + && ( gettimeofday() - + $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} + ->{LASTGETTIME} ) < 2 + ); + $shutters->getExternalTriggerDevice; + + return $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posactive2}; +} + sub getExternalTriggerPosInactive { my $self = shift; @@ -7232,8 +7286,6 @@ sub _getTempSensor { ## erwartetes Ergebnis # DEVICE:READING - - return $device if ( $device eq 'none' ); $self->{ASC_tempSensor}->{device} = $device; $self->{ASC_tempSensor}->{reading} = ( $reading ne 'none' ? $reading : 'temperature' ); @@ -8244,7 +8296,7 @@ sub getBlockAscDrivesAfterManual {
  • ASC_PrivacyDownValue_beforeNightClose - wie viele Sekunden vor dem abendlichen schließen soll der Rollladen in die Sichtschutzposition fahren, oder bei Brightness ab welchem minimum Brightnesswert soll das Rollo in die Privacy Position fahren. Bei Brightness muss zusätzlich zum Zeitwert der Brightnesswert mit angegeben werden 1800:300 bedeutet 30 min vor night close oder bei unter einem Brightnesswert von 300 (default: -1)
  • ASC_PrivacyUp_Pos - Position den Rollladens für den morgendlichen Sichtschutz (default: 50) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!
  • ASC_PrivacyDown_Pos - Position den Rollladens für den abendlichen Sichtschutz (default: 50) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!
  • -
  • ASC_ExternalTrigger - DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE, Beispiel: "WohnzimmerTV:state on:off 66:100" bedeutet das wenn ein "state:on" Event kommt soll das Rollo in Position 66 fahren, kommt ein "state:off" Event soll es in Position 100 fahren. Es ist möglich die POSINACTIVE weg zu lassen dann fährt das Rollo in LastStatus Position.
  • +
  • ASC_ExternalTrigger - DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:[POSINACTIVE VALUEACTIVE2:POSACTIVE2], Beispiel: "WohnzimmerTV:state on:off 66:100" bedeutet das wenn ein "state:on" Event kommt soll das Rollo in Position 66 fahren, kommt ein "state:off" Event soll es in Position 100 fahren. Es ist möglich die POSINACTIVE weg zu lassen dann fährt das Rollo in LastStatus Position.
  • ASC_WindProtection - on/off - soll der Rollladen beim Windschutz beachtet werden. on=JA, off=NEIN. (default off)
  • ASC_RainProtection - on/off - soll der Rollladen beim Regenschutz beachtet werden. on=JA, off=NEIN. (default off)
  • ASC_Roommate_Device - mit Komma getrennte Namen des/der Roommate Device/s, welche den/die Bewohner des Raumes vom Rollladen wiedergibt. Es macht nur Sinn in Schlaf- oder Kinderzimmern (default: none)