From fe5d320628082cd53c093765ef056b77c11abf07 Mon Sep 17 00:00:00 2001 From: moises <> Date: Sat, 20 Apr 2019 09:12:58 +0000 Subject: [PATCH] 98_livetracking: CSV data from OwnTracks git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@19227 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- CHANGED | 1 + FHEM/38_netatmo.pm | 11 ++++++----- FHEM/72_XiaomiDevice.pm | 2 +- FHEM/98_livetracking.pm | 30 ++++++++++++++++++++++++++++-- 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/CHANGED b/CHANGED index 105bdabc9..8c3637921 100644 --- a/CHANGED +++ b/CHANGED @@ -1,5 +1,6 @@ # 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. + - feature: 98_livetracking: CSV data from OwnTracks - new: 98_Weather: add wundergroundAPI for Weather Underground - feature: 98_backup: add support for FileLog path - bugfix: 93_DbLog: fix problem with delta-h/delta-d MySQL if value will be diff --git a/FHEM/38_netatmo.pm b/FHEM/38_netatmo.pm index 143ae0f77..828de1133 100644 --- a/FHEM/38_netatmo.pm +++ b/FHEM/38_netatmo.pm @@ -1,4 +1,4 @@ -############################################################################## +############################################################################## # $Id$ # # 38_netatmo.pm @@ -5138,10 +5138,10 @@ netatmo_parsePublic($$) if(defined($device->{measures}->{$module}->{rain_live})) { - push(@readings_rain, $device->{measures}->{$module}->{rain_live}); - push(@readings_rain_1, $device->{measures}->{$module}->{rain_60min}); - push(@readings_rain_24, $device->{measures}->{$module}->{rain_24h}); - push(@timestamps_rain, $device->{measures}->{$module}->{rain_timeutc}); + push(@readings_rain, $device->{measures}->{$module}->{rain_live}) if(defined($device->{measures}->{$module}->{rain_live})); + push(@readings_rain_1, $device->{measures}->{$module}->{rain_60min}) if(defined($device->{measures}->{$module}->{rain_60min})); + push(@readings_rain_24, $device->{measures}->{$module}->{rain_24h}) if(defined($device->{measures}->{$module}->{rain_24h})); + push(@timestamps_rain, $device->{measures}->{$module}->{rain_timeutc}) if(defined($device->{measures}->{$module}->{rain_timeutc})); next; } if(defined($device->{measures}->{$module}->{wind_strength})) @@ -5321,6 +5321,7 @@ netatmo_parsePublic($$) my $max_rain_24 = -1000; foreach my $val (@readings_rain_24) { + next if(!defined($val)); $avg_rain_24 += $val / scalar(@readings_rain_24); $min_rain_24 = $val if($val < $min_rain_24); $max_rain_24 = $val if($val > $max_rain_24); diff --git a/FHEM/72_XiaomiDevice.pm b/FHEM/72_XiaomiDevice.pm index f2f4ae534..d4f1696a0 100755 --- a/FHEM/72_XiaomiDevice.pm +++ b/FHEM/72_XiaomiDevice.pm @@ -2959,7 +2959,7 @@ sub XiaomiDevice_connectFail($) Log3 $name, 3, "$name: connection timeout"; readingsSingleUpdate($hash, "state", "disconnected", 1) if($hash->{helper}{ConnectionState} ne "disconnected"); $hash->{helper}{ConnectionState} = "disconnected"; - $hash->{helper}{delay} += 60; + $hash->{helper}{delay} += 120; InternalTimer( gettimeofday() + $hash->{helper}{delay}, "XiaomiDevice_connect", $hash); return undef; diff --git a/FHEM/98_livetracking.pm b/FHEM/98_livetracking.pm index 07f043dcb..254e1109c 100644 --- a/FHEM/98_livetracking.pm +++ b/FHEM/98_livetracking.pm @@ -1,4 +1,4 @@ -############################################## +############################################## # $Id$$$ 2018-11-01 # # 98_livetracking.pm @@ -887,6 +887,26 @@ sub livetracking_ParseOwnTracks my ($hash,$data) = @_; my $name = $hash->{NAME}; + #//rcmcronny CSV DECODING + if($data =~ m/[0-9]{2},[A-Z,a-z,0-9]{8},[f|c|a|k|L|l|m|t|T|v]{1},[0-9]{8},[0-9]{8},[0-9]{1,5},[0-9]{1,5},[0-9]{1,5},[0-9]{1,5},[0-9]{1,5}/) + { + Log3 ($name, 4, "$name - CSV encoded payload detected -> ".Dumper($data)); + my ($csv_tid, $csv_tst, $csv_t, $csv_lat, $csv_lon, $csv_cog, $csv_vel, $csv_alt, $csv_dist, $csv_trip) = $data =~ m/([0-9]{2}),([A-Z,a-z,0-9]{8}),([f|c|a|k|L|l|m|t|T|v]{1}),([0-9]{8}),([0-9]{8}),([0-9]{1,5}),([0-9]{1,5}),([0-9]{1,5}),([0-9]{1,5}),([0-9]{1,5})/; + $data = '{ + "_type": "location", + "t": "'.$csv_t.'", + "tst": "'.(hex($csv_tst)).'", + "tid": "'.$csv_tid.'", + "lat": "'.($csv_lat/1000000).'", + "lon": "'.($csv_lon/1000000).'", + "alt": "'.($csv_alt*10).'", + "vel": "'.$csv_vel.'", + "cog": "'.($csv_cog*10).'", + "dist": "'.$csv_dist.'", + "trip": "'.($csv_trip*1000).'" + }'; + } + my $dataset = eval { JSON->new->utf8(0)->decode($data) }; if($@) { @@ -1164,7 +1184,13 @@ sub livetracking_Notify($$) $invaliddata = 0;#traccar Log3 ($name, 4, "$name Detected Traccar data from MQTT device notify"); } - if($invaliddata == 1){ + elsif(($dev->{CHANGED}[0] =~ m/[0-9]{2},[A-Z,a-z,0-9]{8},[f|c|a|k|L|l|m|t|T|v]{1},[0-9]{8},[0-9]{8},[0-9]{2},[0-9]{1},[0-9]{2},[0-9]{1},[0-9]{1}/)) + { + $invaliddata = 0;#owntracks-csv + Log3 ($name, 4, "$name Detected OwnTracks CSV ENCODED data from MQTT device notify"); + } + if($invaliddata == 1) + { Log3 ($name, 4, "WRONG MQTT TYPE ".Dumper($dev->{CHANGED}[0])); return undef; }