// {type:class} // {direction:topDown} // {generate:true} [note: You can stick notes on diagrams too!{bg:cornsilk}] [<>||__iter__()] [Mqtt;<>|ha_restarts;__client;__cb_MqttIsUp|publish();close()] [Proxy|db_stat;entity_prfx;discovery_prfx;proxy_node_id;proxy_unique_id;mqtt:Mqtt;;__ha_restarts|class_init();class_close();;_cb_mqtt_is_up();_register_proxy_stat_home_assistant();_async_publ_mqtt_proxy_stat(key)] [<>||healthy()->bool;disc(shutdown_started=False);create_remote();] [<>]^-.-[<>] [InverterBase|_registry;__ha_restarts;;addr;config_id:str;prot_class:MessageProt;remote:StreamPtr;local:StreamPtr;|healthy()->bool;disc(shutdown_started=False);create_remote();async_publ_mqtt()] [StreamPtr||stream:ProtocolIfc;ifc:AsyncIfc] [<>]^-.-[InverterBase] [InverterG3]-[note: Creates an GEN3 inverter instance with prot_class:Talent{bg:cornsilk}] [InverterG3P]-[note: Creates an GEN3PLUS inverter instance with prot_class:SolarmanV5{bg:cornsilk}] [InverterBase]^[InverterG3] [InverterBase]^[InverterG3P] [Proxy]^[InverterBase] [InverterBase]-2>[StreamPtr] [Proxy]++->[Mqtt;<>] [<>] [StreamPtr]-1>[<>] [StreamPtr]-1>[<>] [<>]use-.->[<>] [ModbusConn|host;port;addr;stream:InverterG3P;|]has-1>[InverterG3P] [ModbusTcp||modbus_loop()]creates-*>[ModbusConn]