diff --git a/src/mqtt/MQTT.cpp b/src/mqtt/MQTT.cpp index 40d03de63..f9f114039 100644 --- a/src/mqtt/MQTT.cpp +++ b/src/mqtt/MQTT.cpp @@ -66,6 +66,20 @@ inline void onReceiveProto(char *topic, byte *payload, size_t length) (strcmp(e.channel_id, channels.getGlobalId(ch.index)) == 0 && ch.settings.downlink_enabled))) { return; } + + bool anyChannelHasDownlink = false; + size_t numChan = channels.getNumChannels(); + for (size_t i = 0; i < numChan; ++i) { + const auto &c = channels.getByIndex(i); + if (c.settings.downlink_enabled) { + anyChannelHasDownlink = true; + break; + } + } + + if (strcmp(e.channel_id, "PKI") == 0 && !anyChannelHasDownlink) { + return; + } // Generate node ID from nodenum for comparison std::string nodeId = nodeDB->getNodeId(); if (strcmp(e.gateway_id, nodeId.c_str()) == 0) {