Skip to content

Commit

Permalink
Merge pull request #2379 from srcejon/fix_2378
Browse files Browse the repository at this point in the history
Radiosonde: Rate limit position updates to SondeHub.
  • Loading branch information
f4exb authored Jan 20, 2025
2 parents 83b36c6 + 9c64424 commit e38e2e7
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 15 deletions.
49 changes: 35 additions & 14 deletions plugins/feature/radiosonde/radiosondegui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,8 @@ RadiosondeGUI::RadiosondeGUI(PluginAPI* pluginAPI, FeatureUISet *featureUISet, F

// Get updated when position changes
connect(&MainCore::instance()->getSettings(), &MainSettings::preferenceChanged, this, &RadiosondeGUI::preferenceChanged);
connect(&m_positionUpdateTimer, &QTimer::timeout, this, &RadiosondeGUI::updatePosition);
m_positionUpdateTimer.setSingleShot(true);

ui->radiosondes->setItemDelegateForColumn(RADIOSONDE_COL_LATITUDE, new DecimalDelegate(5, ui->radiosondes));
ui->radiosondes->setItemDelegateForColumn(RADIOSONDE_COL_LONGITUDE, new DecimalDelegate(5, ui->radiosondes));
Expand Down Expand Up @@ -979,22 +981,41 @@ QStringList RadiosondeGUI::getRadios()

void RadiosondeGUI::updatePosition()
{
// Limit number of position updates sent to SondeHub
const int updateTime = m_settings.m_mobile ? m_minMobilePositionUpdateTime : m_minFixedPositionUpdateTime;

if (m_sondeHub && m_settings.m_displayPosition)
{
float stationLatitude = MainCore::instance()->getSettings().getLatitude();
float stationLongitude = MainCore::instance()->getSettings().getLongitude();
float stationAltitude = MainCore::instance()->getSettings().getAltitude();

m_sondeHub->updatePosition(
m_settings.m_callsign,
stationLatitude,
stationLongitude,
stationAltitude,
getRadios().join(" "),
m_settings.m_antenna,
m_settings.m_email,
m_settings.m_mobile
);
if (!m_lastPositionUpdate.isValid() || (m_lastPositionUpdate.secsTo(QDateTime::currentDateTime()) >= updateTime))
{
float stationLatitude = MainCore::instance()->getSettings().getLatitude();
float stationLongitude = MainCore::instance()->getSettings().getLongitude();
float stationAltitude = MainCore::instance()->getSettings().getAltitude();

m_sondeHub->updatePosition(
m_settings.m_callsign,
stationLatitude,
stationLongitude,
stationAltitude,
getRadios().join(" "),
m_settings.m_antenna,
m_settings.m_email,
m_settings.m_mobile
);

m_positionUpdateTimer.stop();
m_lastPositionUpdate = QDateTime::currentDateTime();
}
else
{
qint64 msecs = (updateTime * 1000) - m_lastPositionUpdate.msecsTo(QDateTime::currentDateTime());

if (msecs < 0) {
msecs = 0;
}
m_positionUpdateTimer.setInterval(msecs);
m_positionUpdateTimer.start();
}
}
}

Expand Down
4 changes: 4 additions & 0 deletions plugins/feature/radiosonde/radiosondegui.h
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,10 @@ class RadiosondeGUI : public FeatureGUI {
QMenu *radiosondesMenu; // Column select context menu

SondeHub *m_sondeHub;
QDateTime m_lastPositionUpdate;
QTimer m_positionUpdateTimer;
static const int m_minMobilePositionUpdateTime = 30; // In seconds
static const int m_minFixedPositionUpdateTime = 5 * 60;

explicit RadiosondeGUI(PluginAPI* pluginAPI, FeatureUISet *featureUISet, Feature *feature, QWidget* parent = nullptr);
virtual ~RadiosondeGUI();
Expand Down
39 changes: 38 additions & 1 deletion sdrbase/util/sondehub.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ void SondeHub::upload(
obj.insert("subtype", subframe->getType());
}

//obj.insert("dev", true);
//qDebug() << obj;
QJsonArray payloads {
obj
Expand Down Expand Up @@ -189,7 +190,43 @@ void SondeHub::handleReply(QNetworkReply* reply)
if (!reply->error())
{
QByteArray bytes = reply->readAll();
//qDebug() << bytes;
QJsonDocument document = QJsonDocument::fromJson(bytes);
if (document.isObject())
{
QJsonObject obj = document.object();
if (obj.contains(QStringLiteral("message")))
{
QString message = obj.value(QStringLiteral("message")).toString();
qWarning() << "SondeHub message:" << message;
}
if (obj.contains(QStringLiteral("errors")))
{
QJsonArray errors = obj.value(QStringLiteral("errors")).toArray();
for (auto errorObjRef : errors)
{
QJsonObject errorObj = errorObjRef.toObject();
if (errorObj.contains(QStringLiteral("error_message")))
{
QString errorMessage = errorObj.value(QStringLiteral("error_message")).toString();
qWarning() << "SondeHub error:" << errorMessage;
if (errorObj.contains(QStringLiteral("payload")))
{
QJsonObject payload = errorObj.value(QStringLiteral("payload")).toObject();
qWarning() << "SondeHub error:" << QJsonDocument(payload);
}
}
else
{
qWarning() << "SondeHub error:" << QJsonDocument(errorObj);
}
}
}
//qDebug() << "SondeHub::handleReply: obj" << QJsonDocument(obj);
}
else
{
qDebug() << "SondeHub::handleReply:" << bytes;
}
}
else
{
Expand Down

0 comments on commit e38e2e7

Please sign in to comment.