from components.actor import HeaterFactory from components.sensor import TempSensorFactory from components.plant.pot import Pot from components.plant.pot_real import PotReal class PlantFactory: """Builds the heater/pot/sensor trio together, as one consistent rig, rather than each picked independently via its own *_name config key - sim and real hardware are never actually mixed and matched in practice, so Controller.plant_name alone now decides all three (see server/brewpi.py). Delegates the actual construction to HeaterFactory/TempSensorFactory rather than importing HeaterHendi/TempSensor_max31865 directly, so those classes' hardware-only deps (spidev, pyserial) stay lazily imported - only actually needed when plant_name picks the real rig.""" @staticmethod def create(plant_name, dt, heater_config): if "sim" in plant_name: heater = HeaterFactory.create("sim", heater_config) pot = Pot(dt) sensor = TempSensorFactory.create("sim", temp_offset=-0.15, variance=0.01) return heater, pot, sensor heater = HeaterFactory.create("Hendi", heater_config) pot = PotReal() sensor = TempSensorFactory.create("max31865", temp_offset=-0.15) return heater, pot, sensor