PCE: Add status state representing the EV state and digital input as int state

pce-extend-states-for-evdash
Simon Stürz 2025-12-11 16:30:39 +01:00
parent bf53a742a3
commit 1e3a8f160f
2 changed files with 48 additions and 1 deletions

View File

@ -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();

View File

@ -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
}
]
}