mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-01-31 06:39:11 +00:00
73_AutoShuttersControl: add user control commands, expan SelfDefense for EG windows, Bugfixes and change commandref
git-svn-id: https://svn.fhem.de/fhem/trunk@25127 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
74f276f67a
commit
8d9af6f53d
@ -1,5 +1,7 @@
|
||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
||||
# Do not insert empty lines here, update check depends on it.
|
||||
- feature: 73_AutoShuttersControl: add user control commands, expan
|
||||
SelfDefense for EG windows, Bugfixes and change commandref
|
||||
- added: maintainer added for 97_PiXtendV2.pm (=>PiXtend)
|
||||
- feature: 73_GardenaSmartBridge.pm 74_GardenaSmartDevice.pm:
|
||||
add stop/resume schedule, add wintermode, fix notifys,
|
||||
|
@ -416,11 +416,11 @@ __END__
|
||||
after the last manual operation in seconds. Defaults to 1200 (20 minutes).
|
||||
</li>
|
||||
<a id="AutoShuttersControl-attr-ASC_BlockingTime_beforDayOpen"></a>
|
||||
<li><strong>ASC_BlockingTime_beforDayOpen</strong> - Time in which no closing operation is made by
|
||||
<li><strong>ASC_BlockingTime_beforeDayOpen</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).
|
||||
</li>
|
||||
<a id="AutoShuttersControl-attr-ASC_BlockingTime_beforNightClose"></a>
|
||||
<li><strong>ASC_BlockingTime_beforNightClose</strong> - Time in which no closing operation is made by
|
||||
<a id="AutoShuttersControl-attr-ASC_BlockingTime_beforeNightClose"></a>
|
||||
<li><strong>ASC_BlockingTime_beforeNightClose</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).
|
||||
</li>
|
||||
<a id="AutoShuttersControl-attr-ASC_BrightnessSensor"></a>
|
||||
@ -639,6 +639,18 @@ __END__
|
||||
</li>
|
||||
<a id="AutoShuttersControl-attr-ASC_SlatPosCmd_SlatDevice"></a>
|
||||
<li><strong>ASC_SlatPosCmd_SlatDevice</strong> - If your shutter is "venetian blind" type (with turnable slats, lamellas or similar), this is the place to set additional command and/or device info to control the slat level. Examples: <i>attr ROLLO ASC_SlatPosCmd_SlatDevice slatPct</i> or <i>attr ROLLO ASC_SlatPosCmd_SlatDevice dim:ROLLOSLATDEVICE</i>. Providing a device name for the slat device is only needed in case it's different to the shutter itself. If attribute is set, additional positioning values for the respective slat levels can be set in attributes <i>ASC_Open_Pos</i>, <i>ASC_Closed_Pos</i>, <i>ASC_Ventilate_Pos</i>, <i>ASC_ComfortOpen_Pos</i>, <i>ASC_Shading_Pos</i> and <i>ASC_Sleep_Pos</i>.</li>
|
||||
<a id="AutoShuttersControl-attr-ASC_CommandTemplate"></a>
|
||||
<li><strong>ASC_CommandTemplate</strong> - <strong>FHEM or Perl command</strong> (Perl in braces as usual needs escaping semicolons etc.). The parameters <i>$name</i> (name of the shutter device), <i>$level</i> (target position for the respective drive command) and <i>$slatLevel</i> (target position for the (rurnable) lammellas in venetion blinds) will be replaced by the appropirate values. You may have to take care to avoid unneeded driving commands.
|
||||
Examples:
|
||||
<ul>
|
||||
<li><i>attr ROLLO ASC_CommandTemplate set $name $level</i> - Address the position command directly to the main switch of the device</li>
|
||||
<li><i>attr ROLLO ASC_CommandTemplate set $name pct $level</i> - Address the position command directly to the main switch of the device</li>
|
||||
<li><i>attr ROLLO ASC_CommandTemplate set $name datapoint 4.LEVEL_2 $slatLevel 4.LEVEL $level</i> - combined positioning command, e.g. appropriate for HM-IP-venetian blind type actors</li>
|
||||
<li><i>attr ROLLO ASC_CommandTemplate { fhem("set $name ".($level+1024)).";set $name 0")}</i> - positioning command with Perl calculation and additional "execute" command, e.g. for an SPS type blind</li>
|
||||
<li><i>attr ROLLO ASC_CommandTemplate myPerlCode("$name", $level, $slatLevel)</i> - positioning command from perlfunction</li>
|
||||
</ul>
|
||||
<strong>Note: ASC_CommandTemplate</strong> is meant for some rare and special cases. In most cases there's <strong>no need</strong> to set this attribute!
|
||||
</li>
|
||||
<a id="AutoShuttersControl-attr-ASC_WindowRec_PosAfterDayClosed"></a>
|
||||
<li><strong>ASC_WindowRec_PosAfterDayClosed</strong> - open,lastManual / auf welche Position soll das Rollo nach dem schließen am Tag fahren. Open Position oder letzte gespeicherte manuelle Position (default: open)</li>
|
||||
<blockquote>
|
||||
@ -1028,10 +1040,10 @@ __END__
|
||||
<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>
|
||||
<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_beforDayOpen"></a>
|
||||
<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_beforNightClose"></a>
|
||||
<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_BlockingTime_beforeDayOpen"></a>
|
||||
<li><strong>ASC_BlockingTime_beforeDayOpen</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>
|
||||
<li><strong>ASC_BlockingTime_beforeNightClose</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>
|
||||
<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>
|
||||
@ -1157,6 +1169,20 @@ __END__
|
||||
<li><strong>ASC_WindowRec_subType</strong> - Typ des verwendeten Fensterkontaktes: twostate (optisch oder magnetisch) oder threestate (Drehgriffkontakt) (default: twostate)</li>
|
||||
<a id="AutoShuttersControl-attr-ASC_SlatPosCmd_SlatDevice"></a>
|
||||
<li><strong>ASC_SlatPosCmd_SlatDevice</strong> - Angaben zu einem Slat (Lamellen) CMD und - sofern diese Lamellen über ein anderes Device gesteuert werden - zum Slat Device. Beispiele: <i>attr ROLLO ASC_SlatPosCmd_SlatDevice slatPct</i> oder <i>attr ROLLO ASC_SlatPosCmd_SlatDevice dim:ROLLOSLATDEVICE</i>. Die Angabe des Devices ist nur erforderlich, wenn zur Steuerung der Lamellen ein anderes Device verwendet wird. Damit das ganze dann auch greift, muss in den 6 Positionsangaben ASC_Open_Pos, ASC_Closed_Pos, ASC_Ventilate_Pos, ASC_ComfortOpen_Pos, ASC_Shading_Pos und ASC_Sleep_Pos ein weiterer Parameter für die Lamellenstellung mit angegeben werden.</li>
|
||||
<a id="AutoShuttersControl-attr-ASC_CommandTemplate"></a>
|
||||
<li><strong>ASC_CommandTemplate</strong> - <strong>FHEM-Kommando(s) oder Perl-Anweisung</strong> (in geschweiften Klammern unter Beachtung der üblichen Regeln für das escapen von Semicolons etc.). Die Variablen <i>$name</i> (der Name des Rollladen-Devices), <i>$level</i> (die Zielposition des Fahrbefehls) und <i>$slatLevel</i> (die Zielposition des Fahrbefehls für eventuelle Lamellen) werden durch die ermittelten Werte ersetzt, es muss selbst dafür gesorgt werden, dass eventuell unnötige Fahrbefehle aussortiert werden.
|
||||
Beispiele:
|
||||
<ul>
|
||||
<li><i>attr ROLLO ASC_CommandTemplate set $name $level</i> - Positionsbefehl direkt an Gerät
|
||||
setzen</li>
|
||||
<li><i>attr ROLLO ASC_CommandTemplate set $name pct $level</i> - Positionsbefehl direkt an Gerät
|
||||
setzen</li>
|
||||
<li><i>attr ROLLO ASC_CommandTemplate set $name datapoint 4.LEVEL_2 $slatLevel 4.LEVEL $level</i> - Positionsbefehl und Lamellen-Ansteuerung für HM-IP-Jalousieaktoren</li>
|
||||
<li><i>attr ROLLO ASC_CommandTemplate { fhem("set $name ".($level+1024)).";set $name 0")}</i> - Positionsbefehl für eine SPS in Perl umrechnen</li>
|
||||
<li><i>attr ROLLO ASC_CommandTemplate myPerlCode("$name", $level, $slatLevel)</i> - Positionsbefehl aus eigener Perlfunktion</li>
|
||||
</ul>
|
||||
<strong>Hinweis: ASC_CommandTemplate</strong> ist für seltene und spezielle Fälle gedacht. In der Regel ist es nicht erforderlich, dieses Attribut zu setzen!
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
</p>
|
||||
@ -1436,7 +1462,7 @@ __END__
|
||||
],
|
||||
"release_status": "stable",
|
||||
"license": "GPL_2",
|
||||
"version": "v0.10.17",
|
||||
"version": "v0.10.18",
|
||||
"author": [
|
||||
"Marko Oldenburg <fhemdevelopment@cooltux.net>"
|
||||
],
|
||||
|
@ -184,9 +184,7 @@ BEGIN {
|
||||
delFromAttrList
|
||||
gettimeofday
|
||||
InternalTimer
|
||||
RemoveInternalTimer
|
||||
computeAlignTime
|
||||
ReplaceEventMap)
|
||||
RemoveInternalTimer)
|
||||
);
|
||||
|
||||
#-- Export to main context with different name
|
||||
@ -229,8 +227,8 @@ our %userAttrList = (
|
||||
'ASC_LockOut:soft,hard,off' => '-',
|
||||
'ASC_LockOut_Cmd:inhibit,blocked,protection' => '-',
|
||||
'ASC_BlockingTime_afterManual' => '-',
|
||||
'ASC_BlockingTime_beforNightClose' => '-',
|
||||
'ASC_BlockingTime_beforDayOpen' => '-',
|
||||
'ASC_BlockingTime_beforeNightClose' => '-',
|
||||
'ASC_BlockingTime_beforeDayOpen' => '-',
|
||||
'ASC_BrightnessSensor' => '-',
|
||||
'ASC_Shading_Pos:10,20,30,40,50,60,70,80,90,100' => [ '', 80, 20 ],
|
||||
'ASC_Shading_Mode:absent,always,off,home' => '-',
|
||||
@ -265,6 +263,7 @@ our %userAttrList = (
|
||||
'ASC_RainProtection:on,off' => '-',
|
||||
'ASC_ExternalTrigger' => '-',
|
||||
'ASC_Adv:on,off' => '-',
|
||||
'ASC_CommandTemplate' => '-',
|
||||
'ASC_SlatPosCmd_SlatDevice' => '-',
|
||||
);
|
||||
|
||||
@ -1227,15 +1226,15 @@ sub RenewSunRiseSetShuttersTimer {
|
||||
1, 0 );
|
||||
}
|
||||
|
||||
# $attr{$shuttersDev}{ASC_Drive_Delay} =
|
||||
# AttrVal( $shuttersDev, 'ASC_Drive_Offset', 'none' )
|
||||
# if ( AttrVal( $shuttersDev, 'ASC_Drive_Offset', 'none' ) ne 'none' );
|
||||
# delFromDevAttrList( $shuttersDev, 'ASC_Drive_Offset' );
|
||||
#
|
||||
# $attr{$shuttersDev}{ASC_Drive_DelayStart} =
|
||||
# AttrVal( $shuttersDev, 'ASC_Drive_OffsetStart', 'none' )
|
||||
# if ( AttrVal( $shuttersDev, 'ASC_Drive_OffsetStart', 'none' ) ne 'none' );
|
||||
# delFromDevAttrList( $shuttersDev, 'ASC_Drive_OffsetStart' );
|
||||
$attr{$shuttersDev}{ASC_BlockingTime_beforeNightClose} =
|
||||
AttrVal( $shuttersDev, 'ASC_BlockingTime_beforNightClose', 'none' )
|
||||
if ( AttrVal( $shuttersDev, 'ASC_BlockingTime_beforNightClose', 'none' ) ne 'none' );
|
||||
delFromDevAttrList( $shuttersDev, 'ASC_BlockingTime_beforNightClose' );
|
||||
|
||||
$attr{$shuttersDev}{ASC_BlockingTime_beforeDayOpen} =
|
||||
AttrVal( $shuttersDev, 'ASC_BlockingTime_beforDayOpen', 'none' )
|
||||
if ( AttrVal( $shuttersDev, 'ASC_BlockingTime_beforDayOpen', 'none' ) ne 'none' );
|
||||
delFromDevAttrList( $shuttersDev, 'ASC_BlockingTime_beforDayOpen' );
|
||||
#
|
||||
# $attr{$shuttersDev}{ASC_Shading_StateChange_SunnyCloudy} =
|
||||
# AttrVal( $shuttersDev, 'ASC_Shading_StateChange_Sunny', 'none' ) . ':'
|
||||
@ -1769,8 +1768,9 @@ sub _SetCmdFn {
|
||||
. '. Grund der Fahrt: '
|
||||
. $shutters->getLastDrive );
|
||||
|
||||
my $driveCommand = $shutters->getPosSetCmd . ' ' . $posValue;
|
||||
my $slatPos = -1;
|
||||
my $driveCommand = $shutters->getPosSetCmd . ' ' . $posValue;
|
||||
my $commandTemplate = $shutters->getCommandTemplate;
|
||||
my $slatPos = -1;
|
||||
|
||||
if ( $shutters->getShadingPositionAssignment ne 'none'
|
||||
|| $shutters->getOpenPositionAssignment ne 'none'
|
||||
@ -1822,32 +1822,48 @@ sub _SetCmdFn {
|
||||
}
|
||||
}
|
||||
|
||||
CommandSet( undef,
|
||||
$shuttersDev
|
||||
. ':FILTER='
|
||||
. $shutters->getPosCmd . '!='
|
||||
. $posValue . ' '
|
||||
. $driveCommand );
|
||||
if ( $commandTemplate ne 'none' ) { # Patch von Beta-User Forum https://forum.fhem.de/index.php/topic,123659.0.html
|
||||
# Nutzervariablen setzen
|
||||
my %specials = (
|
||||
'$name' => $shuttersDev,
|
||||
'$level' => $posValue,
|
||||
'$slatLevel' => $slatPos,
|
||||
'$reason' => $shutters->getLastDrive
|
||||
);
|
||||
|
||||
$commandTemplate = ::EvalSpecials($commandTemplate, %specials);
|
||||
# CMD ausführen
|
||||
::AnalyzeCommandChain( $h, $commandTemplate );
|
||||
}
|
||||
else {
|
||||
CommandSet( undef,
|
||||
$shuttersDev
|
||||
. ':FILTER='
|
||||
. $shutters->getPosCmd . '!='
|
||||
. $posValue . ' '
|
||||
. $driveCommand );
|
||||
|
||||
InternalTimer(
|
||||
gettimeofday() + 3,
|
||||
sub() {
|
||||
CommandSet(
|
||||
undef,
|
||||
(
|
||||
$shutters->getSlatDevice ne 'none'
|
||||
? $shutters->getSlatDevice
|
||||
: $shuttersDev
|
||||
)
|
||||
. ' '
|
||||
. $shutters->getSlatPosCmd . ' '
|
||||
. $slatPos
|
||||
);
|
||||
},
|
||||
$shuttersDev
|
||||
)
|
||||
if ( $slatPos > -1
|
||||
&& $shutters->getSlatPosCmd ne 'none' );
|
||||
InternalTimer(
|
||||
gettimeofday() + 3,
|
||||
sub() {
|
||||
CommandSet(
|
||||
undef,
|
||||
(
|
||||
$shutters->getSlatDevice ne 'none'
|
||||
? $shutters->getSlatDevice
|
||||
: $shuttersDev
|
||||
)
|
||||
. ' '
|
||||
. $shutters->getSlatPosCmd . ' '
|
||||
. $slatPos
|
||||
);
|
||||
},
|
||||
$shuttersDev
|
||||
)
|
||||
if ( $slatPos > -1
|
||||
&& $shutters->getSlatPosCmd ne 'none' );
|
||||
|
||||
}
|
||||
|
||||
$shutters->setSelfDefenseAbsent( 0, 0 )
|
||||
if (!$shutters->getSelfDefenseAbsent
|
||||
|
@ -324,6 +324,13 @@ sub EventProcessingWindowRec {
|
||||
->getShuttersPlace eq 'terrace'
|
||||
)
|
||||
&& !$FHEM::Automation::ShuttersControl::shutters->getIsDay )
|
||||
|| ( $FHEM::Automation::ShuttersControl::shutters->getStatus ==
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getOpenPos
|
||||
&& $FHEM::Automation::ShuttersControl::shutters
|
||||
->getDelayCmd ne 'none'
|
||||
&& $FHEM::Automation::ShuttersControl::shutters
|
||||
->getShuttersPlace eq 'terrace' )
|
||||
)
|
||||
&& ( $FHEM::Automation::ShuttersControl::shutters->getVentilateOpen
|
||||
eq 'on'
|
||||
@ -370,7 +377,12 @@ sub EventProcessingWindowRec {
|
||||
|| $FHEM::Automation::ShuttersControl::shutters
|
||||
->getStatus !=
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getLastManPos )
|
||||
->getLastManPos
|
||||
|| ( $FHEM::Automation::ShuttersControl::shutters
|
||||
->getDelayCmd ne 'none'
|
||||
&& $FHEM::Automation::ShuttersControl::shutters
|
||||
->getShuttersPlace eq 'terrace' )
|
||||
)
|
||||
)
|
||||
{
|
||||
if ( $FHEM::Automation::ShuttersControl::shutters
|
||||
@ -395,11 +407,17 @@ sub EventProcessingWindowRec {
|
||||
->setDriveCmd(
|
||||
(
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getVentilatePosAfterDayClosed eq 'open'
|
||||
->getDelayCmd ne 'none'
|
||||
&& $FHEM::Automation::ShuttersControl::shutters
|
||||
->getShuttersPlace eq 'terrace'
|
||||
? $FHEM::Automation::ShuttersControl::shutters
|
||||
->getOpenPos
|
||||
->getDelayCmd
|
||||
: ( $FHEM::Automation::ShuttersControl::shutters
|
||||
->getVentilatePosAfterDayClosed eq 'open'
|
||||
? $FHEM::Automation::ShuttersControl::shutters
|
||||
->getOpenPos
|
||||
: $FHEM::Automation::ShuttersControl::shutters
|
||||
->getLastManPos
|
||||
->getLastManPos )
|
||||
)
|
||||
);
|
||||
}
|
||||
|
@ -133,11 +133,13 @@ sub _RainProtected {
|
||||
|
||||
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
|
||||
'rain protected');
|
||||
$FHEM::Automation::ShuttersControl::shutters->setDriveCmd(
|
||||
$FHEM::Automation::ShuttersControl::ascDev
|
||||
->getRainSensorShuttersClosedPos);
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->setRainProtectionStatus('protected');
|
||||
|
||||
$FHEM::Automation::ShuttersControl::shutters->setDriveCmd(
|
||||
$FHEM::Automation::ShuttersControl::ascDev
|
||||
->getRainSensorShuttersClosedPos);
|
||||
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->setRainProtectionStatus('protected');
|
||||
}
|
||||
|
||||
sub _RainUnprotected {
|
||||
@ -168,10 +170,11 @@ sub _RainUnprotected {
|
||||
->getClosedPos
|
||||
)
|
||||
)
|
||||
);
|
||||
)
|
||||
if (IsAfterShuttersTimeBlocking($shuttersDev));
|
||||
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->setRainProtectionStatus('unprotected');
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->setRainProtectionStatus('unprotected');
|
||||
}
|
||||
|
||||
|
||||
|
@ -516,6 +516,12 @@ sub getSelfDefenseAbsentDelay {
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_AbsentDelay', 300 );
|
||||
}
|
||||
|
||||
sub getCommandTemplate {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_CommandTemplate', 'none' );
|
||||
}
|
||||
|
||||
sub setWiggleValue {
|
||||
my $self = shift;
|
||||
my $attrVal = shift;
|
||||
|
Loading…
Reference in New Issue
Block a user