From dc15053fba48d1ce4101a673664181c9e8851ad4 Mon Sep 17 00:00:00 2001 From: Marko Oldenburg Date: Thu, 1 Oct 2015 21:01:21 +0200 Subject: [PATCH] =?UTF-8?q?AMAD=20Bridge=20nun=20vollst=C3=A4ndig=20integr?= =?UTF-8?q?iert,=202=20Funkrionen=20innerhalb=20des=20Information=20und=20?= =?UTF-8?q?setCommands=20Flows=20wurden=20bereits=20auf=20die=20Bridge=20K?= =?UTF-8?q?ommunikation=20umgestellt.=20Bsp,=20setzen=20der=20Music=20Meta?= =?UTF-8?q?changed=20Readings=20Album,Artist=20und=20so.=20Ausserdem=20wir?= =?UTF-8?q?d=20das=20anfordern=20eines=20statusRequest=20nach=20erfolreich?= =?UTF-8?q?en=20setCommand=20nun=20=C3=BCber=20das=20Bridge=20Device=20dur?= =?UTF-8?q?chgef=C3=BChrt.=20ES=20IST=20ZWINGEND=20NOTWENDIG=20DAS=20DAS?= =?UTF-8?q?=20ATTRIBUT=20fhemServerIP=20GESETZT=20WIRD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 74_AMAD.pm | 82 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 49 insertions(+), 33 deletions(-) diff --git a/74_AMAD.pm b/74_AMAD.pm index f49dfc3..7be9db6 100644 --- a/74_AMAD.pm +++ b/74_AMAD.pm @@ -35,7 +35,7 @@ use Time::HiRes qw(gettimeofday); use HttpUtils; use TcpServerUtils; -my $version = "0.7.1"; +my $version = "0.7.2"; @@ -513,9 +513,6 @@ sub AMAD_SelectSetCmd($$@) { my $url = "http://" . $host . ":" . $port . "/fhem-amad/setCommands/setVolume?volume=$vol"; readingsSingleUpdate( $hash, $cmd, $vol, 1 ); - - Log3 $name, 4, "AMAD ($name) - Starte Update GetUpdateLocal"; - AMAD_GetUpdateLocal( $hash ); return AMAD_HTTP_POST( $hash, $url ); } @@ -540,9 +537,6 @@ sub AMAD_SelectSetCmd($$@) { my $bri = join( " ", @data ); my $url = "http://" . $host . ":" . $port . "/fhem-amad/setCommands/setBrightness?brightness=$bri"; - - Log3 $name, 4, "AMAD ($name) - Starte Update GetUpdateLocal"; - AMAD_GetUpdateLocal( $hash ); return AMAD_HTTP_POST( $hash,$url ); } @@ -552,9 +546,6 @@ sub AMAD_SelectSetCmd($$@) { my $url = "http://" . $host . ":" . $port . "/fhem-amad/setCommands/setScreenOnOff?screen=$mod"; - Log3 $name, 4, "AMAD ($name) - Starte Update GetUpdateLocal"; - AMAD_GetUpdateLocal( $hash ); - return AMAD_HTTP_POST( $hash,$url ); } @@ -562,9 +553,6 @@ sub AMAD_SelectSetCmd($$@) { my $mod = join( " ", @data ); my $url = "http://" . $host . ":" . $port . "/fhem-amad/setCommands/setScreenOrientation?orientation=$mod"; - - Log3 $name, 4, "AMAD ($name) - Starte Update GetUpdateLocal"; - AMAD_GetUpdateLocal( $hash ); return AMAD_HTTP_POST( $hash,$url ); } @@ -592,9 +580,6 @@ sub AMAD_SelectSetCmd($$@) { my @alarm = split( ":", $alarmTime ); my $url = "http://" . $host . ":" . $port . "/fhem-amad/setCommands/setAlarm?hour=".$alarm[0]."&minute=".$alarm[1]; - - Log3 $name, 4, "AMAD ($name) - Starte Update GetUpdateLocal"; - AMAD_GetUpdateLocal( $hash ); return AMAD_HTTP_POST( $hash, $url ); } @@ -789,13 +774,12 @@ sub AMAD_CommBridge_Read($) { my ( $hash ) = @_; my $name = $hash->{NAME}; - #my $chash = $modules{AMAD}{defptr}{}; my $brihash = $modules{AMAD}{defptr}{BRIDGE}; - # Received chars stored in $c + if( $hash->{SERVERSOCKET} ) { # Accept and create a child TcpServer_Accept( $hash, "AMAD" ); - # my $chash = TcpServer_Accept( $hash, "AMAD" ); # Wird zum schließen der Verbindung benötigt, siehe unten + return; } @@ -809,7 +793,7 @@ sub AMAD_CommBridge_Read($) { return; } - my $response = "header lines: \r\nAMADCommBridge recive Data complete\r\nPlease see next\r\n\r\nrunnin\r\n"; + my $response = "header lines: \r\n AMADCommBridge receive Data complete\r\n FHEM will process\r\n now\r\n"; my $c = $hash->{CD}; print $c "HTTP/1.1 200 OK\r\n", @@ -822,30 +806,62 @@ sub AMAD_CommBridge_Read($) { ## close($hash->{CD}) - - + ### ## Consume Content ### my @data = split( '\R\R', $buf ); + if ( $data[0] =~ /FHEMCMD: setreading\b/ ) { + my $tv = $data[1]; + + @data = split( '\R', $data[0] ); + $data[2] =~ s/FHEMDEVICE: //; + my $chash = $defs{$data[2]}; + ### Begin Response Processing + + my @valuestring = split( '@@@@', $tv ); + my %buffer; + + foreach( @valuestring ) { + my @values = split( '@@' , $_ ); + $buffer{$values[0]} = $values[1]; + } + + my $t; + my $v; + while( ( $t, $v ) = each %buffer ) { + $v =~ s/null//g; + + readingsBeginUpdate( $chash ); + readingsBulkUpdate( $chash, $t, $v ) if( defined( $v ) ); + } + + readingsBulkUpdate( $chash, "lastStatusRequestState", "statusRequest_done" ); + readingsEndUpdate( $chash, 1 ); + ### End Response Processing - Log3 $name, 3, "setreading ist gleich $data[1]"; return; - #return AMAD_RetrieveAutomagicInfoFinished( "test", "err", $data[1] ); } elsif ( $data[0] =~ /FHEMCMD: set\b/ ) { - readingsBeginUpdate( $brihash ); - readingsBulkUpdate ( $brihash, "lastCmd", $data[1] ); - - @data = split( '\n', $data[0] ); - $data[2] =~ s/FHEMDEVICE: //; - - readingsBulkUpdate ( $brihash, "lastCmdDevice", $data[2] ); - readingsEndUpdate( $brihash, 1 ); - } + my $fhemCmd = $data[1]; + + fhem ("$fhemCmd") if( AttrVal( "AMADCommBridge", "Expert", "0" ) eq "1" ); + readingsSingleUpdate( $brihash, "receiveFhemCommand", $fhemCmd, 1 ); + + return; + } + + elsif ( $data[0] =~ /FHEMCMD: statusrequest\b/ ) { + + @data = split( '\R', $data[0] ); + $data[2] =~ s/FHEMDEVICE: //; + my $chash = $defs{$data[2]}; + + return AMAD_GetUpdateLocal( $chash ); + } }