testing #94
@@ -1,8 +1,8 @@
 | 
				
			|||||||
###############################################################################
 | 
					###############################################################################
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Developed with Kate
 | 
					# Developed with VSCodium and richterger perl plugin
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#  (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
 | 
					#  (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
 | 
				
			||||||
#  All rights reserved
 | 
					#  All rights reserved
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#   Special thanks goes to:
 | 
					#   Special thanks goes to:
 | 
				
			||||||
@@ -49,26 +49,17 @@ use utf8;
 | 
				
			|||||||
use FHEM::Meta;
 | 
					use FHEM::Meta;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use FHEM::Automation::ShuttersControl;
 | 
					use FHEM::Automation::ShuttersControl;
 | 
				
			||||||
use GPUtils qw(GP_Import GP_Export);
 | 
					use GPUtils qw(GP_Import);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Import der FHEM Funktionen
 | 
					## Import der FHEM Funktionen
 | 
				
			||||||
#-- Run before package compilation
 | 
					#-- Run before package compilation
 | 
				
			||||||
BEGIN {
 | 
					BEGIN {
 | 
				
			||||||
    # Import from main context
 | 
					    # Import from main context
 | 
				
			||||||
    GP_Import(
 | 
					    GP_Import(qw(readingFnAttributes));
 | 
				
			||||||
        qw(
 | 
					 | 
				
			||||||
          readingFnAttributes
 | 
					 | 
				
			||||||
          )
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    #-- Export to main context with different name
 | 
					 | 
				
			||||||
    GP_Export(
 | 
					 | 
				
			||||||
        qw(
 | 
					 | 
				
			||||||
          Initialize
 | 
					 | 
				
			||||||
          )
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub ::AutoShuttersControl_Initialize { goto &Initialize }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub Initialize {
 | 
					sub Initialize {
 | 
				
			||||||
    my $hash = shift;
 | 
					    my $hash = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -100,7 +91,8 @@ sub Initialize {
 | 
				
			|||||||
      . 'ASC_expert:1 '
 | 
					      . 'ASC_expert:1 '
 | 
				
			||||||
      . 'ASC_blockAscDrivesAfterManual:0,1 '
 | 
					      . 'ASC_blockAscDrivesAfterManual:0,1 '
 | 
				
			||||||
      . 'ASC_debug:1 '
 | 
					      . 'ASC_debug:1 '
 | 
				
			||||||
      . 'ASC_advDate:DeadSunday,FirstAdvent '
 | 
					      . 'ASC_advStartDate:DeadSunday,FirstAdvent '
 | 
				
			||||||
 | 
					      . 'ASC_advEndDate:CandlemasDay,EpiphanyDay '
 | 
				
			||||||
      . $readingFnAttributes;
 | 
					      . $readingFnAttributes;
 | 
				
			||||||
    $hash->{NotifyOrderPrefix} = '51-';    # Order Nummer für NotifyFn
 | 
					    $hash->{NotifyOrderPrefix} = '51-';    # Order Nummer für NotifyFn
 | 
				
			||||||
    $hash->{FW_detailFn} =
 | 
					    $hash->{FW_detailFn} =
 | 
				
			||||||
@@ -328,8 +320,11 @@ __END__
 | 
				
			|||||||
            <li><strong>ASC_freezeTemp</strong> - Temperature threshold for the freeze protection. The freeze protection
 | 
					            <li><strong>ASC_freezeTemp</strong> - Temperature threshold for the freeze protection. The freeze protection
 | 
				
			||||||
                prevents the shutter to be operated by <abbr>ASC</abbr>. Last operating order will be kept.
 | 
					                prevents the shutter to be operated by <abbr>ASC</abbr>. Last operating order will be kept.
 | 
				
			||||||
            </li>
 | 
					            </li>
 | 
				
			||||||
            <a id="AutoShuttersControl-attr-ASC_advDate"></a>
 | 
					            <a id="AutoShuttersControl-attr-ASC_advStartDate"></a>
 | 
				
			||||||
            <li><strong>ASC_advDate</strong> - Advent Season, selected FirstAdvent or DeadSunday.
 | 
					            <li><strong>ASC_advStartDate</strong> - Begin of Advent Season, selected FirstAdvent or DeadSunday.
 | 
				
			||||||
 | 
					            </li>
 | 
				
			||||||
 | 
					            <a id="AutoShuttersControl-attr-ASC_advEndDate"></a>
 | 
				
			||||||
 | 
					            <li><strong>ASC_advEndDate</strong> - End of Advent Season, selected CandlemasDay 6. January or EpiphanyDay 2. February.
 | 
				
			||||||
            </li>
 | 
					            </li>
 | 
				
			||||||
            <a id="AutoShuttersControl-attr-ASC_rainSensor"></a>
 | 
					            <a id="AutoShuttersControl-attr-ASC_rainSensor"></a>
 | 
				
			||||||
            <li><strong>ASC_rainSensor DEVICENAME[:READINGNAME] MAXTRIGGER[:HYSTERESE] [CLOSEDPOS]</strong> - Contains
 | 
					            <li><strong>ASC_rainSensor DEVICENAME[:READINGNAME] MAXTRIGGER[:HYSTERESE] [CLOSEDPOS]</strong> - Contains
 | 
				
			||||||
@@ -416,11 +411,11 @@ __END__
 | 
				
			|||||||
                after the last manual operation in seconds. Defaults to 1200 (20 minutes).
 | 
					                after the last manual operation in seconds. Defaults to 1200 (20 minutes).
 | 
				
			||||||
            </li>
 | 
					            </li>
 | 
				
			||||||
            <a id="AutoShuttersControl-attr-ASC_BlockingTime_beforDayOpen"></a>
 | 
					            <a id="AutoShuttersControl-attr-ASC_BlockingTime_beforDayOpen"></a>
 | 
				
			||||||
            <li><strong>ASC_BlockingTime_beforeDayOpen</strong> - Time in which no closing operation is made by
 | 
					            <li><strong>ASC_BlockingTime_beforDayOpen</strong> - Time in which no closing operation is made by
 | 
				
			||||||
                <abbr>ASC</abbr> after opening at the morning in seconds. Defaults to 3600 (one hour).
 | 
					                <abbr>ASC</abbr> after opening at the morning in seconds. Defaults to 3600 (one hour).
 | 
				
			||||||
            </li>
 | 
					            </li>
 | 
				
			||||||
            <a id="AutoShuttersControl-attr-ASC_BlockingTime_beforeNightClose"></a>
 | 
					            <a id="AutoShuttersControl-attr-ASC_BlockingTime_beforNightClose"></a>
 | 
				
			||||||
            <li><strong>ASC_BlockingTime_beforeNightClose</strong> - Time in which no closing operation is made by
 | 
					            <li><strong>ASC_BlockingTime_beforNightClose</strong> - Time in which no closing operation is made by
 | 
				
			||||||
                <abbr>ASC</abbr> before closing at the evening in seconds. Defaults to 3600 (one hour).
 | 
					                <abbr>ASC</abbr> before closing at the evening in seconds. Defaults to 3600 (one hour).
 | 
				
			||||||
            </li>
 | 
					            </li>
 | 
				
			||||||
            <a id="AutoShuttersControl-attr-ASC_BrightnessSensor"></a>
 | 
					            <a id="AutoShuttersControl-attr-ASC_BrightnessSensor"></a>
 | 
				
			||||||
@@ -1006,8 +1001,10 @@ __END__
 | 
				
			|||||||
            <li><strong>ASC_expert</strong> - ist der Wert 1, so werden erweiterte Informationen bezüglich des NotifyDevs unter set und get angezeigt</li>
 | 
					            <li><strong>ASC_expert</strong> - ist der Wert 1, so werden erweiterte Informationen bezüglich des NotifyDevs unter set und get angezeigt</li>
 | 
				
			||||||
            <a id="AutoShuttersControl-attr-ASC_freezeTemp"></a>
 | 
					            <a id="AutoShuttersControl-attr-ASC_freezeTemp"></a>
 | 
				
			||||||
            <li><strong>ASC_freezeTemp</strong> - Temperatur, ab welcher der Frostschutz greifen soll und der Rollladen nicht mehr fährt. Der letzte Fahrbefehl wird gespeichert.</li>
 | 
					            <li><strong>ASC_freezeTemp</strong> - Temperatur, ab welcher der Frostschutz greifen soll und der Rollladen nicht mehr fährt. Der letzte Fahrbefehl wird gespeichert.</li>
 | 
				
			||||||
            <a id="AutoShuttersControl-attr-ASC_advDate"></a>
 | 
					            <a id="AutoShuttersControl-attr-ASC_advStartDate"></a>
 | 
				
			||||||
            <li><strong>ASC_advDate</strong> - Adventszeit, Auswahl ab wann die Adventszeit beginnen soll.</li>
 | 
					            <li><strong>ASC_advStartDate</strong> - Start der Adventszeit, Auswahl ab wann die Adventszeit beginnen soll. 1. Advent oder Totensonntag</li>
 | 
				
			||||||
 | 
					            <a id="AutoShuttersControl-attr-ASC_advEndDate"></a>
 | 
				
			||||||
 | 
					            <li><strong>ASC_advEndDate</strong> - Ende der Adventszeit, Auswahl ab wann die Adventszeit Enden soll. EpiphanyDay 6. Januar oder CandlemasDay 2. Februar</li>
 | 
				
			||||||
            <a id="AutoShuttersControl-attr-ASC_rainSensor"></a>
 | 
					            <a id="AutoShuttersControl-attr-ASC_rainSensor"></a>
 | 
				
			||||||
            <li><strong>ASC_rainSensor - DEVICENAME[:READINGNAME] MAXTRIGGER[:HYSTERESE] [CLOSEDPOS:[WAITINGTIME]]</strong> - der Inhalt ist eine Kombination aus Devicename, Readingname, Wert ab dem getriggert werden soll, Hysterese Wert ab dem der Status Regenschutz aufgehoben werden soll und der "wegen Regen geschlossen Position", sowie der Wartezeit bis dann tatsächlich die aktion ausgeführt wird.</li>
 | 
					            <li><strong>ASC_rainSensor - DEVICENAME[:READINGNAME] MAXTRIGGER[:HYSTERESE] [CLOSEDPOS:[WAITINGTIME]]</strong> - der Inhalt ist eine Kombination aus Devicename, Readingname, Wert ab dem getriggert werden soll, Hysterese Wert ab dem der Status Regenschutz aufgehoben werden soll und der "wegen Regen geschlossen Position", sowie der Wartezeit bis dann tatsächlich die aktion ausgeführt wird.</li>
 | 
				
			||||||
            <a id="AutoShuttersControl-attr-ASC_residentsDev"></a>
 | 
					            <a id="AutoShuttersControl-attr-ASC_residentsDev"></a>
 | 
				
			||||||
@@ -1041,10 +1038,10 @@ __END__
 | 
				
			|||||||
            <li><strong>ASC_AutoAstroModeMorningHorizon</strong> - Höhe über Horizont,a wenn beim Attribut ASC_autoAstroModeMorning HORIZON ausgewählt (default: none)</li>
 | 
					            <li><strong>ASC_AutoAstroModeMorningHorizon</strong> - Höhe über Horizont,a wenn beim Attribut ASC_autoAstroModeMorning HORIZON ausgewählt (default: none)</li>
 | 
				
			||||||
            <a id="AutoShuttersControl-attr-ASC_BlockingTime_afterManual"></a>
 | 
					            <a id="AutoShuttersControl-attr-ASC_BlockingTime_afterManual"></a>
 | 
				
			||||||
            <li><strong>ASC_BlockingTime_afterManual</strong> - wie viel Sekunden soll die Automatik nach einer manuellen Fahrt aussetzen. (default: 1200)</li>
 | 
					            <li><strong>ASC_BlockingTime_afterManual</strong> - wie viel Sekunden soll die Automatik nach einer manuellen Fahrt aussetzen. (default: 1200)</li>
 | 
				
			||||||
            <a id="AutoShuttersControl-attr-ASC_BlockingTime_beforeDayOpen"></a>
 | 
					            <a id="AutoShuttersControl-attr-ASC_BlockingTime_beforDayOpen"></a>
 | 
				
			||||||
            <li><strong>ASC_BlockingTime_beforeDayOpen</strong> - wie viel Sekunden vor dem morgendlichen öffnen soll keine schließen Fahrt mehr stattfinden. (default: 3600)</li>
 | 
					            <li><strong>ASC_BlockingTime_beforDayOpen</strong> - wie viel Sekunden vor dem morgendlichen öffnen soll keine schließen Fahrt mehr stattfinden. (default: 3600)</li>
 | 
				
			||||||
            <a id="AutoShuttersControl-attr-ASC_BlockingTime_beforeNightClose"></a>
 | 
					            <a id="AutoShuttersControl-attr-ASC_BlockingTime_beforNightClose"></a>
 | 
				
			||||||
            <li><strong>ASC_BlockingTime_beforeNightClose</strong> - wie viel Sekunden vor dem nächtlichen schließen soll keine öffnen Fahrt mehr stattfinden. (default: 3600)</li>
 | 
					            <li><strong>ASC_BlockingTime_beforNightClose</strong> - wie viel Sekunden vor dem nächtlichen schließen soll keine öffnen Fahrt mehr stattfinden. (default: 3600)</li>
 | 
				
			||||||
            <a id="AutoShuttersControl-attr-ASC_BrightnessSensor"></a>
 | 
					            <a id="AutoShuttersControl-attr-ASC_BrightnessSensor"></a>
 | 
				
			||||||
            <li><strong>ASC_BrightnessSensor - DEVICE[:READING] WERT-MORGENS:WERT-ABENDS</strong> / 'Sensorname[:brightness [400:800]]' Angaben zum Helligkeitssensor mit (Readingname, optional) für die Beschattung und dem Fahren der Rollladen nach brightness und den optionalen Brightnesswerten für Sonnenauf- und Sonnenuntergang. (default: none)</li>
 | 
					            <li><strong>ASC_BrightnessSensor - DEVICE[:READING] WERT-MORGENS:WERT-ABENDS</strong> / 'Sensorname[:brightness [400:800]]' Angaben zum Helligkeitssensor mit (Readingname, optional) für die Beschattung und dem Fahren der Rollladen nach brightness und den optionalen Brightnesswerten für Sonnenauf- und Sonnenuntergang. (default: none)</li>
 | 
				
			||||||
            <a id="AutoShuttersControl-attr-ASC_Down"></a>
 | 
					            <a id="AutoShuttersControl-attr-ASC_Down"></a>
 | 
				
			||||||
@@ -1465,7 +1462,7 @@ __END__
 | 
				
			|||||||
  ],
 | 
					  ],
 | 
				
			||||||
  "release_status": "stable",
 | 
					  "release_status": "stable",
 | 
				
			||||||
  "license": "GPL_2",
 | 
					  "license": "GPL_2",
 | 
				
			||||||
  "version": "v0.10.19",
 | 
					  "version": "v0.10.20",
 | 
				
			||||||
  "author": [
 | 
					  "author": [
 | 
				
			||||||
    "Marko Oldenburg <fhemdevelopment@cooltux.net>"
 | 
					    "Marko Oldenburg <fhemdevelopment@cooltux.net>"
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
@@ -1479,7 +1476,7 @@ __END__
 | 
				
			|||||||
    "runtime": {
 | 
					    "runtime": {
 | 
				
			||||||
      "requires": {
 | 
					      "requires": {
 | 
				
			||||||
        "FHEM": 5.00918799,
 | 
					        "FHEM": 5.00918799,
 | 
				
			||||||
        "perl": 5.016, 
 | 
					        "perl": 5.023, 
 | 
				
			||||||
        "Meta": 0,
 | 
					        "Meta": 0,
 | 
				
			||||||
        "JSON": 0,
 | 
					        "JSON": 0,
 | 
				
			||||||
        "Date::Parse": 0
 | 
					        "Date::Parse": 0
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,16 +1,16 @@
 | 
				
			|||||||
UPD 2021-11-14_13:42:55 115685 FHEM/73_AutoShuttersControl.pm
 | 
					UPD 2022-01-10_10:41:35 116177 FHEM/73_AutoShuttersControl.pm
 | 
				
			||||||
UPD 2021-11-14_13:40:41 75264 lib/FHEM/Automation/ShuttersControl.pm
 | 
					UPD 2022-01-10_10:41:35 75839 lib/FHEM/Automation/ShuttersControl.pm
 | 
				
			||||||
UPD 2021-10-09_07:12:54 2657 lib/FHEM/Automation/ShuttersControl/Dev.pm
 | 
					UPD 2022-01-02_07:57:18 2691 lib/FHEM/Automation/ShuttersControl/Dev.pm
 | 
				
			||||||
UPD 2021-10-09_07:12:54 2494 lib/FHEM/Automation/ShuttersControl/Roommate.pm
 | 
					UPD 2022-01-02_07:57:18 2677 lib/FHEM/Automation/ShuttersControl/Roommate.pm
 | 
				
			||||||
UPD 2021-10-24_07:33:53 31900 lib/FHEM/Automation/ShuttersControl/Shutters.pm
 | 
					UPD 2022-01-02_08:52:49 32016 lib/FHEM/Automation/ShuttersControl/Shutters.pm
 | 
				
			||||||
UPD 2021-10-09_07:12:54 25333 lib/FHEM/Automation/ShuttersControl/Shading.pm
 | 
					UPD 2022-01-02_07:57:18 25452 lib/FHEM/Automation/ShuttersControl/Shading.pm
 | 
				
			||||||
UPD 2021-11-10_20:11:14 110681 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm
 | 
					UPD 2022-01-02_07:57:18 112122 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm
 | 
				
			||||||
UPD 2021-11-14_13:37:27 40094 lib/FHEM/Automation/ShuttersControl/Helper.pm
 | 
					UPD 2022-01-10_11:04:15 40603 lib/FHEM/Automation/ShuttersControl/Helper.pm
 | 
				
			||||||
UPD 2021-10-09_07:12:54 2173 lib/FHEM/Automation/ShuttersControl/Window.pm
 | 
					UPD 2022-01-02_07:57:18 2209 lib/FHEM/Automation/ShuttersControl/Window.pm
 | 
				
			||||||
UPD 2021-10-09_07:12:54 11739 lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm
 | 
					UPD 2022-01-10_11:06:40 11857 lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm
 | 
				
			||||||
UPD 2021-10-09_07:12:54 7249 lib/FHEM/Automation/ShuttersControl/Dev/Readings.pm
 | 
					UPD 2022-01-01_20:15:38 7265 lib/FHEM/Automation/ShuttersControl/Dev/Readings.pm
 | 
				
			||||||
UPD 2021-10-27_08:50:46 52649 lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm
 | 
					UPD 2022-01-01_20:15:38 52751 lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm
 | 
				
			||||||
UPD 2021-10-09_07:12:54 2901 lib/FHEM/Automation/ShuttersControl/Shutters/Readings.pm
 | 
					UPD 2022-01-01_20:15:38 2799 lib/FHEM/Automation/ShuttersControl/Shutters/Readings.pm
 | 
				
			||||||
UPD 2021-10-09_07:12:54 3978 lib/FHEM/Automation/ShuttersControl/Window/Attr.pm
 | 
					UPD 2022-01-01_20:15:38 3887 lib/FHEM/Automation/ShuttersControl/Window/Attr.pm
 | 
				
			||||||
UPD 2021-10-09_07:12:54 2286 lib/FHEM/Automation/ShuttersControl/Window/Readings.pm
 | 
					UPD 2022-01-01_20:15:38 2200 lib/FHEM/Automation/ShuttersControl/Window/Readings.pm
 | 
				
			||||||
UPD 2021-10-27_08:50:46 6716 lib/FHEM/Automation/ShuttersControl/Rainprotection.pm
 | 
					UPD 2022-01-02_07:57:18 7113 lib/FHEM/Automation/ShuttersControl/Rainprotection.pm
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,8 +1,8 @@
 | 
				
			|||||||
###############################################################################
 | 
					###############################################################################
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Developed with Kate
 | 
					# Developed with VSCodium and richterger perl plugin
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#  (c) 2018-2021 Copyright: Marko Oldenburg (leongaultier at gmail dot com)
 | 
					#  (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
 | 
				
			||||||
#  All rights reserved
 | 
					#  All rights reserved
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#   Special thanks goes to:
 | 
					#   Special thanks goes to:
 | 
				
			||||||
@@ -43,7 +43,7 @@ package FHEM::Automation::ShuttersControl::Dev;
 | 
				
			|||||||
use FHEM::Automation::ShuttersControl::Dev::Readings;
 | 
					use FHEM::Automation::ShuttersControl::Dev::Readings;
 | 
				
			||||||
use FHEM::Automation::ShuttersControl::Dev::Attr;
 | 
					use FHEM::Automation::ShuttersControl::Dev::Attr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
our @ISA =
 | 
					use base
 | 
				
			||||||
  qw(FHEM::Automation::ShuttersControl::Dev::Readings FHEM::Automation::ShuttersControl::Dev::Attr);
 | 
					  qw(FHEM::Automation::ShuttersControl::Dev::Readings FHEM::Automation::ShuttersControl::Dev::Attr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use strict;
 | 
					use strict;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
###############################################################################
 | 
					###############################################################################
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Developed with Kate
 | 
					# Developed with VSCodium and richterger perl plugin
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#  (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net)
 | 
					#  (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
 | 
				
			||||||
#  All rights reserved
 | 
					#  All rights reserved
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#   Special thanks goes to:
 | 
					#   Special thanks goes to:
 | 
				
			||||||
@@ -44,23 +44,12 @@ use strict;
 | 
				
			|||||||
use warnings;
 | 
					use warnings;
 | 
				
			||||||
use utf8;
 | 
					use utf8;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use GPUtils qw(GP_Import);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Import der FHEM Funktionen
 | 
					 | 
				
			||||||
BEGIN {
 | 
					 | 
				
			||||||
    GP_Import(
 | 
					 | 
				
			||||||
        qw(
 | 
					 | 
				
			||||||
          AttrVal
 | 
					 | 
				
			||||||
          gettimeofday)
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub getShuttersOffset {
 | 
					sub getShuttersOffset {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $name = $self->{name};
 | 
					    my $name = $self->{name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $name, 'ASC_shuttersDriveDelay', -1 );
 | 
					    return ::AttrVal( $name, 'ASC_shuttersDriveDelay', -1 );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub getBrightnessMinVal {
 | 
					sub getBrightnessMinVal {
 | 
				
			||||||
@@ -70,7 +59,7 @@ sub getBrightnessMinVal {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return $self->{ASC_brightness}->{triggermin}
 | 
					    return $self->{ASC_brightness}->{triggermin}
 | 
				
			||||||
      if ( exists( $self->{ASC_brightness}->{LASTGETTIME} )
 | 
					      if ( exists( $self->{ASC_brightness}->{LASTGETTIME} )
 | 
				
			||||||
        && ( gettimeofday() - $self->{ASC_brightness}->{LASTGETTIME} ) < 2 );
 | 
					        && ( ::gettimeofday() - $self->{ASC_brightness}->{LASTGETTIME} ) < 2 );
 | 
				
			||||||
    $FHEM::Automation::ShuttersControl::ascDev->getBrightnessMaxVal;
 | 
					    $FHEM::Automation::ShuttersControl::ascDev->getBrightnessMaxVal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return $self->{ASC_brightness}->{triggermin};
 | 
					    return $self->{ASC_brightness}->{triggermin};
 | 
				
			||||||
@@ -83,8 +72,8 @@ sub getBrightnessMaxVal {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return $self->{ASC_brightness}->{triggermax}
 | 
					    return $self->{ASC_brightness}->{triggermax}
 | 
				
			||||||
      if ( exists( $self->{ASC_brightness}->{LASTGETTIME} )
 | 
					      if ( exists( $self->{ASC_brightness}->{LASTGETTIME} )
 | 
				
			||||||
        && ( gettimeofday() - $self->{ASC_brightness}->{LASTGETTIME} ) < 2 );
 | 
					        && ( ::gettimeofday() - $self->{ASC_brightness}->{LASTGETTIME} ) < 2 );
 | 
				
			||||||
    $self->{ASC_brightness}->{LASTGETTIME} = int( gettimeofday() );
 | 
					    $self->{ASC_brightness}->{LASTGETTIME} = int( ::gettimeofday() );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my ( $triggermax, $triggermin ) =
 | 
					    my ( $triggermax, $triggermin ) =
 | 
				
			||||||
      FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name,
 | 
					      FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name,
 | 
				
			||||||
@@ -104,7 +93,7 @@ sub _getTwilightDevice {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    my $name = $self->{name};
 | 
					    my $name = $self->{name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $name, 'ASC_twilightDevice', 'none' );
 | 
					    return ::AttrVal( $name, 'ASC_twilightDevice', 'none' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub getAutoAstroModeEvening {
 | 
					sub getAutoAstroModeEvening {
 | 
				
			||||||
@@ -112,7 +101,7 @@ sub getAutoAstroModeEvening {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    my $name = $self->{name};
 | 
					    my $name = $self->{name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $name, 'ASC_autoAstroModeEvening', 'REAL' );
 | 
					    return ::AttrVal( $name, 'ASC_autoAstroModeEvening', 'REAL' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub getAutoAstroModeEveningHorizon {
 | 
					sub getAutoAstroModeEveningHorizon {
 | 
				
			||||||
@@ -120,7 +109,7 @@ sub getAutoAstroModeEveningHorizon {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    my $name = $self->{name};
 | 
					    my $name = $self->{name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $name, 'ASC_autoAstroModeEveningHorizon', 0 );
 | 
					    return ::AttrVal( $name, 'ASC_autoAstroModeEveningHorizon', 0 );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub getAutoAstroModeMorning {
 | 
					sub getAutoAstroModeMorning {
 | 
				
			||||||
@@ -128,7 +117,7 @@ sub getAutoAstroModeMorning {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    my $name = $self->{name};
 | 
					    my $name = $self->{name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $name, 'ASC_autoAstroModeMorning', 'REAL' );
 | 
					    return ::AttrVal( $name, 'ASC_autoAstroModeMorning', 'REAL' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub getAutoAstroModeMorningHorizon {
 | 
					sub getAutoAstroModeMorningHorizon {
 | 
				
			||||||
@@ -136,7 +125,7 @@ sub getAutoAstroModeMorningHorizon {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    my $name = $self->{name};
 | 
					    my $name = $self->{name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $name, 'ASC_autoAstroModeMorningHorizon', 0 );
 | 
					    return ::AttrVal( $name, 'ASC_autoAstroModeMorningHorizon', 0 );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub getAutoShuttersControlMorning {
 | 
					sub getAutoShuttersControlMorning {
 | 
				
			||||||
@@ -144,7 +133,7 @@ sub getAutoShuttersControlMorning {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    my $name = $self->{name};
 | 
					    my $name = $self->{name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $name, 'ASC_autoShuttersControlMorning', 'on' );
 | 
					    return ::AttrVal( $name, 'ASC_autoShuttersControlMorning', 'on' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub getAutoShuttersControlEvening {
 | 
					sub getAutoShuttersControlEvening {
 | 
				
			||||||
@@ -152,7 +141,7 @@ sub getAutoShuttersControlEvening {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    my $name = $self->{name};
 | 
					    my $name = $self->{name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $name, 'ASC_autoShuttersControlEvening', 'on' );
 | 
					    return ::AttrVal( $name, 'ASC_autoShuttersControlEvening', 'on' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub getAutoShuttersControlComfort {
 | 
					sub getAutoShuttersControlComfort {
 | 
				
			||||||
@@ -160,7 +149,7 @@ sub getAutoShuttersControlComfort {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    my $name = $self->{name};
 | 
					    my $name = $self->{name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $name, 'ASC_autoShuttersControlComfort', 'off' );
 | 
					    return ::AttrVal( $name, 'ASC_autoShuttersControlComfort', 'off' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub getFreezeTemp {
 | 
					sub getFreezeTemp {
 | 
				
			||||||
@@ -168,7 +157,7 @@ sub getFreezeTemp {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    my $name = $self->{name};
 | 
					    my $name = $self->{name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $name, 'ASC_freezeTemp', 3 );
 | 
					    return ::AttrVal( $name, 'ASC_freezeTemp', 3 );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub getSlatDriveCmdInverse {
 | 
					sub getSlatDriveCmdInverse {
 | 
				
			||||||
@@ -176,7 +165,7 @@ sub getSlatDriveCmdInverse {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    my $name = $self->{name};
 | 
					    my $name = $self->{name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $name, 'ASC_slatDriveCmdInverse', 0 );
 | 
					    return ::AttrVal( $name, 'ASC_slatDriveCmdInverse', 0 );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub _getTempSensor {
 | 
					sub _getTempSensor {
 | 
				
			||||||
@@ -186,11 +175,11 @@ sub _getTempSensor {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return $self->{ASC_tempSensor}->{device}
 | 
					    return $self->{ASC_tempSensor}->{device}
 | 
				
			||||||
      if ( exists( $self->{ASC_tempSensor}->{LASTGETTIME} )
 | 
					      if ( exists( $self->{ASC_tempSensor}->{LASTGETTIME} )
 | 
				
			||||||
        && ( gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 );
 | 
					        && ( ::gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 );
 | 
				
			||||||
    $self->{ASC_tempSensor}->{LASTGETTIME} = int( gettimeofday() );
 | 
					    $self->{ASC_tempSensor}->{LASTGETTIME} = int( ::gettimeofday() );
 | 
				
			||||||
    my ( $device, $reading ) =
 | 
					    my ( $device, $reading ) =
 | 
				
			||||||
      FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name, 'ASC_tempSensor',
 | 
					      FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name,
 | 
				
			||||||
        'none' );
 | 
					        'ASC_tempSensor', 'none' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ## erwartetes Ergebnis
 | 
					    ## erwartetes Ergebnis
 | 
				
			||||||
    # DEVICE:READING
 | 
					    # DEVICE:READING
 | 
				
			||||||
@@ -208,7 +197,7 @@ sub getTempSensorReading {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return $self->{ASC_tempSensor}->{reading}
 | 
					    return $self->{ASC_tempSensor}->{reading}
 | 
				
			||||||
      if ( exists( $self->{ASC_tempSensor}->{LASTGETTIME} )
 | 
					      if ( exists( $self->{ASC_tempSensor}->{LASTGETTIME} )
 | 
				
			||||||
        && ( gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 );
 | 
					        && ( ::gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 );
 | 
				
			||||||
    $FHEM::Automation::ShuttersControl::ascDev->_getTempSensor;
 | 
					    $FHEM::Automation::ShuttersControl::ascDev->_getTempSensor;
 | 
				
			||||||
    return $self->{ASC_tempSensor}->{reading};
 | 
					    return $self->{ASC_tempSensor}->{reading};
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -220,8 +209,9 @@ sub _getResidentsDev {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return $self->{ASC_residentsDev}->{device}
 | 
					    return $self->{ASC_residentsDev}->{device}
 | 
				
			||||||
      if ( exists( $self->{ASC_residentsDev}->{LASTGETTIME} )
 | 
					      if ( exists( $self->{ASC_residentsDev}->{LASTGETTIME} )
 | 
				
			||||||
        && ( gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) < 2 );
 | 
					        && ( ::gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) <
 | 
				
			||||||
    $self->{ASC_residentsDev}->{LASTGETTIME} = int( gettimeofday() );
 | 
					        2 );
 | 
				
			||||||
 | 
					    $self->{ASC_residentsDev}->{LASTGETTIME} = int( ::gettimeofday() );
 | 
				
			||||||
    my ( $device, $reading ) =
 | 
					    my ( $device, $reading ) =
 | 
				
			||||||
      FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name,
 | 
					      FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name,
 | 
				
			||||||
        'ASC_residentsDev', 'none' );
 | 
					        'ASC_residentsDev', 'none' );
 | 
				
			||||||
@@ -240,7 +230,8 @@ sub getResidentsReading {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return $self->{ASC_residentsDev}->{reading}
 | 
					    return $self->{ASC_residentsDev}->{reading}
 | 
				
			||||||
      if ( exists( $self->{ASC_residentsDev}->{LASTGETTIME} )
 | 
					      if ( exists( $self->{ASC_residentsDev}->{LASTGETTIME} )
 | 
				
			||||||
        && ( gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) < 2 );
 | 
					        && ( ::gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) <
 | 
				
			||||||
 | 
					        2 );
 | 
				
			||||||
    $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev;
 | 
					    $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev;
 | 
				
			||||||
    return $self->{ASC_residentsDev}->{reading};
 | 
					    return $self->{ASC_residentsDev}->{reading};
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -252,11 +243,11 @@ sub _getRainSensor {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return $self->{ASC_rainSensor}->{device}
 | 
					    return $self->{ASC_rainSensor}->{device}
 | 
				
			||||||
      if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
 | 
					      if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
 | 
				
			||||||
        && ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
 | 
					        && ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
 | 
				
			||||||
    $self->{ASC_rainSensor}->{LASTGETTIME} = int( gettimeofday() );
 | 
					    $self->{ASC_rainSensor}->{LASTGETTIME} = int( ::gettimeofday() );
 | 
				
			||||||
    my ( $device, $reading, $max, $hyst, $pos, $wait ) =
 | 
					    my ( $device, $reading, $max, $hyst, $pos, $wait ) =
 | 
				
			||||||
      FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name, 'ASC_rainSensor',
 | 
					      FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name,
 | 
				
			||||||
        'none' );
 | 
					        'ASC_rainSensor', 'none' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ## erwartetes Ergebnis
 | 
					    ## erwartetes Ergebnis
 | 
				
			||||||
    # DEVICE:READING MAX:HYST
 | 
					    # DEVICE:READING MAX:HYST
 | 
				
			||||||
@@ -266,10 +257,10 @@ sub _getRainSensor {
 | 
				
			|||||||
    $self->{ASC_rainSensor}->{reading} =
 | 
					    $self->{ASC_rainSensor}->{reading} =
 | 
				
			||||||
      ( $reading ne 'none' ? $reading : 'rain' );
 | 
					      ( $reading ne 'none' ? $reading : 'rain' );
 | 
				
			||||||
    $self->{ASC_rainSensor}->{triggermax} = (
 | 
					    $self->{ASC_rainSensor}->{triggermax} = (
 | 
				
			||||||
         (   $max ne 'none'
 | 
					        ( $max ne 'none' && $max =~ m{\A(-?\d+(\.\d+)?)\z}xms )
 | 
				
			||||||
          && $max =~ m{\A(-?\d+(\.\d+)?)\z}xms )
 | 
					 | 
				
			||||||
        ? $max
 | 
					        ? $max
 | 
				
			||||||
        : 1000 );
 | 
					        : 1000
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $self->{ASC_rainSensor}->{triggerhyst} = (
 | 
					    $self->{ASC_rainSensor}->{triggerhyst} = (
 | 
				
			||||||
          $hyst ne 'none'
 | 
					          $hyst ne 'none'
 | 
				
			||||||
@@ -277,10 +268,11 @@ sub _getRainSensor {
 | 
				
			|||||||
        : ( $self->{ASC_rainSensor}->{triggermax} * 0 )
 | 
					        : ( $self->{ASC_rainSensor}->{triggermax} * 0 )
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $self->{ASC_rainSensor}->{shuttersClosedPos} =
 | 
					    $self->{ASC_rainSensor}->{shuttersClosedPos} = (
 | 
				
			||||||
      (   $pos ne 'none'
 | 
					          $pos ne 'none'
 | 
				
			||||||
        ? $pos
 | 
					        ? $pos
 | 
				
			||||||
        : $FHEM::Automation::ShuttersControl::shutters->getClosedPos );
 | 
					        : $FHEM::Automation::ShuttersControl::shutters->getClosedPos
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
    $self->{ASC_rainSensor}->{waitingTime} =
 | 
					    $self->{ASC_rainSensor}->{waitingTime} =
 | 
				
			||||||
      ( $wait ne 'none' ? $wait : 0 );
 | 
					      ( $wait ne 'none' ? $wait : 0 );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -294,7 +286,7 @@ sub getRainSensorReading {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return $self->{ASC_rainSensor}->{reading}
 | 
					    return $self->{ASC_rainSensor}->{reading}
 | 
				
			||||||
      if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
 | 
					      if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
 | 
				
			||||||
        && ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
 | 
					        && ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
 | 
				
			||||||
    $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
 | 
					    $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
 | 
				
			||||||
    return $self->{ASC_rainSensor}->{reading};
 | 
					    return $self->{ASC_rainSensor}->{reading};
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -306,7 +298,7 @@ sub getRainTriggerMax {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return $self->{ASC_rainSensor}->{triggermax}
 | 
					    return $self->{ASC_rainSensor}->{triggermax}
 | 
				
			||||||
      if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
 | 
					      if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
 | 
				
			||||||
        && ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
 | 
					        && ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
 | 
				
			||||||
    $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
 | 
					    $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
 | 
				
			||||||
    return $self->{ASC_rainSensor}->{triggermax};
 | 
					    return $self->{ASC_rainSensor}->{triggermax};
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -318,7 +310,7 @@ sub getRainTriggerMin {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return $self->{ASC_rainSensor}->{triggerhyst}
 | 
					    return $self->{ASC_rainSensor}->{triggerhyst}
 | 
				
			||||||
      if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
 | 
					      if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
 | 
				
			||||||
        && ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
 | 
					        && ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
 | 
				
			||||||
    $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
 | 
					    $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
 | 
				
			||||||
    return $self->{ASC_rainSensor}->{triggerhyst};
 | 
					    return $self->{ASC_rainSensor}->{triggerhyst};
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -330,7 +322,7 @@ sub getRainSensorShuttersClosedPos {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return $self->{ASC_rainSensor}->{shuttersClosedPos}
 | 
					    return $self->{ASC_rainSensor}->{shuttersClosedPos}
 | 
				
			||||||
      if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
 | 
					      if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
 | 
				
			||||||
        && ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
 | 
					        && ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
 | 
				
			||||||
    $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
 | 
					    $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
 | 
				
			||||||
    return $self->{ASC_rainSensor}->{shuttersClosedPos};
 | 
					    return $self->{ASC_rainSensor}->{shuttersClosedPos};
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -342,7 +334,7 @@ sub getRainWaitingTime {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return $self->{ASC_rainSensor}->{waitingTime}
 | 
					    return $self->{ASC_rainSensor}->{waitingTime}
 | 
				
			||||||
      if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
 | 
					      if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
 | 
				
			||||||
        && ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
 | 
					        && ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
 | 
				
			||||||
    $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
 | 
					    $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
 | 
				
			||||||
    return $self->{ASC_rainSensor}->{waitingTime};
 | 
					    return $self->{ASC_rainSensor}->{waitingTime};
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -354,11 +346,11 @@ sub _getWindSensor {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return $self->{ASC_windSensor}->{device}
 | 
					    return $self->{ASC_windSensor}->{device}
 | 
				
			||||||
      if ( exists( $self->{ASC_windSensor}->{LASTGETTIME} )
 | 
					      if ( exists( $self->{ASC_windSensor}->{LASTGETTIME} )
 | 
				
			||||||
        && ( gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 );
 | 
					        && ( ::gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 );
 | 
				
			||||||
    $self->{ASC_windSensor}->{LASTGETTIME} = int( gettimeofday() );
 | 
					    $self->{ASC_windSensor}->{LASTGETTIME} = int( ::gettimeofday() );
 | 
				
			||||||
    my ( $device, $reading ) =
 | 
					    my ( $device, $reading ) =
 | 
				
			||||||
      FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name, 'ASC_windSensor',
 | 
					      FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name,
 | 
				
			||||||
        'none' );
 | 
					        'ASC_windSensor', 'none' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return $device if ( $device eq 'none' );
 | 
					    return $device if ( $device eq 'none' );
 | 
				
			||||||
    $self->{ASC_windSensor}->{device} = $device;
 | 
					    $self->{ASC_windSensor}->{device} = $device;
 | 
				
			||||||
@@ -375,7 +367,7 @@ sub getWindSensorReading {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return $self->{ASC_windSensor}->{reading}
 | 
					    return $self->{ASC_windSensor}->{reading}
 | 
				
			||||||
      if ( exists( $self->{ASC_windSensor}->{LASTGETTIME} )
 | 
					      if ( exists( $self->{ASC_windSensor}->{LASTGETTIME} )
 | 
				
			||||||
        && ( gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 );
 | 
					        && ( ::gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 );
 | 
				
			||||||
    $FHEM::Automation::ShuttersControl::ascDev->_getWindSensor;
 | 
					    $FHEM::Automation::ShuttersControl::ascDev->_getWindSensor;
 | 
				
			||||||
    return (
 | 
					    return (
 | 
				
			||||||
        defined( $self->{ASC_windSensor}->{reading} )
 | 
					        defined( $self->{ASC_windSensor}->{reading} )
 | 
				
			||||||
@@ -389,18 +381,23 @@ sub getBlockAscDrivesAfterManual {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    my $name = $self->{name};
 | 
					    my $name = $self->{name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $name, 'ASC_blockAscDrivesAfterManual', 0 );
 | 
					    return ::AttrVal( $name, 'ASC_blockAscDrivesAfterManual', 0 );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub getAdvDate {
 | 
					sub getAdvStartDate {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $name = $self->{name};
 | 
					    my $name = $self->{name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $name, 'ASC_advDate', 'FirstAdvent' );
 | 
					    return ::AttrVal( $name, 'ASC_advStartDate', 'FirstAdvent' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub getAdvEndDate {
 | 
				
			||||||
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $name = $self->{name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return ::AttrVal( $name, 'ASC_advEndDate', 'EpiphanyDay' );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1;
 | 
					1;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
###############################################################################
 | 
					###############################################################################
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Developed with Kate
 | 
					# Developed with VSCodium and richterger perl plugin
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#  (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net)
 | 
					#  (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
 | 
				
			||||||
#  All rights reserved
 | 
					#  All rights reserved
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#   Special thanks goes to:
 | 
					#   Special thanks goes to:
 | 
				
			||||||
@@ -48,12 +48,7 @@ use GPUtils qw(GP_Import);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
## Import der FHEM Funktionen
 | 
					## Import der FHEM Funktionen
 | 
				
			||||||
BEGIN {
 | 
					BEGIN {
 | 
				
			||||||
    GP_Import(
 | 
					    GP_Import(qw(defs));
 | 
				
			||||||
        qw(
 | 
					 | 
				
			||||||
          readingsSingleUpdate
 | 
					 | 
				
			||||||
          ReadingsVal
 | 
					 | 
				
			||||||
          defs)
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub setDelayCmdReading {
 | 
					sub setDelayCmdReading {
 | 
				
			||||||
@@ -62,7 +57,7 @@ sub setDelayCmdReading {
 | 
				
			|||||||
    my $name = $self->{name};
 | 
					    my $name = $self->{name};
 | 
				
			||||||
    my $hash = $defs{$name};
 | 
					    my $hash = $defs{$name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    readingsSingleUpdate(
 | 
					    ::readingsSingleUpdate(
 | 
				
			||||||
        $hash,
 | 
					        $hash,
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
 | 
					        $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
 | 
				
			||||||
          . '_lastDelayPosValue',
 | 
					          . '_lastDelayPosValue',
 | 
				
			||||||
@@ -79,7 +74,7 @@ sub setStateReading {
 | 
				
			|||||||
    my $name = $self->{name};
 | 
					    my $name = $self->{name};
 | 
				
			||||||
    my $hash = $defs{$name};
 | 
					    my $hash = $defs{$name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    readingsSingleUpdate(
 | 
					    ::readingsSingleUpdate(
 | 
				
			||||||
        $hash, 'state',
 | 
					        $hash, 'state',
 | 
				
			||||||
        (
 | 
					        (
 | 
				
			||||||
            defined($value)
 | 
					            defined($value)
 | 
				
			||||||
@@ -97,7 +92,7 @@ sub setPosReading {
 | 
				
			|||||||
    my $name = $self->{name};
 | 
					    my $name = $self->{name};
 | 
				
			||||||
    my $hash = $defs{$name};
 | 
					    my $hash = $defs{$name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    readingsSingleUpdate(
 | 
					    ::readingsSingleUpdate(
 | 
				
			||||||
        $hash,
 | 
					        $hash,
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
 | 
					        $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
 | 
				
			||||||
          . '_PosValue',
 | 
					          . '_PosValue',
 | 
				
			||||||
@@ -113,7 +108,7 @@ sub setLastPosReading {
 | 
				
			|||||||
    my $name = $self->{name};
 | 
					    my $name = $self->{name};
 | 
				
			||||||
    my $hash = $defs{$name};
 | 
					    my $hash = $defs{$name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    readingsSingleUpdate(
 | 
					    ::readingsSingleUpdate(
 | 
				
			||||||
        $hash,
 | 
					        $hash,
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
 | 
					        $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
 | 
				
			||||||
          . '_lastPosValue',
 | 
					          . '_lastPosValue',
 | 
				
			||||||
@@ -128,7 +123,7 @@ sub getPartyMode {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    my $name = $self->{name};
 | 
					    my $name = $self->{name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return ReadingsVal( $name, 'partyMode', 'off' );
 | 
					    return ::ReadingsVal( $name, 'partyMode', 'off' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub getHardLockOut {
 | 
					sub getHardLockOut {
 | 
				
			||||||
@@ -136,7 +131,7 @@ sub getHardLockOut {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    my $name = $self->{name};
 | 
					    my $name = $self->{name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return ReadingsVal( $name, 'hardLockOut', 'none' );
 | 
					    return ::ReadingsVal( $name, 'hardLockOut', 'none' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub getSunriseTimeWeHoliday {
 | 
					sub getSunriseTimeWeHoliday {
 | 
				
			||||||
@@ -144,7 +139,7 @@ sub getSunriseTimeWeHoliday {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    my $name = $self->{name};
 | 
					    my $name = $self->{name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return ReadingsVal( $name, 'sunriseTimeWeHoliday', 'none' );
 | 
					    return ::ReadingsVal( $name, 'sunriseTimeWeHoliday', 'none' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub getMonitoredDevs {
 | 
					sub getMonitoredDevs {
 | 
				
			||||||
@@ -152,14 +147,14 @@ sub getMonitoredDevs {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    my $name = $self->{name};
 | 
					    my $name = $self->{name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $self->{monitoredDevs} = ReadingsVal( $name, '.monitoredDevs', 'none' );
 | 
					    $self->{monitoredDevs} = ::ReadingsVal( $name, '.monitoredDevs', 'none' );
 | 
				
			||||||
    return $self->{monitoredDevs};
 | 
					    return $self->{monitoredDevs};
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub getOutTemp {
 | 
					sub getOutTemp {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return ReadingsVal(
 | 
					    return ::ReadingsVal(
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::ascDev->_getTempSensor,
 | 
					        $FHEM::Automation::ShuttersControl::ascDev->_getTempSensor,
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::ascDev->getTempSensorReading,
 | 
					        $FHEM::Automation::ShuttersControl::ascDev->getTempSensorReading,
 | 
				
			||||||
        -100 );
 | 
					        -100 );
 | 
				
			||||||
@@ -169,7 +164,8 @@ sub getResidentsStatus {
 | 
				
			|||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $val =
 | 
					    my $val =
 | 
				
			||||||
      ReadingsVal( $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
 | 
					      ::ReadingsVal(
 | 
				
			||||||
 | 
					        $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::ascDev->getResidentsReading,
 | 
					        $FHEM::Automation::ShuttersControl::ascDev->getResidentsReading,
 | 
				
			||||||
        'none' );
 | 
					        'none' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -178,7 +174,7 @@ sub getResidentsStatus {
 | 
				
			|||||||
        return $1 && $1 eq 'pet' ? 'absent' : $2;
 | 
					        return $1 && $1 eq 'pet' ? 'absent' : $2;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    elsif (
 | 
					    elsif (
 | 
				
			||||||
        ReadingsVal(
 | 
					        ::ReadingsVal(
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
 | 
					            $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
 | 
				
			||||||
            'homealoneType', '-' ) eq 'PET'
 | 
					            'homealoneType', '-' ) eq 'PET'
 | 
				
			||||||
      )
 | 
					      )
 | 
				
			||||||
@@ -196,7 +192,8 @@ sub getResidentsLastStatus {
 | 
				
			|||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $val =
 | 
					    my $val =
 | 
				
			||||||
      ReadingsVal( $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
 | 
					      ::ReadingsVal(
 | 
				
			||||||
 | 
					        $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
 | 
				
			||||||
        'lastState', 'none' );
 | 
					        'lastState', 'none' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ( $val =~ m{^(?:(.+)_)?(.+)$}xms ) {
 | 
					    if ( $val =~ m{^(?:(.+)_)?(.+)$}xms ) {
 | 
				
			||||||
@@ -204,7 +201,7 @@ sub getResidentsLastStatus {
 | 
				
			|||||||
        return $1 && $1 eq 'pet' ? 'absent' : $2;
 | 
					        return $1 && $1 eq 'pet' ? 'absent' : $2;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    elsif (
 | 
					    elsif (
 | 
				
			||||||
        ReadingsVal(
 | 
					        ::ReadingsVal(
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
 | 
					            $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
 | 
				
			||||||
            'lastHomealoneType', '-' ) eq 'PET'
 | 
					            'lastHomealoneType', '-' ) eq 'PET'
 | 
				
			||||||
      )
 | 
					      )
 | 
				
			||||||
@@ -223,7 +220,7 @@ sub getAutoShuttersControlShading {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    my $name = $self->{name};
 | 
					    my $name = $self->{name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return ReadingsVal( $name, 'controlShading', 'none' );
 | 
					    return ::ReadingsVal( $name, 'controlShading', 'none' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub getSelfDefense {
 | 
					sub getSelfDefense {
 | 
				
			||||||
@@ -231,7 +228,7 @@ sub getSelfDefense {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    my $name = $self->{name};
 | 
					    my $name = $self->{name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return ReadingsVal( $name, 'selfDefense', 'none' );
 | 
					    return ::ReadingsVal( $name, 'selfDefense', 'none' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub getAzimuth {
 | 
					sub getAzimuth {
 | 
				
			||||||
@@ -239,13 +236,13 @@ sub getAzimuth {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    my $azimuth;
 | 
					    my $azimuth;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $azimuth = ReadingsVal(
 | 
					    $azimuth = ::ReadingsVal(
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
 | 
					        $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
 | 
				
			||||||
        'azimuth', -1 )
 | 
					        'azimuth', -1 )
 | 
				
			||||||
      if (
 | 
					      if (
 | 
				
			||||||
        $defs{ $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice }
 | 
					        $defs{ $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice }
 | 
				
			||||||
        ->{TYPE} eq 'Twilight' );
 | 
					        ->{TYPE} eq 'Twilight' );
 | 
				
			||||||
    $azimuth = ReadingsVal(
 | 
					    $azimuth = ::ReadingsVal(
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
 | 
					        $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
 | 
				
			||||||
        'SunAz', -1 )
 | 
					        'SunAz', -1 )
 | 
				
			||||||
      if (
 | 
					      if (
 | 
				
			||||||
@@ -260,13 +257,13 @@ sub getElevation {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    my $elevation;
 | 
					    my $elevation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $elevation = ReadingsVal(
 | 
					    $elevation = ::ReadingsVal(
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
 | 
					        $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
 | 
				
			||||||
        'elevation', -1 )
 | 
					        'elevation', -1 )
 | 
				
			||||||
      if (
 | 
					      if (
 | 
				
			||||||
        $defs{ $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice }
 | 
					        $defs{ $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice }
 | 
				
			||||||
        ->{TYPE} eq 'Twilight' );
 | 
					        ->{TYPE} eq 'Twilight' );
 | 
				
			||||||
    $elevation = ReadingsVal(
 | 
					    $elevation = ::ReadingsVal(
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
 | 
					        $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
 | 
				
			||||||
        'SunAlt', -1 )
 | 
					        'SunAlt', -1 )
 | 
				
			||||||
      if (
 | 
					      if (
 | 
				
			||||||
@@ -281,7 +278,7 @@ sub getASCenable {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    my $name = $self->{name};
 | 
					    my $name = $self->{name};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return ReadingsVal( $name, 'ascEnable', 'none' );
 | 
					    return ::ReadingsVal( $name, 'ascEnable', 'none' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1;
 | 
					1;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
###############################################################################
 | 
					###############################################################################
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Developed with Kate
 | 
					# Developed with VSCodium and richterger perl plugin
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#  (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net)
 | 
					#  (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
 | 
				
			||||||
#  All rights reserved
 | 
					#  All rights reserved
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#   Special thanks goes to:
 | 
					#   Special thanks goes to:
 | 
				
			||||||
@@ -52,7 +52,9 @@ use FHEM::Automation::ShuttersControl::Shading qw (:ALL);
 | 
				
			|||||||
use FHEM::Automation::ShuttersControl::Rainprotection qw (:ALL);
 | 
					use FHEM::Automation::ShuttersControl::Rainprotection qw (:ALL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require Exporter;
 | 
					require Exporter;
 | 
				
			||||||
our @ISA       = qw(Exporter);
 | 
					use base qw(Exporter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# our @ISA       = qw(Exporter);
 | 
				
			||||||
our @EXPORT_OK = qw(
 | 
					our @EXPORT_OK = qw(
 | 
				
			||||||
  EventProcessingPartyMode
 | 
					  EventProcessingPartyMode
 | 
				
			||||||
  EventProcessingGeneral
 | 
					  EventProcessingGeneral
 | 
				
			||||||
@@ -70,21 +72,6 @@ our %EXPORT_TAGS = (
 | 
				
			|||||||
    ],
 | 
					    ],
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use GPUtils qw(GP_Import);
 | 
					 | 
				
			||||||
## Import der FHEM Funktionen
 | 
					 | 
				
			||||||
BEGIN {
 | 
					 | 
				
			||||||
    GP_Import(
 | 
					 | 
				
			||||||
        qw(
 | 
					 | 
				
			||||||
           Log3
 | 
					 | 
				
			||||||
           gettimeofday
 | 
					 | 
				
			||||||
           computeAlignTime
 | 
					 | 
				
			||||||
           CommandSet
 | 
					 | 
				
			||||||
           ReadingsVal
 | 
					 | 
				
			||||||
           RemoveInternalTimer
 | 
					 | 
				
			||||||
          )
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub EventProcessingGeneral {
 | 
					sub EventProcessingGeneral {
 | 
				
			||||||
    my $hash    = shift;
 | 
					    my $hash    = shift;
 | 
				
			||||||
    my $devname = shift;
 | 
					    my $devname = shift;
 | 
				
			||||||
@@ -94,8 +81,12 @@ sub EventProcessingGeneral {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if ( defined($devname) && ($devname) )
 | 
					    if ( defined($devname) && ($devname) )
 | 
				
			||||||
    { # es wird lediglich der Devicename der Funktion mitgegeben wenn es sich nicht um global handelt daher hier die Unterscheidung
 | 
					    { # es wird lediglich der Devicename der Funktion mitgegeben wenn es sich nicht um global handelt daher hier die Unterscheidung
 | 
				
			||||||
        my $windReading = $FHEM::Automation::ShuttersControl::ascDev->getWindSensorReading // 'none';
 | 
					        my $windReading =
 | 
				
			||||||
        my $rainReading = $FHEM::Automation::ShuttersControl::ascDev->getRainSensorReading // 'none';
 | 
					          $FHEM::Automation::ShuttersControl::ascDev->getWindSensorReading
 | 
				
			||||||
 | 
					          // 'none';
 | 
				
			||||||
 | 
					        my $rainReading =
 | 
				
			||||||
 | 
					          $FHEM::Automation::ShuttersControl::ascDev->getRainSensorReading
 | 
				
			||||||
 | 
					          // 'none';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        while ( my ( $device, $deviceAttr ) =
 | 
					        while ( my ( $device, $deviceAttr ) =
 | 
				
			||||||
            each %{ $hash->{monitoredDevs}{$devname} } )
 | 
					            each %{ $hash->{monitoredDevs}{$devname} } )
 | 
				
			||||||
@@ -122,13 +113,16 @@ sub EventProcessingGeneral {
 | 
				
			|||||||
            EventProcessingExternalTriggerDevice( $hash, $device, $events )
 | 
					            EventProcessingExternalTriggerDevice( $hash, $device, $events )
 | 
				
			||||||
              if ( $deviceAttr eq 'ASC_ExternalTrigger' );
 | 
					              if ( $deviceAttr eq 'ASC_ExternalTrigger' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::shutters->setShuttersDev($device)
 | 
					            $FHEM::Automation::ShuttersControl::shutters->setShuttersDev(
 | 
				
			||||||
 | 
					                $device)
 | 
				
			||||||
              if ( $deviceAttr eq 'ASC_BrightnessSensor' );
 | 
					              if ( $deviceAttr eq 'ASC_BrightnessSensor' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (
 | 
					            if (
 | 
				
			||||||
                $deviceAttr eq 'ASC_BrightnessSensor'
 | 
					                $deviceAttr eq 'ASC_BrightnessSensor'
 | 
				
			||||||
                && (   $FHEM::Automation::ShuttersControl::shutters->getDown eq 'brightness'
 | 
					                && ( $FHEM::Automation::ShuttersControl::shutters->getDown eq
 | 
				
			||||||
                    || $FHEM::Automation::ShuttersControl::shutters->getUp eq 'brightness' )
 | 
					                    'brightness'
 | 
				
			||||||
 | 
					                    || $FHEM::Automation::ShuttersControl::shutters->getUp eq
 | 
				
			||||||
 | 
					                    'brightness' )
 | 
				
			||||||
              )
 | 
					              )
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                EventProcessingBrightness( $hash, $device, $events );
 | 
					                EventProcessingBrightness( $hash, $device, $events );
 | 
				
			||||||
@@ -147,8 +141,9 @@ sub EventProcessingGeneral {
 | 
				
			|||||||
             \s(.*)$}xms
 | 
					             \s(.*)$}xms
 | 
				
			||||||
          )
 | 
					          )
 | 
				
			||||||
        {     # wurde den Attributen unserer Rolläden ein Wert zugewiesen ?
 | 
					        {     # wurde den Attributen unserer Rolläden ein Wert zugewiesen ?
 | 
				
			||||||
            FHEM::Automation::ShuttersControl::AddNotifyDev( $hash, $3, $1, $2 ) if ( $3 ne 'none' );
 | 
					            FHEM::Automation::ShuttersControl::AddNotifyDev( $hash, $3, $1, $2 )
 | 
				
			||||||
            Log3( $name, 4,
 | 
					              if ( $3 ne 'none' );
 | 
				
			||||||
 | 
					            ::Log3( $name, 4,
 | 
				
			||||||
                "AutoShuttersControl ($name) - EventProcessing: ATTR" );
 | 
					                "AutoShuttersControl ($name) - EventProcessing: ATTR" );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        elsif (
 | 
					        elsif (
 | 
				
			||||||
@@ -160,7 +155,7 @@ sub EventProcessingGeneral {
 | 
				
			|||||||
                $}xms
 | 
					                $}xms
 | 
				
			||||||
          )
 | 
					          )
 | 
				
			||||||
        {    # wurde das Attribut unserer Rolläden gelöscht ?
 | 
					        {    # wurde das Attribut unserer Rolläden gelöscht ?
 | 
				
			||||||
            Log3( $name, 4,
 | 
					            ::Log3( $name, 4,
 | 
				
			||||||
                "AutoShuttersControl ($name) - EventProcessing: DELETEATTR" );
 | 
					                "AutoShuttersControl ($name) - EventProcessing: DELETEATTR" );
 | 
				
			||||||
            FHEM::Automation::ShuttersControl::DeleteNotifyDev( $hash, $1, $2 );
 | 
					            FHEM::Automation::ShuttersControl::DeleteNotifyDev( $hash, $1, $2 );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -175,11 +170,13 @@ sub EventProcessingGeneral {
 | 
				
			|||||||
                (.*)?}xms
 | 
					                (.*)?}xms
 | 
				
			||||||
          )
 | 
					          )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            FHEM::Automation::ShuttersControl::CreateSunRiseSetShuttersTimer( $hash, $2 )
 | 
					            FHEM::Automation::ShuttersControl::CreateSunRiseSetShuttersTimer(
 | 
				
			||||||
 | 
					                $hash, $2 )
 | 
				
			||||||
              if (
 | 
					              if (
 | 
				
			||||||
                $3 ne 'ASC_Time_Up_WE_Holiday'
 | 
					                $3 ne 'ASC_Time_Up_WE_Holiday'
 | 
				
			||||||
                || (   $3 eq 'ASC_Time_Up_WE_Holiday'
 | 
					                || (   $3 eq 'ASC_Time_Up_WE_Holiday'
 | 
				
			||||||
                    && $FHEM::Automation::ShuttersControl::ascDev->getSunriseTimeWeHoliday eq 'on' )
 | 
					                    && $FHEM::Automation::ShuttersControl::ascDev
 | 
				
			||||||
 | 
					                    ->getSunriseTimeWeHoliday eq 'on' )
 | 
				
			||||||
              );
 | 
					              );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        elsif (
 | 
					        elsif (
 | 
				
			||||||
@@ -189,7 +186,8 @@ sub EventProcessingGeneral {
 | 
				
			|||||||
                (.*)?}xms
 | 
					                (.*)?}xms
 | 
				
			||||||
          )
 | 
					          )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            FHEM::Automation::ShuttersControl::RenewSunRiseSetShuttersTimer($hash);
 | 
					            FHEM::Automation::ShuttersControl::RenewSunRiseSetShuttersTimer(
 | 
				
			||||||
 | 
					                $hash);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        elsif (
 | 
					        elsif (
 | 
				
			||||||
            $events =~ m{^(DELETEATTR|ATTR)
 | 
					            $events =~ m{^(DELETEATTR|ATTR)
 | 
				
			||||||
@@ -197,7 +195,8 @@ sub EventProcessingGeneral {
 | 
				
			|||||||
                (.*)?}xms
 | 
					                (.*)?}xms
 | 
				
			||||||
          )
 | 
					          )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::shutters->deleteShadingStateChangeSunny;
 | 
					            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
 | 
					              ->deleteShadingStateChangeSunny;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (
 | 
					        if (
 | 
				
			||||||
@@ -219,11 +218,13 @@ m{^(DELETEATTR|ATTR)         #global ATTR myASC ASC_tempSensor Cellar
 | 
				
			|||||||
                    attrEvent      => 1,
 | 
					                    attrEvent      => 1,
 | 
				
			||||||
                );
 | 
					                );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                FHEM::Automation::ShuttersControl::Shading::_CheckShuttersConditionsForShadingFn(\%funcHash);
 | 
					                FHEM::Automation::ShuttersControl::Shading::_CheckShuttersConditionsForShadingFn(
 | 
				
			||||||
 | 
					                    \%funcHash );
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else {
 | 
					            else {
 | 
				
			||||||
                CommandSet( undef, $name . ' controlShading on' )
 | 
					                ::CommandSet( undef, $name . ' controlShading on' )
 | 
				
			||||||
                if ( ReadingsVal( $name, 'controlShading', 'off' ) ne 'off' );
 | 
					                  if (
 | 
				
			||||||
 | 
					                    ::ReadingsVal( $name, 'controlShading', 'off' ) ne 'off' );
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -243,9 +244,17 @@ sub EventProcessingWindowRec {
 | 
				
			|||||||
      $FHEM::Automation::ShuttersControl::shutters->getWinDevReading;
 | 
					      $FHEM::Automation::ShuttersControl::shutters->getWinDevReading;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ( $events =~
 | 
					    if ( $events =~
 | 
				
			||||||
        m{.*$reading:.*?([Oo]pen(?>ed)?|[Cc]losed?|tilt(?>ed)?|true|false)}xms
 | 
					        m{.*$reading:.*?([Oo]pen(?>ed)?|[Cc]losed?|tilt(?>ed)?|true|false)}xms )
 | 
				
			||||||
        && IsAfterShuttersManualBlocking($shuttersDev) )
 | 
					 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					          if (
 | 
				
			||||||
 | 
					            !IsAfterShuttersManualBlocking($shuttersDev)
 | 
				
			||||||
 | 
					            && ( $FHEM::Automation::ShuttersControl::shutters->getLockOut eq
 | 
				
			||||||
 | 
					                'off'
 | 
				
			||||||
 | 
					                || $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
 | 
					                ->getShuttersPlace ne 'terrace' )
 | 
				
			||||||
 | 
					          );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        my $match = $1;
 | 
					        my $match = $1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        FHEM::Automation::ShuttersControl::ASC_Debug(
 | 
					        FHEM::Automation::ShuttersControl::ASC_Debug(
 | 
				
			||||||
@@ -260,11 +269,6 @@ sub EventProcessingWindowRec {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::shutters->setShuttersDev(
 | 
					        $FHEM::Automation::ShuttersControl::shutters->setShuttersDev(
 | 
				
			||||||
            $shuttersDev);
 | 
					            $shuttersDev);
 | 
				
			||||||
        my $homemode =
 | 
					 | 
				
			||||||
          $FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus;
 | 
					 | 
				
			||||||
        $homemode =
 | 
					 | 
				
			||||||
          $FHEM::Automation::ShuttersControl::ascDev->getResidentsStatus
 | 
					 | 
				
			||||||
          if ( $homemode eq 'none' );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #### Hardware Lock der Rollläden
 | 
					        #### Hardware Lock der Rollläden
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::shutters->setHardLockOut('off')
 | 
					        $FHEM::Automation::ShuttersControl::shutters->setHardLockOut('off')
 | 
				
			||||||
@@ -272,9 +276,25 @@ sub EventProcessingWindowRec {
 | 
				
			|||||||
            && $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace
 | 
					            && $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace
 | 
				
			||||||
            eq 'terrace' );
 | 
					            eq 'terrace' );
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::shutters->setHardLockOut('on')
 | 
					        $FHEM::Automation::ShuttersControl::shutters->setHardLockOut('on')
 | 
				
			||||||
          if ( $match =~ m{[Oo]pen|false}xms
 | 
					          if (
 | 
				
			||||||
 | 
					               $match =~ m{[Oo]pen|false}xms
 | 
				
			||||||
            && $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace
 | 
					            && $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace
 | 
				
			||||||
            eq 'terrace' );
 | 
					            eq 'terrace'
 | 
				
			||||||
 | 
					            && ( $FHEM::Automation::ShuttersControl::shutters->getStatus ==
 | 
				
			||||||
 | 
					                   $FHEM::Automation::ShuttersControl::shutters->getOpenPos
 | 
				
			||||||
 | 
					                || $FHEM::Automation::ShuttersControl::shutters->getStatus ==
 | 
				
			||||||
 | 
					                $FHEM::Automation::ShuttersControl::shutters->getComfortOpenPos
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					          );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					          if ( !IsAfterShuttersManualBlocking($shuttersDev) );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        my $homemode =
 | 
				
			||||||
 | 
					          $FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus;
 | 
				
			||||||
 | 
					        $homemode =
 | 
				
			||||||
 | 
					          $FHEM::Automation::ShuttersControl::ascDev->getResidentsStatus
 | 
				
			||||||
 | 
					          if ( $homemode eq 'none' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        FHEM::Automation::ShuttersControl::ASC_Debug(
 | 
					        FHEM::Automation::ShuttersControl::ASC_Debug(
 | 
				
			||||||
                'EventProcessingWindowRec: '
 | 
					                'EventProcessingWindowRec: '
 | 
				
			||||||
@@ -303,30 +323,29 @@ sub EventProcessingWindowRec {
 | 
				
			|||||||
                $FHEM::Automation::ShuttersControl::shutters->getComfortOpenPos
 | 
					                $FHEM::Automation::ShuttersControl::shutters->getComfortOpenPos
 | 
				
			||||||
                || ( $FHEM::Automation::ShuttersControl::shutters->getStatus ==
 | 
					                || ( $FHEM::Automation::ShuttersControl::shutters->getStatus ==
 | 
				
			||||||
                       $FHEM::Automation::ShuttersControl::shutters->getOpenPos
 | 
					                       $FHEM::Automation::ShuttersControl::shutters->getOpenPos
 | 
				
			||||||
                    && $FHEM::Automation::ShuttersControl::shutters->getLastDrive
 | 
					                    && $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                      eq 'ventilate - window open'
 | 
					                    ->getLastDrive eq 'ventilate - window open'
 | 
				
			||||||
                    && $FHEM::Automation::ShuttersControl::shutters->getSubTyp
 | 
					                    && $FHEM::Automation::ShuttersControl::shutters->getSubTyp
 | 
				
			||||||
                    eq 'twostate'
 | 
					                    eq 'twostate'
 | 
				
			||||||
                    && $FHEM::Automation::ShuttersControl::shutters->getVentilateOpen
 | 
					                    && $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                      eq 'on' )
 | 
					                    ->getVentilateOpen eq 'on' )
 | 
				
			||||||
                || ( $FHEM::Automation::ShuttersControl::shutters->getStatus ==
 | 
					                || ( $FHEM::Automation::ShuttersControl::shutters->getStatus ==
 | 
				
			||||||
                    $FHEM::Automation::ShuttersControl::shutters
 | 
					                    $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                    ->getPrivacyDownPos
 | 
					                    ->getPrivacyDownPos
 | 
				
			||||||
                    && $FHEM::Automation::ShuttersControl::shutters
 | 
					                    && $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                    ->getPrivacyDownStatus != 2
 | 
					                    ->getPrivacyDownStatus != 2
 | 
				
			||||||
                    && !$FHEM::Automation::ShuttersControl::shutters->getIsDay )
 | 
					                    && !$FHEM::Automation::ShuttersControl::shutters->getIsDay )
 | 
				
			||||||
                || ( $FHEM::Automation::ShuttersControl::shutters->getStatus ==
 | 
					                || (
 | 
				
			||||||
                      $FHEM::Automation::ShuttersControl::shutters
 | 
					                    $FHEM::Automation::ShuttersControl::shutters->getStatus ==
 | 
				
			||||||
                         ->getOpenPos
 | 
					                    $FHEM::Automation::ShuttersControl::shutters->getOpenPos
 | 
				
			||||||
                    && ( $FHEM::Automation::ShuttersControl::shutters
 | 
					                    && ( $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                        ->getLockOut ne 'off'
 | 
					                        ->getLockOut ne 'off'
 | 
				
			||||||
                        || $FHEM::Automation::ShuttersControl::shutters
 | 
					                        || $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                             ->getShuttersPlace eq 'terrace'
 | 
					                        ->getShuttersPlace eq 'terrace' )
 | 
				
			||||||
 | 
					                    && !$FHEM::Automation::ShuttersControl::shutters->getIsDay
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
                    && !$FHEM::Automation::ShuttersControl::shutters->getIsDay )
 | 
					 | 
				
			||||||
                || ( $FHEM::Automation::ShuttersControl::shutters->getStatus ==
 | 
					                || ( $FHEM::Automation::ShuttersControl::shutters->getStatus ==
 | 
				
			||||||
                      $FHEM::Automation::ShuttersControl::shutters
 | 
					                       $FHEM::Automation::ShuttersControl::shutters->getOpenPos
 | 
				
			||||||
                         ->getOpenPos
 | 
					 | 
				
			||||||
                    && $FHEM::Automation::ShuttersControl::shutters
 | 
					                    && $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                    ->getDelayCmd ne 'none'
 | 
					                    ->getDelayCmd ne 'none'
 | 
				
			||||||
                    && $FHEM::Automation::ShuttersControl::shutters
 | 
					                    && $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -371,7 +390,8 @@ sub EventProcessingWindowRec {
 | 
				
			|||||||
                elsif (
 | 
					                elsif (
 | 
				
			||||||
                    !$FHEM::Automation::ShuttersControl::shutters
 | 
					                    !$FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                    ->getIfInShading
 | 
					                    ->getIfInShading
 | 
				
			||||||
                    && ( $FHEM::Automation::ShuttersControl::shutters->getStatus
 | 
					                    && (
 | 
				
			||||||
 | 
					                        $FHEM::Automation::ShuttersControl::shutters->getStatus
 | 
				
			||||||
                        != $FHEM::Automation::ShuttersControl::shutters
 | 
					                        != $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                        ->getOpenPos
 | 
					                        ->getOpenPos
 | 
				
			||||||
                        || $FHEM::Automation::ShuttersControl::shutters
 | 
					                        || $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -412,12 +432,14 @@ sub EventProcessingWindowRec {
 | 
				
			|||||||
                                  ->getShuttersPlace eq 'terrace'
 | 
					                                  ->getShuttersPlace eq 'terrace'
 | 
				
			||||||
                                ? $FHEM::Automation::ShuttersControl::shutters
 | 
					                                ? $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                                  ->getDelayCmd
 | 
					                                  ->getDelayCmd
 | 
				
			||||||
                                : ( $FHEM::Automation::ShuttersControl::shutters
 | 
					                                : (
 | 
				
			||||||
 | 
					                                    $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                                      ->getVentilatePosAfterDayClosed eq 'open'
 | 
					                                      ->getVentilatePosAfterDayClosed eq 'open'
 | 
				
			||||||
                                    ? $FHEM::Automation::ShuttersControl::shutters
 | 
					                                    ? $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                                      ->getOpenPos
 | 
					                                      ->getOpenPos
 | 
				
			||||||
                                    : $FHEM::Automation::ShuttersControl::shutters
 | 
					                                    : $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                                    ->getLastManPos )
 | 
					                                      ->getLastManPos
 | 
				
			||||||
 | 
					                                )
 | 
				
			||||||
                            )
 | 
					                            )
 | 
				
			||||||
                          );
 | 
					                          );
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
@@ -425,13 +447,15 @@ sub EventProcessingWindowRec {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            elsif (
 | 
					            elsif (
 | 
				
			||||||
                  !$FHEM::Automation::ShuttersControl::shutters->getIsDay
 | 
					                  !$FHEM::Automation::ShuttersControl::shutters->getIsDay
 | 
				
			||||||
                && $FHEM::Automation::ShuttersControl::shutters->getModeDown eq 'roommate'
 | 
					                && $FHEM::Automation::ShuttersControl::shutters->getModeDown eq
 | 
				
			||||||
                && ( $FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus eq 'home'
 | 
					                'roommate'
 | 
				
			||||||
                  || $FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus eq 'awoken' )
 | 
					                && ( $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
 | 
					                    ->getRoommatesStatus eq 'home'
 | 
				
			||||||
 | 
					                    || $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
 | 
					                    ->getRoommatesStatus eq 'awoken' )
 | 
				
			||||||
              )
 | 
					              )
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                $FHEM::Automation::ShuttersControl::shutters
 | 
					                $FHEM::Automation::ShuttersControl::shutters->setDriveCmd(
 | 
				
			||||||
                          ->setDriveCmd(
 | 
					 | 
				
			||||||
                    (
 | 
					                    (
 | 
				
			||||||
                        $FHEM::Automation::ShuttersControl::shutters
 | 
					                        $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                          ->getVentilatePosAfterDayClosed eq 'open'
 | 
					                          ->getVentilatePosAfterDayClosed eq 'open'
 | 
				
			||||||
@@ -495,9 +519,16 @@ sub EventProcessingWindowRec {
 | 
				
			|||||||
            )
 | 
					            )
 | 
				
			||||||
            && $FHEM::Automation::ShuttersControl::shutters->getVentilateOpen
 | 
					            && $FHEM::Automation::ShuttersControl::shutters->getVentilateOpen
 | 
				
			||||||
            eq 'on'
 | 
					            eq 'on'
 | 
				
			||||||
            && $FHEM::Automation::ShuttersControl::shutters
 | 
					            && (
 | 
				
			||||||
 | 
					                $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                ->getQueryShuttersPos(
 | 
					                ->getQueryShuttersPos(
 | 
				
			||||||
                $FHEM::Automation::ShuttersControl::shutters->getVentilatePos
 | 
					                    $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
 | 
					                      ->getVentilatePos
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
 | 
					                || ( $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
 | 
					                    ->getShuttersPlace eq 'terrace'
 | 
				
			||||||
 | 
					                    && $FHEM::Automation::ShuttersControl::shutters->getSubTyp
 | 
				
			||||||
 | 
					                    eq 'twostate' )
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
          )
 | 
					          )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@@ -528,7 +559,7 @@ sub EventProcessingWindowRec {
 | 
				
			|||||||
            if (
 | 
					            if (
 | 
				
			||||||
                $FHEM::Automation::ShuttersControl::ascDev
 | 
					                $FHEM::Automation::ShuttersControl::ascDev
 | 
				
			||||||
                ->getAutoShuttersControlComfort eq 'on'
 | 
					                ->getAutoShuttersControlComfort eq 'on'
 | 
				
			||||||
                and $FHEM::Automation::ShuttersControl::shutters
 | 
					                && $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                ->getQueryShuttersPos(
 | 
					                ->getQueryShuttersPos(
 | 
				
			||||||
                    $FHEM::Automation::ShuttersControl::shutters
 | 
					                    $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                      ->getComfortOpenPos
 | 
					                      ->getComfortOpenPos
 | 
				
			||||||
@@ -580,14 +611,15 @@ sub EventProcessingRoommate {
 | 
				
			|||||||
      $FHEM::Automation::ShuttersControl::shutters->getRoommatesReading;
 | 
					      $FHEM::Automation::ShuttersControl::shutters->getRoommatesReading;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ( $events =~ m{$reading:\s(absent|gotosleep|asleep|awoken|home)}xms ) {
 | 
					    if ( $events =~ m{$reading:\s(absent|gotosleep|asleep|awoken|home)}xms ) {
 | 
				
			||||||
        Log3( $name, 4,
 | 
					        ::Log3( $name, 4,
 | 
				
			||||||
            "AutoShuttersControl ($name) - EventProcessingRoommate: "
 | 
					            "AutoShuttersControl ($name) - EventProcessingRoommate: "
 | 
				
			||||||
              . $FHEM::Automation::ShuttersControl::shutters
 | 
					              . $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
              ->getRoommatesReading );
 | 
					              ->getRoommatesReading );
 | 
				
			||||||
        Log3( $name, 4,
 | 
					        ::Log3( $name, 4,
 | 
				
			||||||
"AutoShuttersControl ($name) - EventProcessingRoommate: $shuttersDev und Events $events"
 | 
					"AutoShuttersControl ($name) - EventProcessingRoommate: $shuttersDev und Events $events"
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        my $event     = $1;
 | 
				
			||||||
        my $getModeUp = $FHEM::Automation::ShuttersControl::shutters->getModeUp;
 | 
					        my $getModeUp = $FHEM::Automation::ShuttersControl::shutters->getModeUp;
 | 
				
			||||||
        my $getModeDown =
 | 
					        my $getModeDown =
 | 
				
			||||||
          $FHEM::Automation::ShuttersControl::shutters->getModeDown;
 | 
					          $FHEM::Automation::ShuttersControl::shutters->getModeDown;
 | 
				
			||||||
@@ -595,21 +627,30 @@ sub EventProcessingRoommate {
 | 
				
			|||||||
          $FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus;
 | 
					          $FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus;
 | 
				
			||||||
        my $getRoommatesLastStatus =
 | 
					        my $getRoommatesLastStatus =
 | 
				
			||||||
          $FHEM::Automation::ShuttersControl::shutters->getRoommatesLastStatus;
 | 
					          $FHEM::Automation::ShuttersControl::shutters->getRoommatesLastStatus;
 | 
				
			||||||
        my $event    = $1;
 | 
					        my $getUp    = $FHEM::Automation::ShuttersControl::shutters->getUp;
 | 
				
			||||||
        my $posValue = $FHEM::Automation::ShuttersControl::shutters->getStatus;
 | 
					        my $getDown  = $FHEM::Automation::ShuttersControl::shutters->getDown;
 | 
				
			||||||
 | 
					        my $getIsDay = $FHEM::Automation::ShuttersControl::shutters->getIsDay;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        my $posValue = $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
 | 
					          ->getStatus;    # !!! ACHTUNG!!!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (
 | 
					        if (
 | 
				
			||||||
            ( $event eq 'home' || $event eq 'awoken' )
 | 
					            ( $event eq 'home' || $event eq 'awoken' )
 | 
				
			||||||
            && (   $getRoommatesStatus eq 'home'
 | 
					            && (   $getRoommatesStatus eq 'home'
 | 
				
			||||||
                || $getRoommatesStatus eq 'awoken' )
 | 
					                || $getRoommatesStatus eq 'awoken' )
 | 
				
			||||||
            && ( $FHEM::Automation::ShuttersControl::ascDev
 | 
					            && (
 | 
				
			||||||
 | 
					                $FHEM::Automation::ShuttersControl::ascDev
 | 
				
			||||||
                ->getAutoShuttersControlMorning eq 'on'
 | 
					                ->getAutoShuttersControlMorning eq 'on'
 | 
				
			||||||
                || $FHEM::Automation::ShuttersControl::shutters->getUp eq
 | 
					                || (
 | 
				
			||||||
                'roommate' )
 | 
					                    $getUp eq 'roommate'
 | 
				
			||||||
 | 
					                    && (   $getRoommatesLastStatus eq 'asleep'
 | 
				
			||||||
 | 
					                        || $getRoommatesLastStatus ne 'awoken' )
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
            && IsAfterShuttersManualBlocking($shuttersDev)
 | 
					            && IsAfterShuttersManualBlocking($shuttersDev)
 | 
				
			||||||
          )
 | 
					          )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Log3( $name, 4,
 | 
					            ::Log3( $name, 4,
 | 
				
			||||||
"AutoShuttersControl ($name) - EventProcessingRoommate_1: $shuttersDev und Events $events"
 | 
					"AutoShuttersControl ($name) - EventProcessingRoommate_1: $shuttersDev und Events $events"
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
            if (
 | 
					            if (
 | 
				
			||||||
@@ -618,26 +659,24 @@ sub EventProcessingRoommate {
 | 
				
			|||||||
                        $getRoommatesLastStatus eq 'asleep'
 | 
					                        $getRoommatesLastStatus eq 'asleep'
 | 
				
			||||||
                        && ( $FHEM::Automation::ShuttersControl::shutters
 | 
					                        && ( $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                            ->getModeUp eq 'always'
 | 
					                            ->getModeUp eq 'always'
 | 
				
			||||||
                            or $FHEM::Automation::ShuttersControl::shutters
 | 
					                            || $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                            ->getModeUp eq $event )
 | 
					                            ->getModeUp eq $event )
 | 
				
			||||||
                    )
 | 
					                    )
 | 
				
			||||||
                    || (
 | 
					                    || (
 | 
				
			||||||
                        $getRoommatesLastStatus eq 'awoken'
 | 
					                        $getRoommatesLastStatus eq 'awoken'
 | 
				
			||||||
                        && ( $FHEM::Automation::ShuttersControl::shutters
 | 
					                        && ( $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                            ->getModeUp eq 'always'
 | 
					                            ->getModeUp eq 'always'
 | 
				
			||||||
                            or $FHEM::Automation::ShuttersControl::shutters
 | 
					                            || $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                            ->getModeUp eq $event )
 | 
					                            ->getModeUp eq $event )
 | 
				
			||||||
                    )
 | 
					                    )
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
                && (   $FHEM::Automation::ShuttersControl::shutters->getIsDay
 | 
					                && (   $getIsDay
 | 
				
			||||||
                    || $FHEM::Automation::ShuttersControl::shutters->getUp eq
 | 
					                    || $getUp eq 'roommate' )
 | 
				
			||||||
                    'roommate' )
 | 
					 | 
				
			||||||
                && ( IsAfterShuttersTimeBlocking($shuttersDev)
 | 
					                && ( IsAfterShuttersTimeBlocking($shuttersDev)
 | 
				
			||||||
                    || $FHEM::Automation::ShuttersControl::shutters->getUp eq
 | 
					                    || $getUp eq 'roommate' )
 | 
				
			||||||
                    'roommate' )
 | 
					 | 
				
			||||||
              )
 | 
					              )
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                Log3( $name, 4,
 | 
					                ::Log3( $name, 4,
 | 
				
			||||||
"AutoShuttersControl ($name) - EventProcessingRoommate_2: $shuttersDev und Events $events"
 | 
					"AutoShuttersControl ($name) - EventProcessingRoommate_2: $shuttersDev und Events $events"
 | 
				
			||||||
                );
 | 
					                );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -675,7 +714,7 @@ sub EventProcessingRoommate {
 | 
				
			|||||||
              )
 | 
					              )
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                if (
 | 
					                if (
 | 
				
			||||||
                       $FHEM::Automation::ShuttersControl::shutters->getIsDay
 | 
					                       $getIsDay
 | 
				
			||||||
                    && $FHEM::Automation::ShuttersControl::shutters
 | 
					                    && $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                    ->getIfInShading
 | 
					                    ->getIfInShading
 | 
				
			||||||
                    && $FHEM::Automation::ShuttersControl::shutters->getStatus
 | 
					                    && $FHEM::Automation::ShuttersControl::shutters->getStatus
 | 
				
			||||||
@@ -695,12 +734,11 @@ sub EventProcessingRoommate {
 | 
				
			|||||||
                    ShadingProcessingDriveCommand( $hash, $shuttersDev, 1 );
 | 
					                    ShadingProcessingDriveCommand( $hash, $shuttersDev, 1 );
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                elsif (
 | 
					                elsif (
 | 
				
			||||||
                       !$FHEM::Automation::ShuttersControl::shutters->getIsDay
 | 
					                       !$getIsDay
 | 
				
			||||||
                    && IsAfterShuttersTimeBlocking($shuttersDev)
 | 
					                    && IsAfterShuttersTimeBlocking($shuttersDev)
 | 
				
			||||||
                    && (   $getModeDown eq 'home'
 | 
					                    && (   $getModeDown eq 'home'
 | 
				
			||||||
                        || $getModeDown eq 'always' )
 | 
					                        || $getModeDown eq 'always' )
 | 
				
			||||||
                    && $FHEM::Automation::ShuttersControl::shutters->getDown ne
 | 
					                    && $getDown ne 'roommate'
 | 
				
			||||||
                    'roommate'
 | 
					 | 
				
			||||||
                  )
 | 
					                  )
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
 | 
					                    $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
 | 
				
			||||||
@@ -738,11 +776,7 @@ sub EventProcessingRoommate {
 | 
				
			|||||||
                        $hash, $shuttersDev, $posValue );
 | 
					                        $hash, $shuttersDev, $posValue );
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                elsif (
 | 
					                elsif (
 | 
				
			||||||
                    (
 | 
					                       ( $getIsDay || $getUp eq 'roommate' )
 | 
				
			||||||
                        $FHEM::Automation::ShuttersControl::shutters->getIsDay
 | 
					 | 
				
			||||||
                        || $FHEM::Automation::ShuttersControl::shutters->getUp
 | 
					 | 
				
			||||||
                        eq 'roommate'
 | 
					 | 
				
			||||||
                    )
 | 
					 | 
				
			||||||
                    && IsAfterShuttersTimeBlocking($shuttersDev)
 | 
					                    && IsAfterShuttersTimeBlocking($shuttersDev)
 | 
				
			||||||
                    && (   $getModeUp eq 'home'
 | 
					                    && (   $getModeUp eq 'home'
 | 
				
			||||||
                        || $getModeUp eq 'always' )
 | 
					                        || $getModeUp eq 'always' )
 | 
				
			||||||
@@ -824,11 +858,9 @@ sub EventProcessingRoommate {
 | 
				
			|||||||
            'absent'
 | 
					            'absent'
 | 
				
			||||||
            && ( $FHEM::Automation::ShuttersControl::ascDev
 | 
					            && ( $FHEM::Automation::ShuttersControl::ascDev
 | 
				
			||||||
                ->getAutoShuttersControlEvening eq 'on'
 | 
					                ->getAutoShuttersControlEvening eq 'on'
 | 
				
			||||||
                || $FHEM::Automation::ShuttersControl::shutters->getDown eq
 | 
					                || $getDown eq 'roommate' )
 | 
				
			||||||
                'roommate' )
 | 
					 | 
				
			||||||
            && ( IsAfterShuttersManualBlocking($shuttersDev)
 | 
					            && ( IsAfterShuttersManualBlocking($shuttersDev)
 | 
				
			||||||
                || $FHEM::Automation::ShuttersControl::shutters->getDown eq
 | 
					                || $getDown eq 'roommate' )
 | 
				
			||||||
                'roommate' )
 | 
					 | 
				
			||||||
          )
 | 
					          )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
 | 
					            $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
 | 
				
			||||||
@@ -858,9 +890,8 @@ sub EventProcessingRoommate {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        elsif (
 | 
					        elsif (
 | 
				
			||||||
            $event eq 'absent'
 | 
					            $event eq 'absent'
 | 
				
			||||||
            && (  !$FHEM::Automation::ShuttersControl::shutters->getIsDay
 | 
					            && (  !$getIsDay
 | 
				
			||||||
                || $FHEM::Automation::ShuttersControl::shutters->getDown eq
 | 
					                || $getDown eq 'roommate'
 | 
				
			||||||
                'roommate'
 | 
					 | 
				
			||||||
                || $FHEM::Automation::ShuttersControl::shutters->getShadingMode
 | 
					                || $FHEM::Automation::ShuttersControl::shutters->getShadingMode
 | 
				
			||||||
                eq 'absent'
 | 
					                eq 'absent'
 | 
				
			||||||
                || $FHEM::Automation::ShuttersControl::shutters->getModeUp eq
 | 
					                || $FHEM::Automation::ShuttersControl::shutters->getModeUp eq
 | 
				
			||||||
@@ -869,16 +900,12 @@ sub EventProcessingRoommate {
 | 
				
			|||||||
                'absent' )
 | 
					                'absent' )
 | 
				
			||||||
          )
 | 
					          )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Log3( $name, 4,
 | 
					            ::Log3( $name, 4,
 | 
				
			||||||
"AutoShuttersControl ($name) - EventProcessingRoommate absent: $shuttersDev"
 | 
					"AutoShuttersControl ($name) - EventProcessingRoommate absent: $shuttersDev"
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (
 | 
					            if (
 | 
				
			||||||
                (
 | 
					                   $getIsDay
 | 
				
			||||||
                       $FHEM::Automation::ShuttersControl::shutters->getIsDay
 | 
					 | 
				
			||||||
                    || $FHEM::Automation::ShuttersControl::shutters->getUp eq
 | 
					 | 
				
			||||||
                    'roommate'
 | 
					 | 
				
			||||||
                )
 | 
					 | 
				
			||||||
                && $FHEM::Automation::ShuttersControl::shutters->getIfInShading
 | 
					                && $FHEM::Automation::ShuttersControl::shutters->getIfInShading
 | 
				
			||||||
                && !$FHEM::Automation::ShuttersControl::shutters
 | 
					                && !$FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                ->getQueryShuttersPos(
 | 
					                ->getQueryShuttersPos(
 | 
				
			||||||
@@ -888,7 +915,7 @@ sub EventProcessingRoommate {
 | 
				
			|||||||
                eq 'absent'
 | 
					                eq 'absent'
 | 
				
			||||||
              )
 | 
					              )
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                Log3( $name, 4,
 | 
					                ::Log3( $name, 4,
 | 
				
			||||||
"AutoShuttersControl ($name) - EventProcessingRoommate Shading: $shuttersDev"
 | 
					"AutoShuttersControl ($name) - EventProcessingRoommate Shading: $shuttersDev"
 | 
				
			||||||
                );
 | 
					                );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -900,17 +927,11 @@ sub EventProcessingRoommate {
 | 
				
			|||||||
                    $FHEM::Automation::ShuttersControl::shutters->getShadingPos
 | 
					                    $FHEM::Automation::ShuttersControl::shutters->getShadingPos
 | 
				
			||||||
                );
 | 
					                );
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            elsif (
 | 
					            elsif (( !$getIsDay || $getDown eq 'roommate' )
 | 
				
			||||||
                (
 | 
					 | 
				
			||||||
                      !$FHEM::Automation::ShuttersControl::shutters->getIsDay
 | 
					 | 
				
			||||||
                    || $FHEM::Automation::ShuttersControl::shutters->getDown eq
 | 
					 | 
				
			||||||
                    'roommate'
 | 
					 | 
				
			||||||
                )
 | 
					 | 
				
			||||||
                && $getModeDown eq 'absent'
 | 
					                && $getModeDown eq 'absent'
 | 
				
			||||||
                && $getRoommatesStatus eq 'absent'
 | 
					                && $getRoommatesStatus eq 'absent' )
 | 
				
			||||||
              )
 | 
					 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                Log3( $name, 4,
 | 
					                ::Log3( $name, 4,
 | 
				
			||||||
"AutoShuttersControl ($name) - EventProcessingRoommate Down: $shuttersDev"
 | 
					"AutoShuttersControl ($name) - EventProcessingRoommate Down: $shuttersDev"
 | 
				
			||||||
                );
 | 
					                );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -922,12 +943,12 @@ sub EventProcessingRoommate {
 | 
				
			|||||||
                    $FHEM::Automation::ShuttersControl::shutters->getClosedPos
 | 
					                    $FHEM::Automation::ShuttersControl::shutters->getClosedPos
 | 
				
			||||||
                );
 | 
					                );
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            elsif ($FHEM::Automation::ShuttersControl::shutters->getIsDay
 | 
					            elsif ($getIsDay
 | 
				
			||||||
                && $FHEM::Automation::ShuttersControl::shutters->getModeUp eq
 | 
					                && $FHEM::Automation::ShuttersControl::shutters->getModeUp eq
 | 
				
			||||||
                'absent'
 | 
					                'absent'
 | 
				
			||||||
                && $getRoommatesStatus eq 'absent' )
 | 
					                && $getRoommatesStatus eq 'absent' )
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                Log3( $name, 4,
 | 
					                ::Log3( $name, 4,
 | 
				
			||||||
"AutoShuttersControl ($name) - EventProcessingRoommate Up: $shuttersDev"
 | 
					"AutoShuttersControl ($name) - EventProcessingRoommate Up: $shuttersDev"
 | 
				
			||||||
                );
 | 
					                );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -938,7 +959,7 @@ sub EventProcessingRoommate {
 | 
				
			|||||||
                    $FHEM::Automation::ShuttersControl::shutters->getOpenPos );
 | 
					                    $FHEM::Automation::ShuttersControl::shutters->getOpenPos );
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Log3( $name, 4,
 | 
					            ::Log3( $name, 4,
 | 
				
			||||||
"AutoShuttersControl ($name) - EventProcessingRoommate NICHTS: $shuttersDev"
 | 
					"AutoShuttersControl ($name) - EventProcessingRoommate NICHTS: $shuttersDev"
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -975,6 +996,7 @@ sub EventProcessingResidents {
 | 
				
			|||||||
                && $FHEM::Automation::ShuttersControl::shutters
 | 
					                && $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                ->getSelfDefenseMode ne 'off'
 | 
					                ->getSelfDefenseMode ne 'off'
 | 
				
			||||||
                || $getModeDown eq 'absent'
 | 
					                || $getModeDown eq 'absent'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#                     || $getModeDown eq 'always' )       Wird zu Testzwecken auskommentiert, siehe #90 Github
 | 
					#                     || $getModeDown eq 'always' )       Wird zu Testzwecken auskommentiert, siehe #90 Github
 | 
				
			||||||
                || ( $FHEM::Automation::ShuttersControl::shutters
 | 
					                || ( $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                    ->getShadingMode eq 'absent'
 | 
					                    ->getShadingMode eq 'absent'
 | 
				
			||||||
@@ -992,7 +1014,8 @@ sub EventProcessingResidents {
 | 
				
			|||||||
                    && (
 | 
					                    && (
 | 
				
			||||||
                        $FHEM::Automation::ShuttersControl::shutters
 | 
					                        $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                        ->getSelfDefenseMode eq 'absent'
 | 
					                        ->getSelfDefenseMode eq 'absent'
 | 
				
			||||||
                        || ( CheckIfShuttersWindowRecOpen($shuttersDev) == 2
 | 
					                        || (
 | 
				
			||||||
 | 
					                            CheckIfShuttersWindowRecOpen($shuttersDev) == 2
 | 
				
			||||||
                            && $FHEM::Automation::ShuttersControl::shutters
 | 
					                            && $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                            ->getSelfDefenseMode eq 'gone'
 | 
					                            ->getSelfDefenseMode eq 'gone'
 | 
				
			||||||
                            && ( $FHEM::Automation::ShuttersControl::shutters
 | 
					                            && ( $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -1000,7 +1023,8 @@ sub EventProcessingResidents {
 | 
				
			|||||||
                                || $FHEM::Automation::ShuttersControl::shutters
 | 
					                                || $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                                ->getShuttersPlace eq 'EG_window' )
 | 
					                                ->getShuttersPlace eq 'EG_window' )
 | 
				
			||||||
                            && $FHEM::Automation::ShuttersControl::shutters
 | 
					                            && $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                            ->getSelfDefenseMode ne 'off' )
 | 
					                            ->getSelfDefenseMode ne 'off'
 | 
				
			||||||
 | 
					                        )
 | 
				
			||||||
                    )
 | 
					                    )
 | 
				
			||||||
                  )
 | 
					                  )
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
@@ -1051,11 +1075,14 @@ sub EventProcessingResidents {
 | 
				
			|||||||
                        $FHEM::Automation::ShuttersControl::shutters
 | 
					                        $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                          ->getLastPos );
 | 
					                          ->getLastPos );
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                elsif ( $getModeDown eq 'absent'        # || $getModeDown eq 'always' )   Wird zu Testzwecken auskommentiert, siehe #90 Github
 | 
					                elsif (
 | 
				
			||||||
 | 
					                    $getModeDown eq
 | 
				
			||||||
 | 
					                    'absent' # || $getModeDown eq 'always' )   Wird zu Testzwecken auskommentiert, siehe #90 Github
 | 
				
			||||||
                    && !$FHEM::Automation::ShuttersControl::shutters->getIsDay
 | 
					                    && !$FHEM::Automation::ShuttersControl::shutters->getIsDay
 | 
				
			||||||
                    && IsAfterShuttersTimeBlocking($shuttersDev)
 | 
					                    && IsAfterShuttersTimeBlocking($shuttersDev)
 | 
				
			||||||
                    && $FHEM::Automation::ShuttersControl::shutters
 | 
					                    && $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                    ->getRoommatesStatus eq 'none' )
 | 
					                    ->getRoommatesStatus eq 'none'
 | 
				
			||||||
 | 
					                  )
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
 | 
					                    $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
 | 
				
			||||||
                        'residents absent');
 | 
					                        'residents absent');
 | 
				
			||||||
@@ -1115,6 +1142,8 @@ sub EventProcessingResidents {
 | 
				
			|||||||
                ->getRoommatesStatus eq 'none'
 | 
					                ->getRoommatesStatus eq 'none'
 | 
				
			||||||
                && (   $getModeDown eq 'home'
 | 
					                && (   $getModeDown eq 'home'
 | 
				
			||||||
                    || $getModeDown eq 'always' )
 | 
					                    || $getModeDown eq 'always' )
 | 
				
			||||||
 | 
					                && $FHEM::Automation::ShuttersControl::ascDev
 | 
				
			||||||
 | 
					                ->getAutoShuttersControlEvening eq 'on'
 | 
				
			||||||
                && $getResidentsLastStatus ne 'asleep'
 | 
					                && $getResidentsLastStatus ne 'asleep'
 | 
				
			||||||
                && $getResidentsLastStatus ne 'awoken'
 | 
					                && $getResidentsLastStatus ne 'awoken'
 | 
				
			||||||
                && IsAfterShuttersTimeBlocking($shuttersDev)
 | 
					                && IsAfterShuttersTimeBlocking($shuttersDev)
 | 
				
			||||||
@@ -1198,7 +1227,7 @@ sub EventProcessingResidents {
 | 
				
			|||||||
                ->getSelfDefenseState
 | 
					                ->getSelfDefenseState
 | 
				
			||||||
              )
 | 
					              )
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                RemoveInternalTimer(
 | 
					                ::RemoveInternalTimer(
 | 
				
			||||||
                    $FHEM::Automation::ShuttersControl::shutters
 | 
					                    $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                      ->getSelfDefenseAbsentTimerhash )
 | 
					                      ->getSelfDefenseAbsentTimerhash )
 | 
				
			||||||
                  if ( $getResidentsLastStatus eq 'absent'
 | 
					                  if ( $getResidentsLastStatus eq 'absent'
 | 
				
			||||||
@@ -1262,6 +1291,8 @@ sub EventProcessingResidents {
 | 
				
			|||||||
                ->getRoommatesStatus eq 'none'
 | 
					                ->getRoommatesStatus eq 'none'
 | 
				
			||||||
                && (   $getModeUp eq 'home'
 | 
					                && (   $getModeUp eq 'home'
 | 
				
			||||||
                    || $getModeUp eq 'always' )
 | 
					                    || $getModeUp eq 'always' )
 | 
				
			||||||
 | 
					                && $FHEM::Automation::ShuttersControl::ascDev
 | 
				
			||||||
 | 
					                ->getAutoShuttersControlMorning eq 'on'
 | 
				
			||||||
                && IsAfterShuttersTimeBlocking($shuttersDev)
 | 
					                && IsAfterShuttersTimeBlocking($shuttersDev)
 | 
				
			||||||
                && !$FHEM::Automation::ShuttersControl::shutters->getIfInShading
 | 
					                && !$FHEM::Automation::ShuttersControl::shutters->getIfInShading
 | 
				
			||||||
                && !$FHEM::Automation::ShuttersControl::shutters
 | 
					                && !$FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -1380,8 +1411,9 @@ sub EventProcessingWind {
 | 
				
			|||||||
                          $FHEM::Automation::ShuttersControl::shutters->getIsDay
 | 
					                          $FHEM::Automation::ShuttersControl::shutters->getIsDay
 | 
				
			||||||
                        ? $FHEM::Automation::ShuttersControl::shutters
 | 
					                        ? $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                          ->getLastPos
 | 
					                          ->getLastPos
 | 
				
			||||||
                        : ( $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace
 | 
					                        : (
 | 
				
			||||||
                            eq 'awning'
 | 
					                            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
 | 
					                              ->getShuttersPlace eq 'awning'
 | 
				
			||||||
                            ? $FHEM::Automation::ShuttersControl::shutters
 | 
					                            ? $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                              ->getOpenPos
 | 
					                              ->getOpenPos
 | 
				
			||||||
                            : (
 | 
					                            : (
 | 
				
			||||||
@@ -1456,8 +1488,8 @@ sub EventProcessingBrightness {
 | 
				
			|||||||
                (
 | 
					                (
 | 
				
			||||||
                    (
 | 
					                    (
 | 
				
			||||||
                        (
 | 
					                        (
 | 
				
			||||||
                            int( gettimeofday() / 86400 ) == int(
 | 
					                            int( ::gettimeofday() / 86400 ) == int(
 | 
				
			||||||
                                computeAlignTime(
 | 
					                                ::computeAlignTime(
 | 
				
			||||||
                                    '24:00',
 | 
					                                    '24:00',
 | 
				
			||||||
                                    $FHEM::Automation::ShuttersControl::shutters
 | 
					                                    $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                                      ->getTimeUpEarly
 | 
					                                      ->getTimeUpEarly
 | 
				
			||||||
@@ -1478,8 +1510,8 @@ sub EventProcessingBrightness {
 | 
				
			|||||||
                            )
 | 
					                            )
 | 
				
			||||||
                        )
 | 
					                        )
 | 
				
			||||||
                        || (
 | 
					                        || (
 | 
				
			||||||
                            int( gettimeofday() / 86400 ) == int(
 | 
					                            int( ::gettimeofday() / 86400 ) == int(
 | 
				
			||||||
                                computeAlignTime(
 | 
					                                ::computeAlignTime(
 | 
				
			||||||
                                    '24:00',
 | 
					                                    '24:00',
 | 
				
			||||||
                                    $FHEM::Automation::ShuttersControl::shutters
 | 
					                                    $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                                      ->getTimeUpWeHoliday
 | 
					                                      ->getTimeUpWeHoliday
 | 
				
			||||||
@@ -1492,8 +1524,8 @@ sub EventProcessingBrightness {
 | 
				
			|||||||
                            ->getTimeUpWeHoliday ne '01:25'
 | 
					                            ->getTimeUpWeHoliday ne '01:25'
 | 
				
			||||||
                        )
 | 
					                        )
 | 
				
			||||||
                    )
 | 
					                    )
 | 
				
			||||||
                    && int( gettimeofday() / 86400 ) == int(
 | 
					                    && int( ::gettimeofday() / 86400 ) == int(
 | 
				
			||||||
                        computeAlignTime(
 | 
					                        ::computeAlignTime(
 | 
				
			||||||
                            '24:00',
 | 
					                            '24:00',
 | 
				
			||||||
                            $FHEM::Automation::ShuttersControl::shutters
 | 
					                            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                              ->getTimeUpLate
 | 
					                              ->getTimeUpLate
 | 
				
			||||||
@@ -1502,8 +1534,8 @@ sub EventProcessingBrightness {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                    || (
 | 
					                    || (
 | 
				
			||||||
                        (
 | 
					                        (
 | 
				
			||||||
                            int( gettimeofday() / 86400 ) != int(
 | 
					                            int( ::gettimeofday() / 86400 ) != int(
 | 
				
			||||||
                                computeAlignTime(
 | 
					                                ::computeAlignTime(
 | 
				
			||||||
                                    '24:00',
 | 
					                                    '24:00',
 | 
				
			||||||
                                    $FHEM::Automation::ShuttersControl::shutters
 | 
					                                    $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                                      ->getTimeUpEarly
 | 
					                                      ->getTimeUpEarly
 | 
				
			||||||
@@ -1524,8 +1556,8 @@ sub EventProcessingBrightness {
 | 
				
			|||||||
                            )
 | 
					                            )
 | 
				
			||||||
                        )
 | 
					                        )
 | 
				
			||||||
                        || (
 | 
					                        || (
 | 
				
			||||||
                            int( gettimeofday() / 86400 ) != int(
 | 
					                            int( ::gettimeofday() / 86400 ) != int(
 | 
				
			||||||
                                computeAlignTime(
 | 
					                                ::computeAlignTime(
 | 
				
			||||||
                                    '24:00',
 | 
					                                    '24:00',
 | 
				
			||||||
                                    $FHEM::Automation::ShuttersControl::shutters
 | 
					                                    $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                                      ->getTimeUpWeHoliday
 | 
					                                      ->getTimeUpWeHoliday
 | 
				
			||||||
@@ -1538,8 +1570,8 @@ sub EventProcessingBrightness {
 | 
				
			|||||||
                            ->getTimeUpWeHoliday ne '01:25'
 | 
					                            ->getTimeUpWeHoliday ne '01:25'
 | 
				
			||||||
                        )
 | 
					                        )
 | 
				
			||||||
                    )
 | 
					                    )
 | 
				
			||||||
                    && int( gettimeofday() / 86400 ) != int(
 | 
					                    && int( ::gettimeofday() / 86400 ) != int(
 | 
				
			||||||
                        computeAlignTime(
 | 
					                        ::computeAlignTime(
 | 
				
			||||||
                            '24:00',
 | 
					                            '24:00',
 | 
				
			||||||
                            $FHEM::Automation::ShuttersControl::shutters
 | 
					                            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                              ->getTimeUpLate
 | 
					                              ->getTimeUpLate
 | 
				
			||||||
@@ -1548,15 +1580,15 @@ sub EventProcessingBrightness {
 | 
				
			|||||||
                )
 | 
					                )
 | 
				
			||||||
                && (
 | 
					                && (
 | 
				
			||||||
                    (
 | 
					                    (
 | 
				
			||||||
                        int( gettimeofday() / 86400 ) == int(
 | 
					                        int( ::gettimeofday() / 86400 ) == int(
 | 
				
			||||||
                            computeAlignTime(
 | 
					                            ::computeAlignTime(
 | 
				
			||||||
                                '24:00',
 | 
					                                '24:00',
 | 
				
			||||||
                                $FHEM::Automation::ShuttersControl::shutters
 | 
					                                $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                                  ->getTimeDownEarly
 | 
					                                  ->getTimeDownEarly
 | 
				
			||||||
                            ) / 86400
 | 
					                            ) / 86400
 | 
				
			||||||
                        )
 | 
					                        )
 | 
				
			||||||
                        && int( gettimeofday() / 86400 ) == int(
 | 
					                        && int( ::gettimeofday() / 86400 ) == int(
 | 
				
			||||||
                            computeAlignTime(
 | 
					                            ::computeAlignTime(
 | 
				
			||||||
                                '24:00',
 | 
					                                '24:00',
 | 
				
			||||||
                                $FHEM::Automation::ShuttersControl::shutters
 | 
					                                $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                                  ->getTimeDownLate
 | 
					                                  ->getTimeDownLate
 | 
				
			||||||
@@ -1564,15 +1596,15 @@ sub EventProcessingBrightness {
 | 
				
			|||||||
                        )
 | 
					                        )
 | 
				
			||||||
                    )
 | 
					                    )
 | 
				
			||||||
                    || (
 | 
					                    || (
 | 
				
			||||||
                        int( gettimeofday() / 86400 ) != int(
 | 
					                        int( ::gettimeofday() / 86400 ) != int(
 | 
				
			||||||
                            computeAlignTime(
 | 
					                            ::computeAlignTime(
 | 
				
			||||||
                                '24:00',
 | 
					                                '24:00',
 | 
				
			||||||
                                $FHEM::Automation::ShuttersControl::shutters
 | 
					                                $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                                  ->getTimeDownEarly
 | 
					                                  ->getTimeDownEarly
 | 
				
			||||||
                            ) / 86400
 | 
					                            ) / 86400
 | 
				
			||||||
                        )
 | 
					                        )
 | 
				
			||||||
                        && int( gettimeofday() / 86400 ) != int(
 | 
					                        && int( ::gettimeofday() / 86400 ) != int(
 | 
				
			||||||
                            computeAlignTime(
 | 
					                            ::computeAlignTime(
 | 
				
			||||||
                                '24:00',
 | 
					                                '24:00',
 | 
				
			||||||
                                $FHEM::Automation::ShuttersControl::shutters
 | 
					                                $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                                  ->getTimeDownLate
 | 
					                                  ->getTimeDownLate
 | 
				
			||||||
@@ -1645,8 +1677,8 @@ sub EventProcessingBrightness {
 | 
				
			|||||||
            (
 | 
					            (
 | 
				
			||||||
                (
 | 
					                (
 | 
				
			||||||
                    (
 | 
					                    (
 | 
				
			||||||
                        int( gettimeofday() / 86400 ) != int(
 | 
					                        int( ::gettimeofday() / 86400 ) != int(
 | 
				
			||||||
                            computeAlignTime(
 | 
					                            ::computeAlignTime(
 | 
				
			||||||
                                '24:00',
 | 
					                                '24:00',
 | 
				
			||||||
                                $FHEM::Automation::ShuttersControl::shutters
 | 
					                                $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                                  ->getTimeUpEarly
 | 
					                                  ->getTimeUpEarly
 | 
				
			||||||
@@ -1666,8 +1698,8 @@ sub EventProcessingBrightness {
 | 
				
			|||||||
                        )
 | 
					                        )
 | 
				
			||||||
                    )
 | 
					                    )
 | 
				
			||||||
                    || (
 | 
					                    || (
 | 
				
			||||||
                        int( gettimeofday() / 86400 ) != int(
 | 
					                        int( ::gettimeofday() / 86400 ) != int(
 | 
				
			||||||
                            computeAlignTime(
 | 
					                            ::computeAlignTime(
 | 
				
			||||||
                                '24:00',
 | 
					                                '24:00',
 | 
				
			||||||
                                $FHEM::Automation::ShuttersControl::shutters
 | 
					                                $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                                  ->getTimeUpWeHoliday
 | 
					                                  ->getTimeUpWeHoliday
 | 
				
			||||||
@@ -1680,8 +1712,8 @@ sub EventProcessingBrightness {
 | 
				
			|||||||
                        ->getTimeUpWeHoliday ne '01:25'
 | 
					                        ->getTimeUpWeHoliday ne '01:25'
 | 
				
			||||||
                    )
 | 
					                    )
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
                && int( gettimeofday() / 86400 ) == int(
 | 
					                && int( ::gettimeofday() / 86400 ) == int(
 | 
				
			||||||
                    computeAlignTime(
 | 
					                    ::computeAlignTime(
 | 
				
			||||||
                        '24:00',
 | 
					                        '24:00',
 | 
				
			||||||
                        $FHEM::Automation::ShuttersControl::shutters
 | 
					                        $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                          ->getTimeUpLate
 | 
					                          ->getTimeUpLate
 | 
				
			||||||
@@ -1711,7 +1743,7 @@ sub EventProcessingBrightness {
 | 
				
			|||||||
            )
 | 
					            )
 | 
				
			||||||
          )
 | 
					          )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Log3( $name, 4,
 | 
					            ::Log3( $name, 4,
 | 
				
			||||||
"AutoShuttersControl ($shuttersDev) - EventProcessingBrightness: Steuerung für Morgens"
 | 
					"AutoShuttersControl ($shuttersDev) - EventProcessingBrightness: Steuerung für Morgens"
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1792,7 +1824,8 @@ sub EventProcessingBrightness {
 | 
				
			|||||||
                              . $FHEM::Automation::ShuttersControl::shutters
 | 
					                              . $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                              ->getLastDrive );
 | 
					                              ->getLastDrive );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        FHEM::Automation::ShuttersControl::CreateSunRiseSetShuttersTimer( $hash, $shuttersDev );
 | 
					                        FHEM::Automation::ShuttersControl::CreateSunRiseSetShuttersTimer(
 | 
				
			||||||
 | 
					                            $hash, $shuttersDev );
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    else {
 | 
					                    else {
 | 
				
			||||||
                        $FHEM::Automation::ShuttersControl::shutters
 | 
					                        $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -1835,13 +1868,15 @@ sub EventProcessingBrightness {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        elsif (
 | 
					        elsif (
 | 
				
			||||||
            int( gettimeofday() / 86400 ) != int(
 | 
					            int( ::gettimeofday() / 86400 ) != int(
 | 
				
			||||||
                computeAlignTime( '24:00',
 | 
					                ::computeAlignTime(
 | 
				
			||||||
 | 
					                    '24:00',
 | 
				
			||||||
                    $FHEM::Automation::ShuttersControl::shutters
 | 
					                    $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                      ->getTimeDownEarly ) / 86400
 | 
					                      ->getTimeDownEarly
 | 
				
			||||||
 | 
					                ) / 86400
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
            && int( gettimeofday() / 86400 ) == int(
 | 
					            && int( ::gettimeofday() / 86400 ) == int(
 | 
				
			||||||
                computeAlignTime(
 | 
					                ::computeAlignTime(
 | 
				
			||||||
                    '24:00',
 | 
					                    '24:00',
 | 
				
			||||||
                    $FHEM::Automation::ShuttersControl::shutters
 | 
					                    $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                      ->getTimeDownLate
 | 
					                      ->getTimeDownLate
 | 
				
			||||||
@@ -1861,7 +1896,7 @@ sub EventProcessingBrightness {
 | 
				
			|||||||
            ->getAutoShuttersControlEvening eq 'on'
 | 
					            ->getAutoShuttersControlEvening eq 'on'
 | 
				
			||||||
          )
 | 
					          )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Log3( $name, 4,
 | 
					            ::Log3( $name, 4,
 | 
				
			||||||
"AutoShuttersControl ($shuttersDev) - EventProcessingBrightness: Steuerung für Abends"
 | 
					"AutoShuttersControl ($shuttersDev) - EventProcessingBrightness: Steuerung für Abends"
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1969,10 +2004,8 @@ sub EventProcessingBrightness {
 | 
				
			|||||||
                $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
 | 
					                $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
 | 
				
			||||||
                    $lastDrive);
 | 
					                    $lastDrive);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (
 | 
					                if ( $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                    $FHEM::Automation::ShuttersControl::shutters
 | 
					                    ->getPrivacyDownStatus != 2 )
 | 
				
			||||||
                    ->getPrivacyDownStatus != 2
 | 
					 | 
				
			||||||
                  )
 | 
					 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    $FHEM::Automation::ShuttersControl::shutters->setSunrise(0);
 | 
					                    $FHEM::Automation::ShuttersControl::shutters->setSunrise(0);
 | 
				
			||||||
                    $FHEM::Automation::ShuttersControl::shutters->setSunset(1);
 | 
					                    $FHEM::Automation::ShuttersControl::shutters->setSunset(1);
 | 
				
			||||||
@@ -2042,7 +2075,7 @@ sub EventProcessingShadingBrightness {
 | 
				
			|||||||
        : $FHEM::Automation::ShuttersControl::ascDev->getOutTemp
 | 
					        : $FHEM::Automation::ShuttersControl::ascDev->getOutTemp
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Log3( $name, 4,
 | 
					    ::Log3( $name, 4,
 | 
				
			||||||
        "AutoShuttersControl ($shuttersDev) - EventProcessingShadingBrightness"
 | 
					        "AutoShuttersControl ($shuttersDev) - EventProcessingShadingBrightness"
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2053,7 +2086,7 @@ sub EventProcessingShadingBrightness {
 | 
				
			|||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ( $events =~ m{$reading:\s(\d+(\.\d+)?)}xms ) {
 | 
					    if ( $events =~ m{$reading:\s(\d+(\.\d+)?)}xms ) {
 | 
				
			||||||
        Log3(
 | 
					        ::Log3(
 | 
				
			||||||
            $name, 4,
 | 
					            $name, 4,
 | 
				
			||||||
"AutoShuttersControl ($shuttersDev) - EventProcessingShadingBrightness
 | 
					"AutoShuttersControl ($shuttersDev) - EventProcessingShadingBrightness
 | 
				
			||||||
            Brightness: " . $1
 | 
					            Brightness: " . $1
 | 
				
			||||||
@@ -2220,18 +2253,18 @@ sub EventProcessingPartyMode {
 | 
				
			|||||||
                && $FHEM::Automation::ShuttersControl::shutters->getSubTyp eq
 | 
					                && $FHEM::Automation::ShuttersControl::shutters->getSubTyp eq
 | 
				
			||||||
                'threestate' )
 | 
					                'threestate' )
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                Log3( $name, 4,
 | 
					                ::Log3( $name, 4,
 | 
				
			||||||
"AutoShuttersControl ($name) - EventProcessingPartyMode Fenster offen"
 | 
					"AutoShuttersControl ($name) - EventProcessingPartyMode Fenster offen"
 | 
				
			||||||
                );
 | 
					                );
 | 
				
			||||||
                $FHEM::Automation::ShuttersControl::shutters->setDelayCmd(
 | 
					                $FHEM::Automation::ShuttersControl::shutters->setDelayCmd(
 | 
				
			||||||
                    $FHEM::Automation::ShuttersControl::shutters->getClosedPos
 | 
					                    $FHEM::Automation::ShuttersControl::shutters->getClosedPos
 | 
				
			||||||
                );
 | 
					                );
 | 
				
			||||||
                Log3( $name, 4,
 | 
					                ::Log3( $name, 4,
 | 
				
			||||||
"AutoShuttersControl ($name) - EventProcessingPartyMode - Spring in ShuttersCommandDelaySet"
 | 
					"AutoShuttersControl ($name) - EventProcessingPartyMode - Spring in ShuttersCommandDelaySet"
 | 
				
			||||||
                );
 | 
					                );
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else {
 | 
					            else {
 | 
				
			||||||
                Log3( $name, 4,
 | 
					                ::Log3( $name, 4,
 | 
				
			||||||
"AutoShuttersControl ($name) - EventProcessingPartyMode Fenster nicht offen"
 | 
					"AutoShuttersControl ($name) - EventProcessingPartyMode Fenster nicht offen"
 | 
				
			||||||
                );
 | 
					                );
 | 
				
			||||||
                $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
 | 
					                $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
 | 
				
			||||||
@@ -2241,12 +2274,14 @@ sub EventProcessingPartyMode {
 | 
				
			|||||||
                    $shuttersDev,
 | 
					                    $shuttersDev,
 | 
				
			||||||
                    (
 | 
					                    (
 | 
				
			||||||
                        CheckIfShuttersWindowRecOpen($shuttersDev) == 0
 | 
					                        CheckIfShuttersWindowRecOpen($shuttersDev) == 0
 | 
				
			||||||
                        ? ($FHEM::Automation::ShuttersControl::shutters
 | 
					                        ? (
 | 
				
			||||||
 | 
					                            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                              ->getSleepPos > 0
 | 
					                              ->getSleepPos > 0
 | 
				
			||||||
                            ? $FHEM::Automation::ShuttersControl::shutters
 | 
					                            ? $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                              ->getSleepPos
 | 
					                              ->getSleepPos
 | 
				
			||||||
                            : $FHEM::Automation::ShuttersControl::shutters
 | 
					                            : $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                                ->getClosedPos)
 | 
					                              ->getClosedPos
 | 
				
			||||||
 | 
					                          )
 | 
				
			||||||
                        : $FHEM::Automation::ShuttersControl::shutters
 | 
					                        : $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                          ->getVentilatePos
 | 
					                          ->getVentilatePos
 | 
				
			||||||
                    )
 | 
					                    )
 | 
				
			||||||
@@ -2320,8 +2355,8 @@ sub EventProcessingShutters {
 | 
				
			|||||||
                'EventProcessingShutters: '
 | 
					                'EventProcessingShutters: '
 | 
				
			||||||
              . $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
 | 
					              . $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
 | 
				
			||||||
              . ' - Event vom Rollo erkannt. Es wird nun eine etwaige manuelle Fahrt ausgewertet.'
 | 
					              . ' - Event vom Rollo erkannt. Es wird nun eine etwaige manuelle Fahrt ausgewertet.'
 | 
				
			||||||
              . ' Int von gettimeofday: '
 | 
					              . ' Int von ::gettimeofday: '
 | 
				
			||||||
              . int( gettimeofday() )
 | 
					              . int( ::gettimeofday() )
 | 
				
			||||||
              . ' Last Position Timestamp: '
 | 
					              . ' Last Position Timestamp: '
 | 
				
			||||||
              . $FHEM::Automation::ShuttersControl::shutters
 | 
					              . $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
              ->getLastPosTimestamp
 | 
					              ->getLastPosTimestamp
 | 
				
			||||||
@@ -2335,13 +2370,13 @@ sub EventProcessingShutters {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        if (
 | 
					        if (
 | 
				
			||||||
            (
 | 
					            (
 | 
				
			||||||
                int( gettimeofday() ) -
 | 
					                int( ::gettimeofday() ) -
 | 
				
			||||||
                $FHEM::Automation::ShuttersControl::shutters
 | 
					                $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                ->getLastPosTimestamp
 | 
					                ->getLastPosTimestamp
 | 
				
			||||||
            ) >
 | 
					            ) >
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::shutters->getDriveUpMaxDuration
 | 
					            $FHEM::Automation::ShuttersControl::shutters->getDriveUpMaxDuration
 | 
				
			||||||
            && (
 | 
					            && (
 | 
				
			||||||
                int( gettimeofday() ) -
 | 
					                int( ::gettimeofday() ) -
 | 
				
			||||||
                $FHEM::Automation::ShuttersControl::shutters
 | 
					                $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                ->getLastManPosTimestamp ) >
 | 
					                ->getLastManPosTimestamp ) >
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::shutters->getDriveUpMaxDuration
 | 
					            $FHEM::Automation::ShuttersControl::shutters->getDriveUpMaxDuration
 | 
				
			||||||
@@ -2366,6 +2401,22 @@ sub EventProcessingShutters {
 | 
				
			|||||||
            $FHEM::Automation::ShuttersControl::shutters->setLastDriveReading;
 | 
					            $FHEM::Automation::ShuttersControl::shutters->setLastDriveReading;
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::ascDev->setStateReading;
 | 
					            $FHEM::Automation::ShuttersControl::ascDev->setStateReading;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $FHEM::Automation::ShuttersControl::shutters->setHardLockOut('on')
 | 
				
			||||||
 | 
					              if (
 | 
				
			||||||
 | 
					                (
 | 
				
			||||||
 | 
					                    $FHEM::Automation::ShuttersControl::shutters->getStatus ==
 | 
				
			||||||
 | 
					                    $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
 | 
					                    ->getComfortOpenPos
 | 
				
			||||||
 | 
					                    || ( $FHEM::Automation::ShuttersControl::shutters->getStatus
 | 
				
			||||||
 | 
					                        == $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
 | 
					                        ->getOpenPos
 | 
				
			||||||
 | 
					                        && $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
 | 
					                        ->getLastDrive eq 'ventilate - window open' )
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
 | 
					                && $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
 | 
					                ->getShuttersPlace eq 'terrace'
 | 
				
			||||||
 | 
					              );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            FHEM::Automation::ShuttersControl::ASC_Debug(
 | 
					            FHEM::Automation::ShuttersControl::ASC_Debug(
 | 
				
			||||||
'EventProcessingShutters: eine automatisierte Fahrt durch ASC wurde erkannt! Es werden nun die LastDriveReading und StateReading Werte gesetzt!'
 | 
					'EventProcessingShutters: eine automatisierte Fahrt durch ASC wurde erkannt! Es werden nun die LastDriveReading und StateReading Werte gesetzt!'
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
@@ -2478,7 +2529,4 @@ sub EventProcessingExternalTriggerDevice {
 | 
				
			|||||||
    return;
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1;
 | 
					1;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
###############################################################################
 | 
					###############################################################################
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Developed with Kate
 | 
					# Developed with VSCodium and richterger perl plugin
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#  (c) 2018-2021 Copyright: Marko Oldenburg (fhemsupport@cooltux.net)
 | 
					#  (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
 | 
				
			||||||
#  All rights reserved
 | 
					#  All rights reserved
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#   Special thanks goes to:
 | 
					#   Special thanks goes to:
 | 
				
			||||||
@@ -46,7 +46,9 @@ use POSIX qw(strftime);
 | 
				
			|||||||
use utf8;
 | 
					use utf8;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require Exporter;
 | 
					require Exporter;
 | 
				
			||||||
our @ISA       = qw(Exporter);
 | 
					use base qw(Exporter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# our @ISA       = qw(Exporter);
 | 
				
			||||||
our @EXPORT_OK = qw(
 | 
					our @EXPORT_OK = qw(
 | 
				
			||||||
  PositionValueWindowRec
 | 
					  PositionValueWindowRec
 | 
				
			||||||
  AutoSearchTwilightDev
 | 
					  AutoSearchTwilightDev
 | 
				
			||||||
@@ -89,21 +91,7 @@ our %EXPORT_TAGS = (
 | 
				
			|||||||
use GPUtils qw(GP_Import);
 | 
					use GPUtils qw(GP_Import);
 | 
				
			||||||
## Import der FHEM Funktionen
 | 
					## Import der FHEM Funktionen
 | 
				
			||||||
BEGIN {
 | 
					BEGIN {
 | 
				
			||||||
    GP_Import(
 | 
					    GP_Import(qw(cmdFromAnalyze));
 | 
				
			||||||
        qw(
 | 
					 | 
				
			||||||
          devspec2array
 | 
					 | 
				
			||||||
          CommandAttr
 | 
					 | 
				
			||||||
          AttrVal
 | 
					 | 
				
			||||||
          Log3
 | 
					 | 
				
			||||||
          computeAlignTime
 | 
					 | 
				
			||||||
          gettimeofday
 | 
					 | 
				
			||||||
          sunset
 | 
					 | 
				
			||||||
          sunset_abs
 | 
					 | 
				
			||||||
          sunrise
 | 
					 | 
				
			||||||
          sunrise_abs
 | 
					 | 
				
			||||||
          cmdFromAnalyze
 | 
					 | 
				
			||||||
          )
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub PositionValueWindowRec {
 | 
					sub PositionValueWindowRec {
 | 
				
			||||||
@@ -156,12 +144,12 @@ sub AutoSearchTwilightDev {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    my $name = $hash->{NAME};
 | 
					    my $name = $hash->{NAME};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ( devspec2array('TYPE=(Astro|Twilight)') > 0 ) {
 | 
					    if ( ::devspec2array('TYPE=(Astro|Twilight)') > 0 ) {
 | 
				
			||||||
        CommandAttr( undef,
 | 
					        ::CommandAttr( undef,
 | 
				
			||||||
                $name
 | 
					                $name
 | 
				
			||||||
              . ' ASC_twilightDevice '
 | 
					              . ' ASC_twilightDevice '
 | 
				
			||||||
              . ( devspec2array('TYPE=(Astro|Twilight)') )[0] )
 | 
					              . ( ::devspec2array('TYPE=(Astro|Twilight)') )[0] )
 | 
				
			||||||
          if ( AttrVal( $name, 'ASC_twilightDevice', 'none' ) eq 'none' );
 | 
					          if ( ::AttrVal( $name, 'ASC_twilightDevice', 'none' ) eq 'none' );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
@@ -172,8 +160,10 @@ sub GetAttrValues {
 | 
				
			|||||||
    my $attribut = shift;
 | 
					    my $attribut = shift;
 | 
				
			||||||
    my $default  = shift;
 | 
					    my $default  = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my @values = split( ' ',
 | 
					    my @values = split(
 | 
				
			||||||
        AttrVal( $dev, $attribut, ( defined($default) ? $default : 'none' ) ) );
 | 
					        ' ',
 | 
				
			||||||
 | 
					        ::AttrVal( $dev, $attribut, ( defined($default) ? $default : 'none' ) )
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
    my ( $value1, $value2 ) = split( ':', $values[0] );
 | 
					    my ( $value1, $value2 ) = split( ':', $values[0] );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my ( $value3, $value4, $value5, $value6, $value7, $value8 );
 | 
					    my ( $value3, $value4, $value5, $value6, $value7, $value8 );
 | 
				
			||||||
@@ -227,10 +217,10 @@ sub ExtractNotifyDevFromEvent {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    my %notifyDevs;
 | 
					    my %notifyDevs;
 | 
				
			||||||
    while ( my $notifyDev = each %{ $hash->{monitoredDevs} } ) {
 | 
					    while ( my $notifyDev = each %{ $hash->{monitoredDevs} } ) {
 | 
				
			||||||
        Log3( $hash->{NAME}, 4,
 | 
					        ::Log3( $hash->{NAME}, 4,
 | 
				
			||||||
"AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - NotifyDev: "
 | 
					"AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - NotifyDev: "
 | 
				
			||||||
              . $notifyDev );
 | 
					              . $notifyDev );
 | 
				
			||||||
        Log3( $hash->{NAME}, 5,
 | 
					        ::Log3( $hash->{NAME}, 5,
 | 
				
			||||||
"AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - ShuttersDev: "
 | 
					"AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - ShuttersDev: "
 | 
				
			||||||
              . $shuttersDev );
 | 
					              . $shuttersDev );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -238,10 +228,10 @@ sub ExtractNotifyDevFromEvent {
 | 
				
			|||||||
            && $hash->{monitoredDevs}{$notifyDev}{$shuttersDev} eq
 | 
					            && $hash->{monitoredDevs}{$notifyDev}{$shuttersDev} eq
 | 
				
			||||||
            $shuttersAttr )
 | 
					            $shuttersAttr )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Log3( $hash->{NAME}, 4,
 | 
					            ::Log3( $hash->{NAME}, 4,
 | 
				
			||||||
"AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - ShuttersDevHash: "
 | 
					"AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - ShuttersDevHash: "
 | 
				
			||||||
                  . $hash->{monitoredDevs}{$notifyDev}{$shuttersDev} );
 | 
					                  . $hash->{monitoredDevs}{$notifyDev}{$shuttersDev} );
 | 
				
			||||||
            Log3( $hash->{NAME}, 5,
 | 
					            ::Log3( $hash->{NAME}, 5,
 | 
				
			||||||
"AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - return ShuttersDev: "
 | 
					"AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - return ShuttersDev: "
 | 
				
			||||||
                  . $notifyDev );
 | 
					                  . $notifyDev );
 | 
				
			||||||
            $notifyDevs{$notifyDev} = $shuttersDev;
 | 
					            $notifyDevs{$notifyDev} = $shuttersDev;
 | 
				
			||||||
@@ -279,24 +269,27 @@ sub _IsDay {
 | 
				
			|||||||
        (
 | 
					        (
 | 
				
			||||||
            (
 | 
					            (
 | 
				
			||||||
                (
 | 
					                (
 | 
				
			||||||
                    int( gettimeofday() / 86400 ) != int(
 | 
					                    int( ::gettimeofday() / 86400 ) != int(
 | 
				
			||||||
                        computeAlignTime( '24:00',
 | 
					                        ::computeAlignTime(
 | 
				
			||||||
 | 
					                            '24:00',
 | 
				
			||||||
                            $FHEM::Automation::ShuttersControl::shutters
 | 
					                            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                              ->getTimeUpEarly ) / 86400
 | 
					                              ->getTimeUpEarly
 | 
				
			||||||
 | 
					                        ) / 86400
 | 
				
			||||||
                    )
 | 
					                    )
 | 
				
			||||||
                    && ( !IsWe()
 | 
					                    && (
 | 
				
			||||||
                      || ( IsWe()
 | 
					                        !IsWe()
 | 
				
			||||||
 | 
					                        || (
 | 
				
			||||||
 | 
					                            IsWe()
 | 
				
			||||||
                            && ( $FHEM::Automation::ShuttersControl::ascDev
 | 
					                            && ( $FHEM::Automation::ShuttersControl::ascDev
 | 
				
			||||||
                                ->getSunriseTimeWeHoliday eq 'off'
 | 
					                                ->getSunriseTimeWeHoliday eq 'off'
 | 
				
			||||||
                                || $FHEM::Automation::ShuttersControl::shutters
 | 
					                                || $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                            ->getTimeUpWeHoliday eq '01:25'
 | 
					                                ->getTimeUpWeHoliday eq '01:25' )
 | 
				
			||||||
                           )
 | 
					 | 
				
			||||||
                        )
 | 
					                        )
 | 
				
			||||||
                    )
 | 
					                    )
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
                || (
 | 
					                || (
 | 
				
			||||||
                    int( gettimeofday() / 86400 ) != int(
 | 
					                    int( ::gettimeofday() / 86400 ) != int(
 | 
				
			||||||
                        computeAlignTime(
 | 
					                        ::computeAlignTime(
 | 
				
			||||||
                            '24:00',
 | 
					                            '24:00',
 | 
				
			||||||
                            $FHEM::Automation::ShuttersControl::shutters
 | 
					                            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                              ->getTimeUpWeHoliday
 | 
					                              ->getTimeUpWeHoliday
 | 
				
			||||||
@@ -309,23 +302,23 @@ sub _IsDay {
 | 
				
			|||||||
                    ->getTimeUpWeHoliday ne '01:25'
 | 
					                    ->getTimeUpWeHoliday ne '01:25'
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
            && int( gettimeofday() / 86400 ) == int(
 | 
					            && int( ::gettimeofday() / 86400 ) == int(
 | 
				
			||||||
                computeAlignTime(
 | 
					                ::computeAlignTime(
 | 
				
			||||||
                    '24:00',
 | 
					                    '24:00',
 | 
				
			||||||
                    $FHEM::Automation::ShuttersControl::shutters->getTimeUpLate
 | 
					                    $FHEM::Automation::ShuttersControl::shutters->getTimeUpLate
 | 
				
			||||||
                ) / 86400
 | 
					                ) / 86400
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        || (
 | 
					        || (
 | 
				
			||||||
            int( gettimeofday() / 86400 ) != int(
 | 
					            int( ::gettimeofday() / 86400 ) != int(
 | 
				
			||||||
                computeAlignTime(
 | 
					                ::computeAlignTime(
 | 
				
			||||||
                    '24:00',
 | 
					                    '24:00',
 | 
				
			||||||
                    $FHEM::Automation::ShuttersControl::shutters
 | 
					                    $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                      ->getTimeDownEarly
 | 
					                      ->getTimeDownEarly
 | 
				
			||||||
                ) / 86400
 | 
					                ) / 86400
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
            && int( gettimeofday() / 86400 ) == int(
 | 
					            && int( ::gettimeofday() / 86400 ) == int(
 | 
				
			||||||
                computeAlignTime(
 | 
					                ::computeAlignTime(
 | 
				
			||||||
                    '24:00',
 | 
					                    '24:00',
 | 
				
			||||||
                    $FHEM::Automation::ShuttersControl::shutters
 | 
					                    $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                      ->getTimeDownLate
 | 
					                      ->getTimeDownLate
 | 
				
			||||||
@@ -390,16 +383,21 @@ sub _IsDay {
 | 
				
			|||||||
              . $FHEM::Automation::ShuttersControl::shutters->getSunrise );
 | 
					              . $FHEM::Automation::ShuttersControl::shutters->getSunrise );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    $respIsDay = 1
 | 
					    $respIsDay = 1
 | 
				
			||||||
      if (
 | 
					      if (
 | 
				
			||||||
           (  $FHEM::Automation::ShuttersControl::shutters->getDown eq 'roommate'
 | 
					        (
 | 
				
			||||||
             and ( $FHEM::Automation::ShuttersControl::shutters->getRoommates ne 'asleep'
 | 
					            $FHEM::Automation::ShuttersControl::shutters->getDown eq 'roommate'
 | 
				
			||||||
                or $FHEM::Automation::ShuttersControl::shutters->getRoommates ne 'gotosleep' )
 | 
					            and ( $FHEM::Automation::ShuttersControl::shutters->getRoommates ne
 | 
				
			||||||
 | 
					                'asleep'
 | 
				
			||||||
 | 
					                or $FHEM::Automation::ShuttersControl::shutters->getRoommates
 | 
				
			||||||
 | 
					                ne 'gotosleep' )
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        or (  $FHEM::Automation::ShuttersControl::shutters->getUp eq 'roommate'
 | 
					        or (
 | 
				
			||||||
             and ( $FHEM::Automation::ShuttersControl::shutters->getRoommates ne 'asleep'
 | 
					            $FHEM::Automation::ShuttersControl::shutters->getUp eq 'roommate'
 | 
				
			||||||
                or $FHEM::Automation::ShuttersControl::shutters->getRoommates ne 'gotosleep' )
 | 
					            and ( $FHEM::Automation::ShuttersControl::shutters->getRoommates ne
 | 
				
			||||||
 | 
					                'asleep'
 | 
				
			||||||
 | 
					                or $FHEM::Automation::ShuttersControl::shutters->getRoommates
 | 
				
			||||||
 | 
					                ne 'gotosleep' )
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -436,7 +434,7 @@ sub ShuttersSunrise {
 | 
				
			|||||||
    my $oldFuncHash =
 | 
					    my $oldFuncHash =
 | 
				
			||||||
      $FHEM::Automation::ShuttersControl::shutters->getInTimerFuncHash;
 | 
					      $FHEM::Automation::ShuttersControl::shutters->getInTimerFuncHash;
 | 
				
			||||||
    my $shuttersSunriseUnixtime =
 | 
					    my $shuttersSunriseUnixtime =
 | 
				
			||||||
      computeAlignTime( '24:00', sunrise( 'REAL', 0, '4:30', '8:30' ) );
 | 
					      ::computeAlignTime( '24:00', ::sunrise( 'REAL', 0, '4:30', '8:30' ) );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ( $tm eq 'unix' ) {
 | 
					    if ( $tm eq 'unix' ) {
 | 
				
			||||||
        if ( $FHEM::Automation::ShuttersControl::shutters->getUp eq 'astro' ) {
 | 
					        if ( $FHEM::Automation::ShuttersControl::shutters->getUp eq 'astro' ) {
 | 
				
			||||||
@@ -449,11 +447,11 @@ sub ShuttersSunrise {
 | 
				
			|||||||
                if ( !IsWe('tomorrow') ) {
 | 
					                if ( !IsWe('tomorrow') ) {
 | 
				
			||||||
                    if (
 | 
					                    if (
 | 
				
			||||||
                        IsWe()
 | 
					                        IsWe()
 | 
				
			||||||
                        && int( gettimeofday() / 86400 ) == int(
 | 
					                        && int( ::gettimeofday() / 86400 ) == int(
 | 
				
			||||||
                            (
 | 
					                            (
 | 
				
			||||||
                                computeAlignTime(
 | 
					                                ::computeAlignTime(
 | 
				
			||||||
                                    '24:00',
 | 
					                                    '24:00',
 | 
				
			||||||
                                    sunrise_abs(
 | 
					                                    ::sunrise_abs(
 | 
				
			||||||
                                        $autoAstroMode,
 | 
					                                        $autoAstroMode,
 | 
				
			||||||
                                        0,
 | 
					                                        0,
 | 
				
			||||||
                                        $FHEM::Automation::ShuttersControl::shutters
 | 
					                                        $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -465,9 +463,9 @@ sub ShuttersSunrise {
 | 
				
			|||||||
                      )
 | 
					                      )
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        $shuttersSunriseUnixtime = (
 | 
					                        $shuttersSunriseUnixtime = (
 | 
				
			||||||
                            computeAlignTime(
 | 
					                            ::computeAlignTime(
 | 
				
			||||||
                                '24:00',
 | 
					                                '24:00',
 | 
				
			||||||
                                sunrise_abs(
 | 
					                                ::sunrise_abs(
 | 
				
			||||||
                                    $autoAstroMode,
 | 
					                                    $autoAstroMode,
 | 
				
			||||||
                                    0,
 | 
					                                    0,
 | 
				
			||||||
                                    $FHEM::Automation::ShuttersControl::shutters
 | 
					                                    $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -477,11 +475,11 @@ sub ShuttersSunrise {
 | 
				
			|||||||
                        );
 | 
					                        );
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    elsif (
 | 
					                    elsif (
 | 
				
			||||||
                        int( gettimeofday() / 86400 ) == int(
 | 
					                        int( ::gettimeofday() / 86400 ) == int(
 | 
				
			||||||
                            (
 | 
					                            (
 | 
				
			||||||
                                computeAlignTime(
 | 
					                                ::computeAlignTime(
 | 
				
			||||||
                                    '24:00',
 | 
					                                    '24:00',
 | 
				
			||||||
                                    sunrise_abs(
 | 
					                                    ::sunrise_abs(
 | 
				
			||||||
                                        $autoAstroMode,
 | 
					                                        $autoAstroMode,
 | 
				
			||||||
                                        0,
 | 
					                                        0,
 | 
				
			||||||
                                        $FHEM::Automation::ShuttersControl::shutters
 | 
					                                        $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -495,9 +493,9 @@ sub ShuttersSunrise {
 | 
				
			|||||||
                      )
 | 
					                      )
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        $shuttersSunriseUnixtime = (
 | 
					                        $shuttersSunriseUnixtime = (
 | 
				
			||||||
                            computeAlignTime(
 | 
					                            ::computeAlignTime(
 | 
				
			||||||
                                '24:00',
 | 
					                                '24:00',
 | 
				
			||||||
                                sunrise_abs(
 | 
					                                ::sunrise_abs(
 | 
				
			||||||
                                    $autoAstroMode,
 | 
					                                    $autoAstroMode,
 | 
				
			||||||
                                    0,
 | 
					                                    0,
 | 
				
			||||||
                                    $FHEM::Automation::ShuttersControl::shutters
 | 
					                                    $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -508,9 +506,9 @@ sub ShuttersSunrise {
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    else {
 | 
					                    else {
 | 
				
			||||||
                        $shuttersSunriseUnixtime = (
 | 
					                        $shuttersSunriseUnixtime = (
 | 
				
			||||||
                            computeAlignTime(
 | 
					                            ::computeAlignTime(
 | 
				
			||||||
                                '24:00',
 | 
					                                '24:00',
 | 
				
			||||||
                                sunrise_abs(
 | 
					                                ::sunrise_abs(
 | 
				
			||||||
                                    $autoAstroMode,
 | 
					                                    $autoAstroMode,
 | 
				
			||||||
                                    0,
 | 
					                                    0,
 | 
				
			||||||
                                    $FHEM::Automation::ShuttersControl::shutters
 | 
					                                    $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -526,11 +524,11 @@ sub ShuttersSunrise {
 | 
				
			|||||||
                    if (
 | 
					                    if (
 | 
				
			||||||
                        IsWe()
 | 
					                        IsWe()
 | 
				
			||||||
                        && (
 | 
					                        && (
 | 
				
			||||||
                            int( gettimeofday() / 86400 ) == int(
 | 
					                            int( ::gettimeofday() / 86400 ) == int(
 | 
				
			||||||
                                (
 | 
					                                (
 | 
				
			||||||
                                    computeAlignTime(
 | 
					                                    ::computeAlignTime(
 | 
				
			||||||
                                        '24:00',
 | 
					                                        '24:00',
 | 
				
			||||||
                                        sunrise_abs(
 | 
					                                        ::sunrise_abs(
 | 
				
			||||||
                                            $autoAstroMode,
 | 
					                                            $autoAstroMode,
 | 
				
			||||||
                                            0,
 | 
					                                            0,
 | 
				
			||||||
                                            $FHEM::Automation::ShuttersControl::shutters
 | 
					                                            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -539,11 +537,11 @@ sub ShuttersSunrise {
 | 
				
			|||||||
                                    ) + 1
 | 
					                                    ) + 1
 | 
				
			||||||
                                ) / 86400
 | 
					                                ) / 86400
 | 
				
			||||||
                            )
 | 
					                            )
 | 
				
			||||||
                            || int( gettimeofday() / 86400 ) != int(
 | 
					                            || int( ::gettimeofday() / 86400 ) != int(
 | 
				
			||||||
                                (
 | 
					                                (
 | 
				
			||||||
                                    computeAlignTime(
 | 
					                                    ::computeAlignTime(
 | 
				
			||||||
                                        '24:00',
 | 
					                                        '24:00',
 | 
				
			||||||
                                        sunrise_abs(
 | 
					                                        ::sunrise_abs(
 | 
				
			||||||
                                            $autoAstroMode,
 | 
					                                            $autoAstroMode,
 | 
				
			||||||
                                            0,
 | 
					                                            0,
 | 
				
			||||||
                                            $FHEM::Automation::ShuttersControl::shutters
 | 
					                                            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -556,9 +554,9 @@ sub ShuttersSunrise {
 | 
				
			|||||||
                      )
 | 
					                      )
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        $shuttersSunriseUnixtime = (
 | 
					                        $shuttersSunriseUnixtime = (
 | 
				
			||||||
                            computeAlignTime(
 | 
					                            ::computeAlignTime(
 | 
				
			||||||
                                '24:00',
 | 
					                                '24:00',
 | 
				
			||||||
                                sunrise_abs(
 | 
					                                ::sunrise_abs(
 | 
				
			||||||
                                    $autoAstroMode,
 | 
					                                    $autoAstroMode,
 | 
				
			||||||
                                    0,
 | 
					                                    0,
 | 
				
			||||||
                                    $FHEM::Automation::ShuttersControl::shutters
 | 
					                                    $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -568,11 +566,11 @@ sub ShuttersSunrise {
 | 
				
			|||||||
                        );
 | 
					                        );
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    elsif (
 | 
					                    elsif (
 | 
				
			||||||
                        int( gettimeofday() / 86400 ) == int(
 | 
					                        int( ::gettimeofday() / 86400 ) == int(
 | 
				
			||||||
                            (
 | 
					                            (
 | 
				
			||||||
                                computeAlignTime(
 | 
					                                ::computeAlignTime(
 | 
				
			||||||
                                    '24:00',
 | 
					                                    '24:00',
 | 
				
			||||||
                                    sunrise_abs(
 | 
					                                    ::sunrise_abs(
 | 
				
			||||||
                                        $autoAstroMode,
 | 
					                                        $autoAstroMode,
 | 
				
			||||||
                                        0,
 | 
					                                        0,
 | 
				
			||||||
                                        $FHEM::Automation::ShuttersControl::shutters
 | 
					                                        $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -586,9 +584,9 @@ sub ShuttersSunrise {
 | 
				
			|||||||
                      )
 | 
					                      )
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        $shuttersSunriseUnixtime = (
 | 
					                        $shuttersSunriseUnixtime = (
 | 
				
			||||||
                            computeAlignTime(
 | 
					                            ::computeAlignTime(
 | 
				
			||||||
                                '24:00',
 | 
					                                '24:00',
 | 
				
			||||||
                                sunrise_abs(
 | 
					                                ::sunrise_abs(
 | 
				
			||||||
                                    $autoAstroMode,
 | 
					                                    $autoAstroMode,
 | 
				
			||||||
                                    0,
 | 
					                                    0,
 | 
				
			||||||
                                    $FHEM::Automation::ShuttersControl::shutters
 | 
					                                    $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -601,11 +599,11 @@ sub ShuttersSunrise {
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    else {
 | 
					                    else {
 | 
				
			||||||
                        if (
 | 
					                        if (
 | 
				
			||||||
                            int( gettimeofday() / 86400 ) == int(
 | 
					                            int( ::gettimeofday() / 86400 ) == int(
 | 
				
			||||||
                                (
 | 
					                                (
 | 
				
			||||||
                                    computeAlignTime(
 | 
					                                    ::computeAlignTime(
 | 
				
			||||||
                                        '24:00',
 | 
					                                        '24:00',
 | 
				
			||||||
                                        sunrise_abs(
 | 
					                                        ::sunrise_abs(
 | 
				
			||||||
                                            $autoAstroMode,
 | 
					                                            $autoAstroMode,
 | 
				
			||||||
                                            0,
 | 
					                                            0,
 | 
				
			||||||
                                            $FHEM::Automation::ShuttersControl::shutters
 | 
					                                            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -617,9 +615,9 @@ sub ShuttersSunrise {
 | 
				
			|||||||
                          )
 | 
					                          )
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            $shuttersSunriseUnixtime = (
 | 
					                            $shuttersSunriseUnixtime = (
 | 
				
			||||||
                                computeAlignTime(
 | 
					                                ::computeAlignTime(
 | 
				
			||||||
                                    '24:00',
 | 
					                                    '24:00',
 | 
				
			||||||
                                    sunrise_abs(
 | 
					                                    ::sunrise_abs(
 | 
				
			||||||
                                        $autoAstroMode,
 | 
					                                        $autoAstroMode,
 | 
				
			||||||
                                        0,
 | 
					                                        0,
 | 
				
			||||||
                                        $FHEM::Automation::ShuttersControl::shutters
 | 
					                                        $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -630,9 +628,9 @@ sub ShuttersSunrise {
 | 
				
			|||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        else {
 | 
					                        else {
 | 
				
			||||||
                            $shuttersSunriseUnixtime = (
 | 
					                            $shuttersSunriseUnixtime = (
 | 
				
			||||||
                                computeAlignTime(
 | 
					                                ::computeAlignTime(
 | 
				
			||||||
                                    '24:00',
 | 
					                                    '24:00',
 | 
				
			||||||
                                    sunrise_abs(
 | 
					                                    ::sunrise_abs(
 | 
				
			||||||
                                        $autoAstroMode,
 | 
					                                        $autoAstroMode,
 | 
				
			||||||
                                        0,
 | 
					                                        0,
 | 
				
			||||||
                                        $FHEM::Automation::ShuttersControl::shutters
 | 
					                                        $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -646,9 +644,9 @@ sub ShuttersSunrise {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            else {
 | 
					            else {
 | 
				
			||||||
                $shuttersSunriseUnixtime = (
 | 
					                $shuttersSunriseUnixtime = (
 | 
				
			||||||
                    computeAlignTime(
 | 
					                    ::computeAlignTime(
 | 
				
			||||||
                        '24:00',
 | 
					                        '24:00',
 | 
				
			||||||
                        sunrise_abs(
 | 
					                        ::sunrise_abs(
 | 
				
			||||||
                            $autoAstroMode,
 | 
					                            $autoAstroMode,
 | 
				
			||||||
                            0,
 | 
					                            0,
 | 
				
			||||||
                            $FHEM::Automation::ShuttersControl::shutters
 | 
					                            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -669,11 +667,11 @@ sub ShuttersSunrise {
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if ( !IsWe('tomorrow') ) {
 | 
					                if ( !IsWe('tomorrow') ) {
 | 
				
			||||||
                    if (
 | 
					                    if (
 | 
				
			||||||
                        int( gettimeofday() / 86400 ) == int(
 | 
					                        int( ::gettimeofday() / 86400 ) == int(
 | 
				
			||||||
                            (
 | 
					                            (
 | 
				
			||||||
                                computeAlignTime(
 | 
					                                ::computeAlignTime(
 | 
				
			||||||
                                    '24:00',
 | 
					                                    '24:00',
 | 
				
			||||||
                                    sunrise_abs(
 | 
					                                    ::sunrise_abs(
 | 
				
			||||||
                                        $autoAstroMode,
 | 
					                                        $autoAstroMode,
 | 
				
			||||||
                                        0,
 | 
					                                        0,
 | 
				
			||||||
                                        $FHEM::Automation::ShuttersControl::shutters
 | 
					                                        $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -690,7 +688,7 @@ sub ShuttersSunrise {
 | 
				
			|||||||
                          ( $shuttersSunriseUnixtime + 86400 )
 | 
					                          ( $shuttersSunriseUnixtime + 86400 )
 | 
				
			||||||
                          if ( $shuttersSunriseUnixtime <
 | 
					                          if ( $shuttersSunriseUnixtime <
 | 
				
			||||||
                            ( $oldFuncHash->{sunrisetime} + 180 )
 | 
					                            ( $oldFuncHash->{sunrisetime} + 180 )
 | 
				
			||||||
                            && $oldFuncHash->{sunrisetime} < gettimeofday() );
 | 
					                            && $oldFuncHash->{sunrisetime} < ::gettimeofday() );
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -698,7 +696,7 @@ sub ShuttersSunrise {
 | 
				
			|||||||
                $shuttersSunriseUnixtime = ( $shuttersSunriseUnixtime + 86400 )
 | 
					                $shuttersSunriseUnixtime = ( $shuttersSunriseUnixtime + 86400 )
 | 
				
			||||||
                  if ( $shuttersSunriseUnixtime <
 | 
					                  if ( $shuttersSunriseUnixtime <
 | 
				
			||||||
                    ( $oldFuncHash->{sunrisetime} + 180 )
 | 
					                    ( $oldFuncHash->{sunrisetime} + 180 )
 | 
				
			||||||
                    && $oldFuncHash->{sunrisetime} < gettimeofday() );
 | 
					                    && $oldFuncHash->{sunrisetime} < ::gettimeofday() );
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        elsif ( $FHEM::Automation::ShuttersControl::shutters->getUp eq 'time' )
 | 
					        elsif ( $FHEM::Automation::ShuttersControl::shutters->getUp eq 'time' )
 | 
				
			||||||
@@ -711,8 +709,8 @@ sub ShuttersSunrise {
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if ( !IsWe('tomorrow') ) {
 | 
					                if ( !IsWe('tomorrow') ) {
 | 
				
			||||||
                    if (
 | 
					                    if (
 | 
				
			||||||
                        int( gettimeofday() / 86400 ) == int(
 | 
					                        int( ::gettimeofday() / 86400 ) == int(
 | 
				
			||||||
                            computeAlignTime(
 | 
					                            ::computeAlignTime(
 | 
				
			||||||
                                '24:00',
 | 
					                                '24:00',
 | 
				
			||||||
                                $FHEM::Automation::ShuttersControl::shutters
 | 
					                                $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                                  ->getTimeUpWeHoliday
 | 
					                                  ->getTimeUpWeHoliday
 | 
				
			||||||
@@ -720,13 +718,13 @@ sub ShuttersSunrise {
 | 
				
			|||||||
                        )
 | 
					                        )
 | 
				
			||||||
                      )
 | 
					                      )
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        $shuttersSunriseUnixtime = computeAlignTime( '24:00',
 | 
					                        $shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
 | 
				
			||||||
                            $FHEM::Automation::ShuttersControl::shutters
 | 
					                            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                              ->getTimeUpWeHoliday );
 | 
					                              ->getTimeUpWeHoliday );
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    elsif (
 | 
					                    elsif (
 | 
				
			||||||
                        int( gettimeofday() / 86400 ) == int(
 | 
					                        int( ::gettimeofday() / 86400 ) == int(
 | 
				
			||||||
                            computeAlignTime(
 | 
					                            ::computeAlignTime(
 | 
				
			||||||
                                '24:00',
 | 
					                                '24:00',
 | 
				
			||||||
                                $FHEM::Automation::ShuttersControl::shutters
 | 
					                                $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                                  ->getTimeUpEarly
 | 
					                                  ->getTimeUpEarly
 | 
				
			||||||
@@ -736,12 +734,12 @@ sub ShuttersSunrise {
 | 
				
			|||||||
                        ->getSunrise
 | 
					                        ->getSunrise
 | 
				
			||||||
                      )
 | 
					                      )
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        $shuttersSunriseUnixtime = computeAlignTime( '24:00',
 | 
					                        $shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
 | 
				
			||||||
                            $FHEM::Automation::ShuttersControl::shutters
 | 
					                            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                              ->getTimeUpEarly ) + 86400;
 | 
					                              ->getTimeUpEarly ) + 86400;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    else {
 | 
					                    else {
 | 
				
			||||||
                        $shuttersSunriseUnixtime = computeAlignTime( '24:00',
 | 
					                        $shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
 | 
				
			||||||
                            $FHEM::Automation::ShuttersControl::shutters
 | 
					                            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                              ->getTimeUpEarly );
 | 
					                              ->getTimeUpEarly );
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
@@ -749,8 +747,8 @@ sub ShuttersSunrise {
 | 
				
			|||||||
                else {
 | 
					                else {
 | 
				
			||||||
                    if (
 | 
					                    if (
 | 
				
			||||||
                        IsWe()
 | 
					                        IsWe()
 | 
				
			||||||
                        && int( gettimeofday() / 86400 ) == int(
 | 
					                        && int( ::gettimeofday() / 86400 ) == int(
 | 
				
			||||||
                            computeAlignTime(
 | 
					                            ::computeAlignTime(
 | 
				
			||||||
                                '24:00',
 | 
					                                '24:00',
 | 
				
			||||||
                                $FHEM::Automation::ShuttersControl::shutters
 | 
					                                $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                                  ->getTimeUpWeHoliday
 | 
					                                  ->getTimeUpWeHoliday
 | 
				
			||||||
@@ -758,13 +756,13 @@ sub ShuttersSunrise {
 | 
				
			|||||||
                        )
 | 
					                        )
 | 
				
			||||||
                      )
 | 
					                      )
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        $shuttersSunriseUnixtime = computeAlignTime( '24:00',
 | 
					                        $shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
 | 
				
			||||||
                            $FHEM::Automation::ShuttersControl::shutters
 | 
					                            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                              ->getTimeUpWeHoliday );
 | 
					                              ->getTimeUpWeHoliday );
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    elsif (
 | 
					                    elsif (
 | 
				
			||||||
                        int( gettimeofday() / 86400 ) == int(
 | 
					                        int( ::gettimeofday() / 86400 ) == int(
 | 
				
			||||||
                            computeAlignTime(
 | 
					                            ::computeAlignTime(
 | 
				
			||||||
                                '24:00',
 | 
					                                '24:00',
 | 
				
			||||||
                                $FHEM::Automation::ShuttersControl::shutters
 | 
					                                $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                                  ->getTimeUpEarly
 | 
					                                  ->getTimeUpEarly
 | 
				
			||||||
@@ -772,13 +770,13 @@ sub ShuttersSunrise {
 | 
				
			|||||||
                        )
 | 
					                        )
 | 
				
			||||||
                      )
 | 
					                      )
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        $shuttersSunriseUnixtime = computeAlignTime( '24:00',
 | 
					                        $shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
 | 
				
			||||||
                            $FHEM::Automation::ShuttersControl::shutters
 | 
					                            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                              ->getTimeUpEarly );
 | 
					                              ->getTimeUpEarly );
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    elsif (
 | 
					                    elsif (
 | 
				
			||||||
                        int( gettimeofday() / 86400 ) != int(
 | 
					                        int( ::gettimeofday() / 86400 ) != int(
 | 
				
			||||||
                            computeAlignTime(
 | 
					                            ::computeAlignTime(
 | 
				
			||||||
                                '24:00',
 | 
					                                '24:00',
 | 
				
			||||||
                                $FHEM::Automation::ShuttersControl::shutters
 | 
					                                $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                                  ->getTimeUpWeHoliday
 | 
					                                  ->getTimeUpWeHoliday
 | 
				
			||||||
@@ -786,19 +784,19 @@ sub ShuttersSunrise {
 | 
				
			|||||||
                        )
 | 
					                        )
 | 
				
			||||||
                      )
 | 
					                      )
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        $shuttersSunriseUnixtime = computeAlignTime( '24:00',
 | 
					                        $shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
 | 
				
			||||||
                            $FHEM::Automation::ShuttersControl::shutters
 | 
					                            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                              ->getTimeUpWeHoliday );
 | 
					                              ->getTimeUpWeHoliday );
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    else {
 | 
					                    else {
 | 
				
			||||||
                        $shuttersSunriseUnixtime = computeAlignTime( '24:00',
 | 
					                        $shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
 | 
				
			||||||
                            $FHEM::Automation::ShuttersControl::shutters
 | 
					                            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                              ->getTimeUpWeHoliday ) + 86400;
 | 
					                              ->getTimeUpWeHoliday ) + 86400;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else {
 | 
					            else {
 | 
				
			||||||
                $shuttersSunriseUnixtime = computeAlignTime( '24:00',
 | 
					                $shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
 | 
				
			||||||
                    $FHEM::Automation::ShuttersControl::shutters
 | 
					                    $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                      ->getTimeUpEarly );
 | 
					                      ->getTimeUpEarly );
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -806,15 +804,14 @@ sub ShuttersSunrise {
 | 
				
			|||||||
        elsif ( $FHEM::Automation::ShuttersControl::shutters->getUp eq
 | 
					        elsif ( $FHEM::Automation::ShuttersControl::shutters->getUp eq
 | 
				
			||||||
            'brightness' )
 | 
					            'brightness' )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            $shuttersSunriseUnixtime = computeAlignTime( '24:00',
 | 
					            $shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
 | 
				
			||||||
                $FHEM::Automation::ShuttersControl::shutters->getTimeUpLate
 | 
					                $FHEM::Automation::ShuttersControl::shutters->getTimeUpLate );
 | 
				
			||||||
            );
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $shuttersSunriseUnixtime;
 | 
					        return $shuttersSunriseUnixtime;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    elsif ( $tm eq 'real' ) {
 | 
					    elsif ( $tm eq 'real' ) {
 | 
				
			||||||
        return sunrise_abs(
 | 
					        return ::sunrise_abs(
 | 
				
			||||||
            $autoAstroMode,
 | 
					            $autoAstroMode,
 | 
				
			||||||
            0,
 | 
					            0,
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::shutters->getTimeUpEarly,
 | 
					            $FHEM::Automation::ShuttersControl::shutters->getTimeUpEarly,
 | 
				
			||||||
@@ -858,15 +855,15 @@ sub ShuttersSunset {
 | 
				
			|||||||
    my $oldFuncHash =
 | 
					    my $oldFuncHash =
 | 
				
			||||||
      $FHEM::Automation::ShuttersControl::shutters->getInTimerFuncHash;
 | 
					      $FHEM::Automation::ShuttersControl::shutters->getInTimerFuncHash;
 | 
				
			||||||
    my $shuttersSunsetUnixtime =
 | 
					    my $shuttersSunsetUnixtime =
 | 
				
			||||||
      computeAlignTime( '24:00', sunset( 'REAL', 0, '15:30', '21:30' ) );
 | 
					      ::computeAlignTime( '24:00', ::sunset( 'REAL', 0, '15:30', '21:30' ) );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ( $tm eq 'unix' ) {
 | 
					    if ( $tm eq 'unix' ) {
 | 
				
			||||||
        if ( $FHEM::Automation::ShuttersControl::shutters->getDown eq 'astro' )
 | 
					        if ( $FHEM::Automation::ShuttersControl::shutters->getDown eq 'astro' )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            $shuttersSunsetUnixtime = (
 | 
					            $shuttersSunsetUnixtime = (
 | 
				
			||||||
                computeAlignTime(
 | 
					                ::computeAlignTime(
 | 
				
			||||||
                    '24:00',
 | 
					                    '24:00',
 | 
				
			||||||
                    sunset_abs(
 | 
					                    ::sunset_abs(
 | 
				
			||||||
                        $autoAstroMode,
 | 
					                        $autoAstroMode,
 | 
				
			||||||
                        0,
 | 
					                        0,
 | 
				
			||||||
                        $FHEM::Automation::ShuttersControl::shutters
 | 
					                        $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -880,13 +877,13 @@ sub ShuttersSunset {
 | 
				
			|||||||
                $shuttersSunsetUnixtime += 86400
 | 
					                $shuttersSunsetUnixtime += 86400
 | 
				
			||||||
                  if ( $shuttersSunsetUnixtime <
 | 
					                  if ( $shuttersSunsetUnixtime <
 | 
				
			||||||
                    ( $oldFuncHash->{sunsettime} + 180 )
 | 
					                    ( $oldFuncHash->{sunsettime} + 180 )
 | 
				
			||||||
                    && $oldFuncHash->{sunsettime} < gettimeofday() );
 | 
					                    && $oldFuncHash->{sunsettime} < ::gettimeofday() );
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        elsif (
 | 
					        elsif (
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::shutters->getDown eq 'time' )
 | 
					            $FHEM::Automation::ShuttersControl::shutters->getDown eq 'time' )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            $shuttersSunsetUnixtime = computeAlignTime( '24:00',
 | 
					            $shuttersSunsetUnixtime = ::computeAlignTime( '24:00',
 | 
				
			||||||
                $FHEM::Automation::ShuttersControl::shutters->getTimeDownEarly
 | 
					                $FHEM::Automation::ShuttersControl::shutters->getTimeDownEarly
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -894,13 +891,13 @@ sub ShuttersSunset {
 | 
				
			|||||||
            'brightness' )
 | 
					            'brightness' )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            $shuttersSunsetUnixtime =
 | 
					            $shuttersSunsetUnixtime =
 | 
				
			||||||
              computeAlignTime( '24:00',
 | 
					              ::computeAlignTime( '24:00',
 | 
				
			||||||
                $FHEM::Automation::ShuttersControl::shutters->getTimeDownLate );
 | 
					                $FHEM::Automation::ShuttersControl::shutters->getTimeDownLate );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return $shuttersSunsetUnixtime;
 | 
					        return $shuttersSunsetUnixtime;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    elsif ( $tm eq 'real' ) {
 | 
					    elsif ( $tm eq 'real' ) {
 | 
				
			||||||
        return sunset_abs(
 | 
					        return ::sunset_abs(
 | 
				
			||||||
            $autoAstroMode,
 | 
					            $autoAstroMode,
 | 
				
			||||||
            0,
 | 
					            0,
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::shutters->getTimeDownEarly,
 | 
					            $FHEM::Automation::ShuttersControl::shutters->getTimeDownEarly,
 | 
				
			||||||
@@ -923,7 +920,7 @@ sub IsAfterShuttersTimeBlocking {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (
 | 
					    if (
 | 
				
			||||||
        (
 | 
					        (
 | 
				
			||||||
            int( gettimeofday() ) -
 | 
					            int( ::gettimeofday() ) -
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::shutters->getLastManPosTimestamp
 | 
					            $FHEM::Automation::ShuttersControl::shutters->getLastManPosTimestamp
 | 
				
			||||||
        ) <
 | 
					        ) <
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::shutters->getBlockingTimeAfterManual
 | 
					        $FHEM::Automation::ShuttersControl::shutters->getBlockingTimeAfterManual
 | 
				
			||||||
@@ -933,7 +930,7 @@ sub IsAfterShuttersTimeBlocking {
 | 
				
			|||||||
                $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
 | 
					                $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
            && $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
 | 
					            && $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
 | 
				
			||||||
            - ( int( gettimeofday() ) ) <
 | 
					            - ( int( ::gettimeofday() ) ) <
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::shutters
 | 
					            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
            ->getBlockingTimeBeforDayOpen
 | 
					            ->getBlockingTimeBeforDayOpen
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
@@ -943,7 +940,7 @@ sub IsAfterShuttersTimeBlocking {
 | 
				
			|||||||
                $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
 | 
					                $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
            && $FHEM::Automation::ShuttersControl::shutters->getSunsetUnixTime
 | 
					            && $FHEM::Automation::ShuttersControl::shutters->getSunsetUnixTime
 | 
				
			||||||
            - ( int( gettimeofday() ) ) <
 | 
					            - ( int( ::gettimeofday() ) ) <
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::shutters
 | 
					            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
            ->getBlockingTimeBeforNightClose
 | 
					            ->getBlockingTimeBeforNightClose
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
@@ -982,7 +979,7 @@ sub IsAfterShuttersManualBlocking {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    elsif (
 | 
					    elsif (
 | 
				
			||||||
        (
 | 
					        (
 | 
				
			||||||
            int( gettimeofday() ) -
 | 
					            int( ::gettimeofday() ) -
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::shutters->getLastManPosTimestamp
 | 
					            $FHEM::Automation::ShuttersControl::shutters->getLastManPosTimestamp
 | 
				
			||||||
        ) <
 | 
					        ) <
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::shutters->getBlockingTimeAfterManual
 | 
					        $FHEM::Automation::ShuttersControl::shutters->getBlockingTimeAfterManual
 | 
				
			||||||
@@ -1019,21 +1016,29 @@ sub PerlCodeCheck {
 | 
				
			|||||||
sub IsAdv {
 | 
					sub IsAdv {
 | 
				
			||||||
    use HTTP::Date;
 | 
					    use HTTP::Date;
 | 
				
			||||||
    my ( undef, undef, undef, $monthday, $month, $year, undef, undef, undef ) =
 | 
					    my ( undef, undef, undef, $monthday, $month, $year, undef, undef, undef ) =
 | 
				
			||||||
      localtime( gettimeofday() );
 | 
					      localtime( ::gettimeofday() );
 | 
				
			||||||
    my $adv = 0;
 | 
					    my $adv = 0;
 | 
				
			||||||
    $year += 1900;
 | 
					    $year += 1900;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ( $month < 1 ) {
 | 
					    if (   $month < 1
 | 
				
			||||||
        if ( $monthday < 7 ) {
 | 
					        && $FHEM::Automation::ShuttersControl::ascDev->getAdvEndDate eq
 | 
				
			||||||
            $adv = 1;
 | 
					        'EpiphanyDay' )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $adv = $monthday < 7 ? 1 : 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    elsif ($month < 2
 | 
				
			||||||
 | 
					        && $FHEM::Automation::ShuttersControl::ascDev->getAdvEndDate eq
 | 
				
			||||||
 | 
					        'CandlemasDay' )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $adv = $month = 1 || ( $month = 2 && $monthday < 3 ) ? 1 : 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else {
 | 
					    else {
 | 
				
			||||||
        my $time = str2time( $year . '-12-25' );
 | 
					        my $time = str2time( $year . '-12-25' );
 | 
				
			||||||
        my $wday = ( localtime($time) )[6];
 | 
					        my $wday = ( localtime($time) )[6];
 | 
				
			||||||
        $wday = $wday ? $wday : 7;
 | 
					        $wday = $wday ? $wday : 7;
 | 
				
			||||||
        $time -= ( $FHEM::Automation::ShuttersControl::ascDev
 | 
					        $time -= (
 | 
				
			||||||
            ->getAdvDate eq 'DeadSunday'
 | 
					            $FHEM::Automation::ShuttersControl::ascDev->getAdvStartDate eq
 | 
				
			||||||
 | 
					              'DeadSunday'
 | 
				
			||||||
            ? ( $wday + 27 ) * 86400
 | 
					            ? ( $wday + 27 ) * 86400
 | 
				
			||||||
            : ( $wday + 21 ) * 86400
 | 
					            : ( $wday + 21 ) * 86400
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
@@ -1047,7 +1052,8 @@ sub IsInTime {
 | 
				
			|||||||
    my $dfi = shift;
 | 
					    my $dfi = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $dfi =~ s/{([^\x7d]*)}/$cmdFromAnalyze=$1; eval $1/ge;    # Forum #69787
 | 
					    $dfi =~ s/{([^\x7d]*)}/$cmdFromAnalyze=$1; eval $1/ge;    # Forum #69787
 | 
				
			||||||
    my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime(gettimeofday());
 | 
					    my ( $sec, $min, $hour, $mday, $month, $year, $wday, $yday, $isdst ) =
 | 
				
			||||||
 | 
					      localtime( ::gettimeofday() );
 | 
				
			||||||
    my $dhms = sprintf( "%s\@%02d:%02d:%02d", $wday, $hour, $min, $sec );
 | 
					    my $dhms = sprintf( "%s\@%02d:%02d:%02d", $wday, $hour, $min, $sec );
 | 
				
			||||||
    foreach my $ft ( split( " ", $dfi ) ) {
 | 
					    foreach my $ft ( split( " ", $dfi ) ) {
 | 
				
			||||||
        my ( $from, $to ) = split( "-", $ft );
 | 
					        my ( $from, $to ) = split( "-", $ft );
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
###############################################################################
 | 
					###############################################################################
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Developed with Kate
 | 
					# Developed with VSCodium and richterger perl plugin
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#  (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net)
 | 
					#  (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
 | 
				
			||||||
#  All rights reserved
 | 
					#  All rights reserved
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#   Special thanks goes to:
 | 
					#   Special thanks goes to:
 | 
				
			||||||
@@ -47,7 +47,9 @@ use utf8;
 | 
				
			|||||||
use FHEM::Automation::ShuttersControl::Helper qw (:ALL);
 | 
					use FHEM::Automation::ShuttersControl::Helper qw (:ALL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require Exporter;
 | 
					require Exporter;
 | 
				
			||||||
our @ISA       = qw(Exporter);
 | 
					use base qw(Exporter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# our @ISA       = qw(Exporter);
 | 
				
			||||||
our @EXPORT_OK = qw(
 | 
					our @EXPORT_OK = qw(
 | 
				
			||||||
  RainProcessing
 | 
					  RainProcessing
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
@@ -59,7 +61,6 @@ our %EXPORT_TAGS = (
 | 
				
			|||||||
    ],
 | 
					    ],
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
sub RainProcessing {
 | 
					sub RainProcessing {
 | 
				
			||||||
    my ( $hash, $val, $triggerMax, $triggerMin ) = @_;
 | 
					    my ( $hash, $val, $triggerMax, $triggerMin ) = @_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -75,7 +76,8 @@ sub RainProcessing {
 | 
				
			|||||||
            $FHEM::Automation::ShuttersControl::shutters->getRainProtection eq
 | 
					            $FHEM::Automation::ShuttersControl::shutters->getRainProtection eq
 | 
				
			||||||
            'off' );
 | 
					            'off' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (   $val > $triggerMax
 | 
					        if (
 | 
				
			||||||
 | 
					               $val > $triggerMax
 | 
				
			||||||
            && $FHEM::Automation::ShuttersControl::shutters->getStatus !=
 | 
					            && $FHEM::Automation::ShuttersControl::shutters->getStatus !=
 | 
				
			||||||
            $rainClosedPos
 | 
					            $rainClosedPos
 | 
				
			||||||
            && $FHEM::Automation::ShuttersControl::shutters
 | 
					            && $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -95,20 +97,23 @@ sub RainProcessing {
 | 
				
			|||||||
            && $FHEM::Automation::ShuttersControl::shutters
 | 
					            && $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
            ->getRainProtectionStatus eq 'protected' )
 | 
					            ->getRainProtectionStatus eq 'protected' )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            my %funcHash = (
 | 
					            my %funcHash = ( shuttersdevice => $shuttersDev, );
 | 
				
			||||||
                shuttersdevice => $shuttersDev,
 | 
					 | 
				
			||||||
            );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj(\%funcHash);
 | 
					            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
            ::InternalTimer( ::gettimeofday() + $FHEM::Automation::ShuttersControl::ascDev->getRainWaitingTime
 | 
					              ->setRainUnprotectionDelayObj( \%funcHash );
 | 
				
			||||||
                , \&_RainUnprotected
 | 
					            ::InternalTimer(
 | 
				
			||||||
                , \%funcHash );
 | 
					                ::gettimeofday() +
 | 
				
			||||||
 | 
					                  $FHEM::Automation::ShuttersControl::ascDev
 | 
				
			||||||
 | 
					                  ->getRainWaitingTime,
 | 
				
			||||||
 | 
					                \&_RainUnprotected, \%funcHash
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::shutters
 | 
					            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
              ->setRainProtectionStatus('unprotected');
 | 
					              ->setRainProtectionStatus('unprotected');
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else {
 | 
					        else {
 | 
				
			||||||
            if (  $FHEM::Automation::ShuttersControl::shutters->getStatus != $rainClosedPos
 | 
					            if ( $FHEM::Automation::ShuttersControl::shutters->getStatus !=
 | 
				
			||||||
 | 
					                $rainClosedPos
 | 
				
			||||||
                && ( $val == 0 || $val < $triggerMin ) )
 | 
					                && ( $val == 0 || $val < $triggerMin ) )
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                $FHEM::Automation::ShuttersControl::shutters
 | 
					                $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -126,10 +131,13 @@ sub RainProcessing {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### 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
 | 
					### 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 {
 | 
					sub _RainProtected {
 | 
				
			||||||
    ::RemoveInternalTimer($FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj)
 | 
					    ::RemoveInternalTimer( $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
        if($FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj ne 'none');
 | 
					          ->getRainUnprotectionDelayObj )
 | 
				
			||||||
 | 
					      if ( $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
 | 
					        ->getRainUnprotectionDelayObj ne 'none' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj('none');
 | 
					    $FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj(
 | 
				
			||||||
 | 
					        'none');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
 | 
					    $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
 | 
				
			||||||
        'rain protected');
 | 
					        'rain protected');
 | 
				
			||||||
@@ -138,29 +146,38 @@ sub _RainProtected {
 | 
				
			|||||||
        $FHEM::Automation::ShuttersControl::ascDev
 | 
					        $FHEM::Automation::ShuttersControl::ascDev
 | 
				
			||||||
          ->getRainSensorShuttersClosedPos );
 | 
					          ->getRainSensorShuttersClosedPos );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $FHEM::Automation::ShuttersControl::shutters
 | 
					    $FHEM::Automation::ShuttersControl::shutters->setRainProtectionStatus(
 | 
				
			||||||
        ->setRainProtectionStatus('protected');
 | 
					        'protected');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub _RainUnprotected {
 | 
					sub _RainUnprotected {
 | 
				
			||||||
    my $h = shift;
 | 
					    my $h = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $shuttersDev = $h->{shuttersdevice};
 | 
					    my $shuttersDev = $h->{shuttersdevice};
 | 
				
			||||||
    $FHEM::Automation::ShuttersControl::shutters->setShuttersDev(
 | 
					    $FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev);
 | 
				
			||||||
            $shuttersDev);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
 | 
					    $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
 | 
				
			||||||
        'rain un-protected');
 | 
					        'rain un-protected');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ( $FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj ne 'none' ) {
 | 
					    if ( $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
        ::RemoveInternalTimer($FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj);
 | 
					        ->getRainUnprotectionDelayObj ne 'none' )
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj('none');
 | 
					    {
 | 
				
			||||||
 | 
					        ::RemoveInternalTimer( $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
 | 
					              ->getRainUnprotectionDelayObj );
 | 
				
			||||||
 | 
					        $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
 | 
					          ->setRainUnprotectionDelayObj('none');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $FHEM::Automation::ShuttersControl::shutters->setDriveCmd(
 | 
					    $FHEM::Automation::ShuttersControl::shutters->setDriveCmd(
 | 
				
			||||||
        (
 | 
					        (
 | 
				
			||||||
              $FHEM::Automation::ShuttersControl::shutters->getIsDay
 | 
					              $FHEM::Automation::ShuttersControl::shutters->getIsDay
 | 
				
			||||||
            ? $FHEM::Automation::ShuttersControl::shutters->getLastPos
 | 
					            ? $FHEM::Automation::ShuttersControl::shutters->getLastPos
 | 
				
			||||||
 | 
					            : (
 | 
				
			||||||
 | 
					                $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace
 | 
				
			||||||
 | 
					                  eq 'awning'
 | 
				
			||||||
 | 
					                ? $FHEM::Automation::ShuttersControl::shutters->getOpenPos
 | 
				
			||||||
                : (
 | 
					                : (
 | 
				
			||||||
                    $FHEM::Automation::ShuttersControl::shutters
 | 
					                    $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                      ->getPrivacyDownStatus == 2
 | 
					                      ->getPrivacyDownStatus == 2
 | 
				
			||||||
@@ -171,13 +188,12 @@ sub _RainUnprotected {
 | 
				
			|||||||
                )
 | 
					                )
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
    if (IsAfterShuttersTimeBlocking($shuttersDev));
 | 
					    ) if ( IsAfterShuttersTimeBlocking($shuttersDev) );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $FHEM::Automation::ShuttersControl::shutters
 | 
					    $FHEM::Automation::ShuttersControl::shutters->setRainProtectionStatus(
 | 
				
			||||||
        ->setRainProtectionStatus('unprotected');
 | 
					        'unprotected');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1;
 | 
					1;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
###############################################################################
 | 
					###############################################################################
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Developed with Kate
 | 
					# Developed with VSCodium and richterger perl plugin
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#  (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net)
 | 
					#  (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
 | 
				
			||||||
#  All rights reserved
 | 
					#  All rights reserved
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#   Special thanks goes to:
 | 
					#   Special thanks goes to:
 | 
				
			||||||
@@ -44,37 +44,41 @@ use strict;
 | 
				
			|||||||
use warnings;
 | 
					use warnings;
 | 
				
			||||||
use utf8;
 | 
					use utf8;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use GPUtils qw(GP_Import);
 | 
					require Exporter;
 | 
				
			||||||
 | 
					use base qw(Exporter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Import der FHEM Funktionen
 | 
					# our @ISA       = qw(Exporter);
 | 
				
			||||||
BEGIN {
 | 
					our @EXPORT_OK = qw(
 | 
				
			||||||
    GP_Import(
 | 
					  getRoommateStatus
 | 
				
			||||||
        qw(
 | 
					  getRoommateLastStatus
 | 
				
			||||||
          ReadingsVal)
 | 
					);
 | 
				
			||||||
 | 
					our %EXPORT_TAGS = (
 | 
				
			||||||
 | 
					    ALL => [
 | 
				
			||||||
 | 
					        qw(
 | 
				
			||||||
 | 
					          getRoommateStatus
 | 
				
			||||||
 | 
					          getRoommateLastStatus
 | 
				
			||||||
 | 
					          )
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub _getRoommateStatus {
 | 
					sub getRoommateStatus {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $roommate = $self->{roommate};
 | 
					    my $roommate = $self->{roommate};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return ReadingsVal( $roommate,
 | 
					    return ::ReadingsVal( $roommate,
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::shutters->getRoommatesReading,
 | 
					        $FHEM::Automation::ShuttersControl::shutters->getRoommatesReading,
 | 
				
			||||||
        'none' );
 | 
					        'none' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub _getRoommateLastStatus {
 | 
					sub getRoommateLastStatus {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $roommate = $self->{roommate};
 | 
					    my $roommate = $self->{roommate};
 | 
				
			||||||
    my $default  = $self->{defaultarg};
 | 
					    my $default  = $self->{defaultarg};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $default = 'none' if ( !defined($default) );
 | 
					    $default = 'none' if ( !defined($default) );
 | 
				
			||||||
    return ReadingsVal( $roommate, 'lastState', $default );
 | 
					    return ::ReadingsVal( $roommate, 'lastState', $default );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1;
 | 
					1;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
###############################################################################
 | 
					###############################################################################
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Developed with Kate
 | 
					# Developed with VSCodium and richterger perl plugin
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#  (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net)
 | 
					#  (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
 | 
				
			||||||
#  All rights reserved
 | 
					#  All rights reserved
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#   Special thanks goes to:
 | 
					#   Special thanks goes to:
 | 
				
			||||||
@@ -48,7 +48,9 @@ use utf8;
 | 
				
			|||||||
use FHEM::Automation::ShuttersControl::Helper qw (IsInTime);
 | 
					use FHEM::Automation::ShuttersControl::Helper qw (IsInTime);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require Exporter;
 | 
					require Exporter;
 | 
				
			||||||
our @ISA       = qw(Exporter);
 | 
					use base qw(Exporter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# our @ISA       = qw(Exporter);
 | 
				
			||||||
our @EXPORT_OK = qw(
 | 
					our @EXPORT_OK = qw(
 | 
				
			||||||
  CheckASC_ConditionsForShadingFn
 | 
					  CheckASC_ConditionsForShadingFn
 | 
				
			||||||
  ShadingProcessing
 | 
					  ShadingProcessing
 | 
				
			||||||
@@ -64,24 +66,6 @@ our %EXPORT_TAGS = (
 | 
				
			|||||||
    ],
 | 
					    ],
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use GPUtils qw(GP_Import);
 | 
					 | 
				
			||||||
## Import der FHEM Funktionen
 | 
					 | 
				
			||||||
BEGIN {
 | 
					 | 
				
			||||||
    GP_Import(
 | 
					 | 
				
			||||||
        qw(
 | 
					 | 
				
			||||||
          Log3
 | 
					 | 
				
			||||||
          gettimeofday
 | 
					 | 
				
			||||||
          InternalTimer
 | 
					 | 
				
			||||||
          ReadingsVal
 | 
					 | 
				
			||||||
          readingsBeginUpdate
 | 
					 | 
				
			||||||
          readingsBulkUpdate
 | 
					 | 
				
			||||||
          readingsBulkUpdateIfChanged
 | 
					 | 
				
			||||||
          readingsEndUpdate
 | 
					 | 
				
			||||||
          defs
 | 
					 | 
				
			||||||
          )
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub CheckASC_ConditionsForShadingFn {
 | 
					sub CheckASC_ConditionsForShadingFn {
 | 
				
			||||||
    my $hash  = shift;
 | 
					    my $hash  = shift;
 | 
				
			||||||
    my $value = shift;
 | 
					    my $value = shift;
 | 
				
			||||||
@@ -104,8 +88,8 @@ sub CheckASC_ConditionsForShadingFn {
 | 
				
			|||||||
            attrEvent      => 0,
 | 
					            attrEvent      => 0,
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        InternalTimer(
 | 
					        ::InternalTimer(
 | 
				
			||||||
            gettimeofday() + $count,
 | 
					            ::gettimeofday() + $count,
 | 
				
			||||||
'FHEM::Automation::ShuttersControl::Shading::_CheckShuttersConditionsForShadingFn',
 | 
					'FHEM::Automation::ShuttersControl::Shading::_CheckShuttersConditionsForShadingFn',
 | 
				
			||||||
            \%funcHash
 | 
					            \%funcHash
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
@@ -128,7 +112,7 @@ sub _CheckShuttersConditionsForShadingFn {
 | 
				
			|||||||
    my $value       = $funcHash->{value};
 | 
					    my $value       = $funcHash->{value};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev);
 | 
					    $FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev);
 | 
				
			||||||
    my $shuttersDevHash = $defs{$shuttersDev};
 | 
					    my $shuttersDevHash = $::defs{$shuttersDev};
 | 
				
			||||||
    my $message         = '';
 | 
					    my $message         = '';
 | 
				
			||||||
    my $errorMessage;
 | 
					    my $errorMessage;
 | 
				
			||||||
    my $warnMessage;
 | 
					    my $warnMessage;
 | 
				
			||||||
@@ -136,22 +120,26 @@ sub _CheckShuttersConditionsForShadingFn {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if ( $value eq 'off' ) {
 | 
					    if ( $value eq 'off' ) {
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::shutters->setShadingStatus('out');
 | 
					        $FHEM::Automation::ShuttersControl::shutters->setShadingStatus('out');
 | 
				
			||||||
        $infoMessage    .= ' shading was deactivated ' . ($funcHash->{attrEvent} ? 'in the device' : 'globally');
 | 
					        $infoMessage .= ' shading was deactivated '
 | 
				
			||||||
 | 
					          . ( $funcHash->{attrEvent} ? 'in the device' : 'globally' );
 | 
				
			||||||
        $errorMessage .= '';
 | 
					        $errorMessage .= '';
 | 
				
			||||||
        ShadingProcessingDriveCommand( $hash, $shuttersDev );
 | 
					        ShadingProcessingDriveCommand( $hash, $shuttersDev );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else {
 | 
					    else {
 | 
				
			||||||
        $infoMessage .= (
 | 
					        $infoMessage .= (
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::shutters->getShadingMode ne 'off'
 | 
					            $FHEM::Automation::ShuttersControl::shutters->getShadingMode ne
 | 
				
			||||||
 | 
					              'off'
 | 
				
			||||||
              && $FHEM::Automation::ShuttersControl::ascDev
 | 
					              && $FHEM::Automation::ShuttersControl::ascDev
 | 
				
			||||||
              ->getAutoShuttersControlShading eq 'on'
 | 
					              ->getAutoShuttersControlShading eq 'on'
 | 
				
			||||||
            && $FHEM::Automation::ShuttersControl::shutters->getOutTemp == -100
 | 
					              && $FHEM::Automation::ShuttersControl::shutters->getOutTemp ==
 | 
				
			||||||
 | 
					              -100
 | 
				
			||||||
            ? ' shading active, global temp sensor is set, but shutters temperature sensor is not set'
 | 
					            ? ' shading active, global temp sensor is set, but shutters temperature sensor is not set'
 | 
				
			||||||
            : ''
 | 
					            : ''
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $warnMessage .= (
 | 
					        $warnMessage .= (
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq 'off'
 | 
					            $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq
 | 
				
			||||||
 | 
					              'off'
 | 
				
			||||||
              && $FHEM::Automation::ShuttersControl::ascDev
 | 
					              && $FHEM::Automation::ShuttersControl::ascDev
 | 
				
			||||||
              ->getAutoShuttersControlShading eq 'on'
 | 
					              ->getAutoShuttersControlShading eq 'on'
 | 
				
			||||||
            ? ' global shading active but ASC_Shading_Mode attribut is not set or off'
 | 
					            ? ' global shading active but ASC_Shading_Mode attribut is not set or off'
 | 
				
			||||||
@@ -159,7 +147,8 @@ sub _CheckShuttersConditionsForShadingFn {
 | 
				
			|||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $errorMessage .= (
 | 
					        $errorMessage .= (
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::shutters->getShadingMode ne 'off'
 | 
					            $FHEM::Automation::ShuttersControl::shutters->getShadingMode ne
 | 
				
			||||||
 | 
					              'off'
 | 
				
			||||||
              && $FHEM::Automation::ShuttersControl::ascDev
 | 
					              && $FHEM::Automation::ShuttersControl::ascDev
 | 
				
			||||||
              ->getAutoShuttersControlShading ne 'on'
 | 
					              ->getAutoShuttersControlShading ne 'on'
 | 
				
			||||||
              && $FHEM::Automation::ShuttersControl::ascDev
 | 
					              && $FHEM::Automation::ShuttersControl::ascDev
 | 
				
			||||||
@@ -167,17 +156,17 @@ sub _CheckShuttersConditionsForShadingFn {
 | 
				
			|||||||
            ? ' ASC_Shading_Mode attribut is set but global shading has errors, look at ASC device '
 | 
					            ? ' ASC_Shading_Mode attribut is set but global shading has errors, look at ASC device '
 | 
				
			||||||
              . '<a href="'
 | 
					              . '<a href="'
 | 
				
			||||||
              . '/fhem?detail='
 | 
					              . '/fhem?detail='
 | 
				
			||||||
            . ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' )
 | 
					              . ::ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' )
 | 
				
			||||||
              . $::FW_CSRF . '">'
 | 
					              . $::FW_CSRF . '">'
 | 
				
			||||||
            . ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' )
 | 
					              . ::ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' )
 | 
				
			||||||
              . '</a>'
 | 
					              . '</a>'
 | 
				
			||||||
            : ''
 | 
					            : ''
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $errorMessage .= (
 | 
					        $errorMessage .= (
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::shutters->getBrightness == -1
 | 
					            $FHEM::Automation::ShuttersControl::shutters->getBrightness == -1
 | 
				
			||||||
            && $FHEM::Automation::ShuttersControl::shutters->getShadingMode ne
 | 
					              && $FHEM::Automation::ShuttersControl::shutters->getShadingMode
 | 
				
			||||||
            'off'
 | 
					              ne 'off'
 | 
				
			||||||
            ? ' no brightness sensor found, please set ASC_BrightnessSensor attribut'
 | 
					            ? ' no brightness sensor found, please set ASC_BrightnessSensor attribut'
 | 
				
			||||||
            : ''
 | 
					            : ''
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
@@ -197,10 +186,12 @@ sub _CheckShuttersConditionsForShadingFn {
 | 
				
			|||||||
        && $infoMessage ne ''
 | 
					        && $infoMessage ne ''
 | 
				
			||||||
        && $errorMessage eq '' );
 | 
					        && $errorMessage eq '' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    readingsBeginUpdate($shuttersDevHash);
 | 
					    ::readingsBeginUpdate($shuttersDevHash);
 | 
				
			||||||
    readingsBulkUpdateIfChanged( $shuttersDevHash, 'ASC_ShadingMessage',
 | 
					    ::readingsBulkUpdateIfChanged( $shuttersDevHash, 'ASC_ShadingMessage',
 | 
				
			||||||
        '<html>' . $message . ' </html>' );
 | 
					        '<html>' . $message . ' </html>' );
 | 
				
			||||||
    readingsEndUpdate( $shuttersDevHash, 1 );
 | 
					    ::readingsEndUpdate( $shuttersDevHash, 1 );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub ShadingProcessing {
 | 
					sub ShadingProcessing {
 | 
				
			||||||
@@ -216,10 +207,16 @@ sub ShadingProcessing {
 | 
				
			|||||||
    my $brightness =
 | 
					    my $brightness =
 | 
				
			||||||
      $FHEM::Automation::ShuttersControl::shutters->getBrightnessAverage;
 | 
					      $FHEM::Automation::ShuttersControl::shutters->getBrightnessAverage;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $FHEM::Automation::ShuttersControl::shutters->setShadingBetweenTheTimeSuspend(
 | 
					    $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
          ( IsInTime($FHEM::Automation::ShuttersControl::shutters->getShadingBetweenTheTime)
 | 
					      ->setShadingBetweenTheTimeSuspend(
 | 
				
			||||||
 | 
					        (
 | 
				
			||||||
 | 
					            IsInTime(
 | 
				
			||||||
 | 
					                $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
 | 
					                  ->getShadingBetweenTheTime
 | 
				
			||||||
 | 
					              )
 | 
				
			||||||
            ? 0
 | 
					            ? 0
 | 
				
			||||||
        : 1 )
 | 
					            : 1
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    FHEM::Automation::ShuttersControl::ASC_Debug(
 | 
					    FHEM::Automation::ShuttersControl::ASC_Debug(
 | 
				
			||||||
@@ -250,7 +247,7 @@ sub ShadingProcessing {
 | 
				
			|||||||
          . ', Ist es nach der Hälfte der Beschattungswartezeit: '
 | 
					          . ', Ist es nach der Hälfte der Beschattungswartezeit: '
 | 
				
			||||||
          . (
 | 
					          . (
 | 
				
			||||||
            (
 | 
					            (
 | 
				
			||||||
                int( gettimeofday() ) -
 | 
					                int( ::gettimeofday() ) -
 | 
				
			||||||
                  $FHEM::Automation::ShuttersControl::shutters
 | 
					                  $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                  ->getShadingStatusTimestamp
 | 
					                  ->getShadingStatusTimestamp
 | 
				
			||||||
            ) < (
 | 
					            ) < (
 | 
				
			||||||
@@ -260,7 +257,7 @@ sub ShadingProcessing {
 | 
				
			|||||||
          )
 | 
					          )
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Log3( $name, 4,
 | 
					    ::Log3( $name, 4,
 | 
				
			||||||
            "AutoShuttersControl ($name) - Shading Processing, Rollladen: "
 | 
					            "AutoShuttersControl ($name) - Shading Processing, Rollladen: "
 | 
				
			||||||
          . $shuttersDev
 | 
					          . $shuttersDev
 | 
				
			||||||
          . " Azimuth: "
 | 
					          . " Azimuth: "
 | 
				
			||||||
@@ -279,18 +276,20 @@ sub ShadingProcessing {
 | 
				
			|||||||
        || $brightness == -1
 | 
					        || $brightness == -1
 | 
				
			||||||
        || $outTemp == -100
 | 
					        || $outTemp == -100
 | 
				
			||||||
        || (
 | 
					        || (
 | 
				
			||||||
            int( gettimeofday() ) -
 | 
					            int( ::gettimeofday() ) -
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::shutters
 | 
					            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
            ->getShadingStatusTimestamp ) < (
 | 
					            ->getShadingStatusTimestamp ) < (
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::shutters
 | 
					            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
              ->getShadingWaitingPeriod / 2
 | 
					              ->getShadingWaitingPeriod / 2
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
 | 
					        || $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
 | 
					        ->getExternalTriggerStatus
 | 
				
			||||||
        || $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq 'off'
 | 
					        || $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq 'off'
 | 
				
			||||||
        || $FHEM::Automation::ShuttersControl::ascDev
 | 
					        || $FHEM::Automation::ShuttersControl::ascDev
 | 
				
			||||||
        ->getAutoShuttersControlShading eq 'off'
 | 
					        ->getAutoShuttersControlShading eq 'off'
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Log3( $name, 4,
 | 
					    ::Log3( $name, 4,
 | 
				
			||||||
            "AutoShuttersControl ($name) - Shading Processing, Rollladen: "
 | 
					            "AutoShuttersControl ($name) - Shading Processing, Rollladen: "
 | 
				
			||||||
          . $shuttersDev
 | 
					          . $shuttersDev
 | 
				
			||||||
          . " Nach dem return" );
 | 
					          . " Nach dem return" );
 | 
				
			||||||
@@ -300,7 +299,7 @@ sub ShadingProcessing {
 | 
				
			|||||||
    my $getStatus = $FHEM::Automation::ShuttersControl::shutters->getStatus;
 | 
					    my $getStatus = $FHEM::Automation::ShuttersControl::shutters->getStatus;
 | 
				
			||||||
    my $oldShadingStatus =
 | 
					    my $oldShadingStatus =
 | 
				
			||||||
      $FHEM::Automation::ShuttersControl::shutters->getShadingStatus;
 | 
					      $FHEM::Automation::ShuttersControl::shutters->getShadingStatus;
 | 
				
			||||||
    my $shuttersDevHash = $defs{$shuttersDev};
 | 
					    my $shuttersDevHash = $::defs{$shuttersDev};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $getModeUp = $FHEM::Automation::ShuttersControl::shutters->getModeUp;
 | 
					    my $getModeUp = $FHEM::Automation::ShuttersControl::shutters->getModeUp;
 | 
				
			||||||
    my $homemode  = $FHEM::Automation::ShuttersControl::shutters->getHomemode;
 | 
					    my $homemode  = $FHEM::Automation::ShuttersControl::shutters->getHomemode;
 | 
				
			||||||
@@ -317,8 +316,8 @@ sub ShadingProcessing {
 | 
				
			|||||||
            || $azimuth < $azimuthLeft
 | 
					            || $azimuth < $azimuthLeft
 | 
				
			||||||
            || $azimuth > $azimuthRight
 | 
					            || $azimuth > $azimuthRight
 | 
				
			||||||
            || (  !$FHEM::Automation::ShuttersControl::shutters->getIsDay
 | 
					            || (  !$FHEM::Automation::ShuttersControl::shutters->getIsDay
 | 
				
			||||||
                && $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
 | 
					                && $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                  - ( int( gettimeofday() ) ) > 7200 )
 | 
					                ->getSunriseUnixTime - ( int( ::gettimeofday() ) ) > 7200 )
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && $FHEM::Automation::ShuttersControl::shutters->getShadingStatus ne
 | 
					        && $FHEM::Automation::ShuttersControl::shutters->getShadingStatus ne
 | 
				
			||||||
        'out'
 | 
					        'out'
 | 
				
			||||||
@@ -331,7 +330,7 @@ sub ShadingProcessing {
 | 
				
			|||||||
              . ' - Es ist Nacht oder die Aussentemperatur unterhalb der Shading Temperatur. Die Beschattung wird Zwangsbeendet'
 | 
					              . ' - Es ist Nacht oder die Aussentemperatur unterhalb der Shading Temperatur. Die Beschattung wird Zwangsbeendet'
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Log3( $name, 4,
 | 
					        ::Log3( $name, 4,
 | 
				
			||||||
"AutoShuttersControl ($name) - Shading Processing - Der Sonnenstand ist ausserhalb der Winkelangaben oder die Aussentemperatur unterhalb der Shading Temperatur "
 | 
					"AutoShuttersControl ($name) - Shading Processing - Der Sonnenstand ist ausserhalb der Winkelangaben oder die Aussentemperatur unterhalb der Shading Temperatur "
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -358,7 +357,7 @@ sub ShadingProcessing {
 | 
				
			|||||||
                $FHEM::Automation::ShuttersControl::shutters->getShadingStatus
 | 
					                $FHEM::Automation::ShuttersControl::shutters->getShadingStatus
 | 
				
			||||||
                eq 'out reserved'
 | 
					                eq 'out reserved'
 | 
				
			||||||
                and (
 | 
					                and (
 | 
				
			||||||
                    int( gettimeofday() ) -
 | 
					                    int( ::gettimeofday() ) -
 | 
				
			||||||
                    $FHEM::Automation::ShuttersControl::shutters
 | 
					                    $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                    ->getShadingStatusTimestamp )
 | 
					                    ->getShadingStatusTimestamp )
 | 
				
			||||||
            ) > $FHEM::Automation::ShuttersControl::shutters
 | 
					            ) > $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -369,7 +368,7 @@ sub ShadingProcessing {
 | 
				
			|||||||
                'out');
 | 
					                'out');
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Log3( $name, 4,
 | 
					        ::Log3( $name, 4,
 | 
				
			||||||
                "AutoShuttersControl ($name) - Shading Processing, Rollladen: "
 | 
					                "AutoShuttersControl ($name) - Shading Processing, Rollladen: "
 | 
				
			||||||
              . $shuttersDev
 | 
					              . $shuttersDev
 | 
				
			||||||
              . " In der Out Abfrage, Shadingwert: "
 | 
					              . " In der Out Abfrage, Shadingwert: "
 | 
				
			||||||
@@ -411,7 +410,7 @@ sub ShadingProcessing {
 | 
				
			|||||||
            $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq
 | 
					            $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq
 | 
				
			||||||
            'in reserved'
 | 
					            'in reserved'
 | 
				
			||||||
            and (
 | 
					            and (
 | 
				
			||||||
                int( gettimeofday() ) -
 | 
					                int( ::gettimeofday() ) -
 | 
				
			||||||
                $FHEM::Automation::ShuttersControl::shutters
 | 
					                $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                ->getShadingStatusTimestamp ) > (
 | 
					                ->getShadingStatusTimestamp ) > (
 | 
				
			||||||
                $FHEM::Automation::ShuttersControl::shutters
 | 
					                $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
@@ -423,7 +422,7 @@ sub ShadingProcessing {
 | 
				
			|||||||
                'in');
 | 
					                'in');
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Log3( $name, 4,
 | 
					        ::Log3( $name, 4,
 | 
				
			||||||
                "AutoShuttersControl ($name) - Shading Processing, Rollladen: "
 | 
					                "AutoShuttersControl ($name) - Shading Processing, Rollladen: "
 | 
				
			||||||
              . $shuttersDev
 | 
					              . $shuttersDev
 | 
				
			||||||
              . " In der In Abfrage, Shadingwert: "
 | 
					              . " In der In Abfrage, Shadingwert: "
 | 
				
			||||||
@@ -469,21 +468,17 @@ sub ShadingProcessing {
 | 
				
			|||||||
            $homemode )
 | 
					            $homemode )
 | 
				
			||||||
        && (
 | 
					        && (
 | 
				
			||||||
               $getModeUp eq 'always'
 | 
					               $getModeUp eq 'always'
 | 
				
			||||||
            || $getModeUp eq
 | 
					            || $getModeUp eq $homemode
 | 
				
			||||||
            $homemode
 | 
					 | 
				
			||||||
            || $getModeUp eq 'off'
 | 
					            || $getModeUp eq 'off'
 | 
				
			||||||
            || $getModeUp eq
 | 
					            || $getModeUp eq 'absent'
 | 
				
			||||||
            'absent'
 | 
					            || $getModeUp eq 'gone'
 | 
				
			||||||
            || $getModeUp eq
 | 
					            || (   $getModeUp eq 'home'
 | 
				
			||||||
            'gone'
 | 
					 | 
				
			||||||
            || ( $getModeUp eq
 | 
					 | 
				
			||||||
                'home'
 | 
					 | 
				
			||||||
                && $homemode ne 'asleep' )
 | 
					                && $homemode ne 'asleep' )
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && (
 | 
					        && (
 | 
				
			||||||
            (
 | 
					            (
 | 
				
			||||||
                (
 | 
					                (
 | 
				
			||||||
                    int( gettimeofday() ) -
 | 
					                    int( ::gettimeofday() ) -
 | 
				
			||||||
                    $FHEM::Automation::ShuttersControl::shutters
 | 
					                    $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                    ->getShadingStatusTimestamp
 | 
					                    ->getShadingStatusTimestamp
 | 
				
			||||||
                ) < 2
 | 
					                ) < 2
 | 
				
			||||||
@@ -499,16 +494,16 @@ sub ShadingProcessing {
 | 
				
			|||||||
            )
 | 
					            )
 | 
				
			||||||
            || (  !$FHEM::Automation::ShuttersControl::shutters->getIfInShading
 | 
					            || (  !$FHEM::Automation::ShuttersControl::shutters->getIfInShading
 | 
				
			||||||
                && $FHEM::Automation::ShuttersControl::shutters->getStatus ==
 | 
					                && $FHEM::Automation::ShuttersControl::shutters->getStatus ==
 | 
				
			||||||
                $FHEM::Automation::ShuttersControl::shutters->getShadingPos
 | 
					                $FHEM::Automation::ShuttersControl::shutters->getShadingPos )
 | 
				
			||||||
            )
 | 
					            || ( !$FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
            || (   !$FHEM::Automation::ShuttersControl::shutters->getShadingBetweenTheTimeSuspend
 | 
					                ->getShadingBetweenTheTimeSuspend
 | 
				
			||||||
                && $FHEM::Automation::ShuttersControl::shutters->getStatus !=
 | 
					                && $FHEM::Automation::ShuttersControl::shutters->getStatus !=
 | 
				
			||||||
                $FHEM::Automation::ShuttersControl::shutters->getShadingPos )
 | 
					                $FHEM::Automation::ShuttersControl::shutters->getShadingPos )
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    readingsBeginUpdate($shuttersDevHash);
 | 
					    ::readingsBeginUpdate($shuttersDevHash);
 | 
				
			||||||
    readingsBulkUpdate(
 | 
					    ::readingsBulkUpdate(
 | 
				
			||||||
        $shuttersDevHash,
 | 
					        $shuttersDevHash,
 | 
				
			||||||
        'ASC_ShadingMessage',
 | 
					        'ASC_ShadingMessage',
 | 
				
			||||||
        'INFO: current shading status is \''
 | 
					        'INFO: current shading status is \''
 | 
				
			||||||
@@ -531,7 +526,7 @@ sub ShadingProcessing {
 | 
				
			|||||||
          ) / 60
 | 
					          ) / 60
 | 
				
			||||||
          . 'm'
 | 
					          . 'm'
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
    readingsEndUpdate( $shuttersDevHash, 1 );
 | 
					    ::readingsEndUpdate( $shuttersDevHash, 1 );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -551,18 +546,27 @@ sub ShadingProcessingDriveCommand {
 | 
				
			|||||||
    $FHEM::Automation::ShuttersControl::shutters->setShadingStatus(
 | 
					    $FHEM::Automation::ShuttersControl::shutters->setShadingStatus(
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::shutters->getShadingStatus );
 | 
					        $FHEM::Automation::ShuttersControl::shutters->getShadingStatus );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (   IsInTime($FHEM::Automation::ShuttersControl::shutters->getShadingBetweenTheTime)
 | 
					    if (
 | 
				
			||||||
        && $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq 'in'
 | 
					        IsInTime(
 | 
				
			||||||
 | 
					            $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
 | 
					              ->getShadingBetweenTheTime
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        && $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq
 | 
				
			||||||
 | 
					        'in'
 | 
				
			||||||
        && $getShadingPos != $getStatus
 | 
					        && $getShadingPos != $getStatus
 | 
				
			||||||
        && ( $getStatus != $FHEM::Automation::ShuttersControl::shutters->getClosedPos
 | 
					        && (
 | 
				
			||||||
          || ( $getStatus == $FHEM::Automation::ShuttersControl::shutters->getClosedPos
 | 
					            $getStatus !=
 | 
				
			||||||
            && $marker
 | 
					            $FHEM::Automation::ShuttersControl::shutters->getClosedPos
 | 
				
			||||||
            )
 | 
					            || ( $getStatus ==
 | 
				
			||||||
          )
 | 
					                   $FHEM::Automation::ShuttersControl::shutters->getClosedPos
 | 
				
			||||||
        && ( $getStatus != $FHEM::Automation::ShuttersControl::shutters->getSleepPos
 | 
					                && $marker )
 | 
				
			||||||
          || ( $getStatus == $FHEM::Automation::ShuttersControl::shutters->getSleepPos
 | 
					 | 
				
			||||||
            && $marker
 | 
					 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					        && (
 | 
				
			||||||
 | 
					            $getStatus !=
 | 
				
			||||||
 | 
					            $FHEM::Automation::ShuttersControl::shutters->getSleepPos
 | 
				
			||||||
 | 
					            || ( $getStatus ==
 | 
				
			||||||
 | 
					                   $FHEM::Automation::ShuttersControl::shutters->getSleepPos
 | 
				
			||||||
 | 
					                && $marker )
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && (
 | 
					        && (
 | 
				
			||||||
            FHEM::Automation::ShuttersControl::CheckIfShuttersWindowRecOpen(
 | 
					            FHEM::Automation::ShuttersControl::CheckIfShuttersWindowRecOpen(
 | 
				
			||||||
@@ -626,8 +630,10 @@ sub ShadingProcessingDriveCommand {
 | 
				
			|||||||
                    : $FHEM::Automation::ShuttersControl::shutters->getOpenPos
 | 
					                    : $FHEM::Automation::ShuttersControl::shutters->getOpenPos
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
        ) if (    $FHEM::Automation::ShuttersControl::shutters->getIsDay
 | 
					          )
 | 
				
			||||||
               || $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace eq 'awning' );
 | 
					          if ( $FHEM::Automation::ShuttersControl::shutters->getIsDay
 | 
				
			||||||
 | 
					            || $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace
 | 
				
			||||||
 | 
					            eq 'awning' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        FHEM::Automation::ShuttersControl::ASC_Debug(
 | 
					        FHEM::Automation::ShuttersControl::ASC_Debug(
 | 
				
			||||||
                'ShadingProcessingDriveCommand: '
 | 
					                'ShadingProcessingDriveCommand: '
 | 
				
			||||||
@@ -639,7 +645,7 @@ sub ShadingProcessingDriveCommand {
 | 
				
			|||||||
              . ' zum beenden der Beschattung gefahren' );
 | 
					              . ' zum beenden der Beschattung gefahren' );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Log3( $name, 4,
 | 
					    ::Log3( $name, 4,
 | 
				
			||||||
"AutoShuttersControl ($name) - Shading Processing - In der Routine zum fahren der Rollläden, Shading Wert: "
 | 
					"AutoShuttersControl ($name) - Shading Processing - In der Routine zum fahren der Rollläden, Shading Wert: "
 | 
				
			||||||
          . $FHEM::Automation::ShuttersControl::shutters->getShadingStatus );
 | 
					          . $FHEM::Automation::ShuttersControl::shutters->getShadingStatus );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
###############################################################################
 | 
					###############################################################################
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Developed with Kate
 | 
					# Developed with VSCodium and richterger perl plugin
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#  (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net)
 | 
					#  (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
 | 
				
			||||||
#  All rights reserved
 | 
					#  All rights reserved
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#   Special thanks goes to:
 | 
					#   Special thanks goes to:
 | 
				
			||||||
@@ -45,18 +45,18 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
package FHEM::Automation::ShuttersControl::Shutters;
 | 
					package FHEM::Automation::ShuttersControl::Shutters;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use FHEM::Automation::ShuttersControl::Shutters::Readings;
 | 
					 | 
				
			||||||
use FHEM::Automation::ShuttersControl::Shutters::Attr;
 | 
					 | 
				
			||||||
use FHEM::Automation::ShuttersControl::Roommate;
 | 
					 | 
				
			||||||
use FHEM::Automation::ShuttersControl::Window;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
our @ISA =
 | 
					 | 
				
			||||||
  qw(FHEM::Automation::ShuttersControl::Shutters::Readings FHEM::Automation::ShuttersControl::Shutters::Attr FHEM::Automation::ShuttersControl::Roommate FHEM::Automation::ShuttersControl::Window);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
use strict;
 | 
					use strict;
 | 
				
			||||||
use warnings;
 | 
					use warnings;
 | 
				
			||||||
use utf8;
 | 
					use utf8;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use FHEM::Automation::ShuttersControl::Shutters::Readings;
 | 
				
			||||||
 | 
					use FHEM::Automation::ShuttersControl::Shutters::Attr;
 | 
				
			||||||
 | 
					use FHEM::Automation::ShuttersControl::Roommate qw (:ALL);
 | 
				
			||||||
 | 
					use FHEM::Automation::ShuttersControl::Window;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use base
 | 
				
			||||||
 | 
					  qw(FHEM::Automation::ShuttersControl::Shutters::Readings FHEM::Automation::ShuttersControl::Shutters::Attr FHEM::Automation::ShuttersControl::Roommate FHEM::Automation::ShuttersControl::Window);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub new {
 | 
					sub new {
 | 
				
			||||||
    my $class = shift;
 | 
					    my $class = shift;
 | 
				
			||||||
    my $self  = {
 | 
					    my $self  = {
 | 
				
			||||||
@@ -161,6 +161,7 @@ sub setDriveCmd {
 | 
				
			|||||||
        $FHEM::Automation::ShuttersControl::shutters->setDelayCmd($posValue);
 | 
					        $FHEM::Automation::ShuttersControl::shutters->setDelayCmd($posValue);
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::ascDev->setDelayCmdReading;
 | 
					        $FHEM::Automation::ShuttersControl::ascDev->setDelayCmdReading;
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::shutters->setNoDelay(0);
 | 
					        $FHEM::Automation::ShuttersControl::shutters->setNoDelay(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#         $FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus(0)
 | 
					#         $FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus(0)
 | 
				
			||||||
#           if ( $FHEM::Automation::ShuttersControl::shutters
 | 
					#           if ( $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
#             ->getExternalTriggerStatus );
 | 
					#             ->getExternalTriggerStatus );
 | 
				
			||||||
@@ -177,7 +178,8 @@ sub setDriveCmd {
 | 
				
			|||||||
          if ( $FHEM::Automation::ShuttersControl::shutters->getDelayCmd ne
 | 
					          if ( $FHEM::Automation::ShuttersControl::shutters->getDelayCmd ne
 | 
				
			||||||
            'none' )
 | 
					            'none' )
 | 
				
			||||||
          ; # setzt den Wert auf none da der Rolladen nun gesteuert werden kann.
 | 
					          ; # setzt den Wert auf none da der Rolladen nun gesteuert werden kann.
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus(0)
 | 
					        $FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus(
 | 
				
			||||||
 | 
					            0)
 | 
				
			||||||
          if ( $FHEM::Automation::ShuttersControl::shutters
 | 
					          if ( $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
            ->getExternalTriggerStatus );
 | 
					            ->getExternalTriggerStatus );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -233,7 +235,7 @@ sub setDriveCmd {
 | 
				
			|||||||
                ::gettimeofday() +
 | 
					                ::gettimeofday() +
 | 
				
			||||||
                  $FHEM::Automation::ShuttersControl::shutters
 | 
					                  $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                  ->getSelfDefenseAbsentDelay,
 | 
					                  ->getSelfDefenseAbsentDelay,
 | 
				
			||||||
                \&FHEM::Automation::ShuttersControl::_SetCmdFn, \%h
 | 
					                \&FHEM::Automation::ShuttersControl::SetCmdFn, \%h
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::shutters->setSelfDefenseAbsent(
 | 
					            $FHEM::Automation::ShuttersControl::shutters->setSelfDefenseAbsent(
 | 
				
			||||||
                1, 0, \%h );
 | 
					                1, 0, \%h );
 | 
				
			||||||
@@ -247,7 +249,7 @@ sub setDriveCmd {
 | 
				
			|||||||
                      $FHEM::Automation::ShuttersControl::shutters
 | 
					                      $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
                      ->getDelayStart
 | 
					                      ->getDelayStart
 | 
				
			||||||
                ),
 | 
					                ),
 | 
				
			||||||
                \&FHEM::Automation::ShuttersControl::_SetCmdFn,
 | 
					                \&FHEM::Automation::ShuttersControl::SetCmdFn,
 | 
				
			||||||
                \%h
 | 
					                \%h
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -258,7 +260,7 @@ sub setDriveCmd {
 | 
				
			|||||||
        elsif ($offSetStart < 1
 | 
					        elsif ($offSetStart < 1
 | 
				
			||||||
            || $FHEM::Automation::ShuttersControl::shutters->getNoDelay )
 | 
					            || $FHEM::Automation::ShuttersControl::shutters->getNoDelay )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            FHEM::Automation::ShuttersControl::_SetCmdFn( \%h );
 | 
					            FHEM::Automation::ShuttersControl::SetCmdFn( \%h );
 | 
				
			||||||
            FHEM::Automation::ShuttersControl::ASC_Debug( 'FnSetDriveCmd: '
 | 
					            FHEM::Automation::ShuttersControl::ASC_Debug( 'FnSetDriveCmd: '
 | 
				
			||||||
                  . $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
 | 
					                  . $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
 | 
				
			||||||
                  . ' - NICHT versetztes fahren' );
 | 
					                  . ' - NICHT versetztes fahren' );
 | 
				
			||||||
@@ -346,8 +348,7 @@ sub setLastDriveReading {
 | 
				
			|||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ::InternalTimer( ::gettimeofday() + 0.1,
 | 
					    ::InternalTimer( ::gettimeofday() + 0.1,
 | 
				
			||||||
        \&FHEM::Automation::ShuttersControl::_setShuttersLastDriveDelayed,
 | 
					        \&FHEM::Automation::ShuttersControl::setShuttersLastDriveDelayed, \%h );
 | 
				
			||||||
        \%h );
 | 
					 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -460,7 +461,8 @@ sub setRainUnprotectionDelayObj {
 | 
				
			|||||||
    my $self  = shift;
 | 
					    my $self  = shift;
 | 
				
			||||||
    my $value = shift;
 | 
					    my $value = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL} = $value
 | 
					    $self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL}
 | 
				
			||||||
 | 
					      = $value
 | 
				
			||||||
      if ( defined($value) );
 | 
					      if ( defined($value) );
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -545,7 +547,8 @@ sub getAttrUpdateChanges {
 | 
				
			|||||||
sub getIsDay {
 | 
					sub getIsDay {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return FHEM::Automation::ShuttersControl::Helper::_IsDay( $self->{shuttersDev} );
 | 
					    return FHEM::Automation::ShuttersControl::Helper::_IsDay(
 | 
				
			||||||
 | 
					        $self->{shuttersDev} );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub getAntiFreezeStatus {
 | 
					sub getAntiFreezeStatus {
 | 
				
			||||||
@@ -756,10 +759,12 @@ sub getRainUnprotectionDelayObj {
 | 
				
			|||||||
        (
 | 
					        (
 | 
				
			||||||
            defined( $self->{ $self->{shuttersDev} }->{RainProtection} )
 | 
					            defined( $self->{ $self->{shuttersDev} }->{RainProtection} )
 | 
				
			||||||
              && defined(
 | 
					              && defined(
 | 
				
			||||||
                $self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL}
 | 
					                $self->{ $self->{shuttersDev} }->{RainProtection}
 | 
				
			||||||
 | 
					                  ->{UNPROTECTIONDELAYOBJVAL}
 | 
				
			||||||
              )
 | 
					              )
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        ? $self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL}
 | 
					        ? $self->{ $self->{shuttersDev} }->{RainProtection}
 | 
				
			||||||
 | 
					          ->{UNPROTECTIONDELAYOBJVAL}
 | 
				
			||||||
        : 'none'
 | 
					        : 'none'
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -821,7 +826,7 @@ sub getRoommatesStatus {
 | 
				
			|||||||
        $FHEM::Automation::ShuttersControl::shutters->setRoommate($ro);
 | 
					        $FHEM::Automation::ShuttersControl::shutters->setRoommate($ro);
 | 
				
			||||||
        my $currentPrio =
 | 
					        my $currentPrio =
 | 
				
			||||||
          $statePrio{ $FHEM::Automation::ShuttersControl::shutters
 | 
					          $statePrio{ $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
              ->_getRoommateStatus };
 | 
					              ->getRoommateStatus };
 | 
				
			||||||
        $minPrio = $currentPrio if ( $minPrio > $currentPrio );
 | 
					        $minPrio = $currentPrio if ( $minPrio > $currentPrio );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -854,7 +859,7 @@ sub getRoommatesLastStatus {
 | 
				
			|||||||
        $FHEM::Automation::ShuttersControl::shutters->setRoommate($ro);
 | 
					        $FHEM::Automation::ShuttersControl::shutters->setRoommate($ro);
 | 
				
			||||||
        my $currentPrio =
 | 
					        my $currentPrio =
 | 
				
			||||||
          $statePrio{ $FHEM::Automation::ShuttersControl::shutters
 | 
					          $statePrio{ $FHEM::Automation::ShuttersControl::shutters
 | 
				
			||||||
              ->_getRoommateLastStatus };
 | 
					              ->getRoommateLastStatus };
 | 
				
			||||||
        $minPrio = $currentPrio if ( $minPrio > $currentPrio );
 | 
					        $minPrio = $currentPrio if ( $minPrio > $currentPrio );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -899,7 +904,8 @@ sub setShadingStatus {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    $self->{ $self->{shuttersDev} }{ShadingStatus}{VAL} = $value
 | 
					    $self->{ $self->{shuttersDev} }{ShadingStatus}{VAL} = $value
 | 
				
			||||||
      if ( defined($value) );
 | 
					      if ( defined($value) );
 | 
				
			||||||
    $self->{ $self->{shuttersDev} }{ShadingStatus}{TIME} = int( ::gettimeofday() )
 | 
					    $self->{ $self->{shuttersDev} }{ShadingStatus}{TIME} =
 | 
				
			||||||
 | 
					      int( ::gettimeofday() )
 | 
				
			||||||
      if ( defined( $self->{ $self->{shuttersDev} }{ShadingStatus} ) );
 | 
					      if ( defined( $self->{ $self->{shuttersDev} }{ShadingStatus} ) );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
@@ -1011,8 +1017,12 @@ sub getShadingBetweenTheTimeSuspend {   # Werte für value = 0, 1
 | 
				
			|||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return (
 | 
					    return (
 | 
				
			||||||
        defined( $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend} )
 | 
					        defined(
 | 
				
			||||||
          && defined( $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}{VAL} )
 | 
					            $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}
 | 
				
			||||||
 | 
					          )
 | 
				
			||||||
 | 
					          && defined(
 | 
				
			||||||
 | 
					            $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}{VAL}
 | 
				
			||||||
 | 
					          )
 | 
				
			||||||
        ? $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}{VAL}
 | 
					        ? $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}{VAL}
 | 
				
			||||||
        : 0
 | 
					        : 0
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
@@ -1084,9 +1094,7 @@ sub getShadingLastPos {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return (
 | 
					    return (
 | 
				
			||||||
        defined( $self->{ $self->{shuttersDev} }{ShadingLastPos} )
 | 
					        defined( $self->{ $self->{shuttersDev} }{ShadingLastPos} )
 | 
				
			||||||
          && defined(
 | 
					          && defined( $self->{ $self->{shuttersDev} }{ShadingLastPos}{VAL} )
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }{ShadingLastPos}{VAL}
 | 
					 | 
				
			||||||
          )
 | 
					 | 
				
			||||||
        ? $self->{ $self->{shuttersDev} }{ShadingLastPos}{VAL}
 | 
					        ? $self->{ $self->{shuttersDev} }{ShadingLastPos}{VAL}
 | 
				
			||||||
        : $FHEM::Automation::ShuttersControl::shutters->getShadingPos
 | 
					        : $FHEM::Automation::ShuttersControl::shutters->getShadingPos
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
@@ -1094,7 +1102,4 @@ sub getShadingLastPos {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### Ende Beschattung
 | 
					### Ende Beschattung
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1;
 | 
					1;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
###############################################################################
 | 
					###############################################################################
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Developed with Kate
 | 
					# Developed with VSCodium and richterger perl plugin
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#  (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net)
 | 
					#  (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
 | 
				
			||||||
#  All rights reserved
 | 
					#  All rights reserved
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#   Special thanks goes to:
 | 
					#   Special thanks goes to:
 | 
				
			||||||
@@ -46,24 +46,12 @@ use utf8;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use FHEM::Automation::ShuttersControl::Helper qw (IsAdv PerlCodeCheck);
 | 
					use FHEM::Automation::ShuttersControl::Helper qw (IsAdv PerlCodeCheck);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use GPUtils qw(GP_Import);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Import der FHEM Funktionen
 | 
					 | 
				
			||||||
BEGIN {
 | 
					 | 
				
			||||||
    GP_Import(
 | 
					 | 
				
			||||||
        qw(
 | 
					 | 
				
			||||||
          AttrVal
 | 
					 | 
				
			||||||
          CommandAttr
 | 
					 | 
				
			||||||
          gettimeofday)
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub _setAttributs {
 | 
					sub _setAttributs {
 | 
				
			||||||
    my $shuttersDev = shift;
 | 
					    my $shuttersDev = shift;
 | 
				
			||||||
    my $attr        = shift;
 | 
					    my $attr        = shift;
 | 
				
			||||||
    my $attrVal     = shift;
 | 
					    my $attrVal     = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    CommandAttr( undef, $shuttersDev . ' ' . $attr . ' ' . $attrVal );
 | 
					    ::CommandAttr( undef, $shuttersDev . ' ' . $attr . ' ' . $attrVal );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -77,28 +65,28 @@ sub _getPosition {
 | 
				
			|||||||
    return $self->{ $self->{shuttersDev} }->{$attr}->{position}
 | 
					    return $self->{ $self->{shuttersDev} }->{$attr}->{position}
 | 
				
			||||||
      if (
 | 
					      if (
 | 
				
			||||||
        exists( $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} )
 | 
					        exists( $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) < 2
 | 
					            $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
    $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} =
 | 
					    $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} =
 | 
				
			||||||
      int( gettimeofday() );
 | 
					      int( ::gettimeofday() );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $position;
 | 
					    my $position;
 | 
				
			||||||
    my $posAssignment;
 | 
					    my $posAssignment;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (
 | 
					    if (
 | 
				
			||||||
        AttrVal( $self->{shuttersDev}, $attr,
 | 
					        ::AttrVal( $self->{shuttersDev}, $attr,
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
 | 
					            $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
 | 
				
			||||||
              [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] ) =~
 | 
					              [ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] ) =~
 | 
				
			||||||
        m{\A\{.+\}\z}xms
 | 
					        m{\A\{.+\}\z}xms
 | 
				
			||||||
      )
 | 
					      )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        my $response = PerlCodeCheck(
 | 
					        my $response = PerlCodeCheck(
 | 
				
			||||||
            AttrVal(
 | 
					            ::AttrVal(
 | 
				
			||||||
                $self->{shuttersDev},
 | 
					                $self->{shuttersDev},
 | 
				
			||||||
                $attr,
 | 
					                $attr,
 | 
				
			||||||
                $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
 | 
					                $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
 | 
				
			||||||
                  [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
 | 
					                  [ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -108,7 +96,7 @@ sub _getPosition {
 | 
				
			|||||||
              $position =~ m{\A\d+(\.\d+)?\z}xms
 | 
					              $position =~ m{\A\d+(\.\d+)?\z}xms
 | 
				
			||||||
            ? $position
 | 
					            ? $position
 | 
				
			||||||
            : $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
 | 
					            : $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
 | 
				
			||||||
              [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
 | 
					              [ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $posAssignment = (
 | 
					        $posAssignment = (
 | 
				
			||||||
@@ -124,7 +112,7 @@ sub _getPosition {
 | 
				
			|||||||
            $self->{shuttersDev},
 | 
					            $self->{shuttersDev},
 | 
				
			||||||
            $attr,
 | 
					            $attr,
 | 
				
			||||||
            $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
 | 
					            $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
 | 
				
			||||||
              [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
 | 
					              [ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
 | 
				
			||||||
          );
 | 
					          );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -145,8 +133,7 @@ sub _getPosition {
 | 
				
			|||||||
      )
 | 
					      )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $self->{ $self->{shuttersDev} }->{$attr}->{position} =
 | 
					        $self->{ $self->{shuttersDev} }->{$attr}->{position} =
 | 
				
			||||||
          PerlCodeCheck(
 | 
					          PerlCodeCheck( $self->{ $self->{shuttersDev} }->{$attr}->{position} );
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{$attr}->{position} );
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return (
 | 
					    return (
 | 
				
			||||||
@@ -154,7 +141,7 @@ sub _getPosition {
 | 
				
			|||||||
          m{^\d+(\.\d+)?$}xms
 | 
					          m{^\d+(\.\d+)?$}xms
 | 
				
			||||||
        ? $self->{ $self->{shuttersDev} }->{$attr}->{position}
 | 
					        ? $self->{ $self->{shuttersDev} }->{$attr}->{position}
 | 
				
			||||||
        : $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
 | 
					        : $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
 | 
				
			||||||
          [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
 | 
					          [ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -167,7 +154,7 @@ sub _getPositionAssignment {
 | 
				
			|||||||
    return $self->{ $self->{shuttersDev} }->{$attr}->{posAssignment}
 | 
					    return $self->{ $self->{shuttersDev} }->{$attr}->{posAssignment}
 | 
				
			||||||
      if (
 | 
					      if (
 | 
				
			||||||
        exists( $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} )
 | 
					        exists( $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) < 2
 | 
					            $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
    $FHEM::Automation::ShuttersControl::shutters->$getFn;
 | 
					    $FHEM::Automation::ShuttersControl::shutters->$getFn;
 | 
				
			||||||
@@ -213,7 +200,7 @@ sub setShuttersPlace {
 | 
				
			|||||||
sub getShuttersPlace {
 | 
					sub getShuttersPlace {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_ShuttersPlace', 'window' );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_ShuttersPlace', 'window' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub setSlatPosCmd {
 | 
					sub setSlatPosCmd {
 | 
				
			||||||
@@ -236,15 +223,15 @@ sub getSlatPosCmd {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
 | 
				
			||||||
              ->{LASTGETTIME}
 | 
					              ->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
 | 
				
			||||||
            ->{LASTGETTIME} ) < 2
 | 
					            ->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
    $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}->{LASTGETTIME}
 | 
					    $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}->{LASTGETTIME}
 | 
				
			||||||
      = int( gettimeofday() );
 | 
					      = int( ::gettimeofday() );
 | 
				
			||||||
    my ( $slatPosCmd, $slatDevice ) =
 | 
					    my ( $slatPosCmd, $slatDevice ) =
 | 
				
			||||||
      FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
 | 
					      FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
 | 
				
			||||||
        'ASC_SlatPosCmd_SlatDevice', 'none:none' );
 | 
					        $self->{shuttersDev}, 'ASC_SlatPosCmd_SlatDevice', 'none:none' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ## Erwartetes Ergebnis
 | 
					    ## Erwartetes Ergebnis
 | 
				
			||||||
    # upTime:upBrightnessVal
 | 
					    # upTime:upBrightnessVal
 | 
				
			||||||
@@ -268,7 +255,7 @@ sub getSlatDevice {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
 | 
				
			||||||
              ->{LASTGETTIME}
 | 
					              ->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
 | 
				
			||||||
            ->{LASTGETTIME} ) < 2
 | 
					            ->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
@@ -299,15 +286,15 @@ sub getPrivacyUpTime {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
 | 
				
			||||||
              ->{LASTGETTIME}
 | 
					              ->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
 | 
				
			||||||
            ->{LASTGETTIME} ) < 2
 | 
					            ->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
    $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
 | 
					    $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
 | 
				
			||||||
      ->{LASTGETTIME} = int( gettimeofday() );
 | 
					      ->{LASTGETTIME} = int( ::gettimeofday() );
 | 
				
			||||||
    my ( $upTime, $upBrightnessVal ) =
 | 
					    my ( $upTime, $upBrightnessVal ) =
 | 
				
			||||||
      FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
 | 
					      FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
 | 
				
			||||||
        'ASC_PrivacyUpValue_beforeDayOpen', '-1:-1' );
 | 
					        $self->{shuttersDev}, 'ASC_PrivacyUpValue_beforeDayOpen', '-1:-1' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ## Erwartetes Ergebnis
 | 
					    ## Erwartetes Ergebnis
 | 
				
			||||||
    # upTime:upBrightnessVal
 | 
					    # upTime:upBrightnessVal
 | 
				
			||||||
@@ -341,7 +328,7 @@ sub getPrivacyUpBrightnessVal {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
 | 
				
			||||||
              ->{LASTGETTIME}
 | 
					              ->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
 | 
				
			||||||
            ->{LASTGETTIME} ) < 2
 | 
					            ->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
@@ -378,14 +365,15 @@ sub getPrivacyDownTime {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }
 | 
					            $self->{ $self->{shuttersDev} }
 | 
				
			||||||
              ->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME}
 | 
					              ->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }
 | 
					            $self->{ $self->{shuttersDev} }
 | 
				
			||||||
            ->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} ) < 2
 | 
					            ->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
    $self->{ $self->{shuttersDev} }->{ASC_PrivacyDownValue_beforeNightClose}
 | 
					    $self->{ $self->{shuttersDev} }->{ASC_PrivacyDownValue_beforeNightClose}
 | 
				
			||||||
      ->{LASTGETTIME} = int( gettimeofday() );
 | 
					      ->{LASTGETTIME} = int( ::gettimeofday() );
 | 
				
			||||||
    my ( $downTime, $downBrightnessVal ) =
 | 
					    my ( $downTime, $downBrightnessVal ) =
 | 
				
			||||||
      FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
 | 
					      FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
 | 
				
			||||||
 | 
					        $self->{shuttersDev},
 | 
				
			||||||
        'ASC_PrivacyDownValue_beforeNightClose', '-1:-1' );
 | 
					        'ASC_PrivacyDownValue_beforeNightClose', '-1:-1' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ## Erwartetes Ergebnis
 | 
					    ## Erwartetes Ergebnis
 | 
				
			||||||
@@ -420,7 +408,7 @@ sub getPrivacyDownBrightnessVal {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }
 | 
					            $self->{ $self->{shuttersDev} }
 | 
				
			||||||
              ->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME}
 | 
					              ->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }
 | 
					            $self->{ $self->{shuttersDev} }
 | 
				
			||||||
            ->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} ) < 2
 | 
					            ->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
@@ -497,7 +485,7 @@ sub setSelfDefenseMode {
 | 
				
			|||||||
sub getSelfDefenseMode {
 | 
					sub getSelfDefenseMode {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_Mode', 'gone' );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_Mode', 'gone' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub setSelfDefenseAbsentDelay {
 | 
					sub setSelfDefenseAbsentDelay {
 | 
				
			||||||
@@ -513,13 +501,14 @@ sub setSelfDefenseAbsentDelay {
 | 
				
			|||||||
sub getSelfDefenseAbsentDelay {
 | 
					sub getSelfDefenseAbsentDelay {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_AbsentDelay', 300 );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_AbsentDelay',
 | 
				
			||||||
 | 
					        300 );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub getCommandTemplate {
 | 
					sub getCommandTemplate {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_CommandTemplate', 'none' );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_CommandTemplate', 'none' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub setWiggleValue {
 | 
					sub setWiggleValue {
 | 
				
			||||||
@@ -534,7 +523,7 @@ sub setWiggleValue {
 | 
				
			|||||||
sub getWiggleValue {
 | 
					sub getWiggleValue {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_WiggleValue', 5 );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_WiggleValue', 5 );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub setAdv {
 | 
					sub setAdv {
 | 
				
			||||||
@@ -550,7 +539,7 @@ sub getAdv {
 | 
				
			|||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return (
 | 
					    return (
 | 
				
			||||||
        AttrVal( $self->{shuttersDev}, 'ASC_Adv', 'off' ) eq 'on'
 | 
					        ::AttrVal( $self->{shuttersDev}, 'ASC_Adv', 'off' ) eq 'on'
 | 
				
			||||||
        ? ( IsAdv == 1 ? 1 : 0 )
 | 
					        ? ( IsAdv == 1 ? 1 : 0 )
 | 
				
			||||||
        : 0
 | 
					        : 0
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
@@ -593,7 +582,7 @@ sub setShadingMode {
 | 
				
			|||||||
sub getShadingMode {
 | 
					sub getShadingMode {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Mode', 'off' );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_Shading_Mode', 'off' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub _getTempSensor {
 | 
					sub _getTempSensor {
 | 
				
			||||||
@@ -604,15 +593,15 @@ sub _getTempSensor {
 | 
				
			|||||||
        exists(
 | 
					        exists(
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} )
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} )
 | 
				
			||||||
        < 2
 | 
					        < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
    $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} =
 | 
					    $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} =
 | 
				
			||||||
      int( gettimeofday() );
 | 
					      int( ::gettimeofday() );
 | 
				
			||||||
    my ( $device, $reading ) =
 | 
					    my ( $device, $reading ) =
 | 
				
			||||||
      FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
 | 
					      FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
 | 
				
			||||||
        'ASC_TempSensor', 'none' );
 | 
					        $self->{shuttersDev}, 'ASC_TempSensor', 'none' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ### erwartetes Ergebnis
 | 
					    ### erwartetes Ergebnis
 | 
				
			||||||
    # DEVICE:READING
 | 
					    # DEVICE:READING
 | 
				
			||||||
@@ -631,7 +620,7 @@ sub getTempSensorReading {
 | 
				
			|||||||
        exists(
 | 
					        exists(
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} )
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} )
 | 
				
			||||||
        < 2
 | 
					        < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
@@ -664,15 +653,15 @@ sub _getIdleDetectionReading {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}
 | 
				
			||||||
              ->{LASTGETTIME}
 | 
					              ->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}
 | 
				
			||||||
            ->{LASTGETTIME} ) < 2
 | 
					            ->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
    $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}->{LASTGETTIME}
 | 
					    $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}->{LASTGETTIME}
 | 
				
			||||||
      = int( gettimeofday() );
 | 
					      = int( ::gettimeofday() );
 | 
				
			||||||
    my ( $reading, $value ) =
 | 
					    my ( $reading, $value ) =
 | 
				
			||||||
      FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
 | 
					      FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
 | 
				
			||||||
        'ASC_Shutter_IdleDetection', 'none' );
 | 
					        $self->{shuttersDev}, 'ASC_Shutter_IdleDetection', 'none' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ### erwartetes Ergebnis
 | 
					    ### erwartetes Ergebnis
 | 
				
			||||||
    # READING:VALUE
 | 
					    # READING:VALUE
 | 
				
			||||||
@@ -694,7 +683,7 @@ sub getIdleDetectionValue {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}
 | 
				
			||||||
              ->{LASTGETTIME}
 | 
					              ->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}
 | 
				
			||||||
            ->{LASTGETTIME} ) < 2
 | 
					            ->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
@@ -728,15 +717,15 @@ sub _getBrightnessSensor {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
 | 
				
			||||||
              ->{LASTGETTIME}
 | 
					              ->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
 | 
				
			||||||
            ->{LASTGETTIME} ) < 2
 | 
					            ->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
    $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}->{LASTGETTIME} =
 | 
					    $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}->{LASTGETTIME} =
 | 
				
			||||||
      int( gettimeofday() );
 | 
					      int( ::gettimeofday() );
 | 
				
			||||||
    my ( $device, $reading, $max, $min ) =
 | 
					    my ( $device, $reading, $max, $min ) =
 | 
				
			||||||
      FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
 | 
					      FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
 | 
				
			||||||
        'ASC_BrightnessSensor', 'none' );
 | 
					        $self->{shuttersDev}, 'ASC_BrightnessSensor', 'none' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ### erwartetes Ergebnis
 | 
					    ### erwartetes Ergebnis
 | 
				
			||||||
    # DEVICE:READING MAX:MIN
 | 
					    # DEVICE:READING MAX:MIN
 | 
				
			||||||
@@ -760,7 +749,7 @@ sub getBrightnessReading {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
 | 
				
			||||||
              ->{LASTGETTIME}
 | 
					              ->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
 | 
				
			||||||
            ->{LASTGETTIME} ) < 2
 | 
					            ->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
@@ -785,7 +774,7 @@ sub getShadingAzimuthLeft {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}
 | 
				
			||||||
              ->{LASTGETTIME}
 | 
					              ->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}
 | 
				
			||||||
            ->{LASTGETTIME} ) < 2
 | 
					            ->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
@@ -814,15 +803,15 @@ sub getShadingAzimuthRight {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}
 | 
				
			||||||
              ->{LASTGETTIME}
 | 
					              ->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}
 | 
				
			||||||
            ->{LASTGETTIME} ) < 2
 | 
					            ->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
    $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}->{LASTGETTIME}
 | 
					    $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}->{LASTGETTIME}
 | 
				
			||||||
      = int( gettimeofday() );
 | 
					      = int( ::gettimeofday() );
 | 
				
			||||||
    my ( $left, $right ) =
 | 
					    my ( $left, $right ) =
 | 
				
			||||||
      FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
 | 
					      FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
 | 
				
			||||||
        'ASC_Shading_InOutAzimuth', '95:265' );
 | 
					        $self->{shuttersDev}, 'ASC_Shading_InOutAzimuth', '95:265' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ### erwartetes Ergebnis
 | 
					    ### erwartetes Ergebnis
 | 
				
			||||||
    # MIN:MAX
 | 
					    # MIN:MAX
 | 
				
			||||||
@@ -849,8 +838,8 @@ sub setShadingMinOutsideTemperature {
 | 
				
			|||||||
sub getShadingMinOutsideTemperature {
 | 
					sub getShadingMinOutsideTemperature {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Min_OutsideTemperature',
 | 
					    return ::AttrVal( $self->{shuttersDev},
 | 
				
			||||||
        18 );
 | 
					        'ASC_Shading_Min_OutsideTemperature', 18 );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub setShadingMinMaxElevation {
 | 
					sub setShadingMinMaxElevation {
 | 
				
			||||||
@@ -873,15 +862,15 @@ sub getShadingMinElevation {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
 | 
				
			||||||
              ->{LASTGETTIME}
 | 
					              ->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
 | 
				
			||||||
            ->{LASTGETTIME} ) < 2
 | 
					            ->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
    $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
 | 
					    $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
 | 
				
			||||||
      ->{LASTGETTIME} = int( gettimeofday() );
 | 
					      ->{LASTGETTIME} = int( ::gettimeofday() );
 | 
				
			||||||
    my ( $min, $max ) =
 | 
					    my ( $min, $max ) =
 | 
				
			||||||
      FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
 | 
					      FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
 | 
				
			||||||
        'ASC_Shading_MinMax_Elevation', '25.0:100.0' );
 | 
					        $self->{shuttersDev}, 'ASC_Shading_MinMax_Elevation', '25.0:100.0' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ### erwartetes Ergebnis
 | 
					    ### erwartetes Ergebnis
 | 
				
			||||||
    # MIN:MAX
 | 
					    # MIN:MAX
 | 
				
			||||||
@@ -905,7 +894,7 @@ sub getShadingMaxElevation {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
 | 
				
			||||||
              ->{LASTGETTIME}
 | 
					              ->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
 | 
				
			||||||
            ->{LASTGETTIME} ) < 2
 | 
					            ->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
@@ -943,15 +932,15 @@ sub getShadingStateChangeSunny {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }
 | 
					            $self->{ $self->{shuttersDev} }
 | 
				
			||||||
              ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME}
 | 
					              ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }
 | 
					            $self->{ $self->{shuttersDev} }
 | 
				
			||||||
            ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2
 | 
					            ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
    $self->{ $self->{shuttersDev} }->{ASC_Shading_StateChange_SunnyCloudy}
 | 
					    $self->{ $self->{shuttersDev} }->{ASC_Shading_StateChange_SunnyCloudy}
 | 
				
			||||||
      ->{LASTGETTIME} = int( gettimeofday() );
 | 
					      ->{LASTGETTIME} = int( ::gettimeofday() );
 | 
				
			||||||
    my ( $sunny, $cloudy, $maxBrightnessAverageArrayObjects ) =
 | 
					    my ( $sunny, $cloudy, $maxBrightnessAverageArrayObjects ) =
 | 
				
			||||||
      FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
 | 
					      FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
 | 
				
			||||||
        'ASC_Shading_StateChange_SunnyCloudy',
 | 
					        $self->{shuttersDev}, 'ASC_Shading_StateChange_SunnyCloudy',
 | 
				
			||||||
        '35000:20000' );
 | 
					        '35000:20000' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ### erwartetes Ergebnis
 | 
					    ### erwartetes Ergebnis
 | 
				
			||||||
@@ -982,7 +971,7 @@ sub getShadingStateChangeCloudy {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }
 | 
					            $self->{ $self->{shuttersDev} }
 | 
				
			||||||
              ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME}
 | 
					              ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }
 | 
					            $self->{ $self->{shuttersDev} }
 | 
				
			||||||
            ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2
 | 
					            ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
@@ -1002,7 +991,7 @@ sub getMaxBrightnessAverageArrayObjects {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }
 | 
					            $self->{ $self->{shuttersDev} }
 | 
				
			||||||
              ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME}
 | 
					              ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }
 | 
					            $self->{ $self->{shuttersDev} }
 | 
				
			||||||
            ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2
 | 
					            ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
@@ -1025,7 +1014,7 @@ sub setShadingWaitingPeriod {
 | 
				
			|||||||
sub getShadingWaitingPeriod {
 | 
					sub getShadingWaitingPeriod {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_Shading_WaitingPeriod', 1200 );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_Shading_WaitingPeriod', 1200 );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
### Ende Beschattung
 | 
					### Ende Beschattung
 | 
				
			||||||
sub setExternalTrigger {
 | 
					sub setExternalTrigger {
 | 
				
			||||||
@@ -1046,16 +1035,16 @@ sub getExternalTriggerDevice {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
				
			||||||
              ->{LASTGETTIME}
 | 
					              ->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
				
			||||||
            ->{LASTGETTIME} ) < 2
 | 
					            ->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
    $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{LASTGETTIME} =
 | 
					    $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{LASTGETTIME} =
 | 
				
			||||||
      int( gettimeofday() );
 | 
					      int( ::gettimeofday() );
 | 
				
			||||||
    my ( $device, $reading, $valueActive, $valueInactive, $posActive,
 | 
					    my ( $device, $reading, $valueActive, $valueInactive, $posActive,
 | 
				
			||||||
        $posInactive, $valueActive2, $posActive2 )
 | 
					        $posInactive, $valueActive2, $posActive2 )
 | 
				
			||||||
      = FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
 | 
					      = FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
 | 
				
			||||||
        'ASC_ExternalTrigger', 'none' );
 | 
					        $self->{shuttersDev}, 'ASC_ExternalTrigger', 'none' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ### erwartetes Ergebnis
 | 
					    ### erwartetes Ergebnis
 | 
				
			||||||
# DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE VALUEACTIVE2:POSACTIVE2
 | 
					# DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE VALUEACTIVE2:POSACTIVE2
 | 
				
			||||||
@@ -1070,10 +1059,11 @@ sub getExternalTriggerDevice {
 | 
				
			|||||||
      $valueInactive;
 | 
					      $valueInactive;
 | 
				
			||||||
    $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posactive} =
 | 
					    $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posactive} =
 | 
				
			||||||
      $posActive;
 | 
					      $posActive;
 | 
				
			||||||
    $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posinactive} =
 | 
					    $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posinactive} = (
 | 
				
			||||||
      (   $posInactive ne 'none'
 | 
					          $posInactive ne 'none'
 | 
				
			||||||
        ? $posInactive
 | 
					        ? $posInactive
 | 
				
			||||||
        : $FHEM::Automation::ShuttersControl::shutters->getLastPos );
 | 
					        : $FHEM::Automation::ShuttersControl::shutters->getLastPos
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
    $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{valueactive2} =
 | 
					    $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{valueactive2} =
 | 
				
			||||||
      $valueActive2;
 | 
					      $valueActive2;
 | 
				
			||||||
    $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posactive2} =
 | 
					    $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posactive2} =
 | 
				
			||||||
@@ -1092,7 +1082,7 @@ sub getExternalTriggerReading {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
				
			||||||
              ->{LASTGETTIME}
 | 
					              ->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
				
			||||||
            ->{LASTGETTIME} ) < 2
 | 
					            ->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
@@ -1110,7 +1100,7 @@ sub getExternalTriggerValueActive {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
				
			||||||
              ->{LASTGETTIME}
 | 
					              ->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
				
			||||||
            ->{LASTGETTIME} ) < 2
 | 
					            ->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
@@ -1130,7 +1120,7 @@ sub getExternalTriggerValueActive2 {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
				
			||||||
              ->{LASTGETTIME}
 | 
					              ->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
				
			||||||
            ->{LASTGETTIME} ) < 2
 | 
					            ->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
@@ -1150,7 +1140,7 @@ sub getExternalTriggerValueInactive {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
				
			||||||
              ->{LASTGETTIME}
 | 
					              ->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
				
			||||||
            ->{LASTGETTIME} ) < 2
 | 
					            ->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
@@ -1169,7 +1159,7 @@ sub getExternalTriggerPosActive {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
				
			||||||
              ->{LASTGETTIME}
 | 
					              ->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
				
			||||||
            ->{LASTGETTIME} ) < 2
 | 
					            ->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
@@ -1187,7 +1177,7 @@ sub getExternalTriggerPosActive2 {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
				
			||||||
              ->{LASTGETTIME}
 | 
					              ->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
				
			||||||
            ->{LASTGETTIME} ) < 2
 | 
					            ->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
@@ -1205,7 +1195,7 @@ sub getExternalTriggerPosInactive {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
				
			||||||
              ->{LASTGETTIME}
 | 
					              ->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
 | 
				
			||||||
            ->{LASTGETTIME} ) < 2
 | 
					            ->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
@@ -1227,7 +1217,7 @@ sub setDelay {
 | 
				
			|||||||
sub getDelay {
 | 
					sub getDelay {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $val = AttrVal( $self->{shuttersDev}, 'ASC_Drive_Delay', -1 );
 | 
					    my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Drive_Delay', -1 );
 | 
				
			||||||
    return ( $val =~ m{^\d+$}xms ? $val : -1 );
 | 
					    return ( $val =~ m{^\d+$}xms ? $val : -1 );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1243,7 +1233,7 @@ sub setDelayStart {
 | 
				
			|||||||
sub getDelayStart {
 | 
					sub getDelayStart {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $val = AttrVal( $self->{shuttersDev}, 'ASC_Drive_DelayStart', -1 );
 | 
					    my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Drive_DelayStart', -1 );
 | 
				
			||||||
    return ( ( $val > 0 && $val =~ m{^\d+$}xms ) ? $val : -1 );
 | 
					    return ( ( $val > 0 && $val =~ m{^\d+$}xms ) ? $val : -1 );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1260,7 +1250,7 @@ sub setBlockingTimeAfterManual {
 | 
				
			|||||||
sub getBlockingTimeAfterManual {
 | 
					sub getBlockingTimeAfterManual {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_afterManual',
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_afterManual',
 | 
				
			||||||
        1200 );
 | 
					        1200 );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1277,7 +1267,7 @@ sub setBlockingTimeBeforNightClose {
 | 
				
			|||||||
sub getBlockingTimeBeforNightClose {
 | 
					sub getBlockingTimeBeforNightClose {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_beforNightClose',
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_beforNightClose',
 | 
				
			||||||
        3600 );
 | 
					        3600 );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1294,7 +1284,7 @@ sub setBlockingTimeBeforDayOpen {
 | 
				
			|||||||
sub getBlockingTimeBeforDayOpen {
 | 
					sub getBlockingTimeBeforDayOpen {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_beforDayOpen',
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_beforDayOpen',
 | 
				
			||||||
        3600 );
 | 
					        3600 );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1310,9 +1300,9 @@ sub setPosCmd {
 | 
				
			|||||||
sub getPosCmd {
 | 
					sub getPosCmd {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_Pos_Reading',
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_Pos_Reading',
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::userAttrList{'ASC_Pos_Reading'}
 | 
					        $FHEM::Automation::ShuttersControl::userAttrList{'ASC_Pos_Reading'}
 | 
				
			||||||
          [ AttrVal( $self->{shuttersDev}, 'ASC', 1 ) ] );
 | 
					          [ ::AttrVal( $self->{shuttersDev}, 'ASC', 1 ) ] );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub setOpenPos {
 | 
					sub setOpenPos {
 | 
				
			||||||
@@ -1377,7 +1367,7 @@ sub setVentilatePosAfterDayClosed {
 | 
				
			|||||||
sub getVentilatePosAfterDayClosed {
 | 
					sub getVentilatePosAfterDayClosed {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_PosAfterDayClosed',
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_PosAfterDayClosed',
 | 
				
			||||||
        'open' );
 | 
					        'open' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1442,7 +1432,7 @@ sub setVentilateOpen {
 | 
				
			|||||||
sub getVentilateOpen {
 | 
					sub getVentilateOpen {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_Ventilate_Window_Open', 'on' );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_Ventilate_Window_Open', 'on' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub setComfortOpenPos {
 | 
					sub setComfortOpenPos {
 | 
				
			||||||
@@ -1482,7 +1472,7 @@ sub setPartyMode {
 | 
				
			|||||||
sub getPartyMode {
 | 
					sub getPartyMode {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_Partymode', 'off' );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_Partymode', 'off' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub setRoommates {
 | 
					sub setRoommates {
 | 
				
			||||||
@@ -1497,7 +1487,7 @@ sub setRoommates {
 | 
				
			|||||||
sub getRoommates {
 | 
					sub getRoommates {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Device', 'none' );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Device', 'none' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub setRoommatesReading {
 | 
					sub setRoommatesReading {
 | 
				
			||||||
@@ -1512,7 +1502,7 @@ sub setRoommatesReading {
 | 
				
			|||||||
sub getRoommatesReading {
 | 
					sub getRoommatesReading {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Reading', 'state' );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Reading', 'state' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub getWindPos {
 | 
					sub getWindPos {
 | 
				
			||||||
@@ -1525,7 +1515,7 @@ sub getWindPos {
 | 
				
			|||||||
        exists(
 | 
					        exists(
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
 | 
				
			||||||
        ) < 2
 | 
					        ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
@@ -1544,15 +1534,15 @@ sub getWindMax {
 | 
				
			|||||||
        exists(
 | 
					        exists(
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
 | 
				
			||||||
        ) < 2
 | 
					        ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
    $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} =
 | 
					    $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} =
 | 
				
			||||||
      int( gettimeofday() );
 | 
					      int( ::gettimeofday() );
 | 
				
			||||||
    my ( $max, $hyst, $pos ) =
 | 
					    my ( $max, $hyst, $pos ) =
 | 
				
			||||||
      FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
 | 
					      FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
 | 
				
			||||||
        'ASC_WindParameters', '50:20' );
 | 
					        $self->{shuttersDev}, 'ASC_WindParameters', '50:20' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ## Erwartetes Ergebnis
 | 
					    ## Erwartetes Ergebnis
 | 
				
			||||||
    # max:hyst pos
 | 
					    # max:hyst pos
 | 
				
			||||||
@@ -1560,10 +1550,11 @@ sub getWindMax {
 | 
				
			|||||||
    $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggermax} = $max;
 | 
					    $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggermax} = $max;
 | 
				
			||||||
    $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggerhyst} =
 | 
					    $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggerhyst} =
 | 
				
			||||||
      ( $hyst ne 'none' ? $max - $hyst : $max - 20 );
 | 
					      ( $hyst ne 'none' ? $max - $hyst : $max - 20 );
 | 
				
			||||||
    $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{closedPos} =
 | 
					    $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{closedPos} = (
 | 
				
			||||||
      (   $pos ne 'none'
 | 
					          $pos ne 'none'
 | 
				
			||||||
        ? $pos
 | 
					        ? $pos
 | 
				
			||||||
        : $FHEM::Automation::ShuttersControl::shutters->getOpenPos );
 | 
					        : $FHEM::Automation::ShuttersControl::shutters->getOpenPos
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggermax};
 | 
					    return $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggermax};
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1587,7 +1578,7 @@ sub getWindMin {
 | 
				
			|||||||
        exists(
 | 
					        exists(
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
 | 
				
			||||||
        ) < 2
 | 
					        ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
@@ -1608,7 +1599,7 @@ sub setWindProtection {
 | 
				
			|||||||
sub getWindProtection {
 | 
					sub getWindProtection {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_WindProtection', 'off' );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_WindProtection', 'off' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub setRainProtection {
 | 
					sub setRainProtection {
 | 
				
			||||||
@@ -1623,7 +1614,7 @@ sub setRainProtection {
 | 
				
			|||||||
sub getRainProtection {
 | 
					sub getRainProtection {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_RainProtection', 'off' );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_RainProtection', 'off' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub setModeUp {
 | 
					sub setModeUp {
 | 
				
			||||||
@@ -1638,7 +1629,7 @@ sub setModeUp {
 | 
				
			|||||||
sub getModeUp {
 | 
					sub getModeUp {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_Mode_Up', 'always' );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_Mode_Up', 'always' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub setModeDown {
 | 
					sub setModeDown {
 | 
				
			||||||
@@ -1653,7 +1644,7 @@ sub setModeDown {
 | 
				
			|||||||
sub getModeDown {
 | 
					sub getModeDown {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_Mode_Down', 'always' );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_Mode_Down', 'always' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub setLockOut {
 | 
					sub setLockOut {
 | 
				
			||||||
@@ -1668,7 +1659,7 @@ sub setLockOut {
 | 
				
			|||||||
sub getLockOut {
 | 
					sub getLockOut {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_LockOut', 'off' );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_LockOut', 'off' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub setLockOutCmd {
 | 
					sub setLockOutCmd {
 | 
				
			||||||
@@ -1683,7 +1674,7 @@ sub setLockOutCmd {
 | 
				
			|||||||
sub getLockOutCmd {
 | 
					sub getLockOutCmd {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_LockOut_Cmd', 'none' );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_LockOut_Cmd', 'none' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub setAntiFreeze {
 | 
					sub setAntiFreeze {
 | 
				
			||||||
@@ -1698,7 +1689,7 @@ sub setAntiFreeze {
 | 
				
			|||||||
sub getAntiFreeze {
 | 
					sub getAntiFreeze {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_Antifreeze', 'off' );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_Antifreeze', 'off' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub setAutoAstroModeMorning {
 | 
					sub setAutoAstroModeMorning {
 | 
				
			||||||
@@ -1713,7 +1704,8 @@ sub setAutoAstroModeMorning {
 | 
				
			|||||||
sub getAutoAstroModeMorning {
 | 
					sub getAutoAstroModeMorning {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorning', 'none' );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorning',
 | 
				
			||||||
 | 
					        'none' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub setAutoAstroModeEvening {
 | 
					sub setAutoAstroModeEvening {
 | 
				
			||||||
@@ -1728,7 +1720,8 @@ sub setAutoAstroModeEvening {
 | 
				
			|||||||
sub getAutoAstroModeEvening {
 | 
					sub getAutoAstroModeEvening {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEvening', 'none' );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEvening',
 | 
				
			||||||
 | 
					        'none' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub setAutoAstroModeMorningHorizon {
 | 
					sub setAutoAstroModeMorningHorizon {
 | 
				
			||||||
@@ -1744,7 +1737,7 @@ sub setAutoAstroModeMorningHorizon {
 | 
				
			|||||||
sub getAutoAstroModeMorningHorizon {
 | 
					sub getAutoAstroModeMorningHorizon {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorningHorizon',
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorningHorizon',
 | 
				
			||||||
        0 );
 | 
					        0 );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1761,7 +1754,7 @@ sub setAutoAstroModeEveningHorizon {
 | 
				
			|||||||
sub getAutoAstroModeEveningHorizon {
 | 
					sub getAutoAstroModeEveningHorizon {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEveningHorizon',
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEveningHorizon',
 | 
				
			||||||
        0 );
 | 
					        0 );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1777,7 +1770,7 @@ sub setUp {
 | 
				
			|||||||
sub getUp {
 | 
					sub getUp {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_Up', 'astro' );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_Up', 'astro' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub setDown {
 | 
					sub setDown {
 | 
				
			||||||
@@ -1792,14 +1785,15 @@ sub setDown {
 | 
				
			|||||||
sub getDown {
 | 
					sub getDown {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_Down', 'astro' );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_Down', 'astro' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub setShadingBetweenTheTime {
 | 
					sub setShadingBetweenTheTime {
 | 
				
			||||||
    my $self    = shift;
 | 
					    my $self    = shift;
 | 
				
			||||||
    my $attrVal = shift;
 | 
					    my $attrVal = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    _setAttributs( $self->{shuttersDev}, 'ASC_Shading_BetweenTheTime', $attrVal );
 | 
					    _setAttributs( $self->{shuttersDev}, 'ASC_Shading_BetweenTheTime',
 | 
				
			||||||
 | 
					        $attrVal );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1807,7 +1801,8 @@ sub setShadingBetweenTheTime {
 | 
				
			|||||||
sub getShadingBetweenTheTime {
 | 
					sub getShadingBetweenTheTime {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_Shading_BetweenTheTime', '00:00-24:00' );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_Shading_BetweenTheTime',
 | 
				
			||||||
 | 
					        '00:00-24:00' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub setTimeUpEarly {
 | 
					sub setTimeUpEarly {
 | 
				
			||||||
@@ -1822,7 +1817,7 @@ sub setTimeUpEarly {
 | 
				
			|||||||
sub getTimeUpEarly {
 | 
					sub getTimeUpEarly {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_Early', '05:00' );
 | 
					    my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_Early', '05:00' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ( defined( PerlCodeCheck($val) ) ) {
 | 
					    if ( defined( PerlCodeCheck($val) ) ) {
 | 
				
			||||||
        $val = PerlCodeCheck($val);
 | 
					        $val = PerlCodeCheck($val);
 | 
				
			||||||
@@ -1847,7 +1842,7 @@ sub setTimeUpLate {
 | 
				
			|||||||
sub getTimeUpLate {
 | 
					sub getTimeUpLate {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_Late', '08:30' );
 | 
					    my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_Late', '08:30' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ( defined( PerlCodeCheck($val) ) ) {
 | 
					    if ( defined( PerlCodeCheck($val) ) ) {
 | 
				
			||||||
        $val = PerlCodeCheck($val);
 | 
					        $val = PerlCodeCheck($val);
 | 
				
			||||||
@@ -1872,7 +1867,7 @@ sub setTimeDownEarly {
 | 
				
			|||||||
sub getTimeDownEarly {
 | 
					sub getTimeDownEarly {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Down_Early', '16:00' );
 | 
					    my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Time_Down_Early', '16:00' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ( defined( PerlCodeCheck($val) ) ) {
 | 
					    if ( defined( PerlCodeCheck($val) ) ) {
 | 
				
			||||||
        $val = PerlCodeCheck($val);
 | 
					        $val = PerlCodeCheck($val);
 | 
				
			||||||
@@ -1897,7 +1892,7 @@ sub setTimeDownLate {
 | 
				
			|||||||
sub getTimeDownLate {
 | 
					sub getTimeDownLate {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Down_Late', '22:00' );
 | 
					    my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Time_Down_Late', '22:00' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ( defined( PerlCodeCheck($val) ) ) {
 | 
					    if ( defined( PerlCodeCheck($val) ) ) {
 | 
				
			||||||
        $val = PerlCodeCheck($val);
 | 
					        $val = PerlCodeCheck($val);
 | 
				
			||||||
@@ -1923,7 +1918,7 @@ sub getTimeUpWeHoliday {
 | 
				
			|||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    my $val =
 | 
					    my $val =
 | 
				
			||||||
      AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_WE_Holiday', '01:25' );
 | 
					      ::AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_WE_Holiday', '01:25' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ( defined( PerlCodeCheck($val) ) ) {
 | 
					    if ( defined( PerlCodeCheck($val) ) ) {
 | 
				
			||||||
        $val = PerlCodeCheck($val);
 | 
					        $val = PerlCodeCheck($val);
 | 
				
			||||||
@@ -1945,7 +1940,7 @@ sub getBrightnessMinVal {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
 | 
				
			||||||
              ->{LASTGETTIME}
 | 
					              ->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
 | 
				
			||||||
            ->{LASTGETTIME} ) < 2
 | 
					            ->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
@@ -1964,7 +1959,7 @@ sub getBrightnessMaxVal {
 | 
				
			|||||||
            $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
 | 
				
			||||||
              ->{LASTGETTIME}
 | 
					              ->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
 | 
				
			||||||
            ->{LASTGETTIME} ) < 2
 | 
					            ->{LASTGETTIME} ) < 2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
@@ -1986,7 +1981,7 @@ sub setDriveUpMaxDuration {
 | 
				
			|||||||
sub getDriveUpMaxDuration {
 | 
					sub getDriveUpMaxDuration {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_DriveUpMaxDuration', 60 );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_DriveUpMaxDuration', 60 );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1;
 | 
					1;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
###############################################################################
 | 
					###############################################################################
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Developed with Kate
 | 
					# Developed with VSCodium and richterger perl plugin
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#  (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net)
 | 
					#  (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
 | 
				
			||||||
#  All rights reserved
 | 
					#  All rights reserved
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#   Special thanks goes to:
 | 
					#   Special thanks goes to:
 | 
				
			||||||
@@ -44,21 +44,10 @@ use strict;
 | 
				
			|||||||
use warnings;
 | 
					use warnings;
 | 
				
			||||||
use utf8;
 | 
					use utf8;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use GPUtils qw(GP_Import);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Import der FHEM Funktionen
 | 
					 | 
				
			||||||
BEGIN {
 | 
					 | 
				
			||||||
    GP_Import(
 | 
					 | 
				
			||||||
        qw(
 | 
					 | 
				
			||||||
          ReadingsVal
 | 
					 | 
				
			||||||
          ReadingsNum)
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub getBrightness {
 | 
					sub getBrightness {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return ReadingsNum(
 | 
					    return ::ReadingsNum(
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::shutters->_getBrightnessSensor,
 | 
					        $FHEM::Automation::ShuttersControl::shutters->_getBrightnessSensor,
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::shutters->getBrightnessReading,
 | 
					        $FHEM::Automation::ShuttersControl::shutters->getBrightnessReading,
 | 
				
			||||||
        -1 );
 | 
					        -1 );
 | 
				
			||||||
@@ -67,7 +56,7 @@ sub getBrightness {
 | 
				
			|||||||
sub getWindStatus {
 | 
					sub getWindStatus {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return ReadingsVal(
 | 
					    return ::ReadingsVal(
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::ascDev->_getWindSensor,
 | 
					        $FHEM::Automation::ShuttersControl::ascDev->_getWindSensor,
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::ascDev->getWindSensorReading, -1 );
 | 
					        $FHEM::Automation::ShuttersControl::ascDev->getWindSensorReading, -1 );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -75,7 +64,7 @@ sub getWindStatus {
 | 
				
			|||||||
sub getStatus {
 | 
					sub getStatus {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return ReadingsNum( $self->{shuttersDev},
 | 
					    return ::ReadingsNum( $self->{shuttersDev},
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::shutters->getPosCmd, 0 );
 | 
					        $FHEM::Automation::ShuttersControl::shutters->getPosCmd, 0 );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -88,7 +77,7 @@ sub getDelayCmd {
 | 
				
			|||||||
sub getASCenable {
 | 
					sub getASCenable {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return ReadingsVal( $self->{shuttersDev}, 'ASC_Enable', 'on' );
 | 
					    return ::ReadingsVal( $self->{shuttersDev}, 'ASC_Enable', 'on' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1;
 | 
					1;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
###############################################################################
 | 
					###############################################################################
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Developed with Kate
 | 
					# Developed with VSCodium and richterger perl plugin
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#  (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net)
 | 
					#  (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
 | 
				
			||||||
#  All rights reserved
 | 
					#  All rights reserved
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#   Special thanks goes to:
 | 
					#   Special thanks goes to:
 | 
				
			||||||
@@ -47,7 +47,7 @@ use utf8;
 | 
				
			|||||||
use FHEM::Automation::ShuttersControl::Window::Attr;
 | 
					use FHEM::Automation::ShuttersControl::Window::Attr;
 | 
				
			||||||
use FHEM::Automation::ShuttersControl::Window::Readings;
 | 
					use FHEM::Automation::ShuttersControl::Window::Readings;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
our @ISA =
 | 
					use base
 | 
				
			||||||
  qw(FHEM::Automation::ShuttersControl::Window::Attr FHEM::Automation::ShuttersControl::Window::Readings);
 | 
					  qw(FHEM::Automation::ShuttersControl::Window::Attr FHEM::Automation::ShuttersControl::Window::Readings);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1;
 | 
					1;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
###############################################################################
 | 
					###############################################################################
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Developed with Kate
 | 
					# Developed with VSCodium and richterger perl plugin
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#  (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net)
 | 
					#  (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
 | 
				
			||||||
#  All rights reserved
 | 
					#  All rights reserved
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#   Special thanks goes to:
 | 
					#   Special thanks goes to:
 | 
				
			||||||
@@ -44,17 +44,6 @@ use strict;
 | 
				
			|||||||
use warnings;
 | 
					use warnings;
 | 
				
			||||||
use utf8;
 | 
					use utf8;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use GPUtils qw(GP_Import);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Import der FHEM Funktionen
 | 
					 | 
				
			||||||
BEGIN {
 | 
					 | 
				
			||||||
    GP_Import(
 | 
					 | 
				
			||||||
        qw(
 | 
					 | 
				
			||||||
          AttrVal
 | 
					 | 
				
			||||||
          gettimeofday)
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub setSubTyp {
 | 
					sub setSubTyp {
 | 
				
			||||||
    my $self    = shift;
 | 
					    my $self    = shift;
 | 
				
			||||||
    my $attrVal = shift;
 | 
					    my $attrVal = shift;
 | 
				
			||||||
@@ -67,7 +56,8 @@ sub setSubTyp {
 | 
				
			|||||||
sub getSubTyp {
 | 
					sub getSubTyp {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_subType', 'twostate' );
 | 
					    return ::AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_subType',
 | 
				
			||||||
 | 
					        'twostate' );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sub setWinDev {
 | 
					sub setWinDev {
 | 
				
			||||||
@@ -87,15 +77,15 @@ sub _getWinDev {
 | 
				
			|||||||
        exists(
 | 
					        exists(
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} ) <
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} ) <
 | 
				
			||||||
        2
 | 
					        2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
    $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} =
 | 
					    $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} =
 | 
				
			||||||
      int( gettimeofday() );
 | 
					      int( ::gettimeofday() );
 | 
				
			||||||
    my ( $device, $reading ) =
 | 
					    my ( $device, $reading ) =
 | 
				
			||||||
      FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
 | 
					      FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
 | 
				
			||||||
        'ASC_WindowRec', 'none' );
 | 
					        $self->{shuttersDev}, 'ASC_WindowRec', 'none' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ### erwartetes Ergebnis
 | 
					    ### erwartetes Ergebnis
 | 
				
			||||||
    # DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE
 | 
					    # DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE
 | 
				
			||||||
@@ -116,7 +106,7 @@ sub getWinDevReading {
 | 
				
			|||||||
        exists(
 | 
					        exists(
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME}
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME}
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        && ( gettimeofday() -
 | 
					        && ( ::gettimeofday() -
 | 
				
			||||||
            $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} ) <
 | 
					            $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} ) <
 | 
				
			||||||
        2
 | 
					        2
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
###############################################################################
 | 
					###############################################################################
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Developed with Kate
 | 
					# Developed with VSCodium and richterger perl plugin
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#  (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net)
 | 
					#  (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
 | 
				
			||||||
#  All rights reserved
 | 
					#  All rights reserved
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#   Special thanks goes to:
 | 
					#   Special thanks goes to:
 | 
				
			||||||
@@ -44,20 +44,10 @@ use strict;
 | 
				
			|||||||
use warnings;
 | 
					use warnings;
 | 
				
			||||||
use utf8;
 | 
					use utf8;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use GPUtils qw(GP_Import);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Import der FHEM Funktionen
 | 
					 | 
				
			||||||
BEGIN {
 | 
					 | 
				
			||||||
    GP_Import(
 | 
					 | 
				
			||||||
        qw(
 | 
					 | 
				
			||||||
          ReadingsVal)
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub getWinStatus {
 | 
					sub getWinStatus {
 | 
				
			||||||
    my $self = shift;
 | 
					    my $self = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return ReadingsVal(
 | 
					    return ::ReadingsVal(
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::shutters->_getWinDev,
 | 
					        $FHEM::Automation::ShuttersControl::shutters->_getWinDev,
 | 
				
			||||||
        $FHEM::Automation::ShuttersControl::shutters->getWinDevReading,
 | 
					        $FHEM::Automation::ShuttersControl::shutters->getWinDevReading,
 | 
				
			||||||
        'closed' );
 | 
					        'closed' );
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user