fix multiple Roommate Bug, add new get and set commands
This commit is contained in:
parent
8b3230e3cf
commit
961abc8831
@ -46,7 +46,7 @@ use warnings;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
my $version = "0.1.70";
|
my $version = "0.1.73";
|
||||||
|
|
||||||
|
|
||||||
sub AutoShuttersControl_Initialize($) {
|
sub AutoShuttersControl_Initialize($) {
|
||||||
@ -105,12 +105,12 @@ use GPUtils qw(:all); # wird für den Import der FHEM Funktionen aus der fhem.p
|
|||||||
use Data::Dumper; #only for Debugging
|
use Data::Dumper; #only for Debugging
|
||||||
use Date::Parse;
|
use Date::Parse;
|
||||||
|
|
||||||
|
|
||||||
my $missingModul = "";
|
my $missingModul = "";
|
||||||
eval "use JSON qw(decode_json encode_json);1" or $missingModul .= "JSON ";
|
eval "use JSON qw(decode_json encode_json);1" or $missingModul .= "JSON ";
|
||||||
|
|
||||||
## Import der FHEM Funktionen
|
## Import der FHEM Funktionen
|
||||||
BEGIN {
|
BEGIN {
|
||||||
|
|
||||||
GP_Import(qw(
|
GP_Import(qw(
|
||||||
devspec2array
|
devspec2array
|
||||||
readingsSingleUpdate
|
readingsSingleUpdate
|
||||||
@ -399,6 +399,11 @@ sub Set($$@) {
|
|||||||
|
|
||||||
ShuttersDeviceScan($hash);
|
ShuttersDeviceScan($hash);
|
||||||
|
|
||||||
|
} elsif( lc $cmd eq 'createnewnotifydev' ) {
|
||||||
|
return "usage: $cmd" if( @args != 0 );
|
||||||
|
|
||||||
|
CreateNewNotifyDev($hash);
|
||||||
|
|
||||||
} elsif( lc $cmd eq 'partymode' ) {
|
} elsif( lc $cmd eq 'partymode' ) {
|
||||||
return "usage: $cmd" if( @args > 1 );
|
return "usage: $cmd" if( @args > 1 );
|
||||||
|
|
||||||
@ -417,7 +422,7 @@ sub Set($$@) {
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
my $list = "scanForShutters:noArg";
|
my $list = "scanForShutters:noArg";
|
||||||
$list .= " renewSetSunriseSunsetTimer:noArg partyMode:on,off lockOut:on,off sunriseTimeWeHoliday:on,off" if( ReadingsVal($name,'userAttrList',0) eq 'rolled out');
|
$list .= " renewSetSunriseSunsetTimer:noArg partyMode:on,off lockOut:on,off sunriseTimeWeHoliday:on,off createNewNotifyDev:noArg" if( ReadingsVal($name,'userAttrList',0) eq 'rolled out');
|
||||||
|
|
||||||
return "Unknown argument $cmd, choose one of $list";
|
return "Unknown argument $cmd, choose one of $list";
|
||||||
}
|
}
|
||||||
@ -438,9 +443,15 @@ sub Get($$@) {
|
|||||||
my $ret = GetShuttersInformation($hash);
|
my $ret = GetShuttersInformation($hash);
|
||||||
return $ret;
|
return $ret;
|
||||||
|
|
||||||
|
} elsif( lc $cmd eq 'shownotifydevsinformations' ) {
|
||||||
|
return "usage: $cmd" if( @args != 0 );
|
||||||
|
|
||||||
|
my $ret = GetMonitoredDevs($hash);
|
||||||
|
return $ret;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
my $list = "";
|
my $list = "";
|
||||||
$list .= " showShuttersInformations:noArg" if( ReadingsVal($name,'userAttrList','none') eq 'rolled out' );
|
$list .= " showShuttersInformations:noArg showNotifyDevsInformations:noArg" if( ReadingsVal($name,'userAttrList','none') eq 'rolled out' );
|
||||||
|
|
||||||
return "Unknown argument $cmd, choose one of $list";
|
return "Unknown argument $cmd, choose one of $list";
|
||||||
}
|
}
|
||||||
@ -627,7 +638,7 @@ sub WindowRecEventProcessing($@) {
|
|||||||
} elsif( ($1 eq 'tilted' or ($1 eq 'open' and AttrVal($shuttersDev,'ASC_WindowRec_subType','twostate') eq 'twostate')) and AttrVal($shuttersDev,'ASC_Ventilate_Window_Open','off') eq 'on' and $queryShuttersPosWinRecTilted ) {
|
} elsif( ($1 eq 'tilted' or ($1 eq 'open' and AttrVal($shuttersDev,'ASC_WindowRec_subType','twostate') eq 'twostate')) and AttrVal($shuttersDev,'ASC_Ventilate_Window_Open','off') eq 'on' and $queryShuttersPosWinRecTilted ) {
|
||||||
ShuttersCommandSet($hash,$shuttersDev,$closedPosWinRecTilted);
|
ShuttersCommandSet($hash,$shuttersDev,$closedPosWinRecTilted);
|
||||||
|
|
||||||
} elsif($1 eq 'open' and AttrVal($shuttersDev,'ASC_WindowRec_subType','twostate') eq 'threestate' and AttrVal($name,'ASC_autoShuttersControlComfort','off') eq 'on') {
|
} elsif( $1 eq 'open' and AttrVal($shuttersDev,'ASC_WindowRec_subType','twostate') eq 'threestate' and AttrVal($name,'ASC_autoShuttersControlComfort','off') eq 'on' and $queryShuttersPosWinRecTilted ) {
|
||||||
ShuttersCommandSet($hash,$shuttersDev,AttrVal($shuttersDev,'ASC_Pos_after_ComfortOpen',50));
|
ShuttersCommandSet($hash,$shuttersDev,AttrVal($shuttersDev,'ASC_Pos_after_ComfortOpen',50));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -651,8 +662,9 @@ sub RoommateEventProcessing($@) {
|
|||||||
|
|
||||||
|
|
||||||
ShuttersCommandSet($hash,$shuttersDev,$openPos)
|
ShuttersCommandSet($hash,$shuttersDev,$openPos)
|
||||||
if( ($1 eq 'home' or $1 eq 'awoken') and
|
if( ($1 eq 'home' or $1 eq 'awoken')
|
||||||
(LastStateRoommates($shuttersDev) eq 'asleep' or LastStateRoommates($shuttersDev) eq 'awoken')
|
and (LastStateRoommates($shuttersDev) eq 'asleep' or LastStateRoommates($shuttersDev) eq 'awoken')
|
||||||
|
and (StateRoommates($shuttersDev) eq 'home' or StateRoommates($shuttersDev) eq 'awoken')
|
||||||
and AttrVal($name,'ASC_autoShuttersControlMorning','off') eq 'on'
|
and AttrVal($name,'ASC_autoShuttersControlMorning','off') eq 'on'
|
||||||
and IsDay($hash,$shuttersDev)
|
and IsDay($hash,$shuttersDev)
|
||||||
and AttrVal($shuttersDev,'ASC_Mode_Up','off') eq 'always' );
|
and AttrVal($shuttersDev,'ASC_Mode_Up','off') eq 'always' );
|
||||||
@ -845,12 +857,26 @@ sub SunRiseShuttersAfterTimerFn($) {
|
|||||||
CreateSunRiseSetShuttersTimer($hash,$shuttersDev);
|
CreateSunRiseSetShuttersTimer($hash,$shuttersDev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub CreateNewNotifyDev($) {
|
||||||
|
|
||||||
|
my $hash = shift;
|
||||||
|
my $name = $hash->{NAME};
|
||||||
|
|
||||||
|
|
||||||
|
$hash->{NOTIFYDEV} = "global,".$name;
|
||||||
|
delete $hash->{monitoredDevs};
|
||||||
|
CommandDeleteReading(undef,$name.' .monitoredDevs');
|
||||||
|
|
||||||
|
foreach (@{$hash->{helper}{shuttersList}}) {
|
||||||
|
AddNotifyDev($hash,AttrVal($_,'ASC_Roommate_Device','none'),$_,'ASC_Roommate_Device') if( AttrVal($_,'ASC_Roommate_Device','none') ne 'none' );
|
||||||
|
AddNotifyDev($hash,AttrVal($_,'ASC_WindowRec','none'),$_,'ASC_WindowRec') if( AttrVal($_,'ASC_WindowRec','none') ne 'none' );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sub GetShuttersInformation($) {
|
sub GetShuttersInformation($) {
|
||||||
|
|
||||||
my $hash = shift;
|
my $hash = shift;
|
||||||
|
|
||||||
my $name = $hash->{NAME};
|
|
||||||
|
|
||||||
|
|
||||||
my $shuttersInformations = ShuttersInformation($hash);
|
my $shuttersInformations = ShuttersInformation($hash);
|
||||||
|
|
||||||
@ -914,6 +940,70 @@ sub ShuttersInformation($) {
|
|||||||
return \%shuttersInformations;
|
return \%shuttersInformations;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub GetMonitoredDevs($) {
|
||||||
|
|
||||||
|
my $hash = shift;
|
||||||
|
|
||||||
|
|
||||||
|
my $notifydevs = eval{decode_json(ReadingsVal($hash->{NAME},'.monitoredDevs','none'))};
|
||||||
|
|
||||||
|
my $ret = '<html><table><tr><td>';
|
||||||
|
$ret .= '<table class="block wide">';
|
||||||
|
$ret .= '<tr class="even">';
|
||||||
|
$ret .= "<td><b>NOTIFYDEV</b></td>";
|
||||||
|
$ret .= "<td> </td>";
|
||||||
|
$ret .= "<td><b>Shutters</b></td>";
|
||||||
|
$ret .= "<td> </td>";
|
||||||
|
$ret .= "<td><b>Attribut</b></td>";
|
||||||
|
$ret .= "<td> </td>";
|
||||||
|
$ret .= '</tr>';
|
||||||
|
|
||||||
|
if( ref($notifydevs) eq "HASH" ) {
|
||||||
|
my $linecount = 1;
|
||||||
|
foreach my $notifydev (keys (%{$notifydevs}) ) {
|
||||||
|
if( ref($notifydevs->{$notifydev}) eq "HASH" ) {
|
||||||
|
foreach my $shutters (keys (%{$notifydevs->{$notifydev}}) ) {
|
||||||
|
|
||||||
|
if ( $linecount % 2 == 0 ) {
|
||||||
|
$ret .= '<tr class="even">';
|
||||||
|
} else {
|
||||||
|
$ret .= '<tr class="odd">';
|
||||||
|
}
|
||||||
|
|
||||||
|
$ret .= "<td>$notifydev</td>";
|
||||||
|
$ret .= "<td> </td>";
|
||||||
|
$ret .= "<td>$shutters</td>";
|
||||||
|
$ret .= "<td> </td>";
|
||||||
|
$ret .= "<td>$notifydevs->{$notifydev}{$shutters}</td>";
|
||||||
|
$ret .= "<td> </td>";
|
||||||
|
$ret .= '</tr>';
|
||||||
|
$linecount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
###### create Links
|
||||||
|
my $aHref;
|
||||||
|
|
||||||
|
# create define Link
|
||||||
|
# $aHref="<a href=\"".$::FW_httpheader->{host}."/fhem?cmd=set".$::FW_CSRF."\">Create new NOTIFYDEV structure</a>";
|
||||||
|
# $aHref="<a href=\"/fhem?cmd=set+\">Create new NOTIFYDEV structure</a>";
|
||||||
|
# $aHref="<a href=\"".$headerHost[0]."/fhem?cmd=define+".makeDeviceName($dataset->{station}{name})."+Aqicn+".$dataset->{uid}.$FW_CSRF."\">Create Station Device</a>";
|
||||||
|
|
||||||
|
# $ret .= '<tr class="odd"> </tr>';
|
||||||
|
# $ret .= '<tr class="even"> </tr>';
|
||||||
|
# $ret .= "<td> </td>";
|
||||||
|
# $ret .= "<td> </td>";
|
||||||
|
# $ret .= "<td> </td>";
|
||||||
|
# $ret .= "<td> </td>";
|
||||||
|
# $ret .= "<td>".$aHref."</td>";
|
||||||
|
$ret .= '</table></td></tr>';
|
||||||
|
$ret .= '</table></html>';
|
||||||
|
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -1011,13 +1101,13 @@ sub ShuttersSunrise($$$) {
|
|||||||
if( int(gettimeofday() / 86400) == int((computeAlignTime('24:00',sunrise_abs($autoAstroMode,0,AttrVal($shuttersDev,'ASC_Time_Up_Early','04:30:00'),AttrVal($shuttersDev,'ASC_Time_Up_Late','09:00:00'))) + 1) / 86400) ) {
|
if( int(gettimeofday() / 86400) == int((computeAlignTime('24:00',sunrise_abs($autoAstroMode,0,AttrVal($shuttersDev,'ASC_Time_Up_Early','04:30:00'),AttrVal($shuttersDev,'ASC_Time_Up_Late','09:00:00'))) + 1) / 86400) ) {
|
||||||
$shuttersSunriseUnixtime = ($shuttersSunriseUnixtime + 86400)
|
$shuttersSunriseUnixtime = ($shuttersSunriseUnixtime + 86400)
|
||||||
#if( ($shuttersSunriseUnixtime < ($oldFuncHash->{sunrisetime} + 1440) or $shuttersSunriseUnixtime != $oldFuncHash->{sunrisetime}) and $oldFuncHash->{sunrisetime} < gettimeofday() );
|
#if( ($shuttersSunriseUnixtime < ($oldFuncHash->{sunrisetime} + 1440) or $shuttersSunriseUnixtime != $oldFuncHash->{sunrisetime}) and $oldFuncHash->{sunrisetime} < gettimeofday() );
|
||||||
if( $shuttersSunriseUnixtime < ($oldFuncHash->{sunrisetime} + 1440) and $oldFuncHash->{sunrisetime} < gettimeofday() );
|
if( $shuttersSunriseUnixtime < ($oldFuncHash->{sunrisetime} + 180) and $oldFuncHash->{sunrisetime} < gettimeofday() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} elsif( defined($oldFuncHash) and ref($oldFuncHash) eq 'HASH') {
|
} elsif( defined($oldFuncHash) and ref($oldFuncHash) eq 'HASH') {
|
||||||
$shuttersSunriseUnixtime = ($shuttersSunriseUnixtime + 86400)
|
$shuttersSunriseUnixtime = ($shuttersSunriseUnixtime + 86400)
|
||||||
#if( ($shuttersSunriseUnixtime < ($oldFuncHash->{sunrisetime} + 900) or $shuttersSunriseUnixtime != $oldFuncHash->{sunrisetime}) and $oldFuncHash->{sunrisetime} < gettimeofday() );
|
#if( ($shuttersSunriseUnixtime < ($oldFuncHash->{sunrisetime} + 900) or $shuttersSunriseUnixtime != $oldFuncHash->{sunrisetime}) and $oldFuncHash->{sunrisetime} < gettimeofday() );
|
||||||
if( $shuttersSunriseUnixtime < ($oldFuncHash->{sunrisetime} + 900) and $oldFuncHash->{sunrisetime} < gettimeofday() );
|
if( $shuttersSunriseUnixtime < ($oldFuncHash->{sunrisetime} + 180) and $oldFuncHash->{sunrisetime} < gettimeofday() );
|
||||||
}
|
}
|
||||||
} elsif( AttrVal($shuttersDev,'ASC_Up','astro') eq 'time' ) {
|
} elsif( AttrVal($shuttersDev,'ASC_Up','astro') eq 'time' ) {
|
||||||
|
|
||||||
@ -1060,7 +1150,7 @@ sub ShuttersSunset($$$) {
|
|||||||
if( defined($oldFuncHash) and ref($oldFuncHash) eq 'HASH') {
|
if( defined($oldFuncHash) and ref($oldFuncHash) eq 'HASH') {
|
||||||
$shuttersSunsetUnixtime = ($shuttersSunsetUnixtime + 86400)
|
$shuttersSunsetUnixtime = ($shuttersSunsetUnixtime + 86400)
|
||||||
#if( ($shuttersSunsetUnixtime < ($oldFuncHash->{sunsettime} + 900) or $shuttersSunsetUnixtime != $oldFuncHash->{sunsettime}) and $oldFuncHash->{sunsettime} < gettimeofday() );
|
#if( ($shuttersSunsetUnixtime < ($oldFuncHash->{sunsettime} + 900) or $shuttersSunsetUnixtime != $oldFuncHash->{sunsettime}) and $oldFuncHash->{sunsettime} < gettimeofday() );
|
||||||
if( $shuttersSunsetUnixtime < ($oldFuncHash->{sunsettime} + 900) and $oldFuncHash->{sunsettime} < gettimeofday() );
|
if( $shuttersSunsetUnixtime < ($oldFuncHash->{sunsettime} + 180) and $oldFuncHash->{sunsettime} < gettimeofday() );
|
||||||
}
|
}
|
||||||
} elsif( AttrVal($shuttersDev,'ASC_Down','astro') eq 'time' ) {
|
} elsif( AttrVal($shuttersDev,'ASC_Down','astro') eq 'time' ) {
|
||||||
|
|
||||||
@ -1181,7 +1271,7 @@ sub StateRoommates($) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
my %revStatePrio = reverse %statePrio;
|
my %revStatePrio = reverse %statePrio;
|
||||||
Log3 $shuttersDev, 1, "AutoShuttersControl ($shuttersDev) - StateRoommates: " . $revStatePrio{$minPrio};
|
Log3 $shuttersDev, 4, "AutoShuttersControl ($shuttersDev) - StateRoommates: " . $revStatePrio{$minPrio};
|
||||||
return $revStatePrio{$minPrio};
|
return $revStatePrio{$minPrio};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1201,7 +1291,7 @@ sub LastStateRoommates($) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
my %revStatePrio = reverse %statePrio;
|
my %revStatePrio = reverse %statePrio;
|
||||||
Log3 $shuttersDev, 1, "AutoShuttersControl ($shuttersDev) - LastStateRoommates: " . $revStatePrio{$minPrio};
|
Log3 $shuttersDev, 4, "AutoShuttersControl ($shuttersDev) - LastStateRoommates: " . $revStatePrio{$minPrio};
|
||||||
return $revStatePrio{$minPrio};
|
return $revStatePrio{$minPrio};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1395,12 +1485,14 @@ sub LastStateRoommates($) {
|
|||||||
<li>renewSetSunriseSunsetTimer - erneuert bei allen Rolläden die Zeiten für Sunset und Sunrise und setzt die internen Timer neu.</li>
|
<li>renewSetSunriseSunsetTimer - erneuert bei allen Rolläden die Zeiten für Sunset und Sunrise und setzt die internen Timer neu.</li>
|
||||||
<li>scanForShutters - sucht alle FHEM Devices mit dem Attribut "AutoShuttersControl" 1/2</li>
|
<li>scanForShutters - sucht alle FHEM Devices mit dem Attribut "AutoShuttersControl" 1/2</li>
|
||||||
<li>sunriseTimeWeHoliday - on/off aktiviert/deaktiviert die Beachtung des Rolladen Device Attributes ASC_Time_Up_WE_Holiday</li>
|
<li>sunriseTimeWeHoliday - on/off aktiviert/deaktiviert die Beachtung des Rolladen Device Attributes ASC_Time_Up_WE_Holiday</li>
|
||||||
|
>li>createNewNotifyDev - Legt die interne Struktur für NOTIFYDEV neu an</li>
|
||||||
</ul>
|
</ul>
|
||||||
<br><br>
|
<br><br>
|
||||||
<a name="AutoShuttersControlGet"></a>
|
<a name="AutoShuttersControlGet"></a>
|
||||||
<b>Get</b>
|
<b>Get</b>
|
||||||
<ul>
|
<ul>
|
||||||
<li></li>
|
<li>showShuttersInformations - zeigt eine Übersicht der Autofahrzeiten</li>
|
||||||
|
<li>showNotifyDevsInformations - zeigt eine Übersicht der abgelegten NOTIFYDEV Struktur. Diehnt zur Kontrolle</li>
|
||||||
</ul>
|
</ul>
|
||||||
<br><br>
|
<br><br>
|
||||||
<a name="AutoShuttersControlAttributes"></a>
|
<a name="AutoShuttersControlAttributes"></a>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user