From 4173d9bb4a66b93ec5d7c220c318bccf775ee026 Mon Sep 17 00:00:00 2001 From: trinnes Date: Fri, 27 Jan 2023 18:45:23 +0100 Subject: [PATCH 1/3] Added smartmeterconsumer interface --- .../integrationplugindrexelundweiss.cpp | 546 ++++++++++-------- .../integrationplugindrexelundweiss.h | 5 +- .../integrationplugindrexelundweiss.json | 21 +- drexelundweiss/modbusregisterdefinition.h | 2 +- 4 files changed, 319 insertions(+), 255 deletions(-) diff --git a/drexelundweiss/integrationplugindrexelundweiss.cpp b/drexelundweiss/integrationplugindrexelundweiss.cpp index c4eff29..6fc020b 100644 --- a/drexelundweiss/integrationplugindrexelundweiss.cpp +++ b/drexelundweiss/integrationplugindrexelundweiss.cpp @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2021, nymea GmbH +* Copyright 2013 - 2023, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -315,275 +315,317 @@ void IntegrationPluginDrexelUndWeiss::updateStates(Thing *thing) readHoldingRegister(thing, modbus, slaveAddress, ModbusRegisterX2::BrauchwasserSolltermperatur); readHoldingRegister(thing, modbus, slaveAddress, ModbusRegisterX2::Auszenluft); readHoldingRegister(thing, modbus, slaveAddress, ModbusRegisterX2::Summenstoerung); - readHoldingRegister(thing, modbus, slaveAddress, ModbusRegisterX2::LeistungKompressor); - readHoldingRegister(thing, modbus, slaveAddress, ModbusRegisterX2::LeistungWarmwasser); - 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); + readX2Power(thing, modbus, slaveAddress); + readX2Energy(thing, modbus, slaveAddress); } } -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, this] { + connect(reply, &ModbusRtuReply::finished, this, [reply, thing] { if (reply->error() != ModbusRtuReply::Error::NoError) { qCWarning(dcDrexelUndWeiss()) << "Modbus error" << reply->errorString(); - thing->setStateValue(m_connectedStateTypeIds.value(thing->thingClassId()), false); return; } - thing->setStateValue(m_connectedStateTypeIds.value(thing->thingClassId()), true); - if (reply->result().length() != 2) { - return; - } - uint32_t value = (static_cast(reply->result()[0])<<16 | reply->result()[1]); - - if (thing->thingClassId() == x2wpThingClassId) { - switch (reply->registerAddress()) { - case ModbusRegisterX2::Waermepumpe: - thing->setStateValue(x2wpPowerStateTypeId, value); - break; - - case ModbusRegisterX2::RaumSoll: - thing->setStateValue(x2wpTargetTemperatureStateTypeId, value/1000.00); - break; - - case ModbusRegisterX2::Raum: - thing->setStateValue(x2wpTemperatureStateTypeId, value/1000.00); - break; - - case ModbusRegisterX2::TemperaturWarmwasserspeicherUnten: - thing->setStateValue(x2wpWaterTemperatureStateTypeId, value/1000.00); - break; - case ModbusRegisterX2::BrauchwasserSolltermperatur: - thing->setStateValue(x2wpTargetWaterTemperatureStateTypeId, value/1000.00); - break; - case ModbusRegisterX2::Auszenluft: - thing->setStateValue(x2wpOutsideAirTemperatureStateTypeId, value/1000.00); - break; - - case ModbusRegisterX2::Summenstoerung: - if (value != 0) { - //get actual error - } else { - thing->setStateValue(x2wpErrorStateTypeId, "No error"); - } - break; - - case ModbusRegisterX2::StoerungAbluftventilator: - if (value != 0) - thing->setStateValue(x2wpErrorStateTypeId, "Exhaust fan"); - break; - - case ModbusRegisterX2::StoerungBoilerfuehlerElektroheizstab: - if (value != 0) - thing->setStateValue(x2wpErrorStateTypeId, "Boiler sensor electric heating element"); - break; - - case ModbusRegisterX2::StoerungBoilerfuehlerSolar: - if (value != 0) - thing->setStateValue(x2wpErrorStateTypeId, "Boiler sensor solar"); - break; - - case ModbusRegisterX2::StoerungBoilerfuehlerWaermepumpe: - if (value != 0) - thing->setStateValue(x2wpErrorStateTypeId, "Boiler sensor heat pump"); - break; - - case ModbusRegisterX2::StoerungBoileruebertemperatur: - if (value != 0) - thing->setStateValue(x2wpErrorStateTypeId, "Boiler overtemperature"); - break; - - case ModbusRegisterX2::StoerungCO2Sensor: - if (value != 0) - thing->setStateValue(x2wpErrorStateTypeId, "CO2-Sensor"); - break; - - case ModbusRegisterX2::StoerungDruckverlustAbluftZuGrosz: - if (value != 0) - thing->setStateValue(x2wpErrorStateTypeId, "Pressure loss exhaust air too big"); - break; - - case ModbusRegisterX2::StoerungDruckverlustZuluftZuGrosz: - if (value != 0) - thing->setStateValue(x2wpErrorStateTypeId, "Pressure loss supply air too large"); - break; - - case ModbusRegisterX2::StoerungDurchflussmengeHeizgkreis: - if (value != 0) - thing->setStateValue(x2wpErrorStateTypeId, "Flow rate of heating circuit"); - break; - - case ModbusRegisterX2::StoerungDurchflussmengeSolekreis: - if (value != 0) - thing->setStateValue(x2wpErrorStateTypeId, "Flow rate brine circuit"); - break; - - case ModbusRegisterX2::StoerungTeilnehmerNichtErreichbar: - if (value != 0) - thing->setStateValue(x2wpErrorStateTypeId, "Participant not available"); - break; - - case ModbusRegisterX2::StoerungTemperaturfuehlerAuszenluft: - if (value != 0) - thing->setStateValue(x2wpErrorStateTypeId, "Temperature sensor outside air"); - break; - - case ModbusRegisterX2::StoerungTemperaturfuehlerHeizkreisVorlauf: - if (value != 0) - thing->setStateValue(x2wpErrorStateTypeId, "Temperature sensor heating circuit flow"); - break; - - case ModbusRegisterX2::StoerungTemperaturfuehlerRaum: - if (value != 0) - thing->setStateValue(x2wpErrorStateTypeId, "Temperature sensor room"); - break; - - case ModbusRegisterX2::StoerungTemperaturfuehlerSolarkollektor: - if (value != 0) - thing->setStateValue(x2wpErrorStateTypeId, "Temperature sensor solar collector"); - break; - - case ModbusRegisterX2::StoerungTemperaturfuehlerSole: - if (value != 0) - thing->setStateValue(x2wpErrorStateTypeId, "Temperature sensor brine"); - break; - - case ModbusRegisterX2::StoerungTemperaturfuehlerSoleAuszenluft: - if (value != 0) - thing->setStateValue(x2wpErrorStateTypeId, "Temperature sensor brine outside air"); - break; - - case ModbusRegisterX2::StoerungWaermepumpeHochdruck: - if (value != 0) - thing->setStateValue(x2wpErrorStateTypeId, "Heat pump high pressure"); - break; - - case ModbusRegisterX2::StoerungWaermepumpeNiederdruck: - if (value != 0) - thing->setStateValue(x2wpErrorStateTypeId, "Heat pump low pressure"); - break; - - case ModbusRegisterX2::StoerungWertNichtZulaessig: - if (value != 0) - thing->setStateValue(x2wpErrorStateTypeId, "Value not allowed"); - break; - - case ModbusRegisterX2::StoerungZuluftventilator: - if (value != 0) - thing->setStateValue(x2wpErrorStateTypeId, "Supply air fan"); - 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: - break; - } - } else if (thing->thingClassId() == x2luThingClassId) { - - switch (reply->registerAddress()) { - case ModbusRegisterX2::Betriebsart: - if (value == VentilationMode::ManuellStufe0) { - thing->setStateValue(x2luVentilationModeStateTypeId, "Manual level 0"); - } else if (value == VentilationMode::ManuellStufe1) { - thing->setStateValue(x2luVentilationModeStateTypeId, "Manual level 1"); - } else if (value == VentilationMode::ManuellStufe2) { - thing->setStateValue(x2luVentilationModeStateTypeId, "Manual level 2"); - } else if (value == VentilationMode::ManuellStufe3) { - thing->setStateValue(x2luVentilationModeStateTypeId, "Manual level 3"); - } else if (value == VentilationMode::Automatikbetrieb) { - thing->setStateValue(x2luVentilationModeStateTypeId, "Automatic"); - } else if (value == VentilationMode::Party) { - thing->setStateValue(x2luVentilationModeStateTypeId, "Party"); - } - if (value == VentilationMode::ManuellStufe0) { - thing->setStateValue(x2luPowerStateTypeId, false); - } else { - thing->setStateValue(x2luPowerStateTypeId, true); - } - break; - case ModbusRegisterX2::AktiveLuefterstufe: - thing->setStateValue(x2luActiveVentilationLevelStateTypeId, value); - break; - case ModbusRegisterX2::CO2: - thing->setStateValue(x2luCo2StateTypeId, value); - break; - } + if (reply->result().length() != 8) { + return; } + + if (reply->registerAddress() != ModbusRegisterX2::LeistungKompressor) { + return; + } + + //LeistungKompressor = 4000, + float value = (static_cast(reply->result()[0])<<16 | reply->result()[1])/1000.00; + thing->setStateValue(x2wpPowerCompressorStateTypeId, value); + float totalPower = value; + + //LeistungRaumheizung = 4002 + value = (static_cast(reply->result()[2])<<16 | reply->result()[3])/1000.00; + thing->setStateValue(x2wpPowerRoomHeatingStateTypeId, value); + + //LeistungWarmwasser = 4004 + value = (static_cast(reply->result()[4])<<16 | reply->result()[5])/1000.00; + thing->setStateValue(x2wpPowerWaterHeatingStateTypeId, value); + + //LeistungLuftvorerwarrmung = 4006 + value = (static_cast(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); }); } -VentilationMode IntegrationPluginDrexelUndWeiss::getVentilationModeFromString(const QString &modeString) +void IntegrationPluginDrexelUndWeiss::readX2Energy(Thing *thing, ModbusRtuMaster *modbus, uint slaveAddress) { - if (modeString == "Manual level 0") { - return VentilationMode::ManuellStufe0; - } else if(modeString == "Manual level 1") { - return VentilationMode::ManuellStufe1; - } else if(modeString == "Manual level 2") { - return VentilationMode::ManuellStufe2; - }else if(modeString == "Manual level 3") { - return VentilationMode::ManuellStufe3; - } else if(modeString == "Automatic") { - return VentilationMode::Automatikbetrieb; - } else if(modeString == "Party") { - return VentilationMode::Party; - } else { - qCWarning(dcDrexelUndWeiss()) << "Unknown ventilation mode string" << modeString; - } - return VentilationMode::ManuellStufe0; + 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(reply->result()[0])<<16 | reply->result()[1])/1000.00; + thing->setStateValue(x2wpEnergyCompressorStateTypeId, value); + float totalEnergy = value; + + //EnergieRaumheizung = 4502 + value = (static_cast(reply->result()[2])<<16 | reply->result()[3])/1000.00; + thing->setStateValue(x2wpEnergyRoomHeatingStateTypeId, value); + + //EnergieWarmwasser = 4504 + value = (static_cast(reply->result()[4])<<16 | reply->result()[5])/1000.00; + thing->setStateValue(x2wpEnergyWaterHeatingStateTypeId, value); + + //EnergieLuftvorerwarrmung = 4506 + value = (static_cast(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, this, [reply, thing, this] { + if (reply->error() != ModbusRtuReply::Error::NoError) { + qCWarning(dcDrexelUndWeiss()) << "Modbus error" << reply->errorString(); + thing->setStateValue(m_connectedStateTypeIds.value(thing->thingClassId()), false); + return; + } + thing->setStateValue(m_connectedStateTypeIds.value(thing->thingClassId()), true); + if (reply->result().length() != 2) { + return; + } + uint32_t value = (static_cast(reply->result()[0])<<16 | reply->result()[1]); -void IntegrationPluginDrexelUndWeiss::onPluginConfigurationChanged(const ParamTypeId ¶mTypeId, const QVariant &value) -{ - // Check refresh schedule - if (paramTypeId == drexelUndWeissPluginUpdateIntervalParamTypeId) { - if (m_refreshTimer) { - int refreshTime = value.toInt(); - m_refreshTimer->stop(); - m_refreshTimer->startTimer(refreshTime); + if (thing->thingClassId() == x2wpThingClassId) { + switch (reply->registerAddress()) { + case ModbusRegisterX2::Waermepumpe: + thing->setStateValue(x2wpPowerStateTypeId, value); + break; + + case ModbusRegisterX2::RaumSoll: + thing->setStateValue(x2wpTargetTemperatureStateTypeId, value/1000.00); + break; + + case ModbusRegisterX2::Raum: + thing->setStateValue(x2wpTemperatureStateTypeId, value/1000.00); + break; + + case ModbusRegisterX2::TemperaturWarmwasserspeicherUnten: + thing->setStateValue(x2wpWaterTemperatureStateTypeId, value/1000.00); + break; + case ModbusRegisterX2::BrauchwasserSolltermperatur: + thing->setStateValue(x2wpTargetWaterTemperatureStateTypeId, value/1000.00); + break; + case ModbusRegisterX2::Auszenluft: + thing->setStateValue(x2wpOutsideAirTemperatureStateTypeId, value/1000.00); + break; + + case ModbusRegisterX2::Summenstoerung: + if (value != 0) { + //get actual error + } else { + thing->setStateValue(x2wpErrorStateTypeId, "No error"); + } + break; + + case ModbusRegisterX2::StoerungAbluftventilator: + if (value != 0) + thing->setStateValue(x2wpErrorStateTypeId, "Exhaust fan"); + break; + + case ModbusRegisterX2::StoerungBoilerfuehlerElektroheizstab: + if (value != 0) + thing->setStateValue(x2wpErrorStateTypeId, "Boiler sensor electric heating element"); + break; + + case ModbusRegisterX2::StoerungBoilerfuehlerSolar: + if (value != 0) + thing->setStateValue(x2wpErrorStateTypeId, "Boiler sensor solar"); + break; + + case ModbusRegisterX2::StoerungBoilerfuehlerWaermepumpe: + if (value != 0) + thing->setStateValue(x2wpErrorStateTypeId, "Boiler sensor heat pump"); + break; + + case ModbusRegisterX2::StoerungBoileruebertemperatur: + if (value != 0) + thing->setStateValue(x2wpErrorStateTypeId, "Boiler overtemperature"); + break; + + case ModbusRegisterX2::StoerungCO2Sensor: + if (value != 0) + thing->setStateValue(x2wpErrorStateTypeId, "CO2-Sensor"); + break; + + case ModbusRegisterX2::StoerungDruckverlustAbluftZuGrosz: + if (value != 0) + thing->setStateValue(x2wpErrorStateTypeId, "Pressure loss exhaust air too big"); + break; + + case ModbusRegisterX2::StoerungDruckverlustZuluftZuGrosz: + if (value != 0) + thing->setStateValue(x2wpErrorStateTypeId, "Pressure loss supply air too large"); + break; + + case ModbusRegisterX2::StoerungDurchflussmengeHeizgkreis: + if (value != 0) + thing->setStateValue(x2wpErrorStateTypeId, "Flow rate of heating circuit"); + break; + + case ModbusRegisterX2::StoerungDurchflussmengeSolekreis: + if (value != 0) + thing->setStateValue(x2wpErrorStateTypeId, "Flow rate brine circuit"); + break; + + case ModbusRegisterX2::StoerungTeilnehmerNichtErreichbar: + if (value != 0) + thing->setStateValue(x2wpErrorStateTypeId, "Participant not available"); + break; + + case ModbusRegisterX2::StoerungTemperaturfuehlerAuszenluft: + if (value != 0) + thing->setStateValue(x2wpErrorStateTypeId, "Temperature sensor outside air"); + break; + + case ModbusRegisterX2::StoerungTemperaturfuehlerHeizkreisVorlauf: + if (value != 0) + thing->setStateValue(x2wpErrorStateTypeId, "Temperature sensor heating circuit flow"); + break; + + case ModbusRegisterX2::StoerungTemperaturfuehlerRaum: + if (value != 0) + thing->setStateValue(x2wpErrorStateTypeId, "Temperature sensor room"); + break; + + case ModbusRegisterX2::StoerungTemperaturfuehlerSolarkollektor: + if (value != 0) + thing->setStateValue(x2wpErrorStateTypeId, "Temperature sensor solar collector"); + break; + + case ModbusRegisterX2::StoerungTemperaturfuehlerSole: + if (value != 0) + thing->setStateValue(x2wpErrorStateTypeId, "Temperature sensor brine"); + break; + + case ModbusRegisterX2::StoerungTemperaturfuehlerSoleAuszenluft: + if (value != 0) + thing->setStateValue(x2wpErrorStateTypeId, "Temperature sensor brine outside air"); + break; + + case ModbusRegisterX2::StoerungWaermepumpeHochdruck: + if (value != 0) + thing->setStateValue(x2wpErrorStateTypeId, "Heat pump high pressure"); + break; + + case ModbusRegisterX2::StoerungWaermepumpeNiederdruck: + if (value != 0) + thing->setStateValue(x2wpErrorStateTypeId, "Heat pump low pressure"); + break; + + case ModbusRegisterX2::StoerungWertNichtZulaessig: + if (value != 0) + thing->setStateValue(x2wpErrorStateTypeId, "Value not allowed"); + break; + + case ModbusRegisterX2::StoerungZuluftventilator: + if (value != 0) + thing->setStateValue(x2wpErrorStateTypeId, "Supply air fan"); + break; + + default: + break; + } + } else if (thing->thingClassId() == x2luThingClassId) { + + switch (reply->registerAddress()) { + case ModbusRegisterX2::Betriebsart: + if (value == VentilationMode::ManuellStufe0) { + thing->setStateValue(x2luVentilationModeStateTypeId, "Manual level 0"); + } else if (value == VentilationMode::ManuellStufe1) { + thing->setStateValue(x2luVentilationModeStateTypeId, "Manual level 1"); + } else if (value == VentilationMode::ManuellStufe2) { + thing->setStateValue(x2luVentilationModeStateTypeId, "Manual level 2"); + } else if (value == VentilationMode::ManuellStufe3) { + thing->setStateValue(x2luVentilationModeStateTypeId, "Manual level 3"); + } else if (value == VentilationMode::Automatikbetrieb) { + thing->setStateValue(x2luVentilationModeStateTypeId, "Automatic"); + } else if (value == VentilationMode::Party) { + thing->setStateValue(x2luVentilationModeStateTypeId, "Party"); + } + if (value == VentilationMode::ManuellStufe0) { + thing->setStateValue(x2luPowerStateTypeId, false); + } else { + thing->setStateValue(x2luPowerStateTypeId, true); + } + break; + case ModbusRegisterX2::AktiveLuefterstufe: + thing->setStateValue(x2luActiveVentilationLevelStateTypeId, value); + break; + case ModbusRegisterX2::CO2: + thing->setStateValue(x2luCo2StateTypeId, value); + break; + } + } + }); + } + + VentilationMode IntegrationPluginDrexelUndWeiss::getVentilationModeFromString(const QString &modeString) + { + if (modeString == "Manual level 0") { + return VentilationMode::ManuellStufe0; + } else if(modeString == "Manual level 1") { + return VentilationMode::ManuellStufe1; + } else if(modeString == "Manual level 2") { + return VentilationMode::ManuellStufe2; + }else if(modeString == "Manual level 3") { + return VentilationMode::ManuellStufe3; + } else if(modeString == "Automatic") { + return VentilationMode::Automatikbetrieb; + } else if(modeString == "Party") { + return VentilationMode::Party; + } else { + qCWarning(dcDrexelUndWeiss()) << "Unknown ventilation mode string" << modeString; + } + return VentilationMode::ManuellStufe0; + } + + + void IntegrationPluginDrexelUndWeiss::onPluginConfigurationChanged(const ParamTypeId ¶mTypeId, const QVariant &value) + { + // Check refresh schedule + if (paramTypeId == drexelUndWeissPluginUpdateIntervalParamTypeId) { + if (m_refreshTimer) { + int refreshTime = value.toInt(); + m_refreshTimer->stop(); + m_refreshTimer->startTimer(refreshTime); + } } } -} -void IntegrationPluginDrexelUndWeiss::onConnectionStateChanged(bool status) -{ - ModbusRtuMaster *modbusRtuMaster = static_cast(sender()); - Thing *thing = m_modbusRtuMasters.key(modbusRtuMaster); - if (!thing) + void IntegrationPluginDrexelUndWeiss::onConnectionStateChanged(bool status) + { + ModbusRtuMaster *modbusRtuMaster = static_cast(sender()); + Thing *thing = m_modbusRtuMasters.key(modbusRtuMaster); + if (!thing) return; - thing->setStateValue(m_connectedStateTypeIds.value(thing->thingClassId()), status); -} + thing->setStateValue(m_connectedStateTypeIds.value(thing->thingClassId()), status); + } diff --git a/drexelundweiss/integrationplugindrexelundweiss.h b/drexelundweiss/integrationplugindrexelundweiss.h index a93d0ed..a077bd3 100644 --- a/drexelundweiss/integrationplugindrexelundweiss.h +++ b/drexelundweiss/integrationplugindrexelundweiss.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2021, nymea GmbH +* Copyright 2013 - 2023, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -71,6 +71,9 @@ private: VentilationMode getVentilationModeFromString(const QString &modeString); + void readX2Energy(Thing *thing, ModbusRtuMaster *modbus, uint slaveAddress); + void readX2Power(Thing *thing, ModbusRtuMaster *modbus, uint slaveAddress); + private slots: void onRefreshTimer(); void onPluginConfigurationChanged(const ParamTypeId ¶mTypeId, const QVariant &value); diff --git a/drexelundweiss/integrationplugindrexelundweiss.json b/drexelundweiss/integrationplugindrexelundweiss.json index ced216c..3ce5586 100644 --- a/drexelundweiss/integrationplugindrexelundweiss.json +++ b/drexelundweiss/integrationplugindrexelundweiss.json @@ -114,7 +114,7 @@ "displayName": "X2 WP", "id": "e548f962-92db-4110-8279-10fbcde35f93", "createMethods": ["discovery"], - "interfaces": ["thermostat", "connectable"], + "interfaces": ["thermostat", "smartmeterconsumer", "connectable"], "discoveryParamTypes": [ { "id": "d4923c90-22c8-477e-a37a-341858e59dcb", @@ -152,6 +152,7 @@ "type": "bool", "defaultValue": false }, + { "id": "f2ce8389-c33f-4f10-8484-f2e993841762", "name": "power", @@ -268,6 +269,15 @@ "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", "name": "powerCompressor", @@ -304,6 +314,15 @@ "unit": "Watt", "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", "name": "energyCompressor", diff --git a/drexelundweiss/modbusregisterdefinition.h b/drexelundweiss/modbusregisterdefinition.h index eac63af..86b3fca 100644 --- a/drexelundweiss/modbusregisterdefinition.h +++ b/drexelundweiss/modbusregisterdefinition.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2021, nymea GmbH +* Copyright 2013 - 2023, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. From 4d3f24d2030fb3d1f0467b388291aa0962671808 Mon Sep 17 00:00:00 2001 From: trinnes Date: Fri, 27 Jan 2023 20:16:33 +0100 Subject: [PATCH 2/3] X2 only accepts read requests 2 registers long --- .../integrationplugindrexelundweiss.cpp | 453 ++++++++---------- 1 file changed, 210 insertions(+), 243 deletions(-) diff --git a/drexelundweiss/integrationplugindrexelundweiss.cpp b/drexelundweiss/integrationplugindrexelundweiss.cpp index 6fc020b..91a77f2 100644 --- a/drexelundweiss/integrationplugindrexelundweiss.cpp +++ b/drexelundweiss/integrationplugindrexelundweiss.cpp @@ -315,317 +315,284 @@ void IntegrationPluginDrexelUndWeiss::updateStates(Thing *thing) readHoldingRegister(thing, modbus, slaveAddress, ModbusRegisterX2::BrauchwasserSolltermperatur); readHoldingRegister(thing, modbus, slaveAddress, ModbusRegisterX2::Auszenluft); readHoldingRegister(thing, modbus, slaveAddress, ModbusRegisterX2::Summenstoerung); - readX2Power(thing, modbus, slaveAddress); - readX2Energy(thing, modbus, slaveAddress); + readHoldingRegister(thing, modbus, slaveAddress, ModbusRegisterX2::LeistungKompressor); + readHoldingRegister(thing, modbus, slaveAddress, ModbusRegisterX2::LeistungWarmwasser); + 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::readX2Power(Thing *thing, ModbusRtuMaster *modbus, uint slaveAddress) + +void IntegrationPluginDrexelUndWeiss::readHoldingRegister(Thing *thing, ModbusRtuMaster *modbus, uint slaveAddress, uint modbusRegister) { - ModbusRtuReply *reply = modbus->readHoldingRegister(slaveAddress, ModbusRegisterX2::LeistungKompressor, 8); + ModbusRtuReply *reply = modbus->readHoldingRegister(slaveAddress, modbusRegister, 2); // min 2 registers must be read connect(reply, &ModbusRtuReply::finished, reply, &ModbusRtuReply::deleteLater); - connect(reply, &ModbusRtuReply::finished, this, [reply, thing] { + connect(reply, &ModbusRtuReply::finished, this, [reply, thing, this] { if (reply->error() != ModbusRtuReply::Error::NoError) { qCWarning(dcDrexelUndWeiss()) << "Modbus error" << reply->errorString(); + thing->setStateValue(m_connectedStateTypeIds.value(thing->thingClassId()), false); return; } - if (reply->result().length() != 8) { + thing->setStateValue(m_connectedStateTypeIds.value(thing->thingClassId()), true); + if (reply->result().length() != 2) { return; } + uint32_t value = (static_cast(reply->result()[0])<<16 | reply->result()[1]); - if (reply->registerAddress() != ModbusRegisterX2::LeistungKompressor) { - return; - } + if (thing->thingClassId() == x2wpThingClassId) { + switch (reply->registerAddress()) { + case ModbusRegisterX2::Waermepumpe: + thing->setStateValue(x2wpPowerStateTypeId, value); + break; - //LeistungKompressor = 4000, - float value = (static_cast(reply->result()[0])<<16 | reply->result()[1])/1000.00; - thing->setStateValue(x2wpPowerCompressorStateTypeId, value); - float totalPower = value; + case ModbusRegisterX2::RaumSoll: + thing->setStateValue(x2wpTargetTemperatureStateTypeId, value/1000.00); + break; - //LeistungRaumheizung = 4002 - value = (static_cast(reply->result()[2])<<16 | reply->result()[3])/1000.00; - thing->setStateValue(x2wpPowerRoomHeatingStateTypeId, value); + case ModbusRegisterX2::Raum: + thing->setStateValue(x2wpTemperatureStateTypeId, value/1000.00); + break; - //LeistungWarmwasser = 4004 - value = (static_cast(reply->result()[4])<<16 | reply->result()[5])/1000.00; - thing->setStateValue(x2wpPowerWaterHeatingStateTypeId, value); + case ModbusRegisterX2::TemperaturWarmwasserspeicherUnten: + thing->setStateValue(x2wpWaterTemperatureStateTypeId, value/1000.00); + break; + case ModbusRegisterX2::BrauchwasserSolltermperatur: + thing->setStateValue(x2wpTargetWaterTemperatureStateTypeId, value/1000.00); + break; + case ModbusRegisterX2::Auszenluft: + thing->setStateValue(x2wpOutsideAirTemperatureStateTypeId, value/1000.00); + break; - //LeistungLuftvorerwarrmung = 4006 - value = (static_cast(reply->result()[6])<<16 | reply->result()[7])/1000.00; - thing->setStateValue(x2wpPowerAirPreheatingStateTypeId, value); + case ModbusRegisterX2::Summenstoerung: + if (value != 0) { + //get actual error + } else { + thing->setStateValue(x2wpErrorStateTypeId, "No error"); + } + break; - 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(reply->result()[0])<<16 | reply->result()[1])/1000.00; - thing->setStateValue(x2wpEnergyCompressorStateTypeId, value); - float totalEnergy = value; - - //EnergieRaumheizung = 4502 - value = (static_cast(reply->result()[2])<<16 | reply->result()[3])/1000.00; - thing->setStateValue(x2wpEnergyRoomHeatingStateTypeId, value); - - //EnergieWarmwasser = 4504 - value = (static_cast(reply->result()[4])<<16 | reply->result()[5])/1000.00; - thing->setStateValue(x2wpEnergyWaterHeatingStateTypeId, value); - - //EnergieLuftvorerwarrmung = 4506 - value = (static_cast(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, this, [reply, thing, this] { - if (reply->error() != ModbusRtuReply::Error::NoError) { - qCWarning(dcDrexelUndWeiss()) << "Modbus error" << reply->errorString(); - thing->setStateValue(m_connectedStateTypeIds.value(thing->thingClassId()), false); - return; - } - thing->setStateValue(m_connectedStateTypeIds.value(thing->thingClassId()), true); - if (reply->result().length() != 2) { - return; - } - uint32_t value = (static_cast(reply->result()[0])<<16 | reply->result()[1]); - - if (thing->thingClassId() == x2wpThingClassId) { - switch (reply->registerAddress()) { - case ModbusRegisterX2::Waermepumpe: - thing->setStateValue(x2wpPowerStateTypeId, value); - break; - - case ModbusRegisterX2::RaumSoll: - thing->setStateValue(x2wpTargetTemperatureStateTypeId, value/1000.00); - break; - - case ModbusRegisterX2::Raum: - thing->setStateValue(x2wpTemperatureStateTypeId, value/1000.00); - break; - - case ModbusRegisterX2::TemperaturWarmwasserspeicherUnten: - thing->setStateValue(x2wpWaterTemperatureStateTypeId, value/1000.00); - break; - case ModbusRegisterX2::BrauchwasserSolltermperatur: - thing->setStateValue(x2wpTargetWaterTemperatureStateTypeId, value/1000.00); - break; - case ModbusRegisterX2::Auszenluft: - thing->setStateValue(x2wpOutsideAirTemperatureStateTypeId, value/1000.00); - break; - - case ModbusRegisterX2::Summenstoerung: - if (value != 0) { - //get actual error - } else { - thing->setStateValue(x2wpErrorStateTypeId, "No error"); - } - break; - - case ModbusRegisterX2::StoerungAbluftventilator: - if (value != 0) + case ModbusRegisterX2::StoerungAbluftventilator: + if (value != 0) thing->setStateValue(x2wpErrorStateTypeId, "Exhaust fan"); - break; + break; - case ModbusRegisterX2::StoerungBoilerfuehlerElektroheizstab: - if (value != 0) + case ModbusRegisterX2::StoerungBoilerfuehlerElektroheizstab: + if (value != 0) thing->setStateValue(x2wpErrorStateTypeId, "Boiler sensor electric heating element"); - break; + break; - case ModbusRegisterX2::StoerungBoilerfuehlerSolar: - if (value != 0) + case ModbusRegisterX2::StoerungBoilerfuehlerSolar: + if (value != 0) thing->setStateValue(x2wpErrorStateTypeId, "Boiler sensor solar"); - break; + break; - case ModbusRegisterX2::StoerungBoilerfuehlerWaermepumpe: - if (value != 0) + case ModbusRegisterX2::StoerungBoilerfuehlerWaermepumpe: + if (value != 0) thing->setStateValue(x2wpErrorStateTypeId, "Boiler sensor heat pump"); - break; + break; - case ModbusRegisterX2::StoerungBoileruebertemperatur: - if (value != 0) + case ModbusRegisterX2::StoerungBoileruebertemperatur: + if (value != 0) thing->setStateValue(x2wpErrorStateTypeId, "Boiler overtemperature"); - break; + break; - case ModbusRegisterX2::StoerungCO2Sensor: - if (value != 0) + case ModbusRegisterX2::StoerungCO2Sensor: + if (value != 0) thing->setStateValue(x2wpErrorStateTypeId, "CO2-Sensor"); - break; + break; - case ModbusRegisterX2::StoerungDruckverlustAbluftZuGrosz: - if (value != 0) + case ModbusRegisterX2::StoerungDruckverlustAbluftZuGrosz: + if (value != 0) thing->setStateValue(x2wpErrorStateTypeId, "Pressure loss exhaust air too big"); - break; + break; - case ModbusRegisterX2::StoerungDruckverlustZuluftZuGrosz: - if (value != 0) + case ModbusRegisterX2::StoerungDruckverlustZuluftZuGrosz: + if (value != 0) thing->setStateValue(x2wpErrorStateTypeId, "Pressure loss supply air too large"); - break; + break; - case ModbusRegisterX2::StoerungDurchflussmengeHeizgkreis: - if (value != 0) + case ModbusRegisterX2::StoerungDurchflussmengeHeizgkreis: + if (value != 0) thing->setStateValue(x2wpErrorStateTypeId, "Flow rate of heating circuit"); - break; + break; - case ModbusRegisterX2::StoerungDurchflussmengeSolekreis: - if (value != 0) + case ModbusRegisterX2::StoerungDurchflussmengeSolekreis: + if (value != 0) thing->setStateValue(x2wpErrorStateTypeId, "Flow rate brine circuit"); - break; + break; - case ModbusRegisterX2::StoerungTeilnehmerNichtErreichbar: - if (value != 0) + case ModbusRegisterX2::StoerungTeilnehmerNichtErreichbar: + if (value != 0) thing->setStateValue(x2wpErrorStateTypeId, "Participant not available"); - break; + break; - case ModbusRegisterX2::StoerungTemperaturfuehlerAuszenluft: - if (value != 0) + case ModbusRegisterX2::StoerungTemperaturfuehlerAuszenluft: + if (value != 0) thing->setStateValue(x2wpErrorStateTypeId, "Temperature sensor outside air"); - break; + break; - case ModbusRegisterX2::StoerungTemperaturfuehlerHeizkreisVorlauf: - if (value != 0) + case ModbusRegisterX2::StoerungTemperaturfuehlerHeizkreisVorlauf: + if (value != 0) thing->setStateValue(x2wpErrorStateTypeId, "Temperature sensor heating circuit flow"); - break; + break; - case ModbusRegisterX2::StoerungTemperaturfuehlerRaum: - if (value != 0) + case ModbusRegisterX2::StoerungTemperaturfuehlerRaum: + if (value != 0) thing->setStateValue(x2wpErrorStateTypeId, "Temperature sensor room"); - break; + break; - case ModbusRegisterX2::StoerungTemperaturfuehlerSolarkollektor: - if (value != 0) + case ModbusRegisterX2::StoerungTemperaturfuehlerSolarkollektor: + if (value != 0) thing->setStateValue(x2wpErrorStateTypeId, "Temperature sensor solar collector"); - break; + break; - case ModbusRegisterX2::StoerungTemperaturfuehlerSole: - if (value != 0) + case ModbusRegisterX2::StoerungTemperaturfuehlerSole: + if (value != 0) thing->setStateValue(x2wpErrorStateTypeId, "Temperature sensor brine"); - break; + break; - case ModbusRegisterX2::StoerungTemperaturfuehlerSoleAuszenluft: - if (value != 0) + case ModbusRegisterX2::StoerungTemperaturfuehlerSoleAuszenluft: + if (value != 0) thing->setStateValue(x2wpErrorStateTypeId, "Temperature sensor brine outside air"); - break; + break; - case ModbusRegisterX2::StoerungWaermepumpeHochdruck: - if (value != 0) + case ModbusRegisterX2::StoerungWaermepumpeHochdruck: + if (value != 0) thing->setStateValue(x2wpErrorStateTypeId, "Heat pump high pressure"); - break; + break; - case ModbusRegisterX2::StoerungWaermepumpeNiederdruck: - if (value != 0) + case ModbusRegisterX2::StoerungWaermepumpeNiederdruck: + if (value != 0) thing->setStateValue(x2wpErrorStateTypeId, "Heat pump low pressure"); - break; + break; - case ModbusRegisterX2::StoerungWertNichtZulaessig: - if (value != 0) + case ModbusRegisterX2::StoerungWertNichtZulaessig: + if (value != 0) thing->setStateValue(x2wpErrorStateTypeId, "Value not allowed"); - break; + break; - case ModbusRegisterX2::StoerungZuluftventilator: - if (value != 0) + case ModbusRegisterX2::StoerungZuluftventilator: + if (value != 0) thing->setStateValue(x2wpErrorStateTypeId, "Supply air fan"); - break; + break; - default: - break; - } - } else if (thing->thingClassId() == x2luThingClassId) { + case ModbusRegisterX2::LeistungKompressor: + thing->setStateValue(x2wpPowerCompressorStateTypeId, value/1000.00); + break; - switch (reply->registerAddress()) { - case ModbusRegisterX2::Betriebsart: - if (value == VentilationMode::ManuellStufe0) { - thing->setStateValue(x2luVentilationModeStateTypeId, "Manual level 0"); - } else if (value == VentilationMode::ManuellStufe1) { - thing->setStateValue(x2luVentilationModeStateTypeId, "Manual level 1"); - } else if (value == VentilationMode::ManuellStufe2) { - thing->setStateValue(x2luVentilationModeStateTypeId, "Manual level 2"); - } else if (value == VentilationMode::ManuellStufe3) { - thing->setStateValue(x2luVentilationModeStateTypeId, "Manual level 3"); - } else if (value == VentilationMode::Automatikbetrieb) { - thing->setStateValue(x2luVentilationModeStateTypeId, "Automatic"); - } else if (value == VentilationMode::Party) { - thing->setStateValue(x2luVentilationModeStateTypeId, "Party"); - } - if (value == VentilationMode::ManuellStufe0) { - thing->setStateValue(x2luPowerStateTypeId, false); - } else { - thing->setStateValue(x2luPowerStateTypeId, true); - } - break; - case ModbusRegisterX2::AktiveLuefterstufe: - thing->setStateValue(x2luActiveVentilationLevelStateTypeId, value); - break; - case ModbusRegisterX2::CO2: - thing->setStateValue(x2luCo2StateTypeId, value); - break; - } + case ModbusRegisterX2::LeistungWarmwasser: + thing->setStateValue(x2wpPowerWaterHeatingStateTypeId, value/1000.00); + break; + + case ModbusRegisterX2::LeistungRaumheizung: + thing->setStateValue(x2wpPowerRoomHeatingStateTypeId, value/1000.00); + break; + + case ModbusRegisterX2::LeistungLuftvorwaermung: { + float power = value/1000.00; + thing->setStateValue(x2wpPowerAirPreheatingStateTypeId, power); + power += thing->stateValue(x2wpPowerCompressorStateTypeId).toFloat(); + thing->setStateValue(x2wpCurrentPowerStateTypeId, power); + break; } - }); - } + case ModbusRegisterX2::EnergieKompressor: + thing->setStateValue(x2wpEnergyCompressorStateTypeId, value/1000.00); + break; - VentilationMode IntegrationPluginDrexelUndWeiss::getVentilationModeFromString(const QString &modeString) - { - if (modeString == "Manual level 0") { - return VentilationMode::ManuellStufe0; - } else if(modeString == "Manual level 1") { - return VentilationMode::ManuellStufe1; - } else if(modeString == "Manual level 2") { - return VentilationMode::ManuellStufe2; - }else if(modeString == "Manual level 3") { - return VentilationMode::ManuellStufe3; - } else if(modeString == "Automatic") { - return VentilationMode::Automatikbetrieb; - } else if(modeString == "Party") { - return VentilationMode::Party; - } else { - qCWarning(dcDrexelUndWeiss()) << "Unknown ventilation mode string" << modeString; + case ModbusRegisterX2::EnergieWarmwasser: + thing->setStateValue(x2wpEnergyWaterHeatingStateTypeId, value/1000.00); + break; + + case ModbusRegisterX2::EnergieRaumheizung: + thing->setStateValue(x2wpEnergyRoomHeatingStateTypeId, value/1000.00); + break; + + case ModbusRegisterX2::EnergieLuftvorerwarrmung: { + float energy = value/1000.00; + thing->setStateValue(x2wpEnergyAirPreheatingStateTypeId, energy); + energy += thing->stateValue(x2wpEnergyCompressorStateTypeId).toFloat(); + thing->setStateValue(x2wpTotalEnergyConsumedStateTypeId, energy); + break; + } + default: + break; + } + } else if (thing->thingClassId() == x2luThingClassId) { + + switch (reply->registerAddress()) { + case ModbusRegisterX2::Betriebsart: + if (value == VentilationMode::ManuellStufe0) { + thing->setStateValue(x2luVentilationModeStateTypeId, "Manual level 0"); + } else if (value == VentilationMode::ManuellStufe1) { + thing->setStateValue(x2luVentilationModeStateTypeId, "Manual level 1"); + } else if (value == VentilationMode::ManuellStufe2) { + thing->setStateValue(x2luVentilationModeStateTypeId, "Manual level 2"); + } else if (value == VentilationMode::ManuellStufe3) { + thing->setStateValue(x2luVentilationModeStateTypeId, "Manual level 3"); + } else if (value == VentilationMode::Automatikbetrieb) { + thing->setStateValue(x2luVentilationModeStateTypeId, "Automatic"); + } else if (value == VentilationMode::Party) { + thing->setStateValue(x2luVentilationModeStateTypeId, "Party"); + } + if (value == VentilationMode::ManuellStufe0) { + thing->setStateValue(x2luPowerStateTypeId, false); + } else { + thing->setStateValue(x2luPowerStateTypeId, true); + } + break; + case ModbusRegisterX2::AktiveLuefterstufe: + thing->setStateValue(x2luActiveVentilationLevelStateTypeId, value); + break; + case ModbusRegisterX2::CO2: + thing->setStateValue(x2luCo2StateTypeId, value); + break; + } } + }); +} + +VentilationMode IntegrationPluginDrexelUndWeiss::getVentilationModeFromString(const QString &modeString) +{ + if (modeString == "Manual level 0") { return VentilationMode::ManuellStufe0; + } else if(modeString == "Manual level 1") { + return VentilationMode::ManuellStufe1; + } else if(modeString == "Manual level 2") { + return VentilationMode::ManuellStufe2; + }else if(modeString == "Manual level 3") { + return VentilationMode::ManuellStufe3; + } else if(modeString == "Automatic") { + return VentilationMode::Automatikbetrieb; + } else if(modeString == "Party") { + return VentilationMode::Party; + } else { + qCWarning(dcDrexelUndWeiss()) << "Unknown ventilation mode string" << modeString; } + return VentilationMode::ManuellStufe0; +} - void IntegrationPluginDrexelUndWeiss::onPluginConfigurationChanged(const ParamTypeId ¶mTypeId, const QVariant &value) - { - // Check refresh schedule - if (paramTypeId == drexelUndWeissPluginUpdateIntervalParamTypeId) { - if (m_refreshTimer) { - int refreshTime = value.toInt(); - m_refreshTimer->stop(); - m_refreshTimer->startTimer(refreshTime); - } +void IntegrationPluginDrexelUndWeiss::onPluginConfigurationChanged(const ParamTypeId ¶mTypeId, const QVariant &value) +{ + // Check refresh schedule + if (paramTypeId == drexelUndWeissPluginUpdateIntervalParamTypeId) { + if (m_refreshTimer) { + int refreshTime = value.toInt(); + m_refreshTimer->stop(); + m_refreshTimer->startTimer(refreshTime); } } +} - void IntegrationPluginDrexelUndWeiss::onConnectionStateChanged(bool status) - { - ModbusRtuMaster *modbusRtuMaster = static_cast(sender()); - Thing *thing = m_modbusRtuMasters.key(modbusRtuMaster); - if (!thing) +void IntegrationPluginDrexelUndWeiss::onConnectionStateChanged(bool status) +{ + ModbusRtuMaster *modbusRtuMaster = static_cast(sender()); + Thing *thing = m_modbusRtuMasters.key(modbusRtuMaster); + if (!thing) return; - thing->setStateValue(m_connectedStateTypeIds.value(thing->thingClassId()), status); - } + thing->setStateValue(m_connectedStateTypeIds.value(thing->thingClassId()), status); +} From 0cc19f085ad4d21630fbf099d48d063020348342 Mon Sep 17 00:00:00 2001 From: trinnes Date: Sat, 28 Jan 2023 13:12:17 +0100 Subject: [PATCH 3/3] Improved wording and german translation --- .../integrationplugindrexelundweiss.cpp | 12 +- .../integrationplugindrexelundweiss.json | 2 +- ...68d78ce6-82d0-4a5b-b901-7c3b843ef63c-de.ts | 245 ++++-------------- ...78ce6-82d0-4a5b-b901-7c3b843ef63c-en_US.ts | 235 +++-------------- 4 files changed, 98 insertions(+), 396 deletions(-) diff --git a/drexelundweiss/integrationplugindrexelundweiss.cpp b/drexelundweiss/integrationplugindrexelundweiss.cpp index 91a77f2..598bc71 100644 --- a/drexelundweiss/integrationplugindrexelundweiss.cpp +++ b/drexelundweiss/integrationplugindrexelundweiss.cpp @@ -73,13 +73,13 @@ void IntegrationPluginDrexelUndWeiss::discoverThings(ThingDiscoveryInfo *info) qCDebug(dcDrexelUndWeiss()) << "Discover things"; if (hardwareManager()->modbusRtuResource()->modbusRtuMasters().isEmpty()) { - info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("No Modbus RTU interface available.")); + info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("No Modbus RTU interface is available.")); return; } uint slaveAddress = info->params().paramValue(m_discoverySlaveAddressParamTypeIds.value(info->thingClassId())).toUInt(); if (slaveAddress > 254 || slaveAddress == 0) { - info->finish(Thing::ThingErrorInvalidParameter, QT_TR_NOOP("Modbus slave address must be between 1 and 254")); + info->finish(Thing::ThingErrorInvalidParameter, QT_TR_NOOP("The Modbus slave address must be between 1 and 254")); return; } Q_FOREACH(ModbusRtuMaster *modbusMaster, hardwareManager()->modbusRtuResource()->modbusRtuMasters()) { @@ -117,11 +117,11 @@ void IntegrationPluginDrexelUndWeiss::setupThing(ThingSetupInfo *info) uint slaveAddress = thing->paramValue(m_slaveIdParamTypeIds.value(thing->thingClassId())).toUInt(); if (!hardwareManager()->modbusRtuResource()->hasModbusRtuMaster(modbusMasterUuid)) { - return info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("Modbus RTU interface not available.")); + return info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("The Modbus RTU interface is not available.")); } ModbusRtuMaster *modbus = hardwareManager()->modbusRtuResource()->getModbusRtuMaster(modbusMasterUuid); if (!modbus->connected()) { - return info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("Modbus RTU interface is not connected.")); + return info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("The Modbus RTU interface is not connected.")); } ModbusRtuReply *reply = modbus->readHoldingRegister(slaveAddress, ModbusRegisterX2::Geraetetyp, 2); @@ -233,13 +233,13 @@ void IntegrationPluginDrexelUndWeiss::sendWriteRequest(ThingActionInfo *info, ui if (!modbus){ qCWarning(dcDrexelUndWeiss()) << "Modbus RTU interface available"; - info->finish(Thing::ThingErrorHardwareFailure, tr("Modbus RTU interface not available.")); + info->finish(Thing::ThingErrorHardwareFailure, tr("The Modbus RTU interface is not available.")); return; } if (!modbus->connected()) { qCWarning(dcDrexelUndWeiss()) << "Modbus RTU interface not connected"; - info->finish(Thing::ThingErrorHardwareFailure, tr("Modbus RTU interface not connected.")); + info->finish(Thing::ThingErrorHardwareFailure, tr("The Modbus RTU interface is not connected.")); return; } diff --git a/drexelundweiss/integrationplugindrexelundweiss.json b/drexelundweiss/integrationplugindrexelundweiss.json index 3ce5586..e5bd9b2 100644 --- a/drexelundweiss/integrationplugindrexelundweiss.json +++ b/drexelundweiss/integrationplugindrexelundweiss.json @@ -317,7 +317,7 @@ { "id": "812d931b-df7d-4e6a-a53a-da84535bfffa", "name": "totalEnergyConsumed", - "displayName": "Total energy", + "displayName": "Total energy consumed", "displayNameEvent": "Total energy changed", "type": "double", "unit": "KiloWattHour", diff --git a/drexelundweiss/translations/68d78ce6-82d0-4a5b-b901-7c3b843ef63c-de.ts b/drexelundweiss/translations/68d78ce6-82d0-4a5b-b901-7c3b843ef63c-de.ts index 58d34f0..accc428 100644 --- a/drexelundweiss/translations/68d78ce6-82d0-4a5b-b901-7c3b843ef63c-de.ts +++ b/drexelundweiss/translations/68d78ce6-82d0-4a5b-b901-7c3b843ef63c-de.ts @@ -5,21 +5,9 @@ DrexelUndWeiss CO2 - The name of the ParamType (ThingClass: x2lu, EventType: co2, ID: {0a6b44c8-e7af-4148-92ff-682ae717f3a8}) ----------- -The name of the StateType ({0a6b44c8-e7af-4148-92ff-682ae717f3a8}) of ThingClass x2lu + The name of the StateType ({0a6b44c8-e7af-4148-92ff-682ae717f3a8}) of ThingClass x2lu CO2 - - CO2 changed - The name of the EventType ({0a6b44c8-e7af-4148-92ff-682ae717f3a8}) of ThingClass x2lu - CO2 geändert - - - Change power - The name of the ActionType ({f2ce8389-c33f-4f10-8484-f2e993841762}) of ThingClass x2wp - Einschalten - Change room target temperature The name of the ActionType ({fb98754d-0fba-4163-9b74-3e5a07d71421}) of ThingClass x2wp @@ -44,170 +32,73 @@ The name of the plugin DrexelUndWeiss ({68d78ce6-82d0-4a5b-b901-7c3b843ef63c}) Energy air preheating - The name of the ParamType (ThingClass: x2wp, EventType: energyAirPreheating, ID: {0816ca6d-a178-4a2a-8183-c26a794fb0ca}) ----------- -The name of the StateType ({0816ca6d-a178-4a2a-8183-c26a794fb0ca}) of ThingClass x2wp + The name of the StateType ({0816ca6d-a178-4a2a-8183-c26a794fb0ca}) of ThingClass x2wp Energie Luftvorheizung - - Energy air preheating changed - The name of the EventType ({0816ca6d-a178-4a2a-8183-c26a794fb0ca}) of ThingClass x2wp - Energie Luftvorheizung geändert - Energy compressor - The name of the ParamType (ThingClass: x2wp, EventType: energyCompressor, ID: {b423657b-4e59-41cd-89a3-4f5cb1c3a271}) ----------- -The name of the StateType ({b423657b-4e59-41cd-89a3-4f5cb1c3a271}) of ThingClass x2wp + The name of the StateType ({b423657b-4e59-41cd-89a3-4f5cb1c3a271}) of ThingClass x2wp Energie Kompressor - - Energy compressor changed - The name of the EventType ({b423657b-4e59-41cd-89a3-4f5cb1c3a271}) of ThingClass x2wp - Energie Kompressor geändert - Energy room heating - The name of the ParamType (ThingClass: x2wp, EventType: energyRoomHeating, ID: {4495618e-5a43-46ac-9f76-32aae3f3e954}) ----------- -The name of the StateType ({4495618e-5a43-46ac-9f76-32aae3f3e954}) of ThingClass x2wp + The name of the StateType ({4495618e-5a43-46ac-9f76-32aae3f3e954}) of ThingClass x2wp Energie Raumheizung - - Energy room heating changed - The name of the EventType ({4495618e-5a43-46ac-9f76-32aae3f3e954}) of ThingClass x2wp - Energie Raumheizung geändert - Energy water heating - The name of the ParamType (ThingClass: x2wp, EventType: energyWaterHeating, ID: {cb189b75-3634-4674-a847-f29ca322d4be}) ----------- -The name of the StateType ({cb189b75-3634-4674-a847-f29ca322d4be}) of ThingClass x2wp + The name of the StateType ({cb189b75-3634-4674-a847-f29ca322d4be}) of ThingClass x2wp Energie Wasserheizung - - Energy water heating changed - The name of the EventType ({cb189b75-3634-4674-a847-f29ca322d4be}) of ThingClass x2wp - Energie Wasserheizung geändert - Error - The name of the ParamType (ThingClass: x2wp, EventType: error, ID: {8d6e52ef-992d-47ac-90a8-9dba95ab200e}) ----------- -The name of the StateType ({8d6e52ef-992d-47ac-90a8-9dba95ab200e}) of ThingClass x2wp + The name of the StateType ({8d6e52ef-992d-47ac-90a8-9dba95ab200e}) of ThingClass x2wp Fehler - - Error occured - The name of the EventType ({8d6e52ef-992d-47ac-90a8-9dba95ab200e}) of ThingClass x2wp - Fehler aufgetreten - Heat pump mode - The name of the ParamType (ThingClass: x2wp, EventType: heatPumpMode, ID: {5c125ddd-a0db-40fe-9998-2afea6c727f1}) ----------- -The name of the StateType ({5c125ddd-a0db-40fe-9998-2afea6c727f1}) of ThingClass x2wp + The name of the StateType ({5c125ddd-a0db-40fe-9998-2afea6c727f1}) of ThingClass x2wp Wärmepumpenmodus - - Heat pump mode changed - The name of the EventType ({5c125ddd-a0db-40fe-9998-2afea6c727f1}) of ThingClass x2wp - Wärmepumpenmodus geändert - Outside air temperature - The name of the ParamType (ThingClass: x2wp, EventType: outsideAirTemperature, ID: {32378843-5478-4b86-9c0e-ccbf978c02be}) ----------- -The name of the StateType ({32378843-5478-4b86-9c0e-ccbf978c02be}) of ThingClass x2wp + The name of the StateType ({32378843-5478-4b86-9c0e-ccbf978c02be}) of ThingClass x2wp Außenlufttemperatur - - Outside air temperature changed - The name of the EventType ({32378843-5478-4b86-9c0e-ccbf978c02be}) of ThingClass x2wp - Außenlufttemperatur geändert - Power - The name of the ParamType (ThingClass: x2wp, ActionType: power, ID: {f2ce8389-c33f-4f10-8484-f2e993841762}) ----------- -The name of the ParamType (ThingClass: x2wp, EventType: power, ID: {f2ce8389-c33f-4f10-8484-f2e993841762}) ----------- -The name of the StateType ({f2ce8389-c33f-4f10-8484-f2e993841762}) of ThingClass x2wp + The name of the StateType ({f2ce8389-c33f-4f10-8484-f2e993841762}) of ThingClass x2wp ---------- The name of the ParamType (ThingClass: x2lu, ActionType: power, ID: {c9df6349-2bf6-46cc-bce3-d4155836dbe5}) ---------- -The name of the ParamType (ThingClass: x2lu, EventType: power, ID: {c9df6349-2bf6-46cc-bce3-d4155836dbe5}) ----------- The name of the StateType ({c9df6349-2bf6-46cc-bce3-d4155836dbe5}) of ThingClass x2lu Eingeschalten - - Power changed - The name of the EventType ({f2ce8389-c33f-4f10-8484-f2e993841762}) of ThingClass x2wp ----------- -The name of the EventType ({c9df6349-2bf6-46cc-bce3-d4155836dbe5}) of ThingClass x2lu - Eingeschalten geändert - Power consumption air preheating - The name of the ParamType (ThingClass: x2wp, EventType: powerAirPreheating, ID: {59beeff5-89c1-4996-9e07-48d53d74684d}) ----------- -The name of the StateType ({59beeff5-89c1-4996-9e07-48d53d74684d}) of ThingClass x2wp + The name of the StateType ({59beeff5-89c1-4996-9e07-48d53d74684d}) of ThingClass x2wp Leistungsaufnahme Luftvorheizung - - Power consumption air preheating changed - The name of the EventType ({59beeff5-89c1-4996-9e07-48d53d74684d}) of ThingClass x2wp - Leistungsaufnahme Luftvorheizung geändert - Power consumption compressor - The name of the ParamType (ThingClass: x2wp, EventType: powerCompressor, ID: {7287943a-ea6d-4c92-abbd-f55f6c7ee9e5}) ----------- -The name of the StateType ({7287943a-ea6d-4c92-abbd-f55f6c7ee9e5}) of ThingClass x2wp + The name of the StateType ({7287943a-ea6d-4c92-abbd-f55f6c7ee9e5}) of ThingClass x2wp Leistungsaufnahme Kompressor - - Power consumption compressor changed - The name of the EventType ({7287943a-ea6d-4c92-abbd-f55f6c7ee9e5}) of ThingClass x2wp - Leistungsaufnahme Kompressor geändert - Power consumption room heating - The name of the ParamType (ThingClass: x2wp, EventType: powerRoomHeating, ID: {c4237da0-0ead-42b8-b192-6a681509dc90}) ----------- -The name of the StateType ({c4237da0-0ead-42b8-b192-6a681509dc90}) of ThingClass x2wp + The name of the StateType ({c4237da0-0ead-42b8-b192-6a681509dc90}) of ThingClass x2wp Leistungsaufnahme Raumheizung - - Power consumption room heating changed - The name of the EventType ({c4237da0-0ead-42b8-b192-6a681509dc90}) of ThingClass x2wp - Leistungsaufnahme Raumheizung geändert - Power consumption water heating - The name of the ParamType (ThingClass: x2wp, EventType: powerWaterHeating, ID: {21dfc736-f35c-469f-be57-afc1976d8328}) ----------- -The name of the StateType ({21dfc736-f35c-469f-be57-afc1976d8328}) of ThingClass x2wp + The name of the StateType ({21dfc736-f35c-469f-be57-afc1976d8328}) of ThingClass x2wp Leistungsaufnahme Wasserheizung - - Power consumption water heating changed - The name of the EventType ({21dfc736-f35c-469f-be57-afc1976d8328}) of ThingClass x2wp - Leistungsaufnahme Wasserheizung geändert - Room temperature - The name of the ParamType (ThingClass: x2wp, EventType: temperature, ID: {3ab2d609-1686-4fd7-84e3-580c8e0537d0}) ----------- -The name of the StateType ({3ab2d609-1686-4fd7-84e3-580c8e0537d0}) of ThingClass x2wp + The name of the StateType ({3ab2d609-1686-4fd7-84e3-580c8e0537d0}) of ThingClass x2wp Raumtemperatur - - Room temperature changed - The name of the EventType ({3ab2d609-1686-4fd7-84e3-580c8e0537d0}) of ThingClass x2wp - Raumtemperatur geändert - Slave address The name of the ParamType (ThingClass: x2wp, Type: discovery, ID: {d4923c90-22c8-477e-a37a-341858e59dcb}) @@ -223,30 +114,16 @@ The name of the ParamType (ThingClass: x2lu, Type: thing, ID: {28a72cb7-3cd0-470 Target room temperature The name of the ParamType (ThingClass: x2wp, ActionType: targetTemperature, ID: {fb98754d-0fba-4163-9b74-3e5a07d71421}) ---------- -The name of the ParamType (ThingClass: x2wp, EventType: targetTemperature, ID: {fb98754d-0fba-4163-9b74-3e5a07d71421}) ----------- The name of the StateType ({fb98754d-0fba-4163-9b74-3e5a07d71421}) of ThingClass x2wp Zielraumtemperatur - - Target room temperature changed - The name of the EventType ({fb98754d-0fba-4163-9b74-3e5a07d71421}) of ThingClass x2wp - Zielraumtemperatur geändert - Target water temperature The name of the ParamType (ThingClass: x2wp, ActionType: targetWaterTemperature, ID: {fb021cac-1236-4324-a45c-8d89ad069052}) ---------- -The name of the ParamType (ThingClass: x2wp, EventType: targetWaterTemperature, ID: {fb021cac-1236-4324-a45c-8d89ad069052}) ----------- The name of the StateType ({fb021cac-1236-4324-a45c-8d89ad069052}) of ThingClass x2wp Zielwassertemperatur - - Target water temperature changed - The name of the EventType ({fb021cac-1236-4324-a45c-8d89ad069052}) of ThingClass x2wp - Zielwassertemperatur geändert - Update interval The name of the ParamType (ThingClass: drexelUndWeiss, Type: plugin, ID: {ecc8e0f1-5fac-4ea9-b5ef-459d75c4fe78}) @@ -254,42 +131,21 @@ The name of the StateType ({fb021cac-1236-4324-a45c-8d89ad069052}) of ThingClass Ventilation level - The name of the ParamType (ThingClass: x2lu, EventType: activeVentilationLevel, ID: {1f26a013-7836-4f3e-b369-7ce07310fc59}) ----------- -The name of the StateType ({1f26a013-7836-4f3e-b369-7ce07310fc59}) of ThingClass x2lu + The name of the StateType ({1f26a013-7836-4f3e-b369-7ce07310fc59}) of ThingClass x2lu Lüftungsstufe - - Ventilation level changed - The name of the EventType ({1f26a013-7836-4f3e-b369-7ce07310fc59}) of ThingClass x2lu - Lüftungsstufe geändert - Ventilation mode The name of the ParamType (ThingClass: x2lu, ActionType: ventilationMode, ID: {4269d9d0-ddff-4e7a-9d7a-bf9a7db50f98}) ---------- -The name of the ParamType (ThingClass: x2lu, EventType: ventilationMode, ID: {4269d9d0-ddff-4e7a-9d7a-bf9a7db50f98}) ----------- The name of the StateType ({4269d9d0-ddff-4e7a-9d7a-bf9a7db50f98}) of ThingClass x2lu Lüftungsmodus - - Ventilation mode changed - The name of the EventType ({4269d9d0-ddff-4e7a-9d7a-bf9a7db50f98}) of ThingClass x2lu - Lüftungsmodus geändert - Water temperature - The name of the ParamType (ThingClass: x2wp, EventType: waterTemperature, ID: {77a96b57-fa0a-4946-af5b-39c3b66d9422}) ----------- -The name of the StateType ({77a96b57-fa0a-4946-af5b-39c3b66d9422}) of ThingClass x2wp + The name of the StateType ({77a96b57-fa0a-4946-af5b-39c3b66d9422}) of ThingClass x2wp Wassertemperatur - - Water temperature changed - The name of the EventType ({77a96b57-fa0a-4946-af5b-39c3b66d9422}) of ThingClass x2wp - Wassertemperatur geändert - X2 LU The name of the ThingClass ({0de8e21e-392a-4790-a78a-b1a7eaa7571b}) @@ -302,68 +158,63 @@ The name of the StateType ({77a96b57-fa0a-4946-af5b-39c3b66d9422}) of ThingClass Connected - The name of the ParamType (ThingClass: x2wp, EventType: connected, ID: {baf203be-a391-4bfc-8198-53b4ecbcce80}) ----------- -The name of the StateType ({baf203be-a391-4bfc-8198-53b4ecbcce80}) of ThingClass x2wp ----------- -The name of the ParamType (ThingClass: x2lu, EventType: connected, ID: {b4c4726f-d3d7-46e8-badb-0d590e7f5fac}) + The name of the StateType ({baf203be-a391-4bfc-8198-53b4ecbcce80}) of ThingClass x2wp ---------- The name of the StateType ({b4c4726f-d3d7-46e8-badb-0d590e7f5fac}) of ThingClass x2lu Verbunden - - Connected changed - The name of the EventType ({baf203be-a391-4bfc-8198-53b4ecbcce80}) of ThingClass x2wp ----------- -The name of the EventType ({b4c4726f-d3d7-46e8-badb-0d590e7f5fac}) of ThingClass x2lu - Verbunden geändert - Modbus RTU master The name of the ParamType (ThingClass: x2wp, Type: thing, ID: {db8358f3-f573-44e3-b024-c4613ee3a270}) ---------- The name of the ParamType (ThingClass: x2lu, Type: thing, ID: {d25197d1-b1b9-45a9-b6fa-60583ed469fb}) - + Set power The name of the ActionType ({c9df6349-2bf6-46cc-bce3-d4155836dbe5}) of ThingClass x2lu - + Einschalten + + + Total power consumption + The name of the StateType ({c969ece8-4712-4728-b895-2901dcdb346b}) of ThingClass x2wp + Gesamtleistungsaufnahme + + + Total energy consumed + The name of the StateType ({812d931b-df7d-4e6a-a53a-da84535bfffa}) of ThingClass x2wp + Gesamtenergieverbrauch IntegrationPluginDrexelUndWeiss - - Modbus RTU interface not available. - - - - Modbus RTU interface is not connected. - - - - Modbus RTU interface not connected. - - - - No Modbus RTU interface available. - - - - Modbus slave address must be between 1 and 254 - - X2 Heat pump - + X2 Wärmepumpe X2 Ventilation unit - + X2 Lüftungseinheit Slave address - + Slave-Adresse + + + No Modbus RTU interface is available. + Keine Modbus RTU Schnittstelle verfügbar. + + + The Modbus slave address must be between 1 and 254 + Die Modbus Slave-Adresse muss zwischen 1und 254 sein. + + + The Modbus RTU interface is not connected. + Die Modbus RTU Schnittstelle ist nicht verbunden. + + + The Modbus RTU interface is not available. + Die Modbus RTU Schnittstelle ist nicht verfügbar. diff --git a/drexelundweiss/translations/68d78ce6-82d0-4a5b-b901-7c3b843ef63c-en_US.ts b/drexelundweiss/translations/68d78ce6-82d0-4a5b-b901-7c3b843ef63c-en_US.ts index 9abdbb6..968ad04 100644 --- a/drexelundweiss/translations/68d78ce6-82d0-4a5b-b901-7c3b843ef63c-en_US.ts +++ b/drexelundweiss/translations/68d78ce6-82d0-4a5b-b901-7c3b843ef63c-en_US.ts @@ -5,19 +5,7 @@ DrexelUndWeiss CO2 - The name of the ParamType (ThingClass: x2lu, EventType: co2, ID: {0a6b44c8-e7af-4148-92ff-682ae717f3a8}) ----------- -The name of the StateType ({0a6b44c8-e7af-4148-92ff-682ae717f3a8}) of ThingClass x2lu - - - - CO2 changed - The name of the EventType ({0a6b44c8-e7af-4148-92ff-682ae717f3a8}) of ThingClass x2lu - - - - Change power - The name of the ActionType ({f2ce8389-c33f-4f10-8484-f2e993841762}) of ThingClass x2wp + The name of the StateType ({0a6b44c8-e7af-4148-92ff-682ae717f3a8}) of ThingClass x2lu @@ -44,168 +32,71 @@ The name of the plugin DrexelUndWeiss ({68d78ce6-82d0-4a5b-b901-7c3b843ef63c}) Energy air preheating - The name of the ParamType (ThingClass: x2wp, EventType: energyAirPreheating, ID: {0816ca6d-a178-4a2a-8183-c26a794fb0ca}) ----------- -The name of the StateType ({0816ca6d-a178-4a2a-8183-c26a794fb0ca}) of ThingClass x2wp - - - - Energy air preheating changed - The name of the EventType ({0816ca6d-a178-4a2a-8183-c26a794fb0ca}) of ThingClass x2wp + The name of the StateType ({0816ca6d-a178-4a2a-8183-c26a794fb0ca}) of ThingClass x2wp Energy compressor - The name of the ParamType (ThingClass: x2wp, EventType: energyCompressor, ID: {b423657b-4e59-41cd-89a3-4f5cb1c3a271}) ----------- -The name of the StateType ({b423657b-4e59-41cd-89a3-4f5cb1c3a271}) of ThingClass x2wp - - - - Energy compressor changed - The name of the EventType ({b423657b-4e59-41cd-89a3-4f5cb1c3a271}) of ThingClass x2wp + The name of the StateType ({b423657b-4e59-41cd-89a3-4f5cb1c3a271}) of ThingClass x2wp Energy room heating - The name of the ParamType (ThingClass: x2wp, EventType: energyRoomHeating, ID: {4495618e-5a43-46ac-9f76-32aae3f3e954}) ----------- -The name of the StateType ({4495618e-5a43-46ac-9f76-32aae3f3e954}) of ThingClass x2wp - - - - Energy room heating changed - The name of the EventType ({4495618e-5a43-46ac-9f76-32aae3f3e954}) of ThingClass x2wp + The name of the StateType ({4495618e-5a43-46ac-9f76-32aae3f3e954}) of ThingClass x2wp Energy water heating - The name of the ParamType (ThingClass: x2wp, EventType: energyWaterHeating, ID: {cb189b75-3634-4674-a847-f29ca322d4be}) ----------- -The name of the StateType ({cb189b75-3634-4674-a847-f29ca322d4be}) of ThingClass x2wp - - - - Energy water heating changed - The name of the EventType ({cb189b75-3634-4674-a847-f29ca322d4be}) of ThingClass x2wp + The name of the StateType ({cb189b75-3634-4674-a847-f29ca322d4be}) of ThingClass x2wp Error - The name of the ParamType (ThingClass: x2wp, EventType: error, ID: {8d6e52ef-992d-47ac-90a8-9dba95ab200e}) ----------- -The name of the StateType ({8d6e52ef-992d-47ac-90a8-9dba95ab200e}) of ThingClass x2wp - - - - Error occured - The name of the EventType ({8d6e52ef-992d-47ac-90a8-9dba95ab200e}) of ThingClass x2wp + The name of the StateType ({8d6e52ef-992d-47ac-90a8-9dba95ab200e}) of ThingClass x2wp Heat pump mode - The name of the ParamType (ThingClass: x2wp, EventType: heatPumpMode, ID: {5c125ddd-a0db-40fe-9998-2afea6c727f1}) ----------- -The name of the StateType ({5c125ddd-a0db-40fe-9998-2afea6c727f1}) of ThingClass x2wp - - - - Heat pump mode changed - The name of the EventType ({5c125ddd-a0db-40fe-9998-2afea6c727f1}) of ThingClass x2wp + The name of the StateType ({5c125ddd-a0db-40fe-9998-2afea6c727f1}) of ThingClass x2wp Outside air temperature - The name of the ParamType (ThingClass: x2wp, EventType: outsideAirTemperature, ID: {32378843-5478-4b86-9c0e-ccbf978c02be}) ----------- -The name of the StateType ({32378843-5478-4b86-9c0e-ccbf978c02be}) of ThingClass x2wp - - - - Outside air temperature changed - The name of the EventType ({32378843-5478-4b86-9c0e-ccbf978c02be}) of ThingClass x2wp + The name of the StateType ({32378843-5478-4b86-9c0e-ccbf978c02be}) of ThingClass x2wp Power - The name of the ParamType (ThingClass: x2wp, ActionType: power, ID: {f2ce8389-c33f-4f10-8484-f2e993841762}) ----------- -The name of the ParamType (ThingClass: x2wp, EventType: power, ID: {f2ce8389-c33f-4f10-8484-f2e993841762}) ----------- -The name of the StateType ({f2ce8389-c33f-4f10-8484-f2e993841762}) of ThingClass x2wp + The name of the StateType ({f2ce8389-c33f-4f10-8484-f2e993841762}) of ThingClass x2wp ---------- The name of the ParamType (ThingClass: x2lu, ActionType: power, ID: {c9df6349-2bf6-46cc-bce3-d4155836dbe5}) ---------- -The name of the ParamType (ThingClass: x2lu, EventType: power, ID: {c9df6349-2bf6-46cc-bce3-d4155836dbe5}) ----------- The name of the StateType ({c9df6349-2bf6-46cc-bce3-d4155836dbe5}) of ThingClass x2lu - - Power changed - The name of the EventType ({f2ce8389-c33f-4f10-8484-f2e993841762}) of ThingClass x2wp ----------- -The name of the EventType ({c9df6349-2bf6-46cc-bce3-d4155836dbe5}) of ThingClass x2lu - - Power consumption air preheating - The name of the ParamType (ThingClass: x2wp, EventType: powerAirPreheating, ID: {59beeff5-89c1-4996-9e07-48d53d74684d}) ----------- -The name of the StateType ({59beeff5-89c1-4996-9e07-48d53d74684d}) of ThingClass x2wp - - - - Power consumption air preheating changed - The name of the EventType ({59beeff5-89c1-4996-9e07-48d53d74684d}) of ThingClass x2wp + The name of the StateType ({59beeff5-89c1-4996-9e07-48d53d74684d}) of ThingClass x2wp Power consumption compressor - The name of the ParamType (ThingClass: x2wp, EventType: powerCompressor, ID: {7287943a-ea6d-4c92-abbd-f55f6c7ee9e5}) ----------- -The name of the StateType ({7287943a-ea6d-4c92-abbd-f55f6c7ee9e5}) of ThingClass x2wp - - - - Power consumption compressor changed - The name of the EventType ({7287943a-ea6d-4c92-abbd-f55f6c7ee9e5}) of ThingClass x2wp + The name of the StateType ({7287943a-ea6d-4c92-abbd-f55f6c7ee9e5}) of ThingClass x2wp Power consumption room heating - The name of the ParamType (ThingClass: x2wp, EventType: powerRoomHeating, ID: {c4237da0-0ead-42b8-b192-6a681509dc90}) ----------- -The name of the StateType ({c4237da0-0ead-42b8-b192-6a681509dc90}) of ThingClass x2wp - - - - Power consumption room heating changed - The name of the EventType ({c4237da0-0ead-42b8-b192-6a681509dc90}) of ThingClass x2wp + The name of the StateType ({c4237da0-0ead-42b8-b192-6a681509dc90}) of ThingClass x2wp Power consumption water heating - The name of the ParamType (ThingClass: x2wp, EventType: powerWaterHeating, ID: {21dfc736-f35c-469f-be57-afc1976d8328}) ----------- -The name of the StateType ({21dfc736-f35c-469f-be57-afc1976d8328}) of ThingClass x2wp - - - - Power consumption water heating changed - The name of the EventType ({21dfc736-f35c-469f-be57-afc1976d8328}) of ThingClass x2wp + The name of the StateType ({21dfc736-f35c-469f-be57-afc1976d8328}) of ThingClass x2wp Room temperature - The name of the ParamType (ThingClass: x2wp, EventType: temperature, ID: {3ab2d609-1686-4fd7-84e3-580c8e0537d0}) ----------- -The name of the StateType ({3ab2d609-1686-4fd7-84e3-580c8e0537d0}) of ThingClass x2wp - - - - Room temperature changed - The name of the EventType ({3ab2d609-1686-4fd7-84e3-580c8e0537d0}) of ThingClass x2wp + The name of the StateType ({3ab2d609-1686-4fd7-84e3-580c8e0537d0}) of ThingClass x2wp @@ -223,30 +114,16 @@ The name of the ParamType (ThingClass: x2lu, Type: thing, ID: {28a72cb7-3cd0-470 Target room temperature The name of the ParamType (ThingClass: x2wp, ActionType: targetTemperature, ID: {fb98754d-0fba-4163-9b74-3e5a07d71421}) ---------- -The name of the ParamType (ThingClass: x2wp, EventType: targetTemperature, ID: {fb98754d-0fba-4163-9b74-3e5a07d71421}) ----------- The name of the StateType ({fb98754d-0fba-4163-9b74-3e5a07d71421}) of ThingClass x2wp - - Target room temperature changed - The name of the EventType ({fb98754d-0fba-4163-9b74-3e5a07d71421}) of ThingClass x2wp - - Target water temperature The name of the ParamType (ThingClass: x2wp, ActionType: targetWaterTemperature, ID: {fb021cac-1236-4324-a45c-8d89ad069052}) ---------- -The name of the ParamType (ThingClass: x2wp, EventType: targetWaterTemperature, ID: {fb021cac-1236-4324-a45c-8d89ad069052}) ----------- The name of the StateType ({fb021cac-1236-4324-a45c-8d89ad069052}) of ThingClass x2wp - - Target water temperature changed - The name of the EventType ({fb021cac-1236-4324-a45c-8d89ad069052}) of ThingClass x2wp - - Update interval The name of the ParamType (ThingClass: drexelUndWeiss, Type: plugin, ID: {ecc8e0f1-5fac-4ea9-b5ef-459d75c4fe78}) @@ -254,40 +131,19 @@ The name of the StateType ({fb021cac-1236-4324-a45c-8d89ad069052}) of ThingClass Ventilation level - The name of the ParamType (ThingClass: x2lu, EventType: activeVentilationLevel, ID: {1f26a013-7836-4f3e-b369-7ce07310fc59}) ----------- -The name of the StateType ({1f26a013-7836-4f3e-b369-7ce07310fc59}) of ThingClass x2lu - - - - Ventilation level changed - The name of the EventType ({1f26a013-7836-4f3e-b369-7ce07310fc59}) of ThingClass x2lu + The name of the StateType ({1f26a013-7836-4f3e-b369-7ce07310fc59}) of ThingClass x2lu Ventilation mode The name of the ParamType (ThingClass: x2lu, ActionType: ventilationMode, ID: {4269d9d0-ddff-4e7a-9d7a-bf9a7db50f98}) ---------- -The name of the ParamType (ThingClass: x2lu, EventType: ventilationMode, ID: {4269d9d0-ddff-4e7a-9d7a-bf9a7db50f98}) ----------- The name of the StateType ({4269d9d0-ddff-4e7a-9d7a-bf9a7db50f98}) of ThingClass x2lu - - Ventilation mode changed - The name of the EventType ({4269d9d0-ddff-4e7a-9d7a-bf9a7db50f98}) of ThingClass x2lu - - Water temperature - The name of the ParamType (ThingClass: x2wp, EventType: waterTemperature, ID: {77a96b57-fa0a-4946-af5b-39c3b66d9422}) ----------- -The name of the StateType ({77a96b57-fa0a-4946-af5b-39c3b66d9422}) of ThingClass x2wp - - - - Water temperature changed - The name of the EventType ({77a96b57-fa0a-4946-af5b-39c3b66d9422}) of ThingClass x2wp + The name of the StateType ({77a96b57-fa0a-4946-af5b-39c3b66d9422}) of ThingClass x2wp @@ -302,22 +158,11 @@ The name of the StateType ({77a96b57-fa0a-4946-af5b-39c3b66d9422}) of ThingClass Connected - The name of the ParamType (ThingClass: x2wp, EventType: connected, ID: {baf203be-a391-4bfc-8198-53b4ecbcce80}) ----------- -The name of the StateType ({baf203be-a391-4bfc-8198-53b4ecbcce80}) of ThingClass x2wp ----------- -The name of the ParamType (ThingClass: x2lu, EventType: connected, ID: {b4c4726f-d3d7-46e8-badb-0d590e7f5fac}) + The name of the StateType ({baf203be-a391-4bfc-8198-53b4ecbcce80}) of ThingClass x2wp ---------- The name of the StateType ({b4c4726f-d3d7-46e8-badb-0d590e7f5fac}) of ThingClass x2lu - - Connected changed - The name of the EventType ({baf203be-a391-4bfc-8198-53b4ecbcce80}) of ThingClass x2wp ----------- -The name of the EventType ({b4c4726f-d3d7-46e8-badb-0d590e7f5fac}) of ThingClass x2lu - - Modbus RTU master The name of the ParamType (ThingClass: x2wp, Type: thing, ID: {db8358f3-f573-44e3-b024-c4613ee3a270}) @@ -330,29 +175,19 @@ The name of the ParamType (ThingClass: x2lu, Type: thing, ID: {d25197d1-b1b9-45a The name of the ActionType ({c9df6349-2bf6-46cc-bce3-d4155836dbe5}) of ThingClass x2lu + + Total power consumption + The name of the StateType ({c969ece8-4712-4728-b895-2901dcdb346b}) of ThingClass x2wp + + + + Total energy consumed + The name of the StateType ({812d931b-df7d-4e6a-a53a-da84535bfffa}) of ThingClass x2wp + + IntegrationPluginDrexelUndWeiss - - Modbus RTU interface not available. - - - - Modbus RTU interface is not connected. - - - - Modbus RTU interface not connected. - - - - No Modbus RTU interface available. - - - - Modbus slave address must be between 1 and 254 - - X2 Heat pump @@ -365,5 +200,21 @@ The name of the ParamType (ThingClass: x2lu, Type: thing, ID: {d25197d1-b1b9-45a Slave address + + No Modbus RTU interface is available. + + + + The Modbus slave address must be between 1 and 254 + + + + The Modbus RTU interface is not connected. + + + + The Modbus RTU interface is not available. + +