Merge PR #330: AQI: Added API key provider

This commit is contained in:
Jenkins nymea 2020-11-02 18:48:09 +01:00
commit c11cf8b3f1
8 changed files with 468 additions and 170 deletions

View File

@ -29,13 +29,13 @@ Besides the air pollution level the plug-in also states a cautionary statement.
Both states can be used to let nymea notify you about the pollution level and Both states can be used to let nymea notify you about the pollution level and
inform you what precautions should be taken. inform you what precautions should be taken.
## Requirments ## Requirements
* Valid "Air Quality Index" API Key * Valid "Air Quality Index" API Key
* This might be provided through the nymea community API Key provider or by setting a custom API Key in the plug-in settings.
* The package "nymea-plugin-airqualityindex" must be installed * The package "nymea-plugin-airqualityindex" must be installed
* Internet connection * Internet connection
## More ## More
More about the different Air Quality Levels: https://www.airnow.gov/index.cfm?action=aqibasics.aqi More about the different Air Quality Levels: https://www.airnow.gov/index.cfm?action=aqibasics.aqi

View File

@ -52,9 +52,10 @@ void AirQualityIndex::setApiKey(const QString &apiKey)
QUuid AirQualityIndex::searchByName(const QString &name) QUuid AirQualityIndex::searchByName(const QString &name)
{ {
if (m_apiKey.isEmpty()) if (m_apiKey.isEmpty()) {
qCWarning(dcAirQualityIndex()) << "API key is not set"; qCWarning(dcAirQualityIndex()) << "API key is not set, not sending request";
return "";
}
QUuid requestId = QUuid::createUuid();; QUuid requestId = QUuid::createUuid();;
QUrl url; QUrl url;
url.setUrl(m_baseUrl); url.setUrl(m_baseUrl);
@ -116,10 +117,11 @@ QUuid AirQualityIndex::searchByName(const QString &name)
QUuid AirQualityIndex::getDataByIp() QUuid AirQualityIndex::getDataByIp()
{ {
if (m_apiKey.isEmpty()) if (m_apiKey.isEmpty()) {
qCWarning(dcAirQualityIndex()) << "API key is not set"; qCWarning(dcAirQualityIndex()) << "API key is not set, not sending request";
return "";
QUuid requestId = QUuid::createUuid();; }
QUuid requestId = QUuid::createUuid();
QUrl url; QUrl url;
url.setUrl(m_baseUrl); url.setUrl(m_baseUrl);
url.setPath("/feed/here/"); url.setPath("/feed/here/");
@ -151,15 +153,17 @@ QUuid AirQualityIndex::getDataByIp()
return requestId; return requestId;
} }
QUuid AirQualityIndex::getDataByGeolocation(const QString &lat, const QString &lng) QUuid AirQualityIndex::getDataByGeolocation(double lat, double lng)
{ {
if (m_apiKey.isEmpty()) if (m_apiKey.isEmpty()) {
qCWarning(dcAirQualityIndex()) << "API key is not set"; qCWarning(dcAirQualityIndex()) << "API key is not set, not sending request";
return "";
}
QUuid requestId = QUuid::createUuid(); QUuid requestId = QUuid::createUuid();
QUrl url; QUrl url;
url.setUrl(m_baseUrl); url.setUrl(m_baseUrl);
url.setPath("/feed/geo:"+lat+";"+lng+"/"); url.setPath(QString("/feed/geo:%1;%2/").arg(lat).arg(lng));
QUrlQuery query; QUrlQuery query;
query.addQueryItem("token", m_apiKey); query.addQueryItem("token", m_apiKey);
url.setQuery(query); url.setQuery(query);
@ -198,6 +202,14 @@ bool AirQualityIndex::parseData(QUuid requestId, const QByteArray &data)
qCWarning(dcAirQualityIndex()) << "Received invalide JSON object"; qCWarning(dcAirQualityIndex()) << "Received invalide JSON object";
return false; return false;
} }
if (doc.toVariant().toMap().contains("status")) {
if (doc.toVariant().toMap().value("status") == "error") {
qCWarning(dcAirQualityIndex()) << "Server responded with error:" << doc.toVariant().toMap().value("data").toString();
return false;
}
}
Station station; Station station;
station.aqi = doc.toVariant().toMap().value("data").toMap().value("aqi").toInt(); station.aqi = doc.toVariant().toMap().value("data").toMap().value("aqi").toInt();
station.idx = doc.toVariant().toMap().value("data").toMap().value("idx").toInt(); station.idx = doc.toVariant().toMap().value("data").toMap().value("idx").toInt();

View File

@ -73,7 +73,7 @@ public:
void setApiKey(const QString &apiKey); void setApiKey(const QString &apiKey);
QUuid searchByName(const QString &name); QUuid searchByName(const QString &name);
QUuid getDataByIp(); QUuid getDataByIp();
QUuid getDataByGeolocation(const QString &lat, const QString &lng); QUuid getDataByGeolocation(double lat, double lng);
private: private:
NetworkAccessManager *m_networkAccessManager; NetworkAccessManager *m_networkAccessManager;

View File

@ -30,63 +30,37 @@
#include "integrationpluginaqi.h" #include "integrationpluginaqi.h"
#include "plugininfo.h" #include "plugininfo.h"
#include "nymeasettings.h"
#include <QNetworkAccessManager> #include <QNetworkAccessManager>
IntegrationPluginAqi::IntegrationPluginAqi() IntegrationPluginAqi::IntegrationPluginAqi()
{ {
connect(this, &IntegrationPluginAqi::configValueChanged, this, [this] (const ParamTypeId &paramTypeId, const QVariant &value) {
} if (paramTypeId == airQualityIndexPluginApiKeyParamTypeId && m_aqiConnection) {
if (!value.toString().isEmpty()) {
void IntegrationPluginAqi::startPairing(ThingPairingInfo *info) qCDebug(dcAirQualityIndex()) << "Custom API key updated";
{ m_aqiConnection->setApiKey(value.toString());
NetworkAccessManager *network = hardwareManager()->networkManager(); } else {
QNetworkReply *reply = network->get(QNetworkRequest(QUrl("https://api.waqi.info"))); qCDebug(dcAirQualityIndex()) << "Custom API key has been deleted";
connect(reply, &QNetworkReply::finished, this, [reply, info] { QString apiKey = apiKeyStorage()->requestKey("aqi").data("apiKey");
reply->deleteLater(); if (apiKey.isEmpty()) {
qCWarning(dcApiKeys()) << "No API Key is available, keeping the AQI connection as it is";
if (reply->error() == QNetworkReply::NetworkError::HostNotFoundError) { } else {
info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("Air quality index server is not reachable.")); m_aqiConnection->setApiKey(apiKey);
} else { }
info->finish(Thing::ThingErrorNoError, QT_TR_NOOP("Please enter your API token for Air Quality Index")); }
} }
}); });
} }
void IntegrationPluginAqi::confirmPairing(ThingPairingInfo *info, const QString &username, const QString &secret)
{
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();
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;
}
pluginStorage()->beginGroup(info->thingId().toString());
pluginStorage()->setValue("apiKey", secret);
pluginStorage()->endGroup();
info->finish(Thing::ThingErrorNoError);
});
}
void IntegrationPluginAqi::discoverThings(ThingDiscoveryInfo *info) void IntegrationPluginAqi::discoverThings(ThingDiscoveryInfo *info)
{ {
if (!m_aqiConnection) { if (!m_aqiConnection) {
QString apiKey = "74d31bb5ad9bcdeaed48097418b55188cb56d450"; //temporary key for discovery if(!createAqiConnection()) {
m_aqiConnection = new AirQualityIndex(hardwareManager()->networkManager(), apiKey, this); return info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("API key is not available."));
connect(m_aqiConnection, &AirQualityIndex::requestExecuted, this, &IntegrationPluginAqi::onRequestExecuted); }
connect(m_aqiConnection, &AirQualityIndex::dataReceived, this, &IntegrationPluginAqi::onAirQualityDataReceived);
connect(m_aqiConnection, &AirQualityIndex::stationsReceived, this, &IntegrationPluginAqi::onAirQualityStationsReceived);
connect(info, &ThingDiscoveryInfo::aborted, [this] { connect(info, &ThingDiscoveryInfo::aborted, [this] {
if (myThings().filterByThingClassId(airQualityIndexThingClassId).isEmpty()) { if (myThings().filterByThingClassId(airQualityIndexThingClassId).isEmpty()) {
m_aqiConnection->deleteLater(); m_aqiConnection->deleteLater();
@ -105,16 +79,11 @@ void IntegrationPluginAqi::setupThing(ThingSetupInfo *info)
{ {
if (info->thing()->thingClassId() == airQualityIndexThingClassId) { if (info->thing()->thingClassId() == airQualityIndexThingClassId) {
if (!m_aqiConnection) { if (!m_aqiConnection) {
pluginStorage()->beginGroup(info->thing()->id().toString()); if(!createAqiConnection()) {
QString apiKey = pluginStorage()->value("apiKey").toString(); return info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("API key is not available."));
pluginStorage()->endGroup(); }
m_aqiConnection = new AirQualityIndex(hardwareManager()->networkManager(), apiKey, this); double longitude = info->thing()->paramValue(airQualityIndexThingLongitudeParamTypeId).toDouble();
connect(m_aqiConnection, &AirQualityIndex::requestExecuted, this, &IntegrationPluginAqi::onRequestExecuted); double latitude = info->thing()->paramValue(airQualityIndexThingLatitudeParamTypeId).toDouble();
connect(m_aqiConnection, &AirQualityIndex::dataReceived, this, &IntegrationPluginAqi::onAirQualityDataReceived);
connect(m_aqiConnection, &AirQualityIndex::stationsReceived, this, &IntegrationPluginAqi::onAirQualityStationsReceived);
QString longitude = info->thing()->paramValue(airQualityIndexThingLongitudeParamTypeId).toString();
QString latitude = info->thing()->paramValue(airQualityIndexThingLatitudeParamTypeId).toString();
QUuid requestId = m_aqiConnection->getDataByGeolocation(latitude, longitude); QUuid requestId = m_aqiConnection->getDataByGeolocation(latitude, longitude);
m_asyncSetups.insert(requestId, info); m_asyncSetups.insert(requestId, info);
@ -128,11 +97,6 @@ void IntegrationPluginAqi::setupThing(ThingSetupInfo *info)
} else { } else {
// An AQI connection might be setup because of an discovery request // An AQI connection might be setup because of an discovery request
// or because there is already another thing using the connection // or because there is already another thing using the connection
// In any case the API key is being updated to avoid using the discovery key.
pluginStorage()->beginGroup(info->thing()->id().toString());
QString apiKey = pluginStorage()->value("apiKey").toString();
pluginStorage()->endGroup();
m_aqiConnection->setApiKey(apiKey);
info->finish(Thing::ThingErrorNoError); info->finish(Thing::ThingErrorNoError);
} }
} else { } else {
@ -150,8 +114,8 @@ void IntegrationPluginAqi::postSetupThing(Thing *thing)
return; return;
} }
QString longitude = thing->paramValue(airQualityIndexThingLongitudeParamTypeId).toString(); double longitude = thing->paramValue(airQualityIndexThingLongitudeParamTypeId).toDouble();
QString latitude = thing->paramValue(airQualityIndexThingLatitudeParamTypeId).toString(); double latitude = thing->paramValue(airQualityIndexThingLatitudeParamTypeId).toDouble();
QUuid requestId = m_aqiConnection->getDataByGeolocation(latitude, longitude); QUuid requestId = m_aqiConnection->getDataByGeolocation(latitude, longitude);
m_asyncRequests.insert(requestId, thing->id()); m_asyncRequests.insert(requestId, thing->id());
} }
@ -162,6 +126,24 @@ void IntegrationPluginAqi::postSetupThing(Thing *thing)
} }
} }
bool IntegrationPluginAqi::createAqiConnection()
{
QString apiKey = configValue(airQualityIndexPluginApiKeyParamTypeId).toString();
if (apiKey.isEmpty()) {
apiKey = apiKeyStorage()->requestKey("aqi").data("apiKey");
}
if (apiKey.isEmpty()) {
qCWarning(dcAirQualityIndex()) << "Could not find any API key for AQI";
return false;
}
m_aqiConnection = new AirQualityIndex(hardwareManager()->networkManager(), apiKey, this);
connect(m_aqiConnection, &AirQualityIndex::requestExecuted, this, &IntegrationPluginAqi::onRequestExecuted);
connect(m_aqiConnection, &AirQualityIndex::dataReceived, this, &IntegrationPluginAqi::onAirQualityDataReceived);
connect(m_aqiConnection, &AirQualityIndex::stationsReceived, this, &IntegrationPluginAqi::onAirQualityStationsReceived);
return true;
}
void IntegrationPluginAqi::thingRemoved(Thing *thing) void IntegrationPluginAqi::thingRemoved(Thing *thing)
{ {
Q_UNUSED(thing) Q_UNUSED(thing)
@ -259,9 +241,8 @@ void IntegrationPluginAqi::onPluginTimer()
return; return;
foreach (Thing *thing, myThings().filterByThingClassId(airQualityIndexThingClassId)) { foreach (Thing *thing, myThings().filterByThingClassId(airQualityIndexThingClassId)) {
double longitude = thing->paramValue(airQualityIndexThingLongitudeParamTypeId).toDouble();
QString longitude = thing->paramValue(airQualityIndexThingLongitudeParamTypeId).toString(); double latitude = thing->paramValue(airQualityIndexThingLatitudeParamTypeId).toDouble();
QString latitude = thing->paramValue(airQualityIndexThingLatitudeParamTypeId).toString();
QUuid requestId = m_aqiConnection->getDataByGeolocation(latitude, longitude); QUuid requestId = m_aqiConnection->getDataByGeolocation(latitude, longitude);
m_asyncRequests.insert(requestId, thing->id()); m_asyncRequests.insert(requestId, thing->id());
} }
@ -269,7 +250,16 @@ void IntegrationPluginAqi::onPluginTimer()
void IntegrationPluginAqi::onRequestExecuted(QUuid requestId, bool success) void IntegrationPluginAqi::onRequestExecuted(QUuid requestId, bool success)
{ {
qCDebug(dcAirQualityIndex()) << "Request executd, requestId:" << requestId << "Success:" << success << "is an async request:" << m_asyncRequests.contains(requestId); qCDebug(dcAirQualityIndex()) << "Request executed, requestId:" << requestId << "Success:" << success << "is an async request:" << m_asyncRequests.contains(requestId);
if (m_asyncDiscovery.contains(requestId) && !success) {
ThingDiscoveryInfo *info = m_asyncDiscovery.take(requestId);
info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("Air quality index server not available, please check your internet connection."));
if (myThings().filterByThingClassId(airQualityIndexThingClassId).isEmpty() && m_aqiConnection) {
m_aqiConnection->deleteLater();
m_aqiConnection = nullptr;
}
}
if (m_asyncRequests.contains(requestId)) { if (m_asyncRequests.contains(requestId)) {
Thing *thing = myThings().findById(m_asyncRequests.value(requestId)); Thing *thing = myThings().findById(m_asyncRequests.value(requestId));

View File

@ -50,8 +50,6 @@ class IntegrationPluginAqi : public IntegrationPlugin
public: public:
explicit IntegrationPluginAqi(); explicit IntegrationPluginAqi();
void startPairing(ThingPairingInfo *info) override;
void confirmPairing(ThingPairingInfo *info, const QString &username, const QString &secret) override;
void discoverThings(ThingDiscoveryInfo *info) override; void discoverThings(ThingDiscoveryInfo *info) override;
void setupThing(ThingSetupInfo *info) override; void setupThing(ThingSetupInfo *info) override;
void thingRemoved(Thing *thing) override; void thingRemoved(Thing *thing) override;
@ -64,6 +62,8 @@ private:
QHash<QUuid, ThingDiscoveryInfo *> m_asyncDiscovery; QHash<QUuid, ThingDiscoveryInfo *> m_asyncDiscovery;
QHash<QUuid, ThingSetupInfo *> m_asyncSetups; QHash<QUuid, ThingSetupInfo *> m_asyncSetups;
QHash<QUuid, ThingId> m_asyncRequests; QHash<QUuid, ThingId> m_asyncRequests;
QString getApiKey();
bool createAqiConnection();
private slots: private slots:
void onPluginTimer(); void onPluginTimer();

View File

@ -1,11 +1,21 @@
{ {
"name": "AirQualityIndex", "name": "AirQualityIndex",
"displayName": "AirQualityIndex", "displayName": "Air quality index",
"id": "57d69b76-4d2d-41ec-bef6-949a79ffbe6b", "id": "57d69b76-4d2d-41ec-bef6-949a79ffbe6b",
"paramTypes": [
{
"id": "b6861adb-7ed5-445f-b500-4df9eab866ef",
"name": "apiKey",
"displayName": "Custom API key",
"type": "QString",
"defaultValue": ""
}
],
"apiKeys": ["aqi"],
"vendors": [ "vendors": [
{ {
"name": "airQualityIndex", "name": "airQualityIndex",
"displayName": "Air Quality Index", "displayName": "Air quality index",
"id": "6c8e2ded-0a33-4e77-b76c-ea02168741ec", "id": "6c8e2ded-0a33-4e77-b76c-ea02168741ec",
"thingClasses": [ "thingClasses": [
{ {
@ -14,22 +24,21 @@
"displayName": "Air quality index", "displayName": "Air quality index",
"interfaces": ["windspeedsensor", "humiditysensor", "pressuresensor", "temperaturesensor", "connectable"], "interfaces": ["windspeedsensor", "humiditysensor", "pressuresensor", "temperaturesensor", "connectable"],
"createMethods": ["discovery", "user"], "createMethods": ["discovery", "user"],
"setupMethod": "displaypin",
"paramTypes": [ "paramTypes": [
{ {
"id": "afd5803b-6c98-44d7-9f4a-45e91cfb062e", "id": "afd5803b-6c98-44d7-9f4a-45e91cfb062e",
"name": "latitude", "name": "latitude",
"displayName": "Latitude", "displayName": "Latitude",
"type": "QString", "type": "double",
"inputType": "TextLine" "defaultValue": 0.00
}, },
{ {
"id": "4800d78e-a367-41f7-9bf6-7c81d40ce19a", "id": "4800d78e-a367-41f7-9bf6-7c81d40ce19a",
"name": "longitude", "name": "longitude",
"displayName": "Longitude", "displayName": "Longitude",
"type": "QString", "type": "double",
"inputType": "TextLine" "defaultValue": 0.00
} }
], ],
"stateTypes": [ "stateTypes": [
{ {

View File

@ -0,0 +1,287 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="de">
<context>
<name>AirQualityIndex</name>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="68"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="71"/>
<source>Air quality</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: airQuality, ID: {33a3329a-4117-4488-aa18-91c76056ed6e})
----------
The name of the StateType ({33a3329a-4117-4488-aa18-91c76056ed6e}) of ThingClass airQualityIndex</extracomment>
<translation>Luftqualität</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="74"/>
<source>Air quality changed</source>
<extracomment>The name of the EventType ({33a3329a-4117-4488-aa18-91c76056ed6e}) of ThingClass airQualityIndex</extracomment>
<translation>Luftqualität geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="77"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="80"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="83"/>
<source>Air quality index</source>
<extracomment>The name of the ThingClass ({23ea32c9-38b0-4155-bacc-3afa8c09f6ee})
----------
The name of the vendor ({6c8e2ded-0a33-4e77-b76c-ea02168741ec})
----------
The name of the plugin AirQualityIndex ({57d69b76-4d2d-41ec-bef6-949a79ffbe6b})</extracomment>
<translation>Air quality index</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="86"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="89"/>
<source>Carbon monoxide level (CO)</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: co, ID: {54ac72f3-6444-46a8-a43d-210c2a6fbfb5})
----------
The name of the StateType ({54ac72f3-6444-46a8-a43d-210c2a6fbfb5}) of ThingClass airQualityIndex</extracomment>
<translation>Kohlenmonoxidgehalt (CO)</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="92"/>
<source>Carbon monoxide level (CO) changed</source>
<extracomment>The name of the EventType ({54ac72f3-6444-46a8-a43d-210c2a6fbfb5}) of ThingClass airQualityIndex</extracomment>
<translation>Kohlenmonoxidgehalt (CO) geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="95"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="98"/>
<source>Cautionary statement</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: cautionaryStatement, ID: {cfece671-4e88-4c49-9456-e3f8f7c79ab3})
----------
The name of the StateType ({cfece671-4e88-4c49-9456-e3f8f7c79ab3}) of ThingClass airQualityIndex</extracomment>
<translation>Warnhinweis</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="101"/>
<source>Cautionary statement changed</source>
<extracomment>The name of the EventType ({cfece671-4e88-4c49-9456-e3f8f7c79ab3}) of ThingClass airQualityIndex</extracomment>
<translation>Warnhinweis geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="104"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="107"/>
<source>Coarse dust particles pollution level (PM10)</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: pm10, ID: {24b41ec4-e26b-4dfb-b52c-8e2b1bbdafc6})
----------
The name of the StateType ({24b41ec4-e26b-4dfb-b52c-8e2b1bbdafc6}) of ThingClass airQualityIndex</extracomment>
<translation>Verschmutzungsgrad der groben Staubpartikel (PM10)</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="110"/>
<source>Coarse dust particles pollution level (PM10) changed</source>
<extracomment>The name of the EventType ({24b41ec4-e26b-4dfb-b52c-8e2b1bbdafc6}) of ThingClass airQualityIndex</extracomment>
<translation>Verschmutzungsgrad der groben Staubpartikel (PM10) geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="113"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="116"/>
<source>Connected</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: connected, ID: {7b9135cd-2461-4d33-b2b3-3dc600983895})
----------
The name of the StateType ({7b9135cd-2461-4d33-b2b3-3dc600983895}) of ThingClass airQualityIndex</extracomment>
<translation>Verbunden</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="119"/>
<source>Connected changed</source>
<extracomment>The name of the EventType ({7b9135cd-2461-4d33-b2b3-3dc600983895}) of ThingClass airQualityIndex</extracomment>
<translation>Verbunden geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="122"/>
<source>Custom API key</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, Type: plugin, ID: {b6861adb-7ed5-445f-b500-4df9eab866ef})</extracomment>
<translation type="unfinished">Benutzerdefinierter API Key</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="125"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="128"/>
<source>Fine particles pollution level (PM2.5)</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: pm25, ID: {bc8c4c83-d229-4be4-8732-bc4f2390f399})
----------
The name of the StateType ({bc8c4c83-d229-4be4-8732-bc4f2390f399}) of ThingClass airQualityIndex</extracomment>
<translation>Verschmutzungsgrad der Feinstaubpartikel (PM2,5)</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="131"/>
<source>Fine particles pollution level (PM2.5) changed</source>
<extracomment>The name of the EventType ({bc8c4c83-d229-4be4-8732-bc4f2390f399}) of ThingClass airQualityIndex</extracomment>
<translation>Verschmutzungsgrad der Feinstaubpartikel (PM2,5) geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="134"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="137"/>
<source>Humidity</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: humidity, ID: {4fc45fca-25ab-45a0-b862-817eea1f51e3})
----------
The name of the StateType ({4fc45fca-25ab-45a0-b862-817eea1f51e3}) of ThingClass airQualityIndex</extracomment>
<translation>Luftfeuchtigkeit</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="140"/>
<source>Humidity changed</source>
<extracomment>The name of the EventType ({4fc45fca-25ab-45a0-b862-817eea1f51e3}) of ThingClass airQualityIndex</extracomment>
<translation>Luftfeuchtigkeit geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="143"/>
<source>Latitude</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, Type: thing, ID: {afd5803b-6c98-44d7-9f4a-45e91cfb062e})</extracomment>
<translation>Breitengrad</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="146"/>
<source>Longitude</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, Type: thing, ID: {4800d78e-a367-41f7-9bf6-7c81d40ce19a})</extracomment>
<translation>Längengrad</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="149"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="152"/>
<source>Nitrogen Dioxide level (NO2)</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: no2, ID: {6ed6c505-f36e-44c4-a982-f395b04e539b})
----------
The name of the StateType ({6ed6c505-f36e-44c4-a982-f395b04e539b}) of ThingClass airQualityIndex</extracomment>
<translation>Stickstoffdioxidgehalt (NO2)</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="155"/>
<source>Nitrogen Dioxide level (NO2) changed</source>
<extracomment>The name of the EventType ({6ed6c505-f36e-44c4-a982-f395b04e539b}) of ThingClass airQualityIndex</extracomment>
<translation>Stickstoffdioxidgehalt (NO2) geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="158"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="161"/>
<source>Ozone level (O3)</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: o3, ID: {4e88526d-009f-4820-9a84-09b3646d23c9})
----------
The name of the StateType ({4e88526d-009f-4820-9a84-09b3646d23c9}) of ThingClass airQualityIndex</extracomment>
<translation>Ozongehalt (O3)</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="164"/>
<source>Ozone level (O3) changed</source>
<extracomment>The name of the EventType ({4e88526d-009f-4820-9a84-09b3646d23c9}) of ThingClass airQualityIndex</extracomment>
<translation>Ozongehalt (O3) geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="167"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="170"/>
<source>Pressure</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: pressure, ID: {5f799040-08f8-44d1-aa0a-4cab7caad839})
----------
The name of the StateType ({5f799040-08f8-44d1-aa0a-4cab7caad839}) of ThingClass airQualityIndex</extracomment>
<translation>Luftdruck</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="173"/>
<source>Pressure changed</source>
<extracomment>The name of the EventType ({5f799040-08f8-44d1-aa0a-4cab7caad839}) of ThingClass airQualityIndex</extracomment>
<translation>Luftdruck</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="176"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="179"/>
<source>Station name</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: stationName, ID: {8385f3d5-62f7-482e-927c-b5d61a70d607})
----------
The name of the StateType ({8385f3d5-62f7-482e-927c-b5d61a70d607}) of ThingClass airQualityIndex</extracomment>
<translation>Stationsname</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="182"/>
<source>Station name changed</source>
<extracomment>The name of the EventType ({8385f3d5-62f7-482e-927c-b5d61a70d607}) of ThingClass airQualityIndex</extracomment>
<translation>Stationsname geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="185"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="188"/>
<source>Sulfur dioxide level (SO2)</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: so2, ID: {f3a05e65-a9b3-48fd-be43-688d4c293cc9})
----------
The name of the StateType ({f3a05e65-a9b3-48fd-be43-688d4c293cc9}) of ThingClass airQualityIndex</extracomment>
<translation>Schwefeldioxidgehalt (SO2)</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="191"/>
<source>Sulfur dioxide level (SO2) changed</source>
<extracomment>The name of the EventType ({f3a05e65-a9b3-48fd-be43-688d4c293cc9}) of ThingClass airQualityIndex</extracomment>
<translation>Schwefeldioxidgehalt (SO2) geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="194"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="197"/>
<source>Temperature</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: temperature, ID: {94219802-0a82-4761-99b3-c6b6dfc096db})
----------
The name of the StateType ({94219802-0a82-4761-99b3-c6b6dfc096db}) of ThingClass airQualityIndex</extracomment>
<translation>Temperatur</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="200"/>
<source>Temperature changed</source>
<extracomment>The name of the EventType ({94219802-0a82-4761-99b3-c6b6dfc096db}) of ThingClass airQualityIndex</extracomment>
<translation>Temperatur geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="203"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="206"/>
<source>Wind speed</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: windSpeed, ID: {c4366608-2511-428b-964e-2ad9e37f8f3c})
----------
The name of the StateType ({c4366608-2511-428b-964e-2ad9e37f8f3c}) of ThingClass airQualityIndex</extracomment>
<translation>Windgeschwindigkeit</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="209"/>
<source>Wind speed changed</source>
<extracomment>The name of the EventType ({c4366608-2511-428b-964e-2ad9e37f8f3c}) of ThingClass airQualityIndex</extracomment>
<translation>Windgeschwindigkeit geändert</translation>
</message>
</context>
<context>
<name>IntegrationPluginAqi</name>
<message>
<location filename="../integrationpluginaqi.cpp" line="54"/>
<location filename="../integrationpluginaqi.cpp" line="75"/>
<source>API key is not available.</source>
<translation>API-Key ist nicht verfügbar.</translation>
</message>
<message>
<location filename="../integrationpluginaqi.cpp" line="181"/>
<source>None</source>
<translation>Keine</translation>
</message>
<message>
<location filename="../integrationpluginaqi.cpp" line="184"/>
<location filename="../integrationpluginaqi.cpp" line="187"/>
<source>Active children and adults, and people with respiratory disease, such as asthma, should limit prolonged outdoor exertion.</source>
<translation>Aktive Kinder und Erwachsene sowie Menschen mit Atemwegserkrankungen wie Asthma sollten eine längere Belastung im Freien begrenzen.</translation>
</message>
<message>
<location filename="../integrationpluginaqi.cpp" line="190"/>
<source>Active children and adults, and people with respiratory disease, such as asthma, should avoid prolonged outdoor exertion; everyone else, especially children, should limit prolonged outdoor exertion</source>
<translation>Aktive Kinder und Erwachsene sowie Menschen mit Atemwegserkrankungen wie Asthma sollten eine längere Anstrengung im Freien vermeiden. Alle anderen, insbesondere Kinder, sollten längere Belastungen im Freien begrenzen</translation>
</message>
<message>
<location filename="../integrationpluginaqi.cpp" line="193"/>
<source>Active children and adults, and people with respiratory disease, such as asthma, should avoid all outdoor exertion; everyone else, especially children, should limit outdoor exertion.</source>
<translation>Aktive Kinder und Erwachsene sowie Menschen mit Atemwegserkrankungen wie Asthma sollten jede Anstrengung im Freien vermeiden. Alle anderen, insbesondere Kinder, sollten die Anstrengung im Freien einschränken.</translation>
</message>
<message>
<location filename="../integrationpluginaqi.cpp" line="196"/>
<source>Everyone should avoid all outdoor exertion</source>
<translation>Jeder sollte jede Anstrengung im Freien vermeiden.</translation>
</message>
<message>
<location filename="../integrationpluginaqi.cpp" line="249"/>
<source>Air quality index server not available, please check your internet connection.</source>
<translation>Air quality index Server nicht verfügbar, bitte überprüfe die Internetverbindung.</translation>
</message>
</context>
</TS>

View File

@ -4,14 +4,8 @@
<context> <context>
<name>AirQualityIndex</name> <name>AirQualityIndex</name>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="67"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="68"/>
<source>Air Quality Index</source> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="71"/>
<extracomment>The name of the vendor ({6c8e2ded-0a33-4e77-b76c-ea02168741ec})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="70"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="73"/>
<source>Air quality</source> <source>Air quality</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: airQuality, ID: {33a3329a-4117-4488-aa18-91c76056ed6e}) <extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: airQuality, ID: {33a3329a-4117-4488-aa18-91c76056ed6e})
---------- ----------
@ -19,26 +13,26 @@ The name of the StateType ({33a3329a-4117-4488-aa18-91c76056ed6e}) of ThingClass
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="76"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="74"/>
<source>Air quality changed</source> <source>Air quality changed</source>
<extracomment>The name of the EventType ({33a3329a-4117-4488-aa18-91c76056ed6e}) of ThingClass airQualityIndex</extracomment> <extracomment>The name of the EventType ({33a3329a-4117-4488-aa18-91c76056ed6e}) of ThingClass airQualityIndex</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="79"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="77"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="80"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="83"/>
<source>Air quality index</source> <source>Air quality index</source>
<extracomment>The name of the ThingClass ({23ea32c9-38b0-4155-bacc-3afa8c09f6ee})</extracomment> <extracomment>The name of the ThingClass ({23ea32c9-38b0-4155-bacc-3afa8c09f6ee})
----------
The name of the vendor ({6c8e2ded-0a33-4e77-b76c-ea02168741ec})
----------
The name of the plugin AirQualityIndex ({57d69b76-4d2d-41ec-bef6-949a79ffbe6b})</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="82"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="86"/>
<source>AirQualityIndex</source> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="89"/>
<extracomment>The name of the plugin AirQualityIndex ({57d69b76-4d2d-41ec-bef6-949a79ffbe6b})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="85"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="88"/>
<source>Carbon monoxide level (CO)</source> <source>Carbon monoxide level (CO)</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: co, ID: {54ac72f3-6444-46a8-a43d-210c2a6fbfb5}) <extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: co, ID: {54ac72f3-6444-46a8-a43d-210c2a6fbfb5})
---------- ----------
@ -46,14 +40,14 @@ The name of the StateType ({54ac72f3-6444-46a8-a43d-210c2a6fbfb5}) of ThingClass
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="91"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="92"/>
<source>Carbon monoxide level (CO) changed</source> <source>Carbon monoxide level (CO) changed</source>
<extracomment>The name of the EventType ({54ac72f3-6444-46a8-a43d-210c2a6fbfb5}) of ThingClass airQualityIndex</extracomment> <extracomment>The name of the EventType ({54ac72f3-6444-46a8-a43d-210c2a6fbfb5}) of ThingClass airQualityIndex</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="94"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="95"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="97"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="98"/>
<source>Cautionary statement</source> <source>Cautionary statement</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: cautionaryStatement, ID: {cfece671-4e88-4c49-9456-e3f8f7c79ab3}) <extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: cautionaryStatement, ID: {cfece671-4e88-4c49-9456-e3f8f7c79ab3})
---------- ----------
@ -61,14 +55,14 @@ The name of the StateType ({cfece671-4e88-4c49-9456-e3f8f7c79ab3}) of ThingClass
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="100"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="101"/>
<source>Cautionary statement changed</source> <source>Cautionary statement changed</source>
<extracomment>The name of the EventType ({cfece671-4e88-4c49-9456-e3f8f7c79ab3}) of ThingClass airQualityIndex</extracomment> <extracomment>The name of the EventType ({cfece671-4e88-4c49-9456-e3f8f7c79ab3}) of ThingClass airQualityIndex</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="103"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="104"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="106"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="107"/>
<source>Coarse dust particles pollution level (PM10)</source> <source>Coarse dust particles pollution level (PM10)</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: pm10, ID: {24b41ec4-e26b-4dfb-b52c-8e2b1bbdafc6}) <extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: pm10, ID: {24b41ec4-e26b-4dfb-b52c-8e2b1bbdafc6})
---------- ----------
@ -76,14 +70,14 @@ The name of the StateType ({24b41ec4-e26b-4dfb-b52c-8e2b1bbdafc6}) of ThingClass
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="109"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="110"/>
<source>Coarse dust particles pollution level (PM10) changed</source> <source>Coarse dust particles pollution level (PM10) changed</source>
<extracomment>The name of the EventType ({24b41ec4-e26b-4dfb-b52c-8e2b1bbdafc6}) of ThingClass airQualityIndex</extracomment> <extracomment>The name of the EventType ({24b41ec4-e26b-4dfb-b52c-8e2b1bbdafc6}) of ThingClass airQualityIndex</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="112"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="113"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="115"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="116"/>
<source>Connected</source> <source>Connected</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: connected, ID: {7b9135cd-2461-4d33-b2b3-3dc600983895}) <extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: connected, ID: {7b9135cd-2461-4d33-b2b3-3dc600983895})
---------- ----------
@ -91,14 +85,20 @@ The name of the StateType ({7b9135cd-2461-4d33-b2b3-3dc600983895}) of ThingClass
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="118"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="119"/>
<source>Connected changed</source> <source>Connected changed</source>
<extracomment>The name of the EventType ({7b9135cd-2461-4d33-b2b3-3dc600983895}) of ThingClass airQualityIndex</extracomment> <extracomment>The name of the EventType ({7b9135cd-2461-4d33-b2b3-3dc600983895}) of ThingClass airQualityIndex</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="121"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="122"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="124"/> <source>Custom API key</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, Type: plugin, ID: {b6861adb-7ed5-445f-b500-4df9eab866ef})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="125"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="128"/>
<source>Fine particles pollution level (PM2.5)</source> <source>Fine particles pollution level (PM2.5)</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: pm25, ID: {bc8c4c83-d229-4be4-8732-bc4f2390f399}) <extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: pm25, ID: {bc8c4c83-d229-4be4-8732-bc4f2390f399})
---------- ----------
@ -106,14 +106,14 @@ The name of the StateType ({bc8c4c83-d229-4be4-8732-bc4f2390f399}) of ThingClass
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="127"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="131"/>
<source>Fine particles pollution level (PM2.5) changed</source> <source>Fine particles pollution level (PM2.5) changed</source>
<extracomment>The name of the EventType ({bc8c4c83-d229-4be4-8732-bc4f2390f399}) of ThingClass airQualityIndex</extracomment> <extracomment>The name of the EventType ({bc8c4c83-d229-4be4-8732-bc4f2390f399}) of ThingClass airQualityIndex</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="130"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="134"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="133"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="137"/>
<source>Humidity</source> <source>Humidity</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: humidity, ID: {4fc45fca-25ab-45a0-b862-817eea1f51e3}) <extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: humidity, ID: {4fc45fca-25ab-45a0-b862-817eea1f51e3})
---------- ----------
@ -121,26 +121,26 @@ The name of the StateType ({4fc45fca-25ab-45a0-b862-817eea1f51e3}) of ThingClass
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="136"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="140"/>
<source>Humidity changed</source> <source>Humidity changed</source>
<extracomment>The name of the EventType ({4fc45fca-25ab-45a0-b862-817eea1f51e3}) of ThingClass airQualityIndex</extracomment> <extracomment>The name of the EventType ({4fc45fca-25ab-45a0-b862-817eea1f51e3}) of ThingClass airQualityIndex</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="139"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="143"/>
<source>Latitude</source> <source>Latitude</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, Type: thing, ID: {afd5803b-6c98-44d7-9f4a-45e91cfb062e})</extracomment> <extracomment>The name of the ParamType (ThingClass: airQualityIndex, Type: thing, ID: {afd5803b-6c98-44d7-9f4a-45e91cfb062e})</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="142"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="146"/>
<source>Longitude</source> <source>Longitude</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, Type: thing, ID: {4800d78e-a367-41f7-9bf6-7c81d40ce19a})</extracomment> <extracomment>The name of the ParamType (ThingClass: airQualityIndex, Type: thing, ID: {4800d78e-a367-41f7-9bf6-7c81d40ce19a})</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="145"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="149"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="148"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="152"/>
<source>Nitrogen Dioxide level (NO2)</source> <source>Nitrogen Dioxide level (NO2)</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: no2, ID: {6ed6c505-f36e-44c4-a982-f395b04e539b}) <extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: no2, ID: {6ed6c505-f36e-44c4-a982-f395b04e539b})
---------- ----------
@ -148,14 +148,14 @@ The name of the StateType ({6ed6c505-f36e-44c4-a982-f395b04e539b}) of ThingClass
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="151"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="155"/>
<source>Nitrogen Dioxide level (NO2) changed</source> <source>Nitrogen Dioxide level (NO2) changed</source>
<extracomment>The name of the EventType ({6ed6c505-f36e-44c4-a982-f395b04e539b}) of ThingClass airQualityIndex</extracomment> <extracomment>The name of the EventType ({6ed6c505-f36e-44c4-a982-f395b04e539b}) of ThingClass airQualityIndex</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="154"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="158"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="157"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="161"/>
<source>Ozone level (O3)</source> <source>Ozone level (O3)</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: o3, ID: {4e88526d-009f-4820-9a84-09b3646d23c9}) <extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: o3, ID: {4e88526d-009f-4820-9a84-09b3646d23c9})
---------- ----------
@ -163,14 +163,14 @@ The name of the StateType ({4e88526d-009f-4820-9a84-09b3646d23c9}) of ThingClass
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="160"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="164"/>
<source>Ozone level (O3) changed</source> <source>Ozone level (O3) changed</source>
<extracomment>The name of the EventType ({4e88526d-009f-4820-9a84-09b3646d23c9}) of ThingClass airQualityIndex</extracomment> <extracomment>The name of the EventType ({4e88526d-009f-4820-9a84-09b3646d23c9}) of ThingClass airQualityIndex</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="163"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="167"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="166"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="170"/>
<source>Pressure</source> <source>Pressure</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: pressure, ID: {5f799040-08f8-44d1-aa0a-4cab7caad839}) <extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: pressure, ID: {5f799040-08f8-44d1-aa0a-4cab7caad839})
---------- ----------
@ -178,14 +178,14 @@ The name of the StateType ({5f799040-08f8-44d1-aa0a-4cab7caad839}) of ThingClass
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="169"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="173"/>
<source>Pressure changed</source> <source>Pressure changed</source>
<extracomment>The name of the EventType ({5f799040-08f8-44d1-aa0a-4cab7caad839}) of ThingClass airQualityIndex</extracomment> <extracomment>The name of the EventType ({5f799040-08f8-44d1-aa0a-4cab7caad839}) of ThingClass airQualityIndex</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="172"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="176"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="175"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="179"/>
<source>Station name</source> <source>Station name</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: stationName, ID: {8385f3d5-62f7-482e-927c-b5d61a70d607}) <extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: stationName, ID: {8385f3d5-62f7-482e-927c-b5d61a70d607})
---------- ----------
@ -193,14 +193,14 @@ The name of the StateType ({8385f3d5-62f7-482e-927c-b5d61a70d607}) of ThingClass
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="178"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="182"/>
<source>Station name changed</source> <source>Station name changed</source>
<extracomment>The name of the EventType ({8385f3d5-62f7-482e-927c-b5d61a70d607}) of ThingClass airQualityIndex</extracomment> <extracomment>The name of the EventType ({8385f3d5-62f7-482e-927c-b5d61a70d607}) of ThingClass airQualityIndex</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="181"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="185"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="184"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="188"/>
<source>Sulfur dioxide level (SO2)</source> <source>Sulfur dioxide level (SO2)</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: so2, ID: {f3a05e65-a9b3-48fd-be43-688d4c293cc9}) <extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: so2, ID: {f3a05e65-a9b3-48fd-be43-688d4c293cc9})
---------- ----------
@ -208,14 +208,14 @@ The name of the StateType ({f3a05e65-a9b3-48fd-be43-688d4c293cc9}) of ThingClass
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="187"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="191"/>
<source>Sulfur dioxide level (SO2) changed</source> <source>Sulfur dioxide level (SO2) changed</source>
<extracomment>The name of the EventType ({f3a05e65-a9b3-48fd-be43-688d4c293cc9}) of ThingClass airQualityIndex</extracomment> <extracomment>The name of the EventType ({f3a05e65-a9b3-48fd-be43-688d4c293cc9}) of ThingClass airQualityIndex</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="190"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="194"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="193"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="197"/>
<source>Temperature</source> <source>Temperature</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: temperature, ID: {94219802-0a82-4761-99b3-c6b6dfc096db}) <extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: temperature, ID: {94219802-0a82-4761-99b3-c6b6dfc096db})
---------- ----------
@ -223,14 +223,14 @@ The name of the StateType ({94219802-0a82-4761-99b3-c6b6dfc096db}) of ThingClass
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="196"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="200"/>
<source>Temperature changed</source> <source>Temperature changed</source>
<extracomment>The name of the EventType ({94219802-0a82-4761-99b3-c6b6dfc096db}) of ThingClass airQualityIndex</extracomment> <extracomment>The name of the EventType ({94219802-0a82-4761-99b3-c6b6dfc096db}) of ThingClass airQualityIndex</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="199"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="203"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="202"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="206"/>
<source>Wind speed</source> <source>Wind speed</source>
<extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: windSpeed, ID: {c4366608-2511-428b-964e-2ad9e37f8f3c}) <extracomment>The name of the ParamType (ThingClass: airQualityIndex, EventType: windSpeed, ID: {c4366608-2511-428b-964e-2ad9e37f8f3c})
---------- ----------
@ -238,7 +238,7 @@ The name of the StateType ({c4366608-2511-428b-964e-2ad9e37f8f3c}) of ThingClass
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="205"/> <location filename="../../../build-nymea-plugins-Desktop-Debug/aqi/plugininfo.h" line="209"/>
<source>Wind speed changed</source> <source>Wind speed changed</source>
<extracomment>The name of the EventType ({c4366608-2511-428b-964e-2ad9e37f8f3c}) of ThingClass airQualityIndex</extracomment> <extracomment>The name of the EventType ({c4366608-2511-428b-964e-2ad9e37f8f3c}) of ThingClass airQualityIndex</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -247,41 +247,41 @@ The name of the StateType ({c4366608-2511-428b-964e-2ad9e37f8f3c}) of ThingClass
<context> <context>
<name>IntegrationPluginAqi</name> <name>IntegrationPluginAqi</name>
<message> <message>
<location filename="../integrationpluginaqi.cpp" line="43"/> <location filename="../integrationpluginaqi.cpp" line="54"/>
<source>Please enter your API token for Air Quality Index</source> <location filename="../integrationpluginaqi.cpp" line="75"/>
<source>API key is not available.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../integrationpluginaqi.cpp" line="60"/> <location filename="../integrationpluginaqi.cpp" line="181"/>
<source>This token is not valid.</source>
<extracomment>Error setting up device with invalid token</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationpluginaqi.cpp" line="193"/>
<source>None</source> <source>None</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../integrationpluginaqi.cpp" line="196"/> <location filename="../integrationpluginaqi.cpp" line="184"/>
<location filename="../integrationpluginaqi.cpp" line="199"/> <location filename="../integrationpluginaqi.cpp" line="187"/>
<source>Active children and adults, and people with respiratory disease, such as asthma, should limit prolonged outdoor exertion.</source> <source>Active children and adults, and people with respiratory disease, such as asthma, should limit prolonged outdoor exertion.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../integrationpluginaqi.cpp" line="202"/> <location filename="../integrationpluginaqi.cpp" line="190"/>
<source>Active children and adults, and people with respiratory disease, such as asthma, should avoid prolonged outdoor exertion; everyone else, especially children, should limit prolonged outdoor exertion</source> <source>Active children and adults, and people with respiratory disease, such as asthma, should avoid prolonged outdoor exertion; everyone else, especially children, should limit prolonged outdoor exertion</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../integrationpluginaqi.cpp" line="205"/> <location filename="../integrationpluginaqi.cpp" line="193"/>
<source>Active children and adults, and people with respiratory disease, such as asthma, should avoid all outdoor exertion; everyone else, especially children, should limit outdoor exertion.</source> <source>Active children and adults, and people with respiratory disease, such as asthma, should avoid all outdoor exertion; everyone else, especially children, should limit outdoor exertion.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../integrationpluginaqi.cpp" line="208"/> <location filename="../integrationpluginaqi.cpp" line="196"/>
<source>Everyone should avoid all outdoor exertion</source> <source>Everyone should avoid all outdoor exertion</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../integrationpluginaqi.cpp" line="249"/>
<source>Air quality index server not available, please check your internet connection.</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
</TS> </TS>