From 8e239b03de8d4e0c438fa7596703c39b20020460 Mon Sep 17 00:00:00 2001 From: justme1968 Date: Tue, 21 Jan 2014 17:24:32 +0000 Subject: [PATCH] fixed longpoll device status update in detail view git-svn-id: https://svn.fhem.de/fhem/trunk@4708 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/31_LightScene.pm | 66 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 2 deletions(-) diff --git a/fhem/FHEM/31_LightScene.pm b/fhem/FHEM/31_LightScene.pm index f07876192..89f5bb054 100644 --- a/fhem/FHEM/31_LightScene.pm +++ b/fhem/FHEM/31_LightScene.pm @@ -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 .= "$txt"; + $ret .= "$txt"; } } @@ -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" ); } }