PlantFactory.create() now accepts sensor_config dict; extracts type and
kwargs, falls back to sigma=0.05/temp_offset=-0.15 defaults. brewpi.py
passes config.get('TempSensor', {}). Templates updated with full
TempSensor sections.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
38 lines
1.6 KiB
Python
38 lines
1.6 KiB
Python
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, sensor_config=None):
|
|
sensor_config = sensor_config or {}
|
|
if "sim" in plant_name:
|
|
heater = HeaterFactory.create("sim", heater_config)
|
|
pot = Pot(dt)
|
|
sensor_type = sensor_config.get('type', 'sim')
|
|
sensor_params = {k: v for k, v in sensor_config.items() if k != 'type'}
|
|
sensor_params.setdefault('temp_offset', -0.15)
|
|
sensor_params.setdefault('sigma', 0.05)
|
|
sensor = TempSensorFactory.create(sensor_type, **sensor_params)
|
|
return heater, pot, sensor
|
|
|
|
heater = HeaterFactory.create("Hendi", heater_config)
|
|
pot = PotReal()
|
|
sensor_params = {k: v for k, v in sensor_config.items() if k != 'type'}
|
|
sensor_params.setdefault('temp_offset', -0.15)
|
|
sensor = TempSensorFactory.create("max31865", **sensor_params)
|
|
return heater, pot, sensor
|