added async setup
This commit is contained in:
parent
72f821849b
commit
3959239623
@ -43,11 +43,24 @@ IntegrationPluginSolarLog::IntegrationPluginSolarLog()
|
||||
|
||||
void IntegrationPluginSolarLog::setupThing(ThingSetupInfo *info)
|
||||
{
|
||||
Thing *thing = info->thing();
|
||||
if (thing->thingClassId() == solarlogThingClassId) {
|
||||
getData(thing);
|
||||
m_asyncSetup.insert(thing, info);
|
||||
connect(info, &ThingSetupInfo::aborted, this, [thing, this] {m_asyncSetup.remove(thing);});
|
||||
} else {
|
||||
Q_ASSERT_X(false, "setupThing", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8());
|
||||
}
|
||||
}
|
||||
|
||||
void IntegrationPluginSolarLog::postSetupThing(Thing *thing)
|
||||
{
|
||||
Q_UNUSED(thing)
|
||||
|
||||
if (!m_refreshTimer) {
|
||||
m_refreshTimer = hardwareManager()->pluginTimerManager()->registerTimer(2);
|
||||
connect(m_refreshTimer, &PluginTimer::timeout, this, &IntegrationPluginSolarLog::onRefreshTimer);
|
||||
}
|
||||
info->finish(Thing::ThingErrorNoError);
|
||||
}
|
||||
|
||||
void IntegrationPluginSolarLog::thingRemoved(Thing *thing)
|
||||
@ -74,7 +87,7 @@ void IntegrationPluginSolarLog::getData(Thing *thing)
|
||||
url.setPath("/getjp");
|
||||
url.setScheme("http");
|
||||
QNetworkRequest request(url);
|
||||
request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "text/plain");
|
||||
request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/json");
|
||||
QNetworkReply *reply = hardwareManager()->networkManager()->post(request, QByteArray("{\"801\":{\"170\":null}}"));
|
||||
connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater);
|
||||
connect(reply, &QNetworkReply::finished, this, [this, reply, thing]{
|
||||
@ -83,39 +96,52 @@ void IntegrationPluginSolarLog::getData(Thing *thing)
|
||||
|
||||
// Check HTTP status code
|
||||
if (status != 200 || reply->error() != QNetworkReply::NoError) {
|
||||
if (reply->error() == QNetworkReply::HostNotFoundError) {
|
||||
}
|
||||
thing->setStateValue(solarlogConnectedStateTypeId, false);
|
||||
qCWarning(dcSolarlog()) << "Request error:" << status << reply->errorString();
|
||||
if (m_asyncSetup.contains(thing)) {
|
||||
ThingSetupInfo *info = m_asyncSetup.take(thing);
|
||||
info->finish(Thing::ThingErrorHardwareNotAvailable, "No Solar-Log device at given IP-Address");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
thing->setStateValue(solarlogConnectedStateTypeId, true);
|
||||
QByteArray rawData = reply->readAll();
|
||||
qCDebug(dcSolarlog()) << "Data:" << rawData;
|
||||
QJsonParseError error;
|
||||
QJsonDocument data = QJsonDocument::fromJson(rawData, &error);
|
||||
if (error.error != QJsonParseError::NoError) {
|
||||
qCWarning(dcSolarlog()) << "Received invalide JSON object" << data.toJson();
|
||||
qCWarning(dcSolarlog()) << "Received invalide JSON object, try to upgrade the Solarlog firmware. Min Version is 3.5.";
|
||||
if (m_asyncSetup.contains(thing)) {
|
||||
ThingSetupInfo *info = m_asyncSetup.take(thing);
|
||||
info->finish(Thing::ThingErrorHardwareFailure, "Firmware outdated");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_asyncSetup.contains(thing)) {
|
||||
ThingSetupInfo *info = m_asyncSetup.take(thing);
|
||||
info->finish(Thing::ThingErrorNoError);
|
||||
}
|
||||
|
||||
QVariantMap map = data.toVariant().toMap().value("801").toMap().value("170").toMap();
|
||||
qCDebug(dcSolarlog()) << "Map 170:" << map;
|
||||
thing->setStateValue(solarlogLastupdateStateTypeId, map.value(QString::number(JsonObjectNumbers::LastUpdateTime)));
|
||||
thing->setStateValue(solarlogPacStateTypeId, map.value(QString::number(JsonObjectNumbers::Pac)));
|
||||
thing->setStateValue(solarlogPdcStateTypeId, map.value(QString::number(JsonObjectNumbers::Pdc)));
|
||||
thing->setStateValue(solarlogPacStateTypeId, (map.value(QString::number(JsonObjectNumbers::Pac)).toDouble()/1000.00));
|
||||
thing->setStateValue(solarlogPdcStateTypeId, (map.value(QString::number(JsonObjectNumbers::Pdc)).toDouble()/1000.00));
|
||||
thing->setStateValue(solarlogUacStateTypeId, map.value(QString::number(JsonObjectNumbers::Uac)));
|
||||
thing->setStateValue(solarlogDcVoltageStateTypeId, map.value(QString::number(JsonObjectNumbers::DCVoltage)));
|
||||
thing->setStateValue(solarlogYieldDayStateTypeId, map.value(QString::number(JsonObjectNumbers::YieldDay)));
|
||||
thing->setStateValue(solarlogYieldYesterdayStateTypeId, map.value(QString::number(JsonObjectNumbers::YieldYesterday)));
|
||||
thing->setStateValue(solarlogYieldMonthStateTypeId, map.value(QString::number(JsonObjectNumbers::YieldMonth)));
|
||||
thing->setStateValue(solarlogYieldYearStateTypeId, map.value(QString::number(JsonObjectNumbers::YieldYear)));
|
||||
thing->setStateValue(solarlogYieldTotalStateTypeId, map.value(QString::number(JsonObjectNumbers::YieldTotal)));
|
||||
thing->setStateValue(solarlogYieldDayStateTypeId, (map.value(QString::number(JsonObjectNumbers::YieldDay)).toDouble()/1000.00));
|
||||
thing->setStateValue(solarlogYieldYesterdayStateTypeId, (map.value(QString::number(JsonObjectNumbers::YieldYesterday)).toDouble()/1000.00));
|
||||
thing->setStateValue(solarlogYieldMonthStateTypeId, (map.value(QString::number(JsonObjectNumbers::YieldMonth)).toDouble()/1000.00));
|
||||
thing->setStateValue(solarlogYieldYearStateTypeId, (map.value(QString::number(JsonObjectNumbers::YieldYear)).toDouble()/1000.00));
|
||||
thing->setStateValue(solarlogYieldTotalStateTypeId, (map.value(QString::number(JsonObjectNumbers::YieldTotal)).toDouble()/1000.00));
|
||||
thing->setStateValue(solarlogCurrentTotalConsumptionStateTypeId, map.value(QString::number(JsonObjectNumbers::ConsPac)));
|
||||
thing->setStateValue(solarlogConsYieldDayStateTypeId, map.value(QString::number(JsonObjectNumbers::ConsYieldDay)));
|
||||
thing->setStateValue(solarlogConsYieldYesterdayStateTypeId, map.value(QString::number(JsonObjectNumbers::ConsYieldYesterday)));
|
||||
thing->setStateValue(solarlogConsYieldMonthStateTypeId, map.value(QString::number(JsonObjectNumbers::ConsYieldMonth)));
|
||||
thing->setStateValue(solarlogConsYieldYearStateTypeId, map.value(QString::number(JsonObjectNumbers::ConsYieldYear)));
|
||||
thing->setStateValue(solarlogConsYieldTotalStateTypeId, map.value(QString::number(JsonObjectNumbers::ConsYieldTotal)));
|
||||
thing->setStateValue(solarlogTotalPowerStateTypeId, map.value(QString::number(JsonObjectNumbers::TotalPower)));
|
||||
thing->setStateValue(solarlogTotalPowerStateTypeId, (map.value(QString::number(JsonObjectNumbers::TotalPower)).toDouble()/1000.00));
|
||||
});
|
||||
}
|
||||
|
||||
@ -67,6 +67,7 @@ public:
|
||||
explicit IntegrationPluginSolarLog();
|
||||
|
||||
void setupThing(ThingSetupInfo *info) override;
|
||||
void postSetupThing(Thing *thing) override;
|
||||
void thingRemoved(Thing *thing) override;
|
||||
|
||||
private slots:
|
||||
@ -74,6 +75,7 @@ private slots:
|
||||
|
||||
private:
|
||||
PluginTimer *m_refreshTimer = nullptr;
|
||||
QHash<Thing *, ThingSetupInfo *> m_asyncSetup;
|
||||
|
||||
void getData(Thing *thing);
|
||||
};
|
||||
|
||||
@ -28,8 +28,8 @@
|
||||
{
|
||||
"id": "eb9f8575-71e3-42a9-aa4d-ffea9586cc4f",
|
||||
"name": "connected",
|
||||
"displayName": "Connected",
|
||||
"displayNameEvent": "Connected changed",
|
||||
"displayName": "Reachable",
|
||||
"displayNameEvent": "Reachable changed",
|
||||
"type": "bool",
|
||||
"defaultValue": false,
|
||||
"cached": false
|
||||
@ -45,26 +45,26 @@
|
||||
{
|
||||
"id": "0bf515d8-0f48-4eba-9255-f774d68c80fe",
|
||||
"name": "pac",
|
||||
"displayName": "PAC",
|
||||
"displayNameEvent": "PAC changed",
|
||||
"displayName": "Power AC",
|
||||
"displayNameEvent": "Power AC changed",
|
||||
"type": "int",
|
||||
"unit": "Watt",
|
||||
"unit": "KiloWatt",
|
||||
"defaultValue": 0
|
||||
},
|
||||
{
|
||||
"id": "e4183a70-c848-447a-962a-f19dc5974140",
|
||||
"name": "pdc",
|
||||
"displayName": "PDC",
|
||||
"displayNameEvent": "PDC changed",
|
||||
"displayName": "Power DC",
|
||||
"displayNameEvent": "Power DC changed",
|
||||
"type": "int",
|
||||
"unit": "Watt",
|
||||
"unit": "KiloWatt",
|
||||
"defaultValue": 0
|
||||
},
|
||||
{
|
||||
"id": "7dc46b2e-5fba-4cc6-a159-09472cdfac62",
|
||||
"name": "uac",
|
||||
"displayName": "UAC",
|
||||
"displayNameEvent": "UAC changed",
|
||||
"displayName": "AC voltage",
|
||||
"displayNameEvent": "AC voltage changed",
|
||||
"type": "int",
|
||||
"unit": "Volt",
|
||||
"defaultValue": 0
|
||||
@ -72,8 +72,8 @@
|
||||
{
|
||||
"id": "bb891a05-59d8-4a3b-a0ea-b63af58558f7",
|
||||
"name": "dcVoltage",
|
||||
"displayName": "DC Voltage",
|
||||
"displayNameEvent": "DC Voltage changed",
|
||||
"displayName": "DC voltage",
|
||||
"displayNameEvent": "DC voltage changed",
|
||||
"type": "int",
|
||||
"unit": "Volt",
|
||||
"defaultValue": 0
|
||||
@ -129,7 +129,7 @@
|
||||
"displayName": "Current total consumption",
|
||||
"displayNameEvent": "Current total consumption changed",
|
||||
"type": "int",
|
||||
"unit": "Watt",
|
||||
"unit": "KiloWatt",
|
||||
"defaultValue": 0
|
||||
},
|
||||
{
|
||||
@ -153,8 +153,8 @@
|
||||
{
|
||||
"id": "a45a557a-a937-4382-8ef5-76f1ff5940e4",
|
||||
"name": "consYieldMonth",
|
||||
"displayName": "consYieldMonth",
|
||||
"displayNameEvent": "consYieldMonth changed",
|
||||
"displayName": "Cons yield month",
|
||||
"displayNameEvent": "Cons yield month changed",
|
||||
"type": "int",
|
||||
"unit": "KiloWattHour",
|
||||
"defaultValue": 0
|
||||
@ -162,8 +162,8 @@
|
||||
{
|
||||
"id": "1d42619b-3a50-4bde-b325-67a8014332ef",
|
||||
"name": "consYieldYear",
|
||||
"displayName": "consYieldYear",
|
||||
"displayNameEvent": "consYieldYear changed",
|
||||
"displayName": "Cons yield year",
|
||||
"displayNameEvent": "Cons yield year changed",
|
||||
"type": "int",
|
||||
"unit": "KiloWattHour",
|
||||
"defaultValue": 0
|
||||
@ -171,8 +171,8 @@
|
||||
{
|
||||
"id": "34f60062-5dec-45ed-9a27-4fbc083cb36e",
|
||||
"name": "consYieldTotal",
|
||||
"displayName": "consYieldTotal",
|
||||
"displayNameEvent": "consYieldTotal changed",
|
||||
"displayName": "Cons yield total",
|
||||
"displayNameEvent": "Cons yield total changed",
|
||||
"type": "int",
|
||||
"unit": "KiloWattHour",
|
||||
"defaultValue": 0
|
||||
@ -183,7 +183,7 @@
|
||||
"displayName": "Installed generator power",
|
||||
"displayNameEvent": "Installed generator power changed",
|
||||
"type": "int",
|
||||
"unit": "Watt",
|
||||
"unit": "KiloWatt",
|
||||
"defaultValue": 0
|
||||
}
|
||||
]
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user