added get process data call

This commit is contained in:
Boernsman 2021-02-26 20:29:30 +01:00 committed by Simon Stürz
parent d777f9c7f4
commit ef5c791658
5 changed files with 27 additions and 21 deletions

View File

@ -11,5 +11,4 @@ nymea plug-in for SMA solar equipment.
* The package "nymea-plugin-sma" must be installed.
## More
https://www.sma.de/en/

View File

@ -121,7 +121,7 @@ void IntegrationPluginSma::setupThing(ThingSetupInfo *info)
info->finish(Thing::ThingErrorNoError);
} else {
//wait for the parent to finish the setup process
connect(parentThing, &Thing::setupStatusChanged, info, [this, info, parentThing] {
connect(parentThing, &Thing::setupStatusChanged, info, [info, parentThing] {
if (parentThing->setupComplete())
info->finish(Thing::ThingErrorNoError);
@ -148,6 +148,7 @@ void IntegrationPluginSma::postSetupThing(Thing *thing)
return;
QString key = thing->paramValue(inverterThingIdParamTypeId).toString();
sunnyWebBox->getParameters(QStringList() << key);
sunnyWebBox->getProcessData(QStringList() << key);
}
}
@ -190,8 +191,14 @@ void IntegrationPluginSma::thingRemoved(Thing *thing)
void IntegrationPluginSma::onRefreshTimer()
{
Q_FOREACH(SunnyWebBox *sunnyWebBox, m_sunnyWebBoxes) {
Q_FOREACH(Thing *thing, myThings().filterByThingClassId(sunnyWebBoxThingClassId)) {
SunnyWebBox *sunnyWebBox = m_sunnyWebBoxes.value(thing);
sunnyWebBox->getPlantOverview();
Q_FOREACH(Thing *child, myThings().filterByParentId(thing->id())) {
QString key = child->paramValue(inverterThingIdParamTypeId).toString();
sunnyWebBox->getProcessData(QStringList() << key);
}
}
}
@ -201,6 +208,11 @@ void IntegrationPluginSma::onConnectedChanged(bool connected)
if (!thing)
return;
thing->setStateValue(sunnyWebBoxConnectedStateTypeId, connected);
if (!connected) {
Q_FOREACH(Thing *child, myThings().filterByParentId(thing->id())) {
child->setStateValue(inverterConnectedStateTypeId, false);
}
}
}
void IntegrationPluginSma::onPlantOverviewReceived(const QString &messageId, SunnyWebBox::Overview overview)
@ -216,8 +228,8 @@ void IntegrationPluginSma::onPlantOverviewReceived(const QString &messageId, Sun
return;
thing->setStateValue(sunnyWebBoxCurrentPowerStateTypeId, overview.power);
thing->setStateValue(sunnyWebBoxDayEnergyStateTypeId, overview.dailyYield);
thing->setStateValue(sunnyWebBoxTotalEnergyStateTypeId, overview.totalYield);
thing->setStateValue(sunnyWebBoxDayEnergyProducedStateTypeId, overview.dailyYield);
thing->setStateValue(sunnyWebBoxTotalEnergyProducedStateTypeId, overview.totalYield);
thing->setStateValue(sunnyWebBoxModeStateTypeId, overview.status);
if (!overview.error.isEmpty()){
qCDebug(dcSma()) << "Received error" << overview.error;
@ -274,8 +286,9 @@ void IntegrationPluginSma::onProcessDataReceived(const QString &messageId, const
Q_FOREACH(Thing *childThing, myThings().filterByParentId(thing->id())) {
if (childThing->paramValue(inverterThingIdParamTypeId).toString() == deviceKey) {
if (channels.contains("E-Total")) {
//TODO set total energy
Q_FOREACH(QString channel, channels.keys()) {
qCDebug(dcSma()) << " - Channel received" << channel << channels.value(channel);
//TODO parse data
}
break;
}
@ -292,8 +305,3 @@ void IntegrationPluginSma::onParameterChannelsReceived(const QString &messageId,
qCDebug(dcSma()) << "Parameter channels received" << deviceKey << parameterChannels;
}
void IntegrationPluginSma::getData(Thing *thing)
{
Q_UNUSED(thing)
}

View File

@ -72,8 +72,6 @@ private:
QHash<QString, ThingSetupInfo *> m_asyncSetup;
QHash<QString, ThingActionInfo *> m_asyncActions;
SunnyWebBoxCommunication *m_sunnyWebBoxCommunication = nullptr;
void getData(Thing *thing);
};
#endif // INTEGRATIONPLUGINSMA_H

View File

@ -13,7 +13,7 @@
"name": "sunnyWebBox",
"displayName": "Sunny WebBox",
"createMethods": ["user", "discovery"],
"interfaces": ["gateway"],
"interfaces": ["extendedsmartmeterproducer", "gateway"],
"paramTypes": [
{
"id": "864d4162-e3ce-48b8-b8ac-c1b971b52d42",
@ -52,18 +52,18 @@
},
{
"id": "16f34c5c-8dbb-4dcc-9faa-4b782d57226c",
"name": "dayEnergy",
"displayName": "Day energy",
"displayNameEvent": "Day energy changed",
"name": "dayEnergyProduced",
"displayName": "Day energy produced",
"displayNameEvent": "Day energy produced changed",
"type": "double",
"unit": "KiloWattHour",
"defaultValue": 0
},
{
"id": "0bb4e227-7e38-49ca-9b32-ce4621c9305b",
"name": "totalEnergy",
"displayName": "Total energy",
"displayNameEvent": "Total energy changed",
"name": "totalEnergyProduced",
"displayName": "Total energy produced",
"displayNameEvent": "Total energy produced changed",
"type": "double",
"unit": "KiloWattHour",
"defaultValue": 0

View File

@ -188,6 +188,7 @@ void SunnyWebBox::parseMessage(const QString &messageId, const QString &messageT
} else if (messageType == "GetProcessData") {
QList<Device> devices;
QVariantList devicesList = result.value("devices").toList();
qCDebug(dcSma()) << "SunnyWebBox: GetProcessData response received";
Q_FOREACH(QVariant value, devicesList) {
QString key = value.toMap().value("key").toString();