Implement wanted states and update using signals

pull/21/head
Simon Stürz 2021-06-10 11:25:17 +02:00 committed by Michael Zanetti
parent f6b81746a6
commit 1a1276366a
9 changed files with 249 additions and 347 deletions

View File

@ -100,16 +100,81 @@ void IntegrationPluginMTec::setupThing(ThingSetupInfo *info)
qCDebug(dcMTec()) << "Using ip address" << hostAddress.toString();
// TODO: start timer and give 15 seconds until connected, since the controler is down for ~10 seconds after a disconnect
MTec *mtec = new MTec(hostAddress, this);
connect(mtec, &MTec::statusUpdated, this, &IntegrationPluginMTec::onStatusUpdated);
connect(mtec, &MTec::connectedChanged, thing, [=](bool connected){
qCDebug(dcMTec()) << "Connected changed to" << connected;
qCDebug(dcMTec()) << thing << "Connected changed to" << connected;
thing->setStateValue(mtecConnectedStateTypeId, connected);
});
connect(mtec, &MTec::waterTankTemperatureChanged, thing, [=](double waterTankTemperature){
qCDebug(dcMTec()) << thing << "Water tank temperature" << waterTankTemperature << "°C";
thing->setStateValue(mtecWaterTankTemperatureStateTypeId, waterTankTemperature);
});
connect(mtec, &MTec::bufferTankTemperatureChanged, thing, [=](double bufferTankTemperature){
qCDebug(dcMTec()) << thing << "Buffer tank temperature" << bufferTankTemperature << "°C";
thing->setStateValue(mtecBufferTankTemperatureStateTypeId, bufferTankTemperature);
});
connect(mtec, &MTec::totalAccumulatedElectricalEnergyChanged, thing, [=](double totalAccumulatedElectricalEnergy){
qCDebug(dcMTec()) << thing << "Total accumulated energy" << totalAccumulatedElectricalEnergy << "kWh";
thing->setStateValue(mtecTotalAccumulatedElectricalEnergyStateTypeId, totalAccumulatedElectricalEnergy);
});
connect(mtec, &MTec::heatPumpStateChanged, thing, [=](MTec::HeatpumpState heatPumpState){
qCDebug(dcMTec()) << thing << "Heat pump state" << heatPumpState;
switch (heatPumpState) {
case MTec::HeatpumpStateStandby:
thing->setStateValue(mtecHeatPumpStateStateTypeId, "Standby");
break;
case MTec::HeatpumpStatePreRun:
thing->setStateValue(mtecHeatPumpStateStateTypeId, "Pre run");
break;
case MTec::HeatpumpStateAutomaticHeat:
thing->setStateValue(mtecHeatPumpStateStateTypeId, "Automatic heat");
break;
case MTec::HeatpumpStateDefrost:
thing->setStateValue(mtecHeatPumpStateStateTypeId, "Defrost");
break;
case MTec::HeatpumpStateAutomaticCool:
thing->setStateValue(mtecHeatPumpStateStateTypeId, "Automatic cool");
break;
case MTec::HeatpumpStatePostRun:
thing->setStateValue(mtecHeatPumpStateStateTypeId, "Post run");
break;
case MTec::HeatpumpStateSaftyShutdown:
thing->setStateValue(mtecHeatPumpStateStateTypeId, "Safty shutdown");
break;
case MTec::HeatpumpStateError:
thing->setStateValue(mtecHeatPumpStateStateTypeId, "Error");
break;
}
});
connect(mtec, &MTec::heatMeterPowerConsumptionChanged, thing, [=](double heatMeterPowerConsumption){
qCDebug(dcMTec()) << thing << "Heat meter power consumption" << heatMeterPowerConsumption << "W";
thing->setStateValue(mtecHeatMeterPowerConsumptionStateTypeId, heatMeterPowerConsumption);
});
connect(mtec, &MTec::energyMeterPowerConsumptionChanged, thing, [=](double energyMeterPowerConsumption){
qCDebug(dcMTec()) << thing << "Energy meter power consumption" << energyMeterPowerConsumption << "W";
thing->setStateValue(mtecEnergyMeterPowerConsumptionStateTypeId, energyMeterPowerConsumption);
});
connect(mtec, &MTec::actualExcessEnergySmartHomeChanged, thing, [=](double actualExcessEnergySmartHome){
qCDebug(dcMTec()) << thing << "Smart home energy" << actualExcessEnergySmartHome << "W";
thing->setStateValue(mtecSmartHomeEnergyStateTypeId, actualExcessEnergySmartHome);
});
connect(mtec, &MTec::actualOutdoorTemperatureChanged, thing, [=](double actualOutdoorTemperature){
qCDebug(dcMTec()) << thing << "Outdoor temperature" << actualOutdoorTemperature << "°C";
thing->setStateValue(mtecOutdoorTemperatureStateTypeId, actualOutdoorTemperature);
});
m_mtecConnections.insert(thing, mtec);
// TODO: start timer and give 15 seconds until connected, since the controler is down for ~10 seconds after a disconnect
if (!mtec->connectDevice()) {
qCWarning(dcMTec()) << "Initial connect returned false. Lets wait 15 seconds until the connection can be established.";
}
@ -159,13 +224,6 @@ void IntegrationPluginMTec::executeAction(ThingActionInfo *info)
// Thing *thing = info->thing();
// Action action = info->action();
info->finish(Thing::ThingErrorNoError);
// if (thing->thingClassId() == mtecThingClassId) {
// /* if (action.actionTypeId() == mtecPowerActionTypeId) { */
// } else {
// Q_ASSERT_X(false, "executeAction", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8());
// }
}
void IntegrationPluginMTec::update(Thing *thing)
@ -174,25 +232,9 @@ void IntegrationPluginMTec::update(Thing *thing)
qCDebug(dcMTec()) << "Updating thing" << thing;
MTec *mtec = m_mtecConnections.value(thing);
if (!mtec) return;
mtec->requestStatus();
mtec->updateValues();
}
}
void IntegrationPluginMTec::onStatusUpdated(const MTecInfo &info)
{
MTec *mtec = qobject_cast<MTec *>(sender());
Thing *thing = m_mtecConnections.key(mtec);
if (!thing)
return;
qCDebug(dcMTec()) << "Received status from heat pump" << thing;
/* Received a structure holding the status info of the
* heat pump. Update the thing states with the individual fields. */
thing->setStateValue(mtecActualPowerConsumptionStateTypeId, info.actualPowerConsumption);
thing->setStateValue(mtecActualExcessEnergySmartHomeStateTypeId, info.actualExcessEnergySmartHome);
thing->setStateValue(mtecActualExcessEnergyElectricityMeterStateTypeId, info.actualExcessEnergyElectricityMeter);
thing->setStateValue(mtecExternalSetValueScalingStateTypeId, info.externalSetValueScaling);
thing->setStateValue(mtecRequestExternalHeatSourceStateTypeId, info.requestExternalHeatSource);
}

View File

@ -34,7 +34,6 @@
#include "plugintimer.h"
#include "mtec.h"
#include "mtechelpers.h"
#include <QUuid>
@ -61,7 +60,6 @@ private:
private slots:
void update(Thing *thing);
void onStatusUpdated(const MTecInfo &info);
};

View File

@ -41,60 +41,91 @@
"type": "bool",
"defaultValue": false,
"cached": false
},
{
"id": "545f94d6-f4fd-48fe-bf3b-f193e5cb76e7",
"name": "waterTankTemperature",
"displayName": "Water tank temperature",
"displayNameEvent": "Water tank temperature changed",
"unit": "DegreeCelsius",
"type": "double",
"defaultValue": 0
},
{
"id": "a98e37f8-dcdc-4c4c-aecf-07f376321849",
"name": "bufferTankTemperature",
"displayName": "Buffer tank temperature",
"displayNameEvent": "Buffer tank temperature changed",
"unit": "DegreeCelsius",
"type": "double",
"defaultValue": 0
},
{
"id": "d0c8f168-49b5-47ca-9988-c9922be38dd5",
"name": "outdoorTemperature",
"displayName": "Outdoor temperature",
"displayNameEvent": "Outdoor temperature changed",
"unit": "DegreeCelsius",
"type": "double",
"defaultValue": 0
},
{
"id": "c67c79cf-7369-409f-b170-16c4ece9d25a",
"name": "actualPowerConsumption",
"displayName": "Actual power consumption",
"displayNameEvent": "Actual power consumption changed",
"name": "totalAccumulatedElectricalEnergy",
"displayName": "Total accumulated electrical energy",
"displayNameEvent": "Total accumulated electrical energy changed",
"type": "double",
"unit": "Watt",
"unit": "KiloWattHour",
"defaultValue": 0,
"suggestLogging": true
},
{
"id": "663718fa-807e-4d85-bd78-61a65f8c0b5e",
"name": "actualExcessEnergySmartHome",
"displayName": "Actual excess energy from Smart home System",
"displayNameEvent": "Actual excess energy from Smart home System changed",
"displayNameAction": "Change actual excess energy from Smart home System",
"type": "double",
"unit": "Watt",
"defaultValue": 0,
"suggestLogging": true
},
{
"id": "fd94d39c-0db6-497f-a0a5-6c5452cbcaaf",
"name": "actualExcessEnergyElectricityMeter",
"displayName": "Actual excess energy from Electricity Meter",
"displayNameEvent": "Actual excess energy from Electricity Meter changed",
"type": "double",
"unit": "Watt",
"defaultValue": 0,
"suggestLogging": true
},
{
"id": "087c0296-705b-483a-b1e9-7ce08202c035",
"name": "externalSetValueScaling",
"displayName": "Control of the heat source by an external control [100%]",
"displayNameEvent": "Control of the heat source by an external control [100%] changed",
"type": "double",
"unit": "Percentage",
"defaultValue": 100,
"suggestLogging": true
},
{
"id": "90b17788-ce63-47e3-b97d-1b025a41ce35",
"name": "requestExternalHeatSource",
"displayName": "Request external heat source",
"displayNameEvent": "Request external heat source changed",
"id": "1e2037c8-09dc-4396-974c-efa9c486aa65",
"name": "heatPumpState",
"displayName": "Heat pump state",
"displayNameEvent": "Heat pump state changed",
"type": "QString",
"defaultValue": "No request, external heat source must be turned off",
"possibleValues": [
"No request, external heat source must be turned off",
"External heat source is released and can be switched on",
"External heat source is required and must be turned on"
"Standby",
"Pre run",
"Automatic heat",
"Defrost",
"Automatic cool",
"Post run",
"Safty shutdown",
"Error"
],
"defaultValue": "Standby",
"suggestLogging": true
},
{
"id": "581abddc-90d6-4dea-a43c-63b117b335fe",
"name": "heatMeterPowerConsumption",
"displayName": "Heat meter power consumption",
"displayNameEvent": "Heat meter power consumption changed",
"type": "double",
"unit": "Watt",
"defaultValue": 0,
"suggestLogging": true
},
{
"id": "fd52a97e-f94d-4529-b479-b74e61f75a89",
"name": "energyMeterPowerConsumption",
"displayName": "Energy meter power consumption",
"displayNameEvent": "Energy meter power consumption changed",
"type": "double",
"unit": "Watt",
"defaultValue": 0,
"suggestLogging": true
},
{
"id": "b646ea10-ea7e-4eba-bfda-8e3cd38370a7",
"name": "smartHomeEnergy",
"displayName": "Smart home energy",
"displayNameEvent": "Smart home energy changed",
"type": "double",
"unit": "Watt",
"defaultValue": 0,
"suggestLogging": true
}
],

View File

@ -30,9 +30,6 @@
#include "mtec.h"
#include "extern-plugininfo.h"
#include "mtechelpers.h"
#include <cstring>
MTec::MTec(const QHostAddress &address, QObject *parent) :
QObject(parent),
@ -51,6 +48,7 @@ MTec::MTec(const QHostAddress &address, QObject *parent) :
MTec::~MTec()
{
m_modbusMaster->disconnectDevice();
}
bool MTec::connectDevice()
@ -63,58 +61,82 @@ void MTec::disconnectDevice()
m_modbusMaster->disconnectDevice();
}
void MTec::requestStatus()
void MTec::updateValues()
{
if (!m_modbusMaster->connected()) {
return;
}
m_modbusMaster->readHoldingRegister(MTec::ModbusUnitID, MTec::ActualPowerConsumption, 1);
m_modbusMaster->readHoldingRegister(MTec::ModbusUnitID, RegisterHotWaterTankTemperature, 1);
}
void MTec::onModbusError()
{
qCWarning(dcMTec()) << "MTec: Received modbus error";
qCWarning(dcMTec()) << "Modbus error occured" << m_modbusMaster->errorString();
}
void MTec::onReceivedHoldingRegister(int slaveAddress, int modbusRegister, const QVector<quint16> &value)
{
Q_UNUSED(slaveAddress);
switch (modbusRegister) {
case ActualPowerConsumption:
case RegisterHotWaterTankTemperature:
if (value.length() == 1) {
m_info.actualPowerConsumption = MTecHelpers::convertRegisterToFloat(value[0]);
m_waterTankTemperature = value[0] / 10.0;
emit waterTankTemperatureChanged(m_waterTankTemperature);
}
m_modbusMaster->readHoldingRegister(MTec::ModbusUnitID, MTec::ActualExcessEnergySmartHome, 1);
m_modbusMaster->readHoldingRegister(MTec::ModbusUnitID, RegisterBufferTankTemperature, 1);
break;
case ActualExcessEnergySmartHome:
case RegisterBufferTankTemperature:
if (value.length() == 1) {
m_info.actualExcessEnergySmartHome = MTecHelpers::convertRegisterToFloat(value[0]);
m_bufferTankTemperature = value[0] / 10.0;
emit bufferTankTemperatureChanged(m_bufferTankTemperature);
}
m_modbusMaster->readHoldingRegister(MTec::ModbusUnitID, MTec::ActualExcessEnergyElectricityMeter, 1);
m_modbusMaster->readHoldingRegister(MTec::ModbusUnitID, RegisterTotalAccumulatedElectricalEnergy, 1);
break;
case ActualExcessEnergyElectricityMeter:
case RegisterTotalAccumulatedElectricalEnergy:
if (value.length() == 1) {
m_info.actualExcessEnergyElectricityMeter = MTecHelpers::convertRegisterToFloat(value[0]);
m_totalAccumulatedElectricalEnergy = value[0] / 100.0;
emit totalAccumulatedElectricalEnergyChanged(m_totalAccumulatedElectricalEnergy);
}
m_modbusMaster->readHoldingRegister(MTec::ModbusUnitID, MTec::ExternalSetValueScaling, 1);
m_modbusMaster->readHoldingRegister(MTec::ModbusUnitID, RegisterHeatpumpState, 1);
break;
case ExternalSetValueScaling:
case RegisterHeatpumpState:
if (value.length() == 1) {
m_info.externalSetValueScaling = MTecHelpers::convertRegisterToFloat(value[0]);
m_heatPumpState = static_cast<HeatpumpState>(value[0]);
emit heatPumpStateChanged(m_heatPumpState);
}
m_modbusMaster->readHoldingRegister(MTec::ModbusUnitID, MTec::RequestExternalHeatSource, 1);
m_modbusMaster->readHoldingRegister(MTec::ModbusUnitID, RegisterHeatMeterPowerConsumption, 1);
break;
case RequestExternalHeatSource:
case RegisterHeatMeterPowerConsumption:
if (value.length() == 1) {
m_info.requestExternalHeatSource = MTecHelpers::externalHeatSourceRequestToString(value[0]);
m_heatMeterPowerConsumption = value[0] / 100.0;
emit heatMeterPowerConsumptionChanged(m_heatMeterPowerConsumption);
}
m_modbusMaster->readHoldingRegister(MTec::ModbusUnitID, RegisterEnergyMeterPowerConsumption, 1);
break;
case RegisterEnergyMeterPowerConsumption:
if (value.length() == 1) {
m_energyMeterPowerConsumption = value[0] / 100.0;
emit energyMeterPowerConsumptionChanged(m_energyMeterPowerConsumption);
}
m_modbusMaster->readHoldingRegister(MTec::ModbusUnitID, RegisterActualExcessEnergySmartHome, 1);
break;
case RegisterActualExcessEnergySmartHome:
if (value.length() == 1) {
m_actualExcessEnergySmartHome = value[0] / 100.0;
emit actualExcessEnergySmartHomeChanged(m_actualExcessEnergySmartHome);
}
m_modbusMaster->readHoldingRegister(MTec::ModbusUnitID, RegisterActualOutdoorTemperature, 1);
break;
case RegisterActualOutdoorTemperature:
if (value.length() == 1) {
m_actualOutdoorTemperature = value[0] / 10.0;
emit actualOutdoorTemperatureChanged(m_actualOutdoorTemperature);
}
// TODO: set initialized
/* Everything read without errors
* -> update status in plugin */
emit statusUpdated(m_info);
}
break;
}
}

View File

@ -36,17 +36,23 @@
#include "../modbus/modbustcpmaster.h"
#include "mtecinfo.h"
#include "mtechelpers.h"
class MTec : public QObject
{
Q_OBJECT
public:
/** Constructor */
explicit MTec(const QHostAddress &address, QObject *parent = nullptr);
enum HeatpumpState {
HeatpumpStateStandby = 0,
HeatpumpStatePreRun = 1,
HeatpumpStateAutomaticHeat = 2,
HeatpumpStateDefrost = 3,
HeatpumpStateAutomaticCool = 4,
HeatpumpStatePostRun = 5,
HeatpumpStateSaftyShutdown = 7,
HeatpumpStateError = 8
};
Q_ENUM(HeatpumpState)
/** Destructor */
explicit MTec(const QHostAddress &address, QObject *parent = nullptr);
~MTec();
inline QHostAddress hostAddress() const { return m_hostAddress; };
@ -54,62 +60,70 @@ public:
bool connectDevice();
void disconnectDevice();
void requestStatus();
void updateValues();
private:
/** Modbus Unit ID (undocumented, guessing 1 for now) */
static const quint16 ModbusUnitID = 1;
/** The following modbus addresses can be read: */
enum RegisterList {
/**
* APPL.CtrlAppl.sParam.heatpump[0].ElectricEnergyMeter.values.power
* Actual power consumtion [W]
*/
ActualPowerConsumption = 707,
enum Register {
/* APPL.CtrlAppl.sParam.hotWaterTank[0].topTemp.values.actValue
* Hot water tank top temperature [1/10°C]. */
RegisterHotWaterTankTemperature = 401,
/**
* APPL.CtrlAppl.sIOModule.Virt[0].param.sensor[0]
* Acutal excess energy given from Smart home System [W]
*/
ActualExcessEnergySmartHome = 1000,
/* APPL.CtrlAppl.sParam.bufferTank[0].topTemp.values.actValue
* Buffer Actual top temperature [1/10°C]. */
RegisterBufferTankTemperature = 601,
/**
* APPL.CtrlAppl.sParam.photovoltaics.ElectricEnergyMeter.values.power
* Acutal excess energy given from Electricity Meter [W]
*/
ActualExcessEnergyElectricityMeter = 1002,
/* APPL.CtrlAppl.sStatisticalData.heatpump[0].consumption.electricalenergy
* Total accumulated electrical energy [kWh] */
RegisterTotalAccumulatedElectricalEnergy = 702,
/**
* APPL.CtrlAppl.sParam.extHeatSource[0].param.externalSetvalueScaled
* Control of the heat source by an external control [100%]
*/
ExternalSetValueScaling = 1600,
/* APPL.CtrlAppl.sParam.heatpump[0].values.heatpumpState */
RegisterHeatpumpState = 703,
/* APPL.CtrlAppl.sParam.heatpump[0].HeatMeter.values.power
* Actual power consumtion [W] */
RegisterHeatMeterPowerConsumption = 706,
/* APPL.CtrlAppl.sParam.heatpump[0].ElectricEnergyMeter.values.power
* Actual power consumtion [W] */
RegisterEnergyMeterPowerConsumption = 707,
/* APPL.CtrlAppl.sIOModule.Virt[0].param.sensor[0]
* Acutal excess energy given from Smart home System [W] */
RegisterActualExcessEnergySmartHome = 1000,
/* APPL.CtrlAppl.sParam.outdoorTemp.values.actValue
* Actual exterior temperature [°C] */
RegisterActualOutdoorTemperature = 1502,
/**
* APPL.CtrlAppl.sParam.extHeatSource[0].values.requestExtHeatsource
* 0no request, external heat source must be turned off.
* 1external heat source is released and can be switched on.
* 2external heat source is required and must be turned on.
*/
RequestExternalHeatSource = 1601
};
/* Note: This class only requires one IP address and one
* TCP Modbus connection. Multiple devices are managed
* within the IntegrationPluginMTec class. */
QHostAddress m_hostAddress;
/** Pointer to ModbusTCPMaster object, responseible for low-level communicaiton */
ModbusTCPMaster *m_modbusMaster = nullptr;
/** This structure is filled by the receivedStatus... functions */
MTecInfo m_info ;
double m_waterTankTemperature = 0;
double m_bufferTankTemperature = 0;
double m_totalAccumulatedElectricalEnergy = 0;
HeatpumpState m_heatPumpState = HeatpumpStateStandby;
double m_heatMeterPowerConsumption = 0;
double m_energyMeterPowerConsumption = 0;
double m_actualExcessEnergySmartHome = 0;
double m_actualOutdoorTemperature = 0;
signals:
void connectedChanged(bool connected);
void statusUpdated(const MTecInfo &info);
void waterTankTemperatureChanged(double waterTankTemperature);
void bufferTankTemperatureChanged(double bufferTankTemperature);
void totalAccumulatedElectricalEnergyChanged(double totalAccumulatedElectricalEnergy);
void heatPumpStateChanged(HeatpumpState heatPumpState);
void heatMeterPowerConsumptionChanged(double heatMeterPowerConsumption);
void energyMeterPowerConsumptionChanged(double energyMeterPowerConsumption);
void actualExcessEnergySmartHomeChanged(double actualExcessEnergySmartHome);
void actualOutdoorTemperatureChanged(double actualOutdoorTemperature);
private slots:
void onModbusError();

View File

@ -6,14 +6,11 @@ QT += \
SOURCES += \
mtec.cpp \
mtechelpers.cpp \
integrationpluginmtec.cpp \
../modbus/modbustcpmaster.cpp
HEADERS += \
mtec.h \
mtechelpers.h \
mtecinfo.h \
integrationpluginmtec.h \
../modbus/modbustcpmaster.h \

View File

@ -1,87 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Copyright 2013 - 2021, 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 <https://www.gnu.org/licenses/>.
*
* 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 "mtechelpers.h"
float MTecHelpers::convertRegisterToFloat(const quint16 reg)
{
float value = 0.0;
value = reg/100.0;
return value;
}
void MTecHelpers::convertFloatToRegister(quint16 &reg, float value)
{
reg = qRound(value * 100.0);
}
QString MTecHelpers::connectionStateToString(ConnectionState state)
{
QString str{};
switch (state) {
case Offline:
str = QT_TR_NOOP("Off");
break;
case Connecting:
str = QT_TR_NOOP("Connecting");
break;
case Online:
str = QT_TR_NOOP("Connected");
break;
case Error:
str = QT_TR_NOOP("Error");
break;
}
return str;
}
QString MTecHelpers::externalHeatSourceRequestToString(quint16 value)
{
QString str{};
switch (value) {
case 0:
str = QT_TR_NOOP("No request, external heat source must be turned off");
break;
case 1:
str = QT_TR_NOOP("External heat source is released and can be switched on");
break;
case 2:
str = QT_TR_NOOP("External heat source is required and must be turned on");
break;
}
return str;
}

View File

@ -1,56 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Copyright 2013 - 2021, 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 <https://www.gnu.org/licenses/>.
*
* 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 MTECHELPERS_H
#define MTECHELPERS_H
#include <QtGlobal>
#include <QObject>
#include <QString>
class MTecHelpers : public QObject {
public:
enum ConnectionState {
Offline,
Connecting,
Online,
Error
};
Q_ENUM(ConnectionState);
static float convertRegisterToFloat(quint16 reg);
static void convertFloatToRegister(quint16 &reg, float value);
static QString connectionStateToString(ConnectionState state);
static QString externalHeatSourceRequestToString(quint16 value);
};
#endif

View File

@ -1,59 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Copyright 2013 - 2021, 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 <https://www.gnu.org/licenses/>.
*
* 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 MTECINFO_H
#define MTECINFO_H
#include <QMetaType>
#include <QString>
/** This struct holds the status information that is read from the MTec device
* and passed to the nymea framework within this plugin.
*/
struct MTecInfo {
/** Contains more detailed info on the status
* (Off, Connecting, Connected, Error) */
QString status;
double actualPowerConsumption;
double actualExcessEnergySmartHome;
double actualExcessEnergyElectricityMeter;
double externalSetValueScaling;
QString requestExternalHeatSource;
};
Q_DECLARE_METATYPE(MTecInfo);
#endif