mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-04 11:26:55 +00:00
20_GUEST: add language helper; new attribute rg_lang
git-svn-id: https://svn.fhem.de/fhem/trunk@13616 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
9422e55356
commit
165a42d969
@ -35,6 +35,7 @@ require RESIDENTStk;
|
|||||||
sub GUEST_Set($@);
|
sub GUEST_Set($@);
|
||||||
sub GUEST_Define($$);
|
sub GUEST_Define($$);
|
||||||
sub GUEST_Notify($$);
|
sub GUEST_Notify($$);
|
||||||
|
sub GUEST_Attr(@);
|
||||||
sub GUEST_Undefine($$);
|
sub GUEST_Undefine($$);
|
||||||
|
|
||||||
###################################
|
###################################
|
||||||
@ -46,9 +47,10 @@ sub GUEST_Initialize($) {
|
|||||||
$hash->{SetFn} = "GUEST_Set";
|
$hash->{SetFn} = "GUEST_Set";
|
||||||
$hash->{DefFn} = "GUEST_Define";
|
$hash->{DefFn} = "GUEST_Define";
|
||||||
$hash->{NotifyFn} = "GUEST_Notify";
|
$hash->{NotifyFn} = "GUEST_Notify";
|
||||||
|
$hash->{AttrFn} = "GUEST_Attr";
|
||||||
$hash->{UndefFn} = "GUEST_Undefine";
|
$hash->{UndefFn} = "GUEST_Undefine";
|
||||||
$hash->{AttrList} =
|
$hash->{AttrList} =
|
||||||
"rg_locationHome rg_locationWayhome rg_locationUnderway rg_autoGoneAfter:12,16,24,26,28,30,36,48,60 rg_showAllStates:0,1 rg_realname:group,alias rg_states:multiple-strict,home,gotosleep,asleep,awoken,absent,gone rg_locations rg_moods rg_moodDefault rg_moodSleepy rg_noDuration:0,1 rg_wakeupDevice rg_geofenceUUIDs rg_presenceDevices "
|
"disable:1,0 rg_locationHome rg_locationWayhome rg_locationUnderway rg_autoGoneAfter:0,12,16,24,26,28,30,36,48,60 rg_showAllStates:0,1 rg_realname:group,alias rg_states:multiple-strict,home,gotosleep,asleep,awoken,absent,gone rg_locations rg_moods rg_moodDefault rg_moodSleepy rg_noDuration:0,1 rg_wakeupDevice rg_geofenceUUIDs rg_presenceDevices rg_lang:EN,DE "
|
||||||
. $readingFnAttributes;
|
. $readingFnAttributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,6 +84,8 @@ sub GUEST_Define($$) {
|
|||||||
|
|
||||||
# set default settings on first define
|
# set default settings on first define
|
||||||
if ( $init_done && !defined( $hash->{OLDDEF} ) ) {
|
if ( $init_done && !defined( $hash->{OLDDEF} ) ) {
|
||||||
|
GUEST_Attr( "init", $name, "rg_lang" );
|
||||||
|
|
||||||
my $aliasname = $name;
|
my $aliasname = $name;
|
||||||
$aliasname =~ s/^rg_//;
|
$aliasname =~ s/^rg_//;
|
||||||
$attr{$name}{alias} = $aliasname;
|
$attr{$name}{alias} = $aliasname;
|
||||||
@ -123,12 +127,86 @@ sub GUEST_Define($$) {
|
|||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
###################################
|
||||||
|
sub GUEST_Attr(@) {
|
||||||
|
my ( $cmd, $name, $attribute, $value ) = @_;
|
||||||
|
my $hash = $defs{$name};
|
||||||
|
my $prefix = "rg_";
|
||||||
|
return unless ($init_done);
|
||||||
|
|
||||||
|
Log3 $name, 5, "GUEST $name: called function GUEST_Attr()";
|
||||||
|
|
||||||
|
if ( $attribute eq "disable" ) {
|
||||||
|
if ( $value and $value == 1 ) {
|
||||||
|
$hash->{STATE} = "disabled";
|
||||||
|
GUEST_StopInternalTimers($hash);
|
||||||
|
}
|
||||||
|
elsif ( $cmd eq "del" or !$value ) {
|
||||||
|
evalStateFormat($hash);
|
||||||
|
GUEST_StartInternalTimers( $hash, 1 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
elsif ( $attribute eq $prefix . "autoGoneAfter" ) {
|
||||||
|
if ($value) {
|
||||||
|
GUEST_AutoGone($hash);
|
||||||
|
}
|
||||||
|
elsif ( !$value ) {
|
||||||
|
delete $hash->{AUTOGONE} if ( $hash->{AUTOGONE} );
|
||||||
|
RESIDENTStk_RemoveInternalTimer( "AutoGone", $hash );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
elsif ( $attribute eq $prefix . "noDuration" ) {
|
||||||
|
if ($value) {
|
||||||
|
delete $hash->{DURATIONTIMER} if ( $hash->{DURATIONTIMER} );
|
||||||
|
RESIDENTStk_RemoveInternalTimer( "DurationTimer", $hash );
|
||||||
|
}
|
||||||
|
elsif ( !$value ) {
|
||||||
|
GUEST_DurationTimer($hash);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
elsif ( $attribute eq $prefix . "lang" ) {
|
||||||
|
my $lang =
|
||||||
|
$cmd eq "set" ? uc($value) : AttrVal( "global", "language", "EN" );
|
||||||
|
|
||||||
|
# for initial define, ensure fallback to EN
|
||||||
|
$lang = "EN"
|
||||||
|
if ( $cmd eq "init" && $lang !~ /^EN|DE$/i );
|
||||||
|
|
||||||
|
if ( $lang eq "DE" ) {
|
||||||
|
$attr{$name}{devStateIcon} =
|
||||||
|
'.*anwesend:user_available:absent .*abwesend:user_away:home .*keiner:control_building_empty:home .*bettfertig:scene_toilet:asleep .*schläft:scene_sleeping:awoken .*aufgestanden:scene_sleeping_alternat:home .*:user_unknown:home';
|
||||||
|
$attr{$name}{eventMap} =
|
||||||
|
"home:anwesend absent:abwesend none:keiner gotosleep:bettfertig asleep:schläft awoken:aufgestanden";
|
||||||
|
$attr{$name}{widgetOverride} =
|
||||||
|
"state:anwesend,bettfertig,abwesend,keiner";
|
||||||
|
}
|
||||||
|
elsif ( $lang eq "EN" ) {
|
||||||
|
$attr{$name}{devStateIcon} =
|
||||||
|
'.*home:user_available:absent .*absent:user_away:home .*none:control_building_empty:home .*gotosleep:scene_toilet:asleep .*asleep:scene_sleeping:awoken .*awoken:scene_sleeping_alternat:home .*:user_unknown:home';
|
||||||
|
delete $attr{$name}{eventMap}
|
||||||
|
if ( defined( $attr{$name}{eventMap} ) );
|
||||||
|
delete $attr{$name}{widgetOverride}
|
||||||
|
if ( defined( $attr{$name}{widgetOverride} ) );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return "Unsupported language $lang";
|
||||||
|
}
|
||||||
|
|
||||||
|
evalStateFormat($hash);
|
||||||
|
}
|
||||||
|
|
||||||
|
return if ( IsDisabled($name) );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
###################################
|
###################################
|
||||||
sub GUEST_Undefine($$) {
|
sub GUEST_Undefine($$) {
|
||||||
my ( $hash, $name ) = @_;
|
my ( $hash, $name ) = @_;
|
||||||
|
|
||||||
RESIDENTStk_RemoveInternalTimer( "AutoGone", $hash );
|
GUEST_StopInternalTimers($hash);
|
||||||
RESIDENTStk_RemoveInternalTimer( "DurationTimer", $hash );
|
|
||||||
|
|
||||||
if ( defined( $hash->{RESIDENTGROUPS} ) ) {
|
if ( defined( $hash->{RESIDENTGROUPS} ) ) {
|
||||||
my $old = $hash->{RESIDENTGROUPS};
|
my $old = $hash->{RESIDENTGROUPS};
|
||||||
@ -150,6 +228,7 @@ sub GUEST_Notify($$) {
|
|||||||
my ( $hash, $dev ) = @_;
|
my ( $hash, $dev ) = @_;
|
||||||
my $devName = $dev->{NAME};
|
my $devName = $dev->{NAME};
|
||||||
my $hashName = $hash->{NAME};
|
my $hashName = $hash->{NAME};
|
||||||
|
return if ( IsDisabled($hashName) or IsDisabled($devName) );
|
||||||
|
|
||||||
# process global:INITIALIZED
|
# process global:INITIALIZED
|
||||||
if ( $dev->{NAME} eq "global"
|
if ( $dev->{NAME} eq "global"
|
||||||
@ -282,6 +361,8 @@ sub GUEST_Set($@) {
|
|||||||
my $location = ReadingsVal( $name, "location", "undefined" );
|
my $location = ReadingsVal( $name, "location", "undefined" );
|
||||||
my $silent = 0;
|
my $silent = 0;
|
||||||
|
|
||||||
|
return if ( IsDisabled($name) );
|
||||||
|
|
||||||
Log3 $name, 5, "GUEST $name: called function GUEST_Set()";
|
Log3 $name, 5, "GUEST $name: called function GUEST_Set()";
|
||||||
|
|
||||||
return "No Argument given" if ( !defined( $a[1] ) );
|
return "No Argument given" if ( !defined( $a[1] ) );
|
||||||
@ -652,6 +733,7 @@ sub GUEST_Set($@) {
|
|||||||
GUEST_AutoGone($hash);
|
GUEST_AutoGone($hash);
|
||||||
}
|
}
|
||||||
elsif ( $state eq "absent" ) {
|
elsif ( $state eq "absent" ) {
|
||||||
|
delete $hash->{AUTOGONE} if ( $hash->{AUTOGONE} );
|
||||||
RESIDENTStk_RemoveInternalTimer( "AutoGone", $hash );
|
RESIDENTStk_RemoveInternalTimer( "AutoGone", $hash );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -886,18 +968,17 @@ sub GUEST_AutoGone($;$) {
|
|||||||
my ( $mHash, @a ) = @_;
|
my ( $mHash, @a ) = @_;
|
||||||
my $hash = ( $mHash->{HASH} ) ? $mHash->{HASH} : $mHash;
|
my $hash = ( $mHash->{HASH} ) ? $mHash->{HASH} : $mHash;
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
|
my $autoGoneAfter = AttrVal( $hash->{NAME}, "rg_autoGoneAfter", 16 );
|
||||||
|
delete $hash->{AUTOGONE} if ( $hash->{AUTOGONE} );
|
||||||
|
|
||||||
RESIDENTStk_RemoveInternalTimer( "AutoGone", $hash );
|
RESIDENTStk_RemoveInternalTimer( "AutoGone", $hash );
|
||||||
|
|
||||||
|
return if ( IsDisabled($name) );
|
||||||
|
|
||||||
if ( ReadingsVal( $name, "state", "home" ) eq "absent" ) {
|
if ( ReadingsVal( $name, "state", "home" ) eq "absent" ) {
|
||||||
my ( $date, $time, $y, $m, $d, $hour, $min, $sec, $timestamp,
|
my ( $date, $time, $y, $m, $d, $hour, $min, $sec, $timestamp,
|
||||||
$timeDiff );
|
$timeDiff );
|
||||||
my $timestampNow = gettimeofday();
|
my $timestampNow = gettimeofday();
|
||||||
my $timeout = (
|
|
||||||
defined( $attr{$name}{rg_autoGoneAfter} )
|
|
||||||
? $attr{$name}{rg_autoGoneAfter}
|
|
||||||
: "16"
|
|
||||||
);
|
|
||||||
|
|
||||||
( $date, $time ) = split( ' ', $hash->{READINGS}{state}{TIME} );
|
( $date, $time ) = split( ' ', $hash->{READINGS}{state}{TIME} );
|
||||||
( $y, $m, $d ) = split( '-', $date );
|
( $y, $m, $d ) = split( '-', $date );
|
||||||
@ -906,13 +987,14 @@ sub GUEST_AutoGone($;$) {
|
|||||||
$timestamp = timelocal( $sec, $min, $hour, $d, $m, $y );
|
$timestamp = timelocal( $sec, $min, $hour, $d, $m, $y );
|
||||||
$timeDiff = $timestampNow - $timestamp;
|
$timeDiff = $timestampNow - $timestamp;
|
||||||
|
|
||||||
if ( $timeDiff >= $timeout * 3600 ) {
|
if ( $timeDiff >= $autoGoneAfter * 3600 ) {
|
||||||
Log3 $name, 3,
|
Log3 $name, 3,
|
||||||
"GUEST $name: AutoGone timer changed state to 'gone'";
|
"GUEST $name: AutoGone timer changed state to 'gone'";
|
||||||
GUEST_Set( $hash, $name, "silentSet", "state", "gone" );
|
GUEST_Set( $hash, $name, "silentSet", "state", "gone" );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
my $runtime = $timestamp + $timeout * 3600;
|
my $runtime = $timestamp + $autoGoneAfter * 3600;
|
||||||
|
$hash->{AUTOGONE} = $runtime;
|
||||||
Log3 $name, 4, "GUEST $name: AutoGone timer scheduled: $runtime";
|
Log3 $name, 4, "GUEST $name: AutoGone timer scheduled: $runtime";
|
||||||
RESIDENTStk_InternalTimer( "AutoGone", $runtime, "GUEST_AutoGone",
|
RESIDENTStk_InternalTimer( "AutoGone", $runtime, "GUEST_AutoGone",
|
||||||
$hash, 1 );
|
$hash, 1 );
|
||||||
@ -934,12 +1016,12 @@ sub GUEST_DurationTimer($;$) {
|
|||||||
my $durPresence = "0";
|
my $durPresence = "0";
|
||||||
my $durAbsence = "0";
|
my $durAbsence = "0";
|
||||||
my $durSleep = "0";
|
my $durSleep = "0";
|
||||||
|
my $noDuration = AttrVal( $hash->{NAME}, "rg_noDuration", 0 );
|
||||||
|
delete $hash->{DURATIONTIMER} if ( $hash->{DURATIONTIMER} );
|
||||||
|
|
||||||
RESIDENTStk_RemoveInternalTimer( "DurationTimer", $hash );
|
RESIDENTStk_RemoveInternalTimer( "DurationTimer", $hash );
|
||||||
|
|
||||||
if ( !defined( $attr{$name}{rg_noDuration} )
|
return if ( IsDisabled($name) || $noDuration );
|
||||||
|| $attr{$name}{rg_noDuration} == 0 )
|
|
||||||
{
|
|
||||||
|
|
||||||
# presence timer
|
# presence timer
|
||||||
if ( ReadingsVal( $name, "presence", "absent" ) eq "present"
|
if ( ReadingsVal( $name, "presence", "absent" ) eq "present"
|
||||||
@ -964,8 +1046,7 @@ sub GUEST_DurationTimer($;$) {
|
|||||||
&& ReadingsVal( $name, "lastSleep", "-" ) ne "-" )
|
&& ReadingsVal( $name, "lastSleep", "-" ) ne "-" )
|
||||||
{
|
{
|
||||||
$durSleep =
|
$durSleep =
|
||||||
$timestampNow -
|
$timestampNow - time_str2num( ReadingsVal( $name, "lastSleep", "" ) );
|
||||||
time_str2num( ReadingsVal( $name, "lastSleep", "" ) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
my $durPresence_hr =
|
my $durPresence_hr =
|
||||||
@ -984,14 +1065,11 @@ sub GUEST_DurationTimer($;$) {
|
|||||||
|
|
||||||
readingsBeginUpdate($hash) if ( !$silent );
|
readingsBeginUpdate($hash) if ( !$silent );
|
||||||
readingsBulkUpdate( $hash, "durTimerPresence_cr", $durPresence_cr )
|
readingsBulkUpdate( $hash, "durTimerPresence_cr", $durPresence_cr )
|
||||||
if ( ReadingsVal( $name, "durTimerPresence_cr", "" ) ne
|
if ( ReadingsVal( $name, "durTimerPresence_cr", "" ) ne $durPresence_cr );
|
||||||
$durPresence_cr );
|
|
||||||
readingsBulkUpdate( $hash, "durTimerPresence", $durPresence_hr )
|
readingsBulkUpdate( $hash, "durTimerPresence", $durPresence_hr )
|
||||||
if (
|
if ( ReadingsVal( $name, "durTimerPresence", "" ) ne $durPresence_hr );
|
||||||
ReadingsVal( $name, "durTimerPresence", "" ) ne $durPresence_hr );
|
|
||||||
readingsBulkUpdate( $hash, "durTimerAbsence_cr", $durAbsence_cr )
|
readingsBulkUpdate( $hash, "durTimerAbsence_cr", $durAbsence_cr )
|
||||||
if (
|
if ( ReadingsVal( $name, "durTimerAbsence_cr", "" ) ne $durAbsence_cr );
|
||||||
ReadingsVal( $name, "durTimerAbsence_cr", "" ) ne $durAbsence_cr );
|
|
||||||
readingsBulkUpdate( $hash, "durTimerAbsence", $durAbsence_hr )
|
readingsBulkUpdate( $hash, "durTimerAbsence", $durAbsence_hr )
|
||||||
if ( ReadingsVal( $name, "durTimerAbsence", "" ) ne $durAbsence_hr );
|
if ( ReadingsVal( $name, "durTimerAbsence", "" ) ne $durAbsence_hr );
|
||||||
readingsBulkUpdate( $hash, "durTimerSleep_cr", $durSleep_cr )
|
readingsBulkUpdate( $hash, "durTimerSleep_cr", $durSleep_cr )
|
||||||
@ -999,9 +1077,10 @@ sub GUEST_DurationTimer($;$) {
|
|||||||
readingsBulkUpdate( $hash, "durTimerSleep", $durSleep_hr )
|
readingsBulkUpdate( $hash, "durTimerSleep", $durSleep_hr )
|
||||||
if ( ReadingsVal( $name, "durTimerSleep", "" ) ne $durSleep_hr );
|
if ( ReadingsVal( $name, "durTimerSleep", "" ) ne $durSleep_hr );
|
||||||
readingsEndUpdate( $hash, 1 ) if ( !$silent );
|
readingsEndUpdate( $hash, 1 ) if ( !$silent );
|
||||||
}
|
|
||||||
|
|
||||||
RESIDENTStk_InternalTimer( "DurationTimer", $timestampNow + 60,
|
$hash->{DURATIONTIMER} = $timestampNow + 60;
|
||||||
|
|
||||||
|
RESIDENTStk_InternalTimer( "DurationTimer", $hash->{DURATIONTIMER},
|
||||||
"GUEST_DurationTimer", $hash, 1 )
|
"GUEST_DurationTimer", $hash, 1 )
|
||||||
if ( $state ne "none" );
|
if ( $state ne "none" );
|
||||||
|
|
||||||
@ -1203,6 +1282,17 @@ sub GUEST_StartInternalTimers($$) {
|
|||||||
GUEST_DurationTimer($hash);
|
GUEST_DurationTimer($hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
###################################
|
||||||
|
sub GUEST_StopInternalTimers($) {
|
||||||
|
my ($hash) = @_;
|
||||||
|
|
||||||
|
delete $hash->{AUTOGONE} if ( $hash->{AUTOGONE} );
|
||||||
|
delete $hash->{DURATIONTIMER} if ( $hash->{DURATIONTIMER} );
|
||||||
|
|
||||||
|
RESIDENTStk_RemoveInternalTimer( "AutoGone", $hash );
|
||||||
|
RESIDENTStk_RemoveInternalTimer( "DurationTimer", $hash );
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
=pod
|
=pod
|
||||||
@ -1358,6 +1448,9 @@ sub GUEST_StartInternalTimers($$) {
|
|||||||
<li>
|
<li>
|
||||||
<b>rg_geofenceUUIDs</b> - comma separated list of device UUIDs updating their location via <a href="#GEOFANCY">GEOFANCY</a>. Avoids necessity for additional notify/DOIF/watchdog devices and can make GEOFANCY attribute <i>devAlias</i> obsolete. (using more than one UUID/device might not be a good idea as location my leap)
|
<b>rg_geofenceUUIDs</b> - comma separated list of device UUIDs updating their location via <a href="#GEOFANCY">GEOFANCY</a>. Avoids necessity for additional notify/DOIF/watchdog devices and can make GEOFANCY attribute <i>devAlias</i> obsolete. (using more than one UUID/device might not be a good idea as location my leap)
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<b>rg_lang</b> - overwrite global language setting; helps to set device attributes to translate FHEMWEB display text
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<b>rg_locationHome</b> - locations matching these will be treated as being at home; first entry reflects default value to be used with state correlation; separate entries by space; defaults to 'home'
|
<b>rg_locationHome</b> - locations matching these will be treated as being at home; first entry reflects default value to be used with state correlation; separate entries by space; defaults to 'home'
|
||||||
</li>
|
</li>
|
||||||
@ -1380,7 +1473,7 @@ sub GUEST_StartInternalTimers($$) {
|
|||||||
<b>rg_moods</b> - list of moods to be shown in FHEMWEB; separate entries by comma only and do NOT use spaces
|
<b>rg_moods</b> - list of moods to be shown in FHEMWEB; separate entries by comma only and do NOT use spaces
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<b>rg_noDuration</b> - may be used to disable duration timer calculation (see readings durTimer*)
|
<b>rg_noDuration</b> - may be used to disable continuous, non-event driven duration timer calculation (see readings durTimer*)
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<b>rg_passPresenceTo</b> - synchronize presence state with other GUEST or GUEST devices; separte devices by space
|
<b>rg_passPresenceTo</b> - synchronize presence state with other GUEST or GUEST devices; separte devices by space
|
||||||
@ -1655,6 +1748,9 @@ sub GUEST_StartInternalTimers($$) {
|
|||||||
<li>
|
<li>
|
||||||
<b>rg_geofenceUUIDs</b> - Mit Komma getrennte Liste von Geräte UUIDs, die ihren Standort über <a href="#GEOFANCY">GEOFANCY</a> aktualisieren. Vermeidet zusätzliche notify/DOIF/watchdog Geräte und kann als Ersatz für das GEOFANCY attribute <i>devAlias</i> dienen. (hier ehr als eine UUID/Device zu hinterlegen ist eher keine gute Idee da die Lokation dann womöglich anfängt zu springen)
|
<b>rg_geofenceUUIDs</b> - Mit Komma getrennte Liste von Geräte UUIDs, die ihren Standort über <a href="#GEOFANCY">GEOFANCY</a> aktualisieren. Vermeidet zusätzliche notify/DOIF/watchdog Geräte und kann als Ersatz für das GEOFANCY attribute <i>devAlias</i> dienen. (hier ehr als eine UUID/Device zu hinterlegen ist eher keine gute Idee da die Lokation dann womöglich anfängt zu springen)
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<b>rg_lang</b> - überschreibt globale Spracheinstellung; hilft beim setzen von Device Attributen, um FHEMWEB Anzeigetext zu übersetzen
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<b>rg_locationHome</b> - hiermit übereinstimmende Lokationen werden als zu Hause gewertet; der erste Eintrag wird für das Zusammenspiel bei Statusänderungen benutzt; mehrere Einträge durch Leerzeichen trennen; Standard ist 'home'
|
<b>rg_locationHome</b> - hiermit übereinstimmende Lokationen werden als zu Hause gewertet; der erste Eintrag wird für das Zusammenspiel bei Statusänderungen benutzt; mehrere Einträge durch Leerzeichen trennen; Standard ist 'home'
|
||||||
</li>
|
</li>
|
||||||
@ -1677,7 +1773,7 @@ sub GUEST_StartInternalTimers($$) {
|
|||||||
<b>rg_moods</b> - Liste von Stimmungen, wie sie in FHEMWEB angezeigt werden sollen; mehrere Einträge nur durch Komma trennen und KEINE Leerzeichen verwenden
|
<b>rg_moods</b> - Liste von Stimmungen, wie sie in FHEMWEB angezeigt werden sollen; mehrere Einträge nur durch Komma trennen und KEINE Leerzeichen verwenden
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<b>rg_noDuration</b> - deaktiviert die Berechnung der Zeitspannen (siehe Readings durTimer*)
|
<b>rg_noDuration</b> - deaktiviert die kontinuierliche, nicht Event-basierte Berechnung der Zeitspannen (siehe Readings durTimer*)
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<b>rg_passPresenceTo</b> - synchronisiere die Anwesenheit mit anderen GUEST oder ROOMMATE Devices; mehrere Devices durch Leerzeichen trennen
|
<b>rg_passPresenceTo</b> - synchronisiere die Anwesenheit mit anderen GUEST oder ROOMMATE Devices; mehrere Devices durch Leerzeichen trennen
|
||||||
|
Loading…
x
Reference in New Issue
Block a user