37_harmony.pm: avoid crash on missing config data

git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@19170 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
justme-1968 2019-04-13 12:21:29 +00:00
parent bb3e6f56c5
commit c2405af5e6

View File

@ -344,7 +344,7 @@ harmony_idOfActivity($$;$)
$quoted_label =~ s/\./ /g;
$quoted_label = quotemeta($quoted_label);
foreach my $activity (@{$hash->{config}->{activity}}) {
foreach my $activity (@{$hash->{config}{activity}}) {
return $activity->{id} if( $activity->{label} =~ m/^$label$/ );
return $activity->{id} if( $activity->{label} =~ m/^$quoted_label$/ );
}
@ -356,7 +356,7 @@ harmony_labelOfActivity($$;$)
{
my ($hash, $id, $default) = @_;
foreach my $activity (@{$hash->{config}->{activity}}) {
foreach my $activity (@{$hash->{config}{activity}}) {
return $activity->{label} if( $activity->{id} == $id );
}
@ -367,7 +367,7 @@ harmony_activityOfId($$)
{
my ($hash, $id) = @_;
foreach my $activity (@{$hash->{config}->{activity}}) {
foreach my $activity (@{$hash->{config}{activity}}) {
return $activity if( $activity->{id} == $id );
}
@ -750,8 +750,8 @@ harmony_Set($$@)
return undef if( !defined($hash->{config}) );
my $activities;
if( $hash->{config}->{activity} ) {
foreach my $activity (sort { ($a->{activityOrder}||0) <=> ($b->{activityOrder}||0) } @{$hash->{config}->{activity}}) {
if( $hash->{config}{activity} ) {
foreach my $activity (sort { ($a->{activityOrder}||0) <=> ($b->{activityOrder}||0) } @{$hash->{config}{activity}}) {
next if( $activity->{id} == -1 );
$activities .= "," if( $activities );
$activities .= $activity->{label};
@ -1241,6 +1241,8 @@ harmony_Read($)
}
Log3 $name, 4, Dumper \%params;
#DoTrigger( $name, "DISCOVERED $hash->{TYPE}:$params{remoteId} type=$hash->{TYPE} alias='$params{friendlyName}' name='".lc($params{friendlyName})."' detail=$params{ip} define='define <name> <TYPE> $params{ip}'" );
$hash->{helper}{discovered}{$params{remoteId}} = \%params;
foreach my $chash ( values %{$modules{$hash->{TYPE}}{defptr}} ) {
@ -2165,10 +2167,10 @@ harmony_Get($$@)
my $ret;
if( $cmd eq "activities" ) {
return "no activities found" if( !defined($hash->{config}) || !defined($hash->{config}->{activity}) );
return "no activities found" if( !defined($hash->{config}) || !defined($hash->{config}{activity}) );
my $ret = "";
foreach my $activity (sort { ($a->{activityOrder}||0) <=> ($b->{activityOrder}||0) } @{$hash->{config}->{activity}}) {
foreach my $activity (sort { ($a->{activityOrder}||0) <=> ($b->{activityOrder}||0) } @{$hash->{config}{activity}}) {
next if( $activity->{id} == -1 );
$ret .= "\n" if( $ret );
$ret .= sprintf( "%s\t%-24s", $activity->{id}, $activity->{label});
@ -2207,7 +2209,7 @@ harmony_Get($$@)
return $ret;
} elsif( $cmd eq "commands" ) {
return "no commands found" if( !defined($hash->{config}) || !defined($hash->{config}->{activity}) );
return "no commands found" if( !defined($hash->{config}) || !defined($hash->{config}{activity}) );
my $id = $param;
$id = harmony_idOfActivity($hash, $id) if( $id && $id !~ m/^([\d-])+$/ );
@ -2215,7 +2217,7 @@ harmony_Get($$@)
my $ret = "";
foreach my $activity (sort { ($a->{activityOrder}||0) <=> ($b->{activityOrder}||0) } @{$hash->{config}->{activity}}) {
foreach my $activity (sort { ($a->{activityOrder}||0) <=> ($b->{activityOrder}||0) } @{$hash->{config}{activity}}) {
next if( $activity->{id} == -1 );
next if( $id && $activity->{id} != $id );
$ret .= "$activity->{label}\n";
@ -2241,13 +2243,15 @@ harmony_Get($$@)
my $ret = "";
foreach my $device (sort { $a->{id} <=> $b->{id} } @{$hash->{config}->{device}}) {
next if( $id && $device->{id} != $id );
$ret .= "$device->{label}\t$device->{manufacturer}\t$device->{model}\n";
foreach my $group (@{$device->{controlGroup}}) {
$ret .= "\t$group->{name}\n";
foreach my $function (@{$group->{function}}) {
$ret .= sprintf( "\t\t%-20s\t%s\n", $function->{name}, $function->{label} );
if( $hash->{config}{device} ) {
foreach my $device (sort { $a->{id} <=> $b->{id} } @{$hash->{config}->{device}}) {
next if( $id && $device->{id} != $id );
$ret .= "$device->{label}\t$device->{manufacturer}\t$device->{model}\n";
foreach my $group (@{$device->{controlGroup}}) {
$ret .= "\t$group->{name}\n";
foreach my $function (@{$group->{function}}) {
$ret .= sprintf( "\t\t%-20s\t%s\n", $function->{name}, $function->{label} );
}
}
}
}
@ -2263,8 +2267,8 @@ harmony_Get($$@)
$param = harmony_idOfDevice($hash, $param) if( $param && $param !~ m/^([\d-])+$/ && $cmd eq "deviceDetail" );
my $var;
$var = $hash->{config}->{activity} if( $cmd eq "activityDetail" );
$var = $hash->{config}->{device} if( $cmd eq "deviceDetail" );
$var = $hash->{config}{activity} if( $cmd eq "activityDetail" );
$var = $hash->{config}{device} if( $cmd eq "deviceDetail" );
if( $param ) {
foreach my $v (@{$var}) {
if( $v->{id} eq $param ) {
@ -2297,11 +2301,13 @@ harmony_Get($$@)
return undef if( !defined($hash->{config}) );
my $activities;
foreach my $activity (sort { ($a->{activityOrder}||0) <=> ($b->{activityOrder}||0) } @{$hash->{config}->{activity}}) {
next if( $activity->{id} == -1 );
$activities .= "," if( $activities );
$activities .= $activity->{label};
}
if( $hash->{config}{activity} ) {
foreach my $activity (sort { ($a->{activityOrder}||0) <=> ($b->{activityOrder}||0) } @{$hash->{config}{activity}}) {
next if( $activity->{id} == -1 );
$activities .= "," if( $activities );
$activities .= $activity->{label};
}
}
if( $activities ) {
$activities =~ s/ /./g;
@ -2309,9 +2315,11 @@ harmony_Get($$@)
}
my $devices;
foreach my $device (sort { $a->{id} <=> $b->{id} } @{$hash->{config}->{device}}) {
$devices .= "," if( $devices );
$devices .= $device->{label};
if( $hash->{config}{device} ) {
foreach my $device (sort { $a->{id} <=> $b->{id} } @{$hash->{config}->{device}}) {
$devices .= "," if( $devices );
$devices .= $device->{label};
}
}
if( $devices ) {
$devices =~ s/ /./g;