From 66bce1b1ab39b9aa98e0c3cc91f36d3ffa0e69a6 Mon Sep 17 00:00:00 2001 From: "bernhard.trinnes" Date: Tue, 24 Mar 2020 12:07:01 +0100 Subject: [PATCH] fixed uuid bug --- aqi/README.md | 28 +++++++++++++++--- aqi/airqualityindex.cpp | 6 ++-- aqi/integrationpluginaqi.cpp | 57 ++++++++++++++++++++---------------- 3 files changed, 59 insertions(+), 32 deletions(-) diff --git a/aqi/README.md b/aqi/README.md index 9c8bd36e..2af6239c 100644 --- a/aqi/README.md +++ b/aqi/README.md @@ -1,13 +1,29 @@ # Air Quality Index -This plug-in gets the air quality information from http://aqicn.org. -Through your IP address the next nearby sensor station will be discovered. - +This plug-in gets air quality information from http://aqicn.org. +Through the WAN IP address the next nearby sensor station will be discovered. +The geo location can also be set manually. ## Supported Things -If you encounter that a value stays to zero, it means the sensor station +* Air Quality Index + * Location discovery + * Manually location set + * Air Quality + * Cautionary statement + * PM2.5 pollution level + * PM10 pollution lebel + * Ozone level + * Nitrogen dioxide level + * Carbon monoxide level + * Sulfur dioxide level + * Temperature + * Humidity + * Pressure + * Wind speed + +NOTE: If you encounter that a value stays to zero, it means the sensor station doesn't support that value. Besides the air pollution level the plug-in also states a cautionary statement. @@ -16,6 +32,10 @@ inform you what precautions should be taken. ## Requirments +* Valid "Air Quality Index" API Key +* The package "nymea-plugin-airqualityindex" must be installed +* Intenet connection + ## More More about the different Air Quality Levels: https://www.airnow.gov/index.cfm?action=aqibasics.aqi diff --git a/aqi/airqualityindex.cpp b/aqi/airqualityindex.cpp index 3bb20fc0..7dd86351 100644 --- a/aqi/airqualityindex.cpp +++ b/aqi/airqualityindex.cpp @@ -55,7 +55,7 @@ QUuid AirQualityIndex::searchByName(const QString &name) if (m_apiKey.isEmpty()) qCWarning(dcAirQualityIndex()) << "API key is not set"; - QUuid requestId; + QUuid requestId = QUuid::createUuid();; QUrl url; url.setUrl(m_baseUrl); url.setPath("/search/"); @@ -118,7 +118,7 @@ QUuid AirQualityIndex::getDataByIp() if (m_apiKey.isEmpty()) qCWarning(dcAirQualityIndex()) << "API key is not set"; - QUuid requestId; + QUuid requestId = QUuid::createUuid();; QUrl url; url.setUrl(m_baseUrl); url.setPath("/feed/here/"); @@ -153,7 +153,7 @@ QUuid AirQualityIndex::getDataByGeolocation(const QString &lat, const QString &l if (m_apiKey.isEmpty()) qCWarning(dcAirQualityIndex()) << "API key is not set"; - QUuid requestId; + QUuid requestId = QUuid::createUuid(); QUrl url; url.setUrl(m_baseUrl); url.setPath("/feed/geo:"+lat+";"+lng+"/"); diff --git a/aqi/integrationpluginaqi.cpp b/aqi/integrationpluginaqi.cpp index 4e340505..29887096 100644 --- a/aqi/integrationpluginaqi.cpp +++ b/aqi/integrationpluginaqi.cpp @@ -45,27 +45,27 @@ void IntegrationPluginAqi::startPairing(ThingPairingInfo *info) void IntegrationPluginAqi::confirmPairing(ThingPairingInfo *info, const QString &username, const QString &secret) { - Q_UNUSED(username) + Q_UNUSED(username) - QNetworkRequest request(QUrl("https://api.waqi.info/feed/here/?token="+secret)); - QNetworkReply *reply = hardwareManager()->networkManager()->get(request); - connect(reply, &QNetworkReply::finished, info, [this, reply, info, secret](){ - reply->deleteLater(); + QNetworkRequest request(QUrl("https://api.waqi.info/feed/here/?token="+secret)); + QNetworkReply *reply = hardwareManager()->networkManager()->get(request); + connect(reply, &QNetworkReply::finished, info, [this, reply, info, secret](){ + reply->deleteLater(); - int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); - // check HTTP status code - if (status != 200) { - //: Error setting up device with invalid token - info->finish(Thing::ThingErrorAuthenticationFailure, QT_TR_NOOP("This token is not valid.")); - return; - } + // check HTTP status code + if (status != 200) { + //: Error setting up device with invalid token + info->finish(Thing::ThingErrorAuthenticationFailure, QT_TR_NOOP("This token is not valid.")); + return; + } - pluginStorage()->beginGroup(info->thingId().toString()); - pluginStorage()->setValue("apiKey", secret); - pluginStorage()->endGroup(); - info->finish(Thing::ThingErrorNoError); - }); + pluginStorage()->beginGroup(info->thingId().toString()); + pluginStorage()->setValue("apiKey", secret); + pluginStorage()->endGroup(); + info->finish(Thing::ThingErrorNoError); + }); } void IntegrationPluginAqi::discoverThings(ThingDiscoveryInfo *info) @@ -78,8 +78,10 @@ void IntegrationPluginAqi::discoverThings(ThingDiscoveryInfo *info) connect(m_aqiConnection, &AirQualityIndex::stationsReceived, this, &IntegrationPluginAqi::onAirQualityStationsReceived); connect(info, &ThingDiscoveryInfo::aborted, [this] { - m_aqiConnection->deleteLater(); - m_aqiConnection = nullptr; + if (myThings().filterByThingClassId(airQualityIndexThingClassId).isEmpty()) { + m_aqiConnection->deleteLater(); + m_aqiConnection = nullptr; + } }); } else { qCDebug(dcAirQualityIndex()) << "AQI connection alread created"; @@ -107,8 +109,10 @@ void IntegrationPluginAqi::setupThing(ThingSetupInfo *info) connect(info, &ThingSetupInfo::aborted, [requestId, this] { m_asyncSetups.remove(requestId); - //m_aqiConnection->deleteLater(); - //m_aqiConnection = nullptr; + if (myThings().filterByThingClassId(airQualityIndexThingClassId).isEmpty()) { + m_aqiConnection->deleteLater(); + m_aqiConnection = nullptr; + } }); } else { info->finish(Thing::ThingErrorNoError); @@ -120,6 +124,7 @@ void IntegrationPluginAqi::setupThing(ThingSetupInfo *info) } + void IntegrationPluginAqi::postSetupThing(Thing *thing) { if (thing->thingClassId() == airQualityIndexThingClassId) { @@ -162,7 +167,7 @@ void IntegrationPluginAqi::thingRemoved(Thing *thing) void IntegrationPluginAqi::onAirQualityDataReceived(QUuid requestId, AirQualityIndex::AirQualityData data) { if (m_asyncSetups.contains(requestId)) { - ThingSetupInfo *info = m_asyncSetups.value(requestId); + ThingSetupInfo *info = m_asyncSetups.take(requestId); return info->finish(Thing::ThingErrorNoError); } @@ -171,7 +176,6 @@ void IntegrationPluginAqi::onAirQualityDataReceived(QUuid requestId, AirQualityI if (!thing) return; - //thing->setStateValue(airQualityIndexStationNameStateTypeId, data); thing->setStateValue(airQualityIndexConnectedStateTypeId, true); thing->setStateValue(airQualityIndexCoStateTypeId, data.co); thing->setStateValue(airQualityIndexHumidityStateTypeId, data.humidity); @@ -221,11 +225,14 @@ void IntegrationPluginAqi::onAirQualityStationsReceived(QUuid requestId, QListfinish(Thing::ThingErrorNoError); } + if (m_asyncRequests.contains(requestId)) { - Thing *thing = myThings().findById(m_asyncRequests.take(requestId)); + Thing * thing = myThings().findById(m_asyncRequests.take(requestId)); if (!thing) return; - thing->setStateValue(airQualityIndexConnectedStateTypeId, true); + if (stations.length() != 0) { + thing->setStateValue(airQualityIndexStationNameStateTypeId, stations.first().name); + } } }