diff --git a/SunGather/config-example.yaml b/SunGather/config-example.yaml index 2484180..040fbed 100644 --- a/SunGather/config-example.yaml +++ b/SunGather/config-example.yaml @@ -116,6 +116,23 @@ exports: register: import_from_grid dev_class: power state_class: measurement + topics: + - topic: solar/power/load_power_hybrid + register: load_power_hybrid + - topic: solar/power/total_dc_power + register: total_dc_power + - topic: solar/power/export_power_hybrid + register: export_power_hybrid + - topic: solar/power/current/phase_a + register: phase_a_current + - topic: solar/power/current/phase_b + register: phase_b_current + - topic: solar/power/current/phase_c + register: phase_c_current + - topic: solar/battery/battery_power + register: battery_power + - topic: solar/battery/battery_level + register: battery_level # Publish Registers to PVOutput - name: pvoutput diff --git a/SunGather/exports/mqtt.py b/SunGather/exports/mqtt.py index 3050502..c596319 100644 --- a/SunGather/exports/mqtt.py +++ b/SunGather/exports/mqtt.py @@ -29,6 +29,9 @@ def configure(self, config, inverter): self.ha_sensors = [{}] self.ha_sensors.pop() # Remove null value from list + self.topics = [{}] + self.topics.pop() + if not self.mqtt_config['host']: logging.info(f"MQTT: Host config is required") return False @@ -54,7 +57,15 @@ def configure(self, config, inverter): return False else: self.ha_sensors.append(ha_sensor) - + + if config.get('topics'): + for topic in config.get('topics'): + if not inverter.validateRegister(topic['register']): + logging.error(f"MQTT: Configured to use {topic['register']} but not configured to scrape this register") + return False + else: + self.topics.append(topic) + return True def on_connect(self, client, userdata, flags, rc): @@ -119,6 +130,10 @@ def publish(self, inverter): self.mqtt_queue.append(self.mqtt_client.publish(ha_topic, json.dumps(config_msg), retain=True, qos=1).mid) self.ha_discovery_published = True logging.info("MQTT: Published Home Assistant Discovery messages") + if self.topics: + for topic in self.topics: + self.mqtt_queue.append(self.mqtt_client.publish(topic.get('topic'), inverter.getRegisterValue(topic.get('register')), qos=0).mid) + logging.info("MQTT: Published custom mqtt topics") payload = json.dumps(inverter.inverter_config | inverter.client_config | inverter.latest_scrape).replace('"', '\"') logging.debug(f"MQTT: Publishing Registers: {self.mqtt_config['topic']} : {payload}")