mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-10 03:06:37 +00:00
73_AutoShuttersControl: fix brightness detection for IsDay, fix detection for manual driving
git-svn-id: https://svn.fhem.de/fhem/trunk@19344 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
3f820f7448
commit
ca0f4375e4
@ -1,5 +1,7 @@
|
|||||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
# 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.
|
# Do not insert empty lines here, update check depends on it.
|
||||||
|
- bugfix: 73_AutoShuttersControl: fix brightness detection for IsDay,
|
||||||
|
fix detection for manual driveing
|
||||||
- bugfix: 73_GardenaSmartBridge: fix the fix
|
- bugfix: 73_GardenaSmartBridge: fix the fix
|
||||||
- bugfix: 73_GardenaSmartBridge: check if defined $data
|
- bugfix: 73_GardenaSmartBridge: check if defined $data
|
||||||
- bufix: 55_DWD_OpenData: SunUp calculation (forum #83097 msg #931972)
|
- bufix: 55_DWD_OpenData: SunUp calculation (forum #83097 msg #931972)
|
||||||
|
@ -44,7 +44,7 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use FHEM::Meta;
|
use FHEM::Meta;
|
||||||
|
|
||||||
my $version = '0.6.6';
|
my $version = '0.6.7';
|
||||||
|
|
||||||
sub AutoShuttersControl_Initialize($) {
|
sub AutoShuttersControl_Initialize($) {
|
||||||
my ($hash) = @_;
|
my ($hash) = @_;
|
||||||
@ -74,7 +74,6 @@ sub AutoShuttersControl_Initialize($) {
|
|||||||
. 'ASC_brightnessDriveUpDown '
|
. 'ASC_brightnessDriveUpDown '
|
||||||
. 'ASC_autoShuttersControlMorning:on,off '
|
. 'ASC_autoShuttersControlMorning:on,off '
|
||||||
. 'ASC_autoShuttersControlEvening:on,off '
|
. 'ASC_autoShuttersControlEvening:on,off '
|
||||||
. 'ASC_autoShuttersControlShading:on,off '
|
|
||||||
. 'ASC_autoShuttersControlComfort:on,off '
|
. 'ASC_autoShuttersControlComfort:on,off '
|
||||||
. 'ASC_residentsDev '
|
. 'ASC_residentsDev '
|
||||||
. 'ASC_rainSensor '
|
. 'ASC_rainSensor '
|
||||||
@ -261,14 +260,15 @@ sub Define($$) {
|
|||||||
if ( AttrVal( $name, 'room', 'none' ) eq 'none' );
|
if ( AttrVal( $name, 'room', 'none' ) eq 'none' );
|
||||||
CommandAttr( undef, $name . ' icon fts_shutter_automatic' )
|
CommandAttr( undef, $name . ' icon fts_shutter_automatic' )
|
||||||
if ( AttrVal( $name, 'icon', 'none' ) eq 'none' );
|
if ( AttrVal( $name, 'icon', 'none' ) eq 'none' );
|
||||||
CommandAttr( undef, $name . ' ASC_autoAstroModeEvening REAL' )
|
|
||||||
if ( $ascDev->getAutoAstroModeEvening eq 'none' );
|
# CommandAttr( undef, $name . ' ASC_autoAstroModeEvening REAL' )
|
||||||
CommandAttr( undef, $name . ' ASC_autoAstroModeMorning REAL' )
|
# if ( $ascDev->getAutoAstroModeEvening eq 'none' );
|
||||||
if ( $ascDev->getAutoAstroModeMorning eq 'none' );
|
# CommandAttr( undef, $name . ' ASC_autoAstroModeMorning REAL' )
|
||||||
CommandAttr( undef, $name . ' ASC_autoShuttersControlMorning on' )
|
# if ( $ascDev->getAutoAstroModeMorning eq 'none' );
|
||||||
if ( $ascDev->getAutoShuttersControlMorning eq 'none' );
|
# CommandAttr( undef, $name . ' ASC_autoShuttersControlMorning on' )
|
||||||
CommandAttr( undef, $name . ' ASC_autoShuttersControlEvening on' )
|
# if ( $ascDev->getAutoShuttersControlMorning eq 'none' );
|
||||||
if ( $ascDev->getAutoShuttersControlEvening eq 'none' );
|
# CommandAttr( undef, $name . ' ASC_autoShuttersControlEvening on' )
|
||||||
|
# if ( $ascDev->getAutoShuttersControlEvening eq 'none' );
|
||||||
CommandAttr( undef,
|
CommandAttr( undef,
|
||||||
$name
|
$name
|
||||||
. ' devStateIcon selfeDefense.terrace:fts_door_tilt created.new.drive.timer:clock .*asleep:scene_sleeping roommate.(awoken|home):user_available residents.(home|awoken):status_available manual:fts_shutter_manual selfeDefense.active:status_locked selfeDefense.inactive:status_open day.open:scene_day night.close:scene_night shading.in:weather_sun shading.out:weather_cloudy'
|
. ' devStateIcon selfeDefense.terrace:fts_door_tilt created.new.drive.timer:clock .*asleep:scene_sleeping roommate.(awoken|home):user_available residents.(home|awoken):status_available manual:fts_shutter_manual selfeDefense.active:status_locked selfeDefense.inactive:status_open day.open:scene_day night.close:scene_night shading.in:weather_sun shading.out:weather_cloudy'
|
||||||
@ -344,6 +344,8 @@ sub Notify($$) {
|
|||||||
if ( $ascDev->getSunriseTimeWeHoliday eq 'none' );
|
if ( $ascDev->getSunriseTimeWeHoliday eq 'none' );
|
||||||
readingsSingleUpdate( $hash, 'selfDefense', 'off', 0 )
|
readingsSingleUpdate( $hash, 'selfDefense', 'off', 0 )
|
||||||
if ( $ascDev->getSelfDefense eq 'none' );
|
if ( $ascDev->getSelfDefense eq 'none' );
|
||||||
|
readingsSingleUpdate( $hash, 'controlShading', 'off', 0 )
|
||||||
|
if ( $ascDev->getAutoShuttersControlShading eq 'none' );
|
||||||
|
|
||||||
# Ist der Event ein globaler und passt zum Rest der Abfrage oben wird nach neuen Rolläden Devices gescannt und eine Liste im Rolladenmodul sortiert nach Raum generiert
|
# Ist der Event ein globaler und passt zum Rest der Abfrage oben wird nach neuen Rolläden Devices gescannt und eine Liste im Rolladenmodul sortiert nach Raum generiert
|
||||||
ShuttersDeviceScan($hash)
|
ShuttersDeviceScan($hash)
|
||||||
@ -502,6 +504,10 @@ sub Set($$@) {
|
|||||||
return "usage: $cmd" if ( @args > 1 );
|
return "usage: $cmd" if ( @args > 1 );
|
||||||
readingsSingleUpdate( $hash, $cmd, join( ' ', @args ), 1 );
|
readingsSingleUpdate( $hash, $cmd, join( ' ', @args ), 1 );
|
||||||
}
|
}
|
||||||
|
elsif ( lc $cmd eq 'controlshading' ) {
|
||||||
|
return "usage: $cmd" if ( @args > 1 );
|
||||||
|
readingsSingleUpdate( $hash, $cmd, join( ' ', @args ), 1 );
|
||||||
|
}
|
||||||
elsif ( lc $cmd eq 'selfdefense' ) {
|
elsif ( lc $cmd eq 'selfdefense' ) {
|
||||||
return "usage: $cmd" if ( @args > 1 );
|
return "usage: $cmd" if ( @args > 1 );
|
||||||
readingsSingleUpdate( $hash, $cmd, join( ' ', @args ), 1 );
|
readingsSingleUpdate( $hash, $cmd, join( ' ', @args ), 1 );
|
||||||
@ -514,7 +520,7 @@ sub Set($$@) {
|
|||||||
else {
|
else {
|
||||||
my $list = "scanForShutters:noArg";
|
my $list = "scanForShutters:noArg";
|
||||||
$list .=
|
$list .=
|
||||||
" renewSetSunriseSunsetTimer:noArg partyMode:on,off hardLockOut:on,off sunriseTimeWeHoliday:on,off selfDefense:on,off wiggle:all,"
|
" renewSetSunriseSunsetTimer:noArg partyMode:on,off hardLockOut:on,off sunriseTimeWeHoliday:on,off controlShading:on,off selfDefense:on,off wiggle:all,"
|
||||||
. join( ',', @{ $hash->{helper}{shuttersList} } )
|
. join( ',', @{ $hash->{helper}{shuttersList} } )
|
||||||
if ( ReadingsVal( $name, 'userAttrList', 'none' ) eq 'rolled out' );
|
if ( ReadingsVal( $name, 'userAttrList', 'none' ) eq 'rolled out' );
|
||||||
$list .= " createNewNotifyDev:noArg"
|
$list .= " createNewNotifyDev:noArg"
|
||||||
@ -1418,14 +1424,38 @@ sub EventProcessingBrightness($@) {
|
|||||||
. $brightnessMaxVal
|
. $brightnessMaxVal
|
||||||
. ' oder kleiner dem eingestellten Sunset-Wert: '
|
. ' oder kleiner dem eingestellten Sunset-Wert: '
|
||||||
. $brightnessMinVal
|
. $brightnessMinVal
|
||||||
. ' ist' );
|
. ' ist. Werte für weitere Parameter - getUp ist: '
|
||||||
|
. $shutters->getUp
|
||||||
|
. ' getDown ist: '
|
||||||
|
. $shutters->getDown
|
||||||
|
. ' getSunrise ist: '
|
||||||
|
. $shutters->getSunrise
|
||||||
|
. ' getSunset ist: '
|
||||||
|
. $shutters->getSunset );
|
||||||
|
|
||||||
if (
|
if (
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
int( gettimeofday() / 86400 ) != int(
|
int( gettimeofday() / 86400 ) != int(
|
||||||
computeAlignTime( '24:00', $shutters->getTimeUpEarly ) / 86400
|
computeAlignTime( '24:00',
|
||||||
|
$shutters->getTimeUpEarly ) / 86400
|
||||||
|
)
|
||||||
|
and not IsWe()
|
||||||
|
)
|
||||||
|
or (
|
||||||
|
int( gettimeofday() / 86400 ) != int(
|
||||||
|
computeAlignTime( '24:00',
|
||||||
|
$shutters->getTimeUpWeHoliday ) / 86400
|
||||||
|
)
|
||||||
|
and IsWe()
|
||||||
|
and $ascDev->getSunriseTimeWeHoliday eq 'on'
|
||||||
|
)
|
||||||
)
|
)
|
||||||
and int( gettimeofday() / 86400 ) == int(
|
and int( gettimeofday() / 86400 ) == int(
|
||||||
computeAlignTime( '24:00', $shutters->getTimeUpLate ) / 86400
|
computeAlignTime( '24:00', $shutters->getTimeUpLate ) /
|
||||||
|
86400
|
||||||
|
)
|
||||||
)
|
)
|
||||||
and $1 > $brightnessMaxVal
|
and $1 > $brightnessMaxVal
|
||||||
and $shutters->getUp eq 'brightness'
|
and $shutters->getUp eq 'brightness'
|
||||||
@ -2016,9 +2046,25 @@ sub EventProcessingShutters($@) {
|
|||||||
if ( $events =~ m#.*:\s(\d+)# ) {
|
if ( $events =~ m#.*:\s(\d+)# ) {
|
||||||
$shutters->setShuttersDev($shuttersDev);
|
$shutters->setShuttersDev($shuttersDev);
|
||||||
$ascDev->setPosReading;
|
$ascDev->setPosReading;
|
||||||
|
|
||||||
|
ASC_Debug( 'EventProcessingShutters: '
|
||||||
|
. $shutters->getShuttersDev
|
||||||
|
. ' - Event vom Rolllo erkannt. Es wird nun eine etwaige manuelle Fahrt ausgewertet.'
|
||||||
|
. ' Int von gettimeofday: '
|
||||||
|
. int( gettimeofday() )
|
||||||
|
. ' Last Position Timestamp: '
|
||||||
|
. $shutters->getLastPosTimestamp
|
||||||
|
. ' Drive Up Max Duration: '
|
||||||
|
. $shutters->getDriveUpMaxDuration
|
||||||
|
. ' Last Position: '
|
||||||
|
. $shutters->getLastPos
|
||||||
|
. ' aktuelle Position: '
|
||||||
|
. $shutters->getStatus );
|
||||||
|
|
||||||
if ( ( int( gettimeofday() ) - $shutters->getLastPosTimestamp ) >
|
if ( ( int( gettimeofday() ) - $shutters->getLastPosTimestamp ) >
|
||||||
$shutters->getDriveUpMaxDuration
|
$shutters->getDriveUpMaxDuration
|
||||||
and $shutters->getLastPos != $shutters->getStatus )
|
and ( int( gettimeofday() ) - $shutters->getLastManPosTimestamp ) >
|
||||||
|
$shutters->getDriveUpMaxDuration )
|
||||||
{
|
{
|
||||||
$shutters->setLastDrive('manual');
|
$shutters->setLastDrive('manual');
|
||||||
$shutters->setLastDriveReading;
|
$shutters->setLastDriveReading;
|
||||||
@ -2622,14 +2668,27 @@ sub IsDay($) {
|
|||||||
|
|
||||||
if (
|
if (
|
||||||
(
|
(
|
||||||
$shutters->getDown eq 'brightness'
|
$shutters->getModeDown eq 'brightness'
|
||||||
or $shutters->getUp eq 'brightness'
|
or $shutters->getModeUp eq 'brightness'
|
||||||
)
|
)
|
||||||
and (
|
or (
|
||||||
|
(
|
||||||
|
(
|
||||||
(
|
(
|
||||||
int( gettimeofday() / 86400 ) != int(
|
int( gettimeofday() / 86400 ) != int(
|
||||||
computeAlignTime( '24:00', $shutters->getTimeUpEarly ) /
|
computeAlignTime( '24:00',
|
||||||
86400
|
$shutters->getTimeUpEarly ) / 86400
|
||||||
|
)
|
||||||
|
and not IsWe()
|
||||||
|
)
|
||||||
|
or (
|
||||||
|
int( gettimeofday() / 86400 ) != int(
|
||||||
|
computeAlignTime( '24:00',
|
||||||
|
$shutters->getTimeUpWeHoliday ) / 86400
|
||||||
|
)
|
||||||
|
and IsWe()
|
||||||
|
and $ascDev->getSunriseTimeWeHoliday eq 'on'
|
||||||
|
)
|
||||||
)
|
)
|
||||||
and int( gettimeofday() / 86400 ) == int(
|
and int( gettimeofday() / 86400 ) == int(
|
||||||
computeAlignTime( '24:00', $shutters->getTimeUpLate ) /
|
computeAlignTime( '24:00', $shutters->getTimeUpLate ) /
|
||||||
@ -2665,10 +2724,15 @@ sub IsDay($) {
|
|||||||
$brightnessMaxVal = $ascDev->getBrightnessMaxVal;
|
$brightnessMaxVal = $ascDev->getBrightnessMaxVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##### Nach Sonnenuntergang / Abends
|
||||||
$respIsDay = (
|
$respIsDay = (
|
||||||
(
|
(
|
||||||
( $shutters->getBrightness > $brightnessMinVal and $isday )
|
(
|
||||||
or $shutters->getSunset
|
$shutters->getBrightness > $brightnessMinVal
|
||||||
|
and $isday
|
||||||
|
and not $shutters->getSunset
|
||||||
|
)
|
||||||
|
or not $shutters->getSunset
|
||||||
) ? 1 : 0
|
) ? 1 : 0
|
||||||
) if ( $shutters->getDown eq 'brightness' );
|
) if ( $shutters->getDown eq 'brightness' );
|
||||||
|
|
||||||
@ -2683,9 +2747,14 @@ sub IsDay($) {
|
|||||||
. ' Sunset: '
|
. ' Sunset: '
|
||||||
. $shutters->getSunset );
|
. $shutters->getSunset );
|
||||||
|
|
||||||
|
##### Nach Sonnenauf / Morgens
|
||||||
$respIsDay = (
|
$respIsDay = (
|
||||||
(
|
(
|
||||||
( $shutters->getBrightness > $brightnessMaxVal and not $isday )
|
(
|
||||||
|
$shutters->getBrightness > $brightnessMaxVal
|
||||||
|
and not $isday
|
||||||
|
and not $shutters->getSunrise
|
||||||
|
)
|
||||||
or $respIsDay
|
or $respIsDay
|
||||||
or $shutters->getSunrise
|
or $shutters->getSunrise
|
||||||
) ? 1 : 0
|
) ? 1 : 0
|
||||||
@ -2699,7 +2768,7 @@ sub IsDay($) {
|
|||||||
. $shutters->getBrightness
|
. $shutters->getBrightness
|
||||||
. ' BrightnessMax: '
|
. ' BrightnessMax: '
|
||||||
. $brightnessMaxVal
|
. $brightnessMaxVal
|
||||||
. ' Sunset: '
|
. ' Sunrise: '
|
||||||
. $shutters->getSunrise );
|
. $shutters->getSunrise );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4545,6 +4614,13 @@ sub getResidentsLastStatus {
|
|||||||
return ReadingsVal( $ascDev->_getResidentsDev, 'lastState', 'none' );
|
return ReadingsVal( $ascDev->_getResidentsDev, 'lastState', 'none' );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub getAutoShuttersControlShading {
|
||||||
|
my $self = shift;
|
||||||
|
my $name = $self->{name};
|
||||||
|
|
||||||
|
return ReadingsVal( $name, 'controlShading', 'none' );
|
||||||
|
}
|
||||||
|
|
||||||
sub getSelfDefense {
|
sub getSelfDefense {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
@ -4645,7 +4721,7 @@ sub getAutoAstroModeEvening {
|
|||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
|
||||||
return AttrVal( $name, 'ASC_autoAstroModeEvening', 'none' );
|
return AttrVal( $name, 'ASC_autoAstroModeEvening', 'REAL' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getAutoAstroModeEveningHorizon {
|
sub getAutoAstroModeEveningHorizon {
|
||||||
@ -4659,7 +4735,7 @@ sub getAutoAstroModeMorning {
|
|||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
|
||||||
return AttrVal( $name, 'ASC_autoAstroModeMorning', 'none' );
|
return AttrVal( $name, 'ASC_autoAstroModeMorning', 'REAL' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getAutoAstroModeMorningHorizon {
|
sub getAutoAstroModeMorningHorizon {
|
||||||
@ -4673,14 +4749,14 @@ sub getAutoShuttersControlMorning {
|
|||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
|
||||||
return AttrVal( $name, 'ASC_autoShuttersControlMorning', 'none' );
|
return AttrVal( $name, 'ASC_autoShuttersControlMorning', 'on' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getAutoShuttersControlEvening {
|
sub getAutoShuttersControlEvening {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
|
||||||
return AttrVal( $name, 'ASC_autoShuttersControlEvening', 'none' );
|
return AttrVal( $name, 'ASC_autoShuttersControlEvening', 'on' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getAutoShuttersControlComfort {
|
sub getAutoShuttersControlComfort {
|
||||||
@ -4690,13 +4766,6 @@ sub getAutoShuttersControlComfort {
|
|||||||
return AttrVal( $name, 'ASC_autoShuttersControlComfort', 'off' );
|
return AttrVal( $name, 'ASC_autoShuttersControlComfort', 'off' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getAutoShuttersControlShading {
|
|
||||||
my $self = shift;
|
|
||||||
my $name = $self->{name};
|
|
||||||
|
|
||||||
return AttrVal( $name, 'ASC_autoShuttersControlShading', 'off' );
|
|
||||||
}
|
|
||||||
|
|
||||||
sub getFreezeTemp {
|
sub getFreezeTemp {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user