diff --git a/idm/idm.cpp b/idm/idm.cpp index 26eb2b0..e749fc9 100644 --- a/idm/idm.cpp +++ b/idm/idm.cpp @@ -55,20 +55,6 @@ Idm::~Idm() } } -void Idm::setTargetRoomTemperature (double temperature) { - QVector registers{}; - - printf("Setting target room temperature to %g\n", temperature); - - ModbusHelpers::convertFloatToRegister(registers, temperature); - - printf("registers to be sent: %x %x\n", registers[0], registers[1]); - - m_modbusMaster->writeHoldingRegisters(Idm::ModbusUnitID, Idm::RoomTemperatureHKA, registers); - - emit targetRoomTemperatureChanged(); -} - void Idm::onReceivedHoldingRegister(int slaveAddress, int modbusRegister, const QVector &value) { Q_UNUSED(slaveAddress); @@ -115,12 +101,6 @@ void Idm::onReceivedHoldingRegister(int slaveAddress, int modbusRegister, const if (value.length() == 1) { m_info->m_mode = heatPumpOperationModeToString((Idm::IdmHeatPumpMode)value[RegisterList::HeatPumpOperatingMode-modbusRegister]); } - m_modbusMaster->readHoldingRegister(Idm::ModbusUnitID, Idm::HumiditySensor, 2); - break; - case Idm::HumiditySensor: - if (value.length() == 2) { - m_info->m_humidity = ModbusHelpers::convertRegisterToFloat(&value[RegisterList::HumiditySensor - modbusRegister]); - } m_modbusMaster->readHoldingRegister(Idm::ModbusUnitID, Idm::RoomTemperatureHKA, 2); break; case Idm::RoomTemperatureHKA: @@ -129,7 +109,7 @@ void Idm::onReceivedHoldingRegister(int slaveAddress, int modbusRegister, const } m_modbusMaster->readHoldingRegister(Idm::ModbusUnitID, Idm::RoomTemperatureTargetHeatingHKA, 2); break; - case Idm::RoomTemperatureTargetHeatingHKA: + case Idm::RoomTemperatureTargetHeatingEcoHKA: if (value.length() == 2) { m_info->m_targetRoomTemperature = ModbusHelpers::convertRegisterToFloat(&value[RegisterList::RoomTemperatureTargetHeatingHKA - modbusRegister]); } diff --git a/idm/idm.h b/idm/idm.h index d1e0d24..af68685 100644 --- a/idm/idm.h +++ b/idm/idm.h @@ -37,6 +37,33 @@ #include "idminfo.h" +/* + * Functionality: + * The current version allows read access to selected + * modbus registers: + * + Room temperature (HK A) + * + Water temperature + * + Outside air temperature + * + Target room temperature eco mode (HK A) + * + Target water temperature + * + Current power consumption + * + Operation mode + * + Error + * + * At present there is no write access for target + * room temperature and target water temperature. These + * result in an "invalid data access" error from the + * device. + */ + +/* Note: It would be desirable to read the modbus registers + * of the Idm heat pump in groups to minimize the number + * of read requests. However, a maximum of 6 registers + * can be read simultaneously. With the given set of + * addresses it is not possible to reasonably group the + * registers, therefore they are read individually. + */ + class Idm : public QObject { Q_OBJECT @@ -47,16 +74,7 @@ public: /** Destructor */ ~Idm(); - void setTargetRoomTemperature (double temperature); - private: - /* Note: It would be desirable to read the modbus registers - * of the Idm heat pump in groups to minimize the number - * of read requests. However, a maximum of 6 registers - * can be read simultaneously. With the given set of - * addresses it is not possible to reasonably group the - * registers, therefore they are read individually. - */ /** Modbus Unit ID of Idm device */ static const quint16 ModbusUnitID = 1; @@ -107,6 +125,7 @@ private: RoomTemperatureHKA = 1364, // Heizkreis A Raumtemperature (B61) HumiditySensor = 1392, // Feuchtesensor RoomTemperatureTargetHeatingHKA = 1401, // Raumsolltemperatur Heizen Normal HK A + RoomTemperatureTargetHeatingEcoHKA = 1415, // Raumsolltemperatur Heizen Eco HK A ExternalOutsideTemperature = 1690, // Externe Außentemperatur ExternalHumidity = 1692, // Externe Feuchte ExternalRequestTemperatureHeating = 1694, // Externe Anforderungstemperatur Heizen diff --git a/idm/integrationpluginidm.cpp b/idm/integrationpluginidm.cpp index fdcb8be..4b1fba9 100644 --- a/idm/integrationpluginidm.cpp +++ b/idm/integrationpluginidm.cpp @@ -82,7 +82,6 @@ void IntegrationPluginIdm::postSetupThing(Thing *thing) Idm *idm = m_idmConnections.value(thing); connect(idm, &Idm::statusUpdated, this, &IntegrationPluginIdm::onStatusUpdated); - connect(idm, &Idm::targetRoomTemperatureChanged, this, &IntegrationPluginIdm::onTargetRoomTemperatureChanged); qCDebug(dcIdm()) << "Thing set up, calling update"; update(thing); @@ -107,12 +106,7 @@ void IntegrationPluginIdm::executeAction(ThingActionInfo *info) if (thing->thingClassId() == navigator2ThingClassId) { if (action.actionTypeId() == navigator2PowerActionTypeId) { - } else if (action.actionTypeId() == navigator2TargetTemperatureStateTypeId) { - Idm *idm = m_idmConnections.value(thing); - - idm->setTargetRoomTemperature(action.param(navigator2TargetTemperatureEventTargetTemperatureParamTypeId).value().value()); - - } else { + } else { Q_ASSERT_X(false, "executeAction", QString("Unhandled action: %1").arg(action.actionTypeId().toString()).toUtf8()); } } else { @@ -161,17 +155,11 @@ void IntegrationPluginIdm::onStatusUpdated(IdmInfo *info) thing->setStateValue(navigator2WaterTemperatureStateTypeId, info->m_waterTemperature); thing->setStateValue(navigator2TargetTemperatureStateTypeId, info->m_targetRoomTemperature); thing->setStateValue(navigator2TargetWaterTemperatureStateTypeId, info->m_targetWaterTemperature); - thing->setStateValue(navigator2HumidityStateTypeId, info->m_humidity); thing->setStateValue(navigator2CurrentPowerConsumptionHeatPumpStateTypeId, info->m_powerConsumptionHeatPump); thing->setStateValue(navigator2ModeStateTypeId, info->m_mode); thing->setStateValue(navigator2ErrorStateTypeId, info->m_error); } -void IntegrationPluginIdm::onTargetRoomTemperatureChanged() -{ - -} - void IntegrationPluginIdm::onRefreshTimer() { foreach (Thing *thing, myThings().filterByThingClassId(navigator2ThingClassId)) { diff --git a/idm/integrationpluginidm.h b/idm/integrationpluginidm.h index 5d0cc11..42b9627 100644 --- a/idm/integrationpluginidm.h +++ b/idm/integrationpluginidm.h @@ -60,26 +60,6 @@ public: private: - enum IdmSmartGridMode { - EVUSperreKeinPVErtrag, - EVUBezugKeinPVErtrag, - KeinEVUBezugPVErtrag, - EVUSperrePVErtrag - }; - - enum IdmStatus { - Heating = 2, - Standby = 3, - Boosted = 4, - HeatFinished = 5, - Setup = 9, - ErrorOvertempFuseBlown = 201, - ErrorOvertempMeasured = 202, - ErrorOvertempElectronics = 203, - ErrorHardwareFault = 204, - ErrorTempSensor = 205 - }; - PluginTimer *m_refreshTimer = nullptr; QHash m_idmConnections; QHash m_idmInfos; @@ -89,7 +69,6 @@ private: private slots: void onStatusUpdated(IdmInfo *info); - void onTargetRoomTemperatureChanged(); }; #endif // INTEGRATIONPLUGINIDM_H diff --git a/idm/integrationpluginidm.json b/idm/integrationpluginidm.json index 6f8a2e9..a45ce03 100644 --- a/idm/integrationpluginidm.json +++ b/idm/integrationpluginidm.json @@ -13,7 +13,7 @@ "displayName": "Navigator 2.0", "id": "1c95ac91-4eca-4cbf-b0f4-d60d35d069ed", "createMethods": ["User","Discovery"], - "interfaces": ["thermostat", "temperaturesensor", "humiditysensor", "connectable"], + "interfaces": ["temperaturesensor", "connectable"], "paramTypes": [ { "id": "05714e5c-d66a-4095-bbff-a0eb96fb035b", @@ -69,42 +69,23 @@ "unit": "DegreeCelsius", "defaultValue": 0 }, - { - "id": "109b4189-491a-4498-8470-b52b1b434c71", - "name": "humidity", - "displayName": "Humidity", - "displayNameEvent": "Humidity changed", - "type": "double", - "defaultValue": 0, - "unit": "Percentage", - "minValue": 0, - "maxValue": 100 - }, { "id": "efae7493-68c3-4cb9-853c-81011bdf09ca", "name": "targetTemperature", "displayName": "Target room temperature", "displayNameEvent": "Target room temperature changed", - "displayNameAction": "Change room target temperature", "type": "double", "unit": "DegreeCelsius", - "minValue": 14.00, - "maxValue": 26.00, - "defaultValue": 22.00, - "writable": true + "defaultValue": 22.00 }, { "id": "746244d6-dd37-4af8-b2ae-a7d8463e51e2", "name": "targetWaterTemperature", "displayName": "Target water temperature", "displayNameEvent": "Target water temperature changed", - "displayNameAction": "Change water target temperature", "type": "double", "unit": "DegreeCelsius", - "minValue": 20.00, - "maxValue": 55.00, - "defaultValue": 46.00, - "writable": true + "defaultValue": 46.00 }, { @@ -142,54 +123,6 @@ } ], "actionTypes": [ - { - "id": "29b65c13-46e9-49b1-970a-68252bdfeadc", - "name": "externTemperature", - "displayName": "Extern temperature", - "paramTypes" : [ - { - "id": "d60fcb0c-19b5-4cac-9b95-a1b414518385", - "name": "temperature", - "displayName": "Temperature", - "type": "double", - "defaultValue": 0, - "unit": "DegreeCelsius" - } - ] - }, - { - "id": "046f2e72-899a-4d82-91d3-fd268c784a1c", - "name": "externHumidity", - "displayName": "Extern humidity", - "paramTypes" : [ - { - "id": "034b9a8c-1a5a-45da-8422-393273d0a159", - "name": "extHumidity", - "displayName": "External Humidity", - "type": "int", - "defaultValue": 0, - "minValue": 0, - "maxValue": 100, - "unit": "Percentage" - } - ] - }, - { - "id": "87633d1f-3826-4bf0-9a2c-46a927446eb5", - "name": "pvPower", - "displayName": "Set available PV Power", - "paramTypes" : [ - { - "id": "84b251ab-33b5-45e5-9a5c-468e3affe821", - "name": "pvPower", - "displayName": "PV Power", - "type": "double", - "defaultValue": 0.00, - "minValue": 0.00, - "unit": "KiloWatt" - } - ] - } ] } ]