From ab26a22d002620b76a98b975391ecc5ad2d0f3ea Mon Sep 17 00:00:00 2001 From: Boernsman Date: Sun, 28 Feb 2021 21:47:57 +0100 Subject: [PATCH] reduced feature set --- sma/integrationpluginsma.cpp | 139 +--------------------------------- sma/integrationpluginsma.h | 12 --- sma/integrationpluginsma.json | 72 +----------------- sma/sunnywebbox.h | 12 +-- 4 files changed, 9 insertions(+), 226 deletions(-) diff --git a/sma/integrationpluginsma.cpp b/sma/integrationpluginsma.cpp index 4d679db9..75bedc95 100644 --- a/sma/integrationpluginsma.cpp +++ b/sma/integrationpluginsma.cpp @@ -104,30 +104,8 @@ void IntegrationPluginSma::setupThing(ThingSetupInfo *info) info->finish(Thing::ThingErrorNoError); connect(sunnyWebBox, &SunnyWebBox::connectedChanged, this, &IntegrationPluginSma::onConnectedChanged); connect(sunnyWebBox, &SunnyWebBox::plantOverviewReceived, this, &IntegrationPluginSma::onPlantOverviewReceived); - connect(sunnyWebBox, &SunnyWebBox::devicesReceived, this, &IntegrationPluginSma::onDevicesReceived); - connect(sunnyWebBox, &SunnyWebBox::processDataReceived, this, &IntegrationPluginSma::onProcessDataReceived); - connect(sunnyWebBox, &SunnyWebBox::parameterChannelsReceived, this, &IntegrationPluginSma::onParameterChannelsReceived); - connect(sunnyWebBox, &SunnyWebBox::parametersReceived, this, &IntegrationPluginSma::onParametersReceived); m_sunnyWebBoxes.insert(info->thing(), sunnyWebBox); }); - - } else if (thing->thingClassId() == inverterThingClassId) { - Thing *parentThing = myThings().findById(thing->parentId()); - if (!parentThing) { - qCWarning(dcSma()) << "Could not find parentThing for thing " << thing->name(); - return info->finish(Thing::ThingErrorHardwareNotAvailable, "Please try again"); - } - if (parentThing->setupComplete()) { - info->finish(Thing::ThingErrorNoError); - } else { - //wait for the parent to finish the setup process - connect(parentThing, &Thing::setupStatusChanged, info, [info, parentThing] { - - if (parentThing->setupComplete()) - info->finish(Thing::ThingErrorNoError); - }); - return; - } } else { Q_ASSERT_X(false, "setupThing", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8()); } @@ -142,37 +120,6 @@ void IntegrationPluginSma::postSetupThing(Thing *thing) return; sunnyWebBox->getDevices(); thing->setStateValue(sunnyWebBoxConnectedStateTypeId, true); - } else if (thing->thingClassId() == inverterThingClassId) { - SunnyWebBox *sunnyWebBox = m_sunnyWebBoxes.value(myThings().findById(thing->parentId())); - if (!sunnyWebBox) - return; - QString key = thing->paramValue(inverterThingIdParamTypeId).toString(); - sunnyWebBox->getParameters(QStringList() << key); - sunnyWebBox->getProcessData(QStringList() << key); - } -} - -void IntegrationPluginSma::executeAction(ThingActionInfo *info) -{ - Thing *thing = info->thing(); - Action action = info->action(); - - if (thing->thingClassId() == sunnyWebBoxThingClassId) { - SunnyWebBox *sunnyWebBox = m_sunnyWebBoxes.value(thing); - if (!sunnyWebBox) - return; - if (action.actionTypeId() == sunnyWebBoxSearchDevicesActionTypeId) { - QString requestId = sunnyWebBox->getDevices(); - if (requestId.isEmpty()) { - return info->finish(Thing::ThingErrorHardwareNotAvailable); - } - m_asyncActions.insert(requestId, info); - connect(info, &ThingActionInfo::aborted, info, [requestId, this] {m_asyncActions.remove(requestId);}); - } else { - Q_ASSERT_X(false, "executeAction", QString("Unhandled actionTypeId: %1").arg(action.actionTypeId().toString()).toUtf8()); - } - } else { - Q_ASSERT_X(false, "executeAction", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8()); } } @@ -194,11 +141,6 @@ void IntegrationPluginSma::onRefreshTimer() 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); - } } } @@ -208,21 +150,13 @@ 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) { - qCDebug(dcSma()) << "Plant overview received" << overview.status; - if (m_asyncSetup.contains(messageId)) { - ThingSetupInfo *info = m_asyncSetup.value(messageId); - info->finish(Thing::ThingErrorNoError); - } + Q_UNUSED(messageId) + qCDebug(dcSma()) << "Plant overview received" << overview.status; Thing *thing = m_sunnyWebBoxes.key(static_cast(sender())); if (!thing) return; @@ -236,72 +170,3 @@ void IntegrationPluginSma::onPlantOverviewReceived(const QString &messageId, Sun thing->setStateValue(sunnyWebBoxErrorStateTypeId, overview.error); } } - -void IntegrationPluginSma::onDevicesReceived(const QString &messageId, QList devices) -{ - qCDebug(dcSma()) << "Devices received, count:" << devices.count(); - if (m_asyncActions.contains(messageId)) { - ThingActionInfo *info = m_asyncActions.value(messageId); - info->finish(Thing::ThingErrorNoError); - } - - Thing *thing = m_sunnyWebBoxes.key(static_cast(sender())); - if (!thing) - return; - - ThingDescriptors descriptors; - Q_FOREACH(SunnyWebBox::Device device, devices){ - qCDebug(dcSma()) << " - Device received" << device.name << device.key; - if (myThings().findByParams(ParamList() << Param(inverterThingIdParamTypeId, device.key))) - continue; - ThingDescriptor descriptor(inverterThingClassId, device.name, device.key ,thing->id()); - ParamList params; - params << Param(inverterThingIdParamTypeId, device.key); - descriptor.setParams(params); - descriptors.append(descriptor); - } - emit autoThingsAppeared(descriptors); -} - -void IntegrationPluginSma::onParametersReceived(const QString &messageId, const QString &deviceKey, const QList ¶meters) -{ - Q_UNUSED(messageId); - Thing *thing = myThings().findByParams(ParamList() << Param(inverterThingIdParamTypeId, deviceKey)); - if (!thing) - return; - qCDebug(dcSma()) << "Parameters received"; - Q_FOREACH(SunnyWebBox::Parameter parameter, parameters) { - qCDebug(dcSma()) << " - " << parameter.name << parameter.value << parameter.unit; - } -} - -void IntegrationPluginSma::onProcessDataReceived(const QString &messageId, const QString &deviceKey, const QHash &channels) -{ - Q_UNUSED(messageId) - Thing *thing = m_sunnyWebBoxes.key(static_cast(sender())); - if (!thing) - return; - - qCDebug(dcSma()) << "Process data received" << deviceKey; - - Q_FOREACH(Thing *childThing, myThings().filterByParentId(thing->id())) { - if (childThing->paramValue(inverterThingIdParamTypeId).toString() == deviceKey) { - Q_FOREACH(QString channel, channels.keys()) { - qCDebug(dcSma()) << " - Channel received" << channel << channels.value(channel); - //TODO parse data - } - break; - } - } -} - -void IntegrationPluginSma::onParameterChannelsReceived(const QString &messageId, const QString &deviceKey, QStringList parameterChannels) -{ - Q_UNUSED(messageId) - - Thing *thing = m_sunnyWebBoxes.key(static_cast(sender())); - if (!thing) - return; - - qCDebug(dcSma()) << "Parameter channels received" << deviceKey << parameterChannels; -} diff --git a/sma/integrationpluginsma.h b/sma/integrationpluginsma.h index 5fef831c..348de1d5 100644 --- a/sma/integrationpluginsma.h +++ b/sma/integrationpluginsma.h @@ -34,13 +34,9 @@ #include "integrations/integrationplugin.h" #include "plugintimer.h" #include "sunnywebbox.h" -#include "sunnywebboxcommunication.h" #include "discovery.h" #include -#include -#include - class IntegrationPluginSma: public IntegrationPlugin { Q_OBJECT @@ -53,7 +49,6 @@ public: void discoverThings(ThingDiscoveryInfo *info) override; void setupThing(ThingSetupInfo *info) override; void postSetupThing(Thing *thing) override; - void executeAction(ThingActionInfo *info) override; void thingRemoved(Thing *thing) override; private slots: @@ -61,17 +56,10 @@ private slots: void onConnectedChanged(bool connected); void onPlantOverviewReceived(const QString &messageId, SunnyWebBox::Overview overview); - void onDevicesReceived(const QString &messageId, QList devices); - void onParametersReceived(const QString &messageId, const QString &deviceKey, const QList ¶meters); - void onProcessDataReceived(const QString &messageId, const QString &deviceKey, const QHash &channels); - void onParameterChannelsReceived(const QString &messageId, const QString &deviceKey, QStringList parameterChannels); private: PluginTimer *m_refreshTimer = nullptr; QHash m_sunnyWebBoxes; - QHash m_asyncSetup; - QHash m_asyncActions; - SunnyWebBoxCommunication *m_sunnyWebBoxCommunication = nullptr; }; #endif // INTEGRATIONPLUGINSMA_H diff --git a/sma/integrationpluginsma.json b/sma/integrationpluginsma.json index babbc720..58b5c921 100644 --- a/sma/integrationpluginsma.json +++ b/sma/integrationpluginsma.json @@ -13,7 +13,7 @@ "name": "sunnyWebBox", "displayName": "Sunny WebBox", "createMethods": ["user", "discovery"], - "interfaces": ["extendedsmartmeterproducer", "gateway"], + "interfaces": ["extendedsmartmeterproducer"], "paramTypes": [ { "id": "864d4162-e3ce-48b8-b8ac-c1b971b52d42", @@ -84,76 +84,6 @@ "type": "QString", "defaultValue": "None" } - ], - "actionTypes": [ - { - "id": "15fc3dac-1868-4490-ba41-7c2f545926ad", - "name": "searchDevices", - "displayName": "Search new devices" - } - ] - }, - { - "id": "9cb72321-042e-4912-b23e-18516b6bbe96", - "name": "inverter", - "displayName": "Solar Inverter", - "createMethods": ["auto"], - "interfaces" : ["extendedsmartmeterproducer", "connectable"], - "paramTypes": [ - { - "id": "f43e8159-7337-4bd0-ba74-b6630e554e43", - "name": "id", - "displayName": "Device ID", - "type": "QString", - "readOnly": true - } - ], - "stateTypes": [ - { - "id": "eda29c50-73ac-40e0-9c92-26fee352e688", - "name": "connected", - "displayName": "Connected", - "displayNameEvent": "Connected changed", - "type": "bool", - "defaultValue": false, - "cached": false - }, - { - "id": "a804eabf-d5b8-4c83-84e4-8ec994875950", - "name": "currentPower", - "displayName": "Current power", - "displayNameEvent": "Current Power changed", - "type": "double", - "unit": "Watt", - "defaultValue": "0" - }, - { - "id": "cd3a0abc-37cc-4f9c-8ff2-c7ccc2513880", - "name": "eday", - "displayName": "Energy of current day", - "displayNameEvent": "Energy of day changed", - "type": "double", - "unit": "KiloWattHour", - "defaultValue": "0" - }, - { - "id": "341596ec-690b-4bf6-b6ed-0f92fa1c7d6c", - "name": "eyear", - "displayName": "Energy of current year", - "displayNameEvent": "Energy of year changed", - "type": "int", - "unit": "KiloWattHour", - "defaultValue": "0" - }, - { - "id": "6b6c1ddb-692f-400f-8b8d-38e0e0ae34ba", - "name": "totalEnergyProduced", - "displayName": "Energy total", - "displayNameEvent": "Energy total changed", - "type": "double", - "unit": "KiloWattHour", - "defaultValue": "0" - } ] } ] diff --git a/sma/sunnywebbox.h b/sma/sunnywebbox.h index 8928210e..8b72a2ef 100644 --- a/sma/sunnywebbox.h +++ b/sma/sunnywebbox.h @@ -32,7 +32,7 @@ #define SUNNYWEBBOX_H #include "integrations/thing.h" -#include "sunnywebboxcommunication.h" +#include "network/networkaccessmanager.h" #include #include @@ -77,11 +77,11 @@ public: ~SunnyWebBox(); QString getPlantOverview(); // Returns an object with the following plant data: PAC, E-TODAY, E-TOTAL, MODE, ERROR - QString getDevices(); //Returns a hierarchical list of all detected plant devices. + QString getDevices(); // Returns a hierarchical list of all detected plant devices. QString getProcessDataChannels(const QString &deviceKey); //Returns a list with the meta names of the available process data channels for a particular device type. - QString getProcessData(const QStringList &deviceKeys); //Returns process data for up to 5 devices per request. - QString getParameterChannels(const QString &deviceKey); //Returns a list with the meta names of the available parameter channels for a particular device type - QString getParameters(const QStringList &deviceKeys); //Returns the parameter values of up to 5 devices + QString getProcessData(const QStringList &deviceKeys); //Returns process data for up to 5 devices per request. + QString getParameterChannels(const QString &deviceKey); //Returns a list with the meta names of the available parameter channels for a particular device type + QString getParameters(const QStringList &deviceKeys); //Returns the parameter values of up to 5 devices QString setParameters(const QString &deviceKeys, const QHash &channels); //Sets parameter values void setHostAddress(const QHostAddress &address); @@ -95,8 +95,8 @@ private: QString sendMessage(const QHostAddress &address, const QString &procedure); QString sendMessage(const QHostAddress &address, const QString &procedure, const QJsonObject ¶ms); void parseMessage(const QString &messageId, const QString &messageType, const QVariantMap &result); - void setConnectionStatus(bool connected); + signals: void connectedChanged(bool connected);