added JSON String check, set and get cmd specific by bridge type
This commit is contained in:
parent
7b14b5ce97
commit
cdb2c5e46b
@ -46,7 +46,7 @@ use JSON;
|
|||||||
|
|
||||||
use HttpUtils;
|
use HttpUtils;
|
||||||
|
|
||||||
my $version = "0.4.0";
|
my $version = "0.4.3";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -234,7 +234,9 @@ sub NUKIBridge_Set($@) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
my $list = "info:noArg autocreate:noArg clearLog:noArg fwUpdate:noArg reboot:noArg callbackRemove:0,1,2";
|
my $list = "";
|
||||||
|
$list .= "info:noArg autocreate:noArg ";
|
||||||
|
$list .= "clearLog:noArg fwUpdate:noArg reboot:noArg callbackRemove:0,1,2" if( ReadingsVal($name,'bridgeType','Software') eq 'Hardware' );
|
||||||
return "Unknown argument $cmd, choose one of $list";
|
return "Unknown argument $cmd, choose one of $list";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -256,7 +258,7 @@ sub NUKIBridge_Get($@) {
|
|||||||
NUKIBridge_getCallbackList($hash) if( !IsDisabled($name) );
|
NUKIBridge_getCallbackList($hash) if( !IsDisabled($name) );
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
my $list = "logFile:noArg callbackList:noArg";
|
my $list = "logFile:noArg callbackList:noArg" if( ReadingsVal($name,'bridgeType','Software') eq 'Hardware' );
|
||||||
return "Unknown argument $cmd, choose one of $list";
|
return "Unknown argument $cmd, choose one of $list";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -424,6 +426,17 @@ sub NUKIBridge_ResponseProcessing($$$) {
|
|||||||
my $decode_json;
|
my $decode_json;
|
||||||
|
|
||||||
|
|
||||||
|
if( !$json ) {
|
||||||
|
Log3 $name, 3, "NUKIBridge ($name) - empty answer received";
|
||||||
|
return undef;
|
||||||
|
} elsif( $json =~ m'HTTP/1.1 200 OK' ) {
|
||||||
|
Log3 $name, 4, "NUKIBridge ($name) - empty answer received";
|
||||||
|
return undef;
|
||||||
|
} elsif( $json !~ m/^[\[{].*[}\]]$/ ) {
|
||||||
|
Log3 $name, 3, "NUKIBridge ($name) - invalid json detected: $json";
|
||||||
|
return "NUKIBridge ($name) - invalid json detected: $json";
|
||||||
|
}
|
||||||
|
|
||||||
$decode_json = decode_json($json);
|
$decode_json = decode_json($json);
|
||||||
|
|
||||||
if( ref($decode_json) eq "ARRAY" and scalar(@{$decode_json}) > 0 and $path eq "list" ) {
|
if( ref($decode_json) eq "ARRAY" and scalar(@{$decode_json}) > 0 and $path eq "list" ) {
|
||||||
|
@ -33,7 +33,7 @@ use warnings;
|
|||||||
use JSON;
|
use JSON;
|
||||||
#use Time::HiRes qw(gettimeofday);
|
#use Time::HiRes qw(gettimeofday);
|
||||||
|
|
||||||
my $version = "0.4.1";
|
my $version = "0.4.3";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -192,6 +192,8 @@ sub NUKIDevice_Attr(@) {
|
|||||||
######################
|
######################
|
||||||
#### webhook #########
|
#### webhook #########
|
||||||
|
|
||||||
|
return "$attrName can only use with hardware bridge" if( ($attrName eq "webhookHttpHostname" or $attrName eq "webhookFWinstance") and ReadingsVal($hash->{IODev}->{NAME},'bridgeType','Software') eq 'Software' );
|
||||||
|
|
||||||
return "Invalid value for attribute $attrName: can only by FQDN or IPv4 or IPv6 address" if ( $attrVal && $attrName eq "webhookHttpHostname" && $attrVal !~ /^([A-Za-z_.0-9]+\.[A-Za-z_.0-9]+)|[0-9:]+$/ );
|
return "Invalid value for attribute $attrName: can only by FQDN or IPv4 or IPv6 address" if ( $attrVal && $attrName eq "webhookHttpHostname" && $attrVal !~ /^([A-Za-z_.0-9]+\.[A-Za-z_.0-9]+)|[0-9:]+$/ );
|
||||||
|
|
||||||
return "Invalid value for attribute $attrName: needs to be different from the defined name/address of your Smartlock, we need to know how Smartlock can connect back to FHEM here!" if ( $attrVal && $attrName eq "webhookHttpHostname" && $attrVal eq $hash->{DeviceName} );
|
return "Invalid value for attribute $attrName: needs to be different from the defined name/address of your Smartlock, we need to know how Smartlock can connect back to FHEM here!" if ( $attrVal && $attrName eq "webhookHttpHostname" && $attrVal eq $hash->{DeviceName} );
|
||||||
@ -358,6 +360,17 @@ sub NUKIDevice_Parse($$) {
|
|||||||
#########################################
|
#########################################
|
||||||
####### Errorhandling #############
|
####### Errorhandling #############
|
||||||
|
|
||||||
|
if( !$result ) {
|
||||||
|
Log3 $name, 3, "NUKIDevice ($name) - empty answer received";
|
||||||
|
return undef;
|
||||||
|
} elsif( $result =~ m'HTTP/1.1 200 OK' ) {
|
||||||
|
Log3 $name, 4, "NUKIDevice ($name) - empty answer received";
|
||||||
|
return undef;
|
||||||
|
} elsif( $result !~ m/^[\[{].*[}\]]$/ ) {
|
||||||
|
Log3 $name, 3, "NUKIDevice ($name) - invalid json detected: $result";
|
||||||
|
return "NUKIDevice ($name) - invalid json detected: $result";
|
||||||
|
}
|
||||||
|
|
||||||
if( $result =~ /\d{3}/ ) {
|
if( $result =~ /\d{3}/ ) {
|
||||||
if( $result eq 400 ) {
|
if( $result eq 400 ) {
|
||||||
readingsSingleUpdate( $hash, "state", "action is undefined", 1 );
|
readingsSingleUpdate( $hash, "state", "action is undefined", 1 );
|
||||||
@ -460,6 +473,18 @@ sub NUKIDevice_CGI() {
|
|||||||
my $header = join("\n", @FW_httpheader);
|
my $header = join("\n", @FW_httpheader);
|
||||||
|
|
||||||
my ($first,$json) = split("&",$request,2);
|
my ($first,$json) = split("&",$request,2);
|
||||||
|
|
||||||
|
if( !$json ) {
|
||||||
|
Log3 $name, 3, "NUKIDevice ($name) - empty answer received";
|
||||||
|
return undef;
|
||||||
|
} elsif( $json =~ m'HTTP/1.1 200 OK' ) {
|
||||||
|
Log3 $name, 4, "NUKIDevice ($name) - empty answer received";
|
||||||
|
return undef;
|
||||||
|
} elsif( $json !~ m/^[\[{].*[}\]]$/ ) {
|
||||||
|
Log3 $name, 3, "NUKIDevice ($name) - invalid json detected: $json";
|
||||||
|
return "NUKIDevice ($name) - invalid json detected: $json";
|
||||||
|
}
|
||||||
|
|
||||||
my $decode_json = decode_json($json);
|
my $decode_json = decode_json($json);
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user