1
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-05-07 22:29:19 +00:00

fixed longpoll device status update in detail view

git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@4708 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
justme-1968 2014-01-21 17:24:32 +00:00
parent c8fbbfbb6b
commit 45abc16393

View File

@ -113,7 +113,7 @@ LightScene_2html($)
foreach my $d (sort keys %{ $hash->{CONTENT} }) {
my %extPage = ();
my ($allSets, $cmdlist, $txt) = FW_devState($d, $room, \%extPage);
$ret .= "<td informId=\"$d\">$txt</td>";
$ret .= "<td informId=\"$name-$d.state\">$txt</td>";
}
}
@ -175,6 +175,13 @@ LightScene_detailFn()
{
my ($FW_wname, $d, $room, $pageHash) = @_; # pageHash is set for summaryFn.
my $hash = $defs{$d};
if( AttrVal($FW_wname, "longpoll", 1) ) {
Log3 $hash->{NAME}, 5, "opened: $FW_cname";
$hash->{helper}->{myDisplay}->{$FW_cname} = 1;
}
return LightScene_2html($d);
}
@ -185,13 +192,19 @@ LightScene_Notify($$)
my $name = $hash->{NAME};
my $type = $hash->{TYPE};
return if($dev->{NAME} ne "global");
if( !defined($hash->{helper}{myDisplay})
|| !%{$hash->{helper}{myDisplay}} ) {
Log3 $name, 4, "$name: not on any display, ignoring notify";
return if($dev->{NAME} ne "global");
}
if( grep(m/^INITIALIZED$/, @{$dev->{CHANGED}}) ) {
} elsif( grep(m/^SAVE$/, @{$dev->{CHANGED}}) ) {
LightScene_Save();
}
return if($dev->{TYPE} eq $hash->{TYPE});
my $max = int(@{$dev->{CHANGED}});
for (my $i = 0; $i < $max; $i++) {
my $s = $dev->{CHANGED}[$i];
@ -226,6 +239,55 @@ LightScene_Notify($$)
delete( $hash->{CONTENT}{$name} );
}
} else {
next if (!$hash->{CONTENT}->{$dev->{NAME}});
if( !defined($hash->{helper}{myDisplay})
|| !%{$hash->{helper}{myDisplay}} ) {
Log3 $name, 4, "$name: not on any display, ignoring notify";
return undef;
} else {
my $do_update = 0;
foreach my $display ( keys %{$hash->{helper}{myDisplay}} ) {
if( defined($defs{$display}) ) {
my $filter = $defs{$display}->{inform};
$filter = $filter->{filter} if( ref($filter) eq 'HASH' );
return undef if( !defined($filter) );
if($filter eq "$name") {
$do_update = 1;
} else {
Log3 $name, 4, "$name: $display is not my room, ignoring notify";
delete( $hash->{helper}{myDisplay}{$display} );
}
} else {
Log3 $name, 4, "$name: $display is closed, ignoring notify";
delete( $hash->{helper}{myDisplay}{$display} );
}
}
if( !$do_update ) {
Log3 $name, 4, "$name: not on any display, ignoring notify";
return undef;
} else {
Log3 $name, 5, "$name: do update";
}
}
my @parts = split(/: /,$s);
my $reading = shift @parts;
my $value = join(": ", @parts);
next if( $value ne "" );
$reading = "state";
$value = $s;
my $room = AttrVal($name, "room", "");
my %extPage = ();
(undef, undef, $value) = FW_devState($dev->{NAME}, $room, \%extPage);
CommandTrigger( "", "$name $dev->{NAME}.$reading: $value" );
}
}