From a55566a8a5441a8c728d36cb053ca24e49e8500d Mon Sep 17 00:00:00 2001 From: Marko Oldenburg Date: Fri, 8 Nov 2019 09:31:41 +0100 Subject: [PATCH] add Winrec Reading for Attribut ASC_WindowRec --- 73_AutoShuttersControl.pm | 80 ++++++++++++++++++++++++++++++--------- 1 file changed, 62 insertions(+), 18 deletions(-) diff --git a/73_AutoShuttersControl.pm b/73_AutoShuttersControl.pm index ea25a08..95cbbdd 100644 --- a/73_AutoShuttersControl.pm +++ b/73_AutoShuttersControl.pm @@ -957,8 +957,10 @@ sub EventProcessingWindowRec($@) { my ( $hash, $shuttersDev, $events ) = @_; my $name = $hash->{NAME}; + my $reading = $shutters->getWinDevReading; + if ( $events =~ - m#.*state:.*?([Oo]pen(?>ed)?|[Cc]losed?|tilt(?>ed)?|true|false)# + m#.*$reading:.*?([Oo]pen(?>ed)?|[Cc]losed?|tilt(?>ed)?|true|false)# and IsAfterShuttersManualBlocking($shuttersDev) ) { my $match = $1; @@ -3934,30 +3936,30 @@ sub CheckIfShuttersWindowRecOpen($) { my $shuttersDev = shift; $shutters->setShuttersDev($shuttersDev); - if ( $shutters->getWinStatus =~ /[Oo]pen|false/ ) # CK: covers: open|opened + if ( $shutters->getWinStatus =~ /[Oo]pen|false/ ) # CK: covers: open|opened { return 2; } elsif ( $shutters->getWinStatus =~ /tilt/ - and $shutters->getSubTyp eq 'threestate' ) # CK: covers: tilt|tilted + and $shutters->getSubTyp eq 'threestate' ) # CK: covers: tilt|tilted { return 1; } elsif ( $shutters->getWinStatus =~ /[Cc]lose|true/ ) { return 0; - } # CK: covers: close|closed + } # CK: covers: close|closed } sub makeReadingName($) { my ($rname) = @_; my %charHash = ( - chr(0xe4) => "ae", # ä - chr(0xc4) => "Ae", # Ä - chr(0xfc) => "ue", # ü - chr(0xdc) => "Ue", # Ü - chr(0xf6) => "oe", # ö - chr(0xd6) => "Oe", # Ö - chr(0xdf) => "ss" # ß + chr(0xe4) => "ae", # ä + chr(0xc4) => "Ae", # Ä + chr(0xfc) => "ue", # ü + chr(0xdc) => "Ue", # Ü + chr(0xf6) => "oe", # ö + chr(0xd6) => "Oe", # Ö + chr(0xdf) => "ss" # ß ); my $charHashkeys = join( "", keys(%charHash) ); @@ -6080,7 +6082,8 @@ use GPUtils qw(GP_Import); BEGIN { GP_Import( qw( - AttrVal) + AttrVal + gettimeofday) ); } @@ -6093,7 +6096,47 @@ sub getSubTyp { sub _getWinDev { my $self = shift; - return AttrVal( $self->{shuttersDev}, 'ASC_WindowRec', 'none' ); + return $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{device} + if ( + exists( + $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} + ) + and ( gettimeofday() - + $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} ) < + 2 + ); + $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} = + int( gettimeofday() ); + my ( $device, $reading ) = + FHEM::AutoShuttersControl::GetAttrValues( $self->{shuttersDev}, + 'ASC_WindowRec', 'none' ); + + ### erwartetes Ergebnis + # DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE + + $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{device} = + $device; + $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{reading} = + ( $reading ne 'none' ? $reading : 'state' ); + + return $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{device}; +} + +sub getWinDevReading { + my $self = shift; + + return $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{reading} + if ( + exists( + $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} + ) + and ( gettimeofday() - + $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} ) < + 2 + ); + $shutters->_getWinDev; + + return $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{reading}; } ## Subklasse Readings von Klasse ASC_Window ## @@ -6115,7 +6158,8 @@ BEGIN { sub getWinStatus { my $self = shift; - return ReadingsVal( $shutters->_getWinDev, 'state', 'closed' ); + return ReadingsVal( $shutters->_getWinDev, $shutters->getWinDevReading, + 'closed' ); } ## Klasse ASC_Roommate ## @@ -7128,8 +7172,8 @@ sub getblockAscDrivesAfterManual { THRESHOLD-OFF sets the complementary value when the wind protection is disabled. Disabled if THRESHOLD-ON is set to -1. Defaults to 50:20 ASC_Closed_Pos. -
  • ASC_WindowRec - Points to the window contact device, associated with the shutter. - Defaults to none. +
  • ASC_WindowRec - WINDOWREC:[READING], Points to the window contact device, associated with the shutter. + Defaults to none. Reading is optional
  • ASC_WindowRec_subType - Model type of the used ASC_WindowRec: @@ -7633,7 +7677,7 @@ sub getblockAscDrivesAfterManual { ], "release_status": "under develop", "license": "GPL_2", - "version": "v0.6.152", + "version": "v0.6.153", "author": [ "Marko Oldenburg " ],