Added smartmeterconsumer interface
parent
3fa711b774
commit
4173d9bb4a
|
|
@ -1,6 +1,6 @@
|
||||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
*
|
*
|
||||||
* Copyright 2013 - 2021, nymea GmbH
|
* Copyright 2013 - 2023, nymea GmbH
|
||||||
* Contact: contact@nymea.io
|
* Contact: contact@nymea.io
|
||||||
*
|
*
|
||||||
* This file is part of nymea.
|
* This file is part of nymea.
|
||||||
|
|
@ -315,20 +315,92 @@ void IntegrationPluginDrexelUndWeiss::updateStates(Thing *thing)
|
||||||
readHoldingRegister(thing, modbus, slaveAddress, ModbusRegisterX2::BrauchwasserSolltermperatur);
|
readHoldingRegister(thing, modbus, slaveAddress, ModbusRegisterX2::BrauchwasserSolltermperatur);
|
||||||
readHoldingRegister(thing, modbus, slaveAddress, ModbusRegisterX2::Auszenluft);
|
readHoldingRegister(thing, modbus, slaveAddress, ModbusRegisterX2::Auszenluft);
|
||||||
readHoldingRegister(thing, modbus, slaveAddress, ModbusRegisterX2::Summenstoerung);
|
readHoldingRegister(thing, modbus, slaveAddress, ModbusRegisterX2::Summenstoerung);
|
||||||
readHoldingRegister(thing, modbus, slaveAddress, ModbusRegisterX2::LeistungKompressor);
|
readX2Power(thing, modbus, slaveAddress);
|
||||||
readHoldingRegister(thing, modbus, slaveAddress, ModbusRegisterX2::LeistungWarmwasser);
|
readX2Energy(thing, modbus, slaveAddress);
|
||||||
readHoldingRegister(thing, modbus, slaveAddress, ModbusRegisterX2::LeistungRaumheizung);
|
|
||||||
readHoldingRegister(thing, modbus, slaveAddress, ModbusRegisterX2::LeistungLuftvorwaermung);
|
|
||||||
readHoldingRegister(thing, modbus, slaveAddress, ModbusRegisterX2::EnergieKompressor);
|
|
||||||
readHoldingRegister(thing, modbus, slaveAddress, ModbusRegisterX2::EnergieWarmwasser);
|
|
||||||
readHoldingRegister(thing, modbus, slaveAddress, ModbusRegisterX2::EnergieRaumheizung);
|
|
||||||
readHoldingRegister(thing, modbus, slaveAddress, ModbusRegisterX2::EnergieLuftvorerwarrmung);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void IntegrationPluginDrexelUndWeiss::readHoldingRegister(Thing *thing, ModbusRtuMaster *modbus, uint slaveAddress, uint modbusRegister)
|
void IntegrationPluginDrexelUndWeiss::readX2Power(Thing *thing, ModbusRtuMaster *modbus, uint slaveAddress)
|
||||||
{
|
{
|
||||||
ModbusRtuReply *reply = modbus->readHoldingRegister(slaveAddress, modbusRegister, 2); // min 2 registers must be read
|
ModbusRtuReply *reply = modbus->readHoldingRegister(slaveAddress, ModbusRegisterX2::LeistungKompressor, 8);
|
||||||
|
connect(reply, &ModbusRtuReply::finished, reply, &ModbusRtuReply::deleteLater);
|
||||||
|
connect(reply, &ModbusRtuReply::finished, this, [reply, thing] {
|
||||||
|
if (reply->error() != ModbusRtuReply::Error::NoError) {
|
||||||
|
qCWarning(dcDrexelUndWeiss()) << "Modbus error" << reply->errorString();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (reply->result().length() != 8) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reply->registerAddress() != ModbusRegisterX2::LeistungKompressor) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//LeistungKompressor = 4000,
|
||||||
|
float value = (static_cast<uint32_t>(reply->result()[0])<<16 | reply->result()[1])/1000.00;
|
||||||
|
thing->setStateValue(x2wpPowerCompressorStateTypeId, value);
|
||||||
|
float totalPower = value;
|
||||||
|
|
||||||
|
//LeistungRaumheizung = 4002
|
||||||
|
value = (static_cast<uint32_t>(reply->result()[2])<<16 | reply->result()[3])/1000.00;
|
||||||
|
thing->setStateValue(x2wpPowerRoomHeatingStateTypeId, value);
|
||||||
|
|
||||||
|
//LeistungWarmwasser = 4004
|
||||||
|
value = (static_cast<uint32_t>(reply->result()[4])<<16 | reply->result()[5])/1000.00;
|
||||||
|
thing->setStateValue(x2wpPowerWaterHeatingStateTypeId, value);
|
||||||
|
|
||||||
|
//LeistungLuftvorerwarrmung = 4006
|
||||||
|
value = (static_cast<uint32_t>(reply->result()[6])<<16 | reply->result()[7])/1000.00;
|
||||||
|
thing->setStateValue(x2wpPowerAirPreheatingStateTypeId, value);
|
||||||
|
|
||||||
|
totalPower += value; //power compressor plus power air pre-heating
|
||||||
|
thing->setStateValue(x2wpCurrentPowerStateTypeId, totalPower);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void IntegrationPluginDrexelUndWeiss::readX2Energy(Thing *thing, ModbusRtuMaster *modbus, uint slaveAddress)
|
||||||
|
{
|
||||||
|
ModbusRtuReply *reply = modbus->readHoldingRegister(slaveAddress, ModbusRegisterX2::EnergieKompressor, 8);
|
||||||
|
connect(reply, &ModbusRtuReply::finished, reply, &ModbusRtuReply::deleteLater);
|
||||||
|
connect(reply, &ModbusRtuReply::finished, this, [reply, thing] {
|
||||||
|
if (reply->error() != ModbusRtuReply::Error::NoError) {
|
||||||
|
qCWarning(dcDrexelUndWeiss()) << "Modbus error" << reply->errorString();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (reply->result().length() != 8) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reply->registerAddress() != ModbusRegisterX2::EnergieKompressor) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//EnergieKompressor = 4500
|
||||||
|
float value = (static_cast<uint32_t>(reply->result()[0])<<16 | reply->result()[1])/1000.00;
|
||||||
|
thing->setStateValue(x2wpEnergyCompressorStateTypeId, value);
|
||||||
|
float totalEnergy = value;
|
||||||
|
|
||||||
|
//EnergieRaumheizung = 4502
|
||||||
|
value = (static_cast<uint32_t>(reply->result()[2])<<16 | reply->result()[3])/1000.00;
|
||||||
|
thing->setStateValue(x2wpEnergyRoomHeatingStateTypeId, value);
|
||||||
|
|
||||||
|
//EnergieWarmwasser = 4504
|
||||||
|
value = (static_cast<uint32_t>(reply->result()[4])<<16 | reply->result()[5])/1000.00;
|
||||||
|
thing->setStateValue(x2wpEnergyWaterHeatingStateTypeId, value);
|
||||||
|
|
||||||
|
//EnergieLuftvorerwarrmung = 4506
|
||||||
|
value = (static_cast<uint32_t>(reply->result()[6])<<16 | reply->result()[7])/1000.00;
|
||||||
|
thing->setStateValue(x2wpEnergyAirPreheatingStateTypeId, value);
|
||||||
|
|
||||||
|
totalEnergy += value; //energy compressor plus energy air pre-heating
|
||||||
|
thing->setStateValue(x2wpTotalEnergyConsumedStateTypeId, totalEnergy);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void IntegrationPluginDrexelUndWeiss::readHoldingRegister(Thing *thing, ModbusRtuMaster *modbus, uint slaveAddress, uint modbusRegister)
|
||||||
|
{
|
||||||
|
ModbusRtuReply *reply = modbus->readHoldingRegister(slaveAddress, modbusRegister); // min 2 registers must be read
|
||||||
connect(reply, &ModbusRtuReply::finished, reply, &ModbusRtuReply::deleteLater);
|
connect(reply, &ModbusRtuReply::finished, reply, &ModbusRtuReply::deleteLater);
|
||||||
connect(reply, &ModbusRtuReply::finished, this, [reply, thing, this] {
|
connect(reply, &ModbusRtuReply::finished, this, [reply, thing, this] {
|
||||||
if (reply->error() != ModbusRtuReply::Error::NoError) {
|
if (reply->error() != ModbusRtuReply::Error::NoError) {
|
||||||
|
|
@ -479,36 +551,6 @@ void IntegrationPluginDrexelUndWeiss::readHoldingRegister(Thing *thing, ModbusRt
|
||||||
thing->setStateValue(x2wpErrorStateTypeId, "Supply air fan");
|
thing->setStateValue(x2wpErrorStateTypeId, "Supply air fan");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ModbusRegisterX2::LeistungKompressor:
|
|
||||||
thing->setStateValue(x2wpPowerCompressorStateTypeId, value/1000.00);
|
|
||||||
break;
|
|
||||||
case ModbusRegisterX2::LeistungWarmwasser:
|
|
||||||
thing->setStateValue(x2wpPowerWaterHeatingStateTypeId, value/1000.00);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ModbusRegisterX2::LeistungRaumheizung:
|
|
||||||
thing->setStateValue(x2wpPowerRoomHeatingStateTypeId, value/1000.00);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ModbusRegisterX2::LeistungLuftvorwaermung:
|
|
||||||
thing->setStateValue(x2wpPowerAirPreheatingStateTypeId, value/1000.00);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ModbusRegisterX2::EnergieKompressor:
|
|
||||||
thing->setStateValue(x2wpEnergyCompressorStateTypeId, value/1000.00);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ModbusRegisterX2::EnergieWarmwasser:
|
|
||||||
thing->setStateValue(x2wpEnergyWaterHeatingStateTypeId, value/1000.00);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ModbusRegisterX2::EnergieRaumheizung:
|
|
||||||
thing->setStateValue(x2wpEnergyRoomHeatingStateTypeId, value/1000.00);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ModbusRegisterX2::EnergieLuftvorerwarrmung:
|
|
||||||
thing->setStateValue(x2wpEnergyAirPreheatingStateTypeId, value/1000.00);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -544,10 +586,10 @@ void IntegrationPluginDrexelUndWeiss::readHoldingRegister(Thing *thing, ModbusRt
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
VentilationMode IntegrationPluginDrexelUndWeiss::getVentilationModeFromString(const QString &modeString)
|
VentilationMode IntegrationPluginDrexelUndWeiss::getVentilationModeFromString(const QString &modeString)
|
||||||
{
|
{
|
||||||
if (modeString == "Manual level 0") {
|
if (modeString == "Manual level 0") {
|
||||||
return VentilationMode::ManuellStufe0;
|
return VentilationMode::ManuellStufe0;
|
||||||
} else if(modeString == "Manual level 1") {
|
} else if(modeString == "Manual level 1") {
|
||||||
|
|
@ -564,11 +606,11 @@ VentilationMode IntegrationPluginDrexelUndWeiss::getVentilationModeFromString(co
|
||||||
qCWarning(dcDrexelUndWeiss()) << "Unknown ventilation mode string" << modeString;
|
qCWarning(dcDrexelUndWeiss()) << "Unknown ventilation mode string" << modeString;
|
||||||
}
|
}
|
||||||
return VentilationMode::ManuellStufe0;
|
return VentilationMode::ManuellStufe0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void IntegrationPluginDrexelUndWeiss::onPluginConfigurationChanged(const ParamTypeId ¶mTypeId, const QVariant &value)
|
void IntegrationPluginDrexelUndWeiss::onPluginConfigurationChanged(const ParamTypeId ¶mTypeId, const QVariant &value)
|
||||||
{
|
{
|
||||||
// Check refresh schedule
|
// Check refresh schedule
|
||||||
if (paramTypeId == drexelUndWeissPluginUpdateIntervalParamTypeId) {
|
if (paramTypeId == drexelUndWeissPluginUpdateIntervalParamTypeId) {
|
||||||
if (m_refreshTimer) {
|
if (m_refreshTimer) {
|
||||||
|
|
@ -577,13 +619,13 @@ void IntegrationPluginDrexelUndWeiss::onPluginConfigurationChanged(const ParamTy
|
||||||
m_refreshTimer->startTimer(refreshTime);
|
m_refreshTimer->startTimer(refreshTime);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void IntegrationPluginDrexelUndWeiss::onConnectionStateChanged(bool status)
|
void IntegrationPluginDrexelUndWeiss::onConnectionStateChanged(bool status)
|
||||||
{
|
{
|
||||||
ModbusRtuMaster *modbusRtuMaster = static_cast<ModbusRtuMaster *>(sender());
|
ModbusRtuMaster *modbusRtuMaster = static_cast<ModbusRtuMaster *>(sender());
|
||||||
Thing *thing = m_modbusRtuMasters.key(modbusRtuMaster);
|
Thing *thing = m_modbusRtuMasters.key(modbusRtuMaster);
|
||||||
if (!thing)
|
if (!thing)
|
||||||
return;
|
return;
|
||||||
thing->setStateValue(m_connectedStateTypeIds.value(thing->thingClassId()), status);
|
thing->setStateValue(m_connectedStateTypeIds.value(thing->thingClassId()), status);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
*
|
*
|
||||||
* Copyright 2013 - 2021, nymea GmbH
|
* Copyright 2013 - 2023, nymea GmbH
|
||||||
* Contact: contact@nymea.io
|
* Contact: contact@nymea.io
|
||||||
*
|
*
|
||||||
* This file is part of nymea.
|
* This file is part of nymea.
|
||||||
|
|
@ -71,6 +71,9 @@ private:
|
||||||
|
|
||||||
VentilationMode getVentilationModeFromString(const QString &modeString);
|
VentilationMode getVentilationModeFromString(const QString &modeString);
|
||||||
|
|
||||||
|
void readX2Energy(Thing *thing, ModbusRtuMaster *modbus, uint slaveAddress);
|
||||||
|
void readX2Power(Thing *thing, ModbusRtuMaster *modbus, uint slaveAddress);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onRefreshTimer();
|
void onRefreshTimer();
|
||||||
void onPluginConfigurationChanged(const ParamTypeId ¶mTypeId, const QVariant &value);
|
void onPluginConfigurationChanged(const ParamTypeId ¶mTypeId, const QVariant &value);
|
||||||
|
|
|
||||||
|
|
@ -114,7 +114,7 @@
|
||||||
"displayName": "X2 WP",
|
"displayName": "X2 WP",
|
||||||
"id": "e548f962-92db-4110-8279-10fbcde35f93",
|
"id": "e548f962-92db-4110-8279-10fbcde35f93",
|
||||||
"createMethods": ["discovery"],
|
"createMethods": ["discovery"],
|
||||||
"interfaces": ["thermostat", "connectable"],
|
"interfaces": ["thermostat", "smartmeterconsumer", "connectable"],
|
||||||
"discoveryParamTypes": [
|
"discoveryParamTypes": [
|
||||||
{
|
{
|
||||||
"id": "d4923c90-22c8-477e-a37a-341858e59dcb",
|
"id": "d4923c90-22c8-477e-a37a-341858e59dcb",
|
||||||
|
|
@ -152,6 +152,7 @@
|
||||||
"type": "bool",
|
"type": "bool",
|
||||||
"defaultValue": false
|
"defaultValue": false
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"id": "f2ce8389-c33f-4f10-8484-f2e993841762",
|
"id": "f2ce8389-c33f-4f10-8484-f2e993841762",
|
||||||
"name": "power",
|
"name": "power",
|
||||||
|
|
@ -268,6 +269,15 @@
|
||||||
"Supply air fan"
|
"Supply air fan"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "c969ece8-4712-4728-b895-2901dcdb346b",
|
||||||
|
"name": "currentPower",
|
||||||
|
"displayName": "Total power consumption",
|
||||||
|
"displayNameEvent": "Total ower consumption changed",
|
||||||
|
"type": "double",
|
||||||
|
"unit": "Watt",
|
||||||
|
"defaultValue": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "7287943a-ea6d-4c92-abbd-f55f6c7ee9e5",
|
"id": "7287943a-ea6d-4c92-abbd-f55f6c7ee9e5",
|
||||||
"name": "powerCompressor",
|
"name": "powerCompressor",
|
||||||
|
|
@ -304,6 +314,15 @@
|
||||||
"unit": "Watt",
|
"unit": "Watt",
|
||||||
"defaultValue": 0
|
"defaultValue": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "812d931b-df7d-4e6a-a53a-da84535bfffa",
|
||||||
|
"name": "totalEnergyConsumed",
|
||||||
|
"displayName": "Total energy",
|
||||||
|
"displayNameEvent": "Total energy changed",
|
||||||
|
"type": "double",
|
||||||
|
"unit": "KiloWattHour",
|
||||||
|
"defaultValue": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "b423657b-4e59-41cd-89a3-4f5cb1c3a271",
|
"id": "b423657b-4e59-41cd-89a3-4f5cb1c3a271",
|
||||||
"name": "energyCompressor",
|
"name": "energyCompressor",
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
*
|
*
|
||||||
* Copyright 2013 - 2021, nymea GmbH
|
* Copyright 2013 - 2023, nymea GmbH
|
||||||
* Contact: contact@nymea.io
|
* Contact: contact@nymea.io
|
||||||
*
|
*
|
||||||
* This file is part of nymea.
|
* This file is part of nymea.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue