From e8cd075d48ffef3115560d2fd3831dce1171707e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 25 Nov 2022 17:44:46 +0100 Subject: [PATCH 1/2] netatmo: Rewrite integration using propper OAuth2 and add missing modules --- netatmo/README.md | 36 +- netatmo/integrationpluginnetatmo.cpp | 840 ++++++++++-------- netatmo/integrationpluginnetatmo.h | 58 +- netatmo/integrationpluginnetatmo.json | 354 +++++++- netatmo/meta.json | 3 +- netatmo/netatmo.pro | 6 +- netatmo/netatmobasestation.cpp | 138 --- netatmo/netatmobasestation.h | 84 -- netatmo/netatmoconnection.cpp | 264 ++++++ netatmo/netatmoconnection.h | 85 ++ netatmo/netatmooutdoormodule.cpp | 145 --- netatmo/netatmooutdoormodule.h | 80 -- ...69d14951-0c02-4877-bcef-dffdf48b7ccb-cs.ts | 446 +++++----- ...69d14951-0c02-4877-bcef-dffdf48b7ccb-da.ts | 446 +++++----- ...69d14951-0c02-4877-bcef-dffdf48b7ccb-de.ts | 382 ++++---- ...14951-0c02-4877-bcef-dffdf48b7ccb-en_US.ts | 360 ++++---- ...69d14951-0c02-4877-bcef-dffdf48b7ccb-es.ts | 446 +++++----- ...69d14951-0c02-4877-bcef-dffdf48b7ccb-fr.ts | 446 +++++----- ...69d14951-0c02-4877-bcef-dffdf48b7ccb-it.ts | 446 +++++----- ...69d14951-0c02-4877-bcef-dffdf48b7ccb-nl.ts | 446 +++++----- ...69d14951-0c02-4877-bcef-dffdf48b7ccb-pt.ts | 446 +++++----- 21 files changed, 2931 insertions(+), 3026 deletions(-) delete mode 100644 netatmo/netatmobasestation.cpp delete mode 100644 netatmo/netatmobasestation.h create mode 100644 netatmo/netatmoconnection.cpp create mode 100644 netatmo/netatmoconnection.h delete mode 100644 netatmo/netatmooutdoormodule.cpp delete mode 100644 netatmo/netatmooutdoormodule.h diff --git a/netatmo/README.md b/netatmo/README.md index 84ec1392..e06a3294 100644 --- a/netatmo/README.md +++ b/netatmo/README.md @@ -2,25 +2,41 @@ This plugin integrates the Netatmo Smart Home Weather Station. -## Supported Things +Once you add your Netatmo account, all connected and supported devices will appear automatically in your system. -* Netatmo Connection - * Netatmo account - * Username and password login -* Indoor Station - * Appears automatically +## Supported modules + +* Indoor main station * Temperature * Temperature minimum & maximum * Humidity * Pressure - * Noise * CO2 + * Noise * WiFi signal strength -* Outdoor Station - * Appears automatically +* Outdoor module * Temperature * Temperature minimum & maximum - * Humidity + * Humidity + * Battery information + * Signal strength +* Additional indoor module + * Temperature + * Temperature minimum & maximum + * Humidity + * Pressure + * CO2 + * Battery information + * Signal strength +* Smart Anemometer (Wind module): + * Wind direction + * Wind speed + * Battery information + * Signal strength +* Rain gauge: + * Rainfall last hour + * Rainfall last 24 hours + * Battery information * Signal strength ## Requirements diff --git a/netatmo/integrationpluginnetatmo.cpp b/netatmo/integrationpluginnetatmo.cpp index c3d84d7b..d320009c 100644 --- a/netatmo/integrationpluginnetatmo.cpp +++ b/netatmo/integrationpluginnetatmo.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2022, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -29,9 +29,12 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationpluginnetatmo.h" -#include "integrations/thing.h" +#include "netatmoconnection.h" #include "plugininfo.h" -#include "network/networkaccessmanager.h" + +#include +#include +#include #include #include @@ -44,60 +47,85 @@ IntegrationPluginNetatmo::IntegrationPluginNetatmo() void IntegrationPluginNetatmo::init() { - updateClientCredentials(); - connect(this, &IntegrationPlugin::configValueChanged, this, &IntegrationPluginNetatmo::updateClientCredentials); - connect(apiKeyStorage(), &ApiKeyStorage::keyAdded, this, &IntegrationPluginNetatmo::updateClientCredentials); - connect(apiKeyStorage(), &ApiKeyStorage::keyUpdated, this, &IntegrationPluginNetatmo::updateClientCredentials); } void IntegrationPluginNetatmo::startPairing(ThingPairingInfo *info) { - // Checking the client credentials - if (m_clientId.isEmpty() || m_clientSecret.isEmpty()) { - qCWarning(dcNetatmo()) << "Pairing failed, client credentials are not set"; - info->finish(Thing::ThingErrorAuthenticationFailure, QT_TR_NOOP("No API key installed")); + if (!loadClientCredentials()) { + info->finish(Thing::ThingErrorAuthenticationFailure, QT_TR_NOOP("No API key installed.")); return; } + + // Compose url + NetatmoConnection *connection = new NetatmoConnection(hardwareManager()->networkManager(), m_clientId, m_clientSecret, this); + QUrl loginUrl = connection->getLoginUrl(); + // Checking the internet connection - NetworkAccessManager *network = hardwareManager()->networkManager(); - QNetworkReply *reply = network->get(QNetworkRequest(QUrl("https://api.netatmo.net"))); + QNetworkReply *reply = hardwareManager()->networkManager()->get(QNetworkRequest(QUrl("https://api.netatmo.net"))); connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater); - connect(reply, &QNetworkReply::finished, info, [reply, info] { + connect(reply, &QNetworkReply::finished, info, [this, reply, info, connection, loginUrl]() { //The server replies usually 404 not found on this request //int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); if (reply->error() == QNetworkReply::NetworkError::HostNotFoundError) { qCWarning(dcNetatmo()) << "Netatmo server is not reachable"; - info->finish(Thing::ThingErrorAuthenticationFailure, QT_TR_NOOP("Netatmo server is not reachable.")); - } else { - info->finish(Thing::ThingErrorNoError, QT_TR_NOOP("Please enter the login credentials for your Netatmo account.")); + info->finish(Thing::ThingErrorSetupFailed, QT_TR_NOOP("The Netatmo server is not reachable.")); + return; } + + ThingId thingId = info->thingId(); + m_pendingSetups.insert(thingId, connection); + connect(info, &ThingPairingInfo::aborted, connection, [thingId, this]() { + qCWarning(dcNetatmo()) << "ThingPairingInfo aborted, cleaning up pending setup connection."; + m_pendingSetups.take(thingId)->deleteLater(); + }); + + qCDebug(dcNetatmo()) << "Netatmo server is reachable. Start the OAuth pairing process"; + info->setOAuthUrl(loginUrl); + info->finish(Thing::ThingErrorNoError); }); } -void IntegrationPluginNetatmo::confirmPairing(ThingPairingInfo *info, const QString &username, const QString &password) +void IntegrationPluginNetatmo::confirmPairing(ThingPairingInfo *info, const QString &username, const QString &secret) { - OAuth2 *authentication = new OAuth2(m_clientId, m_clientSecret, this); - authentication->setUrl(QUrl("https://api.netatmo.net/oauth2/token")); - authentication->setUsername(username); - authentication->setPassword(password); - authentication->setScope("read_station read_thermostat write_thermostat"); + Q_UNUSED(username) - connect(authentication, &OAuth2::authenticationChanged, info, [this, info, username, password, authentication](){ - if (authentication->authenticated()) { - pluginStorage()->beginGroup(info->thingId().toString()); - pluginStorage()->setValue("username", username); - pluginStorage()->setValue("password", password); - pluginStorage()->endGroup(); - m_pairingAuthentications.insert(authentication, info->thingId()); - info->finish(Thing::ThingErrorNoError); - } else { - qCWarning(dcNetatmo()) << "Wrong username or password"; - info->finish(Thing::ThingErrorAuthenticationFailure, QT_TR_NOOP("Wrong username or password")); + qCDebug(dcNetatmo()) << "Confirm pairing" << info->thingName(); + if (info->thingClassId() == netatmoConnectionThingClassId) { + QUrl url(secret); + QUrlQuery query(url); + QByteArray authorizationCode = query.queryItemValue("code").toLocal8Bit(); + if (authorizationCode.isEmpty()) { + qCWarning(dcNetatmo()) << "Error while pairing to netatmo server. No authorization code received."; + info->finish(Thing::ThingErrorAuthenticationFailure, QT_TR_NOOP("Failed to log in to the Netatmo server.")); + return; } - }); - authentication->startAuthentication(); - connect(info, &ThingPairingInfo::aborted, authentication, &OAuth2::deleteLater); + + NetatmoConnection *connection = m_pendingSetups.value(info->thingId()); + if (!connection) { + qWarning(dcNetatmo()) << "No NetatmoConnect connection found for device:" << info->thingName(); + m_pendingSetups.remove(info->thingId()); + info->finish(Thing::ThingErrorHardwareFailure); + return; + } + + connect(connection, &NetatmoConnection::receivedRefreshToken, info, [info, this](const QByteArray &refreshToken){ + qCDebug(dcNetatmo()) << "Received token:" << NetatmoConnection::censorDebugOutput(refreshToken); + pluginStorage()->beginGroup(info->thingId().toString()); + pluginStorage()->setValue("refresh_token", refreshToken); + pluginStorage()->endGroup(); + + info->finish(Thing::ThingErrorNoError); + }); + + qCDebug(dcNetatmo()) << "Authorization code" << NetatmoConnection::censorDebugOutput(authorizationCode); + if (!connection->getAccessTokenFromAuthorizationCode(authorizationCode)) { + qCWarning(dcNetatmo()) << "Failed to get token from authorization code."; + info->finish(Thing::ThingErrorAuthenticationFailure, QT_TR_NOOP("Failed to log in to the Netatmo server.")); + return; + } + + } } void IntegrationPluginNetatmo::setupThing(ThingSetupInfo *info) @@ -107,300 +135,280 @@ void IntegrationPluginNetatmo::setupThing(ThingSetupInfo *info) if (thing->thingClassId() == netatmoConnectionThingClassId) { qCDebug(dcNetatmo) << "Setup Netatmo connection" << thing->name() << thing->params(); - QString username; - QString password; - - if (pluginStorage()->childGroups().contains(thing->id().toString())) { - pluginStorage()->beginGroup(thing->id().toString()); - username = pluginStorage()->value("username").toString(); - password = pluginStorage()->value("password").toString(); - pluginStorage()->endGroup(); - } else { - /* username and password have been stored as thingParams, - * this is to migrate the params to plug-in storage. */ - ParamTypeId usernameParamTypeId = ParamTypeId("763c2c10-dee5-41c8-9f7e-ded741945e73"); - ParamTypeId passwordParamTypeId = ParamTypeId("c0d892d6-f359-4782-9d7d-8f74a3b53e3e"); - - username = thing->paramValue(usernameParamTypeId).toString(); - password = thing->paramValue(passwordParamTypeId).toString(); - - pluginStorage()->beginGroup(info->thing()->id().toString()); - pluginStorage()->setValue("username", username); - pluginStorage()->setValue("password", password); - pluginStorage()->endGroup(); - - // Delete username and password so it wont be visible in the things.conf file. - thing->setParamValue(ParamTypeId("763c2c10-dee5-41c8-9f7e-ded741945e73"), ""); - thing->setParamValue(ParamTypeId("c0d892d6-f359-4782-9d7d-8f74a3b53e3e"), ""); - } - - if (username.isEmpty() || password.isEmpty()) { - qCWarning(dcNetatmo()) << "Setup failed because of missing login credentials"; - info->finish(Thing::ThingErrorAuthenticationFailure, QT_TR_NOOP("Login credentials not found.")); - return; - } - if (m_clientId.isEmpty() || m_clientSecret.isEmpty()) { - qCWarning(dcNetatmo()) << "Setup failed because of missing client credentials"; - info->finish(Thing::ThingErrorAuthenticationFailure, QT_TR_NOOP("No API key installed")); + if (!loadClientCredentials()) { + info->finish(Thing::ThingErrorAuthenticationFailure, QT_TR_NOOP("No API key installed.")); return; } - if (m_authentications.values().contains(thing->id())) { + NetatmoConnection *connection = nullptr; + + // Handle reconfigure + if (m_connections.contains(thing)) { qCDebug(dcNetatmo()) << "Setup after reconfiguration, cleaning up"; - OAuth2 *auth = m_authentications.key(thing->id()); - m_authentications.remove(auth); - if (auth) { - auth->deleteLater(); - } + m_connections.take(thing)->deleteLater(); } - OAuth2 *authentication; - if (m_pairingAuthentications.values().contains(thing->id())) { - authentication = m_pairingAuthentications.key(thing->id()); - m_pairingAuthentications.remove(authentication); - qCDebug(dcNetatmo()) << "Authenticated from pairing process, not creating a new authentication"; - } else { - authentication = new OAuth2(m_clientId, m_clientSecret, this); - authentication->setUrl(QUrl("https://api.netatmo.net/oauth2/token")); - authentication->setUsername(username); - authentication->setPassword(password); - authentication->setScope("read_station read_thermostat write_thermostat"); - } - - if (authentication->authenticated()) { - thing->setStateValue(netatmoConnectionConnectedStateTypeId, true); - thing->setStateValue(netatmoConnectionLoggedInStateTypeId, true); - thing->setStateValue(netatmoConnectionUserDisplayNameStateTypeId, authentication->username()); - m_authentications.insert(authentication, thing->id()); - refreshData(thing, authentication->token()); + if (m_pendingSetups.keys().contains(thing->id())) { + // This thing setup is after a pairing process + qCDebug(dcNetatmo()) << "Netatmo available after successful OAuth2 setup. Using the existing object"; + connection = m_pendingSetups.take(thing->id()); + m_connections.insert(thing, connection); info->finish(Thing::ThingErrorNoError); - } else { - authentication->startAuthentication(); - // Report thing setup finished when authentication reports success - connect(authentication, &OAuth2::authenticationChanged, info, [this, info, thing, authentication](){ - if (!authentication->authenticated()) { - authentication->deleteLater(); - info->finish(Thing::ThingErrorAuthenticationFailure, QT_TR_NOOP("Error logging in to Netatmo server.")); - return; - } - thing->setStateValue(netatmoConnectionConnectedStateTypeId, true); - thing->setStateValue(netatmoConnectionLoggedInStateTypeId, true); - thing->setStateValue(netatmoConnectionUserDisplayNameStateTypeId, authentication->username()); - m_authentications.insert(authentication, thing->id()); - info->finish(Thing::ThingErrorNoError); + + thing->setStateValue("connected", true); + thing->setStateValue(netatmoConnectionLoggedInStateTypeId, true); + + connect(connection, &NetatmoConnection::authenticatedChanged, thing, [thing](bool authenticated){ + thing->setStateValue(netatmoConnectionLoggedInStateTypeId, authenticated); }); + + } else { + // The thing should have been already set up before, lets refresh the token if we have a refresh token, + // otherwise the user has to perform a reconfigure and login using OAuth2... (also old username password user end up here) + + if (doingLoginMigration(info)) + return; + + // No migration needed... + setupConnection(info); + return; } - - // Update thing connected state based on OAuth connected state - connect(authentication, &OAuth2::authenticationChanged, thing, [this, thing, authentication](){ - thing->setStateValue(netatmoConnectionLoggedInStateTypeId, authentication->authenticated()); - if (authentication->authenticated()) { - refreshData(thing, authentication->token()); - } - }); return; - } else if (thing->thingClassId() == indoorThingClassId) { qCDebug(dcNetatmo) << "Setup Netatmo indoor base station" << thing->params(); - NetatmoBaseStation *indoor = new NetatmoBaseStation(thing->paramValue(indoorThingNameParamTypeId).toString(), - thing->paramValue(indoorThingMacParamTypeId).toString(), - this); - - m_indoorDevices.insert(indoor, thing); - connect(indoor, SIGNAL(statesChanged()), this, SLOT(onIndoorStatesChanged())); - - return info->finish(Thing::ThingErrorNoError); + info->finish(Thing::ThingErrorNoError); + return; } else if (thing->thingClassId() == outdoorThingClassId) { qCDebug(dcNetatmo) << "Setup netatmo outdoor module" << thing->params(); - - // Migrate thing parameters after changing param type UUIDs in 0.14. - QMap migrationMap; - migrationMap.insert("a97d256c-e159-4aa0-bc71-6bd7cd0688b3", outdoorThingNameParamTypeId); - migrationMap.insert("157d470a-e579-4d0e-b879-6b5bfa8e34ae", outdoorThingMacParamTypeId); - - ParamList migratedParams; - foreach (const Param &oldParam, thing->params()) { - QString oldId = oldParam.paramTypeId().toString(); - oldId.remove(QRegExp("[{}]")); - if (migrationMap.contains(oldId)) { - ParamTypeId newId = migrationMap.value(oldId); - QVariant oldValue = oldParam.value(); - qCDebug(dcNetatmo()) << "Migrating netatmo outdoor station param:" << oldId << "->" << newId << ":" << oldValue; - Param newParam(newId, oldValue); - migratedParams << newParam; - } else { - migratedParams << oldParam; - } - } - thing->setParams(migratedParams); - // Migration done - - NetatmoOutdoorModule *outdoor = new NetatmoOutdoorModule(thing->paramValue(outdoorThingNameParamTypeId).toString(), - thing->paramValue(outdoorThingMacParamTypeId).toString(), - thing->paramValue(outdoorThingBaseStationParamTypeId).toString(), - this); - - m_outdoorDevices.insert(outdoor, thing); - connect(outdoor, SIGNAL(statesChanged()), this, SLOT(onOutdoorStatesChanged())); - - return info->finish(Thing::ThingErrorNoError); - } - info->finish(Thing::ThingErrorThingClassNotFound); - qCWarning(dcNetatmo()) << "Unhandled thing class in setupDevice"; -} - -void IntegrationPluginNetatmo::thingRemoved(Thing *thing) -{ - if (thing->thingClassId() == netatmoConnectionThingClassId) { - OAuth2 * authentication = m_authentications.key(thing->id()); - m_authentications.remove(authentication); - authentication->deleteLater(); - } else if (thing->thingClassId() == indoorThingClassId) { - NetatmoBaseStation *indoor = m_indoorDevices.key(thing); - m_indoorDevices.remove(indoor); - indoor->deleteLater(); - } else if (thing->thingClassId() == outdoorThingClassId) { - NetatmoOutdoorModule *outdoor = m_outdoorDevices.key(thing); - m_outdoorDevices.remove(outdoor); - outdoor->deleteLater(); - } - - if (myThings().isEmpty()) { - if (m_pluginTimer3s) { - hardwareManager()->pluginTimerManager()->unregisterTimer(m_pluginTimer3s); - m_pluginTimer3s = nullptr; - } - if (m_pluginTimer10m) { - hardwareManager()->pluginTimerManager()->unregisterTimer(m_pluginTimer10m); - m_pluginTimer10m = nullptr; - } + info->finish(Thing::ThingErrorNoError); + return; + } else if (thing->thingClassId() == windModuleThingClassId) { + qCDebug(dcNetatmo) << "Setup netatmo wind module" << thing->params(); + info->finish(Thing::ThingErrorNoError); + return; + } else if (thing->thingClassId() == rainGaugeThingClassId) { + qCDebug(dcNetatmo) << "Setup netatmo wind module" << thing->params(); + info->finish(Thing::ThingErrorNoError); + return; + } else if (thing->thingClassId() == indoorModuleThingClassId) { + qCDebug(dcNetatmo) << "Setup netatmo indoor module" << thing->params(); + info->finish(Thing::ThingErrorNoError); + return; + } else { + Q_ASSERT_X(false, "setupThing", QString("Unhandled thingClassId: %1").arg(info->thing()->thingClassId().toString()).toUtf8()); } } void IntegrationPluginNetatmo::postSetupThing(Thing *thing) { - if (thing->thingClassId() == indoorThingClassId) { + if (thing->thingClassId() == netatmoConnectionThingClassId) { + refreshConnection(thing); + } else if (thing->thingClassId() == indoorThingClassId) { QString stationId = thing->paramValue(indoorThingMacParamTypeId).toString(); - if (m_indoorStationInitData.contains(stationId) && m_indoorDevices.values().contains(thing)) { - m_indoorDevices.key(thing)->updateStates(m_indoorStationInitData.take(stationId)); + if (m_temporaryInitData.contains(stationId)) { + updateModuleStates(thing, m_temporaryInitData.take(stationId)); } } else if (thing->thingClassId() == outdoorThingClassId) { QString stationId = thing->paramValue(outdoorThingMacParamTypeId).toString(); - if (m_outdoorStationInitData.contains(stationId) && m_outdoorDevices.values().contains(thing)) { - m_outdoorDevices.key(thing)->updateStates(m_outdoorStationInitData.take(stationId)); + if (m_temporaryInitData.contains(stationId)) { + updateModuleStates(thing, m_temporaryInitData.take(stationId)); } } - if (!m_pluginTimer3s) { - m_pluginTimer3s = hardwareManager()->pluginTimerManager()->registerTimer(3); - connect(m_pluginTimer3s, &PluginTimer::timeout, this, [this] { - // Checking the connection to the Netatmo server - NetworkAccessManager *network = hardwareManager()->networkManager(); - QNetworkReply *reply = network->get(QNetworkRequest(QUrl("https://api.netatmo.net"))); - connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater); - connect(reply, &QNetworkReply::finished, this, [reply, this] { - - bool connected = (reply->error() != QNetworkReply::NetworkError::HostNotFoundError); - Q_FOREACH(Thing *thing, myThings().filterByThingClassId(netatmoConnectionThingClassId)) { - thing->setStateValue(netatmoConnectionConnectedStateTypeId, connected); - } - }); + if (!m_pluginTimer) { + m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(600); + connect(m_pluginTimer, &PluginTimer::timeout, this, [this](){ + foreach (Thing *connectionThing, myThings().filterByThingClassId(netatmoConnectionThingClassId)) { + refreshConnection(connectionThing); + } }); } - if (!m_pluginTimer10m) { - m_pluginTimer10m = hardwareManager()->pluginTimerManager()->registerTimer(600); - connect(m_pluginTimer10m, &PluginTimer::timeout, this, &IntegrationPluginNetatmo::onPluginTimer); - } } -void IntegrationPluginNetatmo::refreshData(Thing *thing, const QString &token) +void IntegrationPluginNetatmo::thingRemoved(Thing *thing) { - QUrlQuery query; - query.addQueryItem("access_token", token); + if (thing->thingClassId() == netatmoConnectionThingClassId) { + m_connections.take(thing)->deleteLater(); + } - QUrl url("https://api.netatmo.com/api/getstationsdata"); - url.setQuery(query); + if (myThings().isEmpty() && m_pluginTimer) { + if (m_pluginTimer) { + hardwareManager()->pluginTimerManager()->unregisterTimer(m_pluginTimer); + m_pluginTimer = nullptr; + } + } +} - QNetworkReply *reply = hardwareManager()->networkManager()->get(QNetworkRequest(url)); - connect(reply, &QNetworkReply::finished, this, [this, reply, thing] { - reply->deleteLater(); +void IntegrationPluginNetatmo::setupConnection(ThingSetupInfo *info) +{ + Thing *thing = info->thing(); + qCDebug(dcNetatmo()) << "Setup netatmo account" << thing->name(); + + // Load refresh token + pluginStorage()->beginGroup(thing->id().toString()); + QByteArray refreshToken = pluginStorage()->value("refresh_token").toByteArray(); + pluginStorage()->endGroup(); + if (refreshToken.isEmpty()) { + info->finish(Thing::ThingErrorAuthenticationFailure, QT_TR_NOOP("Could not authenticate on the server. Please reconfigure the connection.")); + return; + } + + // Create new connection + NetatmoConnection *connection = new NetatmoConnection(hardwareManager()->networkManager(), m_clientId, m_clientSecret, thing); + connect(connection, &NetatmoConnection::authenticatedChanged, info, [this, info, thing, connection](bool authenticated){ + if (authenticated) { + m_connections.insert(thing, connection); + qCDebug(dcNetatmo()) << "Authenticated successfully the netatmo connection."; + info->finish(Thing::ThingErrorNoError); + thing->setStateValue("connected", true); + } else { + qCDebug(dcNetatmo()) << "Authentication process failed."; + info->finish(Thing::ThingErrorAuthenticationFailure, QT_TR_NOOP("Authentication failed. Please reconfigure the connection.")); + } + }); + + connect(info, &ThingSetupInfo::aborted, connection, [this, thing, connection] { + if (m_connections.contains(thing)) + m_connections.remove(thing); + + connection->deleteLater(); + }); + + connect(connection, &NetatmoConnection::authenticatedChanged, thing, [thing](bool authenticated){ + thing->setStateValue(netatmoConnectionLoggedInStateTypeId, authenticated); + }); + + connection->getAccessTokenFromRefreshToken(refreshToken); +} + +void IntegrationPluginNetatmo::refreshConnection(Thing *thing) +{ + qCDebug(dcNetatmo()) << "Refresh connection" << thing; + + NetatmoConnection *connection = m_connections.value(thing); + if (!connection) { + qCWarning(dcNetatmo()) << "Failed to refresh data. The connection object does not exist"; + return; + } + + QNetworkReply *reply = connection->getStationData(); + connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater); + connect(reply, &QNetworkReply::finished, this, [this, reply, thing]() { int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); - - // check HTTP status code - if (status != 200) { - qCWarning(dcNetatmo) << "Refresh data reply HTTP error:" << status << reply->errorString(); - thing->setStateValue(netatmoConnectionConnectedStateTypeId, false); + if (reply->error() != QNetworkReply::NoError) { + qCWarning(dcNetatmo()) << "Failed to refresh station data. Network reply returned with error" << status << reply->errorString(); + thing->setStateValue("connected", false); return; } - thing->setStateValue(netatmoConnectionConnectedStateTypeId, true); - // check JSON file + + thing->setStateValue("connected", true); + QJsonParseError error; QJsonDocument jsonDoc = QJsonDocument::fromJson(reply->readAll(), &error); if (error.error != QJsonParseError::NoError) { - qCWarning(dcNetatmo) << "Refresh data reply JSON error:" << error.errorString(); + qCWarning(dcNetatmo()) << "OAuth2: Failed to get token. Refresh data reply JSON error:" << error.errorString(); return; } - qCDebug(dcNetatmo) << qUtf8Printable(jsonDoc.toJson()); - processRefreshData(jsonDoc.toVariant().toMap(), thing); + QVariantMap responseMap = jsonDoc.toVariant().toMap(); + if (responseMap.value("status") != "ok") { + qCWarning(dcNetatmo()) << "Refresh station data returned status not ok:" << responseMap.value("status").toString(); + return; + } + + qCDebug(dcNetatmo()) << qUtf8Printable(jsonDoc.toJson(QJsonDocument::Indented)); + QVariantMap bodyMap = responseMap.value("body").toMap(); + thing->setStateValue("username", bodyMap.value("user").toMap().value("mail").toString()); + processRefreshData(thing, bodyMap.value("devices").toList()); }); } -void IntegrationPluginNetatmo::processRefreshData(const QVariantMap &data, Thing *connectionDevice) +void IntegrationPluginNetatmo::processRefreshData(Thing *connectionThing, const QVariantList &devices) { - // Process the data - if (data.contains("body")) { - // check devices - if (data.value("body").toMap().contains("devices")) { - QVariantList deviceList = data.value("body").toMap().value("devices").toList(); - // check devices - foreach (QVariant deviceVariant, deviceList) { - QVariantMap deviceMap = deviceVariant.toMap(); - // we support currently only NAMain devices - if (deviceMap.value("type").toString() == "NAMain") { - Thing *indoorDevice = findIndoorDevice(deviceMap.value("_id").toString()); - // check if we have to create the thing (auto) - if (!indoorDevice) { - ThingDescriptor descriptor(indoorThingClassId, deviceMap.value("module_name").toString(), deviceMap.value("station_name").toString(), connectionDevice->id()); + foreach (QVariant deviceVariant, devices) { + QVariantMap deviceMap = deviceVariant.toMap(); + if (deviceMap.value("type").toString() == "NAMain") { + Thing *existingThing = findIndoorStationThing(deviceMap.value("_id").toString()); + // Check if we have to create the thing (auto) + if (!existingThing) { + ThingDescriptor descriptor(indoorThingClassId, deviceMap.value("module_name").toString() + " " + deviceMap.value("station_name").toString(), QString(), connectionThing->id()); + ParamList params; + params.append(Param(indoorThingMacParamTypeId, deviceMap.value("_id").toString())); + descriptor.setParams(params); + m_temporaryInitData.insert(deviceMap.value("_id").toString(), deviceMap); + emit autoThingsAppeared({descriptor}); + } else { + // Update the indoor station states + updateModuleStates(existingThing, deviceMap); + } + } + + /* Check modules of this station... + * + * NAMain: Indoor station ("Temperature", "CO2", "Humidity", "Noise", "Pressure") + * NAModule1: Outdoor module ("Temperature, Humidity") + * NAModule2: Wind module ("Wind") + * NAModule3: Rain gauge module ("Rain") + * NAModule4: Indoor module ("Temperature, Humidity, CO2") + */ + + if (deviceMap.contains("modules")) { + QVariantList modulesList = deviceMap.value("modules").toList(); + foreach (QVariant moduleVariant, modulesList) { + QVariantMap moduleMap = moduleVariant.toMap(); + + if (moduleMap.value("type").toString() == "NAModule1") { + Thing *existingThing = findOutdoorModuleThing(moduleMap.value("_id").toString()); + if (!existingThing) { + ThingDescriptor descriptor(outdoorThingClassId, moduleMap.value("module_name").toString() + " " + moduleMap.value("station_name").toString(), QString(), connectionThing->id()); ParamList params; - params.append(Param(indoorThingNameParamTypeId, deviceMap.value("station_name").toString())); - params.append(Param(indoorThingMacParamTypeId, deviceMap.value("_id").toString())); + params.append(Param(outdoorThingMacParamTypeId, moduleMap.value("_id").toString())); + params.append(Param(outdoorThingBaseStationParamTypeId, deviceMap.value("_id").toString())); descriptor.setParams(params); - m_indoorStationInitData.insert(deviceMap.value("_id").toString(), deviceMap); + m_temporaryInitData.insert(moduleMap.value("_id").toString(), moduleMap); emit autoThingsAppeared({descriptor}); } else { - if (m_indoorDevices.values().contains(indoorDevice)) { - m_indoorDevices.key(indoorDevice)->updateStates(deviceMap); - } + updateModuleStates(existingThing, moduleMap); } - } - - // check modules - if (deviceMap.contains("modules")) { - QVariantList modulesList = deviceMap.value("modules").toList(); - foreach (QVariant moduleVariant, modulesList) { - QVariantMap moduleMap = moduleVariant.toMap(); - // we support currently only NAModule1 - if (moduleMap.value("type").toString() == "NAModule1") { - Thing *outdoorDevice = findOutdoorDevice(moduleMap.value("_id").toString()); - - // check if we have to create the thing (auto) - if (!outdoorDevice) { - ThingDescriptor descriptor(outdoorThingClassId, "Outdoor Module", moduleMap.value("module_name").toString(), connectionDevice->id()); - ParamList params; - params.append(Param(outdoorThingNameParamTypeId, moduleMap.value("module_name").toString())); - params.append(Param(outdoorThingMacParamTypeId, moduleMap.value("_id").toString())); - params.append(Param(outdoorThingBaseStationParamTypeId, deviceMap.value("_id").toString())); - descriptor.setParams(params); - m_outdoorStationInitData.insert(moduleMap.value("_id").toString(), moduleMap); - emit autoThingsAppeared({descriptor}); - } else { - if (m_outdoorDevices.values().contains(outdoorDevice)) { - m_outdoorDevices.key(outdoorDevice)->updateStates(moduleMap); - } - } - } + } else if (moduleMap.value("type").toString() == "NAModule2") { + Thing *existingThing = findWindModuleThing(moduleMap.value("_id").toString()); + if (!existingThing) { + ThingDescriptor descriptor(windModuleThingClassId, moduleMap.value("module_name").toString() + " " + moduleMap.value("station_name").toString(), QString(), connectionThing->id()); + ParamList params; + params.append(Param(windModuleThingMacParamTypeId, moduleMap.value("_id").toString())); + params.append(Param(windModuleThingBaseStationParamTypeId, deviceMap.value("_id").toString())); + descriptor.setParams(params); + m_temporaryInitData.insert(moduleMap.value("_id").toString(), moduleMap); + emit autoThingsAppeared({descriptor}); + } else { + updateModuleStates(existingThing, moduleMap); + } + } else if (moduleMap.value("type").toString() == "NAModule3") { + Thing *existingThing = findRainGaugeModuleThing(moduleMap.value("_id").toString()); + if (!existingThing) { + ThingDescriptor descriptor(rainGaugeThingClassId, moduleMap.value("module_name").toString() + " " + moduleMap.value("station_name").toString(), QString(), connectionThing->id()); + ParamList params; + params.append(Param(rainGaugeThingMacParamTypeId, moduleMap.value("_id").toString())); + params.append(Param(rainGaugeThingBaseStationParamTypeId, deviceMap.value("_id").toString())); + descriptor.setParams(params); + m_temporaryInitData.insert(moduleMap.value("_id").toString(), moduleMap); + emit autoThingsAppeared({descriptor}); + } else { + updateModuleStates(existingThing, moduleMap); + } + } else if (moduleMap.value("type").toString() == "NAModule4") { + Thing *existingThing = findIndoorModuleThing(moduleMap.value("_id").toString()); + if (!existingThing) { + ThingDescriptor descriptor(indoorModuleThingClassId, moduleMap.value("module_name").toString() + " " + moduleMap.value("station_name").toString(), QString(), connectionThing->id()); + ParamList params; + params.append(Param(indoorModuleThingMacParamTypeId, moduleMap.value("_id").toString())); + params.append(Param(indoorModuleThingBaseStationParamTypeId, deviceMap.value("_id").toString())); + descriptor.setParams(params); + m_temporaryInitData.insert(moduleMap.value("_id").toString(), moduleMap); + emit autoThingsAppeared({descriptor}); + } else { + updateModuleStates(existingThing, moduleMap); } } } @@ -408,102 +416,230 @@ void IntegrationPluginNetatmo::processRefreshData(const QVariantMap &data, Thing } } -Thing *IntegrationPluginNetatmo::findIndoorDevice(const QString &macAddress) +Thing *IntegrationPluginNetatmo::findIndoorStationThing(const QString &macAddress) { - foreach (Thing *thing, myThings()) { - if (thing->thingClassId() == indoorThingClassId) { - if (thing->paramValue(indoorThingMacParamTypeId).toString() == macAddress) { - return thing; - } + foreach (Thing *thing, myThings().filterByThingClassId(indoorThingClassId)) { + if (thing->paramValue(indoorThingMacParamTypeId).toString() == macAddress) { + return thing; } } + return nullptr; } -Thing *IntegrationPluginNetatmo::findOutdoorDevice(const QString &macAddress) +Thing *IntegrationPluginNetatmo::findOutdoorModuleThing(const QString &macAddress) { - foreach (Thing *thing, myThings()) { - if (thing->thingClassId() == outdoorThingClassId) { - if (thing->paramValue(outdoorThingMacParamTypeId).toString() == macAddress) { - return thing; - } + foreach (Thing *thing, myThings().filterByThingClassId(outdoorThingClassId)) { + if (thing->paramValue(outdoorThingMacParamTypeId).toString() == macAddress) { + return thing; } } + return nullptr; } -void IntegrationPluginNetatmo::onPluginTimer() +Thing *IntegrationPluginNetatmo::findIndoorModuleThing(const QString &macAddress) { - foreach (OAuth2 *authentication, m_authentications.keys()) { - Thing *thing = myThings().findById(m_authentications.value(authentication)); - if (!thing) { - qCWarning(dcNetatmo()) << "Authentication without an associated Netatmo connection thing" << authentication->username(); - m_authentications.remove(authentication); - continue; + foreach (Thing *thing, myThings().filterByThingClassId(indoorModuleThingClassId)) { + if (thing->paramValue(indoorModuleThingMacParamTypeId).toString() == macAddress) { + return thing; } - if (authentication->authenticated()) { - refreshData(thing, authentication->token()); + } + + return nullptr; +} + +Thing *IntegrationPluginNetatmo::findWindModuleThing(const QString &macAddress) +{ + foreach (Thing *thing, myThings().filterByThingClassId(windModuleThingClassId)) { + if (thing->paramValue(windModuleThingMacParamTypeId).toString() == macAddress) { + return thing; + } + } + + return nullptr; +} + +Thing *IntegrationPluginNetatmo::findRainGaugeModuleThing(const QString &macAddress) +{ + foreach (Thing *thing, myThings().filterByThingClassId(rainGaugeThingClassId)) { + if (thing->paramValue(rainGaugeThingMacParamTypeId).toString() == macAddress) { + return thing; + } + } + + return nullptr; +} + +void IntegrationPluginNetatmo::updateModuleStates(Thing *thing, const QVariantMap &data) +{ + // check data timestamp + if (data.contains("last_message")) + thing->setStateValue("updateTime", data.value("last_message").toInt()); + + // update dashboard data + if (data.contains("dashboard_data")) { + QVariantMap measurments = data.value("dashboard_data").toMap(); + if (measurments.contains("Temperature")) + thing->setStateValue("temperature", measurments.value("Temperature").toDouble()); + + if (measurments.contains("min_temp")) + thing->setStateValue("temperatureMin", measurments.value("min_temp").toDouble()); + + if (measurments.contains("max_temp")) + thing->setStateValue("temperatureMax", measurments.value("max_temp").toDouble()); + + if (measurments.contains("Humidity")) + thing->setStateValue("humidity", measurments.value("Humidity").toInt()); + + if (measurments.contains("AbsolutePressure")) + thing->setStateValue("pressure", measurments.value("AbsolutePressure").toDouble()); + + if (measurments.contains("CO2")) + thing->setStateValue("co2", measurments.value("CO2").toInt()); + + if (measurments.contains("Noise")) + thing->setStateValue("noise", measurments.value("Noise").toInt()); + + // Wind speed (given in km/s, we need m/s) + if (measurments.contains("WindStrength")) + thing->setStateValue("windSpeed", measurments.value("WindStrength").toDouble() / 3.6); + + if (measurments.contains("WindAngle")) + thing->setStateValue("windDirection", measurments.value("WindAngle").toInt()); + + // Rain + if (measurments.contains("sum_rain_1")) + thing->setStateValue("rainfallLastHour", measurments.value("sum_rain_1").toInt()); + + if (measurments.contains("sum_rain_24")) + thing->setStateValue("rainfallLastDay", measurments.value("sum_rain_24").toInt()); + + } + + // Battery + if (thing->thingClass().hasStateType("batteryLevel")) { + if (data.contains("battery_percent")) { + thing->setStateValue("batteryLevel", data.value("battery_percent").toInt()); } else { - authentication->startAuthentication(); + // Fallback for older versions, calculate from voltage + if (data.contains("battery_vp")) { + int battery = data.value("battery_vp").toInt(); + if (battery >= 6000) { + thing->setStateValue("batteryLevel", 100); + } else if (battery <= 3600) { + thing->setStateValue("batteryLevel", 0); + } else { + int delta = battery - 3600; + thing->setStateValue("batteryLevel", qRound(100.0 * delta / 2400)); + } + } + } + + thing->setStateValue("batteryCritical", thing->stateValue("batteryLevel").toInt() < 10); + } + + // Signal strength + if (data.contains("rf_status")) { + int signalStrength = data.value("rf_status").toInt(); + if (signalStrength <= 60) { + thing->setStateValue("signalStrength", 100); + } else if (signalStrength >= 90) { + thing->setStateValue("signalStrength", 0); + } else { + int delta = 30 - (signalStrength - 60); + thing->setStateValue("signalStrength", qRound(100.0 * delta / 30.0)); } } + + // update reachable state + if (data.contains("reachable")) + thing->setStateValue("connected", data.value("reachable").toBool()); } -void IntegrationPluginNetatmo::onIndoorStatesChanged() +bool IntegrationPluginNetatmo::doingLoginMigration(ThingSetupInfo *info) { - NetatmoBaseStation *indoor = static_cast(sender()); - Thing *thing = m_indoorDevices.value(indoor); + // Returns true if we need to perform a login migration + // 1. First we stored the username and password in thing params and then moved to the plugin storage + // 2. Username and password login does not work any more since mid 2022 if you change the password, we need to make a propper oauth2 login - thing->setStateValue(indoorUpdateTimeStateTypeId, indoor->lastUpdate()); - thing->setStateValue(indoorTemperatureStateTypeId, indoor->temperature()); - thing->setStateValue(indoorTemperatureMinStateTypeId, indoor->minTemperature()); - thing->setStateValue(indoorTemperatureMaxStateTypeId, indoor->maxTemperature()); - thing->setStateValue(indoorPressureStateTypeId, indoor->pressure()); - thing->setStateValue(indoorHumidityStateTypeId, indoor->humidity()); - thing->setStateValue(indoorCo2StateTypeId, indoor->co2()); - thing->setStateValue(indoorNoiseStateTypeId, indoor->noise()); - thing->setStateValue(indoorSignalStrengthStateTypeId, indoor->wifiStrength()); - thing->setStateValue(indoorConnectedStateTypeId, indoor->reachable()); -} + Thing *thing = info->thing(); + QString username; QString password; + if (pluginStorage()->childGroups().contains(thing->id().toString())) { + pluginStorage()->beginGroup(thing->id().toString()); + username = pluginStorage()->value("username").toString(); + password = pluginStorage()->value("password").toString(); + pluginStorage()->endGroup(); + } else { + /* username and password have been stored as thingParams, + * this is to migrate the params to plug-in storage. */ + ParamTypeId usernameParamTypeId = ParamTypeId("763c2c10-dee5-41c8-9f7e-ded741945e73"); + ParamTypeId passwordParamTypeId = ParamTypeId("c0d892d6-f359-4782-9d7d-8f74a3b53e3e"); -void IntegrationPluginNetatmo::onOutdoorStatesChanged() -{ - NetatmoOutdoorModule *outdoor = static_cast(sender()); - Thing *thing = m_outdoorDevices.value(outdoor); + username = thing->paramValue(usernameParamTypeId).toString(); + password = thing->paramValue(passwordParamTypeId).toString(); - thing->setStateValue(outdoorUpdateTimeStateTypeId, outdoor->lastUpdate()); - thing->setStateValue(outdoorTemperatureStateTypeId, outdoor->temperature()); - thing->setStateValue(outdoorTemperatureMinStateTypeId, outdoor->minTemperature()); - thing->setStateValue(outdoorTemperatureMaxStateTypeId, outdoor->maxTemperature()); - thing->setStateValue(outdoorHumidityStateTypeId, outdoor->humidity()); - thing->setStateValue(outdoorSignalStrengthStateTypeId, outdoor->signalStrength()); - thing->setStateValue(outdoorBatteryLevelStateTypeId, outdoor->battery()); - thing->setStateValue(outdoorBatteryCriticalStateTypeId, outdoor->battery() < 10); - thing->setStateValue(outdoorConnectedStateTypeId, outdoor->reachable()); -} - -void IntegrationPluginNetatmo::updateClientCredentials() -{ - QString clientId = configValue(netatmoPluginCustomClientIdParamTypeId).toString(); - QString clientSecret = configValue(netatmoPluginCustomClientSecretParamTypeId).toString(); - if (!clientId.isEmpty() && !clientSecret.isEmpty()) { - m_clientId = clientId; - m_clientSecret = clientSecret; - qCDebug(dcNetatmo()) << "Using API key from plugin settings."; - qCDebug(dcNetatmo()) << " Client ID" << m_clientId.mid(0, 4)+"****"; - qCDebug(dcNetatmo()) << " Client secret" << m_clientSecret.mid(0, 4)+"****"; - return; + // Delete username and password so it wont be visible in the things.conf file. + thing->setParamValue(ParamTypeId("763c2c10-dee5-41c8-9f7e-ded741945e73"), ""); + thing->setParamValue(ParamTypeId("c0d892d6-f359-4782-9d7d-8f74a3b53e3e"), ""); } - clientId = apiKeyStorage()->requestKey("netatmo").data("clientId"); - clientSecret = apiKeyStorage()->requestKey("netatmo").data("clientSecret"); - if (!clientId.isEmpty() && !clientSecret.isEmpty()) { - m_clientId = clientId; - m_clientSecret = clientSecret; - qCDebug(dcNetatmo()) << "Using API key from nymea API keys provider"; - qCDebug(dcNetatmo()) << " Client ID" << m_clientId.mid(0, 4)+"****"; - qCDebug(dcNetatmo()) << " Client secret" << m_clientSecret.mid(0, 4)+"****"; - return; + + if (username.isEmpty() || password.isEmpty()) { + // No username and no password found from previouse setting...nothing to migrate here + return false; } - qCWarning(dcNetatmo()) << "No API key set."; - qCWarning(dcNetatmo()) << "Either install an API key package (nymea-apikeysprovider-plugin-*) or provide a key in the plugin settings."; + + // We found username and password. If we would have done the migration, they would not be there any more + + qCDebug(dcNetatmo()) << "Found deprecated username and password in the settings. Performing migration to plain OAuth2..."; + + // Create a connection, get the refresh token, delete the connection and continue with normal setup. + NetatmoConnection *connection = new NetatmoConnection(hardwareManager()->networkManager(), m_clientId, m_clientSecret, thing); + connect(info, &ThingSetupInfo::aborted, connection, &NetatmoConnection::deleteLater); + connect(connection, &NetatmoConnection::authenticatedChanged, info, [this, info, thing, connection](bool authenticated){ + connection->deleteLater(); + if (authenticated) { + pluginStorage()->beginGroup(thing->id().toString()); + pluginStorage()->setValue("refresh_token", connection->refreshToken()); + // Success, we can delete username and passord once and for all and keep only the refresh token + pluginStorage()->remove("username"); + pluginStorage()->remove("password"); + pluginStorage()->endGroup(); + qCDebug(dcNetatmo()) << "Migration finished successfully. Continue with normal setup"; + setupConnection(info); + } else { + qCDebug(dcNetatmo()) << "Authentication process failed."; + info->finish(Thing::ThingErrorAuthenticationFailure, QT_TR_NOOP("Authentication failed. Please reconfigure the connection.")); + } + }); + + connection->getAccessTokenFromUsernamePassword(username, password); + return true; +} + +bool IntegrationPluginNetatmo::loadClientCredentials() +{ + QByteArray clientId = configValue(netatmoPluginCustomClientIdParamTypeId).toByteArray(); + QByteArray clientSecret = configValue(netatmoPluginCustomClientSecretParamTypeId).toByteArray(); + if (clientId.isEmpty() || clientSecret.isEmpty()) { + clientId = apiKeyStorage()->requestKey("netatmo").data("clientKey"); + clientSecret = apiKeyStorage()->requestKey("netatmo").data("clientSecret"); + } else { + qCDebug(dcNetatmo()) << "Using custom client id and secret from plugin configuration."; + } + + if (clientId.isEmpty() || clientSecret.isEmpty()) { + qCWarning(dcNetatmo()) << "No API key installed. Please install a valid api key provider plugin."; + return false; + } else { + qCDebug(dcNetatmo()) << "Using API client secret and key from API key provider"; + } + + m_clientId = clientId; + m_clientSecret = clientSecret; + + qCDebug(dcNetatmo()) << "API client ID" << NetatmoConnection::censorDebugOutput(m_clientId); + qCDebug(dcNetatmo()) << "API client secret" << NetatmoConnection::censorDebugOutput(m_clientSecret); + + return true; } diff --git a/netatmo/integrationpluginnetatmo.h b/netatmo/integrationpluginnetatmo.h index f0ddff43..17cabaf8 100644 --- a/netatmo/integrationpluginnetatmo.h +++ b/netatmo/integrationpluginnetatmo.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2022, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,15 +31,16 @@ #ifndef INTEGRATIONPLUGINNETATMO_H #define INTEGRATIONPLUGINNETATMO_H -#include "plugintimer.h" -#include "integrations/integrationplugin.h" -#include "network/oauth2.h" -#include "netatmobasestation.h" -#include "netatmooutdoormodule.h" +#include + +#include "extern-plugininfo.h" #include #include +class PluginTimer; +class NetatmoConnection; + class IntegrationPluginNetatmo : public IntegrationPlugin { Q_OBJECT @@ -48,41 +49,44 @@ class IntegrationPluginNetatmo : public IntegrationPlugin public: explicit IntegrationPluginNetatmo(); + void init() override; + void startPairing(ThingPairingInfo *info) override; void confirmPairing(ThingPairingInfo *info, const QString &username, const QString &secret) override; + void setupThing(ThingSetupInfo *info) override; - void thingRemoved(Thing *thing) override; void postSetupThing(Thing *thing) override; + void thingRemoved(Thing *thing) override; private: - PluginTimer *m_pluginTimer3s = nullptr; - PluginTimer *m_pluginTimer10m = nullptr; + QByteArray m_clientId; + QByteArray m_clientSecret; - QHash m_indoorStationInitData; - QHash m_outdoorStationInitData; + PluginTimer *m_pluginTimer = nullptr; - QHash m_pairingAuthentications; - QHash m_authentications; - QHash m_indoorDevices; - QHash m_outdoorDevices; + QHash m_connections; + QHash m_pendingSetups; - QHash m_refreshRequest; + QHash m_temporaryInitData; - void refreshData(Thing *thing, const QString &token); - void processRefreshData(const QVariantMap &data, Thing *connectionDevice); + void setupConnection(ThingSetupInfo *info); + void refreshConnection(Thing *thing); + void processRefreshData(Thing *connectionThing, const QVariantList &devices); - Thing *findIndoorDevice(const QString &macAddress); - Thing *findOutdoorDevice(const QString &macAddress); + Thing *findIndoorStationThing(const QString &macAddress); + Thing *findOutdoorModuleThing(const QString &macAddress); + Thing *findIndoorModuleThing(const QString &macAddress); + Thing *findWindModuleThing(const QString &macAddress); + Thing *findRainGaugeModuleThing(const QString &macAddress); - QString m_clientId; - QString m_clientSecret; + void updateModuleStates(Thing *thing, const QVariantMap &data); + + bool doingLoginMigration(ThingSetupInfo *info); + + bool loadClientCredentials(); + QString censorDebugOutput(const QString &text); -private slots: - void onPluginTimer(); - void onIndoorStatesChanged(); - void onOutdoorStatesChanged(); - void updateClientCredentials(); }; #endif // INTEGRATIONPLUGINNETATMO_H diff --git a/netatmo/integrationpluginnetatmo.json b/netatmo/integrationpluginnetatmo.json index 8692a8c7..1f58a052 100644 --- a/netatmo/integrationpluginnetatmo.json +++ b/netatmo/integrationpluginnetatmo.json @@ -1,8 +1,8 @@ { + "name": "netatmo", "displayName": "Netatmo", - "name": "Netatmo", "id": "69d14951-0c02-4877-bcef-dffdf48b7ccb", - "apiKeys": ["netatmo"], + "apiKeys": [ "netatmo" ], "paramTypes": [ { "id": "fbda653d-d59e-438c-a70c-0ccbe8080215", @@ -28,16 +28,15 @@ { "id": "728d5a67-27a3-400e-b83c-2765f5196f69", "name": "netatmoConnection", - "displayName": "Netatmo Connection", - "interfaces": ["account"], - "setupMethod": "userandpassword", - "createMethods": ["user"], + "displayName": "Netatmo account", + "interfaces": [ "account" ], + "createMethods": [ "user" ], + "setupMethod": "oauth", "stateTypes": [ { "id": "2f79bc1d-27ed-480a-b583-728363c83ea6", "name": "connected", "displayName": "Available", - "displayNameEvent": "Available changed", "type": "bool", "defaultValue": false }, @@ -45,34 +44,26 @@ "id": "d1ca8579-5d5a-4372-9139-4b083efead2e", "name": "loggedIn", "displayName": "Logged in", - "displayNameEvent": "Logged inchanged", "type": "bool", "defaultValue": false }, { "id": "b9c98ae6-3687-4279-8fda-bc02c7b7ea38", - "name": "userDisplayName", + "name": "username", "displayName": "Username", - "displayNameEvent": "Username changed", "type": "QString", - "defaultValue": "" + "defaultValue": "", + "cached": true } ] }, { "id": "1c809049-04f2-4710-99f5-6ed379a2934f", "name": "indoor", - "displayName": "Indoor Station", + "displayName": "Indoor main station", "interfaces": ["temperaturesensor", "humiditysensor", "pressuresensor", "noisesensor", "co2sensor", "wirelessconnectable"], "createMethods": ["auto"], "paramTypes": [ - { - "id": "a97d256c-e159-4aa0-bc71-6bd7cd0688b3", - "name": "name", - "displayName": "name", - "type": "QString", - "inputType": "TextLine" - }, { "id": "157d470a-e579-4d0e-b879-6b5bfa8e34ae", "name": "mac", @@ -87,7 +78,6 @@ "id": "50da9f6b-c350-401c-a72e-2e4036f3975d", "name": "updateTime", "displayName": "Last update", - "displayNameEvent": "Last update changed", "unit": "UnixTime", "type": "int", "defaultValue": 0 @@ -96,7 +86,6 @@ "id": "3cb25538-e463-40ae-92f9-8f34f0c06b92", "name": "temperature", "displayName": "Temperature", - "displayNameEvent": "Temperature changed", "unit": "DegreeCelsius", "type": "double", "defaultValue": 0 @@ -105,7 +94,6 @@ "id": "ae8bb713-8805-4efd-89a1-bca44a1f1690", "name": "temperatureMin", "displayName": "Temperature minimum", - "displayNameEvent": "Temperature minimum changed", "unit": "DegreeCelsius", "type": "double", "defaultValue": 0 @@ -114,7 +102,6 @@ "id": "dd30507e-037b-4c74-bcca-e04b94c7c5fe", "name": "temperatureMax", "displayName": "Temperature maximum", - "displayNameEvent": "Temperature maximum changed", "unit": "DegreeCelsius", "type": "double", "defaultValue": 0 @@ -123,7 +110,6 @@ "id": "e2db5f01-196a-48d1-8874-6b8cbfe0d8c9", "name": "humidity", "displayName": "Humidity", - "displayNameEvent": "Humidity changed", "unit": "Percentage", "type": "double", "defaultValue": 0, @@ -134,7 +120,6 @@ "id": "03b0a7b7-987d-4d3b-b3f0-21d9f92ad326", "name": "pressure", "displayName": "Pressure", - "displayNameEvent": "Pressure changed", "unit": "MilliBar", "type": "double", "defaultValue": 0 @@ -143,7 +128,6 @@ "id": "906cea9d-1daf-4e9c-90b9-e40f43052a34", "name": "noise", "displayName": "Noise", - "displayNameEvent": "Noise changed", "unit": "Dezibel", "type": "double", "defaultValue": 0 @@ -152,7 +136,6 @@ "id": "e5710bd1-79fa-4bd4-9052-8416aae909b9", "name": "co2", "displayName": "CO2", - "displayNameEvent": "CO2 changed", "unit": "PartsPerMillion", "type": "double", "defaultValue": 0 @@ -161,18 +144,17 @@ "id": "6ea906d4-5740-454d-a730-6fdb9fa0d624", "name": "signalStrength", "displayName": "WiFi signal strength", - "displayNameEvent": "WiFi signal strength changed", "unit": "Percentage", "type": "uint", "minValue": 0, "maxValue": 100, + "cached": false, "defaultValue": 0 }, { "id": "d84ba5d7-5202-4786-b983-958b594c341f", "name": "connected", "displayName": "Connected", - "displayNameEvent": "Connected changed", "type": "bool", "cached": false, "defaultValue": false @@ -180,19 +162,133 @@ ] }, { - "id": "6cc01d62-7317-4ec4-8ac4-a4cab762c179", - "name": "outdoor", - "displayName": "Outdoor Station", - "interfaces": ["temperaturesensor", "humiditysensor", "battery", "wirelessconnectable"], + "id": "a6706b11-325b-4be3-b0d1-c09e027955b4", + "name": "indoorModule", + "displayName": "Indoor module", + "interfaces": ["temperaturesensor", "humiditysensor", "pressuresensor", "co2sensor", "battery", "wirelessconnectable"], "createMethods": ["auto"], "paramTypes": [ { - "id": "719e1f92-a9c8-42d6-83e1-652a0f182209", - "name": "name", - "displayName": "name", + "id": "1881e22f-36f0-447d-a507-e9d541236334", + "name": "mac", + "displayName": "MAC Address", "type": "QString", - "inputType": "TextLine" + "inputType": "TextLine", + "readOnly": true }, + { + "id": "42f97253-6883-4b88-b088-d86cf467e793", + "name": "baseStation", + "displayName": "Base station", + "type": "QString", + "inputType": "TextLine", + "readOnly": true + } + ], + "stateTypes": [ + { + "id": "024eb4d2-ed0b-428b-b5c4-ce9aba1fee1e", + "name": "updateTime", + "displayName": "Last update", + "unit": "UnixTime", + "type": "int", + "defaultValue": 0 + }, + { + "id": "33957a0c-75b7-45d0-8e07-731c7c20df0e", + "name": "temperature", + "displayName": "Temperature", + "unit": "DegreeCelsius", + "type": "double", + "defaultValue": 0 + }, + { + "id": "2f9e4042-b699-4036-be69-a84e561ac38c", + "name": "temperatureMin", + "displayName": "Temperature minimum", + "unit": "DegreeCelsius", + "type": "double", + "defaultValue": 0 + }, + { + "id": "304472e3-56fc-4ee6-96df-aeb4b570a1d1", + "name": "temperatureMax", + "displayName": "Temperature maximum", + "unit": "DegreeCelsius", + "type": "double", + "defaultValue": 0 + }, + { + "id": "e39c6ea6-8d53-42c7-bfce-e9e4aa3dfec9", + "name": "humidity", + "displayName": "Humidity", + "unit": "Percentage", + "type": "double", + "defaultValue": 0, + "minValue": 0, + "maxValue": 100 + }, + { + "id": "a3fe53a3-0940-4fcb-915d-0297ae584917", + "name": "co2", + "displayName": "CO2", + "unit": "PartsPerMillion", + "type": "double", + "defaultValue": 0 + }, + { + "id": "9d2c409e-0d4f-4e03-89ad-fe0cad776e66", + "name": "pressure", + "displayName": "Pressure", + "unit": "MilliBar", + "type": "double", + "defaultValue": 0 + }, + { + "id": "36fd51d9-7693-42ee-b0ae-b623e219d950", + "name": "signalStrength", + "displayName": "WiFi signal strength", + "unit": "Percentage", + "type": "uint", + "minValue": 0, + "maxValue": 100, + "cached": false, + "defaultValue": 0 + }, + { + "id": "5b819dbf-698d-49ae-aeb5-a15db9ef515a", + "name": "connected", + "displayName": "Connected", + "type": "bool", + "cached": false, + "defaultValue": false + }, + { + "id": "d9fe5e52-8f42-41fd-aa5f-fd157ad6a6be", + "name": "batteryLevel", + "displayName": "Battery", + "unit": "Percentage", + "type": "int", + "defaultValue": 0, + "minValue": 0, + "maxValue": 100 + }, + { + "id": "7cde2c79-2b90-4ced-97ac-2653d314cf73", + "name": "batteryCritical", + "displayName": "Battery critical", + "type": "bool", + "defaultValue": false + } + ] + }, + { + "id": "6cc01d62-7317-4ec4-8ac4-a4cab762c179", + "name": "outdoor", + "displayName": "Outdoor module", + "interfaces": ["temperaturesensor", "humiditysensor", "battery", "wirelessconnectable"], + "createMethods": ["auto"], + "paramTypes": [ { "id": "73a76c5c-84f5-4e65-8541-457e5aca9bb0", "name": "mac", @@ -215,7 +311,6 @@ "id": "154aad5c-4998-43c2-b9ee-0b997eb6dd69", "name": "updateTime", "displayName": "Last update", - "displayNameEvent": "Last update changed", "unit": "UnixTime", "type": "int", "defaultValue": 0 @@ -224,7 +319,6 @@ "id": "f98776bd-887e-4b01-a87f-3d8224180563", "name": "temperature", "displayName": "Temperature", - "displayNameEvent": "Temperature changed", "unit": "DegreeCelsius", "type": "double", "defaultValue": 0 @@ -233,7 +327,6 @@ "id": "b71e0c8b-3c94-421e-830e-dab97b6c104e", "name": "temperatureMin", "displayName": "Temperature minimum", - "displayNameEvent": "Temperature minimum changed", "unit": "DegreeCelsius", "type": "double", "defaultValue": 0 @@ -242,7 +335,6 @@ "id": "aae071dc-70d5-4a6a-8daa-3dca0d150bd7", "name": "temperatureMax", "displayName": "Temperature maximum", - "displayNameEvent": "Temperature maximum changed", "unit": "DegreeCelsius", "type": "double", "defaultValue": 0 @@ -251,7 +343,6 @@ "id": "7ba6ddeb-5142-4b87-9729-487fcda394df", "name": "humidity", "displayName": "Humidity", - "displayNameEvent": "Humidity changed", "unit": "Percentage", "type": "double", "defaultValue": 0, @@ -262,18 +353,17 @@ "id": "0faa3d08-9004-46fb-a5aa-a59b75e454cc", "name": "signalStrength", "displayName": "Signal strength", - "displayNameEvent": "Signal strength changed", "unit": "Percentage", "type": "uint", "minValue": 0, "maxValue": 100, + "cached": false, "defaultValue": 0 }, { "id": "21d7f2b7-e45b-4986-b3da-d6e8c0421bfc", "name": "connected", "displayName": "Connected", - "displayNameEvent": "Connected changed", "type": "bool", "cached": false, "defaultValue": false @@ -282,7 +372,6 @@ "id": "15d8fae1-ba47-42e1-994d-530e8017c965", "name": "batteryLevel", "displayName": "Battery", - "displayNameEvent": "Battery changed", "unit": "Percentage", "type": "int", "defaultValue": 0, @@ -293,7 +382,180 @@ "id": "f8aeb144-014d-4ccb-81db-64ffc70f1c97", "name": "batteryCritical", "displayName": "Battery critical", - "displayNameEvent": "Battery critical changed", + "type": "bool", + "defaultValue": false + } + ] + }, + { + "id": "160096e8-5ad0-4ca5-b7f2-60d64865ca71", + "name": "windModule", + "displayName": "Wind module", + "interfaces": ["windspeedsensor", "battery", "wirelessconnectable"], + "createMethods": ["auto"], + "paramTypes": [ + { + "id": "7abc08f2-7074-40fe-aa1e-1727a5488dfe", + "name": "mac", + "displayName": "MAC Address", + "type": "QString", + "inputType": "TextLine", + "readOnly": true + }, + { + "id": "38f375ca-5a45-4628-9e0d-088b4cc25c58", + "name": "baseStation", + "displayName": "Base station", + "type": "QString", + "inputType": "TextLine", + "readOnly": true + } + ], + "stateTypes": [ + { + "id": "aa4be9dc-06e4-48a2-b83e-45c523da116b", + "name": "updateTime", + "displayName": "Last update", + "unit": "UnixTime", + "type": "int", + "defaultValue": 0 + }, + { + "id": "9f6c1540-9933-4ef1-96d7-aecade2a8199", + "name": "windSpeed", + "displayName": "Wind speed", + "unit": "MeterPerSecond", + "type": "double", + "defaultValue": 0 + }, + { + "id": "65ad8900-583a-4bf7-8bff-f738225ca017", + "name": "windDirection", + "displayName": "Wind direction", + "unit": "Degree", + "type": "int", + "defaultValue": 0 + }, + { + "id": "7eafdb74-c99a-40c4-95ca-99f5ddf82355", + "name": "signalStrength", + "displayName": "Signal strength", + "unit": "Percentage", + "type": "uint", + "minValue": 0, + "maxValue": 100, + "cached": false, + "defaultValue": 0 + }, + { + "id": "5d369774-78df-4259-bdff-cc82b946470b", + "name": "connected", + "displayName": "Connected", + "type": "bool", + "cached": false, + "defaultValue": false + }, + { + "id": "560e0bd7-3c75-430e-8ef3-65bbbe85a3af", + "name": "batteryLevel", + "displayName": "Battery", + "unit": "Percentage", + "type": "int", + "defaultValue": 0, + "minValue": 0, + "maxValue": 100 + }, + { + "id": "5dcddcf9-da07-4bac-9988-018168a516ad", + "name": "batteryCritical", + "displayName": "Battery critical", + "type": "bool", + "defaultValue": false + } + ] + }, + { + "id": "33a7230b-588f-471c-895d-4a1ddd417c2a", + "name": "rainGauge", + "displayName": "Rain gauge", + "interfaces": ["battery", "wirelessconnectable"], + "createMethods": ["auto"], + "paramTypes": [ + { + "id": "a2584452-dd16-4655-8cb5-876bb6140c47", + "name": "mac", + "displayName": "MAC Address", + "type": "QString", + "inputType": "TextLine", + "readOnly": true + }, + { + "id": "0b8d6d09-a2fa-4bb8-b96b-f444c3eea31b", + "name": "baseStation", + "displayName": "Base station", + "type": "QString", + "inputType": "TextLine", + "readOnly": true + } + ], + "stateTypes": [ + { + "id": "3c87cbf7-73ad-4673-9abd-188e1f4facfb", + "name": "updateTime", + "displayName": "Last update", + "unit": "UnixTime", + "type": "int", + "defaultValue": 0 + }, + { + "id": "6c55bcd5-b1b3-4ea2-8b4c-2689941d43bb", + "name": "rainfallLastHour", + "displayName": "Rainfall in the past hour", + "unit": "MilliMeter", + "type": "uint", + "defaultValue": 0 + }, + { + "id": "3f475b34-ad5f-4821-8452-2f6869ef46b4", + "name": "rainfallLastDay", + "displayName": "Rainfall in the last 24 hours", + "unit": "MilliMeter", + "type": "uint", + "defaultValue": 0 + }, + { + "id": "d44a1e64-c5e5-4dae-944b-bce23192f610", + "name": "signalStrength", + "displayName": "Signal strength", + "unit": "Percentage", + "type": "uint", + "minValue": 0, + "maxValue": 100, + "cached": false, + "defaultValue": 0 + }, + { + "id": "d726cd1e-75c5-4d50-adbd-962301ea9b91", + "name": "connected", + "displayName": "Connected", + "type": "bool", + "cached": false, + "defaultValue": false + }, + { + "id": "e06955c4-963b-4f8f-9c0c-975c1cd75edb", + "name": "batteryLevel", + "displayName": "Battery", + "unit": "Percentage", + "type": "int", + "defaultValue": 0, + "minValue": 0, + "maxValue": 100 + }, + { + "id": "dd8f8620-fcca-408b-835f-2c257e18aee2", + "name": "batteryCritical", + "displayName": "Battery critical", "type": "bool", "defaultValue": false } diff --git a/netatmo/meta.json b/netatmo/meta.json index 1a3bf091..88314694 100644 --- a/netatmo/meta.json +++ b/netatmo/meta.json @@ -8,6 +8,7 @@ "network" ], "categories": [ - "sensor" + "sensor", + "weather" ] } diff --git a/netatmo/netatmo.pro b/netatmo/netatmo.pro index 05406047..04bd1cb8 100644 --- a/netatmo/netatmo.pro +++ b/netatmo/netatmo.pro @@ -6,12 +6,10 @@ TARGET = $$qtLibraryTarget(nymea_integrationpluginnetatmo) SOURCES += \ integrationpluginnetatmo.cpp \ - netatmobasestation.cpp \ - netatmooutdoormodule.cpp + netatmoconnection.cpp HEADERS += \ integrationpluginnetatmo.h \ - netatmobasestation.h \ - netatmooutdoormodule.h + netatmoconnection.h diff --git a/netatmo/netatmobasestation.cpp b/netatmo/netatmobasestation.cpp deleted file mode 100644 index 6eeabad8..00000000 --- a/netatmo/netatmobasestation.cpp +++ /dev/null @@ -1,138 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* -* Copyright 2013 - 2020, nymea GmbH -* Contact: contact@nymea.io -* -* This file is part of nymea. -* This project including source code and documentation is protected by -* copyright law, and remains the property of nymea GmbH. All rights, including -* reproduction, publication, editing and translation, are reserved. The use of -* this project is subject to the terms of a license agreement to be concluded -* with nymea GmbH in accordance with the terms of use of nymea GmbH, available -* under https://nymea.io/license -* -* GNU Lesser General Public License Usage -* Alternatively, this project may be redistributed and/or modified under the -* terms of the GNU Lesser General Public License as published by the Free -* Software Foundation; version 3. This project is distributed in the hope that -* it will be useful, but WITHOUT ANY WARRANTY; without even the implied -* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public License -* along with this project. If not, see . -* -* For any further details and any questions please contact us under -* contact@nymea.io or see our FAQ/Licensing Information on -* https://nymea.io/license/faq -* -* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -#include "netatmobasestation.h" - -#include - -NetatmoBaseStation::NetatmoBaseStation(const QString &name, const QString &macAddress, QObject *parent) : - QObject(parent), - m_name(name), - m_macAddress(macAddress) -{ -} - -QString NetatmoBaseStation::name() const -{ - return m_name; -} - -QString NetatmoBaseStation::macAddress() const -{ - return m_macAddress; -} - -int NetatmoBaseStation::lastUpdate() const -{ - return m_lastUpdate; -} - -double NetatmoBaseStation::temperature() const -{ - return m_temperature; -} - -double NetatmoBaseStation::minTemperature() const -{ - return m_minTemperature; -} - -double NetatmoBaseStation::maxTemperature() const -{ - return m_maxTemperature; -} - -double NetatmoBaseStation::pressure() const -{ - return m_pressure; -} - -int NetatmoBaseStation::humidity() const -{ - return m_humidity; -} - -int NetatmoBaseStation::noise() const -{ - return m_noise; -} - -int NetatmoBaseStation::co2() const -{ - return m_co2; -} - -int NetatmoBaseStation::wifiStrength() const -{ - return m_wifiStrength; -} - -bool NetatmoBaseStation::reachable() const -{ - return m_reachable; -} - -void NetatmoBaseStation::updateStates(const QVariantMap &data) -{ - // check data timestamp - if (data.contains("last_status_store")) { - m_lastUpdate = data.value("last_status_store").toInt(); - } - - // update dashboard data - if (data.contains("dashboard_data")) { - QVariantMap measurments = data.value("dashboard_data").toMap(); - m_pressure = measurments.value("AbsolutePressure").toDouble(); - m_humidity = measurments.value("Humidity").toInt(); - m_noise = measurments.value("Noise").toInt(); - m_temperature = measurments.value("Temperature").toDouble(); - m_minTemperature = measurments.value("min_temp").toDouble(); - m_maxTemperature = measurments.value("max_temp").toDouble(); - m_co2 = measurments.value("CO2").toInt(); - } - // update wifi signal strength - if (data.contains("wifi_status")) { - int wifiStrength = data.value("wifi_status").toInt(); - if (wifiStrength <= 56) { - m_wifiStrength = 100; - } else if (wifiStrength >= 86) { - m_wifiStrength = 0; - } else { - int delta = 30 - (wifiStrength - 56); - m_wifiStrength = qRound(100.0 * delta / 30.0); - } - } - - // update reachable state - if (data.contains("reachable")) { - m_reachable = data.value("reachable").toBool(); - } - emit statesChanged(); -} diff --git a/netatmo/netatmobasestation.h b/netatmo/netatmobasestation.h deleted file mode 100644 index 87fa3721..00000000 --- a/netatmo/netatmobasestation.h +++ /dev/null @@ -1,84 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* -* Copyright 2013 - 2020, nymea GmbH -* Contact: contact@nymea.io -* -* This file is part of nymea. -* This project including source code and documentation is protected by -* copyright law, and remains the property of nymea GmbH. All rights, including -* reproduction, publication, editing and translation, are reserved. The use of -* this project is subject to the terms of a license agreement to be concluded -* with nymea GmbH in accordance with the terms of use of nymea GmbH, available -* under https://nymea.io/license -* -* GNU Lesser General Public License Usage -* Alternatively, this project may be redistributed and/or modified under the -* terms of the GNU Lesser General Public License as published by the Free -* Software Foundation; version 3. This project is distributed in the hope that -* it will be useful, but WITHOUT ANY WARRANTY; without even the implied -* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public License -* along with this project. If not, see . -* -* For any further details and any questions please contact us under -* contact@nymea.io or see our FAQ/Licensing Information on -* https://nymea.io/license/faq -* -* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -#ifndef NETATMOBASESTATION_H -#define NETATMOBASESTATION_H - -#include -#include - -class NetatmoBaseStation : public QObject -{ - Q_OBJECT -public: - explicit NetatmoBaseStation(const QString &name, const QString &macAddress, QObject *parent = nullptr); - - // Params - QString name() const; - QString macAddress() const; - QString connectionId() const; - - // States - int lastUpdate() const; - double temperature() const; - double minTemperature() const; - double maxTemperature() const; - double pressure() const; - int humidity() const; - int noise() const; - int co2() const; - int wifiStrength() const; - bool reachable() const; - - void updateStates(const QVariantMap &data); - -private: - // Params - QString m_name; - QString m_macAddress; - - // States - int m_lastUpdate; - double m_temperature; - double m_minTemperature; - double m_maxTemperature; - double m_pressure; - int m_humidity; - int m_noise; - int m_co2; - int m_wifiStrength; - bool m_reachable; - -signals: - void statesChanged(); - -}; - -#endif // NETATMOBASESTATION_H diff --git a/netatmo/netatmoconnection.cpp b/netatmo/netatmoconnection.cpp new file mode 100644 index 00000000..83d221fd --- /dev/null +++ b/netatmo/netatmoconnection.cpp @@ -0,0 +1,264 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2022, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project is distributed in the hope that +* it will be useful, but WITHOUT ANY WARRANTY; without even the implied +* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#include "netatmoconnection.h" +#include "extern-plugininfo.h" + +#include +#include + +NetatmoConnection::NetatmoConnection(NetworkAccessManager *networkmanager, const QByteArray &clientId, const QByteArray &clientSecret, QObject *parent) + : QObject{parent}, + m_networkManager{networkmanager}, + m_clientId{clientId}, + m_clientSecret{clientSecret} +{ + // Scopes we need to fetch all information we need + m_scopes << "read_station"; + m_scopes << "read_thermostat"; + m_scopes << "write_thermostat"; + //m_scopes << "read_presence"; + //m_scopes << "read_smokedetector"; + //m_scopes << "read_homecoach"; + + m_tokenRefreshTimer = new QTimer(this); + m_tokenRefreshTimer->setSingleShot(true); + connect(m_tokenRefreshTimer, &QTimer::timeout, this, [this](){ + qCDebug(dcNetatmo()) << "Refreshing authentication token..."; + getAccessTokenFromRefreshToken(m_refreshToken); + }); +} + +QByteArray NetatmoConnection::accessToken() +{ + return m_accessToken; +} + +QByteArray NetatmoConnection::refreshToken() +{ + return m_refreshToken; +} + +QUrl NetatmoConnection::getLoginUrl(const QUrl &redirectUrl) +{ + m_redirectUrl = redirectUrl; + + QUrl requestUrl(m_baseUrl); + requestUrl.setPath("/oauth2/authorize"); + + QUrlQuery queryParams; + queryParams.addQueryItem("client_id", m_clientId); + queryParams.addQueryItem("redirect_uri", redirectUrl.toString()); + queryParams.addQueryItem("response_type", "code"); + queryParams.addQueryItem("scope", m_scopes.join(' ')); + queryParams.addQueryItem("state", QUuid::createUuid().toString()); + requestUrl.setQuery(queryParams); + + return requestUrl; +} + +bool NetatmoConnection::getAccessTokenFromUsernamePassword(const QString username, const QString &password) +{ + qCDebug(dcNetatmo()) << "Starting deprecated username and password authentication" << username << censorDebugOutput(password); + + if (username.isEmpty() || password.isEmpty()) { + qCWarning(dcNetatmo()) << "OAuth2: Failed to get tokens. Username or password is empty."; + return false; + } + + if (m_clientId.isEmpty()) { + qCWarning(dcNetatmo()) << "OAuth2: Failed to refresh access token. OAuth2 client id is not set."; + return false; + } + + if (m_clientSecret.isEmpty()) { + qCWarning(dcNetatmo()) << "OAuth2: Failed to refresh access token. Client secret is not set."; + return false; + } + + QUrl requestUrl(m_baseUrl); + requestUrl.setPath("/oauth2/token"); + + QNetworkRequest request(requestUrl); + request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded;charset=UTF-8"); + + QUrlQuery payloadQuery; + payloadQuery.addQueryItem("grant_type", "password"); + payloadQuery.addQueryItem("client_id", m_clientId); + payloadQuery.addQueryItem("client_secret", m_clientSecret); + payloadQuery.addQueryItem("username", username); + payloadQuery.addQueryItem("password", password); + payloadQuery.addQueryItem("scope", m_scopes.join(' ')); + + QNetworkReply *reply = m_networkManager->post(request, payloadQuery.toString().toUtf8()); + connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater); + connect(reply, &QNetworkReply::finished, this, [this, reply](){ + processLoginResponse(reply->readAll()); + }); + + return true; +} + +bool NetatmoConnection::getAccessTokenFromRefreshToken(const QByteArray &refreshToken) +{ + if (refreshToken.isEmpty()) { + qCWarning(dcNetatmo()) << "OAuth2: Failed to refresh access token. No refresh token given."; + return false; + } + + if (m_clientId.isEmpty()) { + qCWarning(dcNetatmo()) << "OAuth2: Failed to refresh access token. OAuth2 client id is not set."; + return false; + } + + if (m_clientSecret.isEmpty()) { + qCWarning(dcNetatmo()) << "OAuth2: Failed to refresh access token. Client secret is not set."; + return false; + } + + QUrl requestUrl(m_baseUrl); + requestUrl.setPath("/oauth2/token"); + + QNetworkRequest request(requestUrl); + request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded;charset=UTF-8"); + + QUrlQuery payloadQuery; + payloadQuery.addQueryItem("grant_type", "refresh_token"); + payloadQuery.addQueryItem("refresh_token", refreshToken); + payloadQuery.addQueryItem("client_id", m_clientId); + payloadQuery.addQueryItem("client_secret", m_clientSecret); + + QNetworkReply *reply = m_networkManager->post(request, payloadQuery.toString().toUtf8()); + connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater); + connect(reply, &QNetworkReply::finished, this, [this, reply](){ + processLoginResponse(reply->readAll()); + }); + + return true; +} + +bool NetatmoConnection::getAccessTokenFromAuthorizationCode(const QByteArray &authorizationCode) +{ + if (authorizationCode.isEmpty()) { + qCWarning(dcNetatmo()) << "OAuth2: Failed to get access token. No authorization code given."; + return false; + } + + if (m_clientId.isEmpty()) { + qCWarning(dcNetatmo()) << "OAuth2: Failed to get access token. OAuth2 client id is not set."; + return false; + } + + if (m_clientSecret.isEmpty()) { + qCWarning(dcNetatmo()) << "OAuth2: Failed to get access token. Client secret is not set."; + return false; + } + + QUrl requestUrl(m_baseUrl); + requestUrl.setPath("/oauth2/token"); + + QNetworkRequest request(requestUrl); + request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded;charset=UTF-8"); + + QUrlQuery payloadQuery; + payloadQuery.addQueryItem("grant_type", "authorization_code"); + payloadQuery.addQueryItem("client_id", m_clientId); + payloadQuery.addQueryItem("client_secret", m_clientSecret); + payloadQuery.addQueryItem("redirect_uri", m_redirectUrl.toString()); + payloadQuery.addQueryItem("code", authorizationCode); + payloadQuery.addQueryItem("scope", m_scopes.join(' ')); + + QNetworkReply *reply = m_networkManager->post(request, payloadQuery.toString().toUtf8()); + connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater); + connect(reply, &QNetworkReply::finished, this, [this, reply](){ + processLoginResponse(reply->readAll()); + }); + + return true; +} + +QNetworkReply *NetatmoConnection::getStationData() +{ + QUrl requestUrl(m_baseUrl); + requestUrl.setPath("/api/getstationsdata"); + + QNetworkRequest request(requestUrl); + request.setRawHeader("Authorization", "Bearer " + m_accessToken); + + return m_networkManager->get(request); +} + +QString NetatmoConnection::censorDebugOutput(const QString &text) +{ + return text.mid(0, 4) + QString().fill('*', text.length() - 4); +} + +void NetatmoConnection::setAuthenticated(bool authenticated) +{ + m_authenticated = authenticated; + emit authenticatedChanged(m_authenticated); +} + +void NetatmoConnection::processLoginResponse(const QByteArray &data) +{ + QJsonParseError error; + QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error); + if (error.error != QJsonParseError::NoError) { + qCWarning(dcNetatmo()) << "OAuth2: Failed to get token. Refresh data reply JSON error:" << error.errorString(); + setAuthenticated(false); + return; + } + + QVariantMap responseMap = jsonDoc.toVariant().toMap(); + if (!responseMap.contains("access_token") || !responseMap.contains("refresh_token") ) { + setAuthenticated(false); + return; + } + + m_accessToken = responseMap.value("access_token").toByteArray(); + receivedAccessToken(m_accessToken); + + m_refreshToken = responseMap.value("refresh_token").toByteArray(); + receivedRefreshToken(m_refreshToken); + + if (responseMap.contains("expires_in")) { + int expireTime = responseMap.value("expires_in").toInt(); + qCDebug(dcNetatmo()) << "OAuth2: Token expires in" << expireTime << "s, at" << QDateTime::currentDateTime().addSecs(expireTime).toString(); + if (expireTime < 20) { + qCWarning(dcNetatmo()) << "OAuth2: Expire time too short"; + // Refresh right the way... + getAccessTokenFromRefreshToken(m_refreshToken); + } else { + m_tokenRefreshTimer->start((expireTime - 20) * 1000); + } + } + + setAuthenticated(true); +} diff --git a/netatmo/netatmoconnection.h b/netatmo/netatmoconnection.h new file mode 100644 index 00000000..da87e5d5 --- /dev/null +++ b/netatmo/netatmoconnection.h @@ -0,0 +1,85 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2022, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project is distributed in the hope that +* it will be useful, but WITHOUT ANY WARRANTY; without even the implied +* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef NETATMOCONNECTION_H +#define NETATMOCONNECTION_H + +#include +#include + +#include + +class NetatmoConnection : public QObject +{ + Q_OBJECT +public: + explicit NetatmoConnection(NetworkAccessManager *networkmanager, const QByteArray &clientId, const QByteArray &clientSecret, QObject *parent = nullptr); + + QByteArray accessToken(); + QByteArray refreshToken(); + + QUrl getLoginUrl(const QUrl &redirectUrl = QUrl("https://127.0.0.1:8888")); + + // Note: Use only for migration since this login type is deprecated at netatmo and is + // not working any more with new accounts or after changing the password of an older existing account + bool getAccessTokenFromUsernamePassword(const QString username, const QString &password); + + bool getAccessTokenFromRefreshToken(const QByteArray &refreshToken); + bool getAccessTokenFromAuthorizationCode(const QByteArray &authorizationCode); + + QNetworkReply *getStationData(); + + static QString censorDebugOutput(const QString &text); + +signals: + void authenticatedChanged(bool authenticated); + void receivedRefreshToken(const QByteArray &refreshToken); + void receivedAccessToken(const QByteArray &accessToken); + +private: + NetworkAccessManager *m_networkManager = nullptr; + QTimer *m_tokenRefreshTimer = nullptr; + bool m_authenticated = false; + + QStringList m_scopes; + + QUrl m_baseUrl = QUrl("https://api.netatmo.com"); + QUrl m_redirectUrl = QUrl("https://127.0.0.1:8888"); + + QByteArray m_clientId; + QByteArray m_clientSecret; + QByteArray m_accessToken; + QByteArray m_refreshToken; + + void setAuthenticated(bool authenticated); + void processLoginResponse(const QByteArray &data); +}; + +#endif // NETATMOCONNECTION_H diff --git a/netatmo/netatmooutdoormodule.cpp b/netatmo/netatmooutdoormodule.cpp deleted file mode 100644 index 39594c20..00000000 --- a/netatmo/netatmooutdoormodule.cpp +++ /dev/null @@ -1,145 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* -* Copyright 2013 - 2020, nymea GmbH -* Contact: contact@nymea.io -* -* This file is part of nymea. -* This project including source code and documentation is protected by -* copyright law, and remains the property of nymea GmbH. All rights, including -* reproduction, publication, editing and translation, are reserved. The use of -* this project is subject to the terms of a license agreement to be concluded -* with nymea GmbH in accordance with the terms of use of nymea GmbH, available -* under https://nymea.io/license -* -* GNU Lesser General Public License Usage -* Alternatively, this project may be redistributed and/or modified under the -* terms of the GNU Lesser General Public License as published by the Free -* Software Foundation; version 3. This project is distributed in the hope that -* it will be useful, but WITHOUT ANY WARRANTY; without even the implied -* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public License -* along with this project. If not, see . -* -* For any further details and any questions please contact us under -* contact@nymea.io or see our FAQ/Licensing Information on -* https://nymea.io/license/faq -* -* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -#include "netatmooutdoormodule.h" - -#include - -NetatmoOutdoorModule::NetatmoOutdoorModule(const QString &name, const QString &macAddress, const QString &baseStation, QObject *parent) : - QObject(parent), - m_name(name), - m_macAddress(macAddress), - m_baseStation(baseStation) -{ -} - -QString NetatmoOutdoorModule::name() const -{ - return m_name; -} - -QString NetatmoOutdoorModule::macAddress() const -{ - return m_macAddress; -} - -QString NetatmoOutdoorModule::baseStation() const -{ - return m_baseStation; -} - -int NetatmoOutdoorModule::lastUpdate() const -{ - return m_lastUpdate; -} - -int NetatmoOutdoorModule::humidity() const -{ - return m_humidity; -} - -double NetatmoOutdoorModule::temperature() const -{ - return m_temperature; -} - -double NetatmoOutdoorModule::minTemperature() const -{ - return m_minTemperature; -} - -double NetatmoOutdoorModule::maxTemperature() const -{ - return m_maxTemperature; -} - -int NetatmoOutdoorModule::signalStrength() const -{ - return m_signalStrength; -} - -int NetatmoOutdoorModule::battery() const -{ - return m_battery; -} - -bool NetatmoOutdoorModule::reachable() const -{ - return m_reachable; -} - -void NetatmoOutdoorModule::updateStates(const QVariantMap &data) -{ - // check data timestamp - if (data.contains("last_message")) { - m_lastUpdate = data.value("last_message").toInt(); - } - - // update dashboard data - if (data.contains("dashboard_data")) { - QVariantMap measurments = data.value("dashboard_data").toMap(); - m_humidity = measurments.value("Humidity").toInt(); - m_temperature = measurments.value("Temperature").toDouble(); - m_minTemperature = measurments.value("min_temp").toDouble(); - m_maxTemperature = measurments.value("max_temp").toDouble(); - } - // update battery strength - if (data.contains("battery_vp")) { - int battery = data.value("battery_vp").toInt(); - if (battery >= 6000) { - m_battery = 100; - } else if (battery <= 3600) { - m_battery = 0; - } else { - int delta = battery - 3600; - m_battery = qRound(100.0 * delta / 2400); - } - } - - // update signal strength - if (data.contains("rf_status")) { - int signalStrength = data.value("rf_status").toInt(); - if (signalStrength <= 60) { - m_signalStrength = 100; - } else if (signalStrength >= 90) { - m_signalStrength = 0; - } else { - int delta = 30 - (signalStrength - 60); - m_signalStrength = qRound(100.0 * delta / 30.0); - } - } - - // update reachable state - if (data.contains("reachable")) { - m_reachable = data.value("reachable").toBool(); - } - emit statesChanged(); - -} diff --git a/netatmo/netatmooutdoormodule.h b/netatmo/netatmooutdoormodule.h deleted file mode 100644 index d803a9ea..00000000 --- a/netatmo/netatmooutdoormodule.h +++ /dev/null @@ -1,80 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* -* Copyright 2013 - 2020, nymea GmbH -* Contact: contact@nymea.io -* -* This file is part of nymea. -* This project including source code and documentation is protected by -* copyright law, and remains the property of nymea GmbH. All rights, including -* reproduction, publication, editing and translation, are reserved. The use of -* this project is subject to the terms of a license agreement to be concluded -* with nymea GmbH in accordance with the terms of use of nymea GmbH, available -* under https://nymea.io/license -* -* GNU Lesser General Public License Usage -* Alternatively, this project may be redistributed and/or modified under the -* terms of the GNU Lesser General Public License as published by the Free -* Software Foundation; version 3. This project is distributed in the hope that -* it will be useful, but WITHOUT ANY WARRANTY; without even the implied -* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public License -* along with this project. If not, see . -* -* For any further details and any questions please contact us under -* contact@nymea.io or see our FAQ/Licensing Information on -* https://nymea.io/license/faq -* -* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -#ifndef NETATMOOUTDOORMODULE_H -#define NETATMOOUTDOORMODULE_H - -#include - -class NetatmoOutdoorModule : public QObject -{ - Q_OBJECT -public: - explicit NetatmoOutdoorModule(const QString &name, const QString &macAddress, const QString &baseStation, QObject *parent = 0); - - // Params - QString name() const; - QString macAddress() const; - QString baseStation() const; - - // States - int lastUpdate() const; - int humidity() const; - double temperature() const; - double minTemperature() const; - double maxTemperature() const; - int signalStrength() const; - int battery() const; - bool reachable() const; - - void updateStates(const QVariantMap &data); - -private: - // Params - QString m_name; - QString m_macAddress; - QString m_baseStation; - - // States - int m_lastUpdate; - int m_humidity; - double m_temperature; - double m_minTemperature; - double m_maxTemperature; - int m_signalStrength; - int m_battery; - bool m_reachable; - -signals: - void statesChanged(); - -}; - -#endif // NETATMOOUTDOORMODULE_H diff --git a/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-cs.ts b/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-cs.ts index 10b5f014..58795aa7 100644 --- a/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-cs.ts +++ b/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-cs.ts @@ -4,371 +4,325 @@ IntegrationPluginNetatmo - - - No API key installed - - - - - Netatmo server is not reachable. - Server Netatmo není dosažitelný. - - - - Please enter the login credentials for your Netatmo account. - Zadejte přihlašovací údaje pro účet Netatmo. - - - - Wrong username or password - Chybné uživatelské jméno nebo heslo - - + - Login credentials not found. + No API key installed. - - Error logging in to Netatmo server. - Při přihlašování k serveru Netatmo došlo k chybě. + + The Netatmo server is not reachable. + + + + + + Failed to log in to the Netatmo server. + + + + + Could not authenticate on the server. Please reconfigure the connection. + + + + + Authentication failed. Please reconfigure the connection. + - Netatmo + netatmo - - + Available - The name of the ParamType (ThingClass: netatmoConnection, EventType: connected, ID: {2f79bc1d-27ed-480a-b583-728363c83ea6}) ----------- -The name of the StateType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection - K dispozici + The name of the StateType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection + K dispozici + + + - Available changed - The name of the EventType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection - Dostupné změněno + Base station + The name of the ParamType (ThingClass: rainGauge, Type: thing, ID: {0b8d6d09-a2fa-4bb8-b96b-f444c3eea31b}) +---------- +The name of the ParamType (ThingClass: windModule, Type: thing, ID: {38f375ca-5a45-4628-9e0d-088b4cc25c58}) +---------- +The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {d7a0ec46-760c-4fdc-9753-fe10c86fe1b9}) +---------- +The name of the ParamType (ThingClass: indoorModule, Type: thing, ID: {42f97253-6883-4b88-b088-d86cf467e793}) + Základna - Base station - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {d7a0ec46-760c-4fdc-9753-fe10c86fe1b9}) - Základna - - - Battery - The name of the ParamType (ThingClass: outdoor, EventType: batteryLevel, ID: {15d8fae1-ba47-42e1-994d-530e8017c965}) ----------- -The name of the StateType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor - baterie - - - Battery changed - The name of the EventType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor - Baterie byla vyměněna + Battery + The name of the StateType ({e06955c4-963b-4f8f-9c0c-975c1cd75edb}) of ThingClass rainGauge +---------- +The name of the StateType ({560e0bd7-3c75-430e-8ef3-65bbbe85a3af}) of ThingClass windModule +---------- +The name of the StateType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor +---------- +The name of the StateType ({d9fe5e52-8f42-41fd-aa5f-fd157ad6a6be}) of ThingClass indoorModule + baterie - Battery critical - The name of the ParamType (ThingClass: outdoor, EventType: batteryCritical, ID: {f8aeb144-014d-4ccb-81db-64ffc70f1c97}) ----------- -The name of the StateType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor - Baterie kritická - - - Battery critical changed - The name of the EventType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor - Kritická baterie se změnila + + Battery critical + The name of the StateType ({dd8f8620-fcca-408b-835f-2c257e18aee2}) of ThingClass rainGauge +---------- +The name of the StateType ({5dcddcf9-da07-4bac-9988-018168a516ad}) of ThingClass windModule +---------- +The name of the StateType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor +---------- +The name of the StateType ({7cde2c79-2b90-4ced-97ac-2653d314cf73}) of ThingClass indoorModule + Baterie kritická - + CO2 - The name of the ParamType (ThingClass: indoor, EventType: co2, ID: {e5710bd1-79fa-4bd4-9052-8416aae909b9}) + The name of the StateType ({a3fe53a3-0940-4fcb-915d-0297ae584917}) of ThingClass indoorModule ---------- The name of the StateType ({e5710bd1-79fa-4bd4-9052-8416aae909b9}) of ThingClass indoor - CO2 - - - - CO2 changed - The name of the EventType ({e5710bd1-79fa-4bd4-9052-8416aae909b9}) of ThingClass indoor - CO2 se změnil + CO2 + + + + + Connected + The name of the StateType ({d726cd1e-75c5-4d50-adbd-962301ea9b91}) of ThingClass rainGauge +---------- +The name of the StateType ({5d369774-78df-4259-bdff-cc82b946470b}) of ThingClass windModule +---------- +The name of the StateType ({21d7f2b7-e45b-4986-b3da-d6e8c0421bfc}) of ThingClass outdoor +---------- +The name of the StateType ({5b819dbf-698d-49ae-aeb5-a15db9ef515a}) of ThingClass indoorModule +---------- +The name of the StateType ({d84ba5d7-5202-4786-b983-958b594c341f}) of ThingClass indoor + + + + Custom client id The name of the ParamType (ThingClass: netatmo, Type: plugin, ID: {fbda653d-d59e-438c-a70c-0ccbe8080215}) - + Custom client secret The name of the ParamType (ThingClass: netatmo, Type: plugin, ID: {06439e1e-da15-4483-8737-0a6aa967c479}) - - - - + + + Humidity - The name of the ParamType (ThingClass: outdoor, EventType: humidity, ID: {7ba6ddeb-5142-4b87-9729-487fcda394df}) + The name of the StateType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ---------- -The name of the StateType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: humidity, ID: {e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) +The name of the StateType ({e39c6ea6-8d53-42c7-bfce-e9e4aa3dfec9}) of ThingClass indoorModule ---------- The name of the StateType ({e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) of ThingClass indoor - Vlhkost vzduchu + Vlhkost vzduchu - - - Humidity changed - The name of the EventType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ----------- -The name of the EventType ({e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) of ThingClass indoor - Vlhkost se změnila - - - - - - Last update - The name of the ParamType (ThingClass: outdoor, EventType: updateTime, ID: {154aad5c-4998-43c2-b9ee-0b997eb6dd69}) ----------- -The name of the StateType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: updateTime, ID: {50da9f6b-c350-401c-a72e-2e4036f3975d}) ----------- -The name of the StateType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor - Poslední aktualizace - - - - - Last update changed - The name of the EventType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor ----------- -The name of the EventType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor - Poslední aktualizace byla změněna - - - - - Logged in - The name of the ParamType (ThingClass: netatmoConnection, EventType: loggedIn, ID: {d1ca8579-5d5a-4372-9139-4b083efead2e}) ----------- -The name of the StateType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection + Indoor main station + The name of the ThingClass ({1c809049-04f2-4710-99f5-6ed379a2934f}) + + + Indoor module + The name of the ThingClass ({a6706b11-325b-4be3-b0d1-c09e027955b4}) + + + + + + + + + Last update + The name of the StateType ({3c87cbf7-73ad-4673-9abd-188e1f4facfb}) of ThingClass rainGauge +---------- +The name of the StateType ({aa4be9dc-06e4-48a2-b83e-45c523da116b}) of ThingClass windModule +---------- +The name of the StateType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor +---------- +The name of the StateType ({024eb4d2-ed0b-428b-b5c4-ce9aba1fee1e}) of ThingClass indoorModule +---------- +The name of the StateType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor + Poslední aktualizace + - Logged inchanged - The name of the EventType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection + Logged in + The name of the StateType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection - MAC Address - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {73a76c5c-84f5-4e65-8541-457e5aca9bb0}) ----------- -The name of the ParamType (ThingClass: indoor, Type: thing, ID: {157d470a-e579-4d0e-b879-6b5bfa8e34ae}) - MAC Address - - - Netatmo - The name of the vendor ({4b46b4ed-5ec9-4aa4-afc3-92d3f80e6351}) ----------- -The name of the plugin Netatmo ({69d14951-0c02-4877-bcef-dffdf48b7ccb}) - - - - Netatmo Connection - The name of the ThingClass ({728d5a67-27a3-400e-b83c-2765f5196f69}) - Netatmo připojení + MAC Address + The name of the ParamType (ThingClass: rainGauge, Type: thing, ID: {a2584452-dd16-4655-8cb5-876bb6140c47}) +---------- +The name of the ParamType (ThingClass: windModule, Type: thing, ID: {7abc08f2-7074-40fe-aa1e-1727a5488dfe}) +---------- +The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {73a76c5c-84f5-4e65-8541-457e5aca9bb0}) +---------- +The name of the ParamType (ThingClass: indoorModule, Type: thing, ID: {1881e22f-36f0-447d-a507-e9d541236334}) +---------- +The name of the ParamType (ThingClass: indoor, Type: thing, ID: {157d470a-e579-4d0e-b879-6b5bfa8e34ae}) + MAC Address - Noise - The name of the ParamType (ThingClass: indoor, EventType: noise, ID: {906cea9d-1daf-4e9c-90b9-e40f43052a34}) + Netatmo + The name of the vendor ({4b46b4ed-5ec9-4aa4-afc3-92d3f80e6351}) ---------- -The name of the StateType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor - Hluk +The name of the plugin netatmo ({69d14951-0c02-4877-bcef-dffdf48b7ccb}) + - Noise changed - The name of the EventType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor - Hluk se změnil + Netatmo account + The name of the ThingClass ({728d5a67-27a3-400e-b83c-2765f5196f69}) + + + + + Noise + The name of the StateType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor + Hluk - - Pressure - The name of the ParamType (ThingClass: indoor, EventType: pressure, ID: {03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) ----------- -The name of the StateType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor - Tlak + Outdoor module + The name of the ThingClass ({6cc01d62-7317-4ec4-8ac4-a4cab762c179}) + + - Pressure changed - The name of the EventType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor - Tlak se změnil + Pressure + The name of the StateType ({9d2c409e-0d4f-4e03-89ad-fe0cad776e66}) of ThingClass indoorModule +---------- +The name of the StateType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor + Tlak + Rain gauge + The name of the ThingClass ({33a7230b-588f-471c-895d-4a1ddd417c2a}) + + + - Signal strength - The name of the ParamType (ThingClass: outdoor, EventType: signalStrength, ID: {0faa3d08-9004-46fb-a5aa-a59b75e454cc}) ----------- -The name of the StateType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor - Síla signálu + Rainfall in the last 24 hours + The name of the StateType ({3f475b34-ad5f-4821-8452-2f6869ef46b4}) of ThingClass rainGauge + - Signal strength changed - The name of the EventType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor - Síla signálu se změnila + Rainfall in the past hour + The name of the StateType ({6c55bcd5-b1b3-4ea2-8b4c-2689941d43bb}) of ThingClass rainGauge + - - Temperature - The name of the ParamType (ThingClass: outdoor, EventType: temperature, ID: {f98776bd-887e-4b01-a87f-3d8224180563}) + Signal strength + The name of the StateType ({d44a1e64-c5e5-4dae-944b-bce23192f610}) of ThingClass rainGauge ---------- -The name of the StateType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor +The name of the StateType ({7eafdb74-c99a-40c4-95ca-99f5ddf82355}) of ThingClass windModule ---------- -The name of the ParamType (ThingClass: indoor, EventType: temperature, ID: {3cb25538-e463-40ae-92f9-8f34f0c06b92}) ----------- -The name of the StateType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor - Teplota +The name of the StateType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor + Síla signálu + - Temperature changed - The name of the EventType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor + Temperature + The name of the StateType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor ---------- -The name of the EventType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor - Teplota se změnila +The name of the StateType ({33957a0c-75b7-45d0-8e07-731c7c20df0e}) of ThingClass indoorModule +---------- +The name of the StateType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor + Teplota - Temperature maximum - The name of the ParamType (ThingClass: outdoor, EventType: temperatureMax, ID: {aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) + The name of the StateType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor ---------- -The name of the StateType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: temperatureMax, ID: {dd30507e-037b-4c74-bcca-e04b94c7c5fe}) +The name of the StateType ({304472e3-56fc-4ee6-96df-aeb4b570a1d1}) of ThingClass indoorModule ---------- The name of the StateType ({dd30507e-037b-4c74-bcca-e04b94c7c5fe}) of ThingClass indoor - maximum emperatury + maximum emperatury + - Temperature maximum changed - The name of the EventType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor + Temperature minimum + The name of the StateType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ---------- -The name of the EventType ({dd30507e-037b-4c74-bcca-e04b94c7c5fe}) of ThingClass indoor - Maximální teplota se změnila +The name of the StateType ({2f9e4042-b699-4036-be69-a84e561ac38c}) of ThingClass indoorModule +---------- +The name of the StateType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor + Minimální teplota + Username + The name of the StateType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection + + + + WiFi signal strength + The name of the StateType ({36fd51d9-7693-42ee-b0ae-b623e219d950}) of ThingClass indoorModule +---------- +The name of the StateType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor + Síla signálu WiFi + + - Temperature minimum - The name of the ParamType (ThingClass: outdoor, EventType: temperatureMin, ID: {b71e0c8b-3c94-421e-830e-dab97b6c104e}) ----------- -The name of the StateType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: temperatureMin, ID: {ae8bb713-8805-4efd-89a1-bca44a1f1690}) ----------- -The name of the StateType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor - Minimální teplota + Wind direction + The name of the StateType ({65ad8900-583a-4bf7-8bff-f738225ca017}) of ThingClass windModule + + Wind module + The name of the ThingClass ({160096e8-5ad0-4ca5-b7f2-60d64865ca71}) + + + - Temperature minimum changed - The name of the EventType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ----------- -The name of the EventType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor - Minimální teplota se změnila - - - - - Username - The name of the ParamType (ThingClass: netatmoConnection, EventType: userDisplayName, ID: {b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) ----------- -The name of the StateType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection + Wind speed + The name of the StateType ({9f6c1540-9933-4ef1-96d7-aecade2a8199}) of ThingClass windModule - - - Username changed - The name of the EventType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection - - - - - - WiFi signal strength - The name of the ParamType (ThingClass: indoor, EventType: wifiStrength, ID: {6ea906d4-5740-454d-a730-6fdb9fa0d624}) ----------- -The name of the StateType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor - Síla signálu WiFi - - - - WiFi signal strength changed - The name of the EventType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor - Síla signálu WiFi se změnila - - - - - name - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {719e1f92-a9c8-42d6-83e1-652a0f182209}) ----------- -The name of the ParamType (ThingClass: indoor, Type: thing, ID: {a97d256c-e159-4aa0-bc71-6bd7cd0688b3}) - název - - - - Indoor Station - The name of the ThingClass ({1c809049-04f2-4710-99f5-6ed379a2934f}) - Vnitřní stanice - - - - Outdoor Station - The name of the ThingClass ({6cc01d62-7317-4ec4-8ac4-a4cab762c179}) - Venkovní stanice - diff --git a/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-da.ts b/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-da.ts index 7b73547f..3629630a 100644 --- a/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-da.ts +++ b/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-da.ts @@ -4,371 +4,325 @@ IntegrationPluginNetatmo - - - No API key installed - - - - - Netatmo server is not reachable. - Netatmo-serveren kan ikke nås. - - - - Please enter the login credentials for your Netatmo account. - Indtast login-legitimationsoplysninger for din Netatmo-konto. - - - - Wrong username or password - Forkert brugernavn eller adgangskode - - + - Login credentials not found. + No API key installed. - - Error logging in to Netatmo server. - Fejl ved login på Netatmo-serveren. + + The Netatmo server is not reachable. + + + + + + Failed to log in to the Netatmo server. + + + + + Could not authenticate on the server. Please reconfigure the connection. + + + + + Authentication failed. Please reconfigure the connection. + - Netatmo + netatmo - - + Available - The name of the ParamType (ThingClass: netatmoConnection, EventType: connected, ID: {2f79bc1d-27ed-480a-b583-728363c83ea6}) ----------- -The name of the StateType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection - Tilgængelig + The name of the StateType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection + Tilgængelig + + + - Available changed - The name of the EventType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection - Tilgængelig ændret + Base station + The name of the ParamType (ThingClass: rainGauge, Type: thing, ID: {0b8d6d09-a2fa-4bb8-b96b-f444c3eea31b}) +---------- +The name of the ParamType (ThingClass: windModule, Type: thing, ID: {38f375ca-5a45-4628-9e0d-088b4cc25c58}) +---------- +The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {d7a0ec46-760c-4fdc-9753-fe10c86fe1b9}) +---------- +The name of the ParamType (ThingClass: indoorModule, Type: thing, ID: {42f97253-6883-4b88-b088-d86cf467e793}) + Basisstation - Base station - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {d7a0ec46-760c-4fdc-9753-fe10c86fe1b9}) - Basisstation - - - Battery - The name of the ParamType (ThingClass: outdoor, EventType: batteryLevel, ID: {15d8fae1-ba47-42e1-994d-530e8017c965}) ----------- -The name of the StateType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor - Batteri - - - Battery changed - The name of the EventType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor - Batteri ændret + Battery + The name of the StateType ({e06955c4-963b-4f8f-9c0c-975c1cd75edb}) of ThingClass rainGauge +---------- +The name of the StateType ({560e0bd7-3c75-430e-8ef3-65bbbe85a3af}) of ThingClass windModule +---------- +The name of the StateType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor +---------- +The name of the StateType ({d9fe5e52-8f42-41fd-aa5f-fd157ad6a6be}) of ThingClass indoorModule + Batteri - Battery critical - The name of the ParamType (ThingClass: outdoor, EventType: batteryCritical, ID: {f8aeb144-014d-4ccb-81db-64ffc70f1c97}) ----------- -The name of the StateType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor - Batterikritisk - - - Battery critical changed - The name of the EventType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor - Batterikritisk ændret + + Battery critical + The name of the StateType ({dd8f8620-fcca-408b-835f-2c257e18aee2}) of ThingClass rainGauge +---------- +The name of the StateType ({5dcddcf9-da07-4bac-9988-018168a516ad}) of ThingClass windModule +---------- +The name of the StateType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor +---------- +The name of the StateType ({7cde2c79-2b90-4ced-97ac-2653d314cf73}) of ThingClass indoorModule + Batterikritisk - + CO2 - The name of the ParamType (ThingClass: indoor, EventType: co2, ID: {e5710bd1-79fa-4bd4-9052-8416aae909b9}) + The name of the StateType ({a3fe53a3-0940-4fcb-915d-0297ae584917}) of ThingClass indoorModule ---------- The name of the StateType ({e5710bd1-79fa-4bd4-9052-8416aae909b9}) of ThingClass indoor - CO2 - - - - CO2 changed - The name of the EventType ({e5710bd1-79fa-4bd4-9052-8416aae909b9}) of ThingClass indoor - CO2 ændret + CO2 + + + + + Connected + The name of the StateType ({d726cd1e-75c5-4d50-adbd-962301ea9b91}) of ThingClass rainGauge +---------- +The name of the StateType ({5d369774-78df-4259-bdff-cc82b946470b}) of ThingClass windModule +---------- +The name of the StateType ({21d7f2b7-e45b-4986-b3da-d6e8c0421bfc}) of ThingClass outdoor +---------- +The name of the StateType ({5b819dbf-698d-49ae-aeb5-a15db9ef515a}) of ThingClass indoorModule +---------- +The name of the StateType ({d84ba5d7-5202-4786-b983-958b594c341f}) of ThingClass indoor + + + + Custom client id The name of the ParamType (ThingClass: netatmo, Type: plugin, ID: {fbda653d-d59e-438c-a70c-0ccbe8080215}) - + Custom client secret The name of the ParamType (ThingClass: netatmo, Type: plugin, ID: {06439e1e-da15-4483-8737-0a6aa967c479}) - - - - + + + Humidity - The name of the ParamType (ThingClass: outdoor, EventType: humidity, ID: {7ba6ddeb-5142-4b87-9729-487fcda394df}) + The name of the StateType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ---------- -The name of the StateType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: humidity, ID: {e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) +The name of the StateType ({e39c6ea6-8d53-42c7-bfce-e9e4aa3dfec9}) of ThingClass indoorModule ---------- The name of the StateType ({e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) of ThingClass indoor - Fugtighed + Fugtighed - - - Humidity changed - The name of the EventType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ----------- -The name of the EventType ({e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) of ThingClass indoor - Fugtighed ændrede - - - - - - Last update - The name of the ParamType (ThingClass: outdoor, EventType: updateTime, ID: {154aad5c-4998-43c2-b9ee-0b997eb6dd69}) ----------- -The name of the StateType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: updateTime, ID: {50da9f6b-c350-401c-a72e-2e4036f3975d}) ----------- -The name of the StateType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor - Sidste opdatering - - - - - Last update changed - The name of the EventType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor ----------- -The name of the EventType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor - Sidste opdatering ændret - - - - - Logged in - The name of the ParamType (ThingClass: netatmoConnection, EventType: loggedIn, ID: {d1ca8579-5d5a-4372-9139-4b083efead2e}) ----------- -The name of the StateType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection + Indoor main station + The name of the ThingClass ({1c809049-04f2-4710-99f5-6ed379a2934f}) + + + Indoor module + The name of the ThingClass ({a6706b11-325b-4be3-b0d1-c09e027955b4}) + + + + + + + + + Last update + The name of the StateType ({3c87cbf7-73ad-4673-9abd-188e1f4facfb}) of ThingClass rainGauge +---------- +The name of the StateType ({aa4be9dc-06e4-48a2-b83e-45c523da116b}) of ThingClass windModule +---------- +The name of the StateType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor +---------- +The name of the StateType ({024eb4d2-ed0b-428b-b5c4-ce9aba1fee1e}) of ThingClass indoorModule +---------- +The name of the StateType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor + Sidste opdatering + - Logged inchanged - The name of the EventType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection + Logged in + The name of the StateType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection - MAC Address - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {73a76c5c-84f5-4e65-8541-457e5aca9bb0}) ----------- -The name of the ParamType (ThingClass: indoor, Type: thing, ID: {157d470a-e579-4d0e-b879-6b5bfa8e34ae}) - MAC Address - - - Netatmo - The name of the vendor ({4b46b4ed-5ec9-4aa4-afc3-92d3f80e6351}) ----------- -The name of the plugin Netatmo ({69d14951-0c02-4877-bcef-dffdf48b7ccb}) - - - - Netatmo Connection - The name of the ThingClass ({728d5a67-27a3-400e-b83c-2765f5196f69}) - Netatmo-forbindelse + MAC Address + The name of the ParamType (ThingClass: rainGauge, Type: thing, ID: {a2584452-dd16-4655-8cb5-876bb6140c47}) +---------- +The name of the ParamType (ThingClass: windModule, Type: thing, ID: {7abc08f2-7074-40fe-aa1e-1727a5488dfe}) +---------- +The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {73a76c5c-84f5-4e65-8541-457e5aca9bb0}) +---------- +The name of the ParamType (ThingClass: indoorModule, Type: thing, ID: {1881e22f-36f0-447d-a507-e9d541236334}) +---------- +The name of the ParamType (ThingClass: indoor, Type: thing, ID: {157d470a-e579-4d0e-b879-6b5bfa8e34ae}) + MAC Address - Noise - The name of the ParamType (ThingClass: indoor, EventType: noise, ID: {906cea9d-1daf-4e9c-90b9-e40f43052a34}) + Netatmo + The name of the vendor ({4b46b4ed-5ec9-4aa4-afc3-92d3f80e6351}) ---------- -The name of the StateType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor - Støj +The name of the plugin netatmo ({69d14951-0c02-4877-bcef-dffdf48b7ccb}) + - Noise changed - The name of the EventType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor - Støj ændret + Netatmo account + The name of the ThingClass ({728d5a67-27a3-400e-b83c-2765f5196f69}) + + + + + Noise + The name of the StateType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor + Støj - - Pressure - The name of the ParamType (ThingClass: indoor, EventType: pressure, ID: {03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) ----------- -The name of the StateType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor - Lufttryk + Outdoor module + The name of the ThingClass ({6cc01d62-7317-4ec4-8ac4-a4cab762c179}) + + - Pressure changed - The name of the EventType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor - Lufttryk ændret + Pressure + The name of the StateType ({9d2c409e-0d4f-4e03-89ad-fe0cad776e66}) of ThingClass indoorModule +---------- +The name of the StateType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor + Lufttryk + Rain gauge + The name of the ThingClass ({33a7230b-588f-471c-895d-4a1ddd417c2a}) + + + - Signal strength - The name of the ParamType (ThingClass: outdoor, EventType: signalStrength, ID: {0faa3d08-9004-46fb-a5aa-a59b75e454cc}) ----------- -The name of the StateType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor - Signalstyrke + Rainfall in the last 24 hours + The name of the StateType ({3f475b34-ad5f-4821-8452-2f6869ef46b4}) of ThingClass rainGauge + - Signal strength changed - The name of the EventType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor - Signalstyrke ændret + Rainfall in the past hour + The name of the StateType ({6c55bcd5-b1b3-4ea2-8b4c-2689941d43bb}) of ThingClass rainGauge + - - Temperature - The name of the ParamType (ThingClass: outdoor, EventType: temperature, ID: {f98776bd-887e-4b01-a87f-3d8224180563}) + Signal strength + The name of the StateType ({d44a1e64-c5e5-4dae-944b-bce23192f610}) of ThingClass rainGauge ---------- -The name of the StateType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor +The name of the StateType ({7eafdb74-c99a-40c4-95ca-99f5ddf82355}) of ThingClass windModule ---------- -The name of the ParamType (ThingClass: indoor, EventType: temperature, ID: {3cb25538-e463-40ae-92f9-8f34f0c06b92}) ----------- -The name of the StateType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor - Temperatur +The name of the StateType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor + Signalstyrke + - Temperature changed - The name of the EventType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor + Temperature + The name of the StateType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor ---------- -The name of the EventType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor - Temperatur ændret +The name of the StateType ({33957a0c-75b7-45d0-8e07-731c7c20df0e}) of ThingClass indoorModule +---------- +The name of the StateType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor + Temperatur - Temperature maximum - The name of the ParamType (ThingClass: outdoor, EventType: temperatureMax, ID: {aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) + The name of the StateType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor ---------- -The name of the StateType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: temperatureMax, ID: {dd30507e-037b-4c74-bcca-e04b94c7c5fe}) +The name of the StateType ({304472e3-56fc-4ee6-96df-aeb4b570a1d1}) of ThingClass indoorModule ---------- The name of the StateType ({dd30507e-037b-4c74-bcca-e04b94c7c5fe}) of ThingClass indoor - Maximal temperatur + Maximal temperatur + - Temperature maximum changed - The name of the EventType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor + Temperature minimum + The name of the StateType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ---------- -The name of the EventType ({dd30507e-037b-4c74-bcca-e04b94c7c5fe}) of ThingClass indoor - Maximal temperatur ændret +The name of the StateType ({2f9e4042-b699-4036-be69-a84e561ac38c}) of ThingClass indoorModule +---------- +The name of the StateType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor + Minimumstemperatur + Username + The name of the StateType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection + + + + WiFi signal strength + The name of the StateType ({36fd51d9-7693-42ee-b0ae-b623e219d950}) of ThingClass indoorModule +---------- +The name of the StateType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor + WiFi signalstyrke + + - Temperature minimum - The name of the ParamType (ThingClass: outdoor, EventType: temperatureMin, ID: {b71e0c8b-3c94-421e-830e-dab97b6c104e}) ----------- -The name of the StateType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: temperatureMin, ID: {ae8bb713-8805-4efd-89a1-bca44a1f1690}) ----------- -The name of the StateType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor - Minimumstemperatur + Wind direction + The name of the StateType ({65ad8900-583a-4bf7-8bff-f738225ca017}) of ThingClass windModule + + Wind module + The name of the ThingClass ({160096e8-5ad0-4ca5-b7f2-60d64865ca71}) + + + - Temperature minimum changed - The name of the EventType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ----------- -The name of the EventType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor - Minimumstemperatur ændret - - - - - Username - The name of the ParamType (ThingClass: netatmoConnection, EventType: userDisplayName, ID: {b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) ----------- -The name of the StateType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection + Wind speed + The name of the StateType ({9f6c1540-9933-4ef1-96d7-aecade2a8199}) of ThingClass windModule - - - Username changed - The name of the EventType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection - - - - - - WiFi signal strength - The name of the ParamType (ThingClass: indoor, EventType: wifiStrength, ID: {6ea906d4-5740-454d-a730-6fdb9fa0d624}) ----------- -The name of the StateType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor - WiFi signalstyrke - - - - WiFi signal strength changed - The name of the EventType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor - WiFi signalstyrke ændret - - - - - name - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {719e1f92-a9c8-42d6-83e1-652a0f182209}) ----------- -The name of the ParamType (ThingClass: indoor, Type: thing, ID: {a97d256c-e159-4aa0-bc71-6bd7cd0688b3}) - navn - - - - Indoor Station - The name of the ThingClass ({1c809049-04f2-4710-99f5-6ed379a2934f}) - Indendørsstation - - - - Outdoor Station - The name of the ThingClass ({6cc01d62-7317-4ec4-8ac4-a4cab762c179}) - Udendørsstation - diff --git a/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-de.ts b/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-de.ts index 832570c1..34debb4c 100644 --- a/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-de.ts +++ b/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-de.ts @@ -4,371 +4,325 @@ IntegrationPluginNetatmo - - - No API key installed - Kein API Schlüssel installiert - - - - Netatmo server is not reachable. - Netatmo Server ist nicht erreichbar. - - - - Please enter the login credentials for your Netatmo account. - Bitte geben Sie die Anmeldeinformationen für Ihr Netatmo-Konto ein. - - - - Wrong username or password - Benutzername oder Passwort falsch - - + - Login credentials not found. - Anmeldeinformationen nicht gefunden. + No API key installed. + Es ist kein API Schlüssel installiert. - - Error logging in to Netatmo server. - Fehler beim Anmelden am Netatmo-Server. + + The Netatmo server is not reachable. + Der Netatmo Server ist nicht erreichbar. + + + + + Failed to log in to the Netatmo server. + Die Anmeldung beim Netatmo Server ist fehlgeschlagen. + + + + Could not authenticate on the server. Please reconfigure the connection. + Fehler bei der Authentifizieren. Bitte richte die Verbindung neu ein. + + + + Authentication failed. Please reconfigure the connection. + Fehler bei der Authentifizieren. Bitte richte die Verbindung neu ein. - Netatmo + netatmo - - + Available - The name of the ParamType (ThingClass: netatmoConnection, EventType: connected, ID: {2f79bc1d-27ed-480a-b583-728363c83ea6}) ----------- -The name of the StateType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection + The name of the StateType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection Verfügbar + + + - Available changed - The name of the EventType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection - Verfügbar geändert - - - Base station - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {d7a0ec46-760c-4fdc-9753-fe10c86fe1b9}) + The name of the ParamType (ThingClass: rainGauge, Type: thing, ID: {0b8d6d09-a2fa-4bb8-b96b-f444c3eea31b}) +---------- +The name of the ParamType (ThingClass: windModule, Type: thing, ID: {38f375ca-5a45-4628-9e0d-088b4cc25c58}) +---------- +The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {d7a0ec46-760c-4fdc-9753-fe10c86fe1b9}) +---------- +The name of the ParamType (ThingClass: indoorModule, Type: thing, ID: {42f97253-6883-4b88-b088-d86cf467e793}) Basisstation + - Battery - The name of the ParamType (ThingClass: outdoor, EventType: batteryLevel, ID: {15d8fae1-ba47-42e1-994d-530e8017c965}) ----------- -The name of the StateType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor - Batterie - - - Battery changed - The name of the EventType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor - Batterie geändert + Battery + The name of the StateType ({e06955c4-963b-4f8f-9c0c-975c1cd75edb}) of ThingClass rainGauge +---------- +The name of the StateType ({560e0bd7-3c75-430e-8ef3-65bbbe85a3af}) of ThingClass windModule +---------- +The name of the StateType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor +---------- +The name of the StateType ({d9fe5e52-8f42-41fd-aa5f-fd157ad6a6be}) of ThingClass indoorModule + Batterie + + Battery critical - The name of the ParamType (ThingClass: outdoor, EventType: batteryCritical, ID: {f8aeb144-014d-4ccb-81db-64ffc70f1c97}) + The name of the StateType ({dd8f8620-fcca-408b-835f-2c257e18aee2}) of ThingClass rainGauge ---------- -The name of the StateType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor +The name of the StateType ({5dcddcf9-da07-4bac-9988-018168a516ad}) of ThingClass windModule +---------- +The name of the StateType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor +---------- +The name of the StateType ({7cde2c79-2b90-4ced-97ac-2653d314cf73}) of ThingClass indoorModule Batterie kritisch - - Battery critical changed - The name of the EventType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor - Batterie kritisch geändert - - - + CO2 - The name of the ParamType (ThingClass: indoor, EventType: co2, ID: {e5710bd1-79fa-4bd4-9052-8416aae909b9}) + The name of the StateType ({a3fe53a3-0940-4fcb-915d-0297ae584917}) of ThingClass indoorModule ---------- The name of the StateType ({e5710bd1-79fa-4bd4-9052-8416aae909b9}) of ThingClass indoor CO2 - - CO2 changed - The name of the EventType ({e5710bd1-79fa-4bd4-9052-8416aae909b9}) of ThingClass indoor - CO2 geändert + + + + + + Connected + The name of the StateType ({d726cd1e-75c5-4d50-adbd-962301ea9b91}) of ThingClass rainGauge +---------- +The name of the StateType ({5d369774-78df-4259-bdff-cc82b946470b}) of ThingClass windModule +---------- +The name of the StateType ({21d7f2b7-e45b-4986-b3da-d6e8c0421bfc}) of ThingClass outdoor +---------- +The name of the StateType ({5b819dbf-698d-49ae-aeb5-a15db9ef515a}) of ThingClass indoorModule +---------- +The name of the StateType ({d84ba5d7-5202-4786-b983-958b594c341f}) of ThingClass indoor + Verbunden - + Custom client id The name of the ParamType (ThingClass: netatmo, Type: plugin, ID: {fbda653d-d59e-438c-a70c-0ccbe8080215}) Benutzerdefinierte Client-ID - + Custom client secret The name of the ParamType (ThingClass: netatmo, Type: plugin, ID: {06439e1e-da15-4483-8737-0a6aa967c479}) - Benutzerdefinierte Client-Secret + Benutzerdefinierte Client-Geheimnis - - - - + + + Humidity - The name of the ParamType (ThingClass: outdoor, EventType: humidity, ID: {7ba6ddeb-5142-4b87-9729-487fcda394df}) + The name of the StateType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ---------- -The name of the StateType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: humidity, ID: {e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) +The name of the StateType ({e39c6ea6-8d53-42c7-bfce-e9e4aa3dfec9}) of ThingClass indoorModule ---------- The name of the StateType ({e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) of ThingClass indoor Luftfeuchte - - - Humidity changed - The name of the EventType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ----------- -The name of the EventType ({e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) of ThingClass indoor - Luftfeuchte geändert + + Indoor main station + The name of the ThingClass ({1c809049-04f2-4710-99f5-6ed379a2934f}) + Innen Hauptstation - - + Indoor module + The name of the ThingClass ({a6706b11-325b-4be3-b0d1-c09e027955b4}) + Innenstation + + + + + + Last update - The name of the ParamType (ThingClass: outdoor, EventType: updateTime, ID: {154aad5c-4998-43c2-b9ee-0b997eb6dd69}) + The name of the StateType ({3c87cbf7-73ad-4673-9abd-188e1f4facfb}) of ThingClass rainGauge +---------- +The name of the StateType ({aa4be9dc-06e4-48a2-b83e-45c523da116b}) of ThingClass windModule ---------- The name of the StateType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor ---------- -The name of the ParamType (ThingClass: indoor, EventType: updateTime, ID: {50da9f6b-c350-401c-a72e-2e4036f3975d}) +The name of the StateType ({024eb4d2-ed0b-428b-b5c4-ce9aba1fee1e}) of ThingClass indoorModule ---------- The name of the StateType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor Letztes Update - - - - Last update changed - The name of the EventType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor ----------- -The name of the EventType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor - Letztes Update geändert - - - - - Logged in - The name of the ParamType (ThingClass: netatmoConnection, EventType: loggedIn, ID: {d1ca8579-5d5a-4372-9139-4b083efead2e}) ----------- -The name of the StateType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection - Eingeloggt - - Logged inchanged - The name of the EventType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection - Eingeloggt geändert + Logged in + The name of the StateType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection + Eingeloggt + + + MAC Address - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {73a76c5c-84f5-4e65-8541-457e5aca9bb0}) + The name of the ParamType (ThingClass: rainGauge, Type: thing, ID: {a2584452-dd16-4655-8cb5-876bb6140c47}) +---------- +The name of the ParamType (ThingClass: windModule, Type: thing, ID: {7abc08f2-7074-40fe-aa1e-1727a5488dfe}) +---------- +The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {73a76c5c-84f5-4e65-8541-457e5aca9bb0}) +---------- +The name of the ParamType (ThingClass: indoorModule, Type: thing, ID: {1881e22f-36f0-447d-a507-e9d541236334}) ---------- The name of the ParamType (ThingClass: indoor, Type: thing, ID: {157d470a-e579-4d0e-b879-6b5bfa8e34ae}) MAC Adresse - - + + Netatmo The name of the vendor ({4b46b4ed-5ec9-4aa4-afc3-92d3f80e6351}) ---------- -The name of the plugin Netatmo ({69d14951-0c02-4877-bcef-dffdf48b7ccb}) +The name of the plugin netatmo ({69d14951-0c02-4877-bcef-dffdf48b7ccb}) Netatmo - - Netatmo Connection + + Netatmo account The name of the ThingClass ({728d5a67-27a3-400e-b83c-2765f5196f69}) - Netatmo Verbindung + Netatmo Account - - + Noise - The name of the ParamType (ThingClass: indoor, EventType: noise, ID: {906cea9d-1daf-4e9c-90b9-e40f43052a34}) ----------- -The name of the StateType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor + The name of the StateType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor Geräusch - - Noise changed - The name of the EventType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor - Geräusch geändert + + Outdoor module + The name of the ThingClass ({6cc01d62-7317-4ec4-8ac4-a4cab762c179}) + Außenmodul - + Pressure - The name of the ParamType (ThingClass: indoor, EventType: pressure, ID: {03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) + The name of the StateType ({9d2c409e-0d4f-4e03-89ad-fe0cad776e66}) of ThingClass indoorModule ---------- The name of the StateType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor Luftdruck - - Pressure changed - The name of the EventType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor - Luftdruck geändert + + Rain gauge + The name of the ThingClass ({33a7230b-588f-471c-895d-4a1ddd417c2a}) + Regenmesser - - Signal strength - The name of the ParamType (ThingClass: outdoor, EventType: signalStrength, ID: {0faa3d08-9004-46fb-a5aa-a59b75e454cc}) ----------- -The name of the StateType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor - Signalstärke + Rainfall in the last 24 hours + The name of the StateType ({3f475b34-ad5f-4821-8452-2f6869ef46b4}) of ThingClass rainGauge + Nierschlag in den letzten 24h - Signal strength changed - The name of the EventType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor - Signalstärke geändert + Rainfall in the past hour + The name of the StateType ({6c55bcd5-b1b3-4ea2-8b4c-2689941d43bb}) of ThingClass rainGauge + Nierschlag in den letzten Stunde + Signal strength + The name of the StateType ({d44a1e64-c5e5-4dae-944b-bce23192f610}) of ThingClass rainGauge +---------- +The name of the StateType ({7eafdb74-c99a-40c4-95ca-99f5ddf82355}) of ThingClass windModule +---------- +The name of the StateType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor + Signalstärke + + + + Temperature - The name of the ParamType (ThingClass: outdoor, EventType: temperature, ID: {f98776bd-887e-4b01-a87f-3d8224180563}) + The name of the StateType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor ---------- -The name of the StateType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: temperature, ID: {3cb25538-e463-40ae-92f9-8f34f0c06b92}) +The name of the StateType ({33957a0c-75b7-45d0-8e07-731c7c20df0e}) of ThingClass indoorModule ---------- The name of the StateType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor Temperatur - - - - Temperature changed - The name of the EventType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor ----------- -The name of the EventType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor - Temperatur geändert - - Temperature maximum - The name of the ParamType (ThingClass: outdoor, EventType: temperatureMax, ID: {aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) + The name of the StateType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor ---------- -The name of the StateType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: temperatureMax, ID: {dd30507e-037b-4c74-bcca-e04b94c7c5fe}) +The name of the StateType ({304472e3-56fc-4ee6-96df-aeb4b570a1d1}) of ThingClass indoorModule ---------- The name of the StateType ({dd30507e-037b-4c74-bcca-e04b94c7c5fe}) of ThingClass indoor Temperaturmaximum + - Temperature maximum changed - The name of the EventType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor ----------- -The name of the EventType ({dd30507e-037b-4c74-bcca-e04b94c7c5fe}) of ThingClass indoor - Temperaturmaximum geändert - - - - - - Temperature minimum - The name of the ParamType (ThingClass: outdoor, EventType: temperatureMin, ID: {b71e0c8b-3c94-421e-830e-dab97b6c104e}) + The name of the StateType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ---------- -The name of the StateType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: temperatureMin, ID: {ae8bb713-8805-4efd-89a1-bca44a1f1690}) +The name of the StateType ({2f9e4042-b699-4036-be69-a84e561ac38c}) of ThingClass indoorModule ---------- The name of the StateType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor Temperaturminimum - - - Temperature minimum changed - The name of the EventType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ----------- -The name of the EventType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor - Temperaturminimum geändert - - - - + Username - The name of the ParamType (ThingClass: netatmoConnection, EventType: userDisplayName, ID: {b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) ----------- -The name of the StateType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection + The name of the StateType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection Benutzername - - Username changed - The name of the EventType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection - Benutzername geändert - - - - + + WiFi signal strength - The name of the ParamType (ThingClass: indoor, EventType: wifiStrength, ID: {6ea906d4-5740-454d-a730-6fdb9fa0d624}) + The name of the StateType ({36fd51d9-7693-42ee-b0ae-b623e219d950}) of ThingClass indoorModule ---------- The name of the StateType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor WiFi Signalstärke - - WiFi signal strength changed - The name of the EventType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor - WiFi Signalstärke geändert + + Wind direction + The name of the StateType ({65ad8900-583a-4bf7-8bff-f738225ca017}) of ThingClass windModule + Windrichtung - - - name - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {719e1f92-a9c8-42d6-83e1-652a0f182209}) ----------- -The name of the ParamType (ThingClass: indoor, Type: thing, ID: {a97d256c-e159-4aa0-bc71-6bd7cd0688b3}) - Name + + Wind module + The name of the ThingClass ({160096e8-5ad0-4ca5-b7f2-60d64865ca71}) + Wind Modul - - Indoor Station - The name of the ThingClass ({1c809049-04f2-4710-99f5-6ed379a2934f}) - Innenstation - - - - Outdoor Station - The name of the ThingClass ({6cc01d62-7317-4ec4-8ac4-a4cab762c179}) - Außenstation + + Wind speed + The name of the StateType ({9f6c1540-9933-4ef1-96d7-aecade2a8199}) of ThingClass windModule + Windgeschwindigkeit diff --git a/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-en_US.ts b/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-en_US.ts index 759be675..bb74b107 100644 --- a/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-en_US.ts +++ b/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-en_US.ts @@ -4,370 +4,324 @@ IntegrationPluginNetatmo - - - No API key installed - - - - - Netatmo server is not reachable. - - - - - Please enter the login credentials for your Netatmo account. - - - - - Wrong username or password - - - + - Login credentials not found. + No API key installed. - - Error logging in to Netatmo server. + + The Netatmo server is not reachable. + + + + + + Failed to log in to the Netatmo server. + + + + + Could not authenticate on the server. Please reconfigure the connection. + + + + + Authentication failed. Please reconfigure the connection. - Netatmo + netatmo - - + Available - The name of the ParamType (ThingClass: netatmoConnection, EventType: connected, ID: {2f79bc1d-27ed-480a-b583-728363c83ea6}) ----------- -The name of the StateType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection + The name of the StateType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection + + + - Available changed - The name of the EventType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection + Base station + The name of the ParamType (ThingClass: rainGauge, Type: thing, ID: {0b8d6d09-a2fa-4bb8-b96b-f444c3eea31b}) +---------- +The name of the ParamType (ThingClass: windModule, Type: thing, ID: {38f375ca-5a45-4628-9e0d-088b4cc25c58}) +---------- +The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {d7a0ec46-760c-4fdc-9753-fe10c86fe1b9}) +---------- +The name of the ParamType (ThingClass: indoorModule, Type: thing, ID: {42f97253-6883-4b88-b088-d86cf467e793}) - Base station - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {d7a0ec46-760c-4fdc-9753-fe10c86fe1b9}) - - - - Battery - The name of the ParamType (ThingClass: outdoor, EventType: batteryLevel, ID: {15d8fae1-ba47-42e1-994d-530e8017c965}) ----------- -The name of the StateType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor - - - - Battery changed - The name of the EventType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor + Battery + The name of the StateType ({e06955c4-963b-4f8f-9c0c-975c1cd75edb}) of ThingClass rainGauge +---------- +The name of the StateType ({560e0bd7-3c75-430e-8ef3-65bbbe85a3af}) of ThingClass windModule +---------- +The name of the StateType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor +---------- +The name of the StateType ({d9fe5e52-8f42-41fd-aa5f-fd157ad6a6be}) of ThingClass indoorModule - Battery critical - The name of the ParamType (ThingClass: outdoor, EventType: batteryCritical, ID: {f8aeb144-014d-4ccb-81db-64ffc70f1c97}) ----------- -The name of the StateType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor - - - - Battery critical changed - The name of the EventType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor + + Battery critical + The name of the StateType ({dd8f8620-fcca-408b-835f-2c257e18aee2}) of ThingClass rainGauge +---------- +The name of the StateType ({5dcddcf9-da07-4bac-9988-018168a516ad}) of ThingClass windModule +---------- +The name of the StateType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor +---------- +The name of the StateType ({7cde2c79-2b90-4ced-97ac-2653d314cf73}) of ThingClass indoorModule - + CO2 - The name of the ParamType (ThingClass: indoor, EventType: co2, ID: {e5710bd1-79fa-4bd4-9052-8416aae909b9}) + The name of the StateType ({a3fe53a3-0940-4fcb-915d-0297ae584917}) of ThingClass indoorModule ---------- The name of the StateType ({e5710bd1-79fa-4bd4-9052-8416aae909b9}) of ThingClass indoor - - CO2 changed - The name of the EventType ({e5710bd1-79fa-4bd4-9052-8416aae909b9}) of ThingClass indoor + + + + + + Connected + The name of the StateType ({d726cd1e-75c5-4d50-adbd-962301ea9b91}) of ThingClass rainGauge +---------- +The name of the StateType ({5d369774-78df-4259-bdff-cc82b946470b}) of ThingClass windModule +---------- +The name of the StateType ({21d7f2b7-e45b-4986-b3da-d6e8c0421bfc}) of ThingClass outdoor +---------- +The name of the StateType ({5b819dbf-698d-49ae-aeb5-a15db9ef515a}) of ThingClass indoorModule +---------- +The name of the StateType ({d84ba5d7-5202-4786-b983-958b594c341f}) of ThingClass indoor - + Custom client id The name of the ParamType (ThingClass: netatmo, Type: plugin, ID: {fbda653d-d59e-438c-a70c-0ccbe8080215}) - + Custom client secret The name of the ParamType (ThingClass: netatmo, Type: plugin, ID: {06439e1e-da15-4483-8737-0a6aa967c479}) - - - - + + + Humidity - The name of the ParamType (ThingClass: outdoor, EventType: humidity, ID: {7ba6ddeb-5142-4b87-9729-487fcda394df}) + The name of the StateType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ---------- -The name of the StateType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: humidity, ID: {e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) +The name of the StateType ({e39c6ea6-8d53-42c7-bfce-e9e4aa3dfec9}) of ThingClass indoorModule ---------- The name of the StateType ({e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) of ThingClass indoor - - - Humidity changed - The name of the EventType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ----------- -The name of the EventType ({e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) of ThingClass indoor + + Indoor main station + The name of the ThingClass ({1c809049-04f2-4710-99f5-6ed379a2934f}) - - + Indoor module + The name of the ThingClass ({a6706b11-325b-4be3-b0d1-c09e027955b4}) + + + + + + + Last update - The name of the ParamType (ThingClass: outdoor, EventType: updateTime, ID: {154aad5c-4998-43c2-b9ee-0b997eb6dd69}) + The name of the StateType ({3c87cbf7-73ad-4673-9abd-188e1f4facfb}) of ThingClass rainGauge +---------- +The name of the StateType ({aa4be9dc-06e4-48a2-b83e-45c523da116b}) of ThingClass windModule ---------- The name of the StateType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor ---------- -The name of the ParamType (ThingClass: indoor, EventType: updateTime, ID: {50da9f6b-c350-401c-a72e-2e4036f3975d}) +The name of the StateType ({024eb4d2-ed0b-428b-b5c4-ce9aba1fee1e}) of ThingClass indoorModule ---------- The name of the StateType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor - - - - Last update changed - The name of the EventType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor ----------- -The name of the EventType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor - - - - - - Logged in - The name of the ParamType (ThingClass: netatmoConnection, EventType: loggedIn, ID: {d1ca8579-5d5a-4372-9139-4b083efead2e}) ----------- -The name of the StateType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection - - - Logged inchanged - The name of the EventType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection + Logged in + The name of the StateType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection + + + MAC Address - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {73a76c5c-84f5-4e65-8541-457e5aca9bb0}) + The name of the ParamType (ThingClass: rainGauge, Type: thing, ID: {a2584452-dd16-4655-8cb5-876bb6140c47}) +---------- +The name of the ParamType (ThingClass: windModule, Type: thing, ID: {7abc08f2-7074-40fe-aa1e-1727a5488dfe}) +---------- +The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {73a76c5c-84f5-4e65-8541-457e5aca9bb0}) +---------- +The name of the ParamType (ThingClass: indoorModule, Type: thing, ID: {1881e22f-36f0-447d-a507-e9d541236334}) ---------- The name of the ParamType (ThingClass: indoor, Type: thing, ID: {157d470a-e579-4d0e-b879-6b5bfa8e34ae}) - - + + Netatmo The name of the vendor ({4b46b4ed-5ec9-4aa4-afc3-92d3f80e6351}) ---------- -The name of the plugin Netatmo ({69d14951-0c02-4877-bcef-dffdf48b7ccb}) - - - - - Netatmo Connection - The name of the ThingClass ({728d5a67-27a3-400e-b83c-2765f5196f69}) - - - - - - Noise - The name of the ParamType (ThingClass: indoor, EventType: noise, ID: {906cea9d-1daf-4e9c-90b9-e40f43052a34}) ----------- -The name of the StateType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor +The name of the plugin netatmo ({69d14951-0c02-4877-bcef-dffdf48b7ccb}) - Noise changed - The name of the EventType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor + Netatmo account + The name of the ThingClass ({728d5a67-27a3-400e-b83c-2765f5196f69}) + + + + + Noise + The name of the StateType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor + Outdoor module + The name of the ThingClass ({6cc01d62-7317-4ec4-8ac4-a4cab762c179}) + + + + Pressure - The name of the ParamType (ThingClass: indoor, EventType: pressure, ID: {03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) + The name of the StateType ({9d2c409e-0d4f-4e03-89ad-fe0cad776e66}) of ThingClass indoorModule ---------- The name of the StateType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor - - Pressure changed - The name of the EventType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor + + Rain gauge + The name of the ThingClass ({33a7230b-588f-471c-895d-4a1ddd417c2a}) - - Signal strength - The name of the ParamType (ThingClass: outdoor, EventType: signalStrength, ID: {0faa3d08-9004-46fb-a5aa-a59b75e454cc}) ----------- -The name of the StateType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor + Rainfall in the last 24 hours + The name of the StateType ({3f475b34-ad5f-4821-8452-2f6869ef46b4}) of ThingClass rainGauge - Signal strength changed - The name of the EventType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor + Rainfall in the past hour + The name of the StateType ({6c55bcd5-b1b3-4ea2-8b4c-2689941d43bb}) of ThingClass rainGauge - - Temperature - The name of the ParamType (ThingClass: outdoor, EventType: temperature, ID: {f98776bd-887e-4b01-a87f-3d8224180563}) + Signal strength + The name of the StateType ({d44a1e64-c5e5-4dae-944b-bce23192f610}) of ThingClass rainGauge ---------- -The name of the StateType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor +The name of the StateType ({7eafdb74-c99a-40c4-95ca-99f5ddf82355}) of ThingClass windModule ---------- -The name of the ParamType (ThingClass: indoor, EventType: temperature, ID: {3cb25538-e463-40ae-92f9-8f34f0c06b92}) ----------- -The name of the StateType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor +The name of the StateType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor + - Temperature changed - The name of the EventType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor + Temperature + The name of the StateType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor ---------- -The name of the EventType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor +The name of the StateType ({33957a0c-75b7-45d0-8e07-731c7c20df0e}) of ThingClass indoorModule +---------- +The name of the StateType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor - Temperature maximum - The name of the ParamType (ThingClass: outdoor, EventType: temperatureMax, ID: {aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) + The name of the StateType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor ---------- -The name of the StateType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: temperatureMax, ID: {dd30507e-037b-4c74-bcca-e04b94c7c5fe}) +The name of the StateType ({304472e3-56fc-4ee6-96df-aeb4b570a1d1}) of ThingClass indoorModule ---------- The name of the StateType ({dd30507e-037b-4c74-bcca-e04b94c7c5fe}) of ThingClass indoor + - Temperature maximum changed - The name of the EventType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor ----------- -The name of the EventType ({dd30507e-037b-4c74-bcca-e04b94c7c5fe}) of ThingClass indoor - - - - - - - Temperature minimum - The name of the ParamType (ThingClass: outdoor, EventType: temperatureMin, ID: {b71e0c8b-3c94-421e-830e-dab97b6c104e}) + The name of the StateType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ---------- -The name of the StateType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: temperatureMin, ID: {ae8bb713-8805-4efd-89a1-bca44a1f1690}) +The name of the StateType ({2f9e4042-b699-4036-be69-a84e561ac38c}) of ThingClass indoorModule ---------- The name of the StateType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor - - - Temperature minimum changed - The name of the EventType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ----------- -The name of the EventType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor - - - - - + Username - The name of the ParamType (ThingClass: netatmoConnection, EventType: userDisplayName, ID: {b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) ----------- -The name of the StateType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection + The name of the StateType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection - - Username changed - The name of the EventType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection - - - - - + + WiFi signal strength - The name of the ParamType (ThingClass: indoor, EventType: wifiStrength, ID: {6ea906d4-5740-454d-a730-6fdb9fa0d624}) + The name of the StateType ({36fd51d9-7693-42ee-b0ae-b623e219d950}) of ThingClass indoorModule ---------- The name of the StateType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor - - WiFi signal strength changed - The name of the EventType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor + + Wind direction + The name of the StateType ({65ad8900-583a-4bf7-8bff-f738225ca017}) of ThingClass windModule - - - name - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {719e1f92-a9c8-42d6-83e1-652a0f182209}) ----------- -The name of the ParamType (ThingClass: indoor, Type: thing, ID: {a97d256c-e159-4aa0-bc71-6bd7cd0688b3}) + + Wind module + The name of the ThingClass ({160096e8-5ad0-4ca5-b7f2-60d64865ca71}) - - Indoor Station - The name of the ThingClass ({1c809049-04f2-4710-99f5-6ed379a2934f}) - - - - - Outdoor Station - The name of the ThingClass ({6cc01d62-7317-4ec4-8ac4-a4cab762c179}) + + Wind speed + The name of the StateType ({9f6c1540-9933-4ef1-96d7-aecade2a8199}) of ThingClass windModule diff --git a/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-es.ts b/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-es.ts index 7ea72f4b..e0845107 100644 --- a/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-es.ts +++ b/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-es.ts @@ -4,371 +4,325 @@ IntegrationPluginNetatmo - - - No API key installed - - - - - Netatmo server is not reachable. - O servidor Netatmo não é alcançável. - - - - Please enter the login credentials for your Netatmo account. - Por favor introduza as credenciais de login para a sua conta Netatmo. - - - - Wrong username or password - Nome de utilizador ou palavra-passe errados - - + - Login credentials not found. + No API key installed. - - Error logging in to Netatmo server. - Erro ao iniciar sessão no servidor Netatmo. + + The Netatmo server is not reachable. + + + + + + Failed to log in to the Netatmo server. + + + + + Could not authenticate on the server. Please reconfigure the connection. + + + + + Authentication failed. Please reconfigure the connection. + - Netatmo + netatmo - - + Available - The name of the ParamType (ThingClass: netatmoConnection, EventType: connected, ID: {2f79bc1d-27ed-480a-b583-728363c83ea6}) ----------- -The name of the StateType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection - Disponible en + The name of the StateType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection + Disponible en + + + - Available changed - The name of the EventType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection - Disponible cambiado + Base station + The name of the ParamType (ThingClass: rainGauge, Type: thing, ID: {0b8d6d09-a2fa-4bb8-b96b-f444c3eea31b}) +---------- +The name of the ParamType (ThingClass: windModule, Type: thing, ID: {38f375ca-5a45-4628-9e0d-088b4cc25c58}) +---------- +The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {d7a0ec46-760c-4fdc-9753-fe10c86fe1b9}) +---------- +The name of the ParamType (ThingClass: indoorModule, Type: thing, ID: {42f97253-6883-4b88-b088-d86cf467e793}) + Estación base - Base station - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {d7a0ec46-760c-4fdc-9753-fe10c86fe1b9}) - Estación base - - - Battery - The name of the ParamType (ThingClass: outdoor, EventType: batteryLevel, ID: {15d8fae1-ba47-42e1-994d-530e8017c965}) ----------- -The name of the StateType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor - Batería - - - Battery changed - The name of the EventType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor - Batería cambiada + Battery + The name of the StateType ({e06955c4-963b-4f8f-9c0c-975c1cd75edb}) of ThingClass rainGauge +---------- +The name of the StateType ({560e0bd7-3c75-430e-8ef3-65bbbe85a3af}) of ThingClass windModule +---------- +The name of the StateType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor +---------- +The name of the StateType ({d9fe5e52-8f42-41fd-aa5f-fd157ad6a6be}) of ThingClass indoorModule + Batería - Battery critical - The name of the ParamType (ThingClass: outdoor, EventType: batteryCritical, ID: {f8aeb144-014d-4ccb-81db-64ffc70f1c97}) ----------- -The name of the StateType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor - Batería crítica - - - Battery critical changed - The name of the EventType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor - Batería crítica cambiada + + Battery critical + The name of the StateType ({dd8f8620-fcca-408b-835f-2c257e18aee2}) of ThingClass rainGauge +---------- +The name of the StateType ({5dcddcf9-da07-4bac-9988-018168a516ad}) of ThingClass windModule +---------- +The name of the StateType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor +---------- +The name of the StateType ({7cde2c79-2b90-4ced-97ac-2653d314cf73}) of ThingClass indoorModule + Batería crítica - + CO2 - The name of the ParamType (ThingClass: indoor, EventType: co2, ID: {e5710bd1-79fa-4bd4-9052-8416aae909b9}) + The name of the StateType ({a3fe53a3-0940-4fcb-915d-0297ae584917}) of ThingClass indoorModule ---------- The name of the StateType ({e5710bd1-79fa-4bd4-9052-8416aae909b9}) of ThingClass indoor - CO2 - - - - CO2 changed - The name of the EventType ({e5710bd1-79fa-4bd4-9052-8416aae909b9}) of ThingClass indoor - El CO2 cambió + CO2 + + + + + Connected + The name of the StateType ({d726cd1e-75c5-4d50-adbd-962301ea9b91}) of ThingClass rainGauge +---------- +The name of the StateType ({5d369774-78df-4259-bdff-cc82b946470b}) of ThingClass windModule +---------- +The name of the StateType ({21d7f2b7-e45b-4986-b3da-d6e8c0421bfc}) of ThingClass outdoor +---------- +The name of the StateType ({5b819dbf-698d-49ae-aeb5-a15db9ef515a}) of ThingClass indoorModule +---------- +The name of the StateType ({d84ba5d7-5202-4786-b983-958b594c341f}) of ThingClass indoor + + + + Custom client id The name of the ParamType (ThingClass: netatmo, Type: plugin, ID: {fbda653d-d59e-438c-a70c-0ccbe8080215}) - + Custom client secret The name of the ParamType (ThingClass: netatmo, Type: plugin, ID: {06439e1e-da15-4483-8737-0a6aa967c479}) - - - - + + + Humidity - The name of the ParamType (ThingClass: outdoor, EventType: humidity, ID: {7ba6ddeb-5142-4b87-9729-487fcda394df}) + The name of the StateType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ---------- -The name of the StateType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: humidity, ID: {e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) +The name of the StateType ({e39c6ea6-8d53-42c7-bfce-e9e4aa3dfec9}) of ThingClass indoorModule ---------- The name of the StateType ({e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) of ThingClass indoor - Humedad + Humedad - - - Humidity changed - The name of the EventType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ----------- -The name of the EventType ({e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) of ThingClass indoor - La humedad cambió - - - - - - Last update - The name of the ParamType (ThingClass: outdoor, EventType: updateTime, ID: {154aad5c-4998-43c2-b9ee-0b997eb6dd69}) ----------- -The name of the StateType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: updateTime, ID: {50da9f6b-c350-401c-a72e-2e4036f3975d}) ----------- -The name of the StateType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor - Última actualización - - - - - Last update changed - The name of the EventType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor ----------- -The name of the EventType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor - La última actualización ha cambiado - - - - - Logged in - The name of the ParamType (ThingClass: netatmoConnection, EventType: loggedIn, ID: {d1ca8579-5d5a-4372-9139-4b083efead2e}) ----------- -The name of the StateType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection + Indoor main station + The name of the ThingClass ({1c809049-04f2-4710-99f5-6ed379a2934f}) + + + Indoor module + The name of the ThingClass ({a6706b11-325b-4be3-b0d1-c09e027955b4}) + + + + + + + + + Last update + The name of the StateType ({3c87cbf7-73ad-4673-9abd-188e1f4facfb}) of ThingClass rainGauge +---------- +The name of the StateType ({aa4be9dc-06e4-48a2-b83e-45c523da116b}) of ThingClass windModule +---------- +The name of the StateType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor +---------- +The name of the StateType ({024eb4d2-ed0b-428b-b5c4-ce9aba1fee1e}) of ThingClass indoorModule +---------- +The name of the StateType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor + Última actualización + - Logged inchanged - The name of the EventType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection + Logged in + The name of the StateType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection - MAC Address - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {73a76c5c-84f5-4e65-8541-457e5aca9bb0}) ----------- -The name of the ParamType (ThingClass: indoor, Type: thing, ID: {157d470a-e579-4d0e-b879-6b5bfa8e34ae}) - MAC Address - - - Netatmo - The name of the vendor ({4b46b4ed-5ec9-4aa4-afc3-92d3f80e6351}) ----------- -The name of the plugin Netatmo ({69d14951-0c02-4877-bcef-dffdf48b7ccb}) - - - - Netatmo Connection - The name of the ThingClass ({728d5a67-27a3-400e-b83c-2765f5196f69}) - Conexión Netatmo + MAC Address + The name of the ParamType (ThingClass: rainGauge, Type: thing, ID: {a2584452-dd16-4655-8cb5-876bb6140c47}) +---------- +The name of the ParamType (ThingClass: windModule, Type: thing, ID: {7abc08f2-7074-40fe-aa1e-1727a5488dfe}) +---------- +The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {73a76c5c-84f5-4e65-8541-457e5aca9bb0}) +---------- +The name of the ParamType (ThingClass: indoorModule, Type: thing, ID: {1881e22f-36f0-447d-a507-e9d541236334}) +---------- +The name of the ParamType (ThingClass: indoor, Type: thing, ID: {157d470a-e579-4d0e-b879-6b5bfa8e34ae}) + MAC Address - Noise - The name of the ParamType (ThingClass: indoor, EventType: noise, ID: {906cea9d-1daf-4e9c-90b9-e40f43052a34}) + Netatmo + The name of the vendor ({4b46b4ed-5ec9-4aa4-afc3-92d3f80e6351}) ---------- -The name of the StateType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor - Ruido +The name of the plugin netatmo ({69d14951-0c02-4877-bcef-dffdf48b7ccb}) + - Noise changed - The name of the EventType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor - Ruido cambiado + Netatmo account + The name of the ThingClass ({728d5a67-27a3-400e-b83c-2765f5196f69}) + + + + + Noise + The name of the StateType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor + Ruido - - Pressure - The name of the ParamType (ThingClass: indoor, EventType: pressure, ID: {03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) ----------- -The name of the StateType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor - Presión + Outdoor module + The name of the ThingClass ({6cc01d62-7317-4ec4-8ac4-a4cab762c179}) + + - Pressure changed - The name of the EventType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor - La presión cambió + Pressure + The name of the StateType ({9d2c409e-0d4f-4e03-89ad-fe0cad776e66}) of ThingClass indoorModule +---------- +The name of the StateType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor + Presión + Rain gauge + The name of the ThingClass ({33a7230b-588f-471c-895d-4a1ddd417c2a}) + + + - Signal strength - The name of the ParamType (ThingClass: outdoor, EventType: signalStrength, ID: {0faa3d08-9004-46fb-a5aa-a59b75e454cc}) ----------- -The name of the StateType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor - La fuerza de la señal + Rainfall in the last 24 hours + The name of the StateType ({3f475b34-ad5f-4821-8452-2f6869ef46b4}) of ThingClass rainGauge + - Signal strength changed - The name of the EventType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor - The strength of the signal + Rainfall in the past hour + The name of the StateType ({6c55bcd5-b1b3-4ea2-8b4c-2689941d43bb}) of ThingClass rainGauge + - - Temperature - The name of the ParamType (ThingClass: outdoor, EventType: temperature, ID: {f98776bd-887e-4b01-a87f-3d8224180563}) + Signal strength + The name of the StateType ({d44a1e64-c5e5-4dae-944b-bce23192f610}) of ThingClass rainGauge ---------- -The name of the StateType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor +The name of the StateType ({7eafdb74-c99a-40c4-95ca-99f5ddf82355}) of ThingClass windModule ---------- -The name of the ParamType (ThingClass: indoor, EventType: temperature, ID: {3cb25538-e463-40ae-92f9-8f34f0c06b92}) ----------- -The name of the StateType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor - Temperature +The name of the StateType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor + La fuerza de la señal + - Temperature changed - The name of the EventType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor + Temperature + The name of the StateType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor ---------- -The name of the EventType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor - La temperatura cambió +The name of the StateType ({33957a0c-75b7-45d0-8e07-731c7c20df0e}) of ThingClass indoorModule +---------- +The name of the StateType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor + Temperature - Temperature maximum - The name of the ParamType (ThingClass: outdoor, EventType: temperatureMax, ID: {aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) + The name of the StateType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor ---------- -The name of the StateType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: temperatureMax, ID: {dd30507e-037b-4c74-bcca-e04b94c7c5fe}) +The name of the StateType ({304472e3-56fc-4ee6-96df-aeb4b570a1d1}) of ThingClass indoorModule ---------- The name of the StateType ({dd30507e-037b-4c74-bcca-e04b94c7c5fe}) of ThingClass indoor - Temperatura máxima + Temperatura máxima + - Temperature maximum changed - The name of the EventType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor + Temperature minimum + The name of the StateType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ---------- -The name of the EventType ({dd30507e-037b-4c74-bcca-e04b94c7c5fe}) of ThingClass indoor - El máximo de la temperatura ha cambiado +The name of the StateType ({2f9e4042-b699-4036-be69-a84e561ac38c}) of ThingClass indoorModule +---------- +The name of the StateType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor + Temperatura mínima + Username + The name of the StateType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection + + + + WiFi signal strength + The name of the StateType ({36fd51d9-7693-42ee-b0ae-b623e219d950}) of ThingClass indoorModule +---------- +The name of the StateType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor + La intensidad de la señal de WiFi + + - Temperature minimum - The name of the ParamType (ThingClass: outdoor, EventType: temperatureMin, ID: {b71e0c8b-3c94-421e-830e-dab97b6c104e}) ----------- -The name of the StateType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: temperatureMin, ID: {ae8bb713-8805-4efd-89a1-bca44a1f1690}) ----------- -The name of the StateType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor - Temperatura mínima + Wind direction + The name of the StateType ({65ad8900-583a-4bf7-8bff-f738225ca017}) of ThingClass windModule + + Wind module + The name of the ThingClass ({160096e8-5ad0-4ca5-b7f2-60d64865ca71}) + + + - Temperature minimum changed - The name of the EventType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ----------- -The name of the EventType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor - Mínimo de temperatura cambiado - - - - - Username - The name of the ParamType (ThingClass: netatmoConnection, EventType: userDisplayName, ID: {b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) ----------- -The name of the StateType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection + Wind speed + The name of the StateType ({9f6c1540-9933-4ef1-96d7-aecade2a8199}) of ThingClass windModule - - - Username changed - The name of the EventType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection - - - - - - WiFi signal strength - The name of the ParamType (ThingClass: indoor, EventType: wifiStrength, ID: {6ea906d4-5740-454d-a730-6fdb9fa0d624}) ----------- -The name of the StateType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor - La intensidad de la señal de WiFi - - - - WiFi signal strength changed - The name of the EventType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor - La intensidad de la señal de WiFi cambió - - - - - name - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {719e1f92-a9c8-42d6-83e1-652a0f182209}) ----------- -The name of the ParamType (ThingClass: indoor, Type: thing, ID: {a97d256c-e159-4aa0-bc71-6bd7cd0688b3}) - nombre - - - - Indoor Station - The name of the ThingClass ({1c809049-04f2-4710-99f5-6ed379a2934f}) - Estación interior - - - - Outdoor Station - The name of the ThingClass ({6cc01d62-7317-4ec4-8ac4-a4cab762c179}) - Estación exterior - diff --git a/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-fr.ts b/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-fr.ts index 64757cef..ed329e69 100644 --- a/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-fr.ts +++ b/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-fr.ts @@ -4,371 +4,325 @@ IntegrationPluginNetatmo - - - No API key installed - - - - - Netatmo server is not reachable. - Le serveur Netatmo n'est pas joignable. - - - - Please enter the login credentials for your Netatmo account. - Le serveur Netatmo n'est pas joignable. - - - - Wrong username or password - Nom d'utilisateur erroné ou - - + - Login credentials not found. + No API key installed. - - Error logging in to Netatmo server. - Erreur de connexion au serveur Netatmo. + + The Netatmo server is not reachable. + + + + + + Failed to log in to the Netatmo server. + + + + + Could not authenticate on the server. Please reconfigure the connection. + + + + + Authentication failed. Please reconfigure the connection. + - Netatmo + netatmo - - + Available - The name of the ParamType (ThingClass: netatmoConnection, EventType: connected, ID: {2f79bc1d-27ed-480a-b583-728363c83ea6}) ----------- -The name of the StateType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection - Disponible + The name of the StateType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection + Disponible + + + - Available changed - The name of the EventType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection - Disponible modifié + Base station + The name of the ParamType (ThingClass: rainGauge, Type: thing, ID: {0b8d6d09-a2fa-4bb8-b96b-f444c3eea31b}) +---------- +The name of the ParamType (ThingClass: windModule, Type: thing, ID: {38f375ca-5a45-4628-9e0d-088b4cc25c58}) +---------- +The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {d7a0ec46-760c-4fdc-9753-fe10c86fe1b9}) +---------- +The name of the ParamType (ThingClass: indoorModule, Type: thing, ID: {42f97253-6883-4b88-b088-d86cf467e793}) + Station de base - Base station - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {d7a0ec46-760c-4fdc-9753-fe10c86fe1b9}) - Station de base - - - Battery - The name of the ParamType (ThingClass: outdoor, EventType: batteryLevel, ID: {15d8fae1-ba47-42e1-994d-530e8017c965}) ----------- -The name of the StateType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor - Batterie - - - Battery changed - The name of the EventType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor - Pile changée + Battery + The name of the StateType ({e06955c4-963b-4f8f-9c0c-975c1cd75edb}) of ThingClass rainGauge +---------- +The name of the StateType ({560e0bd7-3c75-430e-8ef3-65bbbe85a3af}) of ThingClass windModule +---------- +The name of the StateType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor +---------- +The name of the StateType ({d9fe5e52-8f42-41fd-aa5f-fd157ad6a6be}) of ThingClass indoorModule + Batterie - Battery critical - The name of the ParamType (ThingClass: outdoor, EventType: batteryCritical, ID: {f8aeb144-014d-4ccb-81db-64ffc70f1c97}) ----------- -The name of the StateType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor - Batterie critique - - - Battery critical changed - The name of the EventType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor - Changement de pile critique + + Battery critical + The name of the StateType ({dd8f8620-fcca-408b-835f-2c257e18aee2}) of ThingClass rainGauge +---------- +The name of the StateType ({5dcddcf9-da07-4bac-9988-018168a516ad}) of ThingClass windModule +---------- +The name of the StateType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor +---------- +The name of the StateType ({7cde2c79-2b90-4ced-97ac-2653d314cf73}) of ThingClass indoorModule + Batterie critique - + CO2 - The name of the ParamType (ThingClass: indoor, EventType: co2, ID: {e5710bd1-79fa-4bd4-9052-8416aae909b9}) + The name of the StateType ({a3fe53a3-0940-4fcb-915d-0297ae584917}) of ThingClass indoorModule ---------- The name of the StateType ({e5710bd1-79fa-4bd4-9052-8416aae909b9}) of ThingClass indoor - CO2 - - - - CO2 changed - The name of the EventType ({e5710bd1-79fa-4bd4-9052-8416aae909b9}) of ThingClass indoor - CO2 changé + CO2 + + + + + Connected + The name of the StateType ({d726cd1e-75c5-4d50-adbd-962301ea9b91}) of ThingClass rainGauge +---------- +The name of the StateType ({5d369774-78df-4259-bdff-cc82b946470b}) of ThingClass windModule +---------- +The name of the StateType ({21d7f2b7-e45b-4986-b3da-d6e8c0421bfc}) of ThingClass outdoor +---------- +The name of the StateType ({5b819dbf-698d-49ae-aeb5-a15db9ef515a}) of ThingClass indoorModule +---------- +The name of the StateType ({d84ba5d7-5202-4786-b983-958b594c341f}) of ThingClass indoor + + + + Custom client id The name of the ParamType (ThingClass: netatmo, Type: plugin, ID: {fbda653d-d59e-438c-a70c-0ccbe8080215}) - + Custom client secret The name of the ParamType (ThingClass: netatmo, Type: plugin, ID: {06439e1e-da15-4483-8737-0a6aa967c479}) - - - - + + + Humidity - The name of the ParamType (ThingClass: outdoor, EventType: humidity, ID: {7ba6ddeb-5142-4b87-9729-487fcda394df}) + The name of the StateType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ---------- -The name of the StateType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: humidity, ID: {e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) +The name of the StateType ({e39c6ea6-8d53-42c7-bfce-e9e4aa3dfec9}) of ThingClass indoorModule ---------- The name of the StateType ({e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) of ThingClass indoor - Humidité + Humidité - - - Humidity changed - The name of the EventType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ----------- -The name of the EventType ({e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) of ThingClass indoor - L'humidité a changé - - - - - - Last update - The name of the ParamType (ThingClass: outdoor, EventType: updateTime, ID: {154aad5c-4998-43c2-b9ee-0b997eb6dd69}) ----------- -The name of the StateType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: updateTime, ID: {50da9f6b-c350-401c-a72e-2e4036f3975d}) ----------- -The name of the StateType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor - Dernière mise à jour - - - - - Last update changed - The name of the EventType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor ----------- -The name of the EventType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor - Dernière mise à jour changée - - - - - Logged in - The name of the ParamType (ThingClass: netatmoConnection, EventType: loggedIn, ID: {d1ca8579-5d5a-4372-9139-4b083efead2e}) ----------- -The name of the StateType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection + Indoor main station + The name of the ThingClass ({1c809049-04f2-4710-99f5-6ed379a2934f}) + + + Indoor module + The name of the ThingClass ({a6706b11-325b-4be3-b0d1-c09e027955b4}) + + + + + + + + + Last update + The name of the StateType ({3c87cbf7-73ad-4673-9abd-188e1f4facfb}) of ThingClass rainGauge +---------- +The name of the StateType ({aa4be9dc-06e4-48a2-b83e-45c523da116b}) of ThingClass windModule +---------- +The name of the StateType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor +---------- +The name of the StateType ({024eb4d2-ed0b-428b-b5c4-ce9aba1fee1e}) of ThingClass indoorModule +---------- +The name of the StateType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor + Dernière mise à jour + - Logged inchanged - The name of the EventType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection + Logged in + The name of the StateType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection - MAC Address - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {73a76c5c-84f5-4e65-8541-457e5aca9bb0}) ----------- -The name of the ParamType (ThingClass: indoor, Type: thing, ID: {157d470a-e579-4d0e-b879-6b5bfa8e34ae}) - MAC Address - - - Netatmo - The name of the vendor ({4b46b4ed-5ec9-4aa4-afc3-92d3f80e6351}) ----------- -The name of the plugin Netatmo ({69d14951-0c02-4877-bcef-dffdf48b7ccb}) - - - - Netatmo Connection - The name of the ThingClass ({728d5a67-27a3-400e-b83c-2765f5196f69}) - Connexion Netatmo + MAC Address + The name of the ParamType (ThingClass: rainGauge, Type: thing, ID: {a2584452-dd16-4655-8cb5-876bb6140c47}) +---------- +The name of the ParamType (ThingClass: windModule, Type: thing, ID: {7abc08f2-7074-40fe-aa1e-1727a5488dfe}) +---------- +The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {73a76c5c-84f5-4e65-8541-457e5aca9bb0}) +---------- +The name of the ParamType (ThingClass: indoorModule, Type: thing, ID: {1881e22f-36f0-447d-a507-e9d541236334}) +---------- +The name of the ParamType (ThingClass: indoor, Type: thing, ID: {157d470a-e579-4d0e-b879-6b5bfa8e34ae}) + MAC Address - Noise - The name of the ParamType (ThingClass: indoor, EventType: noise, ID: {906cea9d-1daf-4e9c-90b9-e40f43052a34}) + Netatmo + The name of the vendor ({4b46b4ed-5ec9-4aa4-afc3-92d3f80e6351}) ---------- -The name of the StateType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor - Bruit +The name of the plugin netatmo ({69d14951-0c02-4877-bcef-dffdf48b7ccb}) + - Noise changed - The name of the EventType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor - Bruit changée + Netatmo account + The name of the ThingClass ({728d5a67-27a3-400e-b83c-2765f5196f69}) + + + + + Noise + The name of the StateType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor + Bruit - - Pressure - The name of the ParamType (ThingClass: indoor, EventType: pressure, ID: {03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) ----------- -The name of the StateType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor - Pression + Outdoor module + The name of the ThingClass ({6cc01d62-7317-4ec4-8ac4-a4cab762c179}) + + - Pressure changed - The name of the EventType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor - Pression changée + Pressure + The name of the StateType ({9d2c409e-0d4f-4e03-89ad-fe0cad776e66}) of ThingClass indoorModule +---------- +The name of the StateType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor + Pression + Rain gauge + The name of the ThingClass ({33a7230b-588f-471c-895d-4a1ddd417c2a}) + + + - Signal strength - The name of the ParamType (ThingClass: outdoor, EventType: signalStrength, ID: {0faa3d08-9004-46fb-a5aa-a59b75e454cc}) ----------- -The name of the StateType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor - Puissance du signal + Rainfall in the last 24 hours + The name of the StateType ({3f475b34-ad5f-4821-8452-2f6869ef46b4}) of ThingClass rainGauge + - Signal strength changed - The name of the EventType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor - La puissance du signal a changé + Rainfall in the past hour + The name of the StateType ({6c55bcd5-b1b3-4ea2-8b4c-2689941d43bb}) of ThingClass rainGauge + - - Temperature - The name of the ParamType (ThingClass: outdoor, EventType: temperature, ID: {f98776bd-887e-4b01-a87f-3d8224180563}) + Signal strength + The name of the StateType ({d44a1e64-c5e5-4dae-944b-bce23192f610}) of ThingClass rainGauge ---------- -The name of the StateType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor +The name of the StateType ({7eafdb74-c99a-40c4-95ca-99f5ddf82355}) of ThingClass windModule ---------- -The name of the ParamType (ThingClass: indoor, EventType: temperature, ID: {3cb25538-e463-40ae-92f9-8f34f0c06b92}) ----------- -The name of the StateType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor - Température +The name of the StateType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor + Puissance du signal + - Temperature changed - The name of the EventType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor + Temperature + The name of the StateType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor ---------- -The name of the EventType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor - La température a changé +The name of the StateType ({33957a0c-75b7-45d0-8e07-731c7c20df0e}) of ThingClass indoorModule +---------- +The name of the StateType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor + Température - Temperature maximum - The name of the ParamType (ThingClass: outdoor, EventType: temperatureMax, ID: {aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) + The name of the StateType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor ---------- -The name of the StateType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: temperatureMax, ID: {dd30507e-037b-4c74-bcca-e04b94c7c5fe}) +The name of the StateType ({304472e3-56fc-4ee6-96df-aeb4b570a1d1}) of ThingClass indoorModule ---------- The name of the StateType ({dd30507e-037b-4c74-bcca-e04b94c7c5fe}) of ThingClass indoor - Température maximale + Température maximale + - Temperature maximum changed - The name of the EventType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor + Temperature minimum + The name of the StateType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ---------- -The name of the EventType ({dd30507e-037b-4c74-bcca-e04b94c7c5fe}) of ThingClass indoor - Changement de la température maximale +The name of the StateType ({2f9e4042-b699-4036-be69-a84e561ac38c}) of ThingClass indoorModule +---------- +The name of the StateType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor + Température minimale + Username + The name of the StateType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection + + + + WiFi signal strength + The name of the StateType ({36fd51d9-7693-42ee-b0ae-b623e219d950}) of ThingClass indoorModule +---------- +The name of the StateType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor + Puissance du signal WiFi + + - Temperature minimum - The name of the ParamType (ThingClass: outdoor, EventType: temperatureMin, ID: {b71e0c8b-3c94-421e-830e-dab97b6c104e}) ----------- -The name of the StateType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: temperatureMin, ID: {ae8bb713-8805-4efd-89a1-bca44a1f1690}) ----------- -The name of the StateType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor - Température minimale + Wind direction + The name of the StateType ({65ad8900-583a-4bf7-8bff-f738225ca017}) of ThingClass windModule + + Wind module + The name of the ThingClass ({160096e8-5ad0-4ca5-b7f2-60d64865ca71}) + + + - Temperature minimum changed - The name of the EventType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ----------- -The name of the EventType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor - Changement de la température minimale - - - - - Username - The name of the ParamType (ThingClass: netatmoConnection, EventType: userDisplayName, ID: {b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) ----------- -The name of the StateType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection + Wind speed + The name of the StateType ({9f6c1540-9933-4ef1-96d7-aecade2a8199}) of ThingClass windModule - - - Username changed - The name of the EventType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection - - - - - - WiFi signal strength - The name of the ParamType (ThingClass: indoor, EventType: wifiStrength, ID: {6ea906d4-5740-454d-a730-6fdb9fa0d624}) ----------- -The name of the StateType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor - Puissance du signal WiFi - - - - WiFi signal strength changed - The name of the EventType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor - La puissance du signal WiFi a changé - - - - - name - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {719e1f92-a9c8-42d6-83e1-652a0f182209}) ----------- -The name of the ParamType (ThingClass: indoor, Type: thing, ID: {a97d256c-e159-4aa0-bc71-6bd7cd0688b3}) - Nom - - - - Indoor Station - The name of the ThingClass ({1c809049-04f2-4710-99f5-6ed379a2934f}) - Station intérieure - - - - Outdoor Station - The name of the ThingClass ({6cc01d62-7317-4ec4-8ac4-a4cab762c179}) - Station extérieure - diff --git a/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-it.ts b/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-it.ts index 52ae3dd7..25ac042f 100644 --- a/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-it.ts +++ b/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-it.ts @@ -4,371 +4,325 @@ IntegrationPluginNetatmo - - - No API key installed - - - - - Netatmo server is not reachable. - Il server Netatmo non è raggiungibile. - - - - Please enter the login credentials for your Netatmo account. - Inserite le credenziali di accesso per il vostro account Netatmo. - - - - Wrong username or password - Nome utente o password sbagliata - - + - Login credentials not found. + No API key installed. - - Error logging in to Netatmo server. - Errore di accesso al server Netatmo. + + The Netatmo server is not reachable. + + + + + + Failed to log in to the Netatmo server. + + + + + Could not authenticate on the server. Please reconfigure the connection. + + + + + Authentication failed. Please reconfigure the connection. + - Netatmo + netatmo - - + Available - The name of the ParamType (ThingClass: netatmoConnection, EventType: connected, ID: {2f79bc1d-27ed-480a-b583-728363c83ea6}) ----------- -The name of the StateType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection - Disponibile + The name of the StateType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection + Disponibile + + + - Available changed - The name of the EventType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection - Disponibile cambiato + Base station + The name of the ParamType (ThingClass: rainGauge, Type: thing, ID: {0b8d6d09-a2fa-4bb8-b96b-f444c3eea31b}) +---------- +The name of the ParamType (ThingClass: windModule, Type: thing, ID: {38f375ca-5a45-4628-9e0d-088b4cc25c58}) +---------- +The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {d7a0ec46-760c-4fdc-9753-fe10c86fe1b9}) +---------- +The name of the ParamType (ThingClass: indoorModule, Type: thing, ID: {42f97253-6883-4b88-b088-d86cf467e793}) + Stazione base - Base station - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {d7a0ec46-760c-4fdc-9753-fe10c86fe1b9}) - Stazione base - - - Battery - The name of the ParamType (ThingClass: outdoor, EventType: batteryLevel, ID: {15d8fae1-ba47-42e1-994d-530e8017c965}) ----------- -The name of the StateType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor - Batteria - - - Battery changed - The name of the EventType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor - Sostituzione della batteria + Battery + The name of the StateType ({e06955c4-963b-4f8f-9c0c-975c1cd75edb}) of ThingClass rainGauge +---------- +The name of the StateType ({560e0bd7-3c75-430e-8ef3-65bbbe85a3af}) of ThingClass windModule +---------- +The name of the StateType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor +---------- +The name of the StateType ({d9fe5e52-8f42-41fd-aa5f-fd157ad6a6be}) of ThingClass indoorModule + Batteria - Battery critical - The name of the ParamType (ThingClass: outdoor, EventType: batteryCritical, ID: {f8aeb144-014d-4ccb-81db-64ffc70f1c97}) ----------- -The name of the StateType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor - Batteria critica - - - Battery critical changed - The name of the EventType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor - Sostituzione della batteria critica + + Battery critical + The name of the StateType ({dd8f8620-fcca-408b-835f-2c257e18aee2}) of ThingClass rainGauge +---------- +The name of the StateType ({5dcddcf9-da07-4bac-9988-018168a516ad}) of ThingClass windModule +---------- +The name of the StateType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor +---------- +The name of the StateType ({7cde2c79-2b90-4ced-97ac-2653d314cf73}) of ThingClass indoorModule + Batteria critica - + CO2 - The name of the ParamType (ThingClass: indoor, EventType: co2, ID: {e5710bd1-79fa-4bd4-9052-8416aae909b9}) + The name of the StateType ({a3fe53a3-0940-4fcb-915d-0297ae584917}) of ThingClass indoorModule ---------- The name of the StateType ({e5710bd1-79fa-4bd4-9052-8416aae909b9}) of ThingClass indoor - CO2 - - - - CO2 changed - The name of the EventType ({e5710bd1-79fa-4bd4-9052-8416aae909b9}) of ThingClass indoor - CO2 cambiata + CO2 + + + + + Connected + The name of the StateType ({d726cd1e-75c5-4d50-adbd-962301ea9b91}) of ThingClass rainGauge +---------- +The name of the StateType ({5d369774-78df-4259-bdff-cc82b946470b}) of ThingClass windModule +---------- +The name of the StateType ({21d7f2b7-e45b-4986-b3da-d6e8c0421bfc}) of ThingClass outdoor +---------- +The name of the StateType ({5b819dbf-698d-49ae-aeb5-a15db9ef515a}) of ThingClass indoorModule +---------- +The name of the StateType ({d84ba5d7-5202-4786-b983-958b594c341f}) of ThingClass indoor + + + + Custom client id The name of the ParamType (ThingClass: netatmo, Type: plugin, ID: {fbda653d-d59e-438c-a70c-0ccbe8080215}) - + Custom client secret The name of the ParamType (ThingClass: netatmo, Type: plugin, ID: {06439e1e-da15-4483-8737-0a6aa967c479}) - - - - + + + Humidity - The name of the ParamType (ThingClass: outdoor, EventType: humidity, ID: {7ba6ddeb-5142-4b87-9729-487fcda394df}) + The name of the StateType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ---------- -The name of the StateType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: humidity, ID: {e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) +The name of the StateType ({e39c6ea6-8d53-42c7-bfce-e9e4aa3dfec9}) of ThingClass indoorModule ---------- The name of the StateType ({e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) of ThingClass indoor - Umidità + Umidità - - - Humidity changed - The name of the EventType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ----------- -The name of the EventType ({e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) of ThingClass indoor - Umidità cambiata - - - - - - Last update - The name of the ParamType (ThingClass: outdoor, EventType: updateTime, ID: {154aad5c-4998-43c2-b9ee-0b997eb6dd69}) ----------- -The name of the StateType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: updateTime, ID: {50da9f6b-c350-401c-a72e-2e4036f3975d}) ----------- -The name of the StateType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor - Ultimo aggiornamento - - - - - Last update changed - The name of the EventType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor ----------- -The name of the EventType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor - Ultimo aggiornamento modificato - - - - - Logged in - The name of the ParamType (ThingClass: netatmoConnection, EventType: loggedIn, ID: {d1ca8579-5d5a-4372-9139-4b083efead2e}) ----------- -The name of the StateType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection + Indoor main station + The name of the ThingClass ({1c809049-04f2-4710-99f5-6ed379a2934f}) + + + Indoor module + The name of the ThingClass ({a6706b11-325b-4be3-b0d1-c09e027955b4}) + + + + + + + + + Last update + The name of the StateType ({3c87cbf7-73ad-4673-9abd-188e1f4facfb}) of ThingClass rainGauge +---------- +The name of the StateType ({aa4be9dc-06e4-48a2-b83e-45c523da116b}) of ThingClass windModule +---------- +The name of the StateType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor +---------- +The name of the StateType ({024eb4d2-ed0b-428b-b5c4-ce9aba1fee1e}) of ThingClass indoorModule +---------- +The name of the StateType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor + Ultimo aggiornamento + - Logged inchanged - The name of the EventType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection + Logged in + The name of the StateType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection - MAC Address - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {73a76c5c-84f5-4e65-8541-457e5aca9bb0}) ----------- -The name of the ParamType (ThingClass: indoor, Type: thing, ID: {157d470a-e579-4d0e-b879-6b5bfa8e34ae}) - MAC Address - - - Netatmo - The name of the vendor ({4b46b4ed-5ec9-4aa4-afc3-92d3f80e6351}) ----------- -The name of the plugin Netatmo ({69d14951-0c02-4877-bcef-dffdf48b7ccb}) - - - - Netatmo Connection - The name of the ThingClass ({728d5a67-27a3-400e-b83c-2765f5196f69}) - Connessione Netatmo + MAC Address + The name of the ParamType (ThingClass: rainGauge, Type: thing, ID: {a2584452-dd16-4655-8cb5-876bb6140c47}) +---------- +The name of the ParamType (ThingClass: windModule, Type: thing, ID: {7abc08f2-7074-40fe-aa1e-1727a5488dfe}) +---------- +The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {73a76c5c-84f5-4e65-8541-457e5aca9bb0}) +---------- +The name of the ParamType (ThingClass: indoorModule, Type: thing, ID: {1881e22f-36f0-447d-a507-e9d541236334}) +---------- +The name of the ParamType (ThingClass: indoor, Type: thing, ID: {157d470a-e579-4d0e-b879-6b5bfa8e34ae}) + MAC Address - Noise - The name of the ParamType (ThingClass: indoor, EventType: noise, ID: {906cea9d-1daf-4e9c-90b9-e40f43052a34}) + Netatmo + The name of the vendor ({4b46b4ed-5ec9-4aa4-afc3-92d3f80e6351}) ---------- -The name of the StateType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor - Rumore +The name of the plugin netatmo ({69d14951-0c02-4877-bcef-dffdf48b7ccb}) + - Noise changed - The name of the EventType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor - Rumore cambiato + Netatmo account + The name of the ThingClass ({728d5a67-27a3-400e-b83c-2765f5196f69}) + + + + + Noise + The name of the StateType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor + Rumore - - Pressure - The name of the ParamType (ThingClass: indoor, EventType: pressure, ID: {03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) ----------- -The name of the StateType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor - Pressione + Outdoor module + The name of the ThingClass ({6cc01d62-7317-4ec4-8ac4-a4cab762c179}) + + - Pressure changed - The name of the EventType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor - Pressione cambiata + Pressure + The name of the StateType ({9d2c409e-0d4f-4e03-89ad-fe0cad776e66}) of ThingClass indoorModule +---------- +The name of the StateType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor + Pressione + Rain gauge + The name of the ThingClass ({33a7230b-588f-471c-895d-4a1ddd417c2a}) + + + - Signal strength - The name of the ParamType (ThingClass: outdoor, EventType: signalStrength, ID: {0faa3d08-9004-46fb-a5aa-a59b75e454cc}) ----------- -The name of the StateType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor - Forza del segnale + Rainfall in the last 24 hours + The name of the StateType ({3f475b34-ad5f-4821-8452-2f6869ef46b4}) of ThingClass rainGauge + - Signal strength changed - The name of the EventType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor - Forza del segnale cambiata + Rainfall in the past hour + The name of the StateType ({6c55bcd5-b1b3-4ea2-8b4c-2689941d43bb}) of ThingClass rainGauge + - - Temperature - The name of the ParamType (ThingClass: outdoor, EventType: temperature, ID: {f98776bd-887e-4b01-a87f-3d8224180563}) + Signal strength + The name of the StateType ({d44a1e64-c5e5-4dae-944b-bce23192f610}) of ThingClass rainGauge ---------- -The name of the StateType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor +The name of the StateType ({7eafdb74-c99a-40c4-95ca-99f5ddf82355}) of ThingClass windModule ---------- -The name of the ParamType (ThingClass: indoor, EventType: temperature, ID: {3cb25538-e463-40ae-92f9-8f34f0c06b92}) ----------- -The name of the StateType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor - Temperatura +The name of the StateType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor + Forza del segnale + - Temperature changed - The name of the EventType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor + Temperature + The name of the StateType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor ---------- -The name of the EventType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor - Variazione di temperatura +The name of the StateType ({33957a0c-75b7-45d0-8e07-731c7c20df0e}) of ThingClass indoorModule +---------- +The name of the StateType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor + Temperatura - Temperature maximum - The name of the ParamType (ThingClass: outdoor, EventType: temperatureMax, ID: {aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) + The name of the StateType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor ---------- -The name of the StateType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: temperatureMax, ID: {dd30507e-037b-4c74-bcca-e04b94c7c5fe}) +The name of the StateType ({304472e3-56fc-4ee6-96df-aeb4b570a1d1}) of ThingClass indoorModule ---------- The name of the StateType ({dd30507e-037b-4c74-bcca-e04b94c7c5fe}) of ThingClass indoor - Temperatura massima + Temperatura massima + - Temperature maximum changed - The name of the EventType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor + Temperature minimum + The name of the StateType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ---------- -The name of the EventType ({dd30507e-037b-4c74-bcca-e04b94c7c5fe}) of ThingClass indoor - Temperatura massima modificata +The name of the StateType ({2f9e4042-b699-4036-be69-a84e561ac38c}) of ThingClass indoorModule +---------- +The name of the StateType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor + Temperatura minima + Username + The name of the StateType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection + + + + WiFi signal strength + The name of the StateType ({36fd51d9-7693-42ee-b0ae-b623e219d950}) of ThingClass indoorModule +---------- +The name of the StateType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor + Potenza del segnale WiFi + + - Temperature minimum - The name of the ParamType (ThingClass: outdoor, EventType: temperatureMin, ID: {b71e0c8b-3c94-421e-830e-dab97b6c104e}) ----------- -The name of the StateType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: temperatureMin, ID: {ae8bb713-8805-4efd-89a1-bca44a1f1690}) ----------- -The name of the StateType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor - Temperatura minima + Wind direction + The name of the StateType ({65ad8900-583a-4bf7-8bff-f738225ca017}) of ThingClass windModule + + Wind module + The name of the ThingClass ({160096e8-5ad0-4ca5-b7f2-60d64865ca71}) + + + - Temperature minimum changed - The name of the EventType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ----------- -The name of the EventType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor - Temperatura minima modificata - - - - - Username - The name of the ParamType (ThingClass: netatmoConnection, EventType: userDisplayName, ID: {b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) ----------- -The name of the StateType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection + Wind speed + The name of the StateType ({9f6c1540-9933-4ef1-96d7-aecade2a8199}) of ThingClass windModule - - - Username changed - The name of the EventType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection - - - - - - WiFi signal strength - The name of the ParamType (ThingClass: indoor, EventType: wifiStrength, ID: {6ea906d4-5740-454d-a730-6fdb9fa0d624}) ----------- -The name of the StateType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor - Potenza del segnale WiFi - - - - WiFi signal strength changed - The name of the EventType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor - Cambiata la potenza del segnale WiFi - - - - - name - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {719e1f92-a9c8-42d6-83e1-652a0f182209}) ----------- -The name of the ParamType (ThingClass: indoor, Type: thing, ID: {a97d256c-e159-4aa0-bc71-6bd7cd0688b3}) - nome - - - - Indoor Station - The name of the ThingClass ({1c809049-04f2-4710-99f5-6ed379a2934f}) - Stazione interna - - - - Outdoor Station - The name of the ThingClass ({6cc01d62-7317-4ec4-8ac4-a4cab762c179}) - Stazione esterna - diff --git a/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-nl.ts b/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-nl.ts index e75d9176..d19254db 100644 --- a/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-nl.ts +++ b/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-nl.ts @@ -4,371 +4,325 @@ IntegrationPluginNetatmo - - - No API key installed - - - - - Netatmo server is not reachable. - Il server Netatmo non è raggiungibile. - - - - Please enter the login credentials for your Netatmo account. - Inserite le credenziali di accesso per il vostro account Netatmo. - - - - Wrong username or password - Nome utente o password sbagliata - - + - Login credentials not found. + No API key installed. - - Error logging in to Netatmo server. - Errore di accesso al server Netatmo. + + The Netatmo server is not reachable. + + + + + + Failed to log in to the Netatmo server. + + + + + Could not authenticate on the server. Please reconfigure the connection. + + + + + Authentication failed. Please reconfigure the connection. + - Netatmo + netatmo - - + Available - The name of the ParamType (ThingClass: netatmoConnection, EventType: connected, ID: {2f79bc1d-27ed-480a-b583-728363c83ea6}) ----------- -The name of the StateType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection - Disponibile + The name of the StateType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection + Disponibile + + + - Available changed - The name of the EventType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection - Disponibile cambiato + Base station + The name of the ParamType (ThingClass: rainGauge, Type: thing, ID: {0b8d6d09-a2fa-4bb8-b96b-f444c3eea31b}) +---------- +The name of the ParamType (ThingClass: windModule, Type: thing, ID: {38f375ca-5a45-4628-9e0d-088b4cc25c58}) +---------- +The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {d7a0ec46-760c-4fdc-9753-fe10c86fe1b9}) +---------- +The name of the ParamType (ThingClass: indoorModule, Type: thing, ID: {42f97253-6883-4b88-b088-d86cf467e793}) + Stazione base - Base station - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {d7a0ec46-760c-4fdc-9753-fe10c86fe1b9}) - Stazione base - - - Battery - The name of the ParamType (ThingClass: outdoor, EventType: batteryLevel, ID: {15d8fae1-ba47-42e1-994d-530e8017c965}) ----------- -The name of the StateType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor - Batteria - - - Battery changed - The name of the EventType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor - Sostituzione della batteria + Battery + The name of the StateType ({e06955c4-963b-4f8f-9c0c-975c1cd75edb}) of ThingClass rainGauge +---------- +The name of the StateType ({560e0bd7-3c75-430e-8ef3-65bbbe85a3af}) of ThingClass windModule +---------- +The name of the StateType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor +---------- +The name of the StateType ({d9fe5e52-8f42-41fd-aa5f-fd157ad6a6be}) of ThingClass indoorModule + Batteria - Battery critical - The name of the ParamType (ThingClass: outdoor, EventType: batteryCritical, ID: {f8aeb144-014d-4ccb-81db-64ffc70f1c97}) ----------- -The name of the StateType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor - Batteria critica - - - Battery critical changed - The name of the EventType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor - Sostituzione della batteria critica + + Battery critical + The name of the StateType ({dd8f8620-fcca-408b-835f-2c257e18aee2}) of ThingClass rainGauge +---------- +The name of the StateType ({5dcddcf9-da07-4bac-9988-018168a516ad}) of ThingClass windModule +---------- +The name of the StateType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor +---------- +The name of the StateType ({7cde2c79-2b90-4ced-97ac-2653d314cf73}) of ThingClass indoorModule + Batteria critica - + CO2 - The name of the ParamType (ThingClass: indoor, EventType: co2, ID: {e5710bd1-79fa-4bd4-9052-8416aae909b9}) + The name of the StateType ({a3fe53a3-0940-4fcb-915d-0297ae584917}) of ThingClass indoorModule ---------- The name of the StateType ({e5710bd1-79fa-4bd4-9052-8416aae909b9}) of ThingClass indoor - CO2 - - - - CO2 changed - The name of the EventType ({e5710bd1-79fa-4bd4-9052-8416aae909b9}) of ThingClass indoor - CO2 cambiata + CO2 + + + + + Connected + The name of the StateType ({d726cd1e-75c5-4d50-adbd-962301ea9b91}) of ThingClass rainGauge +---------- +The name of the StateType ({5d369774-78df-4259-bdff-cc82b946470b}) of ThingClass windModule +---------- +The name of the StateType ({21d7f2b7-e45b-4986-b3da-d6e8c0421bfc}) of ThingClass outdoor +---------- +The name of the StateType ({5b819dbf-698d-49ae-aeb5-a15db9ef515a}) of ThingClass indoorModule +---------- +The name of the StateType ({d84ba5d7-5202-4786-b983-958b594c341f}) of ThingClass indoor + + + + Custom client id The name of the ParamType (ThingClass: netatmo, Type: plugin, ID: {fbda653d-d59e-438c-a70c-0ccbe8080215}) - + Custom client secret The name of the ParamType (ThingClass: netatmo, Type: plugin, ID: {06439e1e-da15-4483-8737-0a6aa967c479}) - - - - + + + Humidity - The name of the ParamType (ThingClass: outdoor, EventType: humidity, ID: {7ba6ddeb-5142-4b87-9729-487fcda394df}) + The name of the StateType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ---------- -The name of the StateType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: humidity, ID: {e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) +The name of the StateType ({e39c6ea6-8d53-42c7-bfce-e9e4aa3dfec9}) of ThingClass indoorModule ---------- The name of the StateType ({e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) of ThingClass indoor - Umidità + Umidità - - - Humidity changed - The name of the EventType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ----------- -The name of the EventType ({e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) of ThingClass indoor - Umidità cambiata - - - - - - Last update - The name of the ParamType (ThingClass: outdoor, EventType: updateTime, ID: {154aad5c-4998-43c2-b9ee-0b997eb6dd69}) ----------- -The name of the StateType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: updateTime, ID: {50da9f6b-c350-401c-a72e-2e4036f3975d}) ----------- -The name of the StateType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor - Ultimo aggiornamento - - - - - Last update changed - The name of the EventType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor ----------- -The name of the EventType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor - Ultimo aggiornamento modificato - - - - - Logged in - The name of the ParamType (ThingClass: netatmoConnection, EventType: loggedIn, ID: {d1ca8579-5d5a-4372-9139-4b083efead2e}) ----------- -The name of the StateType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection + Indoor main station + The name of the ThingClass ({1c809049-04f2-4710-99f5-6ed379a2934f}) + + + Indoor module + The name of the ThingClass ({a6706b11-325b-4be3-b0d1-c09e027955b4}) + + + + + + + + + Last update + The name of the StateType ({3c87cbf7-73ad-4673-9abd-188e1f4facfb}) of ThingClass rainGauge +---------- +The name of the StateType ({aa4be9dc-06e4-48a2-b83e-45c523da116b}) of ThingClass windModule +---------- +The name of the StateType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor +---------- +The name of the StateType ({024eb4d2-ed0b-428b-b5c4-ce9aba1fee1e}) of ThingClass indoorModule +---------- +The name of the StateType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor + Ultimo aggiornamento + - Logged inchanged - The name of the EventType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection + Logged in + The name of the StateType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection - MAC Address - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {73a76c5c-84f5-4e65-8541-457e5aca9bb0}) ----------- -The name of the ParamType (ThingClass: indoor, Type: thing, ID: {157d470a-e579-4d0e-b879-6b5bfa8e34ae}) - Indirizzo MAC - - - Netatmo - The name of the vendor ({4b46b4ed-5ec9-4aa4-afc3-92d3f80e6351}) ----------- -The name of the plugin Netatmo ({69d14951-0c02-4877-bcef-dffdf48b7ccb}) - - - - Netatmo Connection - The name of the ThingClass ({728d5a67-27a3-400e-b83c-2765f5196f69}) - Netatmo-aansluiting + MAC Address + The name of the ParamType (ThingClass: rainGauge, Type: thing, ID: {a2584452-dd16-4655-8cb5-876bb6140c47}) +---------- +The name of the ParamType (ThingClass: windModule, Type: thing, ID: {7abc08f2-7074-40fe-aa1e-1727a5488dfe}) +---------- +The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {73a76c5c-84f5-4e65-8541-457e5aca9bb0}) +---------- +The name of the ParamType (ThingClass: indoorModule, Type: thing, ID: {1881e22f-36f0-447d-a507-e9d541236334}) +---------- +The name of the ParamType (ThingClass: indoor, Type: thing, ID: {157d470a-e579-4d0e-b879-6b5bfa8e34ae}) + Indirizzo MAC - Noise - The name of the ParamType (ThingClass: indoor, EventType: noise, ID: {906cea9d-1daf-4e9c-90b9-e40f43052a34}) + Netatmo + The name of the vendor ({4b46b4ed-5ec9-4aa4-afc3-92d3f80e6351}) ---------- -The name of the StateType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor - Geluidsoverlast +The name of the plugin netatmo ({69d14951-0c02-4877-bcef-dffdf48b7ccb}) + - Noise changed - The name of the EventType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor - Geluidsoverlast veranderd + Netatmo account + The name of the ThingClass ({728d5a67-27a3-400e-b83c-2765f5196f69}) + + + + + Noise + The name of the StateType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor + Geluidsoverlast - - Pressure - The name of the ParamType (ThingClass: indoor, EventType: pressure, ID: {03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) ----------- -The name of the StateType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor - Druk + Outdoor module + The name of the ThingClass ({6cc01d62-7317-4ec4-8ac4-a4cab762c179}) + + - Pressure changed - The name of the EventType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor - Druk veranderd + Pressure + The name of the StateType ({9d2c409e-0d4f-4e03-89ad-fe0cad776e66}) of ThingClass indoorModule +---------- +The name of the StateType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor + Druk + Rain gauge + The name of the ThingClass ({33a7230b-588f-471c-895d-4a1ddd417c2a}) + + + - Signal strength - The name of the ParamType (ThingClass: outdoor, EventType: signalStrength, ID: {0faa3d08-9004-46fb-a5aa-a59b75e454cc}) ----------- -The name of the StateType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor - Signaalsterkte + Rainfall in the last 24 hours + The name of the StateType ({3f475b34-ad5f-4821-8452-2f6869ef46b4}) of ThingClass rainGauge + - Signal strength changed - The name of the EventType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor - Signaalsterkte veranderd + Rainfall in the past hour + The name of the StateType ({6c55bcd5-b1b3-4ea2-8b4c-2689941d43bb}) of ThingClass rainGauge + - - Temperature - The name of the ParamType (ThingClass: outdoor, EventType: temperature, ID: {f98776bd-887e-4b01-a87f-3d8224180563}) + Signal strength + The name of the StateType ({d44a1e64-c5e5-4dae-944b-bce23192f610}) of ThingClass rainGauge ---------- -The name of the StateType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor +The name of the StateType ({7eafdb74-c99a-40c4-95ca-99f5ddf82355}) of ThingClass windModule ---------- -The name of the ParamType (ThingClass: indoor, EventType: temperature, ID: {3cb25538-e463-40ae-92f9-8f34f0c06b92}) ----------- -The name of the StateType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor - Temperatuur +The name of the StateType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor + Signaalsterkte + - Temperature changed - The name of the EventType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor + Temperature + The name of the StateType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor ---------- -The name of the EventType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor - Temperatuur veranderd +The name of the StateType ({33957a0c-75b7-45d0-8e07-731c7c20df0e}) of ThingClass indoorModule +---------- +The name of the StateType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor + Temperatuur - Temperature maximum - The name of the ParamType (ThingClass: outdoor, EventType: temperatureMax, ID: {aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) + The name of the StateType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor ---------- -The name of the StateType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: temperatureMax, ID: {dd30507e-037b-4c74-bcca-e04b94c7c5fe}) +The name of the StateType ({304472e3-56fc-4ee6-96df-aeb4b570a1d1}) of ThingClass indoorModule ---------- The name of the StateType ({dd30507e-037b-4c74-bcca-e04b94c7c5fe}) of ThingClass indoor - Temperatuur maximaal + Temperatuur maximaal + - Temperature maximum changed - The name of the EventType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor + Temperature minimum + The name of the StateType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ---------- -The name of the EventType ({dd30507e-037b-4c74-bcca-e04b94c7c5fe}) of ThingClass indoor - Temperatuur maximaal gewijzigd +The name of the StateType ({2f9e4042-b699-4036-be69-a84e561ac38c}) of ThingClass indoorModule +---------- +The name of the StateType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor + Temperatuur minimum + Username + The name of the StateType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection + + + + WiFi signal strength + The name of the StateType ({36fd51d9-7693-42ee-b0ae-b623e219d950}) of ThingClass indoorModule +---------- +The name of the StateType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor + WiFi-signaalsterkte + + - Temperature minimum - The name of the ParamType (ThingClass: outdoor, EventType: temperatureMin, ID: {b71e0c8b-3c94-421e-830e-dab97b6c104e}) ----------- -The name of the StateType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: temperatureMin, ID: {ae8bb713-8805-4efd-89a1-bca44a1f1690}) ----------- -The name of the StateType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor - Temperatuur minimum + Wind direction + The name of the StateType ({65ad8900-583a-4bf7-8bff-f738225ca017}) of ThingClass windModule + + Wind module + The name of the ThingClass ({160096e8-5ad0-4ca5-b7f2-60d64865ca71}) + + + - Temperature minimum changed - The name of the EventType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ----------- -The name of the EventType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor - Temperatuur minimum veranderd - - - - - Username - The name of the ParamType (ThingClass: netatmoConnection, EventType: userDisplayName, ID: {b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) ----------- -The name of the StateType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection + Wind speed + The name of the StateType ({9f6c1540-9933-4ef1-96d7-aecade2a8199}) of ThingClass windModule - - - Username changed - The name of the EventType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection - - - - - - WiFi signal strength - The name of the ParamType (ThingClass: indoor, EventType: wifiStrength, ID: {6ea906d4-5740-454d-a730-6fdb9fa0d624}) ----------- -The name of the StateType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor - WiFi-signaalsterkte - - - - WiFi signal strength changed - The name of the EventType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor - WiFi-signaalsterkte veranderd - - - - - name - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {719e1f92-a9c8-42d6-83e1-652a0f182209}) ----------- -The name of the ParamType (ThingClass: indoor, Type: thing, ID: {a97d256c-e159-4aa0-bc71-6bd7cd0688b3}) - naam - - - - Indoor Station - The name of the ThingClass ({1c809049-04f2-4710-99f5-6ed379a2934f}) - Binnenshuis-station - - - - Outdoor Station - The name of the ThingClass ({6cc01d62-7317-4ec4-8ac4-a4cab762c179}) - Buitenshuis-station - diff --git a/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-pt.ts b/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-pt.ts index cea6da5c..0f66e0d1 100644 --- a/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-pt.ts +++ b/netatmo/translations/69d14951-0c02-4877-bcef-dffdf48b7ccb-pt.ts @@ -4,371 +4,325 @@ IntegrationPluginNetatmo - - - No API key installed - - - - - Netatmo server is not reachable. - O servidor Netatmo não é alcançável. - - - - Please enter the login credentials for your Netatmo account. - Por favor introduza as credenciais de login para a sua conta Netatmo. - - - - Wrong username or password - Nome de utilizador ou palavra-passe errados - - + - Login credentials not found. + No API key installed. - - Error logging in to Netatmo server. - Erro ao iniciar sessão no servidor Netatmo. + + The Netatmo server is not reachable. + + + + + + Failed to log in to the Netatmo server. + + + + + Could not authenticate on the server. Please reconfigure the connection. + + + + + Authentication failed. Please reconfigure the connection. + - Netatmo + netatmo - - + Available - The name of the ParamType (ThingClass: netatmoConnection, EventType: connected, ID: {2f79bc1d-27ed-480a-b583-728363c83ea6}) ----------- -The name of the StateType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection - Disponível + The name of the StateType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection + Disponível + + + - Available changed - The name of the EventType ({2f79bc1d-27ed-480a-b583-728363c83ea6}) of ThingClass netatmoConnection - Disponível alterado + Base station + The name of the ParamType (ThingClass: rainGauge, Type: thing, ID: {0b8d6d09-a2fa-4bb8-b96b-f444c3eea31b}) +---------- +The name of the ParamType (ThingClass: windModule, Type: thing, ID: {38f375ca-5a45-4628-9e0d-088b4cc25c58}) +---------- +The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {d7a0ec46-760c-4fdc-9753-fe10c86fe1b9}) +---------- +The name of the ParamType (ThingClass: indoorModule, Type: thing, ID: {42f97253-6883-4b88-b088-d86cf467e793}) + Estação base - Base station - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {d7a0ec46-760c-4fdc-9753-fe10c86fe1b9}) - Estação base - - - Battery - The name of the ParamType (ThingClass: outdoor, EventType: batteryLevel, ID: {15d8fae1-ba47-42e1-994d-530e8017c965}) ----------- -The name of the StateType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor - Bateria - - - Battery changed - The name of the EventType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor - Bateria trocada + Battery + The name of the StateType ({e06955c4-963b-4f8f-9c0c-975c1cd75edb}) of ThingClass rainGauge +---------- +The name of the StateType ({560e0bd7-3c75-430e-8ef3-65bbbe85a3af}) of ThingClass windModule +---------- +The name of the StateType ({15d8fae1-ba47-42e1-994d-530e8017c965}) of ThingClass outdoor +---------- +The name of the StateType ({d9fe5e52-8f42-41fd-aa5f-fd157ad6a6be}) of ThingClass indoorModule + Bateria - Battery critical - The name of the ParamType (ThingClass: outdoor, EventType: batteryCritical, ID: {f8aeb144-014d-4ccb-81db-64ffc70f1c97}) ----------- -The name of the StateType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor - Changed battery - - - Battery critical changed - The name of the EventType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor - Mudança de bateria crítica + + Battery critical + The name of the StateType ({dd8f8620-fcca-408b-835f-2c257e18aee2}) of ThingClass rainGauge +---------- +The name of the StateType ({5dcddcf9-da07-4bac-9988-018168a516ad}) of ThingClass windModule +---------- +The name of the StateType ({f8aeb144-014d-4ccb-81db-64ffc70f1c97}) of ThingClass outdoor +---------- +The name of the StateType ({7cde2c79-2b90-4ced-97ac-2653d314cf73}) of ThingClass indoorModule + Changed battery - + CO2 - The name of the ParamType (ThingClass: indoor, EventType: co2, ID: {e5710bd1-79fa-4bd4-9052-8416aae909b9}) + The name of the StateType ({a3fe53a3-0940-4fcb-915d-0297ae584917}) of ThingClass indoorModule ---------- The name of the StateType ({e5710bd1-79fa-4bd4-9052-8416aae909b9}) of ThingClass indoor - CO2 - - - - CO2 changed - The name of the EventType ({e5710bd1-79fa-4bd4-9052-8416aae909b9}) of ThingClass indoor - CO2 alterado + CO2 + + + + + Connected + The name of the StateType ({d726cd1e-75c5-4d50-adbd-962301ea9b91}) of ThingClass rainGauge +---------- +The name of the StateType ({5d369774-78df-4259-bdff-cc82b946470b}) of ThingClass windModule +---------- +The name of the StateType ({21d7f2b7-e45b-4986-b3da-d6e8c0421bfc}) of ThingClass outdoor +---------- +The name of the StateType ({5b819dbf-698d-49ae-aeb5-a15db9ef515a}) of ThingClass indoorModule +---------- +The name of the StateType ({d84ba5d7-5202-4786-b983-958b594c341f}) of ThingClass indoor + + + + Custom client id The name of the ParamType (ThingClass: netatmo, Type: plugin, ID: {fbda653d-d59e-438c-a70c-0ccbe8080215}) - + Custom client secret The name of the ParamType (ThingClass: netatmo, Type: plugin, ID: {06439e1e-da15-4483-8737-0a6aa967c479}) - - - - + + + Humidity - The name of the ParamType (ThingClass: outdoor, EventType: humidity, ID: {7ba6ddeb-5142-4b87-9729-487fcda394df}) + The name of the StateType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ---------- -The name of the StateType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: humidity, ID: {e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) +The name of the StateType ({e39c6ea6-8d53-42c7-bfce-e9e4aa3dfec9}) of ThingClass indoorModule ---------- The name of the StateType ({e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) of ThingClass indoor - Humidade + Humidade - - - Humidity changed - The name of the EventType ({7ba6ddeb-5142-4b87-9729-487fcda394df}) of ThingClass outdoor ----------- -The name of the EventType ({e2db5f01-196a-48d1-8874-6b8cbfe0d8c9}) of ThingClass indoor - Humidade alterada - - - - - - Last update - The name of the ParamType (ThingClass: outdoor, EventType: updateTime, ID: {154aad5c-4998-43c2-b9ee-0b997eb6dd69}) ----------- -The name of the StateType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: updateTime, ID: {50da9f6b-c350-401c-a72e-2e4036f3975d}) ----------- -The name of the StateType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor - Última actualização - - - - - Last update changed - The name of the EventType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor ----------- -The name of the EventType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor - Última actualização alterada - - - - - Logged in - The name of the ParamType (ThingClass: netatmoConnection, EventType: loggedIn, ID: {d1ca8579-5d5a-4372-9139-4b083efead2e}) ----------- -The name of the StateType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection + Indoor main station + The name of the ThingClass ({1c809049-04f2-4710-99f5-6ed379a2934f}) + + + Indoor module + The name of the ThingClass ({a6706b11-325b-4be3-b0d1-c09e027955b4}) + + + + + + + + + Last update + The name of the StateType ({3c87cbf7-73ad-4673-9abd-188e1f4facfb}) of ThingClass rainGauge +---------- +The name of the StateType ({aa4be9dc-06e4-48a2-b83e-45c523da116b}) of ThingClass windModule +---------- +The name of the StateType ({154aad5c-4998-43c2-b9ee-0b997eb6dd69}) of ThingClass outdoor +---------- +The name of the StateType ({024eb4d2-ed0b-428b-b5c4-ce9aba1fee1e}) of ThingClass indoorModule +---------- +The name of the StateType ({50da9f6b-c350-401c-a72e-2e4036f3975d}) of ThingClass indoor + Última actualização + - Logged inchanged - The name of the EventType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection + Logged in + The name of the StateType ({d1ca8579-5d5a-4372-9139-4b083efead2e}) of ThingClass netatmoConnection - MAC Address - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {73a76c5c-84f5-4e65-8541-457e5aca9bb0}) ----------- -The name of the ParamType (ThingClass: indoor, Type: thing, ID: {157d470a-e579-4d0e-b879-6b5bfa8e34ae}) - MAC Address - - - Netatmo - The name of the vendor ({4b46b4ed-5ec9-4aa4-afc3-92d3f80e6351}) ----------- -The name of the plugin Netatmo ({69d14951-0c02-4877-bcef-dffdf48b7ccb}) - - - - Netatmo Connection - The name of the ThingClass ({728d5a67-27a3-400e-b83c-2765f5196f69}) - Ligação Netatmo + MAC Address + The name of the ParamType (ThingClass: rainGauge, Type: thing, ID: {a2584452-dd16-4655-8cb5-876bb6140c47}) +---------- +The name of the ParamType (ThingClass: windModule, Type: thing, ID: {7abc08f2-7074-40fe-aa1e-1727a5488dfe}) +---------- +The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {73a76c5c-84f5-4e65-8541-457e5aca9bb0}) +---------- +The name of the ParamType (ThingClass: indoorModule, Type: thing, ID: {1881e22f-36f0-447d-a507-e9d541236334}) +---------- +The name of the ParamType (ThingClass: indoor, Type: thing, ID: {157d470a-e579-4d0e-b879-6b5bfa8e34ae}) + MAC Address - Noise - The name of the ParamType (ThingClass: indoor, EventType: noise, ID: {906cea9d-1daf-4e9c-90b9-e40f43052a34}) + Netatmo + The name of the vendor ({4b46b4ed-5ec9-4aa4-afc3-92d3f80e6351}) ---------- -The name of the StateType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor - Ruído +The name of the plugin netatmo ({69d14951-0c02-4877-bcef-dffdf48b7ccb}) + - Noise changed - The name of the EventType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor - Ruído alterado + Netatmo account + The name of the ThingClass ({728d5a67-27a3-400e-b83c-2765f5196f69}) + + + + + Noise + The name of the StateType ({906cea9d-1daf-4e9c-90b9-e40f43052a34}) of ThingClass indoor + Ruído - - Pressure - The name of the ParamType (ThingClass: indoor, EventType: pressure, ID: {03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) ----------- -The name of the StateType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor - Pressão + Outdoor module + The name of the ThingClass ({6cc01d62-7317-4ec4-8ac4-a4cab762c179}) + + - Pressure changed - The name of the EventType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor - Pressão alterada + Pressure + The name of the StateType ({9d2c409e-0d4f-4e03-89ad-fe0cad776e66}) of ThingClass indoorModule +---------- +The name of the StateType ({03b0a7b7-987d-4d3b-b3f0-21d9f92ad326}) of ThingClass indoor + Pressão + Rain gauge + The name of the ThingClass ({33a7230b-588f-471c-895d-4a1ddd417c2a}) + + + - Signal strength - The name of the ParamType (ThingClass: outdoor, EventType: signalStrength, ID: {0faa3d08-9004-46fb-a5aa-a59b75e454cc}) ----------- -The name of the StateType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor - Força do sinal + Rainfall in the last 24 hours + The name of the StateType ({3f475b34-ad5f-4821-8452-2f6869ef46b4}) of ThingClass rainGauge + - Signal strength changed - The name of the EventType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor - Força do sinal alterada + Rainfall in the past hour + The name of the StateType ({6c55bcd5-b1b3-4ea2-8b4c-2689941d43bb}) of ThingClass rainGauge + - - Temperature - The name of the ParamType (ThingClass: outdoor, EventType: temperature, ID: {f98776bd-887e-4b01-a87f-3d8224180563}) + Signal strength + The name of the StateType ({d44a1e64-c5e5-4dae-944b-bce23192f610}) of ThingClass rainGauge ---------- -The name of the StateType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor +The name of the StateType ({7eafdb74-c99a-40c4-95ca-99f5ddf82355}) of ThingClass windModule ---------- -The name of the ParamType (ThingClass: indoor, EventType: temperature, ID: {3cb25538-e463-40ae-92f9-8f34f0c06b92}) ----------- -The name of the StateType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor - Temperatura +The name of the StateType ({0faa3d08-9004-46fb-a5aa-a59b75e454cc}) of ThingClass outdoor + Força do sinal + - Temperature changed - The name of the EventType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor + Temperature + The name of the StateType ({f98776bd-887e-4b01-a87f-3d8224180563}) of ThingClass outdoor ---------- -The name of the EventType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor - Temperatura alterada +The name of the StateType ({33957a0c-75b7-45d0-8e07-731c7c20df0e}) of ThingClass indoorModule +---------- +The name of the StateType ({3cb25538-e463-40ae-92f9-8f34f0c06b92}) of ThingClass indoor + Temperatura - Temperature maximum - The name of the ParamType (ThingClass: outdoor, EventType: temperatureMax, ID: {aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) + The name of the StateType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor ---------- -The name of the StateType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: temperatureMax, ID: {dd30507e-037b-4c74-bcca-e04b94c7c5fe}) +The name of the StateType ({304472e3-56fc-4ee6-96df-aeb4b570a1d1}) of ThingClass indoorModule ---------- The name of the StateType ({dd30507e-037b-4c74-bcca-e04b94c7c5fe}) of ThingClass indoor - Temperatura máxima + Temperatura máxima + - Temperature maximum changed - The name of the EventType ({aae071dc-70d5-4a6a-8daa-3dca0d150bd7}) of ThingClass outdoor + Temperature minimum + The name of the StateType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ---------- -The name of the EventType ({dd30507e-037b-4c74-bcca-e04b94c7c5fe}) of ThingClass indoor - Temperatura máxima alterada +The name of the StateType ({2f9e4042-b699-4036-be69-a84e561ac38c}) of ThingClass indoorModule +---------- +The name of the StateType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor + Temperatura mínima + Username + The name of the StateType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection + + + + WiFi signal strength + The name of the StateType ({36fd51d9-7693-42ee-b0ae-b623e219d950}) of ThingClass indoorModule +---------- +The name of the StateType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor + Força do sinal WiFi + + - Temperature minimum - The name of the ParamType (ThingClass: outdoor, EventType: temperatureMin, ID: {b71e0c8b-3c94-421e-830e-dab97b6c104e}) ----------- -The name of the StateType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ----------- -The name of the ParamType (ThingClass: indoor, EventType: temperatureMin, ID: {ae8bb713-8805-4efd-89a1-bca44a1f1690}) ----------- -The name of the StateType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor - Temperatura mínima + Wind direction + The name of the StateType ({65ad8900-583a-4bf7-8bff-f738225ca017}) of ThingClass windModule + + Wind module + The name of the ThingClass ({160096e8-5ad0-4ca5-b7f2-60d64865ca71}) + + + - Temperature minimum changed - The name of the EventType ({b71e0c8b-3c94-421e-830e-dab97b6c104e}) of ThingClass outdoor ----------- -The name of the EventType ({ae8bb713-8805-4efd-89a1-bca44a1f1690}) of ThingClass indoor - Temperatura mínima alterada - - - - - Username - The name of the ParamType (ThingClass: netatmoConnection, EventType: userDisplayName, ID: {b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) ----------- -The name of the StateType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection + Wind speed + The name of the StateType ({9f6c1540-9933-4ef1-96d7-aecade2a8199}) of ThingClass windModule - - - Username changed - The name of the EventType ({b9c98ae6-3687-4279-8fda-bc02c7b7ea38}) of ThingClass netatmoConnection - - - - - - WiFi signal strength - The name of the ParamType (ThingClass: indoor, EventType: wifiStrength, ID: {6ea906d4-5740-454d-a730-6fdb9fa0d624}) ----------- -The name of the StateType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor - Força do sinal WiFi - - - - WiFi signal strength changed - The name of the EventType ({6ea906d4-5740-454d-a730-6fdb9fa0d624}) of ThingClass indoor - A força do sinal WiFi mudou - - - - - name - The name of the ParamType (ThingClass: outdoor, Type: thing, ID: {719e1f92-a9c8-42d6-83e1-652a0f182209}) ----------- -The name of the ParamType (ThingClass: indoor, Type: thing, ID: {a97d256c-e159-4aa0-bc71-6bd7cd0688b3}) - nome - - - - Indoor Station - The name of the ThingClass ({1c809049-04f2-4710-99f5-6ed379a2934f}) - Estação interior - - - - Outdoor Station - The name of the ThingClass ({6cc01d62-7317-4ec4-8ac4-a4cab762c179}) - Estação exterior - From d8c81a2c31c06845bea9a18815b9e0f5ef8c2c78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Wed, 7 Dec 2022 10:05:46 +0100 Subject: [PATCH 2/2] Fix wifi signal strength for base module --- netatmo/integrationpluginnetatmo.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/netatmo/integrationpluginnetatmo.cpp b/netatmo/integrationpluginnetatmo.cpp index d320009c..24528e5c 100644 --- a/netatmo/integrationpluginnetatmo.cpp +++ b/netatmo/integrationpluginnetatmo.cpp @@ -61,7 +61,7 @@ void IntegrationPluginNetatmo::startPairing(ThingPairingInfo *info) NetatmoConnection *connection = new NetatmoConnection(hardwareManager()->networkManager(), m_clientId, m_clientSecret, this); QUrl loginUrl = connection->getLoginUrl(); - // Checking the internet connection + // Checking the internet connect^ion QNetworkReply *reply = hardwareManager()->networkManager()->get(QNetworkRequest(QUrl("https://api.netatmo.net"))); connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater); connect(reply, &QNetworkReply::finished, info, [this, reply, info, connection, loginUrl]() { @@ -539,7 +539,7 @@ void IntegrationPluginNetatmo::updateModuleStates(Thing *thing, const QVariantMa thing->setStateValue("batteryCritical", thing->stateValue("batteryLevel").toInt() < 10); } - // Signal strength + // Signal strength (RF, 90 low, 60 highest) if (data.contains("rf_status")) { int signalStrength = data.value("rf_status").toInt(); if (signalStrength <= 60) { @@ -552,6 +552,20 @@ void IntegrationPluginNetatmo::updateModuleStates(Thing *thing, const QVariantMa } } + // Wifi status (86=bad, 56=good)" + + if (data.contains("wifi_status")) { + int signalStrength = data.value("wifi_status").toInt(); + if (signalStrength <= 56) { + thing->setStateValue("signalStrength", 100); + } else if (signalStrength >= 86) { + thing->setStateValue("signalStrength", 0); + } else { + int delta = 30 - (signalStrength - 56); + thing->setStateValue("signalStrength", qRound(100.0 * delta / 30.0)); + } + } + // update reachable state if (data.contains("reachable")) thing->setStateValue("connected", data.value("reachable").toBool());