mirror of
https://github.com/lumapu/ahoy.git
synced 2025-05-10 07:26:38 +02:00
Improve MQTT Power Limit Handling
This commit is contained in:
parent
ac79828eb5
commit
16d348dc0b
2 changed files with 20 additions and 21 deletions
|
@ -432,7 +432,6 @@ void app::cbMqtt(char* topic, byte* payload, unsigned int length) {
|
||||||
if (std::strcmp(token,"devcontrol")==0){
|
if (std::strcmp(token,"devcontrol")==0){
|
||||||
token = strtok(NULL, "/");
|
token = strtok(NULL, "/");
|
||||||
uint8_t iv_id = std::stoi(token);
|
uint8_t iv_id = std::stoi(token);
|
||||||
uint8_t powerLimitControl = 0;
|
|
||||||
if (iv_id >= 0 && iv_id <= MAX_NUM_INVERTERS){
|
if (iv_id >= 0 && iv_id <= MAX_NUM_INVERTERS){
|
||||||
Inverter<> *iv = this->mSys->getInverterByPos(iv_id);
|
Inverter<> *iv = this->mSys->getInverterByPos(iv_id);
|
||||||
if(NULL != iv) {
|
if(NULL != iv) {
|
||||||
|
@ -442,24 +441,24 @@ void app::cbMqtt(char* topic, byte* payload, unsigned int length) {
|
||||||
case ActivePowerContr: // Active Power Control
|
case ActivePowerContr: // Active Power Control
|
||||||
token = strtok(NULL, "/"); // get ControlMode aka "PowerPF.Desc" in DTU-Pro Code from topic string
|
token = strtok(NULL, "/"); // get ControlMode aka "PowerPF.Desc" in DTU-Pro Code from topic string
|
||||||
if (token == NULL) // default via mqtt ommit the LimitControlMode
|
if (token == NULL) // default via mqtt ommit the LimitControlMode
|
||||||
powerLimitControl = AbsolutNonPersistent;
|
iv->powerLimit[1] = AbsolutNonPersistent;
|
||||||
else
|
else
|
||||||
powerLimitControl = std::stoi(token);
|
iv->powerLimit[1] = std::stoi(token);
|
||||||
// 0x0001 -> relativ limit in percent
|
DPRINTLN(DBG_VERBOSE, F("iv->powerLimit[1]=") + String(iv->powerLimit[1]));
|
||||||
// 0x0000 -> absolut limit in Watt
|
DPRINTLN(DBG_VERBOSE, F("length=") + String(length));
|
||||||
// 0x0101 -> persisten limit in percent (?)
|
if (length<=5){ // if (std::stoi((char*)payload) > 0) more error handling powerlimit needed?
|
||||||
// ...
|
if (iv->powerLimit[1] >= AbsolutNonPersistent && iv->powerLimit[1] <= RelativPersistent){
|
||||||
if (true){ // if (std::stoi((char*)payload) > 0) error handling powerlimit needed?
|
iv->devControlCmd = ActivePowerContr;
|
||||||
iv->devControlCmd = ActivePowerContr;
|
iv->powerLimit[0] = std::stoi((char*)payload);
|
||||||
iv->powerLimit[0] = std::stoi((char*)payload);
|
if (iv->powerLimit[1] & 0x0001)
|
||||||
if (powerLimitControl >= AbsolutNonPersistent && powerLimitControl <= RelativNonPersistent)
|
DPRINTLN(DBG_INFO, F("Power limit for inverter ") + String(iv->id) + F(" set to ") + String(iv->powerLimit[0]) + F("%") );
|
||||||
iv->powerLimit[1] = powerLimitControl;
|
else
|
||||||
if (iv->powerLimit[1] & 0x0001)
|
DPRINTLN(DBG_INFO, F("Power limit for inverter ") + String(iv->id) + F(" set to ") + String(iv->powerLimit[0]) + F("W") );
|
||||||
DPRINTLN(DBG_INFO, F("Power limit for inverter ") + String(iv->id) + F(" set to ") + String(iv->powerLimit[0]) + F("%") );
|
}
|
||||||
else
|
iv->devControlRequest = true;
|
||||||
DPRINTLN(DBG_INFO, F("Power limit for inverter ") + String(iv->id) + F(" set to ") + String(iv->powerLimit[0]) + F("W") );
|
} else {
|
||||||
|
DPRINTLN(DBG_INFO, F("Invalid mqtt payload recevied: ") + String((char*)payload));
|
||||||
}
|
}
|
||||||
iv->devControlRequest = true;
|
|
||||||
break;
|
break;
|
||||||
case TurnOn: // Turn On
|
case TurnOn: // Turn On
|
||||||
iv->devControlCmd = TurnOn;
|
iv->devControlCmd = TurnOn;
|
||||||
|
|
|
@ -58,10 +58,10 @@ typedef enum {
|
||||||
} DevControlCmdType;
|
} DevControlCmdType;
|
||||||
|
|
||||||
typedef enum { // ToDo: to be verified by field tests
|
typedef enum { // ToDo: to be verified by field tests
|
||||||
AbsolutNonPersistent = 0x0000, // 0
|
AbsolutNonPersistent = 0UL, // 0x0000
|
||||||
RelativNonPersistent = 0x0001, // 1
|
RelativNonPersistent = 1UL, // 0x0001
|
||||||
AbsolutPersistent = 0x0100, // 256
|
AbsolutPersistent = 256UL, // 0x0100
|
||||||
RelativPersistent = 0x0101 // 257
|
RelativPersistent = 257UL // 0x0101
|
||||||
} PowerLimitControlType;
|
} PowerLimitControlType;
|
||||||
|
|
||||||
// minimum serial interval
|
// minimum serial interval
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue