From 04e73fd3c2d8958054c2951364ba5528aa72d7cb Mon Sep 17 00:00:00 2001 From: Marko Oldenburg Date: Thu, 1 Jun 2017 21:25:07 +0200 Subject: [PATCH] =?UTF-8?q?diverse=20Flowanpassungen,=20Bugfixes=20f=C3=BC?= =?UTF-8?q?r=20null=20Values?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 73_AMADCommBridge.pm | 84 +- 74_AMADDevice.pm | 28 +- ....xml => 74_AMADautomagicFlowset_3.9.55.xml | 1492 +++++++++-------- 3 files changed, 793 insertions(+), 811 deletions(-) rename 74_AMADautomagicFlowset_3.9.52.xml => 74_AMADautomagicFlowset_3.9.55.xml (81%) diff --git a/73_AMADCommBridge.pm b/73_AMADCommBridge.pm index 549e4c4..78ebed3 100644 --- a/73_AMADCommBridge.pm +++ b/73_AMADCommBridge.pm @@ -68,8 +68,8 @@ use TcpServerUtils; eval "use JSON;1" or $missingModul .= "JSON "; -my $modulversion = "3.9.52"; -my $flowsetversion = "3.9.52"; +my $modulversion = "3.9.55"; +my $flowsetversion = "3.9.55"; @@ -111,7 +111,6 @@ sub AMADCommBridge_Initialize($) { $hash->{AttrFn} = "AMADCommBridge_Attr"; $hash->{AttrList} = "expertMode:1 ". - "port ". "disable:1 ". $readingFnAttributes; @@ -196,29 +195,6 @@ sub AMADCommBridge_Attr(@) { } } - elsif( $attrName eq "port" ) { - if( $cmd eq "set" ) { - - $hash->{PORT} = $attrVal; - - delete $modules{AMADCommBridge}{defptr}{BRIDGE}; - TcpServer_Close( $hash ); - Log3 $name, 3, "AMADCommBridge ($name) - CommBridge Port changed. CommBridge are closed and new open!"; - - AMADCommBridge_CommBridge_Open( $hash ); - - } else { - - $hash->{PORT} = 8090; - - delete $modules{AMADCommBridge}{defptr}{BRIDGE}; - TcpServer_Close( $hash ); - Log3 $name, 3, "AMADCommBridge ($name) - CommBridge Port changed. CommBridge are closed and new open!"; - - AMADCommBridge_Open( $hash ); - } - } - return undef; } @@ -286,14 +262,14 @@ sub AMADCommBridge_ErrorHandling($$$) { if( $dhash->{helper}{infoErrorCounter} > 0 ) { readingsBeginUpdate( $dhash ); - readingsBulkUpdate( $dhash, "lastStatusRequestState", "statusRequest_error" ); + readingsBulkUpdateIfChanged( $dhash, "lastStatusRequestState", "statusRequest_error", 1 ); if( ReadingsVal( $dname, "flow_Informations", "active" ) eq "inactive" && ReadingsVal( $dname, "flow_SetCommands", "active" ) eq "inactive" ) { Log3 $dname, 5, "AMADCommBridge ($dname) - statusRequestERROR: CHECK THE LAST ERROR READINGS FOR MORE INFO, DEVICE IS SET OFFLINE"; - readingsBulkUpdate( $dhash, "deviceState", "offline" ); - readingsBulkUpdate ( $dhash, "state", "AMAD Flows inactive, device set offline"); + readingsBulkUpdateIfChanged( $dhash, "deviceState", "offline", 1 ); + readingsBulkUpdateIfChanged ( $dhash, "state", "AMAD Flows inactive, device set offline",1); } elsif( $dhash->{helper}{infoErrorCounter} > 7 && $dhash->{helper}{setCmdErrorCounter} > 4 ) { @@ -301,7 +277,7 @@ sub AMADCommBridge_ErrorHandling($$$) { Log3 $dname, 5, "AMADCommBridge ($dname) - statusRequestERROR: UNKNOWN ERROR, PLEASE CONTACT THE DEVELOPER, DEVICE DISABLED"; $attr{$dname}{disable} = 1; - readingsBulkUpdate ( $dhash, "state", "Unknown Error, device disabled"); + readingsBulkUpdateIfChanged ( $dhash, "state", "Unknown Error, device disabled", 1); $dhash->{helper}{infoErrorCounter} = 0; $dhash->{helper}{setCmdErrorCounter} = 0; @@ -318,8 +294,8 @@ sub AMADCommBridge_ErrorHandling($$$) { Log3 $dname, 5, "AMADCommBridge ($dname) - statusRequestERROR: To many Errors please check your Network or Device Configuration, DEVICE IS SET OFFLINE"; - readingsBulkUpdate( $dhash, "deviceState", "offline" ); - readingsBulkUpdate ( $dhash, "state", "To many Errors, device set offline"); + readingsBulkUpdateIfChanged( $dhash, "deviceState", "offline", 1 ); + readingsBulkUpdateIfChanged ( $dhash, "state", "To many Errors, device set offline", 1); $dhash->{helper}{infoErrorCounter} = 0; } @@ -335,10 +311,10 @@ sub AMADCommBridge_ErrorHandling($$$) { if( $err ne "" ) { readingsBeginUpdate( $dhash ); - readingsBulkUpdate ( $dhash, "state", "$err") if( ReadingsVal( $dname, "state", 1 ) ne "initialized" ); + readingsBulkUpdateIfChanged ( $dhash, "state", "$err") if( ReadingsVal( $dname, "state", 1 ) ne "initialized" ); $dhash->{helper}{infoErrorCounter} = ( $dhash->{helper}{infoErrorCounter} + 1 ); - readingsBulkUpdate( $dhash, "lastStatusRequestState", "statusRequest_error" ); + readingsBulkUpdateIfChanged( $dhash, "lastStatusRequestState", "statusRequest_error", 1 ); if( $err =~ /timed out/ ) { @@ -365,10 +341,10 @@ sub AMADCommBridge_ErrorHandling($$$) { if( $data eq "" and exists( $param->{code} ) && $param->{code} ne 200 ) { readingsBeginUpdate( $dhash ); - readingsBulkUpdate ( $dhash, "state", $param->{code} ) if( ReadingsVal( $dname, "state", 1 ) ne "initialized" ); + readingsBulkUpdateIfChanged ( $dhash, "state", $param->{code}, 1 ) if( ReadingsVal( $dname, "state", 1 ) ne "initialized" ); $dhash->{helper}{infoErrorCounter} = ( $dhash->{helper}{infoErrorCounter} + 1 ); - readingsBulkUpdate( $dhash, "lastStatusRequestState", "statusRequest_error" ); + readingsBulkUpdateIfChanged( $dhash, "lastStatusRequestState", "statusRequest_error", 1 ); if( $param->{code} ne 200 ) { @@ -384,10 +360,10 @@ sub AMADCommBridge_ErrorHandling($$$) { if( ( $data =~ /Error/i ) and exists( $param->{code} ) ) { readingsBeginUpdate( $dhash ); - readingsBulkUpdate( $dhash, "state", $param->{code} ) if( ReadingsVal( $dname, "state" ,0) ne "initialized" ); + readingsBulkUpdateIfChanged( $dhash, "state", $param->{code}, 1 ) if( ReadingsVal( $dname, "state" ,0) ne "initialized" ); $dhash->{helper}{infoErrorCounter} = ( $dhash->{helper}{infoErrorCounter} + 1 ); - readingsBulkUpdate( $dhash, "lastStatusRequestState", "statusRequest_error" ); + readingsBulkUpdateIfChanged( $dhash, "lastStatusRequestState", "statusRequest_error", 1 ); if( $param->{code} eq 404 && ReadingsVal( $dname, "flow_Informations", "inactive" ) eq "inactive" ) { @@ -421,14 +397,14 @@ sub AMADCommBridge_ErrorHandling($$$) { if( $dhash->{helper}{setCmdErrorCounter} > 2 ) { readingsBeginUpdate( $dhash ); - readingsBulkUpdate( $dhash, "lastSetCommandState", "statusRequest_error" ); + readingsBulkUpdateIfChanged( $dhash, "lastSetCommandState", "statusRequest_error", 1 ); if( ReadingsVal( $dname, "flow_Informations", "active" ) eq "inactive" && ReadingsVal( $dname, "flow_SetCommands", "active" ) eq "inactive" ) { Log3 $dname, 5, "AMADCommBridge ($dname) - setCommandERROR: CHECK THE LAST ERROR READINGS FOR MORE INFO, DEVICE IS SET OFFLINE"; - readingsBulkUpdate( $dhash, "deviceState", "offline" ); - readingsBulkUpdate( $dhash, "state", "AMAD Flows inactive, device set offline" ); + readingsBulkUpdateIfChanged( $dhash, "deviceState", "offline", 1 ); + readingsBulkUpdateIfChanged( $dhash, "state", "AMAD Flows inactive, device set offline", 1 ); } elsif( $dhash->{helper}{infoErrorCounter} > 7 && $dhash->{helper}{setCmdErrorCounter} > 4 ) { @@ -436,7 +412,7 @@ sub AMADCommBridge_ErrorHandling($$$) { Log3 $dname, 5, "AMADCommBridge ($dname) - setCommandERROR: UNKNOWN ERROR, PLEASE CONTACT THE DEVELOPER, DEVICE DISABLED"; $attr{$dname}{disable} = 1; - readingsBulkUpdate( $dhash, "state", "Unknown Error, device disabled" ); + readingsBulkUpdateIfChanged( $dhash, "state", "Unknown Error, device disabled", 1 ); $dhash->{helper}{infoErrorCounter} = 0; $dhash->{helper}{setCmdErrorCounter} = 0; @@ -452,8 +428,8 @@ sub AMADCommBridge_ErrorHandling($$$) { Log3 $dname, 5, "AMADCommBridge ($dname) - setCommandERROR: To many Errors please check your Network or Device Configuration, DEVICE IS SET OFFLINE"; - readingsBulkUpdate( $dhash, "deviceState", "offline" ); - readingsBulkUpdate( $dhash, "state", "To many Errors, device set offline" ); + readingsBulkUpdateIfChanged( $dhash, "deviceState", "offline", 1 ); + readingsBulkUpdateIfChanged( $dhash, "state", "To many Errors, device set offline", 1 ); $dhash->{helper}{setCmdErrorCounter} = 0; } @@ -468,10 +444,10 @@ sub AMADCommBridge_ErrorHandling($$$) { if( defined( $err ) ) { if( $err ne "" ) { readingsBeginUpdate( $dhash ); - readingsBulkUpdate( $dhash, "state", $err ) if( ReadingsVal( $dname, "state", 0 ) ne "initialized" ); + readingsBulkUpdateIfChanged( $dhash, "state", $err, 1 ) if( ReadingsVal( $dname, "state", 0 ) ne "initialized" ); $dhash->{helper}{setCmdErrorCounter} = ($dhash->{helper}{setCmdErrorCounter} + 1); - readingsBulkUpdate( $dhash, "lastSetCommandState", "setCmd_error" ); + readingsBulkUpdateIfChanged( $dhash, "lastSetCommandState", "setCmd_error", 1 ); if( $err =~ /timed out/ ) { @@ -498,11 +474,11 @@ sub AMADCommBridge_ErrorHandling($$$) { if( $data eq "" and exists( $param->{code} ) && $param->{code} ne 200 ) { readingsBeginUpdate( $dhash ); - readingsBulkUpdate( $dhash, "state", $param->{code} ) if( ReadingsVal( $dhash, "state", 0 ) ne "initialized" ); + readingsBulkUpdateIfChanged( $dhash, "state", $param->{code}, 1 ) if( ReadingsVal( $dhash, "state", 0 ) ne "initialized" ); $dhash->{helper}{setCmdErrorCounter} = ( $dhash->{helper}{setCmdErrorCounter} + 1 ); - readingsBulkUpdate($dhash, "lastSetCommandState", "setCmd_error" ); + readingsBulkUpdateIfChanged($dhash, "lastSetCommandState", "setCmd_error", 1 ); readingsEndUpdate( $dhash, 1 ); @@ -514,15 +490,15 @@ sub AMADCommBridge_ErrorHandling($$$) { if( ( $data =~ /Error/i ) and exists( $param->{code} ) ) { readingsBeginUpdate( $dhash ); - readingsBulkUpdate( $dhash, "state", $param->{code} ) if( ReadingsVal( $dname, "state", 0 ) ne "initialized" ); + readingsBulkUpdateIfChanged( $dhash, "state", $param->{code}, 1 ) if( ReadingsVal( $dname, "state", 0 ) ne "initialized" ); $dhash->{helper}{setCmdErrorCounter} = ( $dhash->{helper}{setCmdErrorCounter} + 1 ); - readingsBulkUpdate( $dhash, "lastSetCommandState", "setCmd_error" ); + readingsBulkUpdateIfChanged( $dhash, "lastSetCommandState", "setCmd_error", 1 ); if( $param->{code} eq 404 ) { - readingsBulkUpdate( $dhash, "lastSetCommandError", "" ); + readingsBulkUpdateIfChanged( $dhash, "lastSetCommandError", "", 1 ); Log3 $dname, 5, "AMADCommBridge ($dname) - setCommandERROR: setCommands flow is inactive on your device!"; } else { @@ -728,7 +704,7 @@ sub AMADCommBridge_ResponseProcessing($$) { $decode_json = eval{decode_json($json)}; if($@){ - Log3 $bname, 3, "AMADCommBridge ($name) - ERROR while request: $@"; + Log3 $bname, 4, "AMADCommBridge ($name) - ERROR while request: $@"; readingsSingleUpdate($bhash, "JSON info", "JSON ERROR", 1); $response = "header lines: \r\n AMADCommBridge receive a JSON error\r\n AMADCommBridge to do nothing\r\n"; $c = $hash->{CD}; @@ -816,8 +792,8 @@ sub AMADCommBridge_ResponseProcessing($$) { my $fhemCmd = $decode_json->{payload}{voiceinputdata}; readingsBeginUpdate( $bhash); - readingsBulkUpdate( $bhash, "receiveVoiceCommand", $fhemCmd ); - readingsBulkUpdate( $bhash, "receiveVoiceDevice", $fhemDevice ); + readingsBulkUpdateIfChanged( $bhash, "receiveVoiceCommand", $fhemCmd, 1 ); + readingsBulkUpdateIfChanged( $bhash, "receiveVoiceDevice", $fhemDevice, 1 ); readingsEndUpdate( $bhash, 1 ); Log3 $bname, 4, "AMADCommBridge ($name) - AMADCommBridge_CommBridge: set reading receive voice command: $fhemCmd from Device $fhemDevice"; diff --git a/74_AMADDevice.pm b/74_AMADDevice.pm index 2b78ec1..9ae21e4 100644 --- a/74_AMADDevice.pm +++ b/74_AMADDevice.pm @@ -54,8 +54,8 @@ use Encode qw(encode); eval "use JSON;1" or $missingModul .= "JSON "; -my $modulversion = "3.9.52"; -my $flowsetversion = "3.9.52"; +my $modulversion = "3.9.55"; +my $flowsetversion = "3.9.55"; @@ -178,8 +178,8 @@ sub AMADDevice_Define($$) { $attr{$name}{room} = "AMAD" if( !defined( $attr{$name}{room} ) ); readingsBeginUpdate($hash); - readingsBulkUpdate( $hash, "state", "initialized"); - readingsBulkUpdate( $hash, "deviceState", "unknown"); + readingsBulkUpdateIfChanged( $hash, "state", "initialized",1); + readingsBulkUpdateIfChanged( $hash, "deviceState", "unknown",1); readingsEndUpdate($hash,1); @@ -376,7 +376,7 @@ sub AMADDevice_WriteReadings($$) { #### schreiben der Readings Log3 $name, 5, "AMADDevice ($name) - Processing data: $decode_json"; - readingsSingleUpdate( $hash, "state", "active", 1) if( ReadingsVal( $name, "state", 0 ) ne "initialized" or ReadingsVal( $name, "state", 0 ) ne "active" ); + readingsSingleUpdate( $hash, "state", "active", 1) if( ReadingsVal( $name, "state", 0 ) ne "initialized" and ReadingsVal( $name, "state", 0 ) ne "active" ); ### Event Readings my $t; @@ -386,20 +386,22 @@ sub AMADDevice_WriteReadings($$) { readingsBeginUpdate($hash); while( ( $t, $v ) = each %{$decode_json->{payload}} ) { - readingsBulkUpdate( $hash, $t, $v ) if( defined( $v ) ); + $v =~ s/\bnull\b/off/g if( ($t eq "nextAlarmDay" or $t eq "nextAlarmTime") and $v eq "null" ); $v =~ s/\bnull\b//g; + + readingsBulkUpdateIfChanged( $hash, $t, $v, 1 ) if( defined( $v ) ); } - readingsBulkUpdate( $hash, "deviceState", "offline" ) if( $decode_json->{payload}{airplanemode} && $decode_json->{payload}{airplanemode} eq "on" ); - readingsBulkUpdate( $hash, "deviceState", "online" ) if( $decode_json->{payload}{airplanemode} && $decode_json->{payload}{airplanemode} eq "off" ); + readingsBulkUpdateIfChanged( $hash, "deviceState", "offline", 1 ) if( $decode_json->{payload}{airplanemode} && $decode_json->{payload}{airplanemode} eq "on" ); + readingsBulkUpdateIfChanged( $hash, "deviceState", "online", 1 ) if( $decode_json->{payload}{airplanemode} && $decode_json->{payload}{airplanemode} eq "off" ); - readingsBulkUpdate( $hash, "lastStatusRequestState", "statusRequest_done" ); + readingsBulkUpdateIfChanged( $hash, "lastStatusRequestState", "statusRequest_done", 1 ); $hash->{helper}{infoErrorCounter} = 0; ### End Response Processing - readingsBulkUpdate( $hash, "state", "active" ) if( ReadingsVal( $name, "state", 0 ) eq "initialized" ); + readingsBulkUpdateIfChanged( $hash, "state", "active", 1 ) if( ReadingsVal( $name, "state", 0 ) eq "initialized" ); readingsEndUpdate( $hash, 1 ); $hash->{helper}{deviceStateErrorCounter} = 0 if( $hash->{helper}{deviceStateErrorCounter} > 0 and ReadingsVal( $name, "deviceState", "offline") eq "online" ); @@ -790,14 +792,14 @@ sub AMADDevice_checkDeviceState($) { RemoveInternalTimer( $hash ); - if( ReadingsAge( $name, "deviceState", 90 ) > 90 ) { + if( ReadingsAge( $name, "deviceState", 240 ) > 240 ) { AMADDevice_statusRequest( $hash ) if( $hash->{helper}{deviceStateErrorCounter} == 0 ); - readingsSingleUpdate( $hash, "deviceState", "offline", 1 ) if( ReadingsAge( $name, "deviceState", 180) > 180 and $hash->{helper}{deviceStateErrorCounter} > 0 ); + readingsSingleUpdate( $hash, "deviceState", "offline", 1 ) if( ReadingsAge( $name, "deviceState", 300) > 300 and $hash->{helper}{deviceStateErrorCounter} > 0 ); $hash->{helper}{deviceStateErrorCounter} = ( $hash->{helper}{deviceStateErrorCounter} + 1 ); } - InternalTimer( gettimeofday()+90, "AMADDevice_checkDeviceState", $hash, 0 ); + InternalTimer( gettimeofday()+240, "AMADDevice_checkDeviceState", $hash, 0 ); Log3 $name, 4, "AMADDevice ($name) - AMADDevice_checkDeviceState: set new Timer"; } diff --git a/74_AMADautomagicFlowset_3.9.52.xml b/74_AMADautomagicFlowset_3.9.55.xml similarity index 81% rename from 74_AMADautomagicFlowset_3.9.52.xml rename to 74_AMADautomagicFlowset_3.9.55.xml index 514dd17..6f5e390 100644 --- a/74_AMADautomagicFlowset_3.9.52.xml +++ b/74_AMADautomagicFlowset_3.9.55.xml @@ -259,9 +259,9 @@ irname=getString("name") false - Periodischer Timer: alle 30s + Periodischer Timer: alle 120s true - 30000 + 120000 true false false @@ -970,13 +970,13 @@ or trigger == "HTTP Request: /fhem-amad/deviceInfo/" true - Expression: trigger == "Periodischer Timer: alle 30s" - trigger == "Periodischer Timer: alle 30s" + Expression: trigger == "Periodischer Timer: alle 120s" + trigger == "Periodischer Timer: alle 120s" true - Expression: trigger == "Periodischer Timer: alle 30s" or trigger == "HTTP Request: /fhem-amad/deviceInfo/" - trigger == "Periodischer Timer: alle 30s" or trigger == "HTTP Request: /fhem-amad/deviceInfo/" + Expression: trigger == "Periodischer Timer: alle 120s" or trigger == "HTTP Request: /fhem-amad/deviceInfo/" + trigger == "Periodischer Timer: alle 120s" or trigger == "HTTP Request: /fhem-amad/deviceInfo/" true @@ -2646,10 +2646,14 @@ fhemcmd = "setreading"; false Script: Set FHEMDATA JSON -