add first function's for shading
This commit is contained in:
parent
e24142ac78
commit
0f936d88e9
@ -41,7 +41,7 @@ package main;
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
my $version = "0.2.1dev11";
|
my $version = "0.2.1dev22";
|
||||||
|
|
||||||
sub AutoShuttersControl_Initialize($) {
|
sub AutoShuttersControl_Initialize($) {
|
||||||
my ($hash) = @_;
|
my ($hash) = @_;
|
||||||
@ -168,14 +168,13 @@ my %userAttrList = (
|
|||||||
'ASC_lock-out:soft,hard' => 'soft',
|
'ASC_lock-out:soft,hard' => 'soft',
|
||||||
'ASC_lock-outCmd:inhibit,blocked' => 'none',
|
'ASC_lock-outCmd:inhibit,blocked' => 'none',
|
||||||
|
|
||||||
# 'ASC_Shading_Direction' => 178,
|
'ASC_Shading_Direction' => 178,
|
||||||
# 'ASC_Shading_Pos:10,20,30,40,50,60,70,80,90,100' => 30,
|
'ASC_Shading_Pos:10,20,30,40,50,60,70,80,90,100' => [ '', 70, 30 ],
|
||||||
# 'ASC_Shading:on,off,delayed,present,absent' => 'off',
|
'ASC_Shading_Mode:on,off,home,absent' => 'off',
|
||||||
# 'ASC_Shading_Pos_after_Shading:-1,0,10,20,30,40,50,60,70,80,90,100' => -1,
|
'ASC_Shading_Angle_Left:0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90'
|
||||||
# 'ASC_Shading_Angle_Left:0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90'
|
=> 85,
|
||||||
# => 85,
|
'ASC_Shading_Angle_Right:0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90'
|
||||||
# 'ASC_Shading_Angle_Right:0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90'
|
=> 85,
|
||||||
# => 85,
|
|
||||||
'ASC_Shading_Brightness_Sensor' => 'none',
|
'ASC_Shading_Brightness_Sensor' => 'none',
|
||||||
'ASC_Shading_Brightness_Reading' => 'brightness',
|
'ASC_Shading_Brightness_Reading' => 'brightness',
|
||||||
|
|
||||||
@ -214,6 +213,7 @@ my %posSetCmds = (
|
|||||||
tahoma => 'dim',
|
tahoma => 'dim',
|
||||||
KLF200Node => 'pct',
|
KLF200Node => 'pct',
|
||||||
DUOFERN => 'position',
|
DUOFERN => 'position',
|
||||||
|
UNIRoll => 'pos',
|
||||||
);
|
);
|
||||||
|
|
||||||
my $shutters = new ASC_Shutters();
|
my $shutters = new ASC_Shutters();
|
||||||
@ -449,15 +449,22 @@ sub EventProcessingGeneral($$$) {
|
|||||||
if ( $deviceAttr eq 'ASC_residentsDevice' );
|
if ( $deviceAttr eq 'ASC_residentsDevice' );
|
||||||
EventProcessingRain( $hash, $device, $events )
|
EventProcessingRain( $hash, $device, $events )
|
||||||
if ( $deviceAttr eq 'ASC_rainSensorDevice' );
|
if ( $deviceAttr eq 'ASC_rainSensorDevice' );
|
||||||
|
EventProcessingTwilightDevice( $hash, $device, $events )
|
||||||
|
if ( $deviceAttr eq 'ASC_twilightDevice' );
|
||||||
|
|
||||||
$shutters->setShuttersDev($device)
|
$shutters->setShuttersDev($device)
|
||||||
if ( $deviceAttr eq 'ASC_Shading_Brightness_Sensor' );
|
if ( $deviceAttr eq 'ASC_Shading_Brightness_Sensor' );
|
||||||
EventProcessingBrightness( $hash, $device, $events )
|
|
||||||
if (
|
if (
|
||||||
$deviceAttr eq 'ASC_Shading_Brightness_Sensor'
|
$deviceAttr eq 'ASC_Shading_Brightness_Sensor'
|
||||||
and ( $shutters->getDown eq 'brightness'
|
and ( $shutters->getDown eq 'brightness'
|
||||||
or $shutters->getUp eq 'brightness' )
|
or $shutters->getUp eq 'brightness' )
|
||||||
);
|
) {
|
||||||
|
EventProcessingBrightness( $hash, $device, $events );
|
||||||
|
}
|
||||||
|
elsif ( $deviceAttr eq 'ASC_Shading_Brightness_Sensor' ) {
|
||||||
|
EventProcessingShadingBrightness( $hash, $device, $events );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { # alles was kein Devicenamen mit übergeben hat landet hier
|
else { # alles was kein Devicenamen mit übergeben hat landet hier
|
||||||
@ -679,7 +686,9 @@ sub ShuttersDeviceScan($) {
|
|||||||
$shutters->setNoOffset(0);
|
$shutters->setNoOffset(0);
|
||||||
$shutters->setPosSetCmd( $posSetCmds{ $defs{$_}->{TYPE} } );
|
$shutters->setPosSetCmd( $posSetCmds{ $defs{$_}->{TYPE} } );
|
||||||
}
|
}
|
||||||
$hash->{NOTIFYDEV} = $hash->{NOTIFYDEV} . $shuttersList;
|
# $hash->{NOTIFYDEV} = $hash->{NOTIFYDEV} . $shuttersList;
|
||||||
|
$hash->{NOTIFYDEV} = "global," . $name . $shuttersList;
|
||||||
|
|
||||||
|
|
||||||
if ( $ascDev->getMonitoredDevs ne 'none' ) {
|
if ( $ascDev->getMonitoredDevs ne 'none' ) {
|
||||||
$hash->{monitoredDevs} =
|
$hash->{monitoredDevs} =
|
||||||
@ -1132,7 +1141,7 @@ sub EventProcessingBrightness($@) {
|
|||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
$shutters->setShuttersDev($shuttersDev);
|
$shutters->setShuttersDev($shuttersDev);
|
||||||
|
|
||||||
return
|
return EventProcessingShadingBrightness($hash, $shuttersDev, $events)
|
||||||
unless (
|
unless (
|
||||||
int( gettimeofday() / 86400 ) !=
|
int( gettimeofday() / 86400 ) !=
|
||||||
int( computeAlignTime( '24:00', $shutters->getTimeUpEarly ) / 86400 )
|
int( computeAlignTime( '24:00', $shutters->getTimeUpEarly ) / 86400 )
|
||||||
@ -1177,7 +1186,6 @@ sub EventProcessingBrightness($@) {
|
|||||||
or $homemode eq 'none'
|
or $homemode eq 'none'
|
||||||
or $shutters->getModeUp eq 'always' )
|
or $shutters->getModeUp eq 'always' )
|
||||||
{
|
{
|
||||||
ShuttersCommandSet( $hash, $shuttersDev, $shutters->getOpenPos )
|
|
||||||
if (
|
if (
|
||||||
(
|
(
|
||||||
$shutters->getRoommatesStatus eq 'home'
|
$shutters->getRoommatesStatus eq 'home'
|
||||||
@ -1189,7 +1197,9 @@ sub EventProcessingBrightness($@) {
|
|||||||
and $ascDev->getSelfDefense eq 'off'
|
and $ascDev->getSelfDefense eq 'off'
|
||||||
or ( $ascDev->getSelfDefense eq 'on'
|
or ( $ascDev->getSelfDefense eq 'on'
|
||||||
and CheckIfShuttersWindowRecOpen($shuttersDev) == 0 )
|
and CheckIfShuttersWindowRecOpen($shuttersDev) == 0 )
|
||||||
);
|
) {
|
||||||
|
ShuttersCommandSet( $hash, $shuttersDev, $shutters->getOpenPos );
|
||||||
|
} else { EventProcessingShadingBrightness($hash, $shuttersDev, $events); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif (
|
elsif (
|
||||||
@ -1220,14 +1230,75 @@ sub EventProcessingBrightness($@) {
|
|||||||
if ( $homemode eq 'none' );
|
if ( $homemode eq 'none' );
|
||||||
$shutters->setLastDrive('minimum brightness threshold fell below');
|
$shutters->setLastDrive('minimum brightness threshold fell below');
|
||||||
|
|
||||||
ShuttersCommandSet( $hash, $shuttersDev, $shutters->getClosedPos )
|
|
||||||
if ( $shutters->getModeDown eq $homemode
|
if ( $shutters->getModeDown eq $homemode
|
||||||
or $homemode eq 'none'
|
or $homemode eq 'none'
|
||||||
or $shutters->getModeDown eq 'always' );
|
or $shutters->getModeDown eq 'always'
|
||||||
|
) {
|
||||||
|
ShuttersCommandSet( $hash, $shuttersDev, $shutters->getClosedPos );
|
||||||
|
} else { EventProcessingShadingBrightness($hash, $shuttersDev, $events); }
|
||||||
}
|
}
|
||||||
|
} else { EventProcessingShadingBrightness($hash, $shuttersDev, $events); }
|
||||||
|
}
|
||||||
|
|
||||||
|
sub EventProcessingShadingBrightness($@) {
|
||||||
|
my ( $hash, $shuttersDev, $events ) = @_;
|
||||||
|
my $name = $hash->{NAME};
|
||||||
|
$shutters->setShuttersDev($shuttersDev);
|
||||||
|
my $reading = $shutters->getShadingBrightnessReading;
|
||||||
|
|
||||||
|
if ( $events =~ m#$reading:\s(\d+)# ) {
|
||||||
|
ShadingProcessing($hash,$shuttersDev,$ascDev->getAzimuth,$ascDev->getElevation,$1,$ascDev->getOutTemp,$shutters->getDirection,$shutters->getShadingAngleLeft,$shutters->getShadingAngleRight)
|
||||||
|
if ( $shutters->getShadingMode eq 'on' or $shutters->getShadingMode eq $ascDev->getResidentsStatus );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub EventProcessingTwilightDevice($@) {
|
||||||
|
my ( $hash, $device, $events ) = @_;
|
||||||
|
my $name = $device;
|
||||||
|
my ($azimuth,$elevation, $outTemp, $brightness);
|
||||||
|
|
||||||
|
# Twilight
|
||||||
|
# azimuth = azimuth = Sonnenwinkel
|
||||||
|
# elevation = elevation = Sonnenhöhe
|
||||||
|
#
|
||||||
|
# Astro
|
||||||
|
# SunAz = azimuth = Sonnenwinkel
|
||||||
|
# SunAlt = evaluation = Sonnenhöhe
|
||||||
|
|
||||||
|
if ( $events =~ m#([a-zA-Z]+):\s(\d+.\d+)# ) {
|
||||||
|
$azimuth = $2 if ( $1 eq 'azimuth' );
|
||||||
|
$azimuth = $2 if ( $1 eq 'SunAz' );
|
||||||
|
$elevation = $2 if ( $1 eq 'evaluation' );
|
||||||
|
$elevation = $2 if ( $1 eq 'SunAlt' );
|
||||||
|
}
|
||||||
|
|
||||||
|
$azimuth = $ascDev->getAzimuth if (not defined($azimuth) and not $azimuth );
|
||||||
|
$elevation = $ascDev->getElevation if (not defined($elevation) and not $elevation );
|
||||||
|
|
||||||
|
foreach my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) {
|
||||||
|
$shutters->setShuttersDev($shuttersDev);
|
||||||
|
ShadingProcessing($hash,$shuttersDev,$azimuth,$elevation,$shutters->getBrightness,$ascDev->getOutTemp,$shutters->getDirection,$shutters->getShadingAngleLeft,$shutters->getShadingAngleRight)
|
||||||
|
if ( $shutters->getShadingMode eq 'on' or $shutters->getShadingMode eq $ascDev->getResidentsStatus );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub ShadingProcessing($@) {
|
||||||
|
my ($hash,$shuttersDev,$azimuth,$elevation,$brightness,$outTemp,$shuttersDirection,$shuttersShadingAngleLeft,$shuttersShadingAngleRight) = @_;
|
||||||
|
my $name = $hash->{NAME};
|
||||||
|
Log3( $name, 3,
|
||||||
|
"AutoShuttersControl ($name) - Shading Processing, Rollladen: " . $shuttersDev
|
||||||
|
);
|
||||||
|
|
||||||
|
# ShuttersDev
|
||||||
|
# Aussentemperatur
|
||||||
|
# azimuth
|
||||||
|
# elevation
|
||||||
|
# Himmelsrichtung des Fensters
|
||||||
|
# Eintrittswinkel
|
||||||
|
# Ausstrittswinkel
|
||||||
|
# Brightness
|
||||||
|
}
|
||||||
|
|
||||||
sub EventProcessingPartyMode($) {
|
sub EventProcessingPartyMode($) {
|
||||||
my ($hash) = @_;
|
my ($hash) = @_;
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
@ -1583,6 +1654,9 @@ sub CreateNewNotifyDev($) {
|
|||||||
AddNotifyDev( $hash, AttrVal( $name, 'ASC_rainSensorDevice', 'none' ),
|
AddNotifyDev( $hash, AttrVal( $name, 'ASC_rainSensorDevice', 'none' ),
|
||||||
$name, 'ASC_rainSensorDevice' )
|
$name, 'ASC_rainSensorDevice' )
|
||||||
if ( AttrVal( $name, 'ASC_rainSensorDevice', 'none' ) ne 'none' );
|
if ( AttrVal( $name, 'ASC_rainSensorDevice', 'none' ) ne 'none' );
|
||||||
|
AddNotifyDev( $hash, AttrVal( $name, 'ASC_twilightDevice', 'none' ),
|
||||||
|
$name, 'ASC_rainSensorDevice' )
|
||||||
|
if ( AttrVal( $name, 'ASC_rainSensorDevice', 'none' ) ne 'none' );
|
||||||
$hash->{NOTIFYDEV} = $hash->{NOTIFYDEV} . $shuttersList;
|
$hash->{NOTIFYDEV} = $hash->{NOTIFYDEV} . $shuttersList;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2110,10 +2184,6 @@ sub SetCmdFn($) {
|
|||||||
. $posValue );
|
. $posValue );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub EventProcessingTwilightDevice() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
########## Begin der Klassendeklarierungen für OOP (Objektorientierte Programmierung) #########################
|
########## Begin der Klassendeklarierungen für OOP (Objektorientierte Programmierung) #########################
|
||||||
## Klasse Rolläden (Shutters) und die Subklassen Attr und Readings ##
|
## Klasse Rolläden (Shutters) und die Subklassen Attr und Readings ##
|
||||||
## desweiteren wird noch die Klasse ASC_Roommate mit eingebunden
|
## desweiteren wird noch die Klasse ASC_Roommate mit eingebunden
|
||||||
@ -2449,7 +2519,23 @@ sub getWiggleValue {
|
|||||||
return AttrVal( $self->{shuttersDev}, 'ASC_WiggleValue', 5 );
|
return AttrVal( $self->{shuttersDev}, 'ASC_WiggleValue', 5 );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getShadingBrightnessSensor {
|
sub getShadingPos {
|
||||||
|
my $self = shift;
|
||||||
|
my $default = $self->{defaultarg};
|
||||||
|
|
||||||
|
$default = 10 if ( not defined($default) );
|
||||||
|
return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Pos', $default );
|
||||||
|
}
|
||||||
|
|
||||||
|
sub getShadingMode {
|
||||||
|
my $self = shift;
|
||||||
|
my $default = $self->{defaultarg};
|
||||||
|
|
||||||
|
$default = 'off' if ( not defined($default) );
|
||||||
|
return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Mode', $default );
|
||||||
|
}
|
||||||
|
|
||||||
|
sub _getShadingBrightnessSensor {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $default = $self->{defaultarg};
|
my $default = $self->{defaultarg};
|
||||||
|
|
||||||
@ -2679,7 +2765,7 @@ BEGIN {
|
|||||||
sub getBrightness {
|
sub getBrightness {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return ReadingsVal( $shutters->getShadingBrightnessSensor,
|
return ReadingsVal( $shutters->_getShadingBrightnessSensor,
|
||||||
$shutters->getShadingBrightnessReading, 0 );
|
$shutters->getShadingBrightnessReading, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2916,14 +3002,12 @@ sub getMonitoredDevs {
|
|||||||
|
|
||||||
sub getOutTemp {
|
sub getOutTemp {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $name = $self->{name};
|
|
||||||
|
|
||||||
return ReadingsVal( $ascDev->_getTempSensor, $ascDev->getTempReading, 100 );
|
return ReadingsVal( $ascDev->_getTempSensor, $ascDev->getTempReading, 100 );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getResidentsStatus {
|
sub getResidentsStatus {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $name = $self->{name};
|
|
||||||
|
|
||||||
return ReadingsVal( $ascDev->_getResidentsDev, $ascDev->getResidentsReading,
|
return ReadingsVal( $ascDev->_getResidentsDev, $ascDev->getResidentsReading,
|
||||||
'none' );
|
'none' );
|
||||||
@ -2931,7 +3015,6 @@ sub getResidentsStatus {
|
|||||||
|
|
||||||
sub getResidentsLastStatus {
|
sub getResidentsLastStatus {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $name = $self->{name};
|
|
||||||
|
|
||||||
return ReadingsVal( $ascDev->_getResidentsDev, 'lastState', 'none' );
|
return ReadingsVal( $ascDev->_getResidentsDev, 'lastState', 'none' );
|
||||||
}
|
}
|
||||||
@ -2943,6 +3026,34 @@ sub getSelfDefense {
|
|||||||
return ReadingsVal( $name, 'selfDefense', 'none' );
|
return ReadingsVal( $name, 'selfDefense', 'none' );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub getAzimuth {
|
||||||
|
my $self = shift;
|
||||||
|
my $name = $self->{name};
|
||||||
|
my $hash = $defs{$name};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ReadingsVal( $ascDev->_getTwilightDevice, , -1 );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
sub getElevation {
|
||||||
|
my $self = shift;
|
||||||
|
my $name = $self->{name};
|
||||||
|
my $hash = $defs{$name};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ReadingsVal( $ascDev->_getTwilightDevice, , -1 );
|
||||||
|
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
## Subklasse Attr ##
|
## Subklasse Attr ##
|
||||||
package ASC_Dev::Attr;
|
package ASC_Dev::Attr;
|
||||||
|
|
||||||
@ -2984,6 +3095,13 @@ sub getBrightnessMaxVal {
|
|||||||
return AttrVal( $name, 'ASC_brightnessMaxVal', $default );
|
return AttrVal( $name, 'ASC_brightnessMaxVal', $default );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub _getTwilightDevice {
|
||||||
|
my $self = shift;
|
||||||
|
my $name = $self->{name};
|
||||||
|
|
||||||
|
return AttrVal( $name, 'ASC_twilightDevice', 'none' );
|
||||||
|
}
|
||||||
|
|
||||||
sub getAutoAstroModeEvening {
|
sub getAutoAstroModeEvening {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user