|
14 | 14 | Tag-Liste: Tags, mit denen der Ladepunkt freigeschaltet werden kann. Ist diese leer, kann mit jedem Tag der Ladepunkt |
15 | 15 | freigeschaltet werden. |
16 | 16 | """ |
| 17 | +import copy |
17 | 18 | from dataclasses import asdict |
18 | 19 | import dataclasses |
19 | 20 | import logging |
|
33 | 34 | from control.ev.ev import Ev |
34 | 35 | from control import phase_switch |
35 | 36 | from control.chargepoint.chargepoint_state import CHARGING_STATES, ChargepointState |
| 37 | +from helpermodules.abstract_plans import ScheduledChargingPlan, TimeChargingPlan |
36 | 38 | from helpermodules.broker import BrokerClient |
37 | 39 | from helpermodules.phase_mapping import convert_single_evu_phase_to_cp_phase |
38 | 40 | from helpermodules.pub import Pub |
@@ -778,8 +780,41 @@ def __get_payload(client, userdata, msg): |
778 | 780 | Pub().pub(topic, "") |
779 | 781 |
|
780 | 782 | def update_charge_template(self, charge_template: ChargeTemplate) -> None: |
781 | | - Pub().pub(f"openWB/set/chargepoint/{self.num}/set/charge_template", |
782 | | - dataclasses.asdict(charge_template.data)) |
| 783 | + self._clear_template_topics(f'openWB/chargepoint/{self.num}/set/charge_template/#') |
| 784 | + self.data.set.charge_template = copy.deepcopy(charge_template) |
| 785 | + pub_template = copy.deepcopy(self.data.set.charge_template.data) |
| 786 | + pub_template = dataclasses.asdict(pub_template) |
| 787 | + pub_template["chargemode"]["scheduled_charging"]["plans"].clear() |
| 788 | + pub_template["time_charging"]["plans"].clear() |
| 789 | + Pub().pub(f"openWB/set/chargepoint/{self.num}/set/charge_template", pub_template) |
| 790 | + for id, plan in self.data.set.charge_template.data.time_charging.plans.items(): |
| 791 | + Pub().pub(f"openWB/set/chargepoint/{self.num}/set/charge_template/time_charging/plans/{id}", |
| 792 | + dataclasses.asdict(plan)) |
| 793 | + for id, plan in self.data.set.charge_template.data.chargemode.scheduled_charging.plans.items(): |
| 794 | + Pub().pub(f"openWB/set/chargepoint/{self.num}/set/charge_template/chargemode/scheduled_charging/plans/{id}", |
| 795 | + dataclasses.asdict(plan)) |
| 796 | + |
| 797 | + def update_bare_charge_template(self, charge_template: ChargeTemplate) -> None: |
| 798 | + self._clear_template_topics(f"openWB/chargepoint/{self.num}/set/charge_template") |
| 799 | + self.data.set.charge_template = copy.deepcopy(charge_template) |
| 800 | + pub_template = copy.deepcopy(self.data.set.charge_template.data) |
| 801 | + pub_template = dataclasses.asdict(pub_template) |
| 802 | + pub_template["chargemode"]["scheduled_charging"]["plans"].clear() |
| 803 | + pub_template["time_charging"]["plans"].clear() |
| 804 | + Pub().pub(f"openWB/set/chargepoint/{self.num}/set/charge_template", pub_template) |
| 805 | + |
| 806 | + def update_charge_template_scheduled_plan(self, plan: ScheduledChargingPlan) -> None: |
| 807 | + self._clear_template_topics( |
| 808 | + f"openWB/chargepoint/{self.num}/set/charge_template/chargemode/scheduled_charging/plans/{plan.id}") |
| 809 | + Pub().pub(f"openWB/set/chargepoint/{self.num}" |
| 810 | + f"/set/charge_template/chargemode/scheduled_charging/plans/{plan.id}", |
| 811 | + dataclasses.asdict(plan)) |
| 812 | + |
| 813 | + def update_charge_template_time_plan(self, plan: TimeChargingPlan) -> None: |
| 814 | + self._clear_template_topics( |
| 815 | + f"openWB/chargepoint/{self.num}/set/charge_template/time_charging/plans/{plan.id}") |
| 816 | + Pub().pub(f"openWB/set/chargepoint/{self.num}/set/charge_template/time_charging/plans/{plan.id}", |
| 817 | + dataclasses.asdict(plan)) |
783 | 818 |
|
784 | 819 | def _pub_connected_vehicle(self, vehicle: Ev): |
785 | 820 | """ published die Daten, die zur Anzeige auf der Hauptseite benötigt werden. |
@@ -857,7 +892,8 @@ def chargemode_support_phase_switch(self) -> bool: |
857 | 892 | scheduled_auto_switch = ( |
858 | 893 | control_parameter.chargemode == Chargemode.SCHEDULED_CHARGING and |
859 | 894 | control_parameter.submode == Chargemode.PV_CHARGING and |
860 | | - phases_to_use_pv == 0) |
| 895 | + self.data.set.charge_template.data.chargemode.scheduled_charging.plans[ |
| 896 | + str(self.data.control_parameter.current_plan)].phases_to_use_pv == 0) |
861 | 897 | return (pv_auto_switch or scheduled_auto_switch) |
862 | 898 |
|
863 | 899 | def failed_phase_switches_reached(self) -> bool: |
|
0 commit comments