diff --git a/fhem/CHANGED b/fhem/CHANGED index 571000baf..a69a918f5 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,6 @@ # Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Do not insert empty lines here, update check depends on it. + - feature: 73_AutoShuttersControl: add attribut ASC_RainProtection, bugfix - feature: 73_AutoShuttersControl: add attribut ASC_WindProtection - bugfix: 73_AutoShuttersControl: fix shutters drive after partyMode off and shutter have partyMode off attribut diff --git a/fhem/FHEM/73_AutoShuttersControl.pm b/fhem/FHEM/73_AutoShuttersControl.pm index b565ac118..a94001b85 100644 --- a/fhem/FHEM/73_AutoShuttersControl.pm +++ b/fhem/FHEM/73_AutoShuttersControl.pm @@ -44,7 +44,7 @@ use strict; use warnings; use FHEM::Meta; -my $version = '0.6.2'; +my $version = '0.6.3'; sub AutoShuttersControl_Initialize($) { my ($hash) = @_; @@ -207,6 +207,7 @@ my %userAttrList = ( 'ASC_WindParameters' => '-', 'ASC_DriveUpMaxDuration' => '-', 'ASC_WindProtection:on,off' => '-', + 'ASC_RainProtection:on,off' => '-', ); my %posSetCmds = ( @@ -1187,7 +1188,7 @@ sub EventProcessingRain($@) { my $name = $device; my $reading = $ascDev->getRainSensorReading; - if ( $events =~ m#$reading:\s(\d+|rain|dry)# ) { + if ( $events =~ m#$reading:\s(\d+(\.\d+)?|rain|dry)# ) { my $val; my $triggerMax = $ascDev->getRainTriggerMax; my $triggerMin = $ascDev->getRainTriggerMin; @@ -1199,6 +1200,10 @@ sub EventProcessingRain($@) { foreach my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) { $shutters->setShuttersDev($shuttersDev); + + next + if ( $shutters->getRainProtection eq 'off' ); + if ( $val > $triggerMax and $shutters->getStatus != $closedPos and IsAfterShuttersManualBlocking($shuttersDev) ) @@ -1223,7 +1228,7 @@ sub EventProcessingWind($@) { $shutters->setShuttersDev($shuttersDev); my $reading = $ascDev->getWindSensorReading; - if ( $events =~ m#$reading:\s(\d+)# ) { + if ( $events =~ m#$reading:\s(\d+(\.\d+)?)# ) { foreach my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) { $shutters->setShuttersDev($shuttersDev); @@ -1340,7 +1345,7 @@ sub EventProcessingBrightness($@) { ); my $reading = $shutters->getBrightnessReading; - if ( $events =~ m#$reading:\s(\d+)# ) { + if ( $events =~ m#$reading:\s(\d+(\.\d+)?)# ) { my $brightnessMinVal; if ( $shutters->getBrightnessMinVal > -1 ) { $brightnessMinVal = $shutters->getBrightnessMinVal; @@ -1533,7 +1538,7 @@ sub EventProcessingShadingBrightness($@) { . ' - Es wird nun geprüft ob der übergebene Event ein nummerischer Wert vom Brightnessreading ist.' ); - if ( $events =~ m#$reading:\s(\d+)# ) { + if ( $events =~ m#$reading:\s(\d+(\.\d+)?)# ) { Log3( $name, 4, "AutoShuttersControl ($shuttersDev) - EventProcessingShadingBrightness @@ -3965,7 +3970,7 @@ sub getWindMax { $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggermax} = $max; $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggerhyst} = - $hyst; + ( $hyst ne 'none' ? $max - $hyst : $max - 20 ); $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{closedPos} = ( $pos ne 'none' ? $pos : $shutters->getOpenPos ); @@ -3996,6 +4001,12 @@ sub getWindProtection { return AttrVal( $self->{shuttersDev}, 'ASC_WindProtection', 'on' ); } +sub getRainProtection { + my $self = shift; + + return AttrVal( $self->{shuttersDev}, 'ASC_RainProtection', 'on' ); +} + sub getModeUp { my $self = shift; @@ -4647,9 +4658,11 @@ sub _getRainSensor { ( $reading ne 'none' ? $reading : 'state' ); $self->{ASC_rainSensor}->{triggermax} = ( $max ne 'none' ? $max : 1000 ); $self->{ASC_rainSensor}->{triggerhyst} = - ( $hyst ne 'none' ? $max - $hyst : ( $max * 0 ) ); + ( $hyst ne 'none' + ? $max - $hyst + : ( $self->{ASC_rainSensor}->{triggermax} * 0 ) ); $self->{ASC_rainSensor}->{shuttersClosedPos} = - ( $pos ne 'none' ? $pos : 50 ); + ( $pos ne 'none' ? $pos : $shutters->getClosedPos ); return $self->{ASC_rainSensor}->{device}; } @@ -5129,7 +5142,7 @@ sub getblockAscDrivesAfterManual {
  • ASC_Ventilate_Pos - in 10 Schritten von 0 bis 100, Default ist abhängig vom Attribut ASC
  • ASC_Ventilate_Window_Open - auf lüften, wenn das Fenster gekippt/geöffnet wird und aktuelle Position unterhalb der Lüften-Position ist / default on wenn nicht gesetzt
  • ASC_WiggleValue - Wert um welchen sich die Position des Rollladens ändern soll / default 5 wenn nicht gesetzt
  • -
  • ASC_WindParameters - TRIGGERMAX[:HYSTERESE] [DRIVEPOSITION] / Angabe von Max Wert ab dem für Wind getriggert werden soll, Hytsrese Wert ab dem der Windschutz aufgehoben werden soll TRIGGERMAX - HYSTERESE / Ist es bei einigen Rollläden nicht gewünscht das gefahren werden soll, so ist der TRIGGERMAX Wert mit -1 an zu geben. / default '50:20 ClosedPosition' wenn nicht gesetzt
  • +
  • ASC_WindParameters - TRIGGERMAX[:HYSTERESE] [DRIVEPOSITION] / Angabe von Max Wert ab dem für Wind getriggert werden soll, Hytsrese Wert ab dem der Windschutz aufgehoben werden soll TRIGGERMAX - HYSTERESE / Ist es bei einigen Rollläden nicht gewünscht das gefahren werden soll, so ist das Attribut ASC_WindProtection auf off zu setzen. / default '50:20 ClosedPosition' wenn nicht gesetzt
  • ASC_WindProtection - on/off aktiviert den Windschutz für diesen Rollladen. / default on wenn nicht gesetzt.
  • ASC_WindowRec - Name des Fensterkontaktes, an dessen Fenster der Rollladen angebracht ist / default none wenn nicht gesetzt
  • ASC_WindowRec_subType - Typ des verwendeten Fensterkontaktes: twostate (optisch oder magnetisch) oder threestate (Drehgriffkontakt) / default twostate wenn nicht gesetzt