fixed netatmo setup and added wirelessconnected interface
parent
319d1dad37
commit
8ea2b96ee8
|
|
@ -154,31 +154,28 @@ void IntegrationPluginNetatmo::setupThing(ThingSetupInfo *info)
|
|||
}
|
||||
}
|
||||
|
||||
OAuth2 *authentication;
|
||||
if (m_pairingAuthentications.values().contains(thing->id())) {
|
||||
OAuth2 *authentication = m_pairingAuthentications.key(thing->id());
|
||||
authentication = m_pairingAuthentications.key(thing->id());
|
||||
m_pairingAuthentications.remove(authentication);
|
||||
qCDebug(dcNetatmo()) << "Authenticated from pairing process, not creating a new authentication";
|
||||
thing->setStateValue(netatmoConnectionConnectedStateTypeId, true);
|
||||
thing->setStateValue(netatmoConnectionLoggedInStateTypeId, true);
|
||||
thing->setStateValue(netatmoConnectionUserDisplayNameStateTypeId, authentication->username());
|
||||
m_authentications.insert(authentication, thing->id());
|
||||
info->finish(Thing::ThingErrorNoError);
|
||||
} else {
|
||||
OAuth2 *authentication = new OAuth2(m_clientId, m_clientSecret, this);
|
||||
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");
|
||||
|
||||
// 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());
|
||||
}
|
||||
});
|
||||
authentication->startAuthentication();
|
||||
|
||||
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());
|
||||
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()) {
|
||||
|
|
@ -193,6 +190,14 @@ void IntegrationPluginNetatmo::setupThing(ThingSetupInfo *info)
|
|||
info->finish(Thing::ThingErrorNoError);
|
||||
});
|
||||
}
|
||||
|
||||
// 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) {
|
||||
|
|
@ -457,7 +462,8 @@ void IntegrationPluginNetatmo::onIndoorStatesChanged()
|
|||
thing->setStateValue(indoorHumidityStateTypeId, indoor->humidity());
|
||||
thing->setStateValue(indoorCo2StateTypeId, indoor->co2());
|
||||
thing->setStateValue(indoorNoiseStateTypeId, indoor->noise());
|
||||
thing->setStateValue(indoorWifiStrengthStateTypeId, indoor->wifiStrength());
|
||||
thing->setStateValue(indoorSignalStrengthStateTypeId, indoor->wifiStrength());
|
||||
thing->setStateValue(indoorConnectedStateTypeId, indoor->reachable());
|
||||
}
|
||||
|
||||
void IntegrationPluginNetatmo::onOutdoorStatesChanged()
|
||||
|
|
@ -473,6 +479,7 @@ void IntegrationPluginNetatmo::onOutdoorStatesChanged()
|
|||
thing->setStateValue(outdoorSignalStrengthStateTypeId, outdoor->signalStrength());
|
||||
thing->setStateValue(outdoorBatteryLevelStateTypeId, outdoor->battery());
|
||||
thing->setStateValue(outdoorBatteryCriticalStateTypeId, outdoor->battery() < 10);
|
||||
thing->setStateValue(outdoorConnectedStateTypeId, outdoor->reachable());
|
||||
}
|
||||
|
||||
void IntegrationPluginNetatmo::updateClientCredentials()
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@
|
|||
"id": "1c809049-04f2-4710-99f5-6ed379a2934f",
|
||||
"name": "indoor",
|
||||
"displayName": "Indoor Station",
|
||||
"interfaces": ["temperaturesensor", "humiditysensor", "pressuresensor", "noisesensor", "co2sensor"],
|
||||
"interfaces": ["temperaturesensor", "humiditysensor", "pressuresensor", "noisesensor", "co2sensor", "wirelessconnectable"],
|
||||
"createMethods": ["auto"],
|
||||
"paramTypes": [
|
||||
{
|
||||
|
|
@ -159,12 +159,23 @@
|
|||
},
|
||||
{
|
||||
"id": "6ea906d4-5740-454d-a730-6fdb9fa0d624",
|
||||
"name": "wifiStrength",
|
||||
"name": "signalStrength",
|
||||
"displayName": "WiFi signal strength",
|
||||
"displayNameEvent": "WiFi signal strength changed",
|
||||
"unit": "Percentage",
|
||||
"type": "int",
|
||||
"type": "uint",
|
||||
"minValue": 0,
|
||||
"maxValue": 100,
|
||||
"defaultValue": 0
|
||||
},
|
||||
{
|
||||
"id": "d84ba5d7-5202-4786-b983-958b594c341f",
|
||||
"name": "connected",
|
||||
"displayName": "Connected",
|
||||
"displayNameEvent": "Connected changed",
|
||||
"type": "bool",
|
||||
"cached": false,
|
||||
"defaultValue": false
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -172,7 +183,7 @@
|
|||
"id": "6cc01d62-7317-4ec4-8ac4-a4cab762c179",
|
||||
"name": "outdoor",
|
||||
"displayName": "Outdoor Station",
|
||||
"interfaces": ["temperaturesensor", "humiditysensor", "batterylevel"],
|
||||
"interfaces": ["temperaturesensor", "humiditysensor", "batterylevel", "wirelessconnectable"],
|
||||
"createMethods": ["auto"],
|
||||
"paramTypes": [
|
||||
{
|
||||
|
|
@ -253,9 +264,20 @@
|
|||
"displayName": "Signal strength",
|
||||
"displayNameEvent": "Signal strength changed",
|
||||
"unit": "Percentage",
|
||||
"type": "int",
|
||||
"type": "uint",
|
||||
"minValue": 0,
|
||||
"maxValue": 100,
|
||||
"defaultValue": 0
|
||||
},
|
||||
{
|
||||
"id": "21d7f2b7-e45b-4986-b3da-d6e8c0421bfc",
|
||||
"name": "connected",
|
||||
"displayName": "Connected",
|
||||
"displayNameEvent": "Connected changed",
|
||||
"type": "bool",
|
||||
"cached": false,
|
||||
"defaultValue": false
|
||||
},
|
||||
{
|
||||
"id": "15d8fae1-ba47-42e1-994d-530e8017c965",
|
||||
"name": "batteryLevel",
|
||||
|
|
|
|||
|
|
@ -94,6 +94,11 @@ int NetatmoBaseStation::wifiStrength() const
|
|||
return m_wifiStrength;
|
||||
}
|
||||
|
||||
bool NetatmoBaseStation::reachable() const
|
||||
{
|
||||
return m_reachable;
|
||||
}
|
||||
|
||||
void NetatmoBaseStation::updateStates(const QVariantMap &data)
|
||||
{
|
||||
// check data timestamp
|
||||
|
|
@ -124,5 +129,10 @@ void NetatmoBaseStation::updateStates(const QVariantMap &data)
|
|||
m_wifiStrength = qRound(100.0 * delta / 30.0);
|
||||
}
|
||||
}
|
||||
|
||||
// update reachable state
|
||||
if (data.contains("reachable")) {
|
||||
m_reachable = data.value("reachable").toBool();
|
||||
}
|
||||
emit statesChanged();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ public:
|
|||
int noise() const;
|
||||
int co2() const;
|
||||
int wifiStrength() const;
|
||||
bool reachable() const;
|
||||
|
||||
void updateStates(const QVariantMap &data);
|
||||
|
||||
|
|
@ -73,6 +74,7 @@ private:
|
|||
int m_noise;
|
||||
int m_co2;
|
||||
int m_wifiStrength;
|
||||
bool m_reachable;
|
||||
|
||||
signals:
|
||||
void statesChanged();
|
||||
|
|
|
|||
|
|
@ -90,6 +90,11 @@ int NetatmoOutdoorModule::battery() const
|
|||
return m_battery;
|
||||
}
|
||||
|
||||
bool NetatmoOutdoorModule::reachable() const
|
||||
{
|
||||
return m_reachable;
|
||||
}
|
||||
|
||||
void NetatmoOutdoorModule::updateStates(const QVariantMap &data)
|
||||
{
|
||||
// check data timestamp
|
||||
|
|
@ -130,6 +135,11 @@ void NetatmoOutdoorModule::updateStates(const QVariantMap &data)
|
|||
m_signalStrength = qRound(100.0 * delta / 30.0);
|
||||
}
|
||||
}
|
||||
|
||||
// update reachable state
|
||||
if (data.contains("reachable")) {
|
||||
m_reachable = data.value("reachable").toBool();
|
||||
}
|
||||
emit statesChanged();
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@ public:
|
|||
double maxTemperature() const;
|
||||
int signalStrength() const;
|
||||
int battery() const;
|
||||
bool reachable() const;
|
||||
|
||||
void updateStates(const QVariantMap &data);
|
||||
|
||||
|
|
@ -69,6 +70,7 @@ private:
|
|||
double m_maxTemperature;
|
||||
int m_signalStrength;
|
||||
int m_battery;
|
||||
bool m_reachable;
|
||||
|
||||
signals:
|
||||
void statesChanged();
|
||||
|
|
|
|||
Loading…
Reference in New Issue