fix undefined in fhem.pl

This commit is contained in:
Marko Oldenburg
2019-06-25 13:19:22 +02:00
parent 6396cd25d5
commit e18d609e5f

View File

@ -718,7 +718,7 @@ sub ShuttersDeviceScan($) {
$shutters->setLastPos( $shutters->getStatus ); $shutters->setLastPos( $shutters->getStatus );
$shutters->setDelayCmd('none'); $shutters->setDelayCmd('none');
$shutters->setNoOffset(0); $shutters->setNoOffset(0);
$shutters->setSelfDefenseAbsent(0,0); $shutters->setSelfDefenseAbsent( 0, 0 );
$shutters->setPosSetCmd( $posSetCmds{ $defs{$_}->{TYPE} } ); $shutters->setPosSetCmd( $posSetCmds{ $defs{$_}->{TYPE} } );
$shutters->setShadingStatus( $shutters->setShadingStatus(
( $shutters->getStatus != $shutters->getShadingPos ? 'out' : 'in' ) ( $shutters->getStatus != $shutters->getShadingPos ? 'out' : 'in' )
@ -1222,14 +1222,19 @@ sub EventProcessingResidents($@) {
) )
) )
{ {
if ( ( CheckIfShuttersWindowRecOpen($shuttersDev) != 0 if (
or $shutters->getSelfDefenseMode eq 'absent' ) (
CheckIfShuttersWindowRecOpen($shuttersDev) != 0
or $shutters->getSelfDefenseMode eq 'absent'
)
and $ascDev->getSelfDefense eq 'on' and $ascDev->getSelfDefense eq 'on'
and $shutters->getSelfDefenseExclude eq 'off' ) and $shutters->getSelfDefenseExclude eq 'off'
)
{ {
$shutters->setLastDrive('selfDefense active'); $shutters->setLastDrive('selfDefense active');
$shutters->setSelfDefenseAbsent(0,1) # der erste Wert ist ob der timer schon läuft, der zweite ist ob self defense aktiv ist durch die Bedingungen $shutters->setSelfDefenseAbsent( 0, 1
if ( CheckIfShuttersWindowRecOpen($shuttersDev) == 0 ) # der erste Wert ist ob der timer schon läuft, der zweite ist ob self defense aktiv ist durch die Bedingungen
if ( CheckIfShuttersWindowRecOpen($shuttersDev) == 0
and $shutters->getSelfDefenseMode eq 'absent' ); and $shutters->getSelfDefenseMode eq 'absent' );
} }
else { $shutters->setLastDrive('residents absent'); } else { $shutters->setLastDrive('residents absent'); }
@ -1240,7 +1245,7 @@ sub EventProcessingResidents($@) {
} }
elsif ( $events =~ m#$reading:\s(gone)# elsif ( $events =~ m#$reading:\s(gone)#
and $ascDev->getSelfDefense eq 'on' and $ascDev->getSelfDefense eq 'on'
and $shutters->getSelfDefenseMode eq 'gone') and $shutters->getSelfDefenseMode eq 'gone' )
{ {
foreach my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) { foreach my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) {
$shutters->setShuttersDev($shuttersDev); $shutters->setShuttersDev($shuttersDev);
@ -1281,8 +1286,10 @@ sub EventProcessingResidents($@) {
$shutters->setDriveCmd( $shutters->getClosedPos ); $shutters->setDriveCmd( $shutters->getClosedPos );
} }
elsif ( elsif (
( $shutters->getShadingMode eq 'home' (
or $shutters->getShadingMode eq 'always' ) $shutters->getShadingMode eq 'home'
or $shutters->getShadingMode eq 'always'
)
and IsDay($shuttersDev) and IsDay($shuttersDev)
and $shutters->getIfInShading and $shutters->getIfInShading
and $shutters->getStatus != $shutters->getShadingPos and $shutters->getStatus != $shutters->getShadingPos
@ -1305,40 +1312,44 @@ sub EventProcessingResidents($@) {
$shutters->setLastDrive('shading out'); $shutters->setLastDrive('shading out');
$shutters->setDriveCmd( $shutters->getLastPos ); $shutters->setDriveCmd( $shutters->getLastPos );
} }
elsif ( ( elsif (
$ascDev->getSelfDefense eq 'on' (
and $shutters->getSelfDefenseExclude eq 'off' $ascDev->getSelfDefense eq 'on'
or ( $getResidentsLastStatus eq 'gone' and $shutters->getSelfDefenseExclude eq 'off'
and $shutters->getShuttersPlace eq 'terrace' ) ) or ( $getResidentsLastStatus eq 'gone'
and $shutters->getShuttersPlace eq 'terrace' )
)
and not $shutters->getIfInShading and not $shutters->getIfInShading
and ( $getResidentsLastStatus eq 'gone' and ( $getResidentsLastStatus eq 'gone'
or $getResidentsLastStatus eq 'absent' ) or $getResidentsLastStatus eq 'absent' )
) )
{ {
RemoveInternalTimer($shutters->getSelfDefenseAbsentTimerhash) RemoveInternalTimer( $shutters->getSelfDefenseAbsentTimerhash )
if ( $getResidentsLastStatus eq 'absent' if ( $getResidentsLastStatus eq 'absent'
and $ascDev->getSelfDefense eq 'on' and $ascDev->getSelfDefense eq 'on'
and $shutters->getSelfDefenseExclude eq 'off' and $shutters->getSelfDefenseExclude eq 'off'
and CheckIfShuttersWindowRecOpen($shuttersDev) == 0 and CheckIfShuttersWindowRecOpen($shuttersDev) == 0
and not $shutters->getSelfDefenseAbsent and not $shutters->getSelfDefenseAbsent
and $shutters->getSelfDefenseAbsentTimerrun); and $shutters->getSelfDefenseAbsentTimerrun );
if ( $shutters->getStatus == $shutters->getClosedPos ) { if ( $shutters->getStatus == $shutters->getClosedPos ) {
$shutters->setHardLockOut('on') $shutters->setHardLockOut('on')
if ( CheckIfShuttersWindowRecOpen($shuttersDev) == 2 if (
CheckIfShuttersWindowRecOpen($shuttersDev) == 2
and $shutters->getShuttersPlace eq 'terrace' and $shutters->getShuttersPlace eq 'terrace'
and ($getModeUp eq 'absent' and ( $getModeUp eq 'absent'
or $getModeUp eq 'off') or $getModeUp eq 'off' )
and CheckIfShuttersWindowRecOpen($shuttersDev) != 0); and CheckIfShuttersWindowRecOpen($shuttersDev) != 0
);
$shutters->setLastDrive('selfDefense inactive'); $shutters->setLastDrive('selfDefense inactive');
$shutters->setDriveCmd( $shutters->setDriveCmd(
( (
$shutters->getPrivacyDownStatus $shutters->getPrivacyDownStatus
? $shutters->getPrivacyDownPos ? $shutters->getPrivacyDownPos
: $shutters->getOpenPos : $shutters->getOpenPos
) )
); );
} }
} }
elsif ( elsif (
@ -1770,7 +1781,8 @@ sub EventProcessingShadingBrightness($@) {
and $shutters->getRainProtectionStatus eq 'unprotected' and $shutters->getRainProtectionStatus eq 'unprotected'
and $shutters->getWindProtectionStatus eq 'unprotected' ) and $shutters->getWindProtectionStatus eq 'unprotected' )
{ {
$outTemp = $shutters->getOutTemp if ( $shutters->getOutTemp != -100 ); $outTemp = $shutters->getOutTemp
if ( $shutters->getOutTemp != -100 );
ShadingProcessing( ShadingProcessing(
$hash, $hash,
$shuttersDev, $shuttersDev,
@ -1830,7 +1842,8 @@ sub EventProcessingTwilightDevice($@) {
my $homemode = $shutters->getRoommatesStatus; my $homemode = $shutters->getRoommatesStatus;
$homemode = $ascDev->getResidentsStatus if ( $homemode eq 'none' ); $homemode = $ascDev->getResidentsStatus if ( $homemode eq 'none' );
$outTemp = $shutters->getOutTemp if ( $shutters->getOutTemp != -100 ); $outTemp = $shutters->getOutTemp
if ( $shutters->getOutTemp != -100 );
ASC_Debug( 'EventProcessingTwilightDevice: ' ASC_Debug( 'EventProcessingTwilightDevice: '
. $shutters->getShuttersDev . $shutters->getShuttersDev
@ -1841,8 +1854,7 @@ sub EventProcessingTwilightDevice($@) {
if ( $ascDev->getAutoShuttersControlShading eq 'on' if ( $ascDev->getAutoShuttersControlShading eq 'on'
and $shutters->getRainProtectionStatus eq 'unprotected' and $shutters->getRainProtectionStatus eq 'unprotected'
and $shutters->getWindProtectionStatus eq 'unprotected' and $shutters->getWindProtectionStatus eq 'unprotected' )
)
{ {
ShadingProcessing( ShadingProcessing(
$hash, $hash,
@ -1972,7 +1984,7 @@ sub ShadingProcessing($@) {
"AutoShuttersControl ($name) - Shading Processing - Es ist Sonnenuntergang vorbei oder die Aussentemperatur unterhalb der Shading Temperatur " "AutoShuttersControl ($name) - Shading Processing - Es ist Sonnenuntergang vorbei oder die Aussentemperatur unterhalb der Shading Temperatur "
); );
} }
elsif ( $azimuth < $winPosMin elsif ($azimuth < $winPosMin
or $azimuth > $winPosMax or $azimuth > $winPosMax
or $elevation < $shutters->getShadingMinElevation or $elevation < $shutters->getShadingMinElevation
or $elevation > $shutters->getShadingMaxElevation or $elevation > $shutters->getShadingMaxElevation
@ -2254,7 +2266,7 @@ sub ShuttersCommandSet($$$) {
and $ascDev->getAutoShuttersControlComfort eq 'on' and $ascDev->getAutoShuttersControlComfort eq 'on'
and $shutters->getVentilateOpen eq 'off' and $shutters->getVentilateOpen eq 'off'
and $shutters->getShuttersPlace eq 'window' and $shutters->getShuttersPlace eq 'window'
and $shutters->getLockOut ne 'off') and $shutters->getLockOut ne 'off' )
or ( or (
CheckIfShuttersWindowRecOpen($shuttersDev) == 2 CheckIfShuttersWindowRecOpen($shuttersDev) == 2
and ( $shutters->getLockOut eq 'soft' and ( $shutters->getLockOut eq 'soft'
@ -2502,17 +2514,20 @@ sub SunSetShuttersAfterTimerFn($) {
) )
) )
{ {
if ( $funcHash->{privacyMode} == 1 )
{ if ( $funcHash->{privacyMode} == 1 ) {
$shutters->setPrivacyDownStatus(1); $shutters->setPrivacyDownStatus(1);
$shutters->setLastDrive('privacy position'); $shutters->setLastDrive('privacy position');
ShuttersCommandSet( $hash, $shuttersDev, ShuttersCommandSet( $hash, $shuttersDev,
PositionValueWindowRec($shuttersDev,$shutters->getClosedPos) ); PositionValueWindowRec( $shuttersDev, $shutters->getClosedPos )
);
} }
elsif ( $funcHash->{privacyMode} == 0 ) { elsif ( $funcHash->{privacyMode} == 0 ) {
$shutters->setPrivacyDownStatus(0); $shutters->setPrivacyDownStatus(0);
$shutters->setLastDrive('night close'); $shutters->setLastDrive('night close');
ShuttersCommandSet( $hash, $shuttersDev, PositionValueWindowRec($shuttersDev,$shutters->getClosedPos) ); ShuttersCommandSet( $hash, $shuttersDev,
PositionValueWindowRec( $shuttersDev, $shutters->getClosedPos )
);
} }
} }
@ -2743,30 +2758,30 @@ sub GetMonitoredDevs($) {
################################# #################################
sub PositionValueWindowRec($$) { sub PositionValueWindowRec($$) {
my ($shuttersDev,$posValue) = @_; my ( $shuttersDev, $posValue ) = @_;
if ( CheckIfShuttersWindowRecOpen($shuttersDev) == 1 if ( CheckIfShuttersWindowRecOpen($shuttersDev) == 1
and $shutters->getVentilateOpen eq 'on') and $shutters->getVentilateOpen eq 'on' )
{ {
$posValue = $shutters->getVentilatePos; $posValue = $shutters->getVentilatePos;
} }
elsif ( CheckIfShuttersWindowRecOpen($shuttersDev) == 2 elsif ( CheckIfShuttersWindowRecOpen($shuttersDev) == 2
and $shutters->getSubTyp eq 'threestate' and $shutters->getSubTyp eq 'threestate'
and $ascDev->getAutoShuttersControlComfort eq 'on' and $ascDev->getAutoShuttersControlComfort eq 'on' )
)
{ {
$posValue = $shutters->getComfortOpenPos; $posValue = $shutters->getComfortOpenPos;
} }
elsif ( CheckIfShuttersWindowRecOpen($shuttersDev) == 2 elsif (
and ($shutters->getSubTyp eq 'threestate' CheckIfShuttersWindowRecOpen($shuttersDev) == 2
or $shutters->getSubTyp eq 'twostate') and ( $shutters->getSubTyp eq 'threestate'
or $shutters->getSubTyp eq 'twostate' )
and $shutters->getVentilateOpen eq 'on' and $shutters->getVentilateOpen eq 'on'
) )
{ {
$posValue = $shutters->getVentilatePos; $posValue = $shutters->getVentilatePos;
} }
if ( $shutters->getQueryShuttersPos( $posValue ) ) { if ( $shutters->getQueryShuttersPos($posValue) ) {
$posValue = $shutters->getStatus; $posValue = $shutters->getStatus;
} }
@ -3510,7 +3525,7 @@ sub SetCmdFn($) {
. $shutters->getPosSetCmd . ' ' . $shutters->getPosSetCmd . ' '
. $posValue ); . $posValue );
$shutters->setSelfDefenseAbsent(0,0) $shutters->setSelfDefenseAbsent( 0, 0 )
if ( not $shutters->getSelfDefenseAbsent if ( not $shutters->getSelfDefenseAbsent
and $shutters->getSelfDefenseAbsentTimerrun ); and $shutters->getSelfDefenseAbsentTimerrun );
} }
@ -3610,10 +3625,10 @@ sub setNoOffset {
sub setSelfDefenseAbsent { sub setSelfDefenseAbsent {
my ( $self, $timerrun, $active, $timerhash ) = @_; my ( $self, $timerrun, $active, $timerhash ) = @_;
$self->{ $self->{shuttersDev} }{selfDefenseAbsent}{timerrun} = $timerrun; $self->{ $self->{shuttersDev} }{selfDefenseAbsent}{timerrun} = $timerrun;
$self->{ $self->{shuttersDev} }{selfDefenseAbsent}{active} = $active; $self->{ $self->{shuttersDev} }{selfDefenseAbsent}{active} = $active;
$self->{ $self->{shuttersDev} }{selfDefenseAbsent}{timerhash} = $timerhash $self->{ $self->{shuttersDev} }{selfDefenseAbsent}{timerhash} = $timerhash
if ( defined($timerhash) ); if ( defined($timerhash) );
return 0; return 0;
} }
@ -3647,16 +3662,15 @@ sub setDriveCmd {
$offSet = $ascDev->getShuttersOffset if ( $shutters->getOffset < 0 ); $offSet = $ascDev->getShuttersOffset if ( $shutters->getOffset < 0 );
$offSetStart = $shutters->getOffsetStart; $offSetStart = $shutters->getOffsetStart;
if ( $shutters->getSelfDefenseAbsent if ( $shutters->getSelfDefenseAbsent
and not $shutters->getSelfDefenseAbsentTimerrun and not $shutters->getSelfDefenseAbsentTimerrun
and $shutters->getSelfDefenseExclude eq 'off' and $shutters->getSelfDefenseExclude eq 'off'
and $shutters->getLastDrive eq 'selfDefense active' and $shutters->getLastDrive eq 'selfDefense active'
and $ascDev->getSelfDefense eq 'on' ) and $ascDev->getSelfDefense eq 'on' )
{ {
InternalTimer( InternalTimer( gettimeofday() + $shutters->getSelfDefenseAbsentDelay,
gettimeofday() + $shutters->getSelfDefenseAbsentDelay,
'FHEM::AutoShuttersControl::SetCmdFn', \%h ); 'FHEM::AutoShuttersControl::SetCmdFn', \%h );
$shutters->setSelfDefenseAbsent(1,0,\%h); $shutters->setSelfDefenseAbsent( 1, 0, \%h );
} }
elsif ( $offSetStart > 0 and not $shutters->getNoOffset ) { elsif ( $offSetStart > 0 and not $shutters->getNoOffset ) {
InternalTimer( InternalTimer(
@ -3809,10 +3823,10 @@ sub getIsDay {
sub getFreezeStatus { sub getFreezeStatus {
use POSIX qw(strftime); use POSIX qw(strftime);
my $self = shift; my $self = shift;
my $daytime = strftime( "%P", localtime() ); my $daytime = strftime( "%P", localtime() );
my $outTemp = $ascDev->getOutTemp; my $outTemp = $ascDev->getOutTemp;
$outTemp = $shutters->getOutTemp if ( $shutters->getOutTemp != -100 ); $outTemp = $shutters->getOutTemp if ( $shutters->getOutTemp != -100 );
if ( $shutters->getAntiFreeze ne 'off' if ( $shutters->getAntiFreeze ne 'off'
and $outTemp <= $ascDev->getFreezeTemp ) and $outTemp <= $ascDev->getFreezeTemp )
@ -3881,7 +3895,11 @@ sub getSelfDefenseAbsentTimerhash {
my $self = shift; my $self = shift;
return $self->{ $self->{shuttersDev} }{selfDefenseAbsent}{timerhash} return $self->{ $self->{shuttersDev} }{selfDefenseAbsent}{timerhash}
if ( defined($self->{ $self->{shuttersDev} }{selfDefenseAbsent}{timerhash}) ); if (
defined(
$self->{ $self->{shuttersDev} }{selfDefenseAbsent}{timerhash}
)
);
} }
sub getLastDrive { sub getLastDrive {
@ -4001,10 +4019,10 @@ sub getRoommatesLastStatus {
'asleep' => 1, 'asleep' => 1,
'gotosleep' => 2, 'gotosleep' => 2,
'awoken' => 3, 'awoken' => 3,
'home' => 7, 'home' => 6,
'absent' => 6, 'absent' => 5,
'gone' => 5, 'gone' => 4,
'none' => 4 'none' => 7
); );
my $minPrio = 10; my $minPrio = 10;
@ -4021,7 +4039,8 @@ sub getRoommatesLastStatus {
sub getOutTemp { sub getOutTemp {
my $self = shift; my $self = shift;
return ReadingsVal( $shutters->_getTempSensor, $shutters->getTempSensorReading, -100 ); return ReadingsVal( $shutters->_getTempSensor,
$shutters->getTempSensorReading, -100 );
} }
### Begin Beschattung Objekt mit Daten befüllen ### Begin Beschattung Objekt mit Daten befüllen
@ -4221,12 +4240,11 @@ sub _getTempSensor {
return $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{device} return $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{device}
if ( if (
exists( exists(
$self->{ $self->{shuttersDev} }->{ASC_TempSensor} $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME}
->{LASTGETTIME}
) )
and ( gettimeofday() - and ( gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_TempSensor} $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} )
->{LASTGETTIME} ) < 2 < 2
); );
$self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} = $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} =
int( gettimeofday() ); int( gettimeofday() );
@ -4249,19 +4267,16 @@ sub getTempSensorReading {
return $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{reading} return $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{reading}
if ( if (
exists( exists(
$self->{ $self->{shuttersDev} }->{ASC_TempSensor} $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME}
->{LASTGETTIME}
) )
and ( gettimeofday() - and ( gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_TempSensor} $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} )
->{LASTGETTIME} ) < 2 < 2
); );
$shutters->_getTempSensor; $shutters->_getTempSensor;
return ( return (
defined( defined( $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{reading} )
$self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{reading}
)
? $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{reading} ? $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{reading}
: 'temperature' : 'temperature'
); );
@ -6348,7 +6363,7 @@ sub getblockAscDrivesAfterManual {
"release_status": "under develop", "release_status": "under develop",
"license": "GPL_2", "license": "GPL_2",
"version": "v0.6.19", "version": "v0.6.19",
"x_developmentversion": "v0.6.19.16", "x_developmentversion": "v0.6.19.17",
"author": [ "author": [
"Marko Oldenburg <leongaultier@gmail.com>" "Marko Oldenburg <leongaultier@gmail.com>"
], ],