diff --git a/mpod.cpp b/mpod.cpp index 08e79eab70fe49d84b272baf20dab534cef4f19d..4ceb264867b8642de2ca540992e7a299ca29412f 100644 --- a/mpod.cpp +++ b/mpod.cpp @@ -142,6 +142,11 @@ bool MPOD::message(const SNMP::Message *message) { // that far. const char *channel = strrchr(varbind->getName(), '.') + 1; _channel = atoi(channel); + + // MPOD SNMP channel 0 does not exist (starts from 1; U0 is 1). + // Mark the channel as 0 if invalid data was received. + // This can be used later to validate a sent request. + _channel = found ? _channel : 0; } // Return true if nodes found, that means this is a valid response from MPOD return found; diff --git a/rest.cpp b/rest.cpp index 2f1b0aef913d5460618ed72a54d48bf336c2c6bc..e4bbea1f025e0beae09f5fd353127b3718a6f917 100644 --- a/rest.cpp +++ b/rest.cpp @@ -161,7 +161,7 @@ void sendSNMP() { if (output != NONE && channel != 0) { setChannelStateAndWait(&ipAddr, channel, output); - success = true; // validates input parameters, not MPOD status, reported separately + success = mpod.getChannel() ? true : false; } String http_msg = "{\n"; @@ -285,7 +285,12 @@ void pollMPODChannel() { delay(MPOD_UPDATE_LATENCY); snmp.loop(); // Force loop to update now - ret = mpod.toJSON(); + if (mpod.getChannel()) { + ret = mpod.toJSON(); + } else { + ret = "\"reason\": \"Invalid channel\""; + channel = 0; + } } String http_msg = "{\n";