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:
jpawlowski 2017-04-01 16:17:46 +00:00
parent 48767b7c2f
commit 38dafd4f93
3 changed files with 36 additions and 53 deletions

View File

@ -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";

View File

@ -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.";
} }

View File

@ -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.";
} }