From 1e3a8f160fafaaf60a7b08930ebcde818a6b2123 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 11 Dec 2025 16:30:39 +0100 Subject: [PATCH] PCE: Add status state representing the EV state and digital input as int state --- pcelectric/integrationpluginpcelectric.cpp | 32 ++++++++++++++++++++- pcelectric/integrationpluginpcelectric.json | 17 +++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/pcelectric/integrationpluginpcelectric.cpp b/pcelectric/integrationpluginpcelectric.cpp index 630c35e..a5d65bd 100644 --- a/pcelectric/integrationpluginpcelectric.cpp +++ b/pcelectric/integrationpluginpcelectric.cpp @@ -340,6 +340,33 @@ void IntegrationPluginPcElectric::setupConnection(ThingSetupInfo *info) thing->setStateValue(ev11PhaseCountStateTypeId, connection->chargingRelayState() == EV11ModbusTcpConnection::ChargingRelayStateSinglePhase ? 1 : 3); } + switch (connection->chargingState()) { + case PceWallbox::ChargingStateInitializing: + thing->setStateValue(ev11StatusStateTypeId, "Init"); + break; + case PceWallbox::ChargingStateA1: + thing->setStateValue(ev11StatusStateTypeId, "A1"); + break; + case PceWallbox::ChargingStateA2: + thing->setStateValue(ev11StatusStateTypeId, "A2"); + break; + case PceWallbox::ChargingStateB1: + thing->setStateValue(ev11StatusStateTypeId, "B1"); + break; + case PceWallbox::ChargingStateB2: + thing->setStateValue(ev11StatusStateTypeId, "B2"); + break; + case PceWallbox::ChargingStateC1: + thing->setStateValue(ev11StatusStateTypeId, "C1"); + break; + case PceWallbox::ChargingStateC2: + thing->setStateValue(ev11StatusStateTypeId, "C2"); + break; + case PceWallbox::ChargingStateError: + thing->setStateValue(ev11StatusStateTypeId, "F"); + break; + } + thing->setStateValue(ev11CurrentVersionStateTypeId, connection->firmwareRevision()); thing->setStateValue(ev11SessionEnergyStateTypeId, connection->powerMeter0()); thing->setStateValue(ev11TemperatureStateTypeId, connection->temperature()); @@ -411,6 +438,8 @@ void IntegrationPluginPcElectric::setupConnection(ThingSetupInfo *info) thing->setSettingValue(ev11SettingsDigitalInputModeParamTypeId, "3 | Limit and S0 signaling"); break; } + thing->setStateValue(ev11DigitalInputModeStateTypeId, connection->digitalInputMode()); + if (connection->firmwareRevision() >= "0022") { thing->setSettingValue(ev11SettingsPhaseAutoSwitchPauseParamTypeId, connection->phaseAutoSwitchPause()); @@ -460,13 +489,14 @@ void IntegrationPluginPcElectric::setupConnection(ThingSetupInfo *info) } QueuedModbusReply *reply = connection->setDigitalInputModeAsync(modeValue); - connect(reply, &QueuedModbusReply::finished, thing, [reply, modeValue](){ + connect(reply, &QueuedModbusReply::finished, thing, [thing, reply, modeValue](){ if (reply->error() != QModbusDevice::NoError) { qCWarning(dcPcElectric()) << "Could not set digital input mode to" << modeValue << reply->errorString(); return; } qCDebug(dcPcElectric()) << "Successfully set digital input mode to" << modeValue; + thing->setStateValue(ev11DigitalInputModeStateTypeId, modeValue); }); } else if (paramTypeId == ev11SettingsPhaseAutoSwitchPauseParamTypeId) { quint16 registerValue = value.toUInt(); diff --git a/pcelectric/integrationpluginpcelectric.json b/pcelectric/integrationpluginpcelectric.json index 1003faf..6db8678 100644 --- a/pcelectric/integrationpluginpcelectric.json +++ b/pcelectric/integrationpluginpcelectric.json @@ -218,6 +218,23 @@ "displayName": "Digital input flag", "type": "QString", "defaultValue": "" + }, + { + "id": "a10967b9-4a32-49cf-a6ae-885b3153d601", + "name": "status", + "displayName": "Status", + "type": "QString", + "defaultValue": "Init", + "suggestLogging": true + }, + { + "id": "63639947-5e91-442f-858b-378b5bc5f1bc", + "name": "digitalInputMode", + "displayName": "Digital input mode", + "type": "uint", + "defaultValue": 0, + "minValue": 0, + "maxValue": 3 } ] }