diff --git a/controls_AutoShuttersControl.txt b/controls_AutoShuttersControl.txt index 9a4961f..08bfcb2 100644 --- a/controls_AutoShuttersControl.txt +++ b/controls_AutoShuttersControl.txt @@ -1,15 +1,16 @@ -UPD 2021-02-26_14:36:10 97970 FHEM/73_AutoShuttersControl.pm -UPD 2021-04-21_13:16:51 74314 lib/FHEM/Automation/ShuttersControl.pm +UPD 2021-05-17_09:57:18 97970 FHEM/73_AutoShuttersControl.pm +UPD 2021-05-17_09:57:18 74314 lib/FHEM/Automation/ShuttersControl.pm UPD 2020-06-22_09:41:40 2657 lib/FHEM/Automation/ShuttersControl/Dev.pm UPD 2020-07-26_17:36:29 2496 lib/FHEM/Automation/ShuttersControl/Roommate.pm UPD 2021-02-26_14:36:10 31487 lib/FHEM/Automation/ShuttersControl/Shutters.pm -UPD 2021-04-21_13:21:26 25329 lib/FHEM/Automation/ShuttersControl/Shading.pm -UPD 2021-04-21_13:19:58 110498 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm +UPD 2021-05-10_08:26:03 25329 lib/FHEM/Automation/ShuttersControl/Shading.pm +UPD 2021-05-17_14:05:13 108213 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm UPD 2021-02-26_14:36:10 40628 lib/FHEM/Automation/ShuttersControl/Helper.pm UPD 2020-06-22_09:41:40 2175 lib/FHEM/Automation/ShuttersControl/Window.pm -UPD 2021-01-29_10:06:33 11742 lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm +UPD 2021-04-27_07:52:31 11742 lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm UPD 2020-07-03_11:29:10 7251 lib/FHEM/Automation/ShuttersControl/Dev/Readings.pm UPD 2021-01-29_10:06:33 52525 lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm UPD 2020-06-22_09:41:40 2903 lib/FHEM/Automation/ShuttersControl/Shutters/Readings.pm UPD 2021-01-29_10:06:33 3980 lib/FHEM/Automation/ShuttersControl/Window/Attr.pm UPD 2020-06-22_09:41:40 2288 lib/FHEM/Automation/ShuttersControl/Window/Readings.pm +UPD 2021-05-17_14:17:38 5159 lib/FHEM/Automation/ShuttersControl/Rainprotection.pm diff --git a/hooks/pre-commit b/hooks/pre-commit index fe23100..4d23534 100755 --- a/hooks/pre-commit +++ b/hooks/pre-commit @@ -18,7 +18,8 @@ my @filenames = ( 'FHEM/73_AutoShuttersControl.pm', 'lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm', 'lib/FHEM/Automation/ShuttersControl/Shutters/Readings.pm', 'lib/FHEM/Automation/ShuttersControl/Window/Attr.pm', - 'lib/FHEM/Automation/ShuttersControl/Window/Readings.pm' + 'lib/FHEM/Automation/ShuttersControl/Window/Readings.pm', + 'lib/FHEM/Automation/ShuttersControl/Rainprotection.pm' ); my $controlsfile = 'controls_AutoShuttersControl.txt'; diff --git a/lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm b/lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm index d9c307e..6db9efd 100644 --- a/lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm +++ b/lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm @@ -2,7 +2,7 @@ # # Developed with Kate # -# (c) 2018-2020 Copyright: Marko Oldenburg (fhemsupport@cooltux.net) +# (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net) # All rights reserved # # Special thanks goes to: @@ -49,6 +49,7 @@ use Data::Dumper; #only for Debugging use FHEM::Automation::ShuttersControl::Helper qw (:ALL); use FHEM::Automation::ShuttersControl::Shading qw (:ALL); +use FHEM::Automation::ShuttersControl::Rainprotection qw (:ALL); require Exporter; our @ISA = qw(Exporter); @@ -1270,70 +1271,12 @@ sub EventProcessingRain { $FHEM::Automation::ShuttersControl::ascDev->getRainTriggerMax; my $triggerMin = $FHEM::Automation::ShuttersControl::ascDev->getRainTriggerMin; - my $closedPos = $FHEM::Automation::ShuttersControl::ascDev - ->getRainSensorShuttersClosedPos; if ( $1 eq 'rain' ) { $val = $triggerMax + 1 } elsif ( $1 eq 'dry' ) { $val = $triggerMin } else { $val = $1 } - RainProtection( $hash, $val, $triggerMax, $triggerMin, $closedPos ); - } - - return; -} - -sub RainProtection { - my ( $hash, $val, $triggerMax, $triggerMin, $closedPos ) = @_; - - for my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) { - $FHEM::Automation::ShuttersControl::shutters->setShuttersDev( - $shuttersDev); - - next - if ( - $FHEM::Automation::ShuttersControl::shutters->getRainProtection eq - 'off' ); - - if ( $val > $triggerMax - && $FHEM::Automation::ShuttersControl::shutters->getStatus != - $closedPos - && $FHEM::Automation::ShuttersControl::shutters - ->getRainProtectionStatus eq 'unprotected' ) - { - $FHEM::Automation::ShuttersControl::shutters->setLastDrive( - 'rain protected'); - $FHEM::Automation::ShuttersControl::shutters->setDriveCmd( - $closedPos); - $FHEM::Automation::ShuttersControl::shutters - ->setRainProtectionStatus('protected'); - } - elsif ( ( $val == 0 || $val < $triggerMin ) - && $FHEM::Automation::ShuttersControl::shutters->getStatus == - $closedPos - && IsAfterShuttersManualBlocking($shuttersDev) - && $FHEM::Automation::ShuttersControl::shutters - ->getRainProtectionStatus eq 'protected' ) - { - $FHEM::Automation::ShuttersControl::shutters->setLastDrive( - 'rain un-protected'); - $FHEM::Automation::ShuttersControl::shutters->setDriveCmd( - ( - $FHEM::Automation::ShuttersControl::shutters->getIsDay - ? $FHEM::Automation::ShuttersControl::shutters->getLastPos - : ( - $FHEM::Automation::ShuttersControl::shutters - ->getPrivacyDownStatus == 2 - ? $FHEM::Automation::ShuttersControl::shutters - ->getPrivacyDownPos - : $FHEM::Automation::ShuttersControl::shutters - ->getClosedPos - ) - ) - ); - $FHEM::Automation::ShuttersControl::shutters - ->setRainProtectionStatus('unprotected'); - } + RainProcessing( $hash, $val, $triggerMax, $triggerMin ); } return; diff --git a/lib/FHEM/Automation/ShuttersControl/Rainprotection.pm b/lib/FHEM/Automation/ShuttersControl/Rainprotection.pm new file mode 100644 index 0000000..2b94eb6 --- /dev/null +++ b/lib/FHEM/Automation/ShuttersControl/Rainprotection.pm @@ -0,0 +1,148 @@ +############################################################################### +# +# Developed with Kate +# +# (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net) +# All rights reserved +# +# Special thanks goes to: +# - Bernd (Cluni) this module is based on the logic of his script "Rollladensteuerung für HM/ROLLO inkl. Abschattung und Komfortfunktionen in Perl" (https://forum.fhem.de/index.php/topic,73964.0.html) +# - Beta-User for many tests, many suggestions and good discussions +# - pc1246 write english commandref +# - FunkOdyssey commandref style +# - sledge fix many typo in commandref +# - many User that use with modul and report bugs +# - Christoph (christoph.kaiser.in) Patch that expand RegEx for Window Events +# - Julian (Loredo) expand Residents Events for new Residents functions +# - Christoph (Christoph Morrison) for fix Commandref, many suggestions and good discussions +# +# +# This script is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License,or +# any later version. +# +# The GNU General Public License can be found at +# http://www.gnu.org/copyleft/gpl.html. +# A copy is found in the textfile GPL.txt and important notices to the license +# from the author is found in LICENSE.txt distributed with these scripts. +# +# This script is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# +# $Id$ +# +############################################################################### + +## unserer packagename +package FHEM::Automation::ShuttersControl::Rainprotection; + +use strict; +use warnings; +use utf8; + +use FHEM::Automation::ShuttersControl::Helper qw (:ALL); + +require Exporter; +our @ISA = qw(Exporter); +our @EXPORT_OK = qw( + RainProcessing +); +our %EXPORT_TAGS = ( + ALL => [ + qw( + RainProcessing + ) + ], +); + + +sub RainProcessing { + my ( $hash, $val, $triggerMax, $triggerMin ) = @_; + + my $rainClosedPos = $FHEM::Automation::ShuttersControl::ascDev + ->getRainSensorShuttersClosedPos; + + for my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) { + $FHEM::Automation::ShuttersControl::shutters->setShuttersDev( + $shuttersDev); + + next + if ( + $FHEM::Automation::ShuttersControl::shutters->getRainProtection eq + 'off' ); + + if ( $val > $triggerMax + && $FHEM::Automation::ShuttersControl::shutters->getStatus != + $rainClosedPos + && $FHEM::Automation::ShuttersControl::shutters + ->getRainProtectionStatus eq 'unprotected' ) + { + _RainProtected(); + } + elsif ( ( $val == 0 || $val < $triggerMin ) + && $FHEM::Automation::ShuttersControl::shutters->getStatus == + $rainClosedPos + && IsAfterShuttersManualBlocking($shuttersDev) + && $FHEM::Automation::ShuttersControl::shutters + ->getRainProtectionStatus eq 'protected' ) + { + my %funcHash = ( + shuttersdevice => $shuttersDev, + ); + + ::InternalTimer( ::gettimeofday() + $FHEM::Automation::ShuttersControl::ascDev->getRainWaitingTime + , \&_RainUnprotected + , \%funcHash ); + } + } + + return; +} + +### es muss noch beobachtet werden ob die Auswahl des Rollos welches bearbeitet werden soll bestehen bleibt oder mit in die neuen Funktionen übergeben werden muss +sub _RainProtected { + $FHEM::Automation::ShuttersControl::shutters->setLastDrive( + 'rain protected'); + $FHEM::Automation::ShuttersControl::shutters->setDriveCmd( + $FHEM::Automation::ShuttersControl::ascDev + ->getRainSensorShuttersClosedPos); + $FHEM::Automation::ShuttersControl::shutters + ->setRainProtectionStatus('protected'); +} + +sub _RainUnprotected { + my $h = shift; + + my $shuttersDev = $h->{shuttersdevice}; + $FHEM::Automation::ShuttersControl::shutters->setShuttersDev( + $shuttersDev); + + $FHEM::Automation::ShuttersControl::shutters->setLastDrive( + 'rain un-protected'); + $FHEM::Automation::ShuttersControl::shutters->setDriveCmd( + ( + $FHEM::Automation::ShuttersControl::shutters->getIsDay + ? $FHEM::Automation::ShuttersControl::shutters->getLastPos + : ( + $FHEM::Automation::ShuttersControl::shutters + ->getPrivacyDownStatus == 2 + ? $FHEM::Automation::ShuttersControl::shutters + ->getPrivacyDownPos + : $FHEM::Automation::ShuttersControl::shutters + ->getClosedPos + ) + ) + ); + + $FHEM::Automation::ShuttersControl::shutters + ->setRainProtectionStatus('unprotected'); +} + + + + +1;