diff --git a/packages/control/process.py b/packages/control/process.py index b852f9be90..09abe7ab02 100644 --- a/packages/control/process.py +++ b/packages/control/process.py @@ -2,7 +2,7 @@ """ import logging from threading import Thread -from typing import List +from typing import List, Optional from control.bat_all import get_bat_components_by_controllability from control.chargelog import chargelog @@ -91,7 +91,9 @@ def process_algorithm_results(self) -> None: else: consumer.data.get.state_str = "Verbraucher wird gestartet... " - modules_threads.append(self._start_consumer(consumer)) + consumer_thread = self._start_consumer(consumer) + if consumer_thread is not None: + modules_threads.append(consumer_thread) except Exception: log.exception("Fehler im Process-Modul für Verbaucher "+str(consumer)) for action in data.data.io_actions.actions.values(): @@ -192,12 +194,14 @@ def _update_state_consumer(self, consumer: Consumer) -> None: log.info(f"Verbraucher{consumer.num}: set current {consumer.data.set.current} A, " f"state {ChargepointState(control_parameter.state).name}") - def _start_consumer(self, consumer: Consumer) -> Thread: - if consumer.data.usage.type in (ConsumerUsage.CONTINUOUS, - ConsumerUsage.SUSPENDABLE_ONOFF): + def _start_consumer(self, consumer: Consumer) -> Optional[Thread]: + if consumer.data.usage.type == ConsumerUsage.METER_ONLY: + return None + elif consumer.data.usage.type in (ConsumerUsage.CONTINUOUS, + ConsumerUsage.SUSPENDABLE_ONOFF): return Thread( target=consumer.module.switch_on if consumer.data.set.current > 0 else consumer.module.switch_off, - name=f"set current consumer{consumer.num}") + name=f"set state consumer{consumer.num}") elif consumer.data.usage.type == ConsumerUsage.SELF_CONTROLLED: current_values = CurrentValues( bat_power=data.data.bat_all_data.data.get.power, @@ -210,8 +214,11 @@ def _start_consumer(self, consumer: Consumer) -> Thread: return Thread(target=consumer.module.send_values, args=(current_values,), name=f"send values consumer{consumer.num}") - else: + elif consumer.data.usage.type == ConsumerUsage.SUSPENDABLE_TUNABLE: set_limit_data = SetLimitData(max_power=consumer.data.config.max_power) return Thread(target=consumer.module.set_power_limit, args=(consumer.data.set.power, set_limit_data), - name=f"set current consumer{consumer.num}") + name=f"set power consumer{consumer.num}") + else: + log.error(f"Verbraucher{consumer.num}: Unbekannter usage.type {consumer.data.usage.type}") + return None diff --git a/packages/modules/loadvars.py b/packages/modules/loadvars.py index 81e9e6b187..6b17b00452 100644 --- a/packages/modules/loadvars.py +++ b/packages/modules/loadvars.py @@ -3,6 +3,7 @@ from typing import List from control import data +from control.consumer.usage import ConsumerUsage from modules.common.abstract_io import AbstractIoDevice from modules.common.store._tariff import get_price_value_store from modules.utils import wait_for_module_update_completed @@ -64,9 +65,11 @@ def _set_values(self) -> List[str]: log.exception(f"Fehler im loadvars-Modul bei Element {cp.num}") for consumer in data.data.consumer_data.values(): try: - modules_threads.append(Thread(target=consumer.module.update, - args=(), - name=f"set values consumer{consumer.data.module.id}")) + if ConsumerUsage.METER_ONLY.value in consumer.module.config.usage: + # Nur Verbraucher mit eingebautem Zähler haben eine update-Funktion. + modules_threads.append(Thread(target=consumer.module.update, + args=(), + name=f"set values consumer{consumer.data.module.id}")) except Exception: log.exception(f"Fehler im loadvars-Modul bei Element {consumer.num}") return joined_thread_handler(modules_threads, data.data.general_data.data.control_interval/3)