From 011d76d457e5f48a0703006a80d73093f77f4087 Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Mon, 20 Jun 2016 19:44:30 +0000 Subject: [PATCH] 00_FBAHAHTTP: trying to resolve AHA server lockup by serializing (F0rum #54697) git-svn-id: https://svn.fhem.de/fhem/trunk@11699 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/00_FBAHAHTTP.pm | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/fhem/FHEM/00_FBAHAHTTP.pm b/fhem/FHEM/00_FBAHAHTTP.pm index e167b5add..93fc81f7f 100644 --- a/fhem/FHEM/00_FBAHAHTTP.pm +++ b/fhem/FHEM/00_FBAHAHTTP.pm @@ -43,6 +43,7 @@ FBAHAHTTP_Define($$) } $defs{$d}{IODev} = $hash } + $hash->{CmdStack} = (); return undef if($hash->{DEF} eq "none"); # DEBUGGING InternalTimer(1, "FBAHAHTTP_Poll", $hash); @@ -156,6 +157,29 @@ FBAHAHTTP_Set($@) return undef; } +sub +FBAHAHTTP_ProcessStack($) +{ + my ($hash) = @_; + my $name = $hash->{NAME}; + my $msg = $hash->{CmdStack}->[0]; + HttpUtils_NonblockingGet({ + url=>"http://$hash->{DEF}/webservices/homeautoswitch.lua?$msg", + loglevel => AttrVal($name, "verbose", 4), + callback => sub { + if($_[1]) { + Log3 $name, 3, "$name: $_[1]"; + delete $hash->{".SID"}; + $hash->{CmdStack} = (); + return; + } + chomp $_[2]; + Log3 $name, 5, "FBAHAHTTP_Write reply for $name: $_[2]"; + pop @{$hash->{CmdStack}}; + FBAHAHTTP_ProcessStack($hash) if(@{$hash->{CmdStack}} > 0); + } + }); +} ##################################### sub @@ -168,19 +192,8 @@ FBAHAHTTP_Write($$$) Log 1, "$name: Not connected, wont execute $msg"; return; } - HttpUtils_NonblockingGet({ - url=>"http://$hash->{DEF}/webservices/homeautoswitch.lua?sid=$sid". - "&ain=$fn&switchcmd=$msg", - loglevel => AttrVal($name, "verbose", 4), - callback => sub { - if($_[1]) { - Log3 $name, 3, "$name: $_[1]"; - delete $hash->{".SID"}; - return; - } - Log 5, "FBAHAHTTP_Write reply for $name: $_[2]"; - } - }); + push(@{$hash->{CmdStack}}, "sid=$sid&ain=$fn&switchcmd=$msg"); + FBAHAHTTP_ProcessStack($hash) if(@{$hash->{CmdStack}} == 1); }