Browse Source

cbMqtt better reading

pull/361/head
DanielR92 2 years ago
parent
commit
661b559768
  1. 45
      tools/esp8266/app.cpp

45
tools/esp8266/app.cpp

@ -505,16 +505,24 @@ void app::cbMqtt(char* topic, byte* payload, unsigned int length) {
const char *token = strtok(topic, "/"); const char *token = strtok(topic, "/");
while (token != NULL) while (token != NULL)
{ {
if (strcmp(token,"devcontrol")==0){ if (strcmp(token,"devcontrol")==0)
{
token = strtok(NULL, "/"); token = strtok(NULL, "/");
uint8_t iv_id = std::stoi(token); 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); Inverter<> *iv = this->mSys->getInverterByPos(iv_id);
if(NULL != iv) { if(NULL != iv)
if (!iv->devControlRequest) { // still pending {
if (!iv->devControlRequest) // still pending
{
token = strtok(NULL, "/"); 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 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
iv->powerLimit[1] = AbsolutNonPersistent; 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)); DPRINTLN(DBG_INFO, F("Invalid mqtt payload recevied: ") + String((char*)payload));
} }
break; break;
case TurnOn: // Turn On
// Turn On
case TurnOn:
iv->devControlCmd = TurnOn; iv->devControlCmd = TurnOn;
DPRINTLN(DBG_INFO, F("Turn on inverter ") + String(iv->id) ); DPRINTLN(DBG_INFO, F("Turn on inverter ") + String(iv->id) );
iv->devControlRequest = true; iv->devControlRequest = true;
break; break;
case TurnOff: // Turn Off
// Turn Off
case TurnOff:
iv->devControlCmd = TurnOff; iv->devControlCmd = TurnOff;
DPRINTLN(DBG_INFO, F("Turn off inverter ") + String(iv->id) ); DPRINTLN(DBG_INFO, F("Turn off inverter ") + String(iv->id) );
iv->devControlRequest = true; iv->devControlRequest = true;
break; break;
case Restart: // Restart
// Restart
case Restart:
iv->devControlCmd = Restart; iv->devControlCmd = Restart;
DPRINTLN(DBG_INFO, F("Restart inverter ") + String(iv->id) ); DPRINTLN(DBG_INFO, F("Restart inverter ") + String(iv->id) );
iv->devControlRequest = true; iv->devControlRequest = true;
break; break;
case ReactivePowerContr: // Reactive Power Control
// Reactive Power Control
case ReactivePowerContr:
iv->devControlCmd = ReactivePowerContr; iv->devControlCmd = ReactivePowerContr;
if (true){ // if (std::stoi((char*)payload) > 0) error handling powerlimit needed? if (true){ // if (std::stoi((char*)payload) > 0) error handling powerlimit needed?
iv->devControlCmd = ReactivePowerContr; iv->devControlCmd = ReactivePowerContr;
@ -559,16 +575,21 @@ void app::cbMqtt(char* topic, byte* payload, unsigned int length) {
iv->devControlRequest = true; iv->devControlRequest = true;
} }
break; break;
case PFSet: // Set Power Factor
// Set Power Factor
case PFSet:
// iv->devControlCmd = PFSet; // iv->devControlCmd = PFSet;
// uint16_t power_factor = std::stoi(strtok(NULL, "/")); // uint16_t power_factor = std::stoi(strtok(NULL, "/"));
DPRINTLN(DBG_INFO, F("Set Power Factor not implemented for inverter ") + String(iv->id) ); DPRINTLN(DBG_INFO, F("Set Power Factor not implemented for inverter ") + String(iv->id) );
break; break;
case CleanState_LockAndAlarm: // CleanState lock & alarm
// CleanState lock & alarm
case CleanState_LockAndAlarm:
iv->devControlCmd = CleanState_LockAndAlarm; iv->devControlCmd = CleanState_LockAndAlarm;
DPRINTLN(DBG_INFO, F("CleanState lock & alarm for inverter ") + String(iv->id) ); DPRINTLN(DBG_INFO, F("CleanState lock & alarm for inverter ") + String(iv->id) );
iv->devControlRequest = true; iv->devControlRequest = true;
break; break;
default: default:
DPRINTLN(DBG_INFO, "Not implemented"); DPRINTLN(DBG_INFO, "Not implemented");
break; break;

Loading…
Cancel
Save