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
.
-