Prechádzať zdrojové kódy

Handle removing old discovery IDs

Christopher Mullins 6 rokov pred
rodič
commit
07e557f5af

+ 11 - 1
lib/MQTT/HomeAssistantDiscoveryClient.cpp

@@ -15,7 +15,17 @@ void HomeAssistantDiscoveryClient::sendDiscoverableDevices(const std::map<String
   }
 }
 
-void HomeAssistantDiscoveryClient::removeConfig(const char* alias, const BulbId& bulbId) {
+void HomeAssistantDiscoveryClient::removeOldDevices(const std::map<uint32_t, BulbId>& aliases) {
+#ifdef MQTT_DEBUG
+  Serial.println(F("HomeAssistantDiscoveryClient: Removing discoverable devices..."));
+#endif
+
+  for (auto itr = aliases.begin(); itr != aliases.end(); ++itr) {
+    removeConfig(itr->second);
+  }
+}
+
+void HomeAssistantDiscoveryClient::removeConfig(const BulbId& bulbId) {
   // Remove by publishing an empty message
   String topic = buildTopic(bulbId);
   mqttClient->send(topic.c_str(), "", true);

+ 2 - 1
lib/MQTT/HomeAssistantDiscoveryClient.h

@@ -9,9 +9,10 @@ public:
   HomeAssistantDiscoveryClient(Settings& settings, MqttClient* mqttClient);
 
   void addConfig(const char* alias, const BulbId& bulbId);
-  void removeConfig(const char* alias, const BulbId& bulbId);
+  void removeConfig(const BulbId& bulbId);
 
   void sendDiscoverableDevices(const std::map<String, BulbId>& aliases);
+  void removeOldDevices(const std::map<uint32_t, BulbId>& aliases);
 
 private:
   Settings& settings;

+ 3 - 0
src/main.cpp

@@ -244,6 +244,9 @@ void applySettings() {
       if (settings.homeAssistantDiscoveryPrefix.length() > 0) {
         HomeAssistantDiscoveryClient discoveryClient(settings, mqttClient);
         discoveryClient.sendDiscoverableDevices(settings.groupIdAliases);
+        discoveryClient.removeOldDevices(settings.deletedGroupIdAliases);
+
+        settings.deletedGroupIdAliases.clear();
       }
     });