patch-rainprotection #32
@@ -4,10 +4,10 @@ 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-04-27_07:46:21 108203 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
 | 
			
		||||
 
 | 
			
		||||
@@ -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::Rain 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');
 | 
			
		||||
        }
 | 
			
		||||
        RainProtection( $hash, $val, $triggerMax, $triggerMin );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										146
									
								
								lib/FHEM/Automation/ShuttersControl/Rainprotection.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								lib/FHEM/Automation/ShuttersControl/Rainprotection.pm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,146 @@
 | 
			
		||||
###############################################################################
 | 
			
		||||
#
 | 
			
		||||
# 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;
 | 
			
		||||
 | 
			
		||||
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' )
 | 
			
		||||
        {
 | 
			
		||||
            %funcHash = (
 | 
			
		||||
                shuttersdevice => $shuttersDev,
 | 
			
		||||
            );
 | 
			
		||||
 | 
			
		||||
            InternalTimer( InternalTimer( ::gettimeofday() + $FHEM::Automation::ShuttersControl::shutters->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;
 | 
			
		||||
		Reference in New Issue
	
	Block a user