From 9d35b9904444794a1d785d9dd268f96505bc53f9 Mon Sep 17 00:00:00 2001 From: Marko Oldenburg Date: Wed, 30 Dec 2015 14:59:32 +0100 Subject: [PATCH] =?UTF-8?q?erste=20Codeteile=20f=C3=BCt=20ssh=20und=20chec?= =?UTF-8?q?k=20lg.srv=20prozess?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 74_HOMBOT.pm | 105 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 77 insertions(+), 28 deletions(-) diff --git a/74_HOMBOT.pm b/74_HOMBOT.pm index 16aa1d3..2f0595b 100644 --- a/74_HOMBOT.pm +++ b/74_HOMBOT.pm @@ -34,7 +34,7 @@ use Time::HiRes qw(gettimeofday); use HttpUtils; -my $version = "0.1.45"; +my $version = "0.1.46"; @@ -77,8 +77,8 @@ sub HOMBOT_Define($$) { $hash->{PORT} = $port; $hash->{INTERVAL} = $interval; $hash->{VERSION} = $version; - $hash->{helper}{infoErrorCounter} = 0; - $hash->{helper}{setCmdErrorCounter} = 0; + $hash->{helper}{requestErrorCounter} = 0; + $hash->{helper}{setErrorCounter} = 0; Log3 $name, 3, "HOMBOT ($name) - defined with host $hash->{HOST} on port $hash->{PORT} and interval $hash->{INTERVAL} (sec)"; @@ -296,11 +296,15 @@ sub HOMBOT_RetrieveHomebotInfoFinished($$$) { ### Begin Error Handling - if( $hash->{helper}{infoErrorCounter} > 2 ) { + if( $hash->{helper}{requestErrorCounter} > 2 ) { readingsBeginUpdate( $hash ); readingsBulkUpdate( $hash, "lastStatusRequestState", "statusRequest_error" ); - if( $hash->{helper}{infoErrorCounter} > 4 && $hash->{helper}{setCmdErrorCounter} > 3 ) { + + my $aliveState = HOMBOT_checkAlive($hash); + $hash->{helper}{requestErrorCounter} = ($hash->{helper}{requestErrorCounter} - 1) if( $aliveState == 0 ); + + if( $hash->{helper}{requestErrorCounter} > 4 && $hash->{helper}{setErrorCounter} > 3 && $aliveState == 1 ) { readingsBulkUpdate( $hash, "lastStatusRequestError", "unknown error, please contact the developer" ); Log3 $name, 4, "HOMBOT ($name) - UNKNOWN ERROR, PLEASE CONTACT THE DEVELOPER, DEVICE DISABLED"; @@ -308,13 +312,13 @@ sub HOMBOT_RetrieveHomebotInfoFinished($$$) { $attr{$name}{disable} = 1; readingsBulkUpdate ( $hash, "state", "Unknown Error, device disabled"); - $hash->{helper}{infoErrorCounter} = 0; - $hash->{helper}{setCmdErrorCounter} = 0; + $hash->{helper}{requestErrorCounter} = 0; + $hash->{helper}{setErrorCounter} = 0; return; } - if( $hash->{helper}{infoErrorCounter} > 2 && $hash->{helper}{setCmdErrorCounter} == 0 ) { + if( $hash->{helper}{requestErrorCounter} > 2 && $hash->{helper}{setErrorCounter} == 0 && $aliveState == 1 ) { readingsBulkUpdate( $hash, "lastStatusRequestError", "Homebot is offline" ); Log3 $name, 4, "HOMBOT ($name) - Homebot is offline"; @@ -322,20 +326,20 @@ sub HOMBOT_RetrieveHomebotInfoFinished($$$) { readingsBulkUpdate ( $hash, "hombotState", "OFFLINE"); readingsBulkUpdate ( $hash, "state", "Homebot offline"); - $hash->{helper}{infoErrorCounter} = 0; - $hash->{helper}{setCmdErrorCounter} = 0; + $hash->{helper}{requestErrorCounter} = 0; + $hash->{helper}{setErrorCounter} = 0; return; } - elsif( $hash->{helper}{infoErrorCounter} > 2 && $hash->{helper}{setCmdErrorCounter} > 0 ) { + elsif( $hash->{helper}{requestErrorCounter} > 2 && $hash->{helper}{setErrorCounter} > 0 && $aliveState == 1 ) { readingsBulkUpdate( $hash, "lastStatusRequestError", "to many errors, check your network configuration" ); Log3 $name, 4, "HOMBOT ($name) - To many Errors please check your Network Configuration"; readingsBulkUpdate ( $hash, "homebotState", "offline"); readingsBulkUpdate ( $hash, "state", "To many Errors"); - $hash->{helper}{infoErrorCounter} = 0; + $hash->{helper}{requestErrorCounter} = 0; } readingsEndUpdate( $hash, 1 ); } @@ -344,7 +348,7 @@ sub HOMBOT_RetrieveHomebotInfoFinished($$$) { readingsBeginUpdate( $hash ); readingsBulkUpdate ( $hash, "state", "$err") if( ReadingsVal( $name, "state", 1 ) ne "initialized" ); - $hash->{helper}{infoErrorCounter} = ( $hash->{helper}{infoErrorCounter} + 1 ); + $hash->{helper}{requestErrorCounter} = ( $hash->{helper}{requestErrorCounter} + 1 ); readingsBulkUpdate( $hash, "lastStatusRequestState", "statusRequest_error" ); readingsBulkUpdate($hash, "lastStatusRequestError", $err ); @@ -358,7 +362,7 @@ sub HOMBOT_RetrieveHomebotInfoFinished($$$) { if( $data eq "" and exists( $param->{code} ) ) { readingsBeginUpdate( $hash ); readingsBulkUpdate ( $hash, "state", $param->{code} ) if( ReadingsVal( $name, "state", 1 ) ne "initialized" ); - $hash->{helper}{infoErrorCounter} = ( $hash->{helper}{infoErrorCounter} + 1 ); + $hash->{helper}{requestErrorCounter} = ( $hash->{helper}{requestErrorCounter} + 1 ); readingsBulkUpdate( $hash, "lastStatusRequestState", "statusRequest_error" ); @@ -377,7 +381,7 @@ sub HOMBOT_RetrieveHomebotInfoFinished($$$) { if( ( $data =~ /Error/i ) and exists( $param->{code} ) ) { readingsBeginUpdate( $hash ); readingsBulkUpdate( $hash, "state", $param->{code} ) if( ReadingsVal( $name, "state" ,0) ne "initialized" ); - $hash->{helper}{infoErrorCounter} = ( $hash->{helper}{infoErrorCounter} + 1 ); + $hash->{helper}{requestErrorCounter} = ( $hash->{helper}{requestErrorCounter} + 1 ); readingsBulkUpdate( $hash, "lastStatusRequestState", "statusRequest_error" ); @@ -396,7 +400,7 @@ sub HOMBOT_RetrieveHomebotInfoFinished($$$) { ### End Error Handling - $hash->{helper}{infoErrorCounter} = 0; + $hash->{helper}{requestErrorCounter} = 0; ### Begin Parse Processing readingsSingleUpdate( $hash, "state", "active", 1) if( ReadingsVal( $name, "state", 0 ) ne "initialized" or ReadingsVal( $name, "state", 0 ) ne "active" ); @@ -484,7 +488,7 @@ sub HOMBOT_RetrieveHomebotInfoFinished($$$) { readingsBulkUpdate( $hash, "lastStatusRequestState", "statusRequest_done" ); - $hash->{helper}{infoErrorCounter} = 0; + $hash->{helper}{requestErrorCounter} = 0; ### End Response Processing readingsBulkUpdate( $hash, "state", "active" ) if( ReadingsVal( $name, "state", 0 ) eq "initialized" ); @@ -696,35 +700,39 @@ sub HOMBOT_HTTP_POSTerrorHandling($$$) { ### Begin Error Handling - if( $hash->{helper}{setCmdErrorCounter} > 2 ) { + if( $hash->{helper}{setErrorCounter} > 2 ) { readingsBeginUpdate( $hash ); readingsBulkUpdate( $hash, "lastSetCommandState", "statusRequest_error" ); - if( $hash->{helper}{infoErrorCounter} > 9 && $hash->{helper}{setCmdErrorCounter} > 4 ) { + + my $aliveState = HOMBOT_checkAlive($hash); + $hash->{helper}{setErrorCounter} = ($hash->{helper}{setErrorCounter} - 1) if( $aliveState == 0 ); + + if( $hash->{helper}{requestErrorCounter} > 9 && $hash->{helper}{setErrorCounter} > 4 && $aliveState == 1 ) { readingsBulkUpdate($hash, "lastSetCommandError", "unknown error, please contact the developer" ); Log3 $name, 4, "HOMBOT ($name) - UNKNOWN ERROR, PLEASE CONTACT THE DEVELOPER, DEVICE DISABLED"; $attr{$name}{disable} = 1; readingsBulkUpdate( $hash, "state", "Unknown Error" ); - $hash->{helper}{infoErrorCounter} = 0; - $hash->{helper}{setCmdErrorCounter} = 0; + $hash->{helper}{requestErrorCounter} = 0; + $hash->{helper}{setErrorCounter} = 0; return; } - elsif( $hash->{helper}{setCmdErrorCounter} > 4 ){ + elsif( $hash->{helper}{setErrorCounter} > 4 && $aliveState == 1 ){ readingsBulkUpdate( $hash, "lastSetCommandError", "HTTP Server at Homebot offline" ); Log3 $name, 4, "HOMBOT ($name) - Please check HTTP Server at Homebot"; } - elsif( $hash->{helper}{setCmdErrorCounter} > 9 ) { + elsif( $hash->{helper}{setErrorCounter} > 9 && $aliveState == 1 ) { readingsBulkUpdate( $hash, "lastSetCommandError", "to many errors, check your network or device configuration" ); Log3 $name, 4, "HOMBOT ($name) - To many Errors please check your Network or Device Configuration"; readingsBulkUpdate( $hash, "state", "To many Errors" ); - $hash->{helper}{setCmdErrorCounter} = 0; + $hash->{helper}{setErrorCounter} = 0; } readingsEndUpdate( $hash, 1 ); } @@ -733,7 +741,7 @@ sub HOMBOT_HTTP_POSTerrorHandling($$$) { readingsBeginUpdate( $hash ); readingsBulkUpdate( $hash, "state", $err ) if( ReadingsVal( $name, "state", 0 ) ne "initialized" ); - $hash->{helper}{setCmdErrorCounter} = ($hash->{helper}{setCmdErrorCounter} + 1); + $hash->{helper}{setErrorCounter} = ($hash->{helper}{setErrorCounter} + 1); readingsBulkUpdate( $hash, "lastSetCommandState", "cmd_error" ); readingsBulkUpdate( $hash, "lastSetCommandError", "$err" ); @@ -749,7 +757,7 @@ sub HOMBOT_HTTP_POSTerrorHandling($$$) { readingsBeginUpdate( $hash ); readingsBulkUpdate( $hash, "state", $param->{code} ) if( ReadingsVal( $hash, "state", 0 ) ne "initialized" ); - $hash->{helper}{setCmdErrorCounter} = ( $hash->{helper}{setCmdErrorCounter} + 1 ); + $hash->{helper}{setErrorCounter} = ( $hash->{helper}{setErrorCounter} + 1 ); readingsBulkUpdate($hash, "lastSetCommandState", "cmd_error" ); readingsBulkUpdate($hash, "lastSetCommandError", "http Error ".$param->{code} ); @@ -764,7 +772,7 @@ sub HOMBOT_HTTP_POSTerrorHandling($$$) { readingsBeginUpdate( $hash ); readingsBulkUpdate( $hash, "state", $param->{code} ) if( ReadingsVal( $name, "state", 0 ) ne "initialized" ); - $hash->{helper}{setCmdErrorCounter} = ( $hash->{helper}{setCmdErrorCounter} + 1 ); + $hash->{helper}{setErrorCounter} = ( $hash->{helper}{setErrorCounter} + 1 ); readingsBulkUpdate( $hash, "lastSetCommandState", "cmd_error" ); @@ -780,13 +788,54 @@ sub HOMBOT_HTTP_POSTerrorHandling($$$) { ### End Error Handling readingsSingleUpdate( $hash, "lastSetCommandState", "cmd_done", 1 ); - $hash->{helper}{setCmdErrorCounter} = 0; + $hash->{helper}{setErrorCounter} = 0; HOMBOT_Get_stateRequestLocal( $hash ); return undef; } +sub HOMBOT_checkAlive($) { + + my ($hash) = @_; + my $name = $hash->{NAME}; + my $host = $hash->{HOST}; + my $sshstate; + my $lgSrvPID; + my $checkalive; + + $checkalive = qx(/usr/bin/sshpass -p 'most9981' /usr/bin/ssh root\@$host 'uname'); + chomp $checkalive; + + if( $checkalive ne "" ) { + + Log3 $name, 5, "HOMBOT ($name) - ssh command returned with output: $checkalive"; + + $sshstate = ( ( $checkalive =~ /Linux/ and not ( $checkalive =~ /Connection refused/ or $checkalive =~ /No route to host/ or $checkalive =~ /Connection reset by peer/) ) ? "online" : "offline"); + + } else { + + Log3 $name, 5, "HOMBOT ($name) - Could not execute ssh command"; + return 1; + } + + if( $sshstate eq "online" ) { + + Log3 $name, 5, "HOMBOT ($name) - Hombot ist online, will check lg.srv Prozess"; + + $lgSrvPID = ((split (/\s+/,qx(/usr/bin/sshpass -p 'most9981' /usr/bin/ssh root\@$host 'ps | grep -v grep | grep /usr/bin/lg.srv' )))[1]); + Log3 $name, 5, "HOMBOT ($name) - Luigi Webserver is not running, i'll auto start it" unless( $lgSrvPID ); + + qx(/usr/bin/sshpass -p 'most9981' /usr/bin/ssh root\@$host '/usr/bin/lg.srv &' ) unless( $lgSrvPID ); + + return 0; + + } else { + + return 1; + } +} + 1;