SunSpec: Fix #698 enable charging/discharging actions for energy storages
parent
8f47c12b23
commit
b3d84e8374
|
|
@ -488,25 +488,42 @@ void IntegrationPluginSunSpec::executeAction(ThingActionInfo *info)
|
||||||
}
|
}
|
||||||
info->finish(Thing::ThingErrorNoError);
|
info->finish(Thing::ThingErrorNoError);
|
||||||
});
|
});
|
||||||
} else if (action.actionTypeId() == sunspecStorageEnableChargingActionTypeId || action.actionTypeId() == sunspecStorageEnableDischargingActionTypeId) {
|
} else if (action.actionTypeId() == sunspecStorageEnableChargingActionTypeId) {
|
||||||
SunSpecStorageModel::Storctl_modFlags controlModeFlags;
|
SunSpecStorageModel::Storctl_modFlags controlModeFlags = storage->storCtlMod();
|
||||||
if (action.param(sunspecStorageEnableChargingActionEnableChargingParamTypeId).value().toBool())
|
bool enabled = action.param(sunspecStorageEnableChargingActionEnableChargingParamTypeId).value().toBool();
|
||||||
controlModeFlags.setFlag(SunSpecStorageModel::Storctl_modCharge);
|
controlModeFlags.setFlag(SunSpecStorageModel::Storctl_modCharge, enabled);
|
||||||
|
|
||||||
if (thing->stateValue(sunspecStorageEnableDischargingStateTypeId).toBool())
|
|
||||||
controlModeFlags.setFlag(SunSpecStorageModel::Storctl_modDiScharge);
|
|
||||||
|
|
||||||
QModbusReply *reply = storage->setStorCtlMod(controlModeFlags);
|
QModbusReply *reply = storage->setStorCtlMod(controlModeFlags);
|
||||||
if (!reply) {
|
if (!reply) {
|
||||||
info->finish(Thing::ThingErrorHardwareFailure);
|
info->finish(Thing::ThingErrorHardwareFailure);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater);
|
connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater);
|
||||||
connect(reply, &QModbusReply::finished, info, [info, reply]{
|
connect(reply, &QModbusReply::finished, info, [info, reply, enabled]{
|
||||||
if (reply->error() != QModbusDevice::NoError) {
|
if (reply->error() != QModbusDevice::NoError) {
|
||||||
info->finish(Thing::ThingErrorHardwareFailure);
|
info->finish(Thing::ThingErrorHardwareFailure);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
info->thing()->setStateValue(sunspecStorageEnableChargingStateTypeId, enabled);
|
||||||
|
info->finish(Thing::ThingErrorNoError);
|
||||||
|
});
|
||||||
|
} else if (action.actionTypeId() == sunspecStorageEnableDischargingActionTypeId) {
|
||||||
|
SunSpecStorageModel::Storctl_modFlags controlModeFlags = storage->storCtlMod();
|
||||||
|
bool enabled = action.param(sunspecStorageEnableDischargingActionEnableDischargingParamTypeId).value().toBool();
|
||||||
|
controlModeFlags.setFlag(SunSpecStorageModel::Storctl_modDiScharge, enabled);
|
||||||
|
QModbusReply *reply = storage->setStorCtlMod(controlModeFlags);
|
||||||
|
if (!reply) {
|
||||||
|
info->finish(Thing::ThingErrorHardwareFailure);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater);
|
||||||
|
connect(reply, &QModbusReply::finished, info, [info, reply, enabled]{
|
||||||
|
if (reply->error() != QModbusDevice::NoError) {
|
||||||
|
info->finish(Thing::ThingErrorHardwareFailure);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
info->thing()->setStateValue(sunspecStorageEnableDischargingStateTypeId, enabled);
|
||||||
info->finish(Thing::ThingErrorNoError);
|
info->finish(Thing::ThingErrorNoError);
|
||||||
});
|
});
|
||||||
} else if (action.actionTypeId() == sunspecStorageChargingRateActionTypeId) {
|
} else if (action.actionTypeId() == sunspecStorageChargingRateActionTypeId) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue