1010from sunsynk .sunsynk import HoldingUnit
1111
1212from .a_inverter import STATE , AInverter
13- from .a_sensor import MQTT
1413from .options import InverterOptions , Options , is_solarman_port
1514from .sensor_options import SOPT
1615
1716_LOG = logging .getLogger (":" )
1817
1918
20- HASS_DISCOVERY_INFO_UPDATE_QUEUE : set [Sensor ] = set ()
21- """Update Sensor discovery info."""
22-
23-
2419async def callback_discovery_info (now : int ) -> None :
25- """Update HASS discovery & write RWSensors."""
26- # Flush any pending discovery info updates
27- if HASS_DISCOVERY_INFO_UPDATE_QUEUE :
28- for ist in STATE :
29- ist .hass_create_discovery_info ()
30- await MQTT .publish_discovery_info ()
31- HASS_DISCOVERY_INFO_UPDATE_QUEUE .clear ()
32-
33- # Publish statistics
20+ """Publish inverter callback statistics."""
3421 if now % 120 == 0 :
3522 for ist in STATE :
3623 await ist .publish_stats (120 )
@@ -41,11 +28,15 @@ def sensor_on_update(sen: Sensor, _new: ValType, _old: ValType) -> None:
4128 if sen not in SOPT or not SOPT [sen ].affects :
4229 return
4330 _LOG .debug (
44- "%s changed: Enqueue discovery info updates for %s" ,
31+ "%s changed: Rebuild discovery for %s" ,
4532 sen .name ,
4633 ", " .join (s .id for s in SOPT [sen ].affects ),
4734 )
48- HASS_DISCOVERY_INFO_UPDATE_QUEUE .update (SOPT [sen ].affects )
35+ for ist in STATE :
36+ if ist .mqtt_dev .id == "" :
37+ continue
38+ ist .hass_create_discovery_info ()
39+ ist .mqtt_dev .flag_discovery ()
4940
5041
5142def _shared_modbus_connection (opt : Options , * , port : str ) -> ModbusConnection :
0 commit comments