74_AutomowerConnect: Common.pm pervent JSON decoding error if more than one complete JSON string is in DevIo buffer, addPositionPolling is only settable if addPollingMinInterval > 0
git-svn-id: https://svn.fhem.de/fhem/trunk@27820 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
@@ -1,5 +1,8 @@
|
|||||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
||||||
# Do not insert empty lines here, update check depends on it.
|
# Do not insert empty lines here, update check depends on it.
|
||||||
|
- change: 74_AutomowerConnect: Common.pm pervent JSON decoding error if more
|
||||||
|
than one complete JSON string is in DevIo buffer,
|
||||||
|
addPositionPolling is only settable if addPollingMinInterval > 0
|
||||||
- feature: 72_FB_CALLMONITOR: das Oertliche repariert.
|
- feature: 72_FB_CALLMONITOR: das Oertliche repariert.
|
||||||
- feature: 72_FRITZBOX: reconnect nach Netzwerk/FB Ausfall.
|
- feature: 72_FRITZBOX: reconnect nach Netzwerk/FB Ausfall.
|
||||||
Neues Attribut: reConnect_Interval
|
Neues Attribut: reConnect_Interval
|
||||||
|
|||||||
@@ -1384,11 +1384,21 @@ sub Attr {
|
|||||||
$hash->{helper}{additional_polling} = $attrVal;
|
$hash->{helper}{additional_polling} = $attrVal;
|
||||||
Log3 $name, 4, "$iam $cmd $attrName $attrVal";
|
Log3 $name, 4, "$iam $cmd $attrName $attrVal";
|
||||||
|
|
||||||
|
if ( $attrVal == 0 ) {
|
||||||
|
|
||||||
|
delete $attr{$name}{addPositionPolling} if ( defined( $attr{$name}{addPositionPolling} ) );
|
||||||
|
$hash->{helper}{use_position_polling} = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} elsif( $cmd eq "del" ) {
|
} elsif( $cmd eq "del" ) {
|
||||||
|
|
||||||
$hash->{helper}{additional_polling} = 0;
|
$hash->{helper}{additional_polling} = 0;
|
||||||
readingsDelete( $hash, 'api_callsThisMonth' );
|
readingsDelete( $hash, 'api_callsThisMonth' );
|
||||||
Log3 $name, 3, "$iam $cmd $attrName and set default value 0.";
|
Log3 $name, 3, "$iam $cmd $attrName and set default value 0.";
|
||||||
|
delete $attr{$name}{addPositionPolling} if ( defined( $attr{$name}{addPositionPolling} ) );
|
||||||
|
$hash->{helper}{use_position_polling} = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
##########
|
##########
|
||||||
@@ -1397,6 +1407,7 @@ sub Attr {
|
|||||||
if( $cmd eq "set" ) {
|
if( $cmd eq "set" ) {
|
||||||
|
|
||||||
return "$iam $attrVal is invalid, allowed value 0 or 1." unless( $attrVal == 0 || $attrVal == 1 );
|
return "$iam $attrVal is invalid, allowed value 0 or 1." unless( $attrVal == 0 || $attrVal == 1 );
|
||||||
|
return "$iam $attrVal set attribute addPollingMinInterval > 0 first." unless( defined( $attr{$name}{addPollingMinInterval} ) && $attr{$name}{addPollingMinInterval} > 0 );
|
||||||
$hash->{helper}{use_position_polling} = $attrVal;
|
$hash->{helper}{use_position_polling} = $attrVal;
|
||||||
Log3 $name, 4, "$iam $cmd $attrName $attrVal";
|
Log3 $name, 4, "$iam $cmd $attrName $attrVal";
|
||||||
|
|
||||||
@@ -2561,12 +2572,15 @@ sub wsRead {
|
|||||||
my $additional_polling = $hash->{helper}{additional_polling} * 1000;
|
my $additional_polling = $hash->{helper}{additional_polling} * 1000;
|
||||||
my $use_position_polling = $hash->{helper}{use_position_polling};
|
my $use_position_polling = $hash->{helper}{use_position_polling};
|
||||||
my $buf = DevIo_SimpleRead( $hash );
|
my $buf = DevIo_SimpleRead( $hash );
|
||||||
return "" if ( !defined( $buf ) );
|
return undef if ( !defined( $buf ) );
|
||||||
Log3 $name, 4, "$iam received websocket data: >$buf<";
|
Log3 $name, 4, "$iam received websocket data: >$buf<";
|
||||||
|
|
||||||
if ( $buf ) {
|
if ( $buf ) {
|
||||||
|
|
||||||
my $result = eval { decode_json( $buf ) };
|
$buf =~ s/}\{/},{/g;
|
||||||
|
$buf = "[${buf}]";
|
||||||
|
|
||||||
|
my $bufres = eval { decode_json( $buf ) };
|
||||||
|
|
||||||
if ( $@ ) {
|
if ( $@ ) {
|
||||||
|
|
||||||
@@ -2574,11 +2588,13 @@ sub wsRead {
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
for my $result (@$bufres) {
|
||||||
|
|
||||||
if ( !defined( $result->{type} ) ) {
|
if ( !defined( $result->{type} ) ) {
|
||||||
|
|
||||||
$hash->{helper}{wsResult}{other} = dclone( $result );
|
$hash->{helper}{wsResult}{other} = dclone( $result );
|
||||||
|
|
||||||
if ( $result =~ /^{"ready":false/ ) {
|
if ( defined( $result->{ready} ) && !$result->{ready} ) {
|
||||||
|
|
||||||
readingsSingleUpdate( $hash, 'mower_wsEvent', 'not ready', 1);
|
readingsSingleUpdate( $hash, 'mower_wsEvent', 'not ready', 1);
|
||||||
$hash->{helper}{retry_interval_wsreopen} = 420;
|
$hash->{helper}{retry_interval_wsreopen} = 420;
|
||||||
@@ -2621,11 +2637,10 @@ sub wsRead {
|
|||||||
) ) && !$hash->{helper}{midnightCycle} ) {
|
) ) && !$hash->{helper}{midnightCycle} ) {
|
||||||
|
|
||||||
$hash->{helper}{storesum} = 0;
|
$hash->{helper}{storesum} = 0;
|
||||||
# RemoveInternalTimer( $hash, \&getMowerWs );
|
RemoveInternalTimer( $hash, \&getMowerWs );
|
||||||
# InternalTimer(gettimeofday() + 2, \&getMowerWs, $hash, 0 );
|
InternalTimer(gettimeofday() + 1, \&getMowerWs, $hash, 0 );
|
||||||
getMowerWs( $hash );
|
# getMowerWs( $hash );
|
||||||
$hash->{First_Read} = 0;
|
next;
|
||||||
return;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2633,7 +2648,7 @@ sub wsRead {
|
|||||||
|
|
||||||
if ( $result->{type} eq "positions-event" ) {
|
if ( $result->{type} eq "positions-event" ) {
|
||||||
|
|
||||||
if ( !$use_position_polling || $use_position_polling && !$additional_polling ) {
|
if ( !$use_position_polling ) {
|
||||||
|
|
||||||
$hash->{helper}{positionsTime} = gettimeofday();
|
$hash->{helper}{positionsTime} = gettimeofday();
|
||||||
$hash->{helper}{mower}{attributes}{positions} = dclone( $result->{attributes}{positions} );
|
$hash->{helper}{mower}{attributes}{positions} = dclone( $result->{attributes}{positions} );
|
||||||
@@ -2641,10 +2656,9 @@ sub wsRead {
|
|||||||
AlignArray( $hash );
|
AlignArray( $hash );
|
||||||
FW_detailFn_Update ($hash);
|
FW_detailFn_Update ($hash);
|
||||||
|
|
||||||
} elsif ( $use_position_polling && $additional_polling ) {
|
} elsif ( $use_position_polling ) {
|
||||||
|
|
||||||
$hash->{First_Read} = 0;
|
next;
|
||||||
return;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2672,6 +2686,8 @@ sub wsRead {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
$hash->{First_Read} = 0;
|
$hash->{First_Read} = 0;
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user