From 4fa7b30f5063291d56bdc7dad991a2d20f1b2558 Mon Sep 17 00:00:00 2001 From: bert hubert Date: Tue, 25 Feb 2020 23:17:55 +0100 Subject: [PATCH] add SBAS to influx --- influxpush.cc | 4 ++-- influxpush.hh | 2 +- navparse.cc | 30 +++++++++++++++++++++++++++++- sbas.cc | 12 +++++++----- sbas.hh | 4 ++-- 5 files changed, 41 insertions(+), 11 deletions(-) diff --git a/influxpush.cc b/influxpush.cc index 248984d..3d13ad7 100644 --- a/influxpush.cc +++ b/influxpush.cc @@ -53,7 +53,7 @@ void InfluxPusher::addValueObserver(int src, string_view name, const initializer } -void InfluxPusher::addValue(const SatID& id, string_view name, const initializer_list>& values, double t, std::optional src) +void InfluxPusher::addValue(const SatID& id, string_view name, const initializer_list>& values, double t, std::optional src, std::optional tag) { if(d_mute) return; @@ -69,7 +69,7 @@ void InfluxPusher::addValue(const SatID& id, string_view name, const initializer string buffer = string(name) +",gnssid="+to_string(id.gnss)+",sv=" +to_string(id.sv)+",sigid="+to_string(id.sigid); if(src) - buffer += ",src="+to_string(*src); + buffer += ","+*tag+"="+to_string(*src); buffer+= " "; bool lefirst=true; diff --git a/influxpush.hh b/influxpush.hh index d2259fd..e1ca831 100644 --- a/influxpush.hh +++ b/influxpush.hh @@ -9,7 +9,7 @@ struct InfluxPusher { explicit InfluxPusher(std::string_view dbname); void addValueObserver(int src, std::string_view name, const std::initializer_list>& values, double t, std::optional satid=std::optional()); - void addValue(const SatID& id, std::string_view name, const std::initializer_list>& values, double t, std::optional src = std::optional()); + void addValue(const SatID& id, std::string_view name, const std::initializer_list>& values, double t, std::optional src = std::optional(), std::optional tag = std::optional("src")); void checkSend(); void doSend(const std::set& buffer); diff --git a/navparse.cc b/navparse.cc index 84dc950..c71dffc 100644 --- a/navparse.cc +++ b/navparse.cc @@ -1544,6 +1544,7 @@ try } char bert[6]; + // I apologise deeply if(fread(bert, 1, 6, stdin) != 6 || bert[0]!='b' || bert[1]!='e' || bert[2] !='r' || bert[3]!='t') { cerr<<"EOF or bad magic"< sbas((uint8_t*)nmm.sbm().contents().c_str(), nmm.sbm().contents().length()); - sb.status.parse(sbas, nmm.localutcseconds()); + auto delta = sb.status.parse(sbas, nmm.localutcseconds()); + // fast correction + for(const auto& f : delta.first) { + idb.addValue(f.id, "sbas_fast", + {{"correction", f.correction}, + {"udrei", f.udrei}}, nmm.localutcseconds(), + nmm.sbm().gnsssv(), "sbas"); + + + } + for(const auto& lt : delta.second) { + idb.addValue(lt.id,"sbas_lterm", + { + {"iod8", lt.iod8}, + {"toa", lt.toa}, + {"iodp", lt.iodp}, + {"dx", lt.dx}, + {"dy", lt.dy}, + {"dz", lt.dz}, + {"dai", lt.dai}, + {"ddx", lt.ddx}, + {"ddy", lt.ddy}, + {"ddz", lt.ddz}, + {"ddai", lt.ddai} + }, nmm.localutcseconds(), nmm.sbm().gnsssv(), "sbas"); + + } + if(nmm.localutcseconds() - sb.status.d_lastDNU > 120) { for(const auto& c : sb.status.d_fast) { g_svstats[c.first].sbas[nmm.sbm().gnsssv()].fast = c.second; diff --git a/sbas.cc b/sbas.cc index e5d202e..0ebe5f6 100644 --- a/sbas.cc +++ b/sbas.cc @@ -135,8 +135,9 @@ pair, vector> S return ret; } -void SBASState::parse(const std::basic_string& sbas, time_t now) +pair, vector> SBASState::parse(const std::basic_string& sbas, time_t now) { + pair, vector> ret; int type = getbitu(&sbas[0], 8, 6); if(type == 0) { parse0(sbas, now); @@ -145,21 +146,22 @@ void SBASState::parse(const std::basic_string& sbas, time_t now) parse1(sbas, now); } else if(type >= 2 && type <= 5) { - parse2_5(sbas, now); + ret.first = parse2_5(sbas, now); } else if(type == 6) { - parse6(sbas, now); + ret.first = parse6(sbas, now); } else if(type ==7) { parse7(sbas, now); } else if(type == 24) { - parse24(sbas, now); + ret = parse24(sbas, now); } else if(type == 25) { - parse25(sbas, now); + ret.second = parse25(sbas, now); } + return ret; } void SBASState::parse25H(const basic_string& sbas, time_t t, int offset, vector& ret) diff --git a/sbas.hh b/sbas.hh index 8481015..89c2b0e 100644 --- a/sbas.hh +++ b/sbas.hh @@ -40,12 +40,12 @@ struct SBASState int toa; int iodp; double dx, dy, dz, dai; - double ddx, ddy, ddz, ddai; + double ddx{0}, ddy{0}, ddz{0}, ddai{0}; bool velocity{false}; time_t lastUpdate{-1}; }; - void parse(const std::basic_string& sbas, time_t now); + std::pair, std::vector> parse(const std::basic_string& sbas, time_t now); void parse0(const std::basic_string& message, time_t now);