diff --git a/tools/esp8266/app.cpp b/tools/esp8266/app.cpp index 8399859e..fb747e6c 100644 --- a/tools/esp8266/app.cpp +++ b/tools/esp8266/app.cpp @@ -505,16 +505,24 @@ void app::cbMqtt(char* topic, byte* payload, unsigned int length) { const char *token = strtok(topic, "/"); while (token != NULL) { - if (strcmp(token,"devcontrol")==0){ + if (strcmp(token,"devcontrol")==0) + { token = strtok(NULL, "/"); uint8_t iv_id = std::stoi(token); - 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); - if(NULL != iv) { - if (!iv->devControlRequest) { // still pending + if(NULL != iv) + { + if (!iv->devControlRequest) // still pending + { token = strtok(NULL, "/"); - switch ( std::stoi(token) ){ - case ActivePowerContr: // Active Power Control + + switch ( std::stoi(token) ) + { + // Active Power Control + case ActivePowerContr: token = strtok(NULL, "/"); // get ControlMode aka "PowerPF.Desc" in DTU-Pro Code from topic string if (token == NULL) // default via mqtt ommit the LimitControlMode iv->powerLimit[1] = AbsolutNonPersistent; @@ -534,22 +542,30 @@ void app::cbMqtt(char* topic, byte* payload, unsigned int length) { DPRINTLN(DBG_INFO, F("Invalid mqtt payload recevied: ") + String((char*)payload)); } break; - case TurnOn: // Turn On + + // Turn On + case TurnOn: iv->devControlCmd = TurnOn; DPRINTLN(DBG_INFO, F("Turn on inverter ") + String(iv->id) ); iv->devControlRequest = true; break; - case TurnOff: // Turn Off + + // Turn Off + case TurnOff: iv->devControlCmd = TurnOff; DPRINTLN(DBG_INFO, F("Turn off inverter ") + String(iv->id) ); iv->devControlRequest = true; break; - case Restart: // Restart + + // Restart + case Restart: iv->devControlCmd = Restart; DPRINTLN(DBG_INFO, F("Restart inverter ") + String(iv->id) ); iv->devControlRequest = true; break; - case ReactivePowerContr: // Reactive Power Control + + // Reactive Power Control + case ReactivePowerContr: iv->devControlCmd = ReactivePowerContr; if (true){ // if (std::stoi((char*)payload) > 0) error handling powerlimit needed? iv->devControlCmd = ReactivePowerContr; @@ -559,16 +575,21 @@ void app::cbMqtt(char* topic, byte* payload, unsigned int length) { iv->devControlRequest = true; } break; - case PFSet: // Set Power Factor + + // Set Power Factor + case PFSet: // iv->devControlCmd = PFSet; // uint16_t power_factor = std::stoi(strtok(NULL, "/")); DPRINTLN(DBG_INFO, F("Set Power Factor not implemented for inverter ") + String(iv->id) ); break; - case CleanState_LockAndAlarm: // CleanState lock & alarm + + // CleanState lock & alarm + case CleanState_LockAndAlarm: iv->devControlCmd = CleanState_LockAndAlarm; DPRINTLN(DBG_INFO, F("CleanState lock & alarm for inverter ") + String(iv->id) ); iv->devControlRequest = true; break; + default: DPRINTLN(DBG_INFO, "Not implemented"); break;