Removed faulty functionality.
Write access to target temperatures for air and water, as well as humidity sensor were removed. Code clean-up + comments added.
This commit is contained in:
parent
2c342bc658
commit
e202b328b7
22
idm/idm.cpp
22
idm/idm.cpp
@ -55,20 +55,6 @@ Idm::~Idm()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Idm::setTargetRoomTemperature (double temperature) {
|
|
||||||
QVector<quint16> 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<quint16> &value)
|
void Idm::onReceivedHoldingRegister(int slaveAddress, int modbusRegister, const QVector<quint16> &value)
|
||||||
{
|
{
|
||||||
Q_UNUSED(slaveAddress);
|
Q_UNUSED(slaveAddress);
|
||||||
@ -115,12 +101,6 @@ void Idm::onReceivedHoldingRegister(int slaveAddress, int modbusRegister, const
|
|||||||
if (value.length() == 1) {
|
if (value.length() == 1) {
|
||||||
m_info->m_mode = heatPumpOperationModeToString((Idm::IdmHeatPumpMode)value[RegisterList::HeatPumpOperatingMode-modbusRegister]);
|
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);
|
m_modbusMaster->readHoldingRegister(Idm::ModbusUnitID, Idm::RoomTemperatureHKA, 2);
|
||||||
break;
|
break;
|
||||||
case Idm::RoomTemperatureHKA:
|
case Idm::RoomTemperatureHKA:
|
||||||
@ -129,7 +109,7 @@ void Idm::onReceivedHoldingRegister(int slaveAddress, int modbusRegister, const
|
|||||||
}
|
}
|
||||||
m_modbusMaster->readHoldingRegister(Idm::ModbusUnitID, Idm::RoomTemperatureTargetHeatingHKA, 2);
|
m_modbusMaster->readHoldingRegister(Idm::ModbusUnitID, Idm::RoomTemperatureTargetHeatingHKA, 2);
|
||||||
break;
|
break;
|
||||||
case Idm::RoomTemperatureTargetHeatingHKA:
|
case Idm::RoomTemperatureTargetHeatingEcoHKA:
|
||||||
if (value.length() == 2) {
|
if (value.length() == 2) {
|
||||||
m_info->m_targetRoomTemperature = ModbusHelpers::convertRegisterToFloat(&value[RegisterList::RoomTemperatureTargetHeatingHKA - modbusRegister]);
|
m_info->m_targetRoomTemperature = ModbusHelpers::convertRegisterToFloat(&value[RegisterList::RoomTemperatureTargetHeatingHKA - modbusRegister]);
|
||||||
}
|
}
|
||||||
|
|||||||
37
idm/idm.h
37
idm/idm.h
@ -37,6 +37,33 @@
|
|||||||
|
|
||||||
#include "idminfo.h"
|
#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
|
class Idm : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -47,16 +74,7 @@ public:
|
|||||||
/** Destructor */
|
/** Destructor */
|
||||||
~Idm();
|
~Idm();
|
||||||
|
|
||||||
void setTargetRoomTemperature (double temperature);
|
|
||||||
|
|
||||||
private:
|
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 */
|
/** Modbus Unit ID of Idm device */
|
||||||
static const quint16 ModbusUnitID = 1;
|
static const quint16 ModbusUnitID = 1;
|
||||||
@ -107,6 +125,7 @@ private:
|
|||||||
RoomTemperatureHKA = 1364, // Heizkreis A Raumtemperature (B61)
|
RoomTemperatureHKA = 1364, // Heizkreis A Raumtemperature (B61)
|
||||||
HumiditySensor = 1392, // Feuchtesensor
|
HumiditySensor = 1392, // Feuchtesensor
|
||||||
RoomTemperatureTargetHeatingHKA = 1401, // Raumsolltemperatur Heizen Normal HK A
|
RoomTemperatureTargetHeatingHKA = 1401, // Raumsolltemperatur Heizen Normal HK A
|
||||||
|
RoomTemperatureTargetHeatingEcoHKA = 1415, // Raumsolltemperatur Heizen Eco HK A
|
||||||
ExternalOutsideTemperature = 1690, // Externe Außentemperatur
|
ExternalOutsideTemperature = 1690, // Externe Außentemperatur
|
||||||
ExternalHumidity = 1692, // Externe Feuchte
|
ExternalHumidity = 1692, // Externe Feuchte
|
||||||
ExternalRequestTemperatureHeating = 1694, // Externe Anforderungstemperatur Heizen
|
ExternalRequestTemperatureHeating = 1694, // Externe Anforderungstemperatur Heizen
|
||||||
|
|||||||
@ -82,7 +82,6 @@ void IntegrationPluginIdm::postSetupThing(Thing *thing)
|
|||||||
Idm *idm = m_idmConnections.value(thing);
|
Idm *idm = m_idmConnections.value(thing);
|
||||||
|
|
||||||
connect(idm, &Idm::statusUpdated, this, &IntegrationPluginIdm::onStatusUpdated);
|
connect(idm, &Idm::statusUpdated, this, &IntegrationPluginIdm::onStatusUpdated);
|
||||||
connect(idm, &Idm::targetRoomTemperatureChanged, this, &IntegrationPluginIdm::onTargetRoomTemperatureChanged);
|
|
||||||
|
|
||||||
qCDebug(dcIdm()) << "Thing set up, calling update";
|
qCDebug(dcIdm()) << "Thing set up, calling update";
|
||||||
update(thing);
|
update(thing);
|
||||||
@ -107,12 +106,7 @@ void IntegrationPluginIdm::executeAction(ThingActionInfo *info)
|
|||||||
if (thing->thingClassId() == navigator2ThingClassId) {
|
if (thing->thingClassId() == navigator2ThingClassId) {
|
||||||
if (action.actionTypeId() == navigator2PowerActionTypeId) {
|
if (action.actionTypeId() == navigator2PowerActionTypeId) {
|
||||||
|
|
||||||
} else if (action.actionTypeId() == navigator2TargetTemperatureStateTypeId) {
|
} else {
|
||||||
Idm *idm = m_idmConnections.value(thing);
|
|
||||||
|
|
||||||
idm->setTargetRoomTemperature(action.param(navigator2TargetTemperatureEventTargetTemperatureParamTypeId).value().value<double>());
|
|
||||||
|
|
||||||
} else {
|
|
||||||
Q_ASSERT_X(false, "executeAction", QString("Unhandled action: %1").arg(action.actionTypeId().toString()).toUtf8());
|
Q_ASSERT_X(false, "executeAction", QString("Unhandled action: %1").arg(action.actionTypeId().toString()).toUtf8());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -161,17 +155,11 @@ void IntegrationPluginIdm::onStatusUpdated(IdmInfo *info)
|
|||||||
thing->setStateValue(navigator2WaterTemperatureStateTypeId, info->m_waterTemperature);
|
thing->setStateValue(navigator2WaterTemperatureStateTypeId, info->m_waterTemperature);
|
||||||
thing->setStateValue(navigator2TargetTemperatureStateTypeId, info->m_targetRoomTemperature);
|
thing->setStateValue(navigator2TargetTemperatureStateTypeId, info->m_targetRoomTemperature);
|
||||||
thing->setStateValue(navigator2TargetWaterTemperatureStateTypeId, info->m_targetWaterTemperature);
|
thing->setStateValue(navigator2TargetWaterTemperatureStateTypeId, info->m_targetWaterTemperature);
|
||||||
thing->setStateValue(navigator2HumidityStateTypeId, info->m_humidity);
|
|
||||||
thing->setStateValue(navigator2CurrentPowerConsumptionHeatPumpStateTypeId, info->m_powerConsumptionHeatPump);
|
thing->setStateValue(navigator2CurrentPowerConsumptionHeatPumpStateTypeId, info->m_powerConsumptionHeatPump);
|
||||||
thing->setStateValue(navigator2ModeStateTypeId, info->m_mode);
|
thing->setStateValue(navigator2ModeStateTypeId, info->m_mode);
|
||||||
thing->setStateValue(navigator2ErrorStateTypeId, info->m_error);
|
thing->setStateValue(navigator2ErrorStateTypeId, info->m_error);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IntegrationPluginIdm::onTargetRoomTemperatureChanged()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void IntegrationPluginIdm::onRefreshTimer()
|
void IntegrationPluginIdm::onRefreshTimer()
|
||||||
{
|
{
|
||||||
foreach (Thing *thing, myThings().filterByThingClassId(navigator2ThingClassId)) {
|
foreach (Thing *thing, myThings().filterByThingClassId(navigator2ThingClassId)) {
|
||||||
|
|||||||
@ -60,26 +60,6 @@ public:
|
|||||||
|
|
||||||
private:
|
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;
|
PluginTimer *m_refreshTimer = nullptr;
|
||||||
QHash<Thing *, Idm *> m_idmConnections;
|
QHash<Thing *, Idm *> m_idmConnections;
|
||||||
QHash<Thing *, ThingSetupInfo *> m_idmInfos;
|
QHash<Thing *, ThingSetupInfo *> m_idmInfos;
|
||||||
@ -89,7 +69,6 @@ private:
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onStatusUpdated(IdmInfo *info);
|
void onStatusUpdated(IdmInfo *info);
|
||||||
void onTargetRoomTemperatureChanged();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // INTEGRATIONPLUGINIDM_H
|
#endif // INTEGRATIONPLUGINIDM_H
|
||||||
|
|||||||
@ -13,7 +13,7 @@
|
|||||||
"displayName": "Navigator 2.0",
|
"displayName": "Navigator 2.0",
|
||||||
"id": "1c95ac91-4eca-4cbf-b0f4-d60d35d069ed",
|
"id": "1c95ac91-4eca-4cbf-b0f4-d60d35d069ed",
|
||||||
"createMethods": ["User","Discovery"],
|
"createMethods": ["User","Discovery"],
|
||||||
"interfaces": ["thermostat", "temperaturesensor", "humiditysensor", "connectable"],
|
"interfaces": ["temperaturesensor", "connectable"],
|
||||||
"paramTypes": [
|
"paramTypes": [
|
||||||
{
|
{
|
||||||
"id": "05714e5c-d66a-4095-bbff-a0eb96fb035b",
|
"id": "05714e5c-d66a-4095-bbff-a0eb96fb035b",
|
||||||
@ -69,42 +69,23 @@
|
|||||||
"unit": "DegreeCelsius",
|
"unit": "DegreeCelsius",
|
||||||
"defaultValue": 0
|
"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",
|
"id": "efae7493-68c3-4cb9-853c-81011bdf09ca",
|
||||||
"name": "targetTemperature",
|
"name": "targetTemperature",
|
||||||
"displayName": "Target room temperature",
|
"displayName": "Target room temperature",
|
||||||
"displayNameEvent": "Target room temperature changed",
|
"displayNameEvent": "Target room temperature changed",
|
||||||
"displayNameAction": "Change room target temperature",
|
|
||||||
"type": "double",
|
"type": "double",
|
||||||
"unit": "DegreeCelsius",
|
"unit": "DegreeCelsius",
|
||||||
"minValue": 14.00,
|
"defaultValue": 22.00
|
||||||
"maxValue": 26.00,
|
|
||||||
"defaultValue": 22.00,
|
|
||||||
"writable": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "746244d6-dd37-4af8-b2ae-a7d8463e51e2",
|
"id": "746244d6-dd37-4af8-b2ae-a7d8463e51e2",
|
||||||
"name": "targetWaterTemperature",
|
"name": "targetWaterTemperature",
|
||||||
"displayName": "Target water temperature",
|
"displayName": "Target water temperature",
|
||||||
"displayNameEvent": "Target water temperature changed",
|
"displayNameEvent": "Target water temperature changed",
|
||||||
"displayNameAction": "Change water target temperature",
|
|
||||||
"type": "double",
|
"type": "double",
|
||||||
"unit": "DegreeCelsius",
|
"unit": "DegreeCelsius",
|
||||||
"minValue": 20.00,
|
"defaultValue": 46.00
|
||||||
"maxValue": 55.00,
|
|
||||||
"defaultValue": 46.00,
|
|
||||||
"writable": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -142,54 +123,6 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"actionTypes": [
|
"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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user