Skip to content

Commit

Permalink
for watt use uint32_t as std type to
Browse files Browse the repository at this point in the history
avoid cast problems to uint16_t
  • Loading branch information
helgeerbe committed Mar 13, 2023
1 parent e95acbe commit 9214897
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 16 deletions.
6 changes: 3 additions & 3 deletions include/PowerLimiter.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,14 @@ class PowerLimiterClass {
void init();
void loop();
plStates getPowerLimiterState();
uint16_t getLastRequestedPowewrLimit();
uint32_t getLastRequestedPowewrLimit();
void onMqttMessage(const espMqttClientTypes::MessageProperties& properties, const char* topic, const uint8_t* payload, size_t len, size_t index, size_t total);

private:
uint32_t _lastCommandSent;
uint32_t _lastLoop;
uint32_t _lastPowerMeterUpdate;
uint16_t _lastRequestedPowerLimit;
uint32_t _lastRequestedPowerLimit;
plStates _plState = STATE_DISCOVER;

float _powerMeter1Power;
Expand All @@ -37,7 +37,7 @@ class PowerLimiterClass {
bool canUseDirectSolarPower();
int32_t calcPowerLimit(std::shared_ptr<InverterAbstract> inverter, bool consumeSolarPowerOnly);
void setNewPowerLimit(std::shared_ptr<InverterAbstract> inverter, uint32_t newPowerLimit);
uint16_t getDirectSolarPower();
uint32_t getDirectSolarPower();
float getLoadCorrectedVoltage(std::shared_ptr<InverterAbstract> inverter);
bool isStartThresholdReached(std::shared_ptr<InverterAbstract> inverter);
bool isStopThresholdReached(std::shared_ptr<InverterAbstract> inverter);
Expand Down
8 changes: 4 additions & 4 deletions lib/VeDirectFrameHandler/VeDirectFrameHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,16 @@ typedef struct {
uint8_t ERR; // error code
uint32_t OR; // off reason
uint8_t MPPT; // state of MPP tracker
uint16_t HSDS; // day sequence number 1...365
uint32_t HSDS; // day sequence number 1...365
double V; // battery voltage in V
double I; // battery current in A
double VPV; // panel voltage in V
uint16_t PPV; // panel power in W
uint32_t PPV; // panel power in W
double H19; // yield total kWh
double H20; // yield today kWh
uint16_t H21; // maximum power today W
uint32_t H21; // maximum power today W
double H22; // yield yesterday kWh
uint16_t H23; // maximum power yesterday W
uint32_t H23; // maximum power yesterday W
} veStruct;

class VeDirectFrameHandler {
Expand Down
14 changes: 5 additions & 9 deletions src/PowerLimiter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -119,11 +119,7 @@ void PowerLimiterClass::loop()
dcVoltage, correctedDcVoltage);
MessageOutput.println("[PowerLimiterClass::loop] Stopping inverter...");
inverter->sendPowerControlRequest(Hoymiles.getRadio(), false);

uint16_t newPowerLimit = (uint16_t)config.PowerLimiter_LowerPowerLimit;
inverter->sendActivePowerControlRequest(Hoymiles.getRadio(), newPowerLimit, PowerLimitControlType::AbsolutNonPersistent);
_lastRequestedPowerLimit = newPowerLimit;
_lastCommandSent = millis();
setNewPowerLimit(inverter, config.PowerLimiter_LowerPowerLimit);
return;
}

Expand Down Expand Up @@ -190,7 +186,7 @@ plStates PowerLimiterClass::getPowerLimiterState() {
return _plState;
}

uint16_t PowerLimiterClass::getLastRequestedPowewrLimit() {
uint32_t PowerLimiterClass::getLastRequestedPowewrLimit() {
return _lastRequestedPowerLimit;
}

Expand All @@ -215,7 +211,7 @@ int32_t PowerLimiterClass::calcPowerLimit(std::shared_ptr<InverterAbstract> inve
{
CONFIG_T& config = Configuration.get();

int32_t newPowerLimit = _powerMeter1Power + _powerMeter2Power + _powerMeter3Power;
int32_t newPowerLimit = round(_powerMeter1Power + _powerMeter2Power + _powerMeter3Power);

float efficency = inverter->Statistics()->getChannelFieldValue(TYPE_AC, (ChannelNum_t) config.PowerLimiter_InverterChannelId, FLD_EFF);
uint32_t victronChargePower = this->getDirectSolarPower();
Expand All @@ -234,7 +230,7 @@ int32_t PowerLimiterClass::calcPowerLimit(std::shared_ptr<InverterAbstract> inve

newPowerLimit -= config.PowerLimiter_TargetPowerConsumption;

uint16_t upperPowerLimit = config.PowerLimiter_UpperPowerLimit;
uint32_t upperPowerLimit = config.PowerLimiter_UpperPowerLimit;
if (consumeSolarPowerOnly && (upperPowerLimit > adjustedVictronChargePower)) {
// Battery voltage too low, use Victron solar power (corrected by efficency factor) only
upperPowerLimit = adjustedVictronChargePower;
Expand All @@ -258,7 +254,7 @@ void PowerLimiterClass::setNewPowerLimit(std::shared_ptr<InverterAbstract> inver
_lastCommandSent = millis();
}

uint16_t PowerLimiterClass::getDirectSolarPower()
uint32_t PowerLimiterClass::getDirectSolarPower()
{
if (!canUseDirectSolarPower()) {
return 0;
Expand Down

0 comments on commit 9214897

Please sign in to comment.