Remaved storage register to original sunspec name

master
Boernsman 2021-02-04 13:37:31 +01:00
parent 5efce86683
commit 73958b2e59
3 changed files with 77 additions and 72 deletions

View File

@ -757,24 +757,24 @@ void IntegrationPluginSunSpec::onStorageDataReceived(const SunSpecStorage::Stora
} }
qCDebug(dcSunSpec()) << "Storage data received"; qCDebug(dcSunSpec()) << "Storage data received";
qCDebug(dcSunSpec()) << " - Setpoint for maximum charge" << mandatory.maxCharge << "[W]"; qCDebug(dcSunSpec()) << " - Setpoint for maximum charge" << mandatory.WChaMax << "[W]";
qCDebug(dcSunSpec()) << " - Setpoint for maximum charging rate." << mandatory.maxChargeRate << "[%]"; qCDebug(dcSunSpec()) << " - Setpoint for maximum charging rate." << mandatory.WChaGra << "[%]";
qCDebug(dcSunSpec()) << " - Setpoint for maximum discharging rate." << mandatory.maxDischargeRate << "[%]"; qCDebug(dcSunSpec()) << " - Setpoint for maximum discharging rate." << mandatory.WDisChaGra << "[%]";
qCDebug(dcSunSpec()) << " - Charging enabled" << mandatory.chargingEnabled; qCDebug(dcSunSpec()) << " - Charging enabled" << mandatory.StorCtl_Mod_ChargingEnabled;
qCDebug(dcSunSpec()) << " - Discharging enabled" << mandatory.dischargingEnabled; qCDebug(dcSunSpec()) << " - Discharging enabled" << mandatory.StorCtl_Mod_DischargingEnabled;
qCDebug(dcSunSpec()) << " - Storage status" << optional.chargeSatus; qCDebug(dcSunSpec()) << " - Storage status" << optional.ChaSt;
qCDebug(dcSunSpec()) << " - Currently available energy" << optional.currentlyAvailableEnergy << "[%]"; qCDebug(dcSunSpec()) << " - Currently available energy" << optional.ChaState << "[%]";
qCDebug(dcSunSpec()) << " - Grid charging enabled" << optional.gridChargingEnabled; qCDebug(dcSunSpec()) << " - Grid charging enabled" << optional.ChaGriSet;
thing->setStateValue(m_connectedStateTypeIds.value(thing->thingClassId()), true); thing->setStateValue(m_connectedStateTypeIds.value(thing->thingClassId()), true);
thing->setStateValue(sunspecStorageChargingRateStateTypeId, mandatory.maxChargeRate); thing->setStateValue(sunspecStorageChargingRateStateTypeId, mandatory.WChaGra);
thing->setStateValue(sunspecStorageDischargingRateStateTypeId, mandatory.maxDischargeRate); thing->setStateValue(sunspecStorageDischargingRateStateTypeId, mandatory.WDisChaGra);
thing->setStateValue(sunspecStorageEnableChargingStateTypeId, mandatory.chargingEnabled); thing->setStateValue(sunspecStorageEnableChargingStateTypeId, mandatory.StorCtl_Mod_ChargingEnabled);
thing->setStateValue(sunspecStorageEnableDischargingStateTypeId, mandatory.dischargingEnabled); thing->setStateValue(sunspecStorageEnableDischargingStateTypeId, mandatory.StorCtl_Mod_DischargingEnabled);
thing->setStateValue(sunspecStorageGridChargingStateTypeId, optional.gridChargingEnabled); thing->setStateValue(sunspecStorageGridChargingStateTypeId, optional.ChaGriSet);
bool charging = false; bool charging = false;
switch (optional.chargeSatus) { switch (optional.ChaSt) {
case SunSpecStorage::ChargingStatusOff: case SunSpecStorage::ChargingStatusOff:
thing->setStateValue(sunspecStorageStorageStatusStateTypeId, "Off"); thing->setStateValue(sunspecStorageStorageStatusStateTypeId, "Off");
break; break;
@ -797,7 +797,7 @@ void IntegrationPluginSunSpec::onStorageDataReceived(const SunSpecStorage::Stora
thing->setStateValue(sunspecStorageStorageStatusStateTypeId, "Discharging"); thing->setStateValue(sunspecStorageStorageStatusStateTypeId, "Discharging");
break; break;
}; };
double batteryLevel = optional.currentlyAvailableEnergy; double batteryLevel = optional.ChaState;
thing->setStateValue(sunspecStorageBatteryLevelStateTypeId, batteryLevel); thing->setStateValue(sunspecStorageBatteryLevelStateTypeId, batteryLevel);
thing->setStateValue(sunspecStorageBatteryCriticalStateTypeId, (batteryLevel < 5 && !charging)); thing->setStateValue(sunspecStorageBatteryCriticalStateTypeId, (batteryLevel < 5 && !charging));
} }

View File

@ -85,7 +85,7 @@ QUuid SunSpecStorage::setGridCharging(bool enabled)
PV (charging from grid 0 disabled) PV (charging from grid 0 disabled)
GRID (charging from 1 grid enabled*/ GRID (charging from 1 grid enabled*/
uint registerAddress = m_modelModbusStartRegister + Model124Optional::Model124ChargeGridSet; uint registerAddress = m_modelModbusStartRegister + Model124Optional::Model124ChaGriSet;
quint16 value = enabled; quint16 value = enabled;
return m_connection->writeHoldingRegister(registerAddress, value); return m_connection->writeHoldingRegister(registerAddress, value);
} }
@ -96,7 +96,7 @@ QUuid SunSpecStorage::setStorageControlMode(bool chargingEnabled, bool dischargi
quint16 value = ((static_cast<quint16>(chargingEnabled)) | quint16 value = ((static_cast<quint16>(chargingEnabled)) |
(static_cast<quint16>(dischargingEnabled) << 1)) ; (static_cast<quint16>(dischargingEnabled) << 1)) ;
uint modbusRegister = m_modelModbusStartRegister + Model124::Model124ActivateStorageControlMode; uint modbusRegister = m_modelModbusStartRegister + Model124::Model124StorCtl_Mod;
return m_connection->writeHoldingRegister(modbusRegister, value); return m_connection->writeHoldingRegister(modbusRegister, value);
} }
@ -105,7 +105,7 @@ QUuid SunSpecStorage::setChargingRate(int rate)
//Register Name InWRte //Register Name InWRte
/* Defines the maximum charge rate (charge limit). Default is 100% */ /* Defines the maximum charge rate (charge limit). Default is 100% */
uint modbusRegister = m_modelModbusStartRegister + Model124::Model124SetpointMaximumChargingRate; uint modbusRegister = m_modelModbusStartRegister + Model124::Model124WChaGra;
int16_t value = rate * 100; int16_t value = rate * 100;
return m_connection->writeHoldingRegister(modbusRegister, value); return m_connection->writeHoldingRegister(modbusRegister, value);
} }
@ -114,7 +114,7 @@ QUuid SunSpecStorage::setDischargingRate(int charging)
{ {
//Register Name OutWRte //Register Name OutWRte
/* Defines the maximum discharge rate (discharge limit). Default is 100% */ /* Defines the maximum discharge rate (discharge limit). Default is 100% */
uint modbusRegister = m_modelModbusStartRegister + Model124::Model124SetpointMaximumDischargeRate; uint modbusRegister = m_modelModbusStartRegister + Model124::Model124WDisChaGra;
quint16 value = charging * 100; quint16 value = charging * 100;
return m_connection->writeHoldingRegister(modbusRegister, value); return m_connection->writeHoldingRegister(modbusRegister, value);
} }
@ -134,20 +134,26 @@ void SunSpecStorage::onModelDataBlockReceived(SunSpec::ModelId modelId, uint len
switch (modelId) { switch (modelId) {
case SunSpec::ModelIdStorage: { case SunSpec::ModelIdStorage: {
StorageData mandatory; StorageData mandatory;
mandatory.maxCharge = m_connection->convertValueWithSSF(data[Model124SetpointMaximumCharge], data[Model124ScaleFactorMaximumChargeDischargeRate]); mandatory.WChaMax = m_connection->convertValueWithSSF(data[Model124WChaMax], data[Model124WChaMax_SF]);
mandatory.maxChargeRate = m_connection->convertValueWithSSF(data[Model124SetpointMaximumChargingRate], data[Model124ScaleFactorPercentChargeDischargeRate]); mandatory.WChaGra = m_connection->convertValueWithSSF(data[Model124WChaGra], data[Model124WChaDisChaGra_SF]);
mandatory.chargingEnabled = data[Model124ActivateStorageControlMode]&0x01; mandatory.WDisChaGra = m_connection->convertValueWithSSF(data[Model124WDisChaGra], data[Model124WChaDisChaGra_SF]);
mandatory.dischargingEnabled = data[Model124ActivateStorageControlMode]&0x02; mandatory.StorCtl_Mod_ChargingEnabled = data[Model124StorCtl_Mod]&0x01;
mandatory.maxDischargeRate = m_connection->convertValueWithSSF(data[Model124SetpointMaximumDischargeRate], data[Model124ScaleFactorPercentChargeDischargeRate]); mandatory.StorCtl_Mod_DischargingEnabled = data[Model124StorCtl_Mod]&0x02;
StorageDataOptional optional; StorageDataOptional optional;
optional.chargeSatus = ChargingStatus(data[Model124ChargeStatus]); optional.VAChaMax = m_connection->convertValueWithSSF(data[Model124VAChaMax], data[Model124VAChaMax_SF]);
optional.batteryVoltage = m_connection->convertValueWithSSF(data[Model124InternalBatteryVoltage], data[Model124ScaleFactorBatteryVoltage]); optional.MinRsvPct = m_connection->convertValueWithSSF(data[Model124MinRsvPct], data[Model124MinRsvPct_SF]);
optional.storageAvailable = m_connection->convertValueWithSSF(data[Model124StorageAvailableAH], data[Model124ScaleFactorMaximumChargingVA]); optional.ChaState = m_connection->convertValueWithSSF(data[Model124ChaState], data[Model124ChaState_SF]);
optional.gridChargingEnabled = (data[Model124ChargeGridSet] == 1); optional.StorAval = m_connection->convertValueWithSSF(data[Model124StorAval], data[Model124StorAval_SF]);
optional.currentlyAvailableEnergy = m_connection->convertValueWithSSF(data[Model124CurrentlyAvailableEnergyPercent], data[Model124ScaleFactorAvailableEnergyPercent]); optional.InBatV = m_connection->convertValueWithSSF(data[Model124InBatV], data[Model124InBatV_SF]);
optional.ChaSt = ChargingStatus(data[Model124ChaSt]);
optional.OutWRte = m_connection->convertValueWithSSF(data[Model124OutWRte], data[Model124InOutWRte_SF]);
optional.InWRte = m_connection->convertValueWithSSF(data[Model124InWRte], data[Model124InOutWRte_SF]);
optional.InOutWRte_WinTms = data[Model124InOutWRte_WinTms];
optional.InOutWRte_RvrtTms = data[Model124InOutWRte_RvrtTms];
optional.InOutWRte_RmpTms = data[Model124InOutWRte_RmpTms];
optional.ChaGriSet = GridCharge(data[Model124ChaGriSet]);
emit storageDataReceived(mandatory, optional); emit storageDataReceived(mandatory, optional);
} break; } break;
case SunSpec::ModelIdBatteryBaseModel: case SunSpec::ModelIdBatteryBaseModel:
case SunSpec::ModelIdLithiumIonBatteryModel: { case SunSpec::ModelIdLithiumIonBatteryModel: {

View File

@ -75,58 +75,57 @@ public:
Q_ENUM(ChargingStatus) Q_ENUM(ChargingStatus)
enum Model124 { // Mandatory registers enum Model124 { // Mandatory registers
Model124SetpointMaximumCharge = 0, Model124WChaMax = 0,
Model124SetpointMaximumChargingRate = 1, Model124WChaGra = 1,
Model124SetpointMaximumDischargeRate = 2, Model124WDisChaGra = 2,
Model124ActivateStorageControlMode = 3, Model124StorCtl_Mod = 3,
Model124ScaleFactorMaximumCharge = 16, Model124WChaMax_SF = 16,
Model124ScaleFactorMaximumChargeDischargeRate = 17, Model124WChaDisChaGra_SF = 17,
}; };
Q_ENUM(Model124)
enum Model124Optional { // Optional registers enum Model124Optional { // Optional registers
Model124MaximumChargingVA = 4, // VAChaMax Model124VAChaMax = 4,
Model124MinimumReserveStoragePercent = 5, // MinRsvPct Model124MinRsvPct = 5,
Model124CurrentlyAvailableEnergyPercent = 6, // ChaState Model124ChaState = 6,
Model124StorageAvailableAH = 7, // StorAval Model124StorAval = 7,
Model124InternalBatteryVoltage = 8, // InBatV Model124InBatV = 8,
Model124ChargeStatus = 9, // ChaSt Model124ChaSt = 9,
Model124MaxDischargingRatePercent = 10, // OutWRte Model124OutWRte = 10,
Model124MaxChargingRatePercent = 11, Model124InWRte = 11,
Model124ChargeDischargeTimeWindow = 12, Model124InOutWRte_WinTms = 12,
Model124ChargeDischargeTimeout = 13, Model124InOutWRte_RvrtTms = 13,
Model124RampTime = 14, // InOutWRte_RmpTms Model124InOutWRte_RmpTms = 14,
Model124ChargeGridSet = 15, // ChGriSet Model124ChaGriSet = 15,
Model124ScaleFactorMaximumChargingVA = 18, Model124VAChaMax_SF = 18,
Model124ScaleFactorMinimumReservePercentage = 19, Model124MinRsvPct_SF = 19,
Model124ScaleFactorAvailableEnergyPercent = 20, Model124ChaState_SF = 20,
Model124ScaleFactorStateCharge = 21, Model124StorAval_SF = 21,
Model124ScaleFactorBatteryVoltage = 22, Model124InBatV_SF = 22,
Model124ScaleFactorPercentChargeDischargeRate = 23 Model124InOutWRte_SF = 23
}; };
Q_ENUM(Model124Optional) Q_ENUM(Model124Optional)
struct StorageData { struct StorageData {
double maxCharge; // [W] Setpoint for maximum charge. double WChaMax; // [W] Setpoint for maximum charge.
double maxChargeRate; // [%] Setpoint for maximum charging rate. Default is MaxChaRte. double WChaGra; // [%] Setpoint for maximum charging rate. Default is MaxChaRte.
double maxDischargeRate; // [%] Setpoint for maximum discharge rate. Default is MaxDisChaRte. double WDisChaGra; // [%] Setpoint for maximum discharge rate. Default is MaxDisChaRte.
bool chargingEnabled; bool StorCtl_Mod_ChargingEnabled;
bool dischargingEnabled; bool StorCtl_Mod_DischargingEnabled;
}; };
struct StorageDataOptional { struct StorageDataOptional {
// [VA] Setpoint for maximum charging VA. double VAChaMax; // [VA] Setpoint for maximum charging VA.
// [& ]Setpoint for minimum reserve for storage as a percentage of the nominal maximum storage. double MinRsvPct; // [%]Setpoint for minimum reserve for storage as a percentage of the nominal maximum storage.
double currentlyAvailableEnergy; // [%] Currently available energy as a percent of the capacity rating. double ChaState; // [%] Currently available energy as a percent of the capacity rating.
double storageAvailable; // [Ah] State of charge (ChaState) minus storage reserve (MinRsvPct) times capacity rating (AhrRtg). double StorAval; // [Ah] State of charge (ChaState) minus storage reserve (MinRsvPct) times capacity rating (AhrRtg).
double batteryVoltage; // [V] Internal battery voltage. double InBatV; // [V] Internal battery voltage.
ChargingStatus chargeSatus; // Charge status of storage device. Enumerated value. ChargingStatus ChaSt; // Charge status of storage device. Enumerated value.
// [%] Percent of max discharge rate. double OutWRte; // [%] Percent of max discharge rate.
// [%] Percent of max charging rate. double InWRte; // [%] Percent of max charging rate.
// [s] Time window for charge/discharge rate change. uint InOutWRte_WinTms; // [s] Time window for charge/discharge rate change.
// [s] Timeout period for charge/discharge rate. uint InOutWRte_RvrtTms; // [s] Timeout period for charge/discharge rate.
// [s] Ramp time for moving from current setpoint to new setpoint. uint InOutWRte_RmpTms; // [s] Ramp time for moving from current setpoint to new setpoint.
bool gridChargingEnabled; GridCharge ChaGriSet; // 0 = PV, 1 = Grid
}; };
private: private: