mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-05-04 22:19:38 +00:00
10_RESIDENTS,20_ROOMMATE,20_GUEST: prevent "has no TYPE" messages
git-svn-id: https://svn.fhem.de/fhem/trunk@13870 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
48767b7c2f
commit
38dafd4f93
@ -137,9 +137,9 @@ sub RESIDENTS_Attr(@) {
|
|||||||
if ( !defined( $attr{$name}{group} )
|
if ( !defined( $attr{$name}{group} )
|
||||||
|| $attr{$name}{group} eq "Home State" );
|
|| $attr{$name}{group} eq "Home State" );
|
||||||
$attr{$name}{devStateIcon} =
|
$attr{$name}{devStateIcon} =
|
||||||
'.*anwesend:status_available:absent .*abwesend:status_away_1:home .*verreist:status_standby:home .*keine:control_building_empty .*bettfertig:status_night:asleep .*schläft:status_night:awoken .*aufgestanden:status_available:home .*:user_unknown:home';
|
'.*anwesend:status_available:absent .*abwesend:status_away_1:home .*verreist:status_standby:home .*keine:control_building_empty .*bettfertig:status_night:asleep .*schlaeft:status_night:awoken .*aufgestanden:status_available:home .*:user_unknown:home';
|
||||||
$attr{$name}{eventMap} =
|
$attr{$name}{eventMap} =
|
||||||
"home:anwesend absent:abwesend gone:verreist none:keine gotosleep:bettfertig asleep:schläft awoken:aufgestanden";
|
"home:anwesend absent:abwesend gone:verreist none:keine gotosleep:bettfertig asleep:schlaeft awoken:aufgestanden";
|
||||||
$attr{$name}{widgetOverride} =
|
$attr{$name}{widgetOverride} =
|
||||||
"state:anwesend,bettfertig,abwesend,verreist";
|
"state:anwesend,bettfertig,abwesend,verreist";
|
||||||
}
|
}
|
||||||
@ -212,9 +212,7 @@ sub RESIDENTS_Notify($$) {
|
|||||||
return unless ( $devName ne $hashName ); # only foreign events
|
return unless ( $devName ne $hashName ); # only foreign events
|
||||||
return if ( IsDisabled($hashName) or IsDisabled($devName) );
|
return if ( IsDisabled($hashName) or IsDisabled($devName) );
|
||||||
return
|
return
|
||||||
unless ( defined( $defs{$devName} )
|
unless ( RESIDENTStk_GetType( $devName, "ROOMMATE|GUEST|dummy" ) );
|
||||||
&& defined( $defs{$devName}{TYPE} )
|
|
||||||
&& $defs{$devName}{TYPE} =~ /^(ROOMMATE|GUEST|dummy)$/i );
|
|
||||||
|
|
||||||
my @registeredRoommates =
|
my @registeredRoommates =
|
||||||
split( /,/, $hash->{ROOMMATES} )
|
split( /,/, $hash->{ROOMMATES} )
|
||||||
@ -463,11 +461,11 @@ sub RESIDENTS_Set($@) {
|
|||||||
|
|
||||||
# define roommate
|
# define roommate
|
||||||
fhem( "define " . $rr_name . " ROOMMATE " . $name )
|
fhem( "define " . $rr_name . " ROOMMATE " . $name )
|
||||||
unless ( defined( $defs{$rr_name} ) );
|
unless ( RESIDENTStk_IsDevice($rr_name) );
|
||||||
|
|
||||||
if ( defined( $defs{$rr_name} ) ) {
|
if ( RESIDENTStk_IsDevice($rr_name) ) {
|
||||||
return "Can't create, device $rr_name already existing."
|
return "Can't create, device $rr_name already existing."
|
||||||
unless ( $defs{$rr_name}{TYPE} eq "ROOMMATE" );
|
unless ( RESIDENTStk_IsDevice( $rr_name, "ROOMMATE" ) );
|
||||||
|
|
||||||
my $lang =
|
my $lang =
|
||||||
$a[3]
|
$a[3]
|
||||||
@ -499,7 +497,7 @@ sub RESIDENTS_Set($@) {
|
|||||||
my $rr_name = $a[2];
|
my $rr_name = $a[2];
|
||||||
|
|
||||||
# delete roommate
|
# delete roommate
|
||||||
if ( defined( $defs{$rr_name} ) ) {
|
if ( RESIDENTStk_IsDevice($rr_name) ) {
|
||||||
Log3 $name, 3, "RESIDENTS $name: deleted device $rr_name"
|
Log3 $name, 3, "RESIDENTS $name: deleted device $rr_name"
|
||||||
if fhem( "delete " . $rr_name );
|
if fhem( "delete " . $rr_name );
|
||||||
}
|
}
|
||||||
@ -523,11 +521,11 @@ sub RESIDENTS_Set($@) {
|
|||||||
|
|
||||||
# define guest
|
# define guest
|
||||||
fhem( "define " . $rg_name . " GUEST " . $name )
|
fhem( "define " . $rg_name . " GUEST " . $name )
|
||||||
unless ( defined( $defs{$rg_name} ) );
|
unless ( RESIDENTStk_IsDevice($rg_name) );
|
||||||
|
|
||||||
if ( defined( $defs{$rg_name} ) ) {
|
if ( RESIDENTStk_IsDevice($rg_name) ) {
|
||||||
return "Can't create, device $rg_name already existing."
|
return "Can't create, device $rg_name already existing."
|
||||||
unless ( $defs{$rg_name}{TYPE} eq "GUEST" );
|
unless ( RESIDENTStk_IsDevice( $rg_name, "GUEST" ) );
|
||||||
|
|
||||||
my $lang =
|
my $lang =
|
||||||
$a[3]
|
$a[3]
|
||||||
@ -559,7 +557,7 @@ sub RESIDENTS_Set($@) {
|
|||||||
my $rg_name = $a[2];
|
my $rg_name = $a[2];
|
||||||
|
|
||||||
# delete guest
|
# delete guest
|
||||||
if ( defined( $defs{$rg_name} ) ) {
|
if ( RESIDENTStk_IsDevice($rg_name) ) {
|
||||||
Log3 $name, 3, "RESIDENTS $name: deleted device $rg_name"
|
Log3 $name, 3, "RESIDENTS $name: deleted device $rg_name"
|
||||||
if fhem( "delete " . $rg_name );
|
if fhem( "delete " . $rg_name );
|
||||||
}
|
}
|
||||||
@ -577,7 +575,7 @@ sub RESIDENTS_Set($@) {
|
|||||||
my $created = 0;
|
my $created = 0;
|
||||||
|
|
||||||
until ($created) {
|
until ($created) {
|
||||||
if ( defined( $defs{$wakeuptimerName} ) ) {
|
if ( RESIDENTStk_IsDevice($wakeuptimerName) ) {
|
||||||
$i++;
|
$i++;
|
||||||
$wakeuptimerName = $name . "_wakeuptimer" . $i;
|
$wakeuptimerName = $name . "_wakeuptimer" . $i;
|
||||||
}
|
}
|
||||||
@ -1416,9 +1414,8 @@ sub RESIDENTS_UpdateReadings (@) {
|
|||||||
for my $wakeupDevice ( split /,/, $wakeupDeviceList ) {
|
for my $wakeupDevice ( split /,/, $wakeupDeviceList ) {
|
||||||
next if !$wakeupDevice;
|
next if !$wakeupDevice;
|
||||||
|
|
||||||
if ( defined( $defs{$wakeupDevice} )
|
if ( RESIDENTStk_GetType($wakeupDevice) eq "dummy" ) {
|
||||||
&& $defs{$wakeupDevice}{TYPE} eq "dummy" )
|
|
||||||
{
|
|
||||||
# forced-stop only if resident is not present anymore
|
# forced-stop only if resident is not present anymore
|
||||||
if ( $newpresence eq "present" ) {
|
if ( $newpresence eq "present" ) {
|
||||||
fhem "set $wakeupDevice:FILTER=running!=0 end";
|
fhem "set $wakeupDevice:FILTER=running!=0 end";
|
||||||
|
@ -73,7 +73,7 @@ sub GUEST_Define($$) {
|
|||||||
if ( defined( $hash->{RESIDENTGROUPS} ) ) {
|
if ( defined( $hash->{RESIDENTGROUPS} ) ) {
|
||||||
foreach ( split( /,/, $hash->{RESIDENTGROUPS} ) ) {
|
foreach ( split( /,/, $hash->{RESIDENTGROUPS} ) ) {
|
||||||
RESIDENTStk_findResidentSlaves( $defs{$_} )
|
RESIDENTStk_findResidentSlaves( $defs{$_} )
|
||||||
if ( defined( $defs{$_} ) );
|
if ( RESIDENTStk_IsDevice( $_, "RESIDENTS" ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -177,9 +177,9 @@ sub GUEST_Attr(@) {
|
|||||||
|
|
||||||
if ( $lang eq "DE" ) {
|
if ( $lang eq "DE" ) {
|
||||||
$attr{$name}{devStateIcon} =
|
$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';
|
'.*anwesend:user_available:absent .*abwesend:user_away:home .*keiner:control_building_empty:home .*bettfertig:scene_toilet:asleep .*schlaeft:scene_sleeping:awoken .*aufgestanden:scene_sleeping_alternat:home .*:user_unknown:home';
|
||||||
$attr{$name}{eventMap} =
|
$attr{$name}{eventMap} =
|
||||||
"home:anwesend absent:abwesend none:keiner gotosleep:bettfertig asleep:schläft awoken:aufgestanden";
|
"home:anwesend absent:abwesend none:keiner gotosleep:bettfertig asleep:schlaeft awoken:aufgestanden";
|
||||||
$attr{$name}{widgetOverride} =
|
$attr{$name}{widgetOverride} =
|
||||||
"state:anwesend,bettfertig,abwesend,keiner";
|
"state:anwesend,bettfertig,abwesend,keiner";
|
||||||
}
|
}
|
||||||
@ -213,7 +213,7 @@ sub GUEST_Undefine($$) {
|
|||||||
delete $hash->{RESIDENTGROUPS};
|
delete $hash->{RESIDENTGROUPS};
|
||||||
foreach ( split( /,/, $old ) ) {
|
foreach ( split( /,/, $old ) ) {
|
||||||
RESIDENTStk_findResidentSlaves( $defs{$_} )
|
RESIDENTStk_findResidentSlaves( $defs{$_} )
|
||||||
if ( defined( $defs{$_} ) );
|
if ( RESIDENTStk_IsDevice( $_, "RESIDENTS" ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -247,8 +247,7 @@ sub GUEST_Notify($$) {
|
|||||||
|
|
||||||
# make sure computeAfterInit is set at at-device
|
# make sure computeAfterInit is set at at-device
|
||||||
# and re-calculate on our own this time
|
# and re-calculate on our own this time
|
||||||
if ( defined( $defs{$wakeupAtdevice} )
|
if ( RESIDENTStk_IsDevice( $wakeupAtdevice, "at" )
|
||||||
&& $defs{$wakeupAtdevice}{TYPE} eq "at"
|
|
||||||
&& AttrVal( $wakeupAtdevice, "computeAfterInit", 0 ) ne
|
&& AttrVal( $wakeupAtdevice, "computeAfterInit", 0 ) ne
|
||||||
"1" )
|
"1" )
|
||||||
{
|
{
|
||||||
@ -579,9 +578,8 @@ sub GUEST_Set($@) {
|
|||||||
for my $wakeupDevice ( split /,/, $wakeupDeviceList ) {
|
for my $wakeupDevice ( split /,/, $wakeupDeviceList ) {
|
||||||
next if !$wakeupDevice;
|
next if !$wakeupDevice;
|
||||||
|
|
||||||
if ( defined( $defs{$wakeupDevice} )
|
if ( RESIDENTStk_IsDevice( $wakeupDevice, "dummy" ) ) {
|
||||||
&& $defs{$wakeupDevice}{TYPE} eq "dummy" )
|
|
||||||
{
|
|
||||||
# forced-stop only if resident is not present anymore
|
# forced-stop only if resident is not present anymore
|
||||||
if ( $newpresence eq "present" ) {
|
if ( $newpresence eq "present" ) {
|
||||||
Log3 $name, 4,
|
Log3 $name, 4,
|
||||||
@ -696,15 +694,10 @@ sub GUEST_Set($@) {
|
|||||||
split( ' ', $attr{$name}{"rg_passPresenceTo"} );
|
split( ' ', $attr{$name}{"rg_passPresenceTo"} );
|
||||||
|
|
||||||
foreach my $object (@linkedObjects) {
|
foreach my $object (@linkedObjects) {
|
||||||
if (
|
if ( RESIDENTStk_IsDevice( $object, "ROOMMATE|GUEST" )
|
||||||
defined( $defs{$object} )
|
|
||||||
&& $defs{$object} ne $name
|
&& $defs{$object} ne $name
|
||||||
&& defined( $defs{$object}{TYPE} )
|
|
||||||
&& ( $defs{$object}{TYPE} eq "ROOMMATE"
|
|
||||||
|| $defs{$object}{TYPE} eq "GUEST" )
|
|
||||||
&& ReadingsVal( $object, "state", "" ) ne "gone"
|
&& ReadingsVal( $object, "state", "" ) ne "gone"
|
||||||
&& ReadingsVal( $object, "state", "" ) ne "none"
|
&& ReadingsVal( $object, "state", "" ) ne "none" )
|
||||||
)
|
|
||||||
{
|
{
|
||||||
fhem("set $object $newstate");
|
fhem("set $object $newstate");
|
||||||
}
|
}
|
||||||
@ -874,7 +867,7 @@ sub GUEST_Set($@) {
|
|||||||
my $created = 0;
|
my $created = 0;
|
||||||
|
|
||||||
until ($created) {
|
until ($created) {
|
||||||
if ( defined( $defs{$wakeuptimerName} ) ) {
|
if ( RESIDENTStk_IsDevice($wakeuptimerName) ) {
|
||||||
$i++;
|
$i++;
|
||||||
$wakeuptimerName = $name . "_wakeuptimer" . $i;
|
$wakeuptimerName = $name . "_wakeuptimer" . $i;
|
||||||
}
|
}
|
||||||
@ -927,7 +920,7 @@ sub GUEST_Set($@) {
|
|||||||
elsif ( lc( $a[2] ) eq "locationmap" ) {
|
elsif ( lc( $a[2] ) eq "locationmap" ) {
|
||||||
my $locationmapName = $name . "_map";
|
my $locationmapName = $name . "_map";
|
||||||
|
|
||||||
if ( defined( $defs{$locationmapName} ) ) {
|
if ( RESIDENTStk_IsDevice($locationmapName) ) {
|
||||||
return
|
return
|
||||||
"Device $locationmapName existing already, delete it first to have it re-created.";
|
"Device $locationmapName existing already, delete it first to have it re-created.";
|
||||||
}
|
}
|
||||||
|
@ -74,7 +74,7 @@ sub ROOMMATE_Define($$) {
|
|||||||
if ( defined( $hash->{RESIDENTGROUPS} ) ) {
|
if ( defined( $hash->{RESIDENTGROUPS} ) ) {
|
||||||
foreach ( split( /,/, $hash->{RESIDENTGROUPS} ) ) {
|
foreach ( split( /,/, $hash->{RESIDENTGROUPS} ) ) {
|
||||||
RESIDENTStk_findResidentSlaves( $defs{$_} )
|
RESIDENTStk_findResidentSlaves( $defs{$_} )
|
||||||
if ( defined( $defs{$_} ) );
|
if ( RESIDENTStk_IsDevice( $_, "RESIDENTS" ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -180,9 +180,9 @@ sub ROOMMATE_Attr(@) {
|
|||||||
|
|
||||||
if ( $lang eq "DE" ) {
|
if ( $lang eq "DE" ) {
|
||||||
$attr{$name}{devStateIcon} =
|
$attr{$name}{devStateIcon} =
|
||||||
'.*anwesend:user_available:absent .*abwesend:user_away:home .*verreist:user_ext_away:home .*bettfertig:scene_toilet:asleep .*schläft:scene_sleeping:awoken .*aufgestanden:scene_sleeping_alternat:home .*:user_unknown:home';
|
'.*anwesend:user_available:absent .*abwesend:user_away:home .*verreist:user_ext_away:home .*bettfertig:scene_toilet:asleep .*schlaeft:scene_sleeping:awoken .*aufgestanden:scene_sleeping_alternat:home .*:user_unknown:home';
|
||||||
$attr{$name}{eventMap} =
|
$attr{$name}{eventMap} =
|
||||||
"home:anwesend absent:abwesend gone:verreist gotosleep:bettfertig asleep:schläft awoken:aufgestanden";
|
"home:anwesend absent:abwesend gone:verreist gotosleep:bettfertig asleep:schlaeft awoken:aufgestanden";
|
||||||
$attr{$name}{widgetOverride} =
|
$attr{$name}{widgetOverride} =
|
||||||
"state:anwesend,bettfertig,abwesend,verreist";
|
"state:anwesend,bettfertig,abwesend,verreist";
|
||||||
}
|
}
|
||||||
@ -216,7 +216,7 @@ sub ROOMMATE_Undefine($$) {
|
|||||||
delete $hash->{RESIDENTGROUPS};
|
delete $hash->{RESIDENTGROUPS};
|
||||||
foreach ( split( /,/, $old ) ) {
|
foreach ( split( /,/, $old ) ) {
|
||||||
RESIDENTStk_findResidentSlaves( $defs{$_} )
|
RESIDENTStk_findResidentSlaves( $defs{$_} )
|
||||||
if ( defined( $defs{$_} ) );
|
if ( RESIDENTStk_IsDevice( $_, "RESIDENTS" ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -250,8 +250,7 @@ sub ROOMMATE_Notify($$) {
|
|||||||
|
|
||||||
# make sure computeAfterInit is set at at-device
|
# make sure computeAfterInit is set at at-device
|
||||||
# and re-calculate on our own this time
|
# and re-calculate on our own this time
|
||||||
if ( defined( $defs{$wakeupAtdevice} )
|
if ( RESIDENTStk_IsDevice( $wakeupAtdevice, "at" )
|
||||||
&& $defs{$wakeupAtdevice}{TYPE} eq "at"
|
|
||||||
&& AttrVal( $wakeupAtdevice, "computeAfterInit", 0 ) ne
|
&& AttrVal( $wakeupAtdevice, "computeAfterInit", 0 ) ne
|
||||||
"1" )
|
"1" )
|
||||||
{
|
{
|
||||||
@ -581,9 +580,8 @@ sub ROOMMATE_Set($@) {
|
|||||||
for my $wakeupDevice ( split /,/, $wakeupDeviceList ) {
|
for my $wakeupDevice ( split /,/, $wakeupDeviceList ) {
|
||||||
next if !$wakeupDevice;
|
next if !$wakeupDevice;
|
||||||
|
|
||||||
if ( defined( $defs{$wakeupDevice} )
|
if ( RESIDENTStk_IsDevice( $wakeupDevice, "dummy" ) ) {
|
||||||
&& $defs{$wakeupDevice}{TYPE} eq "dummy" )
|
|
||||||
{
|
|
||||||
# forced-stop only if resident is not present anymore
|
# forced-stop only if resident is not present anymore
|
||||||
if ( $newpresence eq "present" ) {
|
if ( $newpresence eq "present" ) {
|
||||||
Log3 $name, 4,
|
Log3 $name, 4,
|
||||||
@ -698,15 +696,10 @@ sub ROOMMATE_Set($@) {
|
|||||||
split( ' ', $attr{$name}{"rr_passPresenceTo"} );
|
split( ' ', $attr{$name}{"rr_passPresenceTo"} );
|
||||||
|
|
||||||
foreach my $object (@linkedObjects) {
|
foreach my $object (@linkedObjects) {
|
||||||
if (
|
if ( RESIDENTStk_IsDevice( $object, "ROOMMATE|GUEST" )
|
||||||
defined( $defs{$object} )
|
|
||||||
&& $defs{$object} ne $name
|
&& $defs{$object} ne $name
|
||||||
&& defined( $defs{$object}{TYPE} )
|
|
||||||
&& ( $defs{$object}{TYPE} eq "ROOMMATE"
|
|
||||||
|| $defs{$object}{TYPE} eq "GUEST" )
|
|
||||||
&& ReadingsVal( $object, "state", "" ) ne "gone"
|
&& ReadingsVal( $object, "state", "" ) ne "gone"
|
||||||
&& ReadingsVal( $object, "state", "" ) ne "none"
|
&& ReadingsVal( $object, "state", "" ) ne "none" )
|
||||||
)
|
|
||||||
{
|
{
|
||||||
fhem("set $object $newstate");
|
fhem("set $object $newstate");
|
||||||
}
|
}
|
||||||
@ -856,7 +849,7 @@ sub ROOMMATE_Set($@) {
|
|||||||
my $created = 0;
|
my $created = 0;
|
||||||
|
|
||||||
until ($created) {
|
until ($created) {
|
||||||
if ( defined( $defs{$wakeuptimerName} ) ) {
|
if ( RESIDENTStk_IsDevice($wakeuptimerName) ) {
|
||||||
$i++;
|
$i++;
|
||||||
$wakeuptimerName = $name . "_wakeuptimer" . $i;
|
$wakeuptimerName = $name . "_wakeuptimer" . $i;
|
||||||
}
|
}
|
||||||
@ -909,7 +902,7 @@ sub ROOMMATE_Set($@) {
|
|||||||
elsif ( lc( $a[2] ) eq "locationmap" ) {
|
elsif ( lc( $a[2] ) eq "locationmap" ) {
|
||||||
my $locationmapName = $name . "_map";
|
my $locationmapName = $name . "_map";
|
||||||
|
|
||||||
if ( defined( $defs{$locationmapName} ) ) {
|
if ( RESIDENTStk_IsDevice($locationmapName) ) {
|
||||||
return
|
return
|
||||||
"Device $locationmapName existing already, delete it first to have it re-created.";
|
"Device $locationmapName existing already, delete it first to have it re-created.";
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user