from typing import Optional from akkudoktoreos.core.coreabc import SingletonMixin from akkudoktoreos.core.logging import get_logger from akkudoktoreos.devices.battery import Battery from akkudoktoreos.devices.devicesabc import DevicesBase from akkudoktoreos.devices.generic import HomeAppliance from akkudoktoreos.devices.inverter import Inverter from akkudoktoreos.devices.settings import DevicesCommonSettings logger = get_logger(__name__) class Devices(SingletonMixin, DevicesBase): def __init__(self, settings: Optional[DevicesCommonSettings] = None): if hasattr(self, "_initialized"): return super().__init__() if settings is None: settings = self.config.devices if settings is None: return # initialize devices if settings.batteries is not None: for battery_params in settings.batteries: self.add_device(Battery(battery_params)) if settings.inverters is not None: for inverter_params in settings.inverters: self.add_device(Inverter(inverter_params)) if settings.home_appliances is not None: for home_appliance_params in settings.home_appliances: self.add_device(HomeAppliance(home_appliance_params)) self.post_setup() def post_setup(self) -> None: for device in self.devices.values(): device.post_setup() # Initialize the Devices simulation, it is a singleton. devices = Devices() def get_devices() -> Devices: """Gets the EOS Devices simulation.""" return devices