diff --git a/.gitignore b/.gitignore index b44b30afe8..c2d4c15890 100644 --- a/.gitignore +++ b/.gitignore @@ -16,11 +16,14 @@ data/config/eebus/certs/* data/log/* data/charge_log/* data/daily_log/* +data/daily_totals/* data/monthly_log/* +data/monthly_totals/* data/backup/*.tar.gz data/backup/*.openwb-backup* data/restore/*.tar.gz data/data_migration/*.tar.gz +data/generate_totals.lock ramdisk/* web/lastcommit !.gitignore diff --git a/data/config/mosquitto/public/default-dynamic-security.json b/data/config/mosquitto/public/default-dynamic-security.json index e20de3a77d..8e0cbba91a 100644 --- a/data/config/mosquitto/public/default-dynamic-security.json +++ b/data/config/mosquitto/public/default-dynamic-security.json @@ -81,7 +81,7 @@ "anonymousGroup": "anonymous", "roles": [ { - "rolename": "openwb-version:9", + "rolename": "openwb-version:10", "textname": "openWB Versionsnummer", "textdescription": "Diese Rolle ist ein Platzhalter für die openWB Versionsnummer und wird automatisch aktualisiert. Sie hat keine direkten Berechtigungen.", "acls": [] @@ -194,6 +194,12 @@ "priority": 0, "allow": true }, + { + "acltype": "publishClientReceive", + "topic": "openWB/system/log_data_ready", + "priority": 0, + "allow": true + }, { "acltype": "publishClientReceive", "topic": "openWB/system/usage_terms_acknowledged", @@ -500,6 +506,12 @@ "topic": "openWB/system/security/access/Status", "priority": 0, "allow": true + }, + { + "acltype": "publishClientReceive", + "topic": "openWB/counter/get/loadmanagement_prios", + "priority": 0, + "allow": true } ] }, @@ -1686,6 +1698,18 @@ "topic": "openWB/chargepoint/+/config", "priority": 0, "allow": true + }, + { + "acltype": "publishClientReceive", + "topic": "openWB/consumer/+/module", + "priority": 0, + "allow": true + }, + { + "acltype": "publishClientReceive", + "topic": "openWB/consumer/+/extra_meter", + "priority": 0, + "allow": true } ] }, @@ -1799,19 +1823,73 @@ "acls": [ { "acltype": "publishClientSend", - "topic": "openWB/consumer/+/config", + "topic": "openWB/set/command/+/todo/addConsumer", "priority": 0, "allow": true }, { "acltype": "publishClientSend", - "topic": "openWB/consumer/+/module", + "topic": "openWB/set/command/+/todo/removeConsumer", "priority": 0, "allow": true }, { "acltype": "publishClientSend", - "topic": "openWB/consumer/+/usage", + "topic": "openWB/set/command/+/todo/addConsumerSchedulePlan", + "priority": 0, + "allow": true + }, + { + "acltype": "publishClientSend", + "topic": "openWB/set/command/+/todo/removeConsumerSchedulePlan", + "priority": 0, + "allow": true + }, + { + "acltype": "publishClientSend", + "topic": "openWB/set/command/+/todo/addConsumerTimePlan", + "priority": 0, + "allow": true + }, + { + "acltype": "publishClientSend", + "topic": "openWB/set/command/+/todo/removeConsumerTimePlan", + "priority": 0, + "allow": true + }, + { + "acltype": "publishClientSend", + "topic": "openWB/set/consumer/+/config", + "priority": 0, + "allow": true + }, + { + "acltype": "publishClientSend", + "topic": "openWB/set/consumer/+/module", + "priority": 0, + "allow": true + }, + { + "acltype": "publishClientSend", + "topic": "openWB/set/consumer/+/usage", + "priority": 0, + "allow": true + }, + { + "acltype": "publishClientSend", + "topic": "openWB/set/consumer/+/extra_meter", + "priority": 0, + "allow": true + }, + { + "acltype": "publishClientSend", + "topic": "openWB/set/general/legacy_smarthome_active", + "priority": 0, + "allow": true + }, + { + "acltype": "publishClientReceive", + "topic": "openWB/system/security/access/ConsumerConfiguration", "priority": 0, "allow": true }, @@ -1833,6 +1911,42 @@ "priority": 0, "allow": true }, + { + "acltype": "publishClientReceive", + "topic": "openWB/consumer/+/extra_meter", + "priority": 0, + "allow": true + }, + { + "acltype": "publishClientReceive", + "topic": "openWB/general/extern", + "priority": 0, + "allow": true + }, + { + "acltype": "publishClientReceive", + "topic": "openWB/general/legacy_smarthome_active", + "priority": 0, + "allow": true + }, + { + "acltype": "publishClientReceive", + "topic": "openWB/counter/get/hierarchy", + "priority": 0, + "allow": true + }, + { + "acltype": "publishClientReceive", + "topic": "openWB/system/device/+/config", + "priority": 0, + "allow": true + }, + { + "acltype": "publishClientReceive", + "topic": "openWB/system/device/+/component/+/config", + "priority": 0, + "allow": true + }, { "acltype": "publishClientReceive", "topic": "openWB/system/configurable/consumers", diff --git a/packages/control/algorithm/bidi_charging.py b/packages/control/algorithm/bidi_charging.py index 40aea05879..434c3e9fc4 100644 --- a/packages/control/algorithm/bidi_charging.py +++ b/packages/control/algorithm/bidi_charging.py @@ -1,10 +1,17 @@ import logging from control import data +from control.chargemode import Chargemode from control.algorithm.chargemodes import CONSIDERED_CHARGE_MODES_BIDI_DISCHARGE from control.algorithm.filter_chargepoints import filtered_loads_to_str, get_loads_by_chargemodes from control.chargepoint.chargepoint import Chargepoint from helpermodules.phase_handling import voltages_mean +from control.limiting_value import LoadmanagementLimit +from control.loadmanagement import Loadmanagement + +import control.algorithm.common as common +from typing import List + log = logging.getLogger(__name__) @@ -13,33 +20,126 @@ def __init__(self): pass def set_bidi(self): + """Setzt den verfügbaren Strom für bidirektionales Laden und Entladen. + Dafür gibt es jeweils eine Grenze für das Laden und Entladen + (raw_currents_left und raw_exported_currents_left). + Entladen erhöht die verfügbare Grenze für das Laden, während Laden + die verfügbare Grenze für das Entladen erhöht. + Das Lastmanagement stellt sicher, dass die Summe der Ströme die am + Zähler verfügbare Leistung nicht überschreitet. + """ grid_counter = data.data.counter_all_data.get_evu_counter() log.debug(f"Nullpunktanpassung {grid_counter.data.set.surplus_power_left}W") - zero_point_adjustment = grid_counter + + # CPs nach Modus filtern, dann verfügbare Ströme gegen alle relevanten Counter-Limits begrenzen. + # -> Um bei mehreren Bidi-CPs das Entladen bei der Nullpunktanpassung gleichmäßig zu verteilen preferenced_cps = get_loads_by_chargemodes(CONSIDERED_CHARGE_MODES_BIDI_DISCHARGE) if preferenced_cps: log.info(f"Verbraucher {filtered_loads_to_str(preferenced_cps)}") while len(preferenced_cps): cp: Chargepoint = preferenced_cps[0] - zero_point_adjustment = grid_counter.data.set.surplus_power_left / len(preferenced_cps) - log.debug(f"Nullpunktanpassung für LP{cp.num}: verbleibende Leistung {zero_point_adjustment}W") - missing_currents = [zero_point_adjustment / cp.data.get.phases_in_use / - 230 for i in range(0, cp.data.get.phases_in_use)] + + counts = self.get_counts(cp) + + cp.data.set.target_current = 0 + + missing_currents = self.get_missing_currents(preferenced_cps, grid_counter) + log.debug(f"Bidi-LP{cp.num}: missing currents {missing_currents}A") + + counters = data.data.counter_all_data.get_counters_to_check(cp.num) + for counter in counters: + available_currents, limit = Loadmanagement().get_available_currents_bidi( + missing_currents, voltages_mean(cp.data.get.voltages), data.data.counter_data[counter]) + + if limit.limiting_value is not None: + cp.data.control_parameter.limit = limit + + available_for_cp = common.available_current_for_load( + cp, counts, available_currents, missing_currents, bidi_mode=True) + + # Der neue Strom darf nicht höher als der bisher gesetzte Strom sein + current = common.get_current_to_set( + cp.data.set.current, available_for_cp, cp.data.set.target_current) + + cp.data.set.current = current + log.info(f"LP{cp.num}: Stromstärke {current}A") + + # Ausgabe LIMIT-MSG + self._set_loadmangement_message(current, limit, cp) + + common.set_current_counterdiff(cp.data.set.target_current, current, cp, surplus=True) + + preferenced_cps.pop(0) + + def _set_loadmangement_message(self, + current: float, + limit: LoadmanagementLimit, + chargepoint: Chargepoint) -> None: + # Strom muss an diesem Zähler geändert werden + log.debug( + f"current {current} target {chargepoint.data.set.target_current} set current {chargepoint.data.set.current}" + f" required currents {chargepoint.data.control_parameter.required_currents}") + required_currents = chargepoint.data.control_parameter.required_currents + required_current = min(required_currents) if current < 0 else max(required_currents) + if (limit.message and + # Strom erreicht nicht die vorgegebene Stromstärke + round(current, 2) != round(required_current, 2)): + if current == 0: + chargepoint.set_state_and_log(f"Es kann nicht mit der vorgegebenen Stromstärke geladen/entladen werden" + f"{limit.message}") + elif current < 0: + chargepoint.set_state_and_log(f"Es kann nicht mit der vorgegebenen Stromstärke entladen werden" + f"{limit.message}") + else: + chargepoint.set_state_and_log(f"Es kann nicht mit der vorgegebenen Stromstärke geladen werden" + f"{limit.message}") + + def get_counts(self, chargepoint: Chargepoint) -> List[int]: + + counts = [0]*3 + required_currents = chargepoint.data.control_parameter.required_currents + for i in range(3): + if required_currents[i] != 0: + counts[i] += 1 + return counts + + def get_missing_currents(self, preferenced_cps: List[Chargepoint], grid_counter) -> List[float]: + cp = preferenced_cps[0] + missing_currents = [0, 0, 0] + if cp.data.control_parameter.chargemode == Chargemode.INSTANT_CHARGING: + # Entladen im Instant-Charging-Modus + + # cp.control_parameter.required_currents enthält duch self.surplus_controlled.set_required_current_to_max() + # in calc_current nur noch die maximalen Ströme + dc_current = cp.data.set.charging_ev_data.charge_template.data.chargemode.instant_charging.dc_current + if dc_current < 0: + # Phasen in use berücksichtigen + missing_currents = [dc_current for i in range(0, cp.data.get.phases_in_use)] missing_currents += [0] * (3 - len(missing_currents)) - if zero_point_adjustment > 0: - if cp.data.set.charging_ev_data.charge_template.bidi_charging_allowed( - cp.data.control_parameter.current_plan, cp.data.set.charging_ev_data.data.get.soc): - for index in range(0, 3): - missing_currents[index] = min(cp.data.control_parameter.required_current, - missing_currents[index]) - else: - log.info(f"LP{cp.num}: Nur bidirektional entladen erlaubt, da SoC-Limit erreicht.") - missing_currents = [0, 0, 0] - else: + + for index in range(0, 3): + missing_currents[index] = cp.check_min_max_current( + missing_currents[index], cp.data.get.phases_in_use) + + else: + # Default Nullpunktanpassung + zero_point_adjustment = grid_counter.data.set.surplus_power_left / len(preferenced_cps) + log.debug(f"Nullpunktanpassung für LP{cp.num}: verbleibende Leistung {zero_point_adjustment}W") + missing_currents = [zero_point_adjustment / cp.data.get.phases_in_use / + 230 for i in range(0, cp.data.get.phases_in_use)] + missing_currents += [0] * (3 - len(missing_currents)) + if zero_point_adjustment > 0: + if cp.data.set.charging_ev_data.charge_template.bidi_charging_allowed( + cp.data.control_parameter.current_plan, cp.data.set.charging_ev_data.data.get.soc): for index in range(0, 3): - missing_currents[index] = cp.check_min_max_current(missing_currents[index], - cp.data.get.phases_in_use) - grid_counter.update_surplus_values_left(missing_currents, voltages_mean(cp.data.get.voltages)) - cp.data.set.current = missing_currents[0] - log.info(f"LP{cp.num}: Stromstärke {missing_currents}A") - preferenced_cps.pop(0) + missing_currents[index] = min(cp.data.control_parameter.required_current, + missing_currents[index]) + else: + log.info(f"LP{cp.num}: Nur bidirektional entladen erlaubt, da SoC-Limit erreicht.") + missing_currents = [0, 0, 0] + else: + for index in range(0, 3): + missing_currents[index] = cp.check_min_max_current(missing_currents[index], + cp.data.get.phases_in_use) + + return missing_currents diff --git a/packages/control/algorithm/chargemodes.py b/packages/control/algorithm/chargemodes.py index 5dbbd23673..7f085a4452 100644 --- a/packages/control/algorithm/chargemodes.py +++ b/packages/control/algorithm/chargemodes.py @@ -2,22 +2,23 @@ # Lademodi in absteigender Priorität # Tupel-Inhalt:(eingestellter Modus, tatsächlich genutzter Modus, Priorität) -CHARGEMODES = ((Chargemode.SCHEDULED_CHARGING, Chargemode.INSTANT_CHARGING), - (None, Chargemode.TIME_CHARGING), - (Chargemode.INSTANT_CHARGING, Chargemode.INSTANT_CHARGING), - (Chargemode.ECO_CHARGING, Chargemode.INSTANT_CHARGING), - (Chargemode.PV_CHARGING, Chargemode.INSTANT_CHARGING), - (Chargemode.SCHEDULED_CHARGING, Chargemode.PV_CHARGING), - (Chargemode.ECO_CHARGING, Chargemode.PV_CHARGING), - (Chargemode.PV_CHARGING, Chargemode.PV_CHARGING), +CHARGEMODES = ((Chargemode.SCHEDULED_CHARGING, Chargemode.INSTANT_CHARGING), # 0 + (None, Chargemode.TIME_CHARGING), # 1 + (Chargemode.INSTANT_CHARGING, Chargemode.INSTANT_CHARGING), # 2 + (Chargemode.ECO_CHARGING, Chargemode.INSTANT_CHARGING), # 3 + (Chargemode.PV_CHARGING, Chargemode.INSTANT_CHARGING), # 4 + (Chargemode.SCHEDULED_CHARGING, Chargemode.PV_CHARGING), # 5 + (Chargemode.ECO_CHARGING, Chargemode.PV_CHARGING), # 6 + (Chargemode.PV_CHARGING, Chargemode.PV_CHARGING), # 7 # niedrigere Priorität soll nachrangig geladen, aber zuerst entladen werden - (Chargemode.SCHEDULED_CHARGING, Chargemode.BIDI_CHARGING), - (None, Chargemode.STOP),) + (Chargemode.INSTANT_CHARGING, Chargemode.BIDI_CHARGING), # 8 + (Chargemode.SCHEDULED_CHARGING, Chargemode.BIDI_CHARGING), # 9 + (None, Chargemode.STOP),) # 10 CONSIDERED_CHARGE_MODES_SURPLUS = (CHARGEMODES[0], *CHARGEMODES[3:8]) CONSIDERED_CHARGE_MODES_PV_ONLY = CHARGEMODES[5:8] CONSIDERED_CHARGE_MODES_ADDITIONAL_CURRENT = CHARGEMODES[0:5] -CONSIDERED_CHARGE_MODES_MIN_CURRENT = CHARGEMODES[0:-2] -CONSIDERED_CHARGE_MODES_NO_CURRENT = (CHARGEMODES[9],) -CONSIDERED_CHARGE_MODES_BIDI_DISCHARGE = (CHARGEMODES[8],) +CONSIDERED_CHARGE_MODES_MIN_CURRENT = CHARGEMODES[0:-3] +CONSIDERED_CHARGE_MODES_NO_CURRENT = (CHARGEMODES[10],) +CONSIDERED_CHARGE_MODES_BIDI_DISCHARGE = (CHARGEMODES[8:10]) CONSIDERED_CHARGE_MODES_CHARGING = CHARGEMODES[0:8] diff --git a/packages/control/algorithm/common.py b/packages/control/algorithm/common.py index 9027c97259..5cd1fa1c8a 100644 --- a/packages/control/algorithm/common.py +++ b/packages/control/algorithm/common.py @@ -68,10 +68,9 @@ def set_current_counterdiff(diff_current: float, required_currents = load.data.control_parameter.required_currents considered_current = consider_less_charging_chargepoint_in_loadmanagement( load, current) - # gar nicht ladende Autos? - diff = max(considered_current - diff_current, 0) + diff = considered_current - diff_current diffs = [diff if required_currents[i] != 0 else 0 for i in range(3)] - if max(diffs) > 0: + if any(diff_value != 0 for diff_value in diffs): counters = data.data.counter_all_data.get_counters_to_check(load.num) for counter in counters: if surplus: @@ -98,10 +97,16 @@ def get_current_to_set(set_current: float, diff: float, prev_current: float) -> wird.""" new_current = prev_current + diff if set_current is not None: - if new_current > set_current: - log.debug("Neuer Soll-Strom darf nicht höher als bisher gesetzter sein: " - f"bisher {set_current}A, neuer {new_current}") - return set_current + if diff < 0: + if new_current < set_current: + log.debug("Neuer Soll-Strom darf beim Entladen nicht niedriger als bisher gesetzter sein: " + f"bisher {set_current}A, neuer {new_current}") + return set_current + else: + if new_current > set_current: + log.debug("Neuer Soll-Strom darf nicht höher als bisher gesetzter sein: " + f"bisher {set_current}A, neuer {new_current}") + return set_current return new_current # tested @@ -110,11 +115,29 @@ def get_current_to_set(set_current: float, diff: float, prev_current: float) -> def available_current_for_load(load: Load, counts: List[int], available_currents: List[float], - missing_currents: List[float]) -> float: + missing_currents: List[float], + bidi_mode: bool = False) -> float: control_parameter = load.data.control_parameter available_current = float("inf") missing_current_cp = control_parameter.required_current - load.data.set.target_current + if bidi_mode: + is_discharge = missing_current_cp < 0 + available_current = float("-inf") if is_discharge else float("inf") + for i in range(0, 3): + if control_parameter.required_currents[i] == 0 or counts[i] == 0: + continue + phase_available_current = available_currents[i] / counts[i] + if is_discharge: + available_current = max( + max(missing_current_cp, phase_available_current), available_current) + else: + available_current = min( + min(missing_current_cp, phase_available_current), available_current) + if available_current in [float("inf"), float("-inf")]: + available_current = missing_current_cp + return available_current + for i in range(0, 3): shared_with = counts[i] if (control_parameter.required_currents[i] != 0 and missing_currents[i] != available_currents[i]): diff --git a/packages/control/algorithm/integration_test/bidi_charging_test.py b/packages/control/algorithm/integration_test/bidi_charging_test.py index 0a065ac734..1c1906b0af 100644 --- a/packages/control/algorithm/integration_test/bidi_charging_test.py +++ b/packages/control/algorithm/integration_test/bidi_charging_test.py @@ -2,6 +2,7 @@ from unittest.mock import Mock from control import data +from control import loadmanagement from control.algorithm.algorithm import Algorithm from control.chargemode import Chargemode @@ -9,6 +10,11 @@ @pytest.fixture() def bidi_cps(): def _setup(*cps): + for counter in ("counter0", "counter6"): + data.data.counter_data[counter].data.set.raw_currents_left = [32]*3 + data.data.counter_data[counter].data.set.raw_exported_currents_left = [32]*3 + data.data.counter_data[counter].data.set.raw_power_left = 22000 + data.data.counter_data[counter].data.set.raw_exported_power_left = 22000 for cp in cps: data.data.cp_data[cp].data.get.max_discharge_power = -11000 data.data.cp_data[cp].data.get.max_charge_power = 11000 @@ -30,7 +36,9 @@ def test_cp3_bidi(grid_power: float, expected_current: float, bidi_cps, all_cp_n # setup bidi_cps("cp3") data.data.counter_data["counter0"].data.get.power = grid_power - return_mock = Mock(reurn_value=True) + return_mock = Mock(return_value=True) + mock_get_component_name_by_id = Mock(return_value="Garage") + monkeypatch.setattr(loadmanagement, "get_component_name_by_id", mock_get_component_name_by_id) monkeypatch.setattr( data.data.cp_data["cp3"].data.set.charging_ev_data.charge_template, "bidi_charging_allowed", return_mock) @@ -48,6 +56,8 @@ def test_cp3_cp4_bidi_discharge(bidi_cps, all_cp_not_charging, monkeypatch): # setup bidi_cps("cp3", "cp4") data.data.counter_data["counter0"].data.get.power = 4000 + mock_get_component_name_by_id = Mock(return_value="Garage") + monkeypatch.setattr(loadmanagement, "get_component_name_by_id", mock_get_component_name_by_id) # execution Algorithm().calc_current() @@ -57,3 +67,139 @@ def test_cp3_cp4_bidi_discharge(bidi_cps, all_cp_not_charging, monkeypatch): assert data.data.cp_data["cp4"].data.set.current == -2.898550724637681 assert data.data.cp_data["cp5"].data.set.current == 0 assert data.data.counter_data["counter0"].data.set.surplus_power_left == 0 + + +def test_cp3_bidi_instant_discharge_uses_dc_current(bidi_cps, all_cp_not_charging, monkeypatch): + # Testet, ob das Entladen entsprechend vom max_discharge_power limitiert wird + + # setup + bidi_cps("cp3") + control_parameter = data.data.cp_data["cp3"].data.control_parameter + control_parameter.chargemode = Chargemode.INSTANT_CHARGING + data.data.cp_data["cp3"].data.set.charging_ev_data.data.get.soc = 80 + data.data.cp_data["cp3"].data.set.charging_ev_data.charge_template.data.chargemode.instant_charging.dc_current = -20 + mock_get_component_name_by_id = Mock(return_value="Garage") + monkeypatch.setattr(loadmanagement, "get_component_name_by_id", mock_get_component_name_by_id) + + # execution + Algorithm().calc_current() + + # evaluation + assert data.data.cp_data["cp3"].data.set.current == -15.942028985507246 + assert data.data.cp_data["cp4"].data.set.current == 0 + assert data.data.cp_data["cp5"].data.set.current == 0 + assert data.data.counter_data["counter0"].data.set.surplus_power_left == 10310.0 + + +def test_cp3_bidi_instant_discharge_limited_by_counter_export_current( + bidi_cps, all_cp_not_charging, monkeypatch): + # Testet, ob das Entladen entsprechend vom Counter limitiert wird + + # setup + bidi_cps("cp3") + control_parameter = data.data.cp_data["cp3"].data.control_parameter + control_parameter.chargemode = Chargemode.INSTANT_CHARGING + data.data.cp_data["cp3"].data.get.max_discharge_power = -22000 + data.data.cp_data["cp3"].data.set.charging_ev_data.data.get.soc = 80 + data.data.cp_data["cp3"].data.set.charging_ev_data.charge_template.data.chargemode.instant_charging.dc_current = -20 + for counter in ("counter0", "counter6"): + data.data.counter_data[counter].data.set.raw_exported_currents_left = [10]*3 + mock_get_component_name_by_id = Mock(return_value="Garage") + monkeypatch.setattr(loadmanagement, "get_component_name_by_id", mock_get_component_name_by_id) + + # execution + Algorithm().calc_current() + + # evaluation + assert data.data.cp_data["cp3"].data.set.current == -10 + assert data.data.cp_data["cp4"].data.set.current == 0 + assert data.data.cp_data["cp5"].data.set.current == 0 + + +@pytest.mark.parametrize( + "max_discharge_power, expected_cp4_current, expected_cp5_current", + [ + # Begrenzt durch max_discharge_power und Counter + pytest.param(-11000, -15.942028985507246, -4.057971014492754, id="max_discharge_11kW"), + # Nur durch Counter begrenzt + pytest.param(-110000, -20, 0, id="max_discharge_110kW"), + ], +) +def test_cp3_cp4_bidi_instant_discharge_splits_limited_export_current( + max_discharge_power, expected_cp4_current, expected_cp5_current, + bidi_cps, all_cp_not_charging, monkeypatch): + # Beide CPs sind auf einer Ebene und wollen -20 A entladen + # Counter erlaubt insgesamt nur -20 A pro Phase + + # setup + bidi_cps("cp4", "cp5") + for cp in ("cp4", "cp5"): + control_parameter = data.data.cp_data[cp].data.control_parameter + control_parameter.chargemode = Chargemode.INSTANT_CHARGING + data.data.cp_data[cp].data.get.max_discharge_power = max_discharge_power + data.data.cp_data[cp].data.set.charging_ev_data.data.get.soc = 80 + (data.data.cp_data[cp].data.set.charging_ev_data.charge_template.data + .chargemode.instant_charging.dc_current) = -20 + + for counter in ("counter0", "counter6"): + data.data.counter_data[counter].data.set.raw_exported_currents_left = [20]*3 + mock_get_component_name_by_id = Mock(return_value="Garage") + monkeypatch.setattr(loadmanagement, "get_component_name_by_id", mock_get_component_name_by_id) + + # execution + Algorithm().calc_current() + + # evaluation + assert data.data.cp_data["cp3"].data.set.current == 0 + assert data.data.cp_data["cp4"].data.set.current == expected_cp4_current + assert data.data.cp_data["cp5"].data.set.current == expected_cp5_current + + +def test_cp4_bidi_discharge_unlocks_cp5_instant_charging_in_next_cycle( + bidi_cps, all_cp_not_charging, monkeypatch): + # Zyklus 1: CP4 entlaedt, CP5 bleibt bei 20 A (Counter-Limit 20 A). + # Zyklus 2: Entladung ist am Counter reflektiert, dadurch kann CP5 auf 40 A steigen. + + # setup + bidi_cps("cp4") + cp4_control_parameter = data.data.cp_data["cp4"].data.control_parameter + cp4_control_parameter.chargemode = Chargemode.INSTANT_CHARGING + data.data.cp_data["cp4"].data.get.max_discharge_power = -22000 + data.data.cp_data["cp4"].data.set.charging_ev_data.data.get.soc = 80 + data.data.cp_data["cp4"].data.set.charging_ev_data.charge_template.data.chargemode.instant_charging.dc_current = -20 + + cp5 = data.data.cp_data["cp5"] + cp5_control_parameter = cp5.data.control_parameter + cp5_control_parameter.chargemode = Chargemode.INSTANT_CHARGING + cp5_control_parameter.submode = Chargemode.INSTANT_CHARGING + cp5_control_parameter.phases = 3 + cp5_control_parameter.required_currents = [50]*3 + cp5_control_parameter.required_current = 50 + cp5.data.get.max_charge_power = 110000 + cp5.data.get.charge_state = True + cp5.data.get.currents = [20]*3 + cp5.data.set.charging_ev_data.ev_template.data.max_current_multi_phases = 50 + cp5.template.data.max_current_multi_phases = 50 + + for counter in ("counter0", "counter6"): + data.data.counter_data[counter].data.set.raw_currents_left = [20]*3 + data.data.counter_data[counter].data.set.raw_exported_currents_left = [20]*3 + data.data.counter_data[counter].data.set.raw_power_left = 100000 + data.data.counter_data[counter].data.set.raw_exported_power_left = 100000 + + mock_get_component_name_by_id = Mock(return_value="Garage") + monkeypatch.setattr(loadmanagement, "get_component_name_by_id", mock_get_component_name_by_id) + + # execution + evaluation cycle 1 + Algorithm().calc_current() + assert data.data.cp_data["cp4"].data.set.current == -20 + assert data.data.cp_data["cp5"].data.set.current == 20 + + # Entladung aus Zyklus 1 ist im naechsten Zyklus als zusaetzlicher Spielraum verfuegbar. + for counter in ("counter0", "counter6"): + data.data.counter_data[counter].data.set.raw_currents_left = [40]*3 + + # execution + evaluation cycle 2 + Algorithm().calc_current() + assert data.data.cp_data["cp4"].data.set.current == -20 + assert data.data.cp_data["cp5"].data.set.current == 40 diff --git a/packages/control/bat_all.py b/packages/control/bat_all.py index c1939c2187..af3cab264e 100644 --- a/packages/control/bat_all.py +++ b/packages/control/bat_all.py @@ -318,6 +318,31 @@ def setup_bat(self): except Exception: log.exception("Fehler im Bat-Modul") + def _charging_power_left_while_recovering(self, config) -> float: + """ Speicher-Vorrang, waehrend sich der Speicher auf dem Weg zum naechsten SoC-Ziel befindet + (unterhalb Mindest-SoC, oder oberhalb Mindest-SoC aber noch nicht wieder beim Maximal-SoC + angekommen, hysteresis_discharge=False): ermittelt, wie viel Leistung den Fahrzeugen dabei + verbleibt, unter Beruecksichtigung einer optional reservierten Ladeleistung. + """ + if self.data.get.power < 0: + # Wenn der Speicher entladen wird, darf diese Leistung nicht zum Laden der Fahrzeuge + # genutzt werden. Wenn der Speicher schneller regelt als die LP, würde sonst der Speicher + # reduziert werden. + charging_power_left = self.data.get.power + self.data.set.regulate_up = True + else: + if config.power_reserve_active: + # Die Differenz zwischen aktueller Batterie-Leistung und Reserveleistung bestimmt, + # was fuer EV-Ladung verbleibt (positiv) oder zusaetzlich benoetigt wird (negativ). + charging_power_left = self.data.get.power - config.power_reserve + if charging_power_left < 0: + self.data.set.regulate_up = True + else: + # Speicher wird geladen + charging_power_left = 0 + self.data.set.regulate_up = True + return charging_power_left + def get_charging_power_left_diff(self): """Ermittelt die Differenz zur aktuellen Batterie-Leistung, die zum Laden der EV verwendet werden darf. @@ -349,30 +374,18 @@ def get_charging_power_left_diff(self): # Speicher soll geladen werden um min SoC zu erreichen if self.data.get.soc < config.min_soc: self.data.set.hysteresis_discharge = False - if self.data.get.power < 0: - # Wenn der Speicher entladen wird, darf diese Leistung nicht zum Laden der Fahrzeuge - # genutzt werden. Wenn der Speicher schneller regelt als die LP, würde sonst der Speicher - # reduziert werden. - charging_power_left = self.data.get.power - self.data.set.regulate_up = True - else: - # Speicher-Vorrang bis zum Min-Soc - if config.power_reserve_active: - # Die Differenz zwischen aktueller Batterie-Leistung und Reserveleistung bestimmt, - # was fuer EV-Ladung verbleibt (positiv) oder zusaetzlich benoetigt wird (negativ). - charging_power_left = self.data.get.power - config.power_reserve - if charging_power_left < 0: - self.data.set.regulate_up = True - else: - # Speicher wird geladen - charging_power_left = 0 - self.data.set.regulate_up = True + charging_power_left = self._charging_power_left_while_recovering(config) # Speicher zwischen min und max SoC elif int(self.data.get.soc) >= config.min_soc and int(self.data.get.soc) < config.max_soc: # Speicher soll aktiv weder ge- noch entladen werden. # Mindest-SoC wird gehalten oder der Speicher mit weiterem vorhanden Überschuss geladen. if self.data.set.hysteresis_discharge is False: - charging_power_left = self.data.get.power + # Speicher befindet sich noch in der Erholung nach Unterschreiten des Mindest-SoC: + # Vorrang fuer den Speicher bis zum Erreichen des Maximal-SoC (hysteresis_discharge + # wird erst dort wieder True), analog zum Zweig unterhalb des Mindest-SoC - sonst + # bleibt der Speicher dauerhaft knapp oberhalb des Mindest-SoC haengen, weil die + # Hysterese nie zurueckgesetzt wird. + charging_power_left = self._charging_power_left_while_recovering(config) # Speicher darf wegen Hysterese bis min_soc entladen werden. else: if self.data.set.power_limit is None: @@ -404,8 +417,10 @@ def get_charging_power_left_diff(self): absolute_bat_discharge_power) log.debug(f"Erlaubte Entlade-Leistung nutzen {charging_power_left}W") else: - # Speicher sollte weder ge- noch entladen werden. - charging_power_left = base_power + # Entladung nicht erlaubt: die eigene Speicherleistung darf nicht ans Fahrzeug + # weitergereicht werden, sonst wird der Speicher entladen, obwohl der Nutzer das + # nicht erlaubt hat. + charging_power_left = 0 else: log.debug("Keine erlaubte Entladeleistung freigeben, da der Speicher mit einer vorgegeben " "Leistung entladen wird.") @@ -441,8 +456,10 @@ def get_charging_power_left_diff(self): absolute_bat_discharge_power) log.debug(f"Erlaubte Entlade-Leistung nutzen {charging_power_left}W") else: - # Speicher sollte weder ge- noch entladen werden. - charging_power_left = base_power + # Entladung nicht erlaubt: die eigene Speicherleistung darf nicht ans Fahrzeug + # weitergereicht werden, sonst wird der Speicher entladen, obwohl der Nutzer das + # nicht erlaubt hat. + charging_power_left = 0 else: log.debug("Keine erlaubte Entladeleistung freigeben, da der Speicher mit einer vorgegeben " "Leistung entladen wird.") diff --git a/packages/control/bat_all_test.py b/packages/control/bat_all_test.py index 4f0a6f7cbe..b877c058ac 100644 --- a/packages/control/bat_all_test.py +++ b/packages/control/bat_all_test.py @@ -128,10 +128,10 @@ class Params: Params("Mindest-SoC, SoC nicht erreicht, Speicher-Reserve ausgenutzt, Speicher lädt", ChargemodeConfigBat(mode="min_soc_bat_mode", power_reserve=2000, power_reserve_active=True), 2200, 40, 200, False), - Params("Mindest-SoC, SoC erreicht, Speicher entlädt", ChargemodeConfigBat(mode="min_soc_bat_mode"), -500, 90, -500, - False), - Params("Mindest-SoC, SoC erreicht, Speicher lädt", - ChargemodeConfigBat(mode="min_soc_bat_mode"), 500, 90, 500, False), + Params("Mindest-SoC, SoC erreicht, Entladung nicht erlaubt, Speicher entlädt trotzdem", + ChargemodeConfigBat(mode="min_soc_bat_mode"), -500, 90, 0, False), + Params("Mindest-SoC, SoC erreicht, Entladung nicht erlaubt, Speicher lädt", + ChargemodeConfigBat(mode="min_soc_bat_mode"), 500, 90, 0, False), Params("Mindest-SoC, SoC erreicht, Speicher ist voll", ChargemodeConfigBat(mode="min_soc_bat_mode"), 0, 100, 0, False), Params("Mindest-SoC, SoC erreicht, Entladung in Auto, Speicher entlädt, Entladeleistung nicht erreicht", @@ -156,14 +156,23 @@ class Params: "Speicher-Sperre aktiv"), ChargemodeConfigBat(mode="min_soc_bat_mode", power_discharge=500, power_discharge_active=True), 400, 90, 0, False, 600), - Params(("Mindest-SoC, Hysterese, EV-Vorrang, keine Speichernutzung"), - ChargemodeConfigBat(mode="min_soc_bat_mode"), 400, 60, 400, False, hysteresis_discharge=False), + Params(("Mindest-SoC, Hysterese, Erholung nach Unterschreiten, Speicher-Vorrang bis Maximal-SoC"), + ChargemodeConfigBat(mode="min_soc_bat_mode"), 400, 60, -100, True, hysteresis_discharge=False), + Params(("Mindest-SoC, Hysterese, Erholung nach Unterschreiten, Speicher-Reserve aktiv"), + ChargemodeConfigBat(mode="min_soc_bat_mode", power_reserve=2000, power_reserve_active=True), + 2200, 60, 200, False, hysteresis_discharge=False), + Params(("Mindest-SoC, Hysterese, Erholung nach Unterschreiten, Speicher entlädt noch"), + ChargemodeConfigBat(mode="min_soc_bat_mode"), -300, 60, -400, True, hysteresis_discharge=False), Params(("Mindest-SoC, Hysterese, Speicherentladung, Speichernutzung erlaubt"), ChargemodeConfigBat(mode="min_soc_bat_mode", power_discharge=500, power_discharge_active=True), 400, 60, 900, False, hysteresis_discharge=True), Params(("Mindest-SoC, Hysterese, Speicherentladung, Speichernutzung erlaubt, Speicher-Sperre aktiv"), ChargemodeConfigBat(mode="min_soc_bat_mode", power_discharge=500, power_discharge_active=True), 400, 60, 0, False, 600, hysteresis_discharge=True), + Params(("Mindest-SoC, Hysterese, Entladung nicht erlaubt, Speicher entlädt trotzdem"), + ChargemodeConfigBat(mode="min_soc_bat_mode"), -500, 60, 0, False, hysteresis_discharge=True), + Params(("Mindest-SoC, Hysterese, Entladung nicht erlaubt, Speicher lädt"), + ChargemodeConfigBat(mode="min_soc_bat_mode"), 500, 60, 0, False, hysteresis_discharge=True), ] diff --git a/packages/control/chargelog/chargelog.py b/packages/control/chargelog/chargelog.py index e9a87b7339..b8194e5eab 100644 --- a/packages/control/chargelog/chargelog.py +++ b/packages/control/chargelog/chargelog.py @@ -11,10 +11,10 @@ from typing import Any, Dict, List, Optional, Tuple from control import data -from helpermodules.measurement_logging.process_log import ( +from helpermodules.measurement_logging.process_log_calculation import ( FILE_ERRORS, CalculationType, _analyse_energy_source, _process_entries, get_totals) -from helpermodules.measurement_logging.write_log import LogType, LegacySmartHomeLogData, create_entry +from helpermodules.measurement_logging.process_log_entry_builder import LegacySmartHomeLogData, create_entry # alte Daten: Startzeitpunkt der Ladung, Endzeitpunkt, Geladene Reichweite, Energie, Leistung, Ladedauer, LP-Nummer, # Lademodus, ID-Tag @@ -423,7 +423,7 @@ def _get_reference_entries(cp, create_log_entry: bool = False) -> Tuple[List[Dic entries_day_before = get_daily_log(date_day_before)["entries"] previous_entry = entries_day_before[-1] - current_entry = create_entry(LogType.DAILY, LegacySmartHomeLogData(), previous_entry) + current_entry = create_entry(LegacySmartHomeLogData(), previous_entry) reference_entries = [previous_entry, current_entry] elif len(entries) >= 2: reference_entries = [entries[-2], entries[-1]] diff --git a/packages/control/chargepoint/chargepoint.py b/packages/control/chargepoint/chargepoint.py index db95b7666c..a26b402769 100644 --- a/packages/control/chargepoint/chargepoint.py +++ b/packages/control/chargepoint/chargepoint.py @@ -558,6 +558,10 @@ def check_min_max_current(self, required_current: float, phases: int) -> float: required_current = self.data.get.max_discharge_power / phases / 230 msg = f"Die vom Auto übertragene Entladeleistung begrenzt den Strom auf " \ f"maximal {round(required_current, 2)} A." + # eigene Hardware-Stromgrenze des Ladepunkts auch beim Entladen durchsetzen, nicht nur + # beim Laden - check_cp_max_current() behandelt negative Werte bereits korrekt + # (Vorzeichen wird ueber abs()/sign wieder hergestellt). + required_current = self.check_cp_max_current(required_current, phases) else: if self.data.get.max_charge_power / phases / 230 < required_current: required_current = self.data.get.max_charge_power / phases / 230 diff --git a/packages/control/chargepoint/chargepoint_test.py b/packages/control/chargepoint/chargepoint_test.py index 57a746649b..c7a036e363 100644 --- a/packages/control/chargepoint/chargepoint_test.py +++ b/packages/control/chargepoint/chargepoint_test.py @@ -5,6 +5,8 @@ from control import data from control.chargelog import chargelog +from control.chargemode import Chargemode +from control.chargepoint.charging_type import ChargingType from control.chargepoint.chargepoint import Chargepoint from control.chargepoint.chargepoint_state import ChargepointState from control.chargepoint.chargepoint_template import CpTemplate @@ -66,6 +68,33 @@ def test_check_min_max_current(required_current, phases, expected_required_curre assert ret == expected_required_current +@pytest.mark.parametrize("required_current, max_discharge_power, dc_max_current, expected_required_current", + [ + pytest.param(-50, -30000, 25, -25, + id="Entladung durch CP-Hardwaregrenze begrenzt"), + pytest.param(-10, -30000, 25, -10, + id="Entladung innerhalb der CP-Hardwaregrenze"), + ]) +def test_check_min_max_current_bidi_discharge_respects_cp_hardware_limit( + required_current, max_discharge_power, dc_max_current, expected_required_current): + """ Beim Entladen (BIDI_CHARGING, required_current < 0) muss die eigene Hardware-Stromgrenze des + Ladepunkts (dc_max_current) genauso durchgesetzt werden wie beim Laden - vor diesem Fix wurde + check_cp_max_current() im Entlade-Zweig gar nicht aufgerufen (siehe #3795). """ + # setup + cp = Chargepoint(0, None) + cp.template = CpTemplate() + cp.template.data.charging_type = ChargingType.DC.value + cp.template.data.dc_max_current = dc_max_current + cp.data.control_parameter.submode = Chargemode.BIDI_CHARGING + cp.data.get.max_discharge_power = max_discharge_power + + # evaluation + ret = cp.check_min_max_current(required_current, 1) + + # assertion + assert ret == expected_required_current + + @dataclass class Params: name: str diff --git a/packages/control/counter.py b/packages/control/counter.py index 8736fc0150..3e9634ea46 100644 --- a/packages/control/counter.py +++ b/packages/control/counter.py @@ -92,6 +92,11 @@ class Set: released_surplus: float = field(default=0, metadata={"topic": "set/released_surplus"}) raw_power_left: Optional[float] = 0 raw_currents_left: List[float] = field(default_factory=currents_list_factory) + + # Bidi Entladung + raw_exported_power_left: Optional[float] = 0 + raw_exported_currents_left: List[float] = field(default_factory=currents_list_factory) + surplus_power_left: float = 0 @@ -177,8 +182,16 @@ def _get_loadmanagement_state(self) -> bool: # tested def _set_current_left(self, loadmanagement_available: bool) -> None: + """ Ermittelt getrennt die verbleibenden Ströme für Laden und Entladen. + Ladende CPs werden bei der Bezugsreserve berücksichtigt. + Entladende CPs bei der Einspeisereserve. + -> Einspeisung erhöht die verbleibenden Ströme für Laden + -> Bezug erhöht die verbleibenden Ströme für Entladen + """ if loadmanagement_available: currents_raw = self.data.get.currents + currents_exported_raw = self.data.get.currents + load_keys = data.data.counter_all_data.get_loads_of_counter(f"counter{self.num}") for load_key in load_keys: if "cp" in load_key: @@ -197,18 +210,44 @@ def _set_current_left(self, loadmanagement_available: bool) -> None: load.data.get.currents) except KeyError: element_current = [get_medium_charging_current(load.data.get.currents)]*3 - currents_raw = list(map(operator.sub, currents_raw, element_current)) - currents_raw = list(map(operator.sub, self.data.config.max_currents, currents_raw)) - if min(currents_raw) < 0: - log.debug(f"Verbleibende Ströme: {currents_raw}, Überbelastung wird durch Hausverbrauch verursacht") - currents_raw = [max(currents_raw[i], 0) for i in range(0, 3)] - self.data.set.raw_currents_left = currents_raw + # Vorzeichen anhand der Gesamtleistung entscheiden, nicht anhand einzelner Phasenströme + # (min(element_current) < 0): bei ein-/zweiphasigem Laden zeigen ungenutzte Phasen oft ein + # geringes negatives Messrauschen (zB -0.05A), das sonst den ganzen Load faelschlich als + # Einspeisung einordnet - der eigene Ladestrom wird dann nirgends von currents_raw + # abgezogen und das Lastmanagement haelt die eigene Ladung faelschlich fuer Fremdlast. + if load.data.get.power < 0: + # nur Hausverbraucher ohne Einspeisung + currents_exported_raw = list(map(operator.sub, currents_exported_raw, element_current)) + else: + # nur Hausverbraucher und Einspeisung + currents_raw = list(map(operator.sub, currents_raw, element_current)) + + raw_currents_left = list(map(operator.sub, self.data.config.max_currents, currents_raw)) + raw_exported_currents_left = list(map(operator.add, self.data.config.max_currents, currents_exported_raw)) + + if min(raw_currents_left) < 0: + log.debug( + f"Verbleibende Ströme Laden: " + f"{raw_currents_left}, Überbelastung wird durch Hausverbrauch verursacht") + raw_currents_left = [max(raw_currents_left[i], 0) for i in range(0, 3)] + + if min(raw_exported_currents_left) < 0: + log.debug(("Verbleibende Ströme Entladen: " + f"{raw_exported_currents_left}, Überbelastung wird durch Einspeisung verursacht")) + raw_exported_currents_left = [max(raw_exported_currents_left[i], 0) for i in range(0, 3)] + + self.data.set.raw_currents_left = raw_currents_left + self.data.set.raw_exported_currents_left = raw_exported_currents_left log.info(f'Verbleibende Ströme an Zähler {self.num}: {self.data.set.raw_currents_left}A') + log.info((f'Verbleibende exportierte Ströme an Zähler {self.num}: ' + f'{self.data.set.raw_exported_currents_left}A')) else: self.data.set.raw_currents_left = [self.data.config.max_power_errorcase/230/3]*3 + self.data.set.raw_exported_currents_left = [self.data.config.max_power_errorcase/230/3]*3 log.info(f'Verbleibende Ströme an Zähler {self.num} (Fehlerfall): {self.data.set.raw_currents_left}A') # tested + def get_unbalanced_load_exceeding(self, raw_currents_left: List[float]) -> List[float]: """gibt eine Liste zurück, die für jede Phase angibt, um wie viel Ampere die Schieflast überschritten wurde. So können gezielt Fahrzeuge reduziert werden, die auf dieser/n Phase(n) laden. Die Phase mit dem höchsten @@ -227,7 +266,11 @@ def _set_power_left(self, loadmanagement_available: bool) -> None: if f'counter{self.num}' == data.data.counter_all_data.get_evu_counter_str(): if loadmanagement_available: power_raw = self.data.get.power + power_exported_raw = self.data.get.power for cp in data.data.cp_data.values(): + if cp.data.get.power < 0: + power_exported_raw -= cp.data.get.power + continue power_raw -= cp.data.get.power for consumer in data.data.consumer_data.values(): # Wenn der Verbraucher nicht angesteuert werden darf, im LM als nicht veränderbaren Verbrauch @@ -238,28 +281,47 @@ def _set_power_left(self, loadmanagement_available: bool) -> None: log.debug(f"Verbraucher {consumer.num} als unveränderlichen Verbrauch im LM " f"mit {consumer.data.get.power}W berücksichtigt.") self.data.set.raw_power_left = self.data.config.max_total_power - power_raw + self.data.set.raw_exported_power_left = self.data.config.max_total_power + power_exported_raw log.info(f'Verbleibende Leistung an Zähler {self.num}: {self.data.set.raw_power_left}W') + log.info((f'Verbleibende exportierte Leistung an Zähler {self.num}: ' + f'{self.data.set.raw_exported_power_left}W')) else: self.data.set.raw_power_left = self.data.config.max_power_errorcase + self.data.set.raw_exported_power_left = self.data.config.max_power_errorcase log.info(f'Verbleibende Leistung an Zähler {self.num} (Fehlerfall): {self.data.set.raw_power_left}W') + log.info((f'Verbleibende exportierte Leistung an Zähler {self.num} (Fehlerfall): ' + f'{self.data.set.raw_exported_power_left}W')) else: self.data.set.raw_power_left = None + self.data.set.raw_exported_power_left = None def update_values_left(self, diffs, cp_voltage: float) -> None: - # Mittelwert der Spannungen verwenden, um Phasenverdrehung zu kompensieren - # (Probleme bei einphasig angeschlossenen Wallboxen) - self.data.set.raw_currents_left = list(map(operator.sub, self.data.set.raw_currents_left, diffs)) - if self.data.set.raw_power_left is not None: - self.data.set.raw_power_left -= sum([c * cp_voltage for c in diffs]) - log.debug(f'Zähler {self.num}: {self.data.set.raw_currents_left}A verbleibende Ströme, ' - f'{self.data.set.raw_power_left}W verbleibende Leistung') + self._update_raw_values(diffs, cp_voltage, surplus=False) def update_surplus_values_left(self, diffs, cp_voltage: float) -> None: + self._update_raw_values(diffs, cp_voltage, surplus=True) + + def _update_raw_values(self, diffs, cp_voltage: float, surplus: bool = False) -> None: + # Mittelwert der Spannungen verwenden, um Phasenverdrehung zu kompensieren + # (Probleme bei einphasig angeschlossenen Wallboxen) self.data.set.raw_currents_left = list(map(operator.sub, self.data.set.raw_currents_left, diffs)) - if self.data.set.surplus_power_left is not None: - self.data.set.surplus_power_left -= sum([c * cp_voltage for c in diffs]) - log.debug(f'Zähler {self.num}: {self.data.set.raw_currents_left}A verbleibende Ströme, ' - f'{self.data.set.surplus_power_left}W verbleibender Überschuss') + self.data.set.raw_exported_currents_left = list( + map(operator.add, self.data.set.raw_exported_currents_left, diffs)) + + if surplus: + if self.data.set.surplus_power_left is not None: + self.data.set.surplus_power_left -= sum([c * cp_voltage for c in diffs]) + log.debug(f'Zähler {self.num}: {self.data.set.raw_currents_left}A verbleibende Ströme, ' + f'{self.data.set.surplus_power_left}W verbleibender Überschuss') + else: + if self.data.set.raw_power_left is not None: + self.data.set.raw_power_left -= sum([c * cp_voltage for c in diffs]) + if self.data.set.raw_exported_power_left is not None: + self.data.set.raw_exported_power_left += sum([c * cp_voltage for c in diffs]) + log.debug(f'Zähler {self.num}: {self.data.set.raw_currents_left}A verbleibende Ströme, ' + f'{self.data.set.raw_exported_currents_left}A verbleibende exportierte Ströme, ' + f'{self.data.set.raw_power_left}W verbleibende Leistung, ' + f'{self.data.set.raw_exported_power_left}W verbleibende exportierte Leistung') def calc_surplus(self): # reservierte Leistung wird nicht berücksichtigt, weil diese noch verwendet werden kann, bis die EV @@ -500,6 +562,12 @@ def switch_off_check_timer(self, load: Load) -> None: except Exception: log.exception("Fehler im allgemeinen PV-Modul") + def _get_switch_off_threshold_by_load(self, load: Load) -> int: + if isinstance(load, Chargepoint): + return data.data.general_data.data.chargemode_config.surplus.vehicle.switch_off_threshold + else: + return data.data.general_data.data.chargemode_config.surplus.consumer.switch_off_threshold + def calc_switch_off_threshold(self, load: Load) -> float: surplus_config = data.data.general_data.data.chargemode_config.surplus control_parameter = load.data.control_parameter @@ -510,7 +578,7 @@ def calc_switch_off_threshold(self, load: Load) -> float: threshold = (-surplus_config.feed_in_yield + surplus_config.vehicle.switch_on_threshold*control_parameter.phases) else: - threshold = surplus_config.consumer.switch_off_threshold + threshold = self._get_switch_off_threshold_by_load(load) return threshold def calc_switch_off(self, load: Load) -> Tuple[float, float]: diff --git a/packages/control/counter_all/counter_all.py b/packages/control/counter_all/counter_all.py index 29a31d430f..2e8b05f724 100644 --- a/packages/control/counter_all/counter_all.py +++ b/packages/control/counter_all/counter_all.py @@ -167,7 +167,7 @@ def _calc_home_consumption(self) -> Tuple[float, Dict]: home_consumption = 0.0 # Rekursion startet immer beim EVU-Zähler. - home_consumption = self._calc_home_consumption_from_counter(evu_element, CounterMode.NOT_HOME_CONSUMPTION.value) + home_consumption = self._calc_home_consumption_from_counter(evu_element, CounterMode.HOME_CONSUMPTION.value) home_consumption -= self.data.set.smarthome_power_excluded_from_home_consumption @@ -206,8 +206,8 @@ def _is_home_consumption_counter_by_id(self, counter_id: int) -> str: parent = self.get_entry_of_parent(counter_id) if not parent or parent["type"] != ComponentType.COUNTER.value: - # Auto am Wurzel-Zähler entspricht dem bisherigen Startwert CounterMode.NOT_HOME_CONSUMPTION. - return CounterMode.NOT_HOME_CONSUMPTION.value + # Auto am Wurzel-Zähler entspricht dem bisherigen Startwert CounterMode.HOME_CONSUMPTION. + return CounterMode.HOME_CONSUMPTION.value return self._is_home_consumption_counter_by_id(parent["id"]) diff --git a/packages/control/counter_all/counter_all_data.py b/packages/control/counter_all/counter_all_data.py index 3806edb738..a61ba69c3c 100644 --- a/packages/control/counter_all/counter_all_data.py +++ b/packages/control/counter_all/counter_all_data.py @@ -1,7 +1,8 @@ from dataclasses import dataclass, field -from typing import Callable, Dict, Generator, List, Protocol, Tuple, Union +from typing import Callable, Dict, Generator, List, Optional, Protocol, Tuple, Union from control.chargepoint.chargepoint import Chargepoint +from control.consumer.usage import ConsumerUsage from dataclass_utils.factories import empty_list_factory from modules.common.component_type import ComponentType @@ -93,11 +94,20 @@ def hierarchy_add_item_below(self, new_id: int, new_type: ComponentType, id_to_f def hierarchy_add_item_below_evu(self, new_id: int, new_type: ComponentType) -> None: ... def hierarchy_remove_item(self, id_to_find: int, keep_children: bool = True) -> None: ... + def update_linked_counter_hierarchy(self, + consumer_id: int, + old_counter_id: Optional[int], + new_counter_id: Optional[int]) -> bool: ... + class LoadmanagementPrioProtocol(Protocol): @property def data(self) -> CounterAllData: ... def add_loadmanagement_prio_item(self, type: ComponentType, id: int) -> None: ... + def update_consumer_loadmanagement_prio(self, consumer_id: int, usage_type: ConsumerUsage) -> bool: ... + def _has_loadmanagement_prio_item( + self, type: ComponentType, id: int, entries: List[Dict]) -> bool: ... + def remove_loadmanagement_prio_item(self, type: ComponentType, id: int) -> None: ... def _remove_loadmanagement_prio_item(self, type: ComponentType, id: int, entry: List[Dict]) -> bool: ... def sort_cps_by_loadmanagement_prios_nested(self, filtered_cps: List[Chargepoint]) -> List[List[Chargepoint]]: ... diff --git a/packages/control/counter_all/hierarchy.py b/packages/control/counter_all/hierarchy.py index deb21187a1..25c0770b76 100644 --- a/packages/control/counter_all/hierarchy.py +++ b/packages/control/counter_all/hierarchy.py @@ -11,6 +11,55 @@ class HierarchyMixin: + def _is_entry_of_type(self: HierarchyProtocol, id_to_find: int, type_to_find: ComponentType) -> bool: + entry = self.get_entry_of_element(id_to_find) + return bool(entry) and entry.get("type") == type_to_find.value + + def _get_parent_counter_id_of_consumer(self: HierarchyProtocol, consumer_id: int) -> Optional[int]: + parent = self.get_entry_of_parent(consumer_id) + if not parent or parent.get("type") != ComponentType.COUNTER.value: + return None + return parent["id"] + + def _add_unlinked_counter_below_consumer_parent_if_needed(self: HierarchyProtocol, + consumer_id: int, + counter_id: int) -> bool: + if self._is_entry_of_type(counter_id, ComponentType.COUNTER): + return False + parent_counter_id = self._get_parent_counter_id_of_consumer(consumer_id) + if parent_counter_id is None: + return False + self.hierarchy_add_item_below(counter_id, ComponentType.COUNTER, parent_counter_id) + return True + + def _remove_linked_counter_from_hierarchy_if_present(self: HierarchyProtocol, counter_id: int) -> bool: + counter_entry = self.get_entry_of_element(counter_id) + if not counter_entry or counter_entry.get("type") != ComponentType.COUNTER.value: + return False + parent_counter_id = self.get_entry_of_parent(counter_id).get("id") + if parent_counter_id is None: + return False + self.hierarchy_remove_item(counter_id) + return True + + def update_linked_counter_hierarchy(self: HierarchyProtocol, + consumer_id: int, + old_counter_id: Optional[int], + new_counter_id: Optional[int]) -> bool: + hierarchy_changed = False + + if not self._is_entry_of_type(consumer_id, ComponentType.CONSUMER): + return False + + if new_counter_id is not None: + hierarchy_changed = self._remove_linked_counter_from_hierarchy_if_present(new_counter_id) + + if old_counter_id is not None and old_counter_id != new_counter_id: + if self._add_unlinked_counter_below_consumer_parent_if_needed(consumer_id, old_counter_id): + hierarchy_changed = True + + return hierarchy_changed + def get_all_elements_without_children(self: HierarchyProtocol, id: int) -> List[Dict]: self.childless = [] self._get_all_elements_without_children_recursive(self.get_entry_of_element(id)) diff --git a/packages/control/counter_all/loadmanagement_prio.py b/packages/control/counter_all/loadmanagement_prio.py index 5bfe377d6d..571f189f2d 100644 --- a/packages/control/counter_all/loadmanagement_prio.py +++ b/packages/control/counter_all/loadmanagement_prio.py @@ -2,6 +2,7 @@ from typing import Dict, Generator, List, Tuple from control.chargepoint.chargepoint import Chargepoint +from control.consumer.usage import ConsumerUsage, NOT_CONTROLLED from control.counter_all.counter_all_data import LoadmanagementPrioProtocol from modules.common.component_type import ComponentType @@ -13,6 +14,30 @@ class LoadmanagementPrioMixin: def add_loadmanagement_prio_item(self: LoadmanagementPrioProtocol, type: ComponentType, id: int) -> None: self.data.get.loadmanagement_prios.append({"type": type.value, "id": id}) + def update_consumer_loadmanagement_prio( + self: LoadmanagementPrioProtocol, consumer_id: int, usage_type: ConsumerUsage) -> bool: + consumer_in_prios = self._has_loadmanagement_prio_item( + ComponentType.CONSUMER, consumer_id, self.data.get.loadmanagement_prios) + if usage_type in NOT_CONTROLLED: + if consumer_in_prios: + self.remove_loadmanagement_prio_item(ComponentType.CONSUMER, consumer_id) + return True + elif consumer_in_prios is False: + self.add_loadmanagement_prio_item(ComponentType.CONSUMER, consumer_id) + return True + return False + + def _has_loadmanagement_prio_item(self: LoadmanagementPrioProtocol, + type: ComponentType, + id: int, + entries: List[Dict]) -> bool: + for entry in entries: + if entry["type"] == type.value and entry["id"] == id: + return True + if entry["type"] == "group" and self._has_loadmanagement_prio_item(type, id, entry["children"]): + return True + return False + def remove_loadmanagement_prio_item(self: LoadmanagementPrioProtocol, type: ComponentType, id: int) -> None: if self._remove_loadmanagement_prio_item(type, id, self.data.get.loadmanagement_prios) is False: # Kein Grund, die Löschung des restlichen Elements (Topics, Hierarchie) abzubrechen, wenn der diff --git a/packages/control/counter_all/loadmanagement_prio_test.py b/packages/control/counter_all/loadmanagement_prio_test.py index 5bb780ed92..3dc1b7e640 100644 --- a/packages/control/counter_all/loadmanagement_prio_test.py +++ b/packages/control/counter_all/loadmanagement_prio_test.py @@ -5,6 +5,7 @@ import pytest from control.chargepoint.chargepoint import Chargepoint +from control.consumer.usage import ConsumerUsage from control.counter_all.counter_all import CounterAll from modules.common.component_type import ComponentType @@ -76,6 +77,36 @@ def test_add_item(loadmanagement_prios: List[Dict], assert c.data.get.loadmanagement_prios == expected_loadmanagement_prios +@pytest.mark.parametrize( + "loadmanagement_prios, usage_type, expected_loadmanagement_prios, expected_changed", + [ + pytest.param([], ConsumerUsage.CONTINUOUS, [{"type": "consumer", "id": 2}], True, id="add consumer"), + pytest.param([{"type": "consumer", "id": 2}], ConsumerUsage.CONTINUOUS, + [{"type": "consumer", "id": 2}], False, id="do not add duplicate"), + pytest.param([{ + "type": "group", + "label": "Verbraucher", + "children": [{"type": "consumer", "id": 2}], + }], ConsumerUsage.METER_ONLY, [], True, id="remove consumer from group"), + pytest.param([], ConsumerUsage.METER_ONLY, [], False, id="ignore absent meter"), + pytest.param([{"type": "consumer", "id": 2}], ConsumerUsage.SELF_CONTROLLED, [], True, + id="remove self-controlled consumer"), + pytest.param([], ConsumerUsage.SELF_CONTROLLED, [], False, id="ignore absent self-controlled consumer"), + ], +) +def test_update_consumer_loadmanagement_prio(loadmanagement_prios: List[Dict], + usage_type: ConsumerUsage, + expected_loadmanagement_prios: List[Dict], + expected_changed: bool): + c = CounterAll() + c.data.get.loadmanagement_prios = loadmanagement_prios + + changed = c.update_consumer_loadmanagement_prio(2, usage_type) + + assert c.data.get.loadmanagement_prios == expected_loadmanagement_prios + assert changed is expected_changed + + @pytest.mark.parametrize( "loadmanagement_prios, type, id, expected_loadmanagement_prios", [ diff --git a/packages/control/counter_test.py b/packages/control/counter_test.py index c1bd1ff754..b8550a815a 100644 --- a/packages/control/counter_test.py +++ b/packages/control/counter_test.py @@ -111,6 +111,30 @@ def test_set_current_left(loadmanagement_available: bool, assert counter.data.set.raw_currents_left == expected_raw_currents_left +def test_set_current_left_nets_out_own_current_despite_noise_on_unused_phase(monkeypatch, data_): + """ Ein einphasig ladender Ladepunkt zeigt auf ungenutzten Phasen oft ein geringes negatives + Messrauschen (zB -0.05A). min(element_current) < 0 hat das faelschlich als Einspeisung eingeordnet, + wodurch der eigene Ladestrom nirgends von currents_raw abgezogen wurde - das Lastmanagement hielt + die eigene Ladung dann faelschlich fuer Fremdlast (siehe Matts Log in Discussion #3908).""" + # setup + get_loads_of_counter_mock = Mock(return_value=["cp4"]) + monkeypatch.setattr(data.data.counter_all_data, "get_loads_of_counter", get_loads_of_counter_mock) + data.data.cp_data["cp4"].data.config.phase_1 = 1 + data.data.cp_data["cp4"].data.get.currents = [20, 0.05, -0.05] + data.data.cp_data["cp4"].data.get.power = 4600 + counter = Counter(0) + counter.data.config.max_currents = [35]*3 + counter.data.config.max_total_power = 35*3*230 + counter.data.config.max_power_errorcase = 7000 + counter.data.get.currents = [10, -5, -3] + + # execution + counter._set_current_left(True) + + # evaluation + assert counter.data.set.raw_currents_left == [45, 40.05, 37.95] + + @dataclass class Params: name: str @@ -199,6 +223,24 @@ def test_control_range(control_range, evu_power, expected_range_offset, general_ assert range_offset == expected_range_offset +@pytest.mark.parametrize("load_factory, expected", + [pytest.param(lambda: Chargepoint(0, None), -200, id="Ladepunkt"), + pytest.param(lambda: Consumer(0), -50, id="Verbraucher")]) +def test_calc_switch_off_threshold_by_load(load_factory, expected: float, general_data_fixture): + # setup + surplus_config = data.data.general_data.data.chargemode_config.surplus + surplus_config.feed_in_limit = False + surplus_config.vehicle.switch_off_threshold = -200 + surplus_config.consumer.switch_off_threshold = -50 + c = Counter(0) + + # execution + threshold = c.calc_switch_off_threshold(load_factory()) + + # evaluation + assert threshold == expected + + def test_reset_switch_on_off_ignores_stale_timestamp_without_delay_state(general_data_fixture, monkeypatch): # setup evu_counter = Counter(0) diff --git a/packages/control/ev/charge_template.py b/packages/control/ev/charge_template.py index d6a309064f..db8bd9ba3e 100644 --- a/packages/control/ev/charge_template.py +++ b/packages/control/ev/charge_template.py @@ -205,11 +205,13 @@ def time_charging(self, SOC_REACHED = "Keine Ladung, da das Ladeziel bereits erreicht wurde." AMOUNT_REACHED = "Keine Ladung, da die Energiemenge bereits geladen wurde." + INSTANT_CHARGING_BIDI = "Fahrzeug entlädt." def instant_charging(self, soc: Optional[float], used_amount: float, - charging_type: str) -> Tuple[int, ChargemodeEnum, Optional[str], int]: + charging_type: str, + bidi_state: BidiState) -> Tuple[int, ChargemodeEnum, Optional[str], int]: """ prüft, ob die Lademengenbegrenzung erreicht wurde und setzt entsprechend den Ladestrom. """ message = None @@ -231,6 +233,15 @@ def instant_charging(self, current = 0 sub_mode = ChargemodeEnum.STOP message = self.AMOUNT_REACHED + elif current < 0: + if bidi_state == BidiState.BIDI_CAPABLE: + sub_mode = ChargemodeEnum.BIDI_CHARGING + message = self.INSTANT_CHARGING_BIDI + else: + message = bidi_state.value + current = 0 + sub_mode = ChargemodeEnum.STOP + return current, sub_mode, message, phases except Exception: log.exception("Fehler im ev-Modul "+str(self.data.id)) diff --git a/packages/control/ev/charge_template_test.py b/packages/control/ev/charge_template_test.py index 9136ba4ac5..3b860bd5bc 100644 --- a/packages/control/ev/charge_template_test.py +++ b/packages/control/ev/charge_template_test.py @@ -169,7 +169,7 @@ def test_instant_charging(selected: str, current_soc: float, used_amount: float, ct.data.chargemode.instant_charging.limit.amount = 1000 # execution - ret = ct.instant_charging(current_soc, used_amount, ChargingType.AC.value) + ret = ct.instant_charging(current_soc, used_amount, ChargingType.AC.value, BidiState.CP_NOT_BIDI_CAPABLE) # evaluation assert ret == expected diff --git a/packages/control/ev/ev.py b/packages/control/ev/ev.py index 0a1e77abcf..7e24057424 100644 --- a/packages/control/ev/ev.py +++ b/packages/control/ev/ev.py @@ -195,7 +195,9 @@ def get_required_current(self, required_current, submode, tmp_message, phases = charge_template.instant_charging( self.data.get.soc, imported_since_plugged, - charging_type) + charging_type, + bidi + ) elif charge_template.data.chargemode.selected == Chargemode.PV_CHARGING: required_current, submode, tmp_message, phases = charge_template.pv_charging( self.data.get.soc, control_parameter.min_current, charging_type, imported_since_plugged) diff --git a/packages/control/io_device.py b/packages/control/io_device.py index 1b2b4839f7..74399b4e2c 100644 --- a/packages/control/io_device.py +++ b/packages/control/io_device.py @@ -1,7 +1,11 @@ from dataclasses import dataclass, field -from typing import Dict, Optional, Tuple, Union +import logging +from typing import Dict, Iterator, Optional, Tuple, Union +from control import data from control.limiting_value import LoadmanagementLimit from helpermodules.constants import NO_ERROR +from modules.common.configurable_io import ConfigurableIo +from modules.common.fault_state import FaultStateContext from modules.io_actions.controllable_consumers.dimming.api_eebus import DimmingEebus from modules.io_actions.controllable_consumers.dimming.api_io import DimmingIo @@ -12,6 +16,18 @@ from modules.io_actions.generator_systems.stepwise_control.api_eebus import StepwiseControlEebus from modules.io_actions.generator_systems.stepwise_control.api_io import StepwiseControlIo +log = logging.getLogger(__name__) + +IoAction = Union[ + DimmingIo, + DimmingEebus, + DimmingDirectControl, + RippleControlReceiver, + StepwiseControlEebus, + StepwiseControlIo, + LoadManager, +] + @dataclass class Get: @@ -57,53 +73,69 @@ def __init__(self, num: Union[int, str]): class IoActions: def __init__(self): - self.actions: Dict[int, Union[DimmingIo, DimmingEebus, DimmingDirectControl, - RippleControlReceiver, StepwiseControlEebus, StepwiseControlIo, - LoadManager]] = {} + self.actions: Dict[int, IoAction] = {} - def setup(self): + def iter_actions_with_io_device(self) -> Iterator[Tuple[IoAction, ConfigurableIo]]: for action in self.actions.values(): - action.setup() + io_device = data.data.system_data.get(f"io{action.config.configuration.io_device}") + if not isinstance(io_device, ConfigurableIo): + log.error(f"I/O device io{action.config.configuration.io_device} not found.") + continue + yield action, io_device - def dimming_get_import_power_left(self, device: Dict) -> Tuple[Optional[float], LoadmanagementLimit]: - for action in self.actions.values(): - if isinstance(action, (DimmingIo, DimmingEebus)): - for d in action.config.configuration.devices: - if device == d: - return action.dimming_get_import_power_left() + def setup(self): + for action, io_device in self.iter_actions_with_io_device(): + with FaultStateContext(io_device.fault_state, update_always=False): + action.setup() + + def dimming_get_import_power_left(self, + device: Dict[str, Union[int, str]] + ) -> Tuple[Optional[float], LoadmanagementLimit]: + for action, io_device in self.iter_actions_with_io_device(): + with FaultStateContext(io_device.fault_state, update_always=False): + if isinstance(action, (DimmingIo, DimmingEebus)): + for d in action.config.configuration.devices: + if device == d: + return action.dimming_get_import_power_left() else: return None, LoadmanagementLimit(None, None) - def dimming_set_import_power_left(self, device: Dict, used_power: float) -> Optional[float]: - for action in self.actions.values(): - if isinstance(action, (DimmingIo, DimmingEebus)): - for d in action.config.configuration.devices: - if d == device: - return action.dimming_set_import_power_left(used_power) - - def dimming_via_direct_control(self, device: Dict) -> Tuple[Optional[float], LoadmanagementLimit]: - for action in self.actions.values(): - if isinstance(action, DimmingDirectControl): - for d in action.config.configuration.devices: - if device == d: - return action.dimming_via_direct_control() + def dimming_set_import_power_left(self, + device: Dict[str, Union[int, str]], used_power: float) -> Optional[float]: + for action, io_device in self.iter_actions_with_io_device(): + with FaultStateContext(io_device.fault_state, update_always=False): + if isinstance(action, (DimmingIo, DimmingEebus)): + for d in action.config.configuration.devices: + if d == device: + return action.dimming_set_import_power_left(used_power) + + def dimming_via_direct_control(self, + device: Dict[str, Union[int, str]]) -> Tuple[Optional[float], LoadmanagementLimit]: + for action, io_device in self.iter_actions_with_io_device(): + with FaultStateContext(io_device.fault_state, update_always=False): + if isinstance(action, DimmingDirectControl): + for d in action.config.configuration.devices: + if device == d: + return action.dimming_via_direct_control() else: return None, LoadmanagementLimit(None, None) - def ripple_control_receiver(self, device: Dict) -> Tuple[float, LoadmanagementLimit]: - for action in self.actions.values(): - if isinstance(action, RippleControlReceiver): - for d in action.config.configuration.devices: - if device == d: - return action.ripple_control_receiver() + def ripple_control_receiver(self, device: Dict[str, Union[int, str]]) -> Tuple[float, LoadmanagementLimit]: + for action, io_device in self.iter_actions_with_io_device(): + with FaultStateContext(io_device.fault_state, update_always=False): + if isinstance(action, RippleControlReceiver): + for d in action.config.configuration.devices: + if device == d: + return action.ripple_control_receiver() else: return 1, LoadmanagementLimit(None, None) def stepwise_control(self, device_id: int) -> Tuple[Optional[float], LoadmanagementLimit]: - for action in self.actions.values(): - if isinstance(action, (StepwiseControlEebus, StepwiseControlIo)): - if device_id in [component["id"] for component in action.config.configuration.devices]: - return action.control_stepwise() + for action, io_device in self.iter_actions_with_io_device(): + with FaultStateContext(io_device.fault_state, update_always=False): + if isinstance(action, (StepwiseControlEebus, StepwiseControlIo)): + if device_id in [component["id"] for component in action.config.configuration.devices]: + return action.control_stepwise() else: return None, LoadmanagementLimit(None, None) diff --git a/packages/control/load.py b/packages/control/load.py index 48dfa99fb3..ec24a305f6 100644 --- a/packages/control/load.py +++ b/packages/control/load.py @@ -9,31 +9,26 @@ log = logging.getLogger(__name__) +# Zustände, in denen reserved_surplus/released_surplus gerade eine laufende Reservierung halten (siehe die +# jeweiligen += beim Eintritt und -= beim Verlassen dieser Zustände in counter.py/ev.py/chargepoint.py). +# NO_CHARGING_ALLOWED gehört bewusst nicht dazu: jede Reservierung wird spätestens beim Übergang in diesen +# Zustand bereits wieder freigegeben (siehe zB Counter.reset_switch_on_off()), er wird hier also nie mit einer +# noch offenen Reservierung erreicht. +RESERVATION_HOLDING_STATES = (ChargepointState.PERFORMING_PHASE_SWITCH, + ChargepointState.PHASE_SWITCH_DELAY, + ChargepointState.SWITCH_OFF_DELAY, + ChargepointState.SWITCH_ON_DELAY) + def reset_pv_data_if_no_active_delays() -> None: - """ Wenn keine EV angesteckt sind oder keine Verzögerungen aktiv sind, werden die Algorithmus-Werte + """ Wenn keine Komponente gerade eine Reservierung offen hält, werden die Algorithmus-Werte zurückgesetzt. (dient der Robustheit) """ try: for load in list(data.data.cp_data.values()) + list(data.data.consumer_data.values()): try: - control_parameter = load.data.control_parameter - if isinstance(load, Chargepoint): - if (not load.data.get.plug_state or - (control_parameter.state != ChargepointState.PERFORMING_PHASE_SWITCH and - control_parameter.state != ChargepointState.PHASE_SWITCH_DELAY and - control_parameter.state != ChargepointState.SWITCH_OFF_DELAY and - control_parameter.state != ChargepointState.SWITCH_ON_DELAY and - control_parameter.state != ChargepointState.NO_CHARGING_ALLOWED)): - continue - break - else: - # Verbraucher haben keinen Plug-Status. - # Nur laufende Ein-/Ausschaltverzögerungen müssen den Reset verhindern. - if (control_parameter.state != ChargepointState.SWITCH_OFF_DELAY and - control_parameter.state != ChargepointState.SWITCH_ON_DELAY): - continue + if load.data.control_parameter.state in RESERVATION_HOLDING_STATES: break except Exception: log.exception(f"Fehler beim Bereinigen der Werte für Ladepunkt/Verbraucher {load.num}") diff --git a/packages/control/load_test.py b/packages/control/load_test.py index c9aa4d7e18..0c13dd8e4e 100644 --- a/packages/control/load_test.py +++ b/packages/control/load_test.py @@ -1,6 +1,8 @@ from typing import Dict from unittest.mock import Mock +import pytest + from control import data, load from control.chargepoint.chargepoint import Chargepoint from control.chargepoint.chargepoint_state import ChargepointState @@ -38,27 +40,27 @@ def test_do_not_reset_pv_data_when_consumer_switch_off_delay_active(): evu_counter.reset_pv_data.assert_not_called() -def test_do_not_reset_pv_data_with_plugged_chargepoint_no_charging_allowed(): +def test_reset_pv_data_with_chargepoint_no_charging_allowed(): + # eine wartende, aber nicht (mehr) reservierte Komponente darf den robustness-Reset nicht dauerhaft + # blockieren - jede Reservierung wird bereits beim Übergang in NO_CHARGING_ALLOWED freigegeben. cp = Mock(spec=Chargepoint, num="1") - cp.data = Mock( - control_parameter=Mock(state=ChargepointState.NO_CHARGING_ALLOWED), - get=Mock(plug_state=True), - ) + cp.data = Mock(control_parameter=Mock(state=ChargepointState.NO_CHARGING_ALLOWED)) evu_counter = _setup_control_data({"cp1": cp}, {}) load.reset_pv_data_if_no_active_delays() - evu_counter.reset_pv_data.assert_not_called() + evu_counter.reset_pv_data.assert_called_once() -def test_reset_pv_data_with_unplugged_chargepoint_no_charging_allowed(): +@pytest.mark.parametrize("state", [ChargepointState.PERFORMING_PHASE_SWITCH, + ChargepointState.PHASE_SWITCH_DELAY, + ChargepointState.SWITCH_OFF_DELAY, + ChargepointState.SWITCH_ON_DELAY]) +def test_do_not_reset_pv_data_with_chargepoint_holding_a_reservation(state): cp = Mock(spec=Chargepoint, num="1") - cp.data = Mock( - control_parameter=Mock(state=ChargepointState.NO_CHARGING_ALLOWED), - get=Mock(plug_state=False), - ) + cp.data = Mock(control_parameter=Mock(state=state)) evu_counter = _setup_control_data({"cp1": cp}, {}) load.reset_pv_data_if_no_active_delays() - evu_counter.reset_pv_data.assert_called_once() + evu_counter.reset_pv_data.assert_not_called() diff --git a/packages/control/loadmanagement.py b/packages/control/loadmanagement.py index 764e3332f0..e19f14d2c7 100644 --- a/packages/control/loadmanagement.py +++ b/packages/control/loadmanagement.py @@ -80,6 +80,26 @@ def get_available_currents_surplus(self, limit = new_limit if new_limit.limiting_value is not None else limit return available_currents, limit + def get_available_currents_bidi(self, + missing_currents: List[float], + cp_voltage: float, + counter: Counter, + feed_in: int = 0) -> Tuple[List[float], LoadmanagementLimit]: + raw_currents_left = counter.data.set.raw_currents_left + available_currents, limit = self._limit_by_current(counter, missing_currents, raw_currents_left) + + available_currents, new_limit = self._limit_by_power( + counter, available_currents, cp_voltage, counter.data.set.raw_power_left, feed_in) + limit = new_limit if new_limit.limiting_value is not None else limit + + if f"counter{counter.num}" == data.data.counter_all_data.get_evu_counter_str(): + available_currents, new_limit = self._limit_by_unbalanced_load( + counter, available_currents, raw_currents_left, + len([value for value in missing_currents if value != 0])) + limit = new_limit if new_limit.limiting_value is not None else limit + + return available_currents, limit + def _limit_by_unbalanced_load(self, counter: Counter, available_currents: List[float], @@ -110,21 +130,28 @@ def _limit_by_power(self, # (Probleme bei einphasig angeschlossenen Wallboxen) currents = available_currents.copy() limit = LoadmanagementLimit(None, None) - if raw_power_left is None: + raw_exported_power_left = counter.data.set.raw_exported_power_left + total_power = sum([c * cp_voltage for c in available_currents]) + power_left = raw_power_left if total_power >= 0 else raw_exported_power_left + + if power_left is None: return currents, limit - elif raw_power_left > 0: + elif power_left > 0: if feed_in is not None: - raw_power_left = max(raw_power_left - feed_in, 0) - log.debug(f"Verbleibende Leistung unter Berücksichtigung der Einspeisegrenze: {raw_power_left}W") - if sum([c * cp_voltage for c in available_currents]) > raw_power_left: + power_left = max(power_left - feed_in, 0) + log.debug(f"Verbleibende Leistung unter Berücksichtigung der Einspeisegrenze: {power_left}W") + if abs(total_power) > power_left: + current_sum = sum(available_currents) for i in range(0, 3): try: # Am meisten belastete Phase trägt am meisten zur Leistungsreduktion bei. - currents[i] = available_currents[i] / sum(available_currents) * raw_power_left / cp_voltage + # abs(current_sum) verhindert Vorzeichenwechsel beim Entladen. + currents[i] = available_currents[i] / abs(current_sum) * power_left / cp_voltage + except ZeroDivisionError: # bei einphasig angeschlossenen Wallboxen ist die Spannung der anderen Phasen 0V currents[i] = 0.0 - log.debug(f"Leistungsüberschreitung auf {raw_power_left}W korrigieren: {available_currents}") + log.debug(f"Leistungsüberschreitung auf {power_left}W korrigieren: {available_currents}") limit = LoadmanagementLimit(LimitingValue.POWER.value.format(get_component_name_by_id(counter.num)), LimitingValue.POWER) return currents, limit @@ -138,9 +165,13 @@ def _limit_by_current(self, missing_currents: List[float], raw_currents_left: List[float]) -> Tuple[List[float], LoadmanagementLimit]: available_currents = [0.0]*3 + raw_exported_currents_left = counter.data.set.raw_exported_currents_left limit = LoadmanagementLimit(None, None) for i in range(0, 3): - available_currents[i] = min(missing_currents[i], raw_currents_left[i]) + if missing_currents[i] >= 0: + available_currents[i] = min(missing_currents[i], raw_currents_left[i]) + else: + available_currents[i] = max(missing_currents[i], -raw_exported_currents_left[i]) if available_currents != missing_currents: log.debug(f"Stromüberschreitung {missing_currents}W korrigieren: {available_currents}") limit = LoadmanagementLimit(LimitingValue.CURRENT.value.format(get_component_name_by_id(counter.num)), diff --git a/packages/control/process.py b/packages/control/process.py index 09abe7ab02..607d227c4c 100644 --- a/packages/control/process.py +++ b/packages/control/process.py @@ -19,6 +19,7 @@ from modules.common.abstract_io import AbstractIoDevice from modules.common.configurable_consumer import SetLimitData from modules.common.configurable_device import set_power_limit_wrapper +from modules.common.fault_state import FaultStateContext from modules.common.fault_state_level import FaultStateLevel from modules.io_actions.controllable_consumers.dimming.api_io import DimmingIo from modules.io_actions.controllable_consumers.dimming_direct_control.api import DimmingDirectControl @@ -26,6 +27,7 @@ from modules.io_actions.generator_systems.stepwise_control.api_io import StepwiseControlIo log = logging.getLogger(__name__) +control_command_log = logging.getLogger("steuve_control_command") class Process: @@ -96,31 +98,38 @@ def process_algorithm_results(self) -> 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(): - if isinstance(action, DimmingDirectControl): - for d in action.config.configuration.devices: - if d["type"] == "io": - data.data.io_states[f"io_states{d['id']}"].data.set.digital_output[d["digital_output"]] = ( - action.dimming_via_direct_control()[0] is None # active output (True) if no dimming - ) - if isinstance(action, DimmingIo): - for d in action.config.configuration.devices: - if d["type"] == "io": - data.data.io_states[f"io_states{d['id']}"].data.set.digital_output[d["digital_output"]] = ( - not action.dimming_active() # active output (True) if no dimming - ) - if isinstance(action, (StepwiseControlEebus, StepwiseControlIo)): - # check if passthrough is enabled - if (action.config.configuration.passthrough_enabled and - action.config.configuration.io_output_device is not None): - # find output pattern by value - for pattern in action.config.configuration.output_pattern: - if pattern["value"] == action.control_stepwise()[0]: - # set digital outputs according to matching output_pattern - for output in pattern["matrix"].keys(): - data.data.io_states[ - f"io_states{action.config.configuration.io_output_device}" - ].data.set.digital_output[output] = pattern["matrix"][output] + for action, io_device in data.data.io_actions.iter_actions_with_io_device(): + with FaultStateContext(io_device.fault_state, update_always=False): + try: + if isinstance(action, DimmingDirectControl): + for d in action.config.configuration.devices: + if d["type"] == "io": + digital_output = data.data.io_states[f"io_states{d['id']}"].data.set.digital_output + # active output (True) if no dimming + digital_output[d["digital_output"]] = action.dimming_via_direct_control()[0] is None + if isinstance(action, DimmingIo): + for d in action.config.configuration.devices: + if d["type"] == "io": + digital_output = data.data.io_states[f"io_states{d['id']}"].data.set.digital_output + # active output (True) if no dimming + digital_output[d["digital_output"]] = not action.dimming_active() + if isinstance(action, (StepwiseControlEebus, StepwiseControlIo)): + # check if passthrough is enabled + if (action.config.configuration.passthrough_enabled and + action.config.configuration.io_output_device is not None): + # find output pattern by value + for pattern in action.config.configuration.output_pattern: + if pattern["value"] == action.control_stepwise()[0]: + # set digital outputs according to matching output_pattern + for output in pattern["matrix"].keys(): + data.data.io_states[ + f"io_states{action.config.configuration.io_output_device}" + ].data.set.digital_output[output] = pattern["matrix"][output] + except KeyError as e: + control_command_log.error( + f"Ausgang konnte für die Aktion {action.config.name} nicht zugeordnet werden.") + raise KeyError(f"Ausgang konnte für die Aktion {action.config.name} nicht zugeordnet werden. " + "Bitte prüfen Sie die Konfiguration.") from e for io in data.data.system_data.values(): if isinstance(io, AbstractIoDevice): modules_threads.append( diff --git a/packages/helpermodules/broker.py b/packages/helpermodules/broker.py index c9b6940c6f..ecd5d2d30c 100644 --- a/packages/helpermodules/broker.py +++ b/packages/helpermodules/broker.py @@ -35,9 +35,9 @@ def __init__(self, def start_infinite_loop(self) -> None: self.client.loop_forever() - def start_finite_loop(self) -> None: + def start_finite_loop(self, timeout: float = 1) -> None: self.client.loop_start() - time.sleep(1) + time.sleep(timeout) self.client.loop_stop() def disconnect(self) -> None: diff --git a/packages/helpermodules/command.py b/packages/helpermodules/command.py index be0cb0c5f9..11ee114bf1 100644 --- a/packages/helpermodules/command.py +++ b/packages/helpermodules/command.py @@ -1203,7 +1203,7 @@ def addConsumer(self, connection_id: str, payload: dict) -> None: self._publish_default_metadata_fields(f"openWB/set/consumer/{new_id}", ConsumerGet()) self._publish_default_metadata_fields(f"openWB/set/consumer/{new_id}", ConsumerSet()) Pub().pub(f"openWB/set/consumer/{new_id}/extra_meter", None) - Pub().pub(f"openWB/set/consumer/{new_id}/usage", asdict(Usage())) + Pub().pub(f"openWB/set/consumer/{new_id}/usage", asdict(Usage(type=consumer_default["usage"][0]))) self.max_id_hierarchy = new_id Pub().pub("openWB/set/command/max_id/hierarchy", new_id) pub_user_message( diff --git a/packages/helpermodules/command_test.py b/packages/helpermodules/command_test.py index d9115dfbd4..d01f479802 100644 --- a/packages/helpermodules/command_test.py +++ b/packages/helpermodules/command_test.py @@ -1,10 +1,13 @@ from unittest.mock import Mock +from types import SimpleNamespace import pytest from control.chargepoint.chargepoint import Chargepoint from control.chargepoint.chargepoint_state_update import ChargepointStateUpdate +from control.consumer.usage import ConsumerUsage import dataclass_utils +from helpermodules import command from helpermodules.command import Command from helpermodules.measurement_logging import process_log from helpermodules.subdata import SubData @@ -74,3 +77,33 @@ def test_getDailyLog(regular_daily_log_entry, assert len(mock_pub.method_calls) == 1 assert mock_pub.method_calls[0][1][0] == 'openWB/set/log/daily/20250616' assert mock_pub.method_calls[0][1][1] == regular_daily_log_entry_processed_legacy_converted + + +@pytest.mark.parametrize("usage_type", [ConsumerUsage.SUSPENDABLE_TUNABLE, ConsumerUsage.METER_ONLY]) +def test_add_consumer_uses_module_default_usage_type(usage_type, mock_pub, monkeypatch): + consumer_setup = SimpleNamespace( + id=0, + type="test_consumer", + name="Test-Verbraucher", + info={}, + configuration=SimpleNamespace(), + vendor="test", + usage=(usage_type,), + ) + descriptor = SimpleNamespace(configuration_factory=Mock(return_value=consumer_setup)) + monkeypatch.setattr(command.importlib, "import_module", Mock(return_value=SimpleNamespace( + device_descriptor=descriptor))) + monkeypatch.setattr(command, "pub_user_message", Mock()) + monkeypatch.setattr(SubData, "counter_all_data", Mock()) + SubData.counter_all_data.get_id_evu_counter.return_value = 0 + SubData.counter_all_data.data.get.hierarchy = [] + SubData.counter_all_data.data.get.loadmanagement_prios = [] + command_instance = Command.__new__(Command) + command_instance.max_id_hierarchy = 0 + + command_instance.addConsumer("test", {"data": {"vendor": "test", "type": "test_consumer"}}) + + usage_calls = [call for call in mock_pub.pub.call_args_list + if call.args[0] == "openWB/set/consumer/1/usage"] + assert len(usage_calls) == 1 + assert usage_calls[0].args[1]["type"] == usage_type.value diff --git a/packages/helpermodules/create_debug.py b/packages/helpermodules/create_debug.py index 88e1b95450..6c2db31f0c 100644 --- a/packages/helpermodules/create_debug.py +++ b/packages/helpermodules/create_debug.py @@ -131,6 +131,9 @@ def config_and_state(): if secondary is False: with ErrorHandlingContext(): parsed_data += f"\n## Hierarchy ##\n{get_hierarchy(data.data.counter_all_data.data.get.hierarchy)}\n" + with ErrorHandlingContext(): + parsed_data += (f"\n## Priorities ##\n" + f"{get_priorities(data.data.counter_all_data.data.get.loadmanagement_prios)}\n") with ErrorHandlingContext(): if secondary: @@ -237,6 +240,13 @@ def get_hierarchy(hierarchy, level=0): parsed_data += f"{element['type']}: {cp.name} (ID: {element['id']})\n" except Exception: parsed_data += f"{element['type']} (ID: {element['id']})\n" + elif element["type"] == "consumer": + try: + consumer = data.data.consumer_data[f"consumer{element['id']}"].data.module + parsed_data += (f"{element['type']}: {consumer.name} " + f"(ID: {element['id']}, consumer_type: {consumer.type})\n") + except Exception: + parsed_data += f"{element['type']} (ID: {element['id']})\n" else: try: for key, value in data.data.system_data.items(): @@ -268,6 +278,28 @@ def get_hierarchy(hierarchy, level=0): return parsed_data +def get_priorities(priorities, level=0): + # get friendly names of elements + priority = 1 + parsed_data = "" + for element in priorities: + parsed_data += "-" * (level * 2) + "| " + if level == 0: + parsed_data += f"Prio: {priority}, " + priority += 1 + if element["type"] == "group": + parsed_data += f"{element['type']}: {element.get('label', 'unnamed')}\n" + elif element["type"] == "vehicle": + vehicle = data.data.ev_data[f"ev{element['id']}"].data + parsed_data += f"{element['type']}: {vehicle.name} (ID: {element['id']})\n" + elif element["type"] == "consumer": + consumer = data.data.consumer_data[f"consumer{element['id']}"].data.module + parsed_data += f"{element['type']}: {consumer.name} (ID: {element['id']}, consumer_type: {consumer.type})\n" + if "children" in element and element["children"]: + parsed_data += get_priorities(element["children"], level + 1) + return parsed_data + + def get_parsed_cp_data(cp: Chargepoint) -> str: parsed_data = "" with ErrorHandlingContext(): @@ -426,11 +458,11 @@ def write_to_file(file_handler, func, default: Optional[Any] = None): write_to_file(df, lambda: header) write_to_file(df, lambda: f'# section: system #\n{get_common_data()}' f'Kernel: {run_shell_command("uname -s -r -v -m -o")}' - 'Model: ' - f'{run_shell_command("cat /proc/device-tree/model 2>/dev/null||echo unknown")}\n' - f'CID:\n{run_shell_command("mmc cid read /sys/block/mmcblk0/device")}\n' f'Uptime:{run_command(["uptime"])}{run_command(["free"])}\n') - write_to_file(df, lambda: f'# section: hardware #\n{get_hardware_data()}') + write_to_file(df, lambda: '# section: hardware #\nModel: ' + f'{run_shell_command("cat /proc/device-tree/model 2>/dev/null||echo unknown")}\n' + f'CID:\n{run_shell_command("mmc cid read /sys/block/mmcblk0/device")}') + write_to_file(df, lambda: f'{get_hardware_data()}') write_to_file(df, lambda: f'USB_Devices:\n{run_shell_command(["lsusb"])}\n') write_to_file(df, lambda: f"# section: configuration and state #\n{config_and_state()}") write_to_file(df, lambda: f"# section: errors #\n{filter_log_file('main', 'ERROR', 30)}\n") diff --git a/packages/helpermodules/data_migration/data_migration.py b/packages/helpermodules/data_migration/data_migration.py index 40da4697bc..510448599d 100644 --- a/packages/helpermodules/data_migration/data_migration.py +++ b/packages/helpermodules/data_migration/data_migration.py @@ -25,7 +25,8 @@ from helpermodules.data_migration.id_mapping import MapId from helpermodules.hardware_configuration import update_hardware_configuration from helpermodules.measurement_logging.process_log import get_totals -from helpermodules.measurement_logging.write_log import LegacySmartHomeLogData, get_names +from helpermodules.measurement_logging.process_log_entry_builder import LegacySmartHomeLogData +from helpermodules.measurement_logging.write_log import get_names from helpermodules.timecheck import convert_timedelta_to_time_string, get_difference from helpermodules.utils import joined_thread_handler from helpermodules.utils.precision_math import string_to_float, string_to_int diff --git a/packages/helpermodules/exceptions/registry.py b/packages/helpermodules/exceptions/registry.py index b83987142c..ed745ecae2 100644 --- a/packages/helpermodules/exceptions/registry.py +++ b/packages/helpermodules/exceptions/registry.py @@ -25,7 +25,8 @@ class ExceptionRegistry: def translate_exception(self, exception: Exception) -> Tuple[str, FaultStateLevel]: entry = self.find_registry_entry(exception) if entry is None: - return str(exception.args[0]), FaultStateLevel.ERROR + message = (str(exception.args[0]) if exception.args else str(exception)) or exception.__class__.__name__ + return message, FaultStateLevel.ERROR if isinstance(entry.handler, str): return entry.handler, FaultStateLevel.ERROR result = entry.handler(exception) diff --git a/packages/helpermodules/exceptions/registry_test.py b/packages/helpermodules/exceptions/registry_test.py index 7d3d90d258..a39897184f 100644 --- a/packages/helpermodules/exceptions/registry_test.py +++ b/packages/helpermodules/exceptions/registry_test.py @@ -31,6 +31,11 @@ class ErrorF(ErrorD): pass +class EmptyStringException(Exception): + def __str__(self): + return "" + + @pytest.mark.parametrize("exception,expected_message", [ [ErrorRoot, "ErrorRoot"], [ErrorB, "B"], @@ -68,3 +73,21 @@ def test_accepts_all_supported_formats(handler): # evaluation assert isinstance(actual[0], str) assert actual[0] == "msg" + + +@pytest.mark.parametrize("exception,expected_message", [ + pytest.param(Exception(), "Exception", id="no args fallback"), + pytest.param(EmptyStringException(), "EmptyStringException", id="empty string fallback"), +]) +def test_translate_exception_falls_back_to_class_name_for_empty_message(exception: Exception, + expected_message: str, + monkeypatch): + # setup + monkeypatch.setattr(ExceptionRegistry, "registry", []) + registry = ExceptionRegistry() + + # execution + actual = registry.translate_exception(exception) + + # evaluation + assert actual[0] == expected_message diff --git a/packages/helpermodules/logger.py b/packages/helpermodules/logger.py index d3c62246de..73fdf53719 100644 --- a/packages/helpermodules/logger.py +++ b/packages/helpermodules/logger.py @@ -229,6 +229,33 @@ def combine_logs(base_path: str, name: str): f.write(logs) +# The totals subprocess needs its own log file, including messages from process_log. +# In the main process, process_log must keep propagating to main log. +def setup_generate_totals_logging(include_process_log: bool = False) -> None: + generate_totals_log = logging.getLogger("generate_totals") + generate_totals_log.setLevel(logging.DEBUG) + generate_totals_log.propagate = False + RAMDISK_PATH.mkdir(parents=True, exist_ok=True) + handler = next( + (handler for handler in generate_totals_log.handlers + if isinstance(handler, RotatingFileHandler) + and handler.baseFilename == str(RAMDISK_PATH / 'generate_totals.log')), + None, + ) + if handler is None: + handler = RotatingFileHandler(RAMDISK_PATH / 'generate_totals.log', maxBytes=5 * 1000000, backupCount=1) + handler.setFormatter(logging.Formatter(FORMAT_STR_SHORT)) + handler.addFilter(RedactingFilter()) + generate_totals_log.addHandler(handler) + + if include_process_log: + process_log = logging.getLogger("helpermodules.measurement_logging.process_log") + process_log.setLevel(logging.DEBUG) + process_log.propagate = False + if handler not in process_log.handlers: + process_log.addHandler(handler) + + def setup_logging() -> None: def mb_to_bytes(megabytes: int) -> int: return megabytes * 1000000 @@ -274,6 +301,9 @@ def mb_to_bytes(megabytes: int) -> int: mqtt_file_handler.addFilter(RedactingFilter()) mqtt_log.addHandler(mqtt_file_handler) + # Totals generation logger + setup_generate_totals_logging() + # Steuve control command logger steuve_control_command_log = logging.getLogger("steuve_control_command") steuve_control_command_log.propagate = False diff --git a/packages/helpermodules/measurement_logging/generate_totals_subprocess.py b/packages/helpermodules/measurement_logging/generate_totals_subprocess.py new file mode 100644 index 0000000000..7f722ae55a --- /dev/null +++ b/packages/helpermodules/measurement_logging/generate_totals_subprocess.py @@ -0,0 +1,93 @@ +import fcntl +import json +from pathlib import Path +from datetime import date + +from typing import List +from helpermodules import logger, pub +from helpermodules.measurement_logging.process_log import (save_daily_source_totals, + save_monthly_source_totals) + +import logging + + +BASE_PATH = Path(__file__).resolve().parents[3] +logger.setup_generate_totals_logging(include_process_log=True) +log = logging.getLogger("generate_totals") + +LOCK_FILE = BASE_PATH / "data" / "generate_totals.lock" + + +def get_all_days_to_calc(): + try: + daily_log_dir = BASE_PATH / "data" / "daily_log" + if not daily_log_dir.is_dir(): + return None + + today_stem = date.today().strftime("%Y%m%d") + daily_log_files = sorted( + [p for p in daily_log_dir.glob("*.json") + if p.stem.isdigit() and p.stem < today_stem], + key=lambda p: p.stem, + ) + + log.debug(f"Anzahl zu berechnender Tageslogs: {len(daily_log_files)}") + return daily_log_files + except Exception: + log.debug("Fehler beim Abrufen der Tageslogs. Es werden keine Tageslogs berechnet.") + return None + + +def get_all_months_to_calc(days: List[str] = None): + if days is None: + return None + current_month = date.today().strftime("%Y%m") + months = sorted({p.stem[:6] for p in days if len(p.stem) == 8 and p.stem[:6] < current_month}) + log.debug(f"Anzahl zu berechnender Monatslogs: {len(months)}") + return months + + +def _generate_totals(): + + errors = 0 + days_to_calc = get_all_days_to_calc() or [] + months_to_calc = get_all_months_to_calc(days_to_calc) or [] + + for day in days_to_calc: + try: + save_daily_source_totals(day.stem, saving=True) + except Exception: + log.exception(f"Fehler beim Generieren der Tageserträge für {day.stem}, Tag wird übersprungen.") + errors += 1 + continue + + for month in months_to_calc: + try: + save_monthly_source_totals(month, saving=True) + except Exception: + log.exception(f"Fehler beim Generieren der Monatswerte für {month}, Monat wird übersprungen.") + errors += 1 + continue + + log.info(f"Totals-Migration abgeschlossen. Fehlerhafte Logs: {errors}.") + publisher = pub.Pub() + publish_info = publisher.publisher.client.publish( + "openWB/set/system/log_data_ready", json.dumps(True), qos=1, retain=True) + publish_info.wait_for_publish() + + +def generate_totals(): + LOCK_FILE.parent.mkdir(parents=True, exist_ok=True) + + with LOCK_FILE.open("w") as lock_file: + try: + fcntl.flock(lock_file.fileno(), fcntl.LOCK_EX | fcntl.LOCK_NB) + except Exception: + log.exception("generate_totals_subprocess läuft bereits. " + "Der zweite Prozess wird beendet.") + return + _generate_totals() + + +if __name__ == "__main__": + generate_totals() diff --git a/packages/helpermodules/measurement_logging/generate_totals_subprocess_test.py b/packages/helpermodules/measurement_logging/generate_totals_subprocess_test.py new file mode 100644 index 0000000000..81d03cb521 --- /dev/null +++ b/packages/helpermodules/measurement_logging/generate_totals_subprocess_test.py @@ -0,0 +1,43 @@ +from unittest.mock import Mock + +from helpermodules.measurement_logging import generate_totals_subprocess + + +def test_generate_totals_calls_generator_when_lock_is_acquired(monkeypatch, tmp_path): + # setup + lock_file = tmp_path / "locks" / "generate_totals.lock" + monkeypatch.setattr(generate_totals_subprocess, "LOCK_FILE", lock_file) + + flock_mock = Mock() + generate_mock = Mock() + + monkeypatch.setattr(generate_totals_subprocess.fcntl, "flock", flock_mock) + monkeypatch.setattr(generate_totals_subprocess, "_generate_totals", generate_mock) + + # execution + generate_totals_subprocess.generate_totals() + + # evaluation + flock_mock.assert_called_once() + generate_mock.assert_called_once() + assert lock_file.parent.is_dir() + + +def test_generate_totals_skips_generator_when_lock_is_not_acquired(monkeypatch, tmp_path): + # setup + lock_file = tmp_path / "locks" / "generate_totals.lock" + monkeypatch.setattr(generate_totals_subprocess, "LOCK_FILE", lock_file) + + flock_mock = Mock(side_effect=RuntimeError("already locked")) + generate_mock = Mock() + + monkeypatch.setattr(generate_totals_subprocess.fcntl, "flock", flock_mock) + monkeypatch.setattr(generate_totals_subprocess, "_generate_totals", generate_mock) + + # execution + generate_totals_subprocess.generate_totals() + + # evaluation + flock_mock.assert_called_once() + generate_mock.assert_not_called() + assert lock_file.parent.is_dir() diff --git a/packages/helpermodules/measurement_logging/process_log.py b/packages/helpermodules/measurement_logging/process_log.py index 39bec7cf5d..8df895de7f 100644 --- a/packages/helpermodules/measurement_logging/process_log.py +++ b/packages/helpermodules/measurement_logging/process_log.py @@ -1,27 +1,28 @@ -from enum import Enum + +from copy import deepcopy import json import logging from pathlib import Path -from typing import Dict, List, Optional, Tuple, Union - +from typing import Dict, List, Optional +from datetime import datetime from helpermodules import timecheck -from helpermodules.measurement_logging.write_log import (LegacySmartHomeLogData, LogType, create_entry, - get_previous_entry) -from helpermodules.messaging import MessageType, pub_system_message -from helpermodules.utils.precision_math import decimal_add, decimal_divide, decimal_multiply, decimal_subtract +from helpermodules.utils.precision_math import decimal_divide +from helpermodules.measurement_logging.process_log_calculation import (CalculationType, + FILE_ERRORS, + analyse_percentage_totals, + analyse_percentage, + get_totals, + _analyse_energy_source, + _process_entries) +from helpermodules.measurement_logging.write_log import ( + LegacySmartHomeLogData, + create_entry, + get_previous_entry +) log = logging.getLogger(__name__) -class CalculationType(Enum): - ALL = 0 - POWER = 1 - ENERGY = 2 - - -FILE_ERRORS = (FileNotFoundError, json.decoder.JSONDecodeError) - - def get_default_charge_log_columns() -> Dict: return { "time_begin": True, @@ -184,52 +185,6 @@ def convert_legacy_units(data: dict) -> dict: return data -def safe_get_nested(data: Dict, *keys, default: Union[int, float] = 0) -> Union[int, float]: - current = data - for key in keys: - if isinstance(current, dict) and key in current: - current = current[key] - else: - return default - return current if isinstance(current, (int, float)) else default - - -def get_totals(entries: List, process_entries: bool = True) -> Dict: - """ Berechnet aus der übergebenen Liste "entries" die Summen (totals). - "process_entries" besagt, ob die Differenzen der einzelnen Einträge noch - berechnet werden müssen. - """ - if process_entries: - entries = _process_entries(entries, CalculationType.ENERGY) - totals = {"consumer": {}, "cp": {}, "counter": {}, "pv": {}, "bat": {}, "sh": {}, "hc": {}} - for totals_group in totals.keys(): - for entry in entries: - if totals_group in entry: - for entry_module in entry[totals_group]: - try: - if entry_module not in totals[totals_group]: - if totals_group == "hc": - totals[totals_group][entry_module] = {"energy_imported": 0.0} - elif totals_group == "pv": - totals[totals_group][entry_module] = {"energy_exported": 0.0} - else: - totals[totals_group][entry_module] = {"energy_imported": 0.0, "energy_exported": 0.0} - if totals_group == "counter" and "grid" in entry[totals_group][entry_module]: - totals[totals_group][entry_module]["grid"] = entry[ - totals_group][entry_module]["grid"] - for entry_module_key, entry_module_value in entry[totals_group][entry_module].items(): - if "grid" != entry_module_key and entry_module_key in totals[totals_group][entry_module]: - # avoid floating point issues with using Decimal - current_total = totals[totals_group][entry_module][entry_module_key] - totals[totals_group][entry_module][entry_module_key] = decimal_add( - current_total, entry_module_value) # totals in Wh! - - except Exception: - log.exception(f"Fehler beim Berechnen der Summe von {entry_module}; " - f"group:{totals_group}, module:{entry_module}, key:{entry_module_key}") - return totals - - def get_daily_log(date: str): data = _collect_daily_log_data(date) data["entries"] = _process_entries(data["entries"], CalculationType.ALL) @@ -245,8 +200,8 @@ def _collect_daily_log_data(date: str): log_data = json.load(json_file) if date == timecheck.create_timestamp_YYYYMMDD(): # beim aktuellen Tag den aktuellen Datensatz ergänzen - log_data["entries"].append(create_entry( - LogType.DAILY, LegacySmartHomeLogData(), get_previous_entry(parent_file, log_data))) + log_data["entries"].append(create_entry(LegacySmartHomeLogData(), + get_previous_entry(parent_file, log_data))) else: # bei älteren als letzten Datensatz den des nächsten Tags try: @@ -263,492 +218,305 @@ def _collect_daily_log_data(date: str): def get_monthly_log(date: str): - data = _collect_monthly_log_data(date) - data["entries"] = _process_entries(data["entries"], CalculationType.ENERGY) - data["totals"] = get_totals(data["entries"], False) - data = _analyse_energy_source(data) - return data + + if not (len(date) == 6 and date.isdigit()): + log.debug(f"Ungültiges Datum für Monats-Summen: {date}") + return {"entries": [], "names": {}, "colors": {}, "totals": {}} + # Nur Logs ab dem ältesten Tageslog auswerten + # Sonst werden unnötige Totals-Werte gespeichert + oldest_log_day = _oldest_log_day() + if (oldest_log_day is None + or date < oldest_log_day[:6]): # Jahr und Monat + return {"entries": [], "names": {}, "colors": {}, "totals": {}} + + monthly_entries = [] + monthly_names = {} + monthly_colors = {} + + today = timecheck.create_timestamp_YYYYMMDD() + day = f"{date}01" + + while day.startswith(date): + # Zukunftstage/-monate nicht verarbeiten, um keine leeren daily_totals zu erzeugen. + if day > today: + break + if day < oldest_log_day: + day = timecheck.get_relative_date_string(day, day_offset=1) + continue + + content = load_daily_source_totals_content(day) + if content is None: + # Dürfte eigentlich nie passieren... + content = save_daily_source_totals(day, saving=(day != today)) + + if isinstance(content, dict): + daily_totals = content.get("totals") + daily_entry = content.get("entry") + + if isinstance(daily_totals, dict) and isinstance(daily_entry, dict) and len(daily_entry) > 0: + daily_entry = deepcopy(daily_entry) + daily_entry["date"] = day + _apply_source_totals(daily_entry, daily_totals) + + monthly_entries.append(daily_entry) + if isinstance(content.get("names"), dict): + monthly_names.update(content["names"]) + if isinstance(content.get("colors"), dict): + monthly_colors.update(content["colors"]) + + day = timecheck.get_relative_date_string(day, day_offset=1) + + if len(monthly_entries) > 0: + data = {"entries": monthly_entries, "names": monthly_names, "colors": monthly_colors} + data["totals"] = get_totals(data["entries"], False) + data["totals"] = analyse_percentage_totals(data["entries"], data["totals"]) + return data + + # Fallback, wenn keine Daten vorhanden sind + return {"entries": [], "names": {}, "colors": {}, "totals": {}} + + +def get_yearly_log(year: str): + # Nur Logs ab dem ältesten Tageslog auswerten + # Sonst werden unnötige totals Werte gespeichert + oldest_log_day = _oldest_log_day() + if oldest_log_day is None or year < oldest_log_day[:4]: + return {"entries": [], "names": {}, "colors": {}, "totals": {}} + + monthly_entries = [] + monthly_names = {} + monthly_colors = {} + this_month = timecheck.create_timestamp_YYYYMM() + month = f"{year}01" + + while month.startswith(year): + if month > this_month: + break + + if month < oldest_log_day[:6]: + month = timecheck.get_relative_date_string(month, month_offset=1) + continue + + content = load_monthly_source_totals_content(month) + if content is None: + # Dürfte eigentlich nie passieren... + content = save_monthly_source_totals(month, None, saving=(month != this_month)) + + if isinstance(content, dict): + monthly_totals = content.get("totals") + monthly_entry = content.get("entry") + + if isinstance(monthly_totals, dict) and isinstance(monthly_entry, dict) and len(monthly_entry) > 0: + monthly_entry = deepcopy(monthly_entry) + monthly_entry["date"] = month + _apply_source_totals(monthly_entry, monthly_totals) + + monthly_entries.append(monthly_entry) + if isinstance(content.get("names"), dict): + monthly_names.update(content["names"]) + if isinstance(content.get("colors"), dict): + monthly_colors.update(content["colors"]) + month = timecheck.get_relative_date_string(month, month_offset=1) + + if len(monthly_entries) > 0: + data = {"entries": monthly_entries, "names": monthly_names, "colors": monthly_colors} + data["totals"] = get_totals(data["entries"], False) + data["totals"] = analyse_percentage_totals(data["entries"], data["totals"]) + return data + + # Fallback, wenn keine Daten vorhanden sind + return {"entries": [], "names": {}, "colors": {}, "totals": {}} + + +def _get_data_folder_path() -> str: + return str(Path(__file__).resolve().parents[3] / "data") -def _collect_monthly_log_data(date: str): +def save_daily_source_totals(date: str, saving: bool = True): try: - with open(f"{_get_data_folder_path()}/monthly_log/{date}.json", "r") as jsonFile: - log_data = json.load(jsonFile) - this_month = timecheck.create_timestamp_YYYYMM() - if date == this_month: - # add last entry of current day, if current month is requested - try: - today = timecheck.create_timestamp_YYYYMMDD() - with open(f"{_get_data_folder_path()}/daily_log/{today}.json", - "r") as todayJsonFile: - today_log_data = json.load(todayJsonFile) - if len(today_log_data["entries"]) > 0: - log_data["entries"].append(today_log_data["entries"][-1]) - except FILE_ERRORS: - pass - else: - # add first entry of next month - try: - next_date = timecheck.get_relative_date_string(date, month_offset=1) - with open(f"{_get_data_folder_path()}/monthly_log/{next_date}.json", - "r") as nextJsonFile: - next_log_data = json.load(nextJsonFile) - log_data["entries"].append(next_log_data["entries"][0]) - except FILE_ERRORS: - pass + if not (len(date) == 8 and date.isdigit()): + log.debug(f"Ungültiges Datum für Tages-Summen: {date}") + return None + data = _collect_daily_log_data(date) + source_entries = data.get("entries", []) + + # Keep one source snapshot for the daily output entry and process entries in place to avoid full-copy peaks. + source_daily_entry = _get_last_entry_for_period(source_entries, date, "%Y%m%d") + processed_entries = _process_entries(source_entries, calculation=CalculationType.ENERGY) + + totals = get_totals(processed_entries, process_entries=False) + analysed_data = _analyse_energy_source({ + "entries": processed_entries, + "totals": totals, + "names": data.get("names", {}) + }) + totals = analysed_data["totals"] + + daily_entry = {} + if source_daily_entry is not None: + daily_entry = deepcopy(source_daily_entry) + daily_entry["date"] = date + _apply_source_totals(daily_entry, totals) + + # Erzeugt Ordner daily_totals, falls nicht vorhanden + totals_dir = Path(_get_data_folder_path()) / "daily_totals" + filepath = totals_dir / f"{date}_totals.json" + + content = { + "date": date, + "totals": totals, + "entry": daily_entry, + "names": data.get("names", {}), + "colors": data.get("colors", {}) + } + + if saving: + totals_dir.mkdir(parents=True, exist_ok=True) + with open(str(filepath), "w") as jsonFile: + json.dump(content, jsonFile, ensure_ascii=False, indent=2) + + log.debug(f"Tages-Summen für {date} gespeichert in {filepath}") + + return content + except FILE_ERRORS: - log_data = {"entries": [], "names": {}} - return log_data + log.exception(f"Fehler beim Speichern der Tages-Summen für {date}") -def get_yearly_log(year: str): - data = _collect_yearly_log_data(year) - data["entries"] = _process_entries(data["entries"], CalculationType.ENERGY) - data["totals"] = get_totals(data["entries"], False) - data = _analyse_energy_source(data) - return data +def load_daily_source_totals_content(date: str): + try: + if not (len(date) == 8 and date.isdigit()): + log.debug(f"Ungültiges Datum für Tages-Summen: {date}") + return None + filepath = f"{_get_data_folder_path()}/daily_totals/{date}_totals.json" + if not Path(filepath).is_file(): + log.debug(f"Keine Tages-Summen-Datei gefunden: {filepath}") + return None -def _collect_yearly_log_data(year: str): - def add_monthly_log(month: str, check_next_month: bool = False) -> None: - monthly_log_path = Path(__file__).resolve().parents[3]/"data"/"monthly_log" - try: - with open(monthly_log_path / f"{month}.json", "r") as jsonFile: - content = json.load(jsonFile) - entries.append(content["entries"][0]) - # add last entry of current file if next file is missing - if check_next_month: - next_month = timecheck.get_relative_date_string(month, month_offset=1) - if not (monthly_log_path / (next_month+".json")).is_file(): - entries.append(content["entries"][-1]) - log.debug(f"Keine Logdatei für Monat {next_month} gefunden, " - f"füge letzten Datensatz von {month} ein: {entries[-1]['date']}") - names.update(content["names"]) - colors.update(content["colors"]) - except FILE_ERRORS: - log.debug(f"Kein Log für Monat {month} gefunden.") - - def add_daily_log(day: str) -> None: - try: - with open(f"{_get_data_folder_path()}/daily_log/{day}.json", "r") as dayJsonFile: - day_log_data = json.load(dayJsonFile) - if len(day_log_data["entries"]) > 0: - entries.append(day_log_data["entries"][-1]) - except FILE_ERRORS: - pass - - entries = [] - names = {} - colors = {} - dates = [] - - # we have to find a valid data range - this_year = timecheck.create_timestamp_YYYY() - this_month = timecheck.create_timestamp_YYYYMM() - if year < this_year: - # if the requested year is in the past, just add all possible months - for month in range(1, 13): - dates.append(f"{year}{month:02}") - else: - # add all months until current month - for month in range(1, int(this_month[-2:])+1): - dates.append(f"{year}{month:02}") - # add data for month range - for date in dates: - try: - log.debug(f"add regular month: {date}") - add_monthly_log(date, date != this_month) - except Exception: - log.exception(f"Fehler beim Zusammenstellen der Jahresdaten für Monat {date}") - - # now we have to find a valid "next" entry for proper calculation - if year == this_year: # current year - # add todays last entry - this_day = timecheck.create_timestamp_YYYYMMDD() - try: - log.debug(f"add today: {this_day}") - add_daily_log(this_day) - except Exception: - log.exception(f"Fehler beim Zusammenstellen der Jahresdaten für den aktuellen Tag {this_day}") - else: - # no special handling here, just add first entry of next month - next_date = f"{int(year)+1}01" - try: - log.debug(f"add next month: {next_date}") - add_monthly_log(next_date) - except Exception: - log.exception(f"Fehler beim Zusammenstellen der Jahresdaten für Monat {next_date}") - - # return our data - return {"entries": entries, "names": names, "colors": colors} - - -def _analyse_energy_source(data, calc_cp: Optional[str] = None) -> Dict: - if data and len(data["entries"]) > 0: - try: - if data.get("message") is None: - data["message"] = "" - for i in range(0, len(data["entries"])): - data["entries"][i], message_analyse = analyse_percentage(data["entries"][i]) - data["entries"][i], message_calc = calc_energy_imported_by_source( - data["entries"][i], data["names"], message_key_filter=calc_cp) - data["message"] += message_analyse + message_calc - data["totals"] = analyse_percentage_totals(data["entries"], data["totals"]) - except Exception: - log.exception("Fehler beim Analysieren der Energiequellen") - pub_system_message({}, "Fehler beim Berechnen des Strom-Mix", MessageType.ERROR) - data["message"] = "Fehler beim Berechnen des Strom-Mix." - return data + with open(str(filepath), "r") as jsonFile: + content = json.load(jsonFile) + log.debug(f"Tages-Summen für {date} geladen aus {filepath}") + return content -def analyse_percentage(entry) -> Tuple[Dict, str]: - EOOR_STATE_MSG = ("Der Strom-Mix um " + entry["date"] + - " konnte nicht berechnet werden, da sich {} im Fehlerzustand befindet. Alle Verbräuche werden" + - " dem Netz zugerechnet.\n") - - def format(value): - return round(value, 4) - - def get_valid_energy(section: str, value: str) -> Union[int, float]: - """Liefert den Energiewert ohne fehlerhafte Einzelmodule.""" - modules = entry.get(section, {}) - if (len(modules) <= 1 or - safe_get_nested(entry, section, "all", "fault_state") != 2): - return safe_get_nested(entry, section, "all", value) - return sum( - module_data.get(value, 0) - for module_name, module_data in modules.items() - if module_name != "all" and module_data.get("fault_state", 0) != 2 - ) - - def get_grid_counter(entry) -> Dict: - # es gibt nur einen Zähler am EVU-Punkt - for counter in entry["counter"].values(): - if counter.get("grid") is True: - return counter - else: - raise KeyError(f"Kein Zähler für das Netz gefunden in Eintrag '{entry['timestamp']}'.") - try: - message = "" - grid_counter = get_grid_counter(entry) - # nur wenn der Grid-Zähler im Feherlzustand ist - # ins Fallback gehen - if (grid_counter.get("fault_state", None) == 2): - entry["energy_source"] = {"grid": 1, "pv": 0, "bat": 0, "cp": 0} - message += EOOR_STATE_MSG.format("der Zähler für das Netz") - else: - if safe_get_nested(entry, "bat", "all", "fault_state") == 2 and len(entry.get("bat", {})) > 1: - message += f"Der Strom-Mix um {entry['date'] } wird trotz Fehlerzustand " \ - "mindestens eines Speichers aus den vorhandenen Messwerten berechnet. \n" - if safe_get_nested(entry, "cp", "all", "fault_state") == 2 and len(entry.get("cp", {})) > 1: - message += f"Der Strom-Mix um {entry['date'] } wird trotz Fehlerzustand " \ - "mindestens eines Ladepunkts aus den vorhandenen Messwerten berechnet. \n" - if safe_get_nested(entry, "pv", "all", "fault_state") == 2 and len(entry.get("pv", {})) > 1: - message += f"Der Strom-Mix um {entry['date'] } wird trotz Fehlerzustand " \ - "mindestens eines Wechselrichters aus den vorhandenen Messwerten berechnet. \n" - - bat_imported = get_valid_energy("bat", "energy_imported") - bat_exported = get_valid_energy("bat", "energy_exported") - cp_exported = get_valid_energy("cp", "energy_exported") - pv_exported = get_valid_energy("pv", "energy_exported") - grid_imported = grid_counter.get("energy_imported", 0) - grid_exported = grid_counter.get("energy_exported", 0) - consumption = grid_imported - grid_exported + pv_exported + bat_exported - bat_imported + cp_exported - if consumption < 0: - consumption = 0 - - try: - # Berechnung der Energiequellenanteile: - # Da die genaue Aufteilung der Energiequellen nicht bekannt ist, - # wird die Einspeisung (grid_exported) entsprechend der folgenden Priorität aufgeteilt: - # 1. PV - # 2. Batterie - # 3. CP - # Sollte die Einspeisung nicht komplett von PV gedeckt werden, - # wird der Rest von der Batterie übernommen, und falls nötig, vom CP. - # - # Entsprechend ähnlich wird der Batterieimport nach folgender Priorität aufgeteilt: - # 1. PV - # 2. Grid - # 3. CP - # - # Anschließend wird der Verbrauch (ohne Einspeisung und Batterieimport) auf energy_source aufgeteilt. - if consumption <= 0: - entry["energy_source"] = {"grid": 0, "pv": 0, "bat": 0, "cp": 0} - else: - - direct = {"grid": grid_imported, "pv": pv_exported, "bat": bat_exported, "cp": cp_exported} - - # Einspeißung aufteilen - unassigned_export = grid_exported - for source in ("pv", "bat", "cp"): - if direct[source] > unassigned_export: - direct[source] -= unassigned_export - unassigned_export = 0 - break - else: - unassigned_export -= direct[source] - direct[source] = 0 - - if unassigned_export > 0: - # Fehler / inkonsistente Energiebilanz - log.warning( - f"grid_exported konnte nicht vollständig verteilt werden. " - f"Unverteilter Anteil: {unassigned_export}" - ) - - # Batterieimport aufteilen - unassigned_bat_import = bat_imported - for source in ("pv", "grid", "cp"): - if direct[source] > unassigned_bat_import: - direct[source] -= unassigned_bat_import - unassigned_bat_import = 0 - break - else: - unassigned_bat_import -= direct[source] - direct[source] = 0 - - if unassigned_bat_import > 0: - # Fehler / inkonsistente Energiebilanz - log.warning( - f"bat_imported konnte nicht vollständig verteilt werden. " - f"Unverteilter Anteil: {unassigned_bat_import}" - ) - - # Anschließend Verbrauch aufteilen, wenn vorhanden - direct_total = sum(direct.values()) - - if direct_total <= 0: - entry["energy_source"] = {"grid": 0, "pv": 0, "bat": 0, "cp": 0} - else: - entry["energy_source"] = { - "grid": format(direct["grid"] / direct_total), - "pv": format(direct["pv"] / direct_total), - "bat": format(direct["bat"] / direct_total), - "cp": format(direct["cp"] / direct_total)} - except ZeroDivisionError: - entry["energy_source"] = {"grid": 0, "pv": 0, "bat": 0, "cp": 0} - except Exception: - log.exception(f"Fehler beim Berechnen des Strom-Mix von {entry['timestamp']}") - message += f"Fehler beim Berechnen des Strom-Mix von {entry['timestamp']}.\n" - finally: - return entry, message + except FILE_ERRORS: + log.exception(f"Fehler beim Laden der Tages-Summen für {date}") -ERROR_STATE_MESSAGE = ("Die Anteile der Energiequellen für {} konnten nicht berechnet werden, da er sich im " + - "Fehlerzustand befindet. Die Verbräuche werden mit 0 kWh angesetzt.\n") +def save_monthly_source_totals(date: str, data: Optional[Dict] = None, saving: bool = True): + try: + # Hauptsächlich für Midnight-Handler + # Wenn keine Daten übergeben werden, dann die Monatswerte berechnen + if data is None: + data = get_monthly_log(date) + + totals = data["totals"] + source_entries = data.get("entries", []) + monthly_entry = {} + source_monthly_entry = _get_last_entry_for_period(source_entries, date, "%Y%m") + if source_monthly_entry is not None: + # Nur den letzten Eintrag des Monats nehmen + monthly_entry = deepcopy(source_monthly_entry) + monthly_entry["date"] = date + + # Erzeugt Ordner monthly_totals, falls nicht vorhanden + totals_dir = Path(_get_data_folder_path()) / "monthly_totals" + filepath = totals_dir / f"{date}_totals.json" + content = { + "date": date, + "totals": totals, + "entry": monthly_entry, + "names": data.get("names", {}), + "colors": data.get("colors", {}) + } + + if saving: + totals_dir.mkdir(parents=True, exist_ok=True) + with open(str(filepath), "w") as jsonFile: + json.dump(content, jsonFile, ensure_ascii=False, indent=2) + + log.debug(f"Monats-Summen für {date} gespeichert in {filepath}") + return content + + except FILE_ERRORS: + log.exception(f"Fehler beim Speichern der Monats-Summen für {date}") -def calc_energy_imported_by_source(entry, names, message_key_filter: Optional[str] = None) -> Tuple[Dict, str]: +def load_monthly_source_totals_content(date: str): try: - message = "" - - if "energy_source" in entry.keys(): - energy_source = entry["energy_source"] - hc_section = entry.get("hc") - if isinstance(hc_section, dict) and "all" in hc_section: - hc_all = hc_section["all"] - if isinstance(hc_all, dict): - if hc_all.get("fault_state", 0) != 2 and "energy_imported" in hc_all: - for source in ("grid", "pv", "bat", "cp"): - hc_all[f"energy_imported_{source}"] = decimal_multiply( - hc_all["energy_imported"], energy_source[source]) - else: - for source in ("grid", "pv", "bat", "cp"): - hc_all[f"energy_imported_{source}"] = 0 - if message_key_filter is None or message_key_filter == "hc": - message += ERROR_STATE_MESSAGE.format("den Hausverbrauch") - - cp_section = entry.get("cp") - if isinstance(cp_section, dict): - for cp_key, cp_data in cp_section.items(): - if isinstance(cp_data, dict): - if cp_data.get("fault_state", 0) != 2 and "energy_imported" in cp_data: - for source in ("grid", "pv", "bat", "cp"): - cp_data[f"energy_imported_{source}"] = decimal_multiply( - cp_data["energy_imported"], energy_source[source]) - else: - for source in ("grid", "pv", "bat", "cp"): - cp_data[f"energy_imported_{source}"] = 0 - if message_key_filter is None or message_key_filter == cp_key: - message += ERROR_STATE_MESSAGE.format(f"Ladepunkt {names.get(cp_key, cp_key)}") - - consumer_section = entry.get("consumer") - if isinstance(consumer_section, dict): - for consumer_key, consumer_data in consumer_section.items(): - if isinstance(consumer_data, dict): - if consumer_data.get("fault_state", 0) != 2 and "energy_imported" in consumer_data: - for source in ("grid", "pv", "bat", "cp"): - consumer_data[f"energy_imported_{source}"] = decimal_multiply( - consumer_data["energy_imported"], energy_source[source]) - else: - for source in ("grid", "pv", "bat", "cp"): - consumer_data[f"energy_imported_{source}"] = 0 - if message_key_filter is None or message_key_filter == consumer_key: - message += ERROR_STATE_MESSAGE.format( - f"Verbraucher {names.get(consumer_key, consumer_key)}") - - counter_section = entry.get("counter") - if isinstance(counter_section, dict): - for counter_key, counter_data in counter_section.items(): - if isinstance(counter_data, dict) and counter_data.get("grid") is False: - if counter_data.get("fault_state", 0) != 2 and "energy_imported" in counter_data: - for source in ("grid", "pv", "bat", "cp"): - counter_data[f"energy_imported_{source}"] = decimal_multiply( - counter_data["energy_imported"], energy_source[source]) - else: - for source in ("grid", "pv", "bat", "cp"): - counter_data[f"energy_imported_{source}"] = 0 - if message_key_filter is None or message_key_filter == counter_key: - message += ERROR_STATE_MESSAGE.format(f"Zähler {names.get(counter_key, counter_key)}") - except Exception: - log.exception(f"Fehler beim Berechnen der Energie-Anteile aus dem Strom-Mix von {entry['timestamp']}") - message += f"Fehler beim Berechnen des Strom-Mix von {entry['timestamp']}.\n" - finally: - return entry, message - - -def analyse_percentage_totals(entries, totals): - for section in ("consumer", "cp", "hc"): - if "all" not in totals[section].keys(): - totals[section]["all"] = {} - for source in ("grid", "pv", "bat", "cp"): - totals["hc"]["all"].update({f"energy_imported_{source}": 0}) - for entry in entries: - if "hc" in entry.keys() and "all" in entry["hc"].keys(): - current_value = totals["hc"]["all"][f"energy_imported_{source}"] - add_value = entry["hc"]["all"].get(f"energy_imported_{source}", 0) - totals["hc"]["all"][f"energy_imported_{source}"] = decimal_add( - current_value, add_value) - for key in entry["cp"].keys(): - if f"energy_imported_{source}" in entry["cp"][key].keys(): - if totals["cp"][key].get(f"energy_imported_{source}") is None: - totals["cp"][key].update({f"energy_imported_{source}": 0}) - current_value = totals["cp"][key][f"energy_imported_{source}"] - add_value = entry["cp"][key][f"energy_imported_{source}"] - totals["cp"][key][f"energy_imported_{source}"] = decimal_add( - current_value, add_value) - for key in entry["consumer"].keys(): - if f"energy_imported_{source}" in entry["consumer"][key].keys(): - if totals["consumer"][key].get(f"energy_imported_{source}") is None: - totals["consumer"][key].update({f"energy_imported_{source}": 0}) - current_value = totals["consumer"][key][f"energy_imported_{source}"] - add_value = entry["consumer"][key][f"energy_imported_{source}"] - totals["consumer"][key][f"energy_imported_{source}"] = decimal_add( - current_value, add_value) - for key, counter in entry["counter"].items(): - if counter["grid"] is False and f"energy_imported_{source}" in counter: - if totals["counter"][key].get(f"energy_imported_{source}") is None: - totals["counter"][key].update({f"energy_imported_{source}": 0}) - current_value = totals["counter"][key][f"energy_imported_{source}"] - add_value = counter[f"energy_imported_{source}"] - totals["counter"][key][f"energy_imported_{source}"] = decimal_add( - current_value, add_value) - return totals - - -def _process_entries(entries: List, calculation: CalculationType): - if entries: - if len(entries) == 1: - # Wenn es nur einen Eintrag gibt, kann keine Differenz berechnet werden und die Werte sind 0. - entry = entries[0] - for type in ("bat", "consumer", "counter", "cp", "pv", "sh", "hc"): - if type in entry: - for module in entry[type].keys(): - if calculation in [CalculationType.POWER, CalculationType.ALL]: - entry[type][module].update({ - "power_average": 0, - "power_imported": 0, - "power_exported": 0 - }) - if calculation in [CalculationType.ENERGY, CalculationType.ALL]: - entry[type][module].update({ - "energy_imported": 0, - "energy_exported": 0 - }) - elif len(entries) > 1: - for i in range(0, len(entries)-1): - entry = entries[i] - next_entry = entries[i+1] - entries[i] = process_entry(entry, next_entry, calculation) - entries.pop() - return entries - - -def process_entry(entry: dict, next_entry: dict, calculation: CalculationType): - time_diff = next_entry["timestamp"] - entry["timestamp"] - for type in ("bat", "consumer", "counter", "cp", "pv", "sh", "hc"): - if type in entry: - for module in entry[type].keys(): - try: - new_data = {} - if "imported" in entry[type][module].keys() or "exported" in entry[type][module].keys(): - def get_current_and_next(value_key: str) -> Tuple[float, float]: - def get_single_value(source: dict, default: int = 0) -> float: - try: - return source[type][module][value_key] - except KeyError: - return default - current_value = get_single_value(entry) - return current_value, get_single_value(next_entry, current_value) - value_imported, next_value_imported = get_current_and_next("imported") - value_exported, next_value_exported = get_current_and_next("exported") - if calculation in [CalculationType.POWER, CalculationType.ALL]: - if next_value_imported < value_imported or next_value_exported < value_exported: - # do not calculate as we have a backwards jump in our meter value! - average_power = 0 - else: - average_power = _calculate_average_power( - time_diff, value_imported, next_value_imported, - value_exported, next_value_exported) - new_data.update({ - "power_average": average_power, - "power_imported": average_power if average_power >= 0 else 0, - "power_exported": average_power * -1 if average_power < 0 else 0 - }) - if calculation in [CalculationType.ENERGY, CalculationType.ALL]: - if next_value_imported < value_imported: - # do not calculate as we have a backwards jump in our meter value! - energy_imported = 0 - else: - energy_imported = decimal_subtract(next_value_imported, - value_imported) - if next_value_exported < value_exported: - # do not calculate as we have a backwards jump in our meter value! - energy_exported = 0 - else: - energy_exported = decimal_subtract(next_value_exported, - value_exported) - new_data.update({ - "energy_imported": energy_imported, - "energy_exported": energy_exported - }) - entry[type][module].update(new_data) - except Exception: - log.exception("Fehler beim Berechnen der Leistung") - # next_entry may contain new modules, we add them here - try: - for module, module_data in next_entry[type].items(): - if module not in entry[type].keys(): - log.debug(f"adding module {module} from next entry") - if calculation in [CalculationType.POWER, CalculationType.ALL]: - module_data.update({"power_average": 0, "power_imported": 0, "power_exported": 0}) - if calculation in [CalculationType.ENERGY, CalculationType.ALL]: - module_data.update({"energy_imported": 0, "energy_exported": 0}) - entry[type].update({module: module_data}) - except KeyError: - # catch missing "type" - pass + filepath = f"{_get_data_folder_path()}/monthly_totals/{date}_totals.json" + if not Path(filepath).is_file(): + log.debug(f"Keine Monats-Summen-Datei gefunden: {filepath}") + return None + + with open(str(filepath), "r") as jsonFile: + content = json.load(jsonFile) + + log.debug(f"Monats-Summen für {date} geladen aus {filepath}") + return content + + except FILE_ERRORS: + log.exception(f"Fehler beim Laden der Monats-Summen für {date}") + + +def _get_last_entry_for_period(entries: List, period: str, period_format: str) -> Optional[Dict]: + # Suche den letzten Eintrag in der Liste, der dem angegebenen Zeitraum entspricht. + for entry in reversed(entries): + if isinstance(entry, dict) and isinstance(entry.get("timestamp"), (int, float)): + entry_period = datetime.fromtimestamp(entry["timestamp"]).strftime(period_format) + if entry_period == period: + return entry + + # Fallback: Falls kein passender Zeitstempel gefunden wird, letzten gueltigen Eintrag verwenden. + for entry in reversed(entries): + if isinstance(entry, dict): + return entry + return None + + +def _apply_source_totals(entry: Dict, daily_totals: Dict): + for section, section_totals in daily_totals.items(): + section_data = entry.get(section) + if not isinstance(section_totals, dict): + continue + + if not isinstance(section_data, dict): + section_data = {} + entry[section] = section_data + + for module, module_totals in section_totals.items(): + module_data = section_data.get(module) + if not isinstance(module_totals, dict): + continue + + if not isinstance(module_data, dict): + module_data = {} + section_data[module] = module_data + + # Alle vorhandenen Summenfelder des Moduls mit den aggregierten Summen ueberschreiben. + module_data.update(module_totals) + # Der kopierte Eintrag enthält ggf. noch den energy_source des letzten + # Intervalls/Tages. Nach dem Einspielen der aggregierten Energiewerte + # muss der Strom-Mix deshlab ebenfalls neu berechnet werden. + entry.pop("energy_source", None) + entry, _ = analyse_percentage(entry) + return entry -def _calculate_average_power(time_diff: float, current_imported: float = 0, next_imported: float = 0, - current_exported: float = 0, next_exported: float = 0) -> float: - imported_diff = decimal_subtract(next_imported, current_imported) - exported_diff = decimal_subtract(next_exported, current_exported) - energy_diff = decimal_subtract(imported_diff, exported_diff) - return decimal_multiply(energy_diff, 3600 / time_diff) # Ws -> W +def _oldest_log_day() -> Optional[str]: + try: + daily_log_dir = Path(_get_data_folder_path()) / "daily_log" + if not daily_log_dir.is_dir(): + return None + daily_log_files = [p for p in daily_log_dir.glob("*.json") if p.stem.isdigit()] + if not daily_log_files: + return None -def _get_data_folder_path() -> str: - return str(Path(__file__).resolve().parents[3] / "data") + oldest_file = min(daily_log_files, key=lambda f: f.stem) + return oldest_file.stem + except Exception: + log.exception("Fehler beim Ermitteln des ältesten Tageslogs") + return None diff --git a/packages/helpermodules/measurement_logging/process_log_calculation.py b/packages/helpermodules/measurement_logging/process_log_calculation.py new file mode 100644 index 0000000000..71652d4e8e --- /dev/null +++ b/packages/helpermodules/measurement_logging/process_log_calculation.py @@ -0,0 +1,471 @@ +from enum import Enum +from typing import Dict, List, Optional, Tuple, Union +import json +import logging +from helpermodules.utils.precision_math import (decimal_add, + decimal_subtract, + decimal_multiply) + +from helpermodules.messaging import MessageType, pub_system_message + +log = logging.getLogger(__name__) + + +class CalculationType(Enum): + ALL = 0 + POWER = 1 + ENERGY = 2 + + +FILE_ERRORS = (FileNotFoundError, json.decoder.JSONDecodeError) + + +def safe_get_nested(data: Dict, *keys, default: Union[int, float] = 0) -> Union[int, float]: + current = data + for key in keys: + if isinstance(current, dict) and key in current: + current = current[key] + else: + return default + return current if isinstance(current, (int, float)) else default + + +def get_totals(entries: List, process_entries: bool = True) -> Dict: + """ Berechnet aus der übergebenen Liste "entries" die Summen (totals). + "process_entries" besagt, ob die Differenzen der einzelnen Einträge noch + berechnet werden müssen. + """ + if process_entries: + entries = _process_entries(entries, CalculationType.ENERGY) + totals = {"consumer": {}, "cp": {}, "counter": {}, "pv": {}, "bat": {}, "sh": {}, "hc": {}} + for totals_group in totals.keys(): + for entry in entries: + if totals_group in entry: + for entry_module in entry[totals_group]: + try: + if entry_module not in totals[totals_group]: + if totals_group == "hc": + totals[totals_group][entry_module] = {"energy_imported": 0.0} + elif totals_group == "pv": + totals[totals_group][entry_module] = {"energy_exported": 0.0} + else: + totals[totals_group][entry_module] = {"energy_imported": 0.0, "energy_exported": 0.0} + if totals_group == "counter" and "grid" in entry[totals_group][entry_module]: + totals[totals_group][entry_module]["grid"] = entry[ + totals_group][entry_module]["grid"] + for entry_module_key, entry_module_value in entry[totals_group][entry_module].items(): + if "grid" != entry_module_key and entry_module_key in totals[totals_group][entry_module]: + # avoid floating point issues with using Decimal + current_total = totals[totals_group][entry_module][entry_module_key] + totals[totals_group][entry_module][entry_module_key] = decimal_add( + current_total, entry_module_value) # totals in Wh! + + except Exception: + log.exception(f"Fehler beim Berechnen der Summe von {entry_module}; " + f"group:{totals_group}, module:{entry_module}, key:{entry_module_key}") + return totals + + +def _process_entries(entries: List, calculation: CalculationType): + if entries: + if len(entries) == 1: + # Wenn es nur einen Eintrag gibt, kann keine Differenz berechnet werden und die Werte sind 0. + entry = entries[0] + for type in ("bat", "consumer", "counter", "cp", "pv", "sh", "hc"): + if type in entry: + for module in entry[type].keys(): + if calculation in [CalculationType.POWER, CalculationType.ALL]: + entry[type][module].update({ + "power_average": 0, + "power_imported": 0, + "power_exported": 0 + }) + if calculation in [CalculationType.ENERGY, CalculationType.ALL]: + entry[type][module].update({ + "energy_imported": 0, + "energy_exported": 0 + }) + elif len(entries) > 1: + for i in range(0, len(entries)-1): + entry = entries[i] + next_entry = entries[i+1] + entries[i] = process_entry(entry, next_entry, calculation) + entries.pop() + return entries + + +def process_entry(entry: dict, next_entry: dict, calculation: CalculationType): + time_diff = next_entry["timestamp"] - entry["timestamp"] + for type in ("bat", "consumer", "counter", "cp", "pv", "sh", "hc"): + if type in entry: + for module in entry[type].keys(): + try: + new_data = {} + if "imported" in entry[type][module].keys() or "exported" in entry[type][module].keys(): + def get_current_and_next(value_key: str) -> Tuple[float, float]: + def get_single_value(source: dict) -> Optional[float]: + try: + value = source[type][module][value_key] + if isinstance(value, (int, float)): + return float(value) + except KeyError: + pass + return None + + current_value = get_single_value(entry) + next_value = get_single_value(next_entry) + + # Keep meter deltas neutral if one side is invalid/missing. + if current_value is None and next_value is None: + return 0.0, 0.0 + if current_value is None: + return next_value, next_value + if next_value is None: + return current_value, current_value + return current_value, next_value + value_imported, next_value_imported = get_current_and_next("imported") + value_exported, next_value_exported = get_current_and_next("exported") + if calculation in [CalculationType.POWER, CalculationType.ALL]: + if next_value_imported < value_imported or next_value_exported < value_exported: + # do not calculate as we have a backwards jump in our meter value! + average_power = 0 + else: + average_power = _calculate_average_power( + time_diff, value_imported, next_value_imported, + value_exported, next_value_exported) + new_data.update({ + "power_average": average_power, + "power_imported": average_power if average_power >= 0 else 0, + "power_exported": average_power * -1 if average_power < 0 else 0 + }) + if calculation in [CalculationType.ENERGY, CalculationType.ALL]: + if next_value_imported < value_imported: + # do not calculate as we have a backwards jump in our meter value! + energy_imported = 0 + else: + energy_imported = decimal_subtract(next_value_imported, + value_imported) + if next_value_exported < value_exported: + # do not calculate as we have a backwards jump in our meter value! + energy_exported = 0 + else: + energy_exported = decimal_subtract(next_value_exported, + value_exported) + new_data.update({ + "energy_imported": energy_imported, + "energy_exported": energy_exported + }) + entry[type][module].update(new_data) + except Exception: + log.exception("Fehler beim Berechnen der Leistung") + # next_entry may contain new modules, we add them here + try: + for module, module_data in next_entry[type].items(): + if module not in entry[type].keys(): + log.debug(f"adding module {module} from next entry") + if calculation in [CalculationType.POWER, CalculationType.ALL]: + module_data.update({"power_average": 0, "power_imported": 0, "power_exported": 0}) + if calculation in [CalculationType.ENERGY, CalculationType.ALL]: + module_data.update({"energy_imported": 0, "energy_exported": 0}) + entry[type].update({module: module_data}) + except KeyError: + # catch missing "type" + pass + return entry + + +def _calculate_average_power(time_diff: float, current_imported: float = 0, next_imported: float = 0, + current_exported: float = 0, next_exported: float = 0) -> float: + imported_diff = decimal_subtract(next_imported, current_imported) + exported_diff = decimal_subtract(next_exported, current_exported) + energy_diff = decimal_subtract(imported_diff, exported_diff) + return decimal_multiply(energy_diff, 3600 / time_diff) # Ws -> W + + +def analyse_percentage(entry) -> Tuple[Dict, str]: + EOOR_STATE_MSG = ("Der Strom-Mix um " + entry["date"] + + " konnte nicht berechnet werden, da sich {} im Fehlerzustand befindet. Alle Verbräuche werden" + + " dem Netz zugerechnet.\n") + + def format(value): + return round(value, 4) + + def get_valid_energy(section: str, value: str) -> Union[int, float]: + """Liefert den Energiewert ohne fehlerhafte Einzelmodule.""" + modules = entry.get(section, {}) + if (len(modules) <= 1 or + safe_get_nested(entry, section, "all", "fault_state") != 2): + return safe_get_nested(entry, section, "all", value) + return sum( + module_data.get(value, 0) + for module_name, module_data in modules.items() + if module_name != "all" and module_data.get("fault_state", 0) != 2 + ) + + def get_grid_counter(entry) -> Dict: + # es gibt nur einen Zähler am EVU-Punkt + for counter in entry["counter"].values(): + if counter.get("grid") is True: + return counter + else: + raise KeyError(f"Kein Zähler für das Netz gefunden in Eintrag '{entry['timestamp']}'.") + try: + message = "" + grid_counter = get_grid_counter(entry) + # nur wenn der Grid-Zähler im Feherlzustand ist + # ins Fallback gehen + if (grid_counter.get("fault_state", None) == 2): + entry["energy_source"] = {"grid": 1, "pv": 0, "bat": 0, "cp": 0} + message += EOOR_STATE_MSG.format("der Zähler für das Netz") + else: + if safe_get_nested(entry, "bat", "all", "fault_state") == 2 and len(entry.get("bat", {})) > 1: + message += f"Der Strom-Mix um {entry['date'] } wird trotz Fehlerzustand " \ + "mindestens eines Speichers aus den vorhandenen Messwerten berechnet. \n" + if safe_get_nested(entry, "cp", "all", "fault_state") == 2 and len(entry.get("cp", {})) > 1: + message += f"Der Strom-Mix um {entry['date'] } wird trotz Fehlerzustand " \ + "mindestens eines Ladepunkts aus den vorhandenen Messwerten berechnet. \n" + if safe_get_nested(entry, "pv", "all", "fault_state") == 2 and len(entry.get("pv", {})) > 1: + message += f"Der Strom-Mix um {entry['date'] } wird trotz Fehlerzustand " \ + "mindestens eines Wechselrichters aus den vorhandenen Messwerten berechnet. \n" + + bat_imported = get_valid_energy("bat", "energy_imported") + bat_exported = get_valid_energy("bat", "energy_exported") + cp_exported = get_valid_energy("cp", "energy_exported") + pv_exported = get_valid_energy("pv", "energy_exported") + grid_imported = grid_counter.get("energy_imported", 0) + grid_exported = grid_counter.get("energy_exported", 0) + consumption = grid_imported - grid_exported + pv_exported + bat_exported - bat_imported + cp_exported + if consumption < 0: + consumption = 0 + + try: + # Berechnung der Energiequellenanteile: + # Da die genaue Aufteilung der Energiequellen nicht bekannt ist, + # wird die Einspeisung (grid_exported) entsprechend der folgenden Priorität aufgeteilt: + # 1. PV + # 2. Batterie + # 3. CP + # Sollte die Einspeisung nicht komplett von PV gedeckt werden, + # wird der Rest von der Batterie übernommen, und falls nötig, vom CP. + # + # Entsprechend ähnlich wird der Batterieimport nach folgender Priorität aufgeteilt: + # 1. PV + # 2. Grid + # 3. CP + # + # Anschließend wird der Verbrauch (ohne Einspeisung und Batterieimport) auf energy_source aufgeteilt. + if consumption <= 0: + entry["energy_source"] = {"grid": 0, "pv": 0, "bat": 0, "cp": 0} + else: + + direct = {"grid": grid_imported, "pv": pv_exported, "bat": bat_exported, "cp": cp_exported} + + # Einspeißung aufteilen + unassigned_export = grid_exported + for source in ("pv", "bat", "cp"): + if direct[source] > unassigned_export: + direct[source] -= unassigned_export + unassigned_export = 0 + break + else: + unassigned_export -= direct[source] + direct[source] = 0 + + if unassigned_export > 0: + # Fehler / inkonsistente Energiebilanz + log.warning( + f"grid_exported konnte nicht vollständig verteilt werden. " + f"Unverteilter Anteil: {unassigned_export}" + ) + + # Batterieimport aufteilen + unassigned_bat_import = bat_imported + for source in ("pv", "grid", "cp"): + if direct[source] > unassigned_bat_import: + direct[source] -= unassigned_bat_import + unassigned_bat_import = 0 + break + else: + unassigned_bat_import -= direct[source] + direct[source] = 0 + + if unassigned_bat_import > 0: + # Fehler / inkonsistente Energiebilanz + log.warning( + f"bat_imported konnte nicht vollständig verteilt werden. " + f"Unverteilter Anteil: {unassigned_bat_import}" + ) + + # Anschließend Verbrauch aufteilen, wenn vorhanden + direct_total = sum(direct.values()) + + if direct_total <= 0: + entry["energy_source"] = {"grid": 0, "pv": 0, "bat": 0, "cp": 0} + else: + entry["energy_source"] = { + "grid": format(direct["grid"] / direct_total), + "pv": format(direct["pv"] / direct_total), + "bat": format(direct["bat"] / direct_total), + "cp": format(direct["cp"] / direct_total)} + except ZeroDivisionError: + entry["energy_source"] = {"grid": 0, "pv": 0, "bat": 0, "cp": 0} + except Exception: + log.exception(f"Fehler beim Berechnen des Strom-Mix von {entry['timestamp']}") + message += f"Fehler beim Berechnen des Strom-Mix von {entry['timestamp']}.\n" + finally: + return entry, message + + +ERROR_STATE_MESSAGE = ("Die Anteile der Energiequellen für {} konnten nicht berechnet werden, da er sich im " + + "Fehlerzustand befindet. Die Verbräuche werden mit 0 kWh angesetzt.\n") + + +def calc_energy_imported_by_source(entry, names, message_key_filter: Optional[str] = None) -> Tuple[Dict, str]: + try: + message = "" + + if "energy_source" in entry.keys(): + energy_source = entry["energy_source"] + hc_section = entry.get("hc") + if isinstance(hc_section, dict) and "all" in hc_section: + hc_all = hc_section["all"] + if isinstance(hc_all, dict): + if hc_all.get("fault_state", 0) != 2 and "energy_imported" in hc_all: + for source in ("grid", "pv", "bat", "cp"): + hc_all[f"energy_imported_{source}"] = decimal_multiply( + hc_all["energy_imported"], energy_source[source]) + else: + for source in ("grid", "pv", "bat", "cp"): + hc_all[f"energy_imported_{source}"] = 0 + if message_key_filter is None or message_key_filter == "hc": + message += ERROR_STATE_MESSAGE.format("den Hausverbrauch") + + cp_section = entry.get("cp") + if isinstance(cp_section, dict): + for cp_key, cp_data in cp_section.items(): + if isinstance(cp_data, dict): + if cp_data.get("fault_state", 0) != 2 and "energy_imported" in cp_data: + for source in ("grid", "pv", "bat", "cp"): + cp_data[f"energy_imported_{source}"] = decimal_multiply( + cp_data["energy_imported"], energy_source[source]) + else: + for source in ("grid", "pv", "bat", "cp"): + cp_data[f"energy_imported_{source}"] = 0 + if message_key_filter is None or message_key_filter == cp_key: + message += ERROR_STATE_MESSAGE.format(f"Ladepunkt {names.get(cp_key, cp_key)}") + + consumer_section = entry.get("consumer") + if isinstance(consumer_section, dict): + for consumer_key, consumer_data in consumer_section.items(): + if isinstance(consumer_data, dict): + if consumer_data.get("fault_state", 0) != 2 and "energy_imported" in consumer_data: + for source in ("grid", "pv", "bat", "cp"): + consumer_data[f"energy_imported_{source}"] = decimal_multiply( + consumer_data["energy_imported"], energy_source[source]) + else: + for source in ("grid", "pv", "bat", "cp"): + consumer_data[f"energy_imported_{source}"] = 0 + if message_key_filter is None or message_key_filter == consumer_key: + message += ERROR_STATE_MESSAGE.format( + f"Verbraucher {names.get(consumer_key, consumer_key)}") + + counter_section = entry.get("counter") + if isinstance(counter_section, dict): + for counter_key, counter_data in counter_section.items(): + if isinstance(counter_data, dict) and counter_data.get("grid") is False: + if counter_data.get("fault_state", 0) != 2 and "energy_imported" in counter_data: + for source in ("grid", "pv", "bat", "cp"): + counter_data[f"energy_imported_{source}"] = decimal_multiply( + counter_data["energy_imported"], energy_source[source]) + else: + for source in ("grid", "pv", "bat", "cp"): + counter_data[f"energy_imported_{source}"] = 0 + if message_key_filter is None or message_key_filter == counter_key: + message += ERROR_STATE_MESSAGE.format(f"Zähler {names.get(counter_key, counter_key)}") + except Exception: + log.exception(f"Fehler beim Berechnen der Energie-Anteile aus dem Strom-Mix von {entry['timestamp']}") + message += f"Fehler beim Berechnen des Strom-Mix von {entry['timestamp']}.\n" + finally: + return entry, message + + +def analyse_percentage_totals(entries, totals): + sources = ("grid", "pv", "bat", "cp") + + def ensure_zero_source_keys(module_totals: Dict): + if isinstance(module_totals, dict): + for source in sources: + module_totals[f"energy_imported_{source}"] = 0 + try: + for section in ("consumer", "cp", "hc"): + if "all" not in totals[section].keys(): + totals[section]["all"] = {} + for source in sources: + totals["hc"]["all"].update({f"energy_imported_{source}": 0}) + for entry in entries: + if "hc" in entry.keys() and "all" in entry["hc"].keys(): + current_value = totals["hc"]["all"][f"energy_imported_{source}"] + add_value = entry["hc"]["all"].get(f"energy_imported_{source}", 0) + totals["hc"]["all"][f"energy_imported_{source}"] = decimal_add( + current_value, add_value) + for key in entry["cp"].keys(): + if f"energy_imported_{source}" in entry["cp"][key].keys(): + if totals["cp"][key].get(f"energy_imported_{source}") is None: + totals["cp"][key].update({f"energy_imported_{source}": 0}) + current_value = totals["cp"][key][f"energy_imported_{source}"] + add_value = entry["cp"][key][f"energy_imported_{source}"] + totals["cp"][key][f"energy_imported_{source}"] = decimal_add( + current_value, add_value) + for key in entry["consumer"].keys(): + if f"energy_imported_{source}" in entry["consumer"][key].keys(): + if totals["consumer"][key].get(f"energy_imported_{source}") is None: + totals["consumer"][key].update({f"energy_imported_{source}": 0}) + current_value = totals["consumer"][key][f"energy_imported_{source}"] + add_value = entry["consumer"][key][f"energy_imported_{source}"] + totals["consumer"][key][f"energy_imported_{source}"] = decimal_add( + current_value, add_value) + for key, counter in entry["counter"].items(): + if counter["grid"] is False and f"energy_imported_{source}" in counter: + if totals["counter"][key].get(f"energy_imported_{source}") is None: + totals["counter"][key].update({f"energy_imported_{source}": 0}) + current_value = totals["counter"][key][f"energy_imported_{source}"] + add_value = counter[f"energy_imported_{source}"] + totals["counter"][key][f"energy_imported_{source}"] = decimal_add( + current_value, add_value) + except Exception: + log.exception("Fehler beim Berechnen der Summen der Energiequellen") + # Im Fehlerfall werden die Totals auf 0 gesetzt + # -> dann wird nur die Ladung/Entladung-Leistung angezeigt. + # -> sprich keine Aufteilung der Energiequellen, sondern nur die Gesamtwerte. + totals.setdefault("hc", {}) + totals["hc"].setdefault("all", {}) + ensure_zero_source_keys(totals["hc"]["all"]) + + totals.setdefault("cp", {}) + for key, module_totals in totals["cp"].items(): + ensure_zero_source_keys(module_totals) + + totals.setdefault("counter", {}) + for key, module_totals in totals["counter"].items(): + ensure_zero_source_keys(module_totals) + + return totals + return totals + + +def _analyse_energy_source(data, calc_cp: Optional[str] = None) -> Dict: + if data and len(data["entries"]) > 0: + try: + if data.get("message") is None: + data["message"] = "" + for i in range(0, len(data["entries"])): + data["entries"][i], message_analyse = analyse_percentage(data["entries"][i]) + data["entries"][i], message_calc = calc_energy_imported_by_source( + data["entries"][i], data["names"], message_key_filter=calc_cp) + data["message"] += message_analyse + message_calc + data["totals"] = analyse_percentage_totals(data["entries"], data["totals"]) + except Exception: + log.exception("Fehler beim Analysieren der Energiequellen") + pub_system_message({}, "Fehler beim Berechnen des Strom-Mix", MessageType.ERROR) + data["message"] = "Fehler beim Berechnen des Strom-Mix." + return data diff --git a/packages/helpermodules/measurement_logging/process_log_calculation_test.py b/packages/helpermodules/measurement_logging/process_log_calculation_test.py new file mode 100644 index 0000000000..dcaf0f5181 --- /dev/null +++ b/packages/helpermodules/measurement_logging/process_log_calculation_test.py @@ -0,0 +1,439 @@ +from copy import deepcopy +from typing import Dict +import pytest + +from helpermodules.measurement_logging.process_log_calculation import ( + analyse_percentage, + _calculate_average_power, + process_entry, + calc_energy_imported_by_source, + CalculationType) + + +@pytest.mark.parametrize("name", + ["regular", + "negative consumption", + "cp export"]) +def test_analyse_percentage(name: str, + daily_log_entry_percentage: Dict, + daily_log_entry_percentage_negative_consumption: Dict, + daily_log_entry_percentage_cp_discharge: Dict): + # setup + if name == "regular": + data = daily_log_entry_percentage + expected = deepcopy(data) + expected.update({"energy_source": {'bat': 0.2398, 'cp': 0.0, 'grid': 0.6504, 'pv': 0.1099}}) + elif name == "negative consumption": + data = daily_log_entry_percentage_negative_consumption + expected = deepcopy(data) + expected.update({"energy_source": {'bat': 0.0, 'cp': 0.0, 'grid': 0.0, 'pv': 0.0}}) + elif name == "cp export": + data = daily_log_entry_percentage_cp_discharge + expected = deepcopy(data) + expected.update({"energy_source": {'bat': 0.2006, 'cp': 0.1459, 'grid': 0.5441, 'pv': 0.1094}}) + + # execution + entry, message = analyse_percentage(data) + + # evaluation + assert entry == expected + assert message == "" + + +def test_analyse_percentage_ignores_faulty_modules(): + entry = { + "timestamp": 1234567890, + "date": "00:31", + "bat": { + "all": {"energy_imported": 0, "energy_exported": 120, "fault_state": 2}, + "bat1": {"energy_imported": 0, "energy_exported": 20, "fault_state": 0}, + "bat2": {"energy_imported": 0, "energy_exported": 100, "fault_state": 2}, + }, + "cp": { + "all": {"energy_exported": 80, "fault_state": 2}, + "cp1": {"energy_exported": 30, "fault_state": 0}, + "cp2": {"energy_exported": 50, "fault_state": 2}, + }, + "pv": { + "all": {"energy_exported": 100, "fault_state": 2}, + "pv1": {"energy_exported": 40, "fault_state": 0}, + "pv2": {"energy_exported": 60, "fault_state": 2}, + }, + "counter": { + "counter0": { + "grid": True, + "energy_imported": 100, + "energy_exported": 0, + "fault_state": 0, + } + }, + } + + result, message = analyse_percentage(entry) + + assert result["energy_source"] == { + "grid": 0.5263, + "pv": 0.2105, + "bat": 0.1053, + "cp": 0.1579, + } + assert message == ( + "Der Strom-Mix um 00:31 wird trotz Fehlerzustand mindestens eines Speichers aus den vorhandenen Messwerten " + "berechnet. \n" + "Der Strom-Mix um 00:31 wird trotz Fehlerzustand mindestens eines Ladepunkts aus den vorhandenen Messwerten " + "berechnet. \n" + "Der Strom-Mix um 00:31 wird trotz Fehlerzustand mindestens eines Wechselrichters aus den vorhandenen " + "Messwerten berechnet. \n" + ) + + +@pytest.mark.parametrize("test_case, entry_data, expected_energy_source, should_be_unchanged", [ + ( + "zero_consumption", + { + "timestamp": 1234567890, + "date": "00:31", + "bat": {"all": {"energy_imported": 5.0, "energy_exported": 5.0, "fault_state": 0}}, + "cp": {"all": {"energy_exported": 0.0, "fault_state": 0}}, + "pv": {"all": {"energy_exported": 0.0, "fault_state": 0}}, + "counter": {"counter0": {"grid": True, "energy_imported": 5.0, "energy_exported": 5.0, "fault_state": 0}} + }, + {"grid": 0, "pv": 0, "bat": 0, "cp": 0}, + False + ), + ( + "missing_sections", + { + "timestamp": 1234567890, + "date": "00:31", + "counter": {"counter0": {"grid": True, "energy_imported": 10.0, "energy_exported": 2.0, "fault_state": 0}} + }, + {"grid": 1.0, "pv": 0.0, "bat": 0.0, "cp": 0.0}, + False + ), + ( + "no_grid_counter", + { + "timestamp": 1234567890, + "date": "00:31", + "bat": {"all": {"energy_imported": 0.0, "energy_exported": 5.0, "fault_state": 0}}, + "counter": {"counter0": {"grid": False, "energy_imported": 10.0, "energy_exported": 2.0, "fault_state": 0}} + }, + None, + True + ) +]) +def test_analyse_percentage_edge_cases(test_case, entry_data, expected_energy_source, should_be_unchanged): + # execution + result, message = analyse_percentage(entry_data) + + # evaluation + if should_be_unchanged: + # Entry should be unchanged, no energy_source added due to error + assert result["timestamp"] == entry_data["timestamp"] + assert "energy_source" not in result or result.get("energy_source") is None + else: + # Energy source should be calculated correctly + assert result["energy_source"] == expected_energy_source + assert message == "" + + +def test_calculate_average_power(): + # setup and execution + power = _calculate_average_power(100, 250, 300) + + # evaluation + assert power == 1800 + + +def test_calc_energy_imported_by_source(): + # setup + entry = { + "timestamp": 1234567890, + "energy_source": {"grid": 0.6523, "pv": 0.2487, "bat": 0.0789, "cp": 0.0201}, + "hc": {"all": {"energy_imported": 2345.6, "fault_state": 0}}, + "cp": { + "cp1": {"energy_imported": 15723.4, "fault_state": 0}, + "cp2": {"energy_imported": 22108.7, "fault_state": 0} + }, + "counter": { + "counter0": {"grid": True, "energy_imported": 45892.3, "fault_state": 0}, + "counter1": {"grid": False, "energy_imported": 8956.7, "fault_state": 0} + } + } + + # execution + result, message = calc_energy_imported_by_source(entry, {}) + + # evaluation - realistic Wh values with decimal precision + assert result["hc"]["all"]["energy_imported_grid"] == 1530.035 + assert result["hc"]["all"]["energy_imported_pv"] == 583.351 + assert result["hc"]["all"]["energy_imported_bat"] == 185.068 + assert result["hc"]["all"]["energy_imported_cp"] == 47.147 + + assert result["cp"]["cp1"]["energy_imported_grid"] == 10256.374 + assert result["cp"]["cp1"]["energy_imported_pv"] == 3910.41 + assert result["cp"]["cp1"]["energy_imported_bat"] == 1240.576 + assert result["cp"]["cp1"]["energy_imported_cp"] == 316.04 + + assert result["cp"]["cp2"]["energy_imported_grid"] == 14421.505 + assert result["cp"]["cp2"]["energy_imported_pv"] == 5498.434 + assert result["cp"]["cp2"]["energy_imported_bat"] == 1744.376 + assert result["cp"]["cp2"]["energy_imported_cp"] == 444.385 + + assert result["counter"]["counter1"]["energy_imported_grid"] == 5842.455 + assert result["counter"]["counter1"]["energy_imported_pv"] == 2227.531 + assert result["counter"]["counter1"]["energy_imported_bat"] == 706.684 + assert result["counter"]["counter1"]["energy_imported_cp"] == 180.03 + # counter0 should not have these fields as it's a grid counter + assert "energy_imported_grid" not in result["counter"]["counter0"] + assert "energy_imported_pv" not in result["counter"]["counter0"] + assert "energy_imported_bat" not in result["counter"]["counter0"] + assert "energy_imported_cp" not in result["counter"]["counter0"] + assert message == "" + + +def test_calc_energy_imported_by_source_message_filtering(): + """Test message filtering when component is in fault state and name is missing.""" + # setup + entry = { + "timestamp": 1234567890, + "energy_source": {"grid": 0.6523, "pv": 0.2487, "bat": 0.0789, "cp": 0.0201}, + "cp": { + "cp1": {"energy_imported": 15723.4, "fault_state": 0}, + "cp2": {"energy_imported": 22108.7, "fault_state": 2} # fault state + }, + "counter": { + "counter0": {"grid": True, "energy_imported": 45892.3, "fault_state": 0}, + "counter1": {"grid": False, "energy_imported": 8956.7, "fault_state": 2} # fault state + } + } + + # Names dict is missing keys for cp2 and counter1 + names = { + "cp1": "Ladepunkt 1", + "counter0": "EVU-Zähler" + # cp2 and counter1 intentionally missing + } + + # execution - filter messages only for cp2 + result, message = calc_energy_imported_by_source(entry, names, message_key_filter="cp2") + + # evaluation + # Should only get message for cp2, not counter1 (due to filtering) + expected_message = ("Die Anteile der Energiequellen für Ladepunkt cp2 konnten nicht berechnet werden, da er sich " + "im Fehlerzustand befindet. Die Verbräuche werden mit 0 kWh angesetzt.\n") + assert message == expected_message + + # cp2 should have zero values for all energy sources due to fault state + assert result["cp"]["cp2"]["energy_imported_grid"] == 0 + assert result["cp"]["cp2"]["energy_imported_pv"] == 0 + assert result["cp"]["cp2"]["energy_imported_bat"] == 0 + assert result["cp"]["cp2"]["energy_imported_cp"] == 0 + + # cp1 should have normal calculated values (not in fault state) + assert result["cp"]["cp1"]["energy_imported_grid"] == 10256.374 + + # counter1 should have zero values but no message (filtered out) + assert result["counter"]["counter1"]["energy_imported_grid"] == 0 + assert result["counter"]["counter1"]["energy_imported_pv"] == 0 + assert result["counter"]["counter1"]["energy_imported_bat"] == 0 + assert result["counter"]["counter1"]["energy_imported_cp"] == 0 + + +def test_convert(daily_log_entry_processed, daily_log_sample): + # setup and execution + entry = process_entry(daily_log_sample[0], daily_log_sample[1], CalculationType.ALL) + + # evaluation + assert entry == daily_log_entry_processed + + +def test_pv_export_and_bat_export_and_bat_import(): + entry = { + "timestamp": 1234567890, + "date": "00:00", + "bat": { + "all": { + "energy_imported": 1.0, + "energy_exported": 5.0, + "fault_state": 0, + } + }, + "cp": { + "all": { + "energy_imported": 0.0, + "energy_exported": 0.0, + "fault_state": 0, + } + }, + "pv": { + "all": { + "energy_exported": 10.0, + "fault_state": 0, + } + }, + "counter": { + "counter0": { + "grid": True, + "energy_imported": 2.0, + "energy_exported": 3.0, + "fault_state": 0, + } + } + } + + # Einspeisung - Priorität + # 1 Pv + # 2 Bat + # 3 CP + # -> erst komplette Einspeisung von PV berücksichtigen + # -> wenn dann noch weitere Einspeisung übrig ist -> Bat und dann CP + + # Speicherimport - Priorität + # 1 Pv + # 2 Grid + # 3 CP + + # Pv 10 Exported + # Grid 2 Imported, 3 Exported + # Bat 1 Imported, 5 Exported + + # Realer Verbrauch + # 2 - 3 + 10 + 5 - 1 + 0 = 13 + + # Export aufteilen + # Pv - Export = 10 - 3 = 7 + + # Bat import aufteilen + # Pv - Bat_imported = 7 - 1 = 6 + + # Tatsächlicher Verbrauch: + # Pv = 6 + # Grid = 2 + # Bat = 5 + # --------------------- + # Summe = 13 + + # Anteil der Energiequellen: + # Grid: 2/13 ≈ 0.1538 + # PV = 6/13 ≈ 0.4615 + # Bat = 5/13 ≈ 0.3846 + # CP = 0/13 ≈ 0.0 + result, message = analyse_percentage(entry) + + assert result["energy_source"] == { + "grid": 0.1538, + "pv": 0.4615, + "bat": 0.3846, + "cp": 0.0 + } + assert message == "" + + +@pytest.mark.parametrize( + "name, pv_exported, bat_exported, bat_imported, cp_exported, grid_imported, grid_exported, expected", + [ + ( + "grid import and export", + 10.0, # pv_exported + 0.0, # bat_exported + 0.0, # bat_imported + 0.0, # cp_exported + 2.0, # grid_imported + 3.0, # grid_exported + # 2/9 7/9 + {"grid": 0.2222, "pv": 0.7778, "bat": 0.0, "cp": 0.0} + ), + ( + "grid export proportional pv and bat", + 10.0, # pv_exported + 5.0, # bat_exported + 0.0, # bat_imported + 0.0, # cp_exported + 0.0, # grid_imported + 3.0, # grid_exported + # 0/12 7/12 5/12 + {"grid": 0.0, "pv": 0.5833, "bat": 0.4167, "cp": 0.0} + ), + ( + "grid export and bat import", + 10.0, # pv_exported + 5.0, # bat_exported + 1.0, # bat_imported + 0.0, # cp_exported + 2.0, # grid_imported + 3.0, # grid_exported + # 2/13 6/13 5/13 + {"grid": 0.1538, "pv": 0.4615, "bat": 0.3846, "cp": 0.0} + ), + ( + "grid export proportional pv and cp ", + 6.0, # pv_exported + 0.0, # bat_exported + 0.0, # bat_imported + 3.0, # cp_exported + 0.0, # grid_imported + 3.0, # grid_exported + # 0/6 3/6 0/6 3/6 + {"grid": 0.0, "pv": 0.5, "bat": 0.0, "cp": 0.5} + ), + ( + "bat import proportional pv and grid", + 8.0, # pv_exported + 0.0, # bat_exported + 2.0, # bat_imported + 0.0, # cp_exported + 2.0, # grid_imported + 0.0, # grid_exported + # 2/8 6/8 0/8 8/8 + {"grid": 0.25, "pv": 0.75, "bat": 0.0, "cp": 0.0} + ), + ] +) +def test_analyse_percentage_proportional_distribution(name, + pv_exported, + bat_exported, + bat_imported, + cp_exported, + grid_imported, + grid_exported, expected): + entry = { + "timestamp": 1234567890, + "date": "00:00", + "bat": { + "all": { + "energy_imported": bat_imported, + "energy_exported": bat_exported, + "fault_state": 0, + } + }, + "cp": { + "all": { + "energy_exported": cp_exported, + "fault_state": 0, + } + }, + "pv": { + "all": { + "energy_exported": pv_exported, + "fault_state": 0, + } + }, + "counter": { + "counter0": { + "grid": True, + "energy_imported": grid_imported, + "energy_exported": grid_exported, + "fault_state": 0, + } + } + } + + result, message = analyse_percentage(entry) + + assert result["energy_source"] == expected + assert message == "" + + # Strommix muss zusammen 100% ergeben + assert sum(result["energy_source"].values()) == pytest.approx(1.0, abs=0.0002) diff --git a/packages/helpermodules/measurement_logging/process_log_entry_builder.py b/packages/helpermodules/measurement_logging/process_log_entry_builder.py new file mode 100644 index 0000000000..aeac157977 --- /dev/null +++ b/packages/helpermodules/measurement_logging/process_log_entry_builder.py @@ -0,0 +1,225 @@ + +import logging +from math import isnan +import re + +from paho.mqtt.client import Client as MqttClient, MQTTMessage +from typing import Dict, Optional, Union + +from control import data +from helpermodules.broker import BrokerClient +from helpermodules import timecheck +from helpermodules.utils.topic_parser import decode_payload, get_index +log = logging.getLogger(__name__) + + +class LegacySmartHomeLogData: + def __init__(self) -> None: + self.all_received_topics: Dict = {} + self.sh_dict: Dict = {} + self.sh_names: Dict = {} + try: + BrokerClient("smart-home-logging", self.on_connect, self.on_message).start_finite_loop() + for topic, payload in self.all_received_topics.items(): + if re.search("openWB/LegacySmartHome/config/get/Devices/[1-9]/device_configured", topic) is not None: + if decode_payload(payload) == 1: + index = get_index(topic) + self.sh_dict.update({f"sh{index}": {}}) + for topic, payload in self.all_received_topics.items(): + if f"openWB/LegacySmartHome/Devices/{index}/Wh" == topic: + self.sh_dict[f"sh{index}"].update({"imported": decode_payload(payload), "exported": 0}) + for sensor_id in range(0, 3): + if f"openWB/LegacySmartHome/Devices/{index}/TemperatureSensor{sensor_id}" == topic: + self.sh_dict[f"sh{index}"].update({f"temp{sensor_id}": decode_payload(payload)}) + for topic, payload in self.all_received_topics.items(): + if f"openWB/LegacySmartHome/config/get/Devices/{index}/device_name" == topic: + self.sh_names.update({f"sh{index}": decode_payload(payload)}) + except Exception: + log.exception("Fehler im Werte-Logging-Modul für SmartHome") + + def on_connect(self, client: MqttClient, userdata, flags: dict, rc: int): + client.subscribe("openWB/LegacySmartHome/#", 2) + + def on_message(self, client: MqttClient, userdata, msg: MQTTMessage): + self.all_received_topics.update({msg.topic: msg.payload}) + + +def create_entry(sh_log_data: LegacySmartHomeLogData, previous_entry: Optional[Dict]) -> Dict: + date = timecheck.create_timestamp_HH_MM() + current_timestamp = int(timecheck.create_timestamp()) + + try: + prices = data.data.general_data.data.prices + try: + grid_price = data.data.optional_data.ep_get_current_price() + fault_state = max(data.data.optional_data.data.electricity_pricing.flexible_tariff.get.fault_state, + data.data.optional_data.data.electricity_pricing.grid_fee.get.fault_state) + except Exception: + grid_price = prices.grid + fault_state = 0 + prices_dict = {"grid": grid_price, + "pv": prices.pv, + "bat": prices.bat, + "cp": prices.cp, + "fault_state": fault_state} + except Exception: + log.exception("Fehler im Werte-Logging-Modul für Preise") + prices_dict = {"fault_state": 0} + + try: + cp_dict = {"all": {"imported": data.data.cp_all_data.data.get.imported, + "exported": data.data.cp_all_data.data.get.exported, + "fault_state": data.data.cp_all_data.data.get.fault_state}} + except Exception: + log.exception("Fehler im Werte-Logging-Modul") + cp_dict = {} + for cp in data.data.cp_data: + try: + if "cp" in cp: + cp_dict.update({cp: {"imported": data.data.cp_data[cp].data.get.imported, + "exported": data.data.cp_data[cp].data.get.exported, + "fault_state": data.data.cp_data[cp].data.get.fault_state}}) + except Exception: + log.exception("Fehler im Werte-Logging-Modul für Ladepunkt "+str(cp)) + + ev_dict = {} + for ev in data.data.ev_data: + try: + if "ev" in ev: + ev_dict.update( + {ev: {"soc": data.data.ev_data[ev].data.get.soc, + "fault_state": data.data.ev_data[ev].data.get.fault_state}}) + except Exception: + log.exception("Fehler im Werte-Logging-Modul für EV "+str(ev)) + + counter_dict = {} + counter_all_data = data.data.counter_all_data + # Zählt alle effektiven Hausverbrauchs-Zähler, auch bei Auto-Vererbung über den Parent. + is_home_consumption_by_counter = {} + for current_counter in data.data.counter_data.values(): + try: + is_home_consumption_by_counter[current_counter.num] = counter_all_data.is_home_consumption_counter( + current_counter.num) + except Exception: + log.exception("Fehler beim Ermitteln der Hausverbrauchszähler.") + is_home_consumption_by_counter[current_counter.num] = False + + home_consumption_counter_count = sum(1 for is_hc in is_home_consumption_by_counter.values() if is_hc) + + for counter in data.data.counter_data.values(): + try: + # Der EVU-Zähler muss immer geloggt werden, unabhängig von Hausverbrauchs- oder + # extra_meter-Zuordnung - sonst findet process_log.get_grid_counter() keinen Netzzähler mehr. + is_grid_counter = counter_all_data.get_id_evu_counter() == counter.num + is_home_consumption_counter = is_home_consumption_by_counter.get(counter.num, False) + if not is_grid_counter and is_home_consumption_counter and home_consumption_counter_count == 1: + continue + skip_counter = False + if not is_grid_counter: + for consumer in data.data.consumer_data: + if counter.num == data.data.consumer_data[consumer].data.extra_meter: + skip_counter = True + break + if skip_counter is False: + counter_dict.update( + {f"counter{counter.num}": { + "imported": counter.data.get.imported, + "exported": counter.data.get.exported, + "grid": is_grid_counter, + "fault_state": counter.data.get.fault_state}}) + except Exception: + log.exception("Fehler im Werte-Logging-Modul für Zähler "+str(counter)) + + try: + pv_dict = {"all": {"exported": data.data.pv_all_data.data.get.exported, + "fault_state": data.data.pv_all_data.data.get.fault_state}} + except Exception: + log.exception("Fehler im Werte-Logging-Modul für PV-Daten") + pv_dict = {} + if data.data.pv_all_data.data.config.configured: + for pv in data.data.pv_data: + try: + pv_dict.update( + {pv: {"exported": data.data.pv_data[pv].data.get.exported, + "fault_state": data.data.pv_data[pv].data.get.fault_state}}) + except Exception: + log.exception("Fehler im Werte-Logging-Modul für Wechselrichter "+str(pv)) + + try: + bat_dict = {"all": {"imported": data.data.bat_all_data.data.get.imported, + "exported": data.data.bat_all_data.data.get.exported, + "soc": data.data.bat_all_data.data.get.soc, + "fault_state": data.data.bat_all_data.data.get.fault_state}} + except Exception: + log.exception("Fehler im Werte-Logging-Modul für Batteriespeicher-Daten") + bat_dict = {} + if data.data.bat_all_data.data.config.configured: + for bat in data.data.bat_data: + try: + bat_dict.update({bat: {"imported": data.data.bat_data[bat].data.get.imported, + "exported": data.data.bat_data[bat].data.get.exported, + "soc": data.data.bat_data[bat].data.get.soc, + "fault_state": data.data.bat_data[bat].data.get.fault_state}}) + except Exception: + log.exception("Fehler im Werte-Logging-Modul für Speicher "+str(bat)) + + try: + consumer_dict: Dict[str, Dict[str, Union[float, int]]] = {"all": { + "imported": data.data.consumer_all_data.data.get.imported, + "exported": data.data.consumer_all_data.data.get.exported, + "fault_state": data.data.consumer_all_data.data.get.fault_state}} + except Exception: + log.exception("Fehler im Werte-Logging-Modul für Verbraucher-Daten") + consumer_dict = {} + for consumer in data.data.consumer_data: + try: + consumer_dict.update({consumer: {"imported": data.data.consumer_data[consumer].data.get.imported, + "exported": data.data.consumer_data[consumer].data.get.exported, + "fault_state": data.data.consumer_data[consumer].data.get.fault_state}}) + except Exception: + log.exception("Fehler im Werte-Logging-Modul für Verbraucher "+str(consumer)) + + try: + hc_dict = {"all": { + "imported": data.data.counter_all_data.data.set.imported_home_consumption, + "fault_state": 2 if data.data.counter_all_data.data.set.invalid_home_consumption >= 3 else 0}} + except Exception: + log.exception("Fehler im Werte-Logging-Modul für Hausverbrauch") + hc_dict = {} + new_entry = { + "timestamp": current_timestamp, + "date": date, + "prices": prices_dict, + "cp": cp_dict, + "ev": ev_dict, + "counter": counter_dict, + "pv": pv_dict, + "bat": bat_dict, + "consumer": consumer_dict, + "sh": sh_log_data.sh_dict, + "hc": hc_dict + } + + return fix_values(new_entry, previous_entry) + + +def fix_values(new_entry: Dict, previous_entry: Optional[Dict]) -> Dict: + def find_and_fix_value(value_name): + if value.get(value_name) is not None: + if value[value_name] == 0: + try: + if (previous_entry[group][component][value_name] is not None and + isnan(previous_entry[group][component][value_name]) is False): + value[value_name] = previous_entry[group][component][value_name] + except KeyError: + log.exception("Es konnte kein vorheriger Wert gefunden werden.") + if previous_entry is not None: + for group, value in new_entry.items(): + if group not in ("bat", "counter", "cp", "pv", "hc"): + continue + for component, value in value.items(): + find_and_fix_value("exported") + find_and_fix_value("imported") + else: + log.warning("Keine vorherigen Werte vorhanden, um aktuelle Werte auf Plausibilität zu prüfen.") + return new_entry diff --git a/packages/helpermodules/measurement_logging/process_log_unit_test.py b/packages/helpermodules/measurement_logging/process_log_unit_test.py index b4da9869f1..159a29829b 100644 --- a/packages/helpermodules/measurement_logging/process_log_unit_test.py +++ b/packages/helpermodules/measurement_logging/process_log_unit_test.py @@ -5,15 +5,15 @@ from unittest.mock import Mock, mock_open import pytest + from helpermodules.measurement_logging.process_log import ( analyse_percentage, - _calculate_average_power, - process_entry, get_totals, _collect_daily_log_data, - calc_energy_imported_by_source, analyse_percentage_totals, - CalculationType) + _get_last_entry_for_period, + _apply_source_totals, +) def test_get_totals(daily_log_sample, daily_log_totals): @@ -153,61 +153,6 @@ def test_analyse_percentage_edge_cases(test_case, entry_data, expected_energy_so assert message == "" -def test_calculate_average_power(): - # setup and execution - power = _calculate_average_power(100, 250, 300) - - # evaluation - assert power == 1800 - - -def test_calc_energy_imported_by_source(): - # setup - entry = { - "timestamp": 1234567890, - "energy_source": {"grid": 0.6523, "pv": 0.2487, "bat": 0.0789, "cp": 0.0201}, - "hc": {"all": {"energy_imported": 2345.6, "fault_state": 0}}, - "cp": { - "cp1": {"energy_imported": 15723.4, "fault_state": 0}, - "cp2": {"energy_imported": 22108.7, "fault_state": 0} - }, - "counter": { - "counter0": {"grid": True, "energy_imported": 45892.3, "fault_state": 0}, - "counter1": {"grid": False, "energy_imported": 8956.7, "fault_state": 0} - } - } - - # execution - result, message = calc_energy_imported_by_source(entry, {}) - - # evaluation - realistic Wh values with decimal precision - assert result["hc"]["all"]["energy_imported_grid"] == 1530.035 - assert result["hc"]["all"]["energy_imported_pv"] == 583.351 - assert result["hc"]["all"]["energy_imported_bat"] == 185.068 - assert result["hc"]["all"]["energy_imported_cp"] == 47.147 - - assert result["cp"]["cp1"]["energy_imported_grid"] == 10256.374 - assert result["cp"]["cp1"]["energy_imported_pv"] == 3910.41 - assert result["cp"]["cp1"]["energy_imported_bat"] == 1240.576 - assert result["cp"]["cp1"]["energy_imported_cp"] == 316.04 - - assert result["cp"]["cp2"]["energy_imported_grid"] == 14421.505 - assert result["cp"]["cp2"]["energy_imported_pv"] == 5498.434 - assert result["cp"]["cp2"]["energy_imported_bat"] == 1744.376 - assert result["cp"]["cp2"]["energy_imported_cp"] == 444.385 - - assert result["counter"]["counter1"]["energy_imported_grid"] == 5842.455 - assert result["counter"]["counter1"]["energy_imported_pv"] == 2227.531 - assert result["counter"]["counter1"]["energy_imported_bat"] == 706.684 - assert result["counter"]["counter1"]["energy_imported_cp"] == 180.03 - # counter0 should not have these fields as it's a grid counter - assert "energy_imported_grid" not in result["counter"]["counter0"] - assert "energy_imported_pv" not in result["counter"]["counter0"] - assert "energy_imported_bat" not in result["counter"]["counter0"] - assert "energy_imported_cp" not in result["counter"]["counter0"] - assert message == "" - - def test_analyse_percentage_totals(): # setup current_dir = os.path.dirname(os.path.abspath(__file__)) @@ -334,62 +279,6 @@ def test_analyse_percentage_totals_entry_missing_grid_counter(): assert result["counter"]["counter0"]["energy_imported_cp"] == 10 -def test_calc_energy_imported_by_source_message_filtering(): - """Test message filtering when component is in fault state and name is missing.""" - # setup - entry = { - "timestamp": 1234567890, - "energy_source": {"grid": 0.6523, "pv": 0.2487, "bat": 0.0789, "cp": 0.0201}, - "cp": { - "cp1": {"energy_imported": 15723.4, "fault_state": 0}, - "cp2": {"energy_imported": 22108.7, "fault_state": 2} # fault state - }, - "counter": { - "counter0": {"grid": True, "energy_imported": 45892.3, "fault_state": 0}, - "counter1": {"grid": False, "energy_imported": 8956.7, "fault_state": 2} # fault state - } - } - - # Names dict is missing keys for cp2 and counter1 - names = { - "cp1": "Ladepunkt 1", - "counter0": "EVU-Zähler" - # cp2 and counter1 intentionally missing - } - - # execution - filter messages only for cp2 - result, message = calc_energy_imported_by_source(entry, names, message_key_filter="cp2") - - # evaluation - # Should only get message for cp2, not counter1 (due to filtering) - expected_message = ("Die Anteile der Energiequellen für Ladepunkt cp2 konnten nicht berechnet werden, da er sich " - "im Fehlerzustand befindet. Die Verbräuche werden mit 0 kWh angesetzt.\n") - assert message == expected_message - - # cp2 should have zero values for all energy sources due to fault state - assert result["cp"]["cp2"]["energy_imported_grid"] == 0 - assert result["cp"]["cp2"]["energy_imported_pv"] == 0 - assert result["cp"]["cp2"]["energy_imported_bat"] == 0 - assert result["cp"]["cp2"]["energy_imported_cp"] == 0 - - # cp1 should have normal calculated values (not in fault state) - assert result["cp"]["cp1"]["energy_imported_grid"] == 10256.374 - - # counter1 should have zero values but no message (filtered out) - assert result["counter"]["counter1"]["energy_imported_grid"] == 0 - assert result["counter"]["counter1"]["energy_imported_pv"] == 0 - assert result["counter"]["counter1"]["energy_imported_bat"] == 0 - assert result["counter"]["counter1"]["energy_imported_cp"] == 0 - - -def test_convert(daily_log_entry_processed, daily_log_sample): - # setup and execution - entry = process_entry(daily_log_sample[0], daily_log_sample[1], CalculationType.ALL) - - # evaluation - assert entry == daily_log_entry_processed - - def test_collect_daily_log_data_current_day(monkeypatch): # setup test_date = "20240422" @@ -506,191 +395,82 @@ def test_collect_daily_log_data_json_decode_error(monkeypatch): assert result == expected_result -def test_pv_export_and_bat_export_and_bat_import(): +def test_apply_source_totals_updates_existing_and_creates_missing_sections(): + # setup entry = { - "timestamp": 1234567890, - "date": "00:00", - "bat": { - "all": { - "energy_imported": 1.0, - "energy_exported": 5.0, - "fault_state": 0, - } + # required by analyse_percentage(), which _apply_source_totals() calls internally + "date": "22.04.2024", + "timestamp": 1713772800, + "counter": { + "counter0": {"grid": True, "energy_imported": 0, "energy_exported": 0} }, "cp": { - "all": { - "energy_imported": 0.0, - "energy_exported": 0.0, - "fault_state": 0, - } + "all": {"energy_imported": 5, "keep": "x"}, + "cp9": {"keep_cp": True} }, - "pv": { - "all": { - "energy_exported": 10.0, - "fault_state": 0, - } + "meta": {"unchanged": True} + } + daily_totals = { + "cp": { + "all": {"energy_imported": 12, "energy_exported": 3}, + "cp1": {"energy_imported": 7}, + "cp_invalid": 99 }, - "counter": { - "counter0": { - "grid": True, - "energy_imported": 2.0, - "energy_exported": 3.0, - "fault_state": 0, - } - } + "hc": { + "all": {"energy_imported": 2} + }, + "invalid_section": "ignore_me" } - # Einspeisung - Priorität - # 1 Pv - # 2 Bat - # 3 CP - # -> erst komplette Einspeisung von PV berücksichtigen - # -> wenn dann noch weitere Einspeisung übrig ist -> Bat und dann CP - - # Speicherimport - Priorität - # 1 Pv - # 2 Grid - # 3 CP - - # Pv 10 Exported - # Grid 2 Imported, 3 Exported - # Bat 1 Imported, 5 Exported - - # Realer Verbrauch - # 2 - 3 + 10 + 5 - 1 + 0 = 13 - - # Export aufteilen - # Pv - Export = 10 - 3 = 7 - - # Bat import aufteilen - # Pv - Bat_imported = 7 - 1 = 6 - - # Tatsächlicher Verbrauch: - # Pv = 6 - # Grid = 2 - # Bat = 5 - # --------------------- - # Summe = 13 - - # Anteil der Energiequellen: - # Grid: 2/13 ≈ 0.1538 - # PV = 6/13 ≈ 0.4615 - # Bat = 5/13 ≈ 0.3846 - # CP = 0/13 ≈ 0.0 - result, message = analyse_percentage(entry) + # execution + result = _apply_source_totals(entry, daily_totals) - assert result["energy_source"] == { - "grid": 0.1538, - "pv": 0.4615, - "bat": 0.3846, - "cp": 0.0 - } - assert message == "" + # evaluation + # in-place behavior + assert result is entry + + # existing module gets overwritten/extended, unrelated fields stay + assert result["cp"]["all"]["energy_imported"] == 12 + assert result["cp"]["all"]["energy_exported"] == 3 + assert result["cp"]["all"]["keep"] == "x" + + # missing module and section are created + assert result["cp"]["cp1"]["energy_imported"] == 7 + assert result["hc"]["all"]["energy_imported"] == 2 + + # invalid totals are ignored + assert "cp_invalid" not in result["cp"] + assert "invalid_section" not in result + + # unrelated data stays unchanged + assert result["cp"]["cp9"]["keep_cp"] is True + assert result["meta"]["unchanged"] is True @pytest.mark.parametrize( - "name, pv_exported, bat_exported, bat_imported, cp_exported, grid_imported, grid_exported, expected", + "entries, period, period_format, expected", [ ( - "grid import and export", - 10.0, # pv_exported - 0.0, # bat_exported - 0.0, # bat_imported - 0.0, # cp_exported - 2.0, # grid_imported - 3.0, # grid_exported - # 2/9 7/9 - {"grid": 0.2222, "pv": 0.7778, "bat": 0.0, "cp": 0.0} - ), - ( - "grid export proportional pv and bat", - 10.0, # pv_exported - 5.0, # bat_exported - 0.0, # bat_imported - 0.0, # cp_exported - 0.0, # grid_imported - 3.0, # grid_exported - # 0/12 7/12 5/12 - {"grid": 0.0, "pv": 0.5833, "bat": 0.4167, "cp": 0.0} + [ + {"timestamp": 1711929600, "value": "april_1"}, + {"timestamp": 1712016000, "value": "april_2"}, + {"timestamp": 1714608000, "value": "may_2"}, + ], + "202404", + "%Y%m", + {"timestamp": 1712016000, "value": "april_2"}, ), ( - "grid export and bat import", - 10.0, # pv_exported - 5.0, # bat_exported - 1.0, # bat_imported - 0.0, # cp_exported - 2.0, # grid_imported - 3.0, # grid_exported - # 2/13 6/13 5/13 - {"grid": 0.1538, "pv": 0.4615, "bat": 0.3846, "cp": 0.0} + [], + "202404", + "%Y%m", + None, ), - ( - "grid export proportional pv and cp ", - 6.0, # pv_exported - 0.0, # bat_exported - 0.0, # bat_imported - 3.0, # cp_exported - 0.0, # grid_imported - 3.0, # grid_exported - # 0/6 3/6 0/6 3/6 - {"grid": 0.0, "pv": 0.5, "bat": 0.0, "cp": 0.5} - ), - ( - "bat import proportional pv and grid", - 8.0, # pv_exported - 0.0, # bat_exported - 2.0, # bat_imported - 0.0, # cp_exported - 2.0, # grid_imported - 0.0, # grid_exported - # 2/8 6/8 0/8 8/8 - {"grid": 0.25, "pv": 0.75, "bat": 0.0, "cp": 0.0} - ), - ] + ], ) -def test_analyse_percentage_proportional_distribution(name, - pv_exported, - bat_exported, - bat_imported, - cp_exported, - grid_imported, - grid_exported, expected): - entry = { - "timestamp": 1234567890, - "date": "00:00", - "bat": { - "all": { - "energy_imported": bat_imported, - "energy_exported": bat_exported, - "fault_state": 0, - } - }, - "cp": { - "all": { - "energy_exported": cp_exported, - "fault_state": 0, - } - }, - "pv": { - "all": { - "energy_exported": pv_exported, - "fault_state": 0, - } - }, - "counter": { - "counter0": { - "grid": True, - "energy_imported": grid_imported, - "energy_exported": grid_exported, - "fault_state": 0, - } - } - } - - result, message = analyse_percentage(entry) - - assert result["energy_source"] == expected - assert message == "" +def test_get_last_entry_for_period(entries, period, period_format, expected): + # execution + result = _get_last_entry_for_period(entries, period, period_format) - # Strommix muss zusammen 100% ergeben - assert sum(result["energy_source"].values()) == pytest.approx(1.0, abs=0.0002) + # evaluation + assert result == expected diff --git a/packages/helpermodules/measurement_logging/update_yields.py b/packages/helpermodules/measurement_logging/update_yields.py index 9f8f3a3139..87e845703d 100644 --- a/packages/helpermodules/measurement_logging/update_yields.py +++ b/packages/helpermodules/measurement_logging/update_yields.py @@ -1,11 +1,14 @@ -import json import logging from pathlib import Path from typing import Dict from control import data from helpermodules import timecheck -from helpermodules.measurement_logging.process_log import get_totals +from helpermodules.measurement_logging.process_log import (get_totals, + load_daily_source_totals_content, + load_monthly_source_totals_content, + save_daily_source_totals, + get_monthly_log) log = logging.getLogger(__name__) @@ -17,6 +20,7 @@ def update_daily_yields(entries): totals = get_totals(entries) [update_module_yields(type, totals) for type in ("bat", "consumer", "counter", "cp", "pv")] data.data.counter_all_data.data.set.daily_yield_home_consumption = totals["hc"]["all"]["energy_imported"] + return totals except Exception: log.exception("Fehler beim Veröffentlichen der Tageserträge.") @@ -40,72 +44,115 @@ def update_module_yields(module: str, totals: Dict) -> None: log.exception(f"Fehler beim Aktualisieren der Tageserträge für Modul {m} vom Typ {module}.") -def update_pv_monthly_yearly_yields(): - """ veröffentlicht die monatlichen und jährlichen Erträge für PV +def update_pv_monthly_yearly_yields(daily_totals: Dict) -> None: """ - _update_pv_monthly_yields() - _update_pv_yearly_yields() + veröffentlicht die monatlichen und jährlichen Erträge für PV + """ + # pv_data und pv_all_data werden nur aktualisiert, wenn das Update der Logfiles abgeschlossen ist. + if not data.data.system_data["system"].data.get("log_data_ready", False): + log.debug("Update der Logfiles läuft noch. Monatliche und jährliche PV-Erträge werden nicht aktualisiert.") + return + + monthly_totals = _get_pv_monthly_yields(daily_totals) + yearly_totals = _get_pv_yearly_yields(monthly_totals) + + pv_all_monthly_yield = 0 + pv_all_yearly_yield = 0 + + for pv_key, pv_module in data.data.pv_data.items(): + if pv_key == "all" or not hasattr(pv_module, "num"): + continue + + # Was wurde im Monat/Jahr exportiert + monthly_yield = monthly_totals.get(f"pv{pv_module.num}", {}).get("energy_exported", 0) + yearly_yield = yearly_totals.get(f"pv{pv_module.num}", {}).get("energy_exported", 0) + + data.data.pv_data[f"pv{pv_module.num}"].data.get.monthly_exported = monthly_yield + data.data.pv_data[f"pv{pv_module.num}"].data.get.yearly_exported = yearly_yield + + # Summe über alle Module für pv_all + pv_all_monthly_yield += monthly_yield + pv_all_yearly_yield += yearly_yield + + data.data.pv_all_data.data.get.monthly_exported = pv_all_monthly_yield + data.data.pv_all_data.data.get.yearly_exported = pv_all_yearly_yield -def _update_pv_monthly_yields(): - """ veröffentlicht die monatlichen Erträge für PV - für pv_all nicht die Differenz aus den Logs nehmen, sondern die Summe der Module. Wenn im laufenden Monat ein Modul - gelöscht wurde und keins oder eines mit niedrigerem Zählerstand hinzugefügt wird, wird sonst ein negativer Wert - ermittelt. +def _get_pv_monthly_yields(daily_totals: Dict) -> Dict: """ - try: - pv_all_monthly_yield = 0 - with open(f"data/monthly_log/{timecheck.create_timestamp_YYYYMM()}.json", "r") as f: - monthly_log = json.load(f) - for pv_module in data.data.pv_data.values(): - for entry in monthly_log["entries"]: - if entry["pv"].get(f"pv{pv_module.num}"): - monthly_yield = data.data.pv_data[f"pv{pv_module.num}"].data.get.exported - \ - entry["pv"][f"pv{pv_module.num}"]["exported"] - pv_all_monthly_yield += monthly_yield - data.data.pv_data[f"pv{pv_module.num}"].data.get.monthly_exported = monthly_yield - break - data.data.pv_all_data.data.get.monthly_exported = pv_all_monthly_yield - except FileNotFoundError: - # am Tag der Ersteinrichtung gibt es noch kein Monatslog-File, das wird erst um Mitternacht erstellt. - log.debug("No monthly logfile found for calculation of monthly yield") - except Exception: - log.exception("Fehler beim Veröffentlichen der monatlichen Erträge für PV") + Berechnet den Unterschied zwischen dem Zählerstand vom ersten Tag des aktuellen Monats bis zum aktuellen Tag. + """ + + this_month = timecheck.create_timestamp_YYYYMM() + today = timecheck.create_timestamp_YYYYMMDD() + + pv_totals = {} + + daily_log_path = _get_parent_path()/"data"/"daily_log" + + for logfile in sorted(daily_log_path.glob(f"{this_month}*.json")): + day = logfile.stem + totals = {} + if day == today: + continue # Der aktuelle Tag wird später behandelt + else: + # Lade alle vergangenen Tage des Monats aus dem daily_totals-Logfile, um die Tageserträge zu ermitteln + content = load_daily_source_totals_content(day) + if content is None: + # Fallback/Migration: fehlende Tages-Totals aus den Tageslogs berechnen und speichern. + content = save_daily_source_totals(day, saving=True) + if isinstance(content, dict): + totals = content.get("totals", {}) + + # Totals aufsummieren + _add_pv_totals(pv_totals, totals.get("pv", {})) + # aktueller Tag ergänzen + _add_pv_totals(pv_totals, daily_totals.get("pv", {})) -def _update_pv_yearly_yields(): - """ veröffentlicht die jährlichen Erträge für PV - für pv_all nicht die Differenz aus den Logs nehmen, sondern die Summe der Module. Wenn unterjährig ein Modul - gelöscht wurde und keins oder eines mit niedrigerem Zählerstand hinzugefügt wird, wird sonst ein negativer Wert - ermittelt. + return pv_totals + + +def _get_pv_yearly_yields(current_monthly_totals: Dict) -> Dict: """ - try: - pv_all_yearly_yield = 0 - path_list = list(Path(_get_parent_path()/"data"/"monthly_log").glob(f"{timecheck.create_timestamp_YYYY()}*")) - sorted_path_list = sorted([str(p) for p in path_list]) - for pv_module in data.data.pv_data.values(): - found_pv = False - for path in sorted_path_list: - with open(path, "r") as f: - monthly_log = json.load(f) - for entry in monthly_log["entries"]: - # erster Eintrag mit PV im Jahr, falls WR erst im laufenden Jahr hinzugefügt wurden - if entry["pv"].get(f"pv{pv_module.num}"): - yearly_yield = data.data.pv_data[f"pv{pv_module.num}"].data.get.exported - \ - entry["pv"][f"pv{pv_module.num}"]["exported"] - pv_all_yearly_yield += yearly_yield - data.data.pv_data[f"pv{pv_module.num}"].data.get.yearly_exported = yearly_yield - found_pv = True - break - if found_pv: - break - else: - # am Tag der Ersteinrichtung gibt es noch kein Monatslog-File, das wird erst um Mitternacht erstellt. - log.debug("No monthly logfile found for calculation of yearly yield") - data.data.pv_all_data.data.get.yearly_exported = pv_all_yearly_yield - except Exception: - log.exception("Fehler beim Veröffentlichen der jährlichen Erträge für PV") + Berechnet den Unterschied zwischen dem Zählerstand vom ersten Monat des aktuellen Jahres bis zum aktuellen Monat. + """ + this_year = timecheck.create_timestamp_YYYY() + this_month = timecheck.create_timestamp_YYYYMM() + + pv_totals = {} + + month = f"{this_year}01" + while month < this_month: + totals = {} + content = load_monthly_source_totals_content(month) + if content is None: + # Fallback/Migration: fehlende Monats-Totals berechnen und speichern. + content = get_monthly_log(month) + if isinstance(content, dict): + totals = content.get("totals", {}) + + # Totals aufsummieren + _add_pv_totals(pv_totals, totals.get("pv", {})) + month = timecheck.get_relative_date_string(month, month_offset=1) + + # aktueller Monat ergänzen + _add_pv_totals(pv_totals, current_monthly_totals) + + return pv_totals def _get_parent_path() -> Path: return Path(__file__).resolve().parents[3] + + +def _add_pv_totals(target: Dict, source: Dict) -> None: + for pv_key, values in source.items(): + energy_exported = values.get("energy_exported", 0) + + # Wenn das PV-Modul noch nicht im target ist, initialisiere es mit 0 + if pv_key not in target: + target[pv_key] = {"energy_exported": 0} + + # Addiere die energy_exported Werte für das PV-Modul + target[pv_key]["energy_exported"] += energy_exported diff --git a/packages/helpermodules/measurement_logging/update_yields_test.py b/packages/helpermodules/measurement_logging/update_yields_test.py index 35a3fd7b81..55bbff1a1f 100644 --- a/packages/helpermodules/measurement_logging/update_yields_test.py +++ b/packages/helpermodules/measurement_logging/update_yields_test.py @@ -1,5 +1,11 @@ +from unittest.mock import Mock + from control import data -from helpermodules.measurement_logging.update_yields import update_module_yields +from helpermodules.measurement_logging import update_yields +from helpermodules.measurement_logging.update_yields import ( + update_module_yields, + update_pv_monthly_yearly_yields, +) def test_update_module_yields(daily_log_totals, mock_pub): @@ -21,3 +27,67 @@ def test_update_module_yields(daily_log_totals, mock_pub): data.data.cp_data["cp6"].data.get.daily_exported = 0.0 data.data.pv_all_data.data.get.daily_exported = 251.0 data.data.pv_data["pv1"].data.get.daily_exported = 251.0 + + +def test_update_pv_monthly_yearly_yields_skips_when_generation_not_finished(monkeypatch): + # setup + data.data.system_data = {"system": Mock(data={"log_data_ready": False})} + get_monthly_mock = Mock() + get_yearly_mock = Mock() + + monkeypatch.setattr(update_yields, "_get_pv_monthly_yields", get_monthly_mock) + monkeypatch.setattr(update_yields, "_get_pv_yearly_yields", get_yearly_mock) + + # execution + update_pv_monthly_yearly_yields({"pv": {"pv1": {"energy_exported": 12}}}) + + # evaluation + get_monthly_mock.assert_not_called() + get_yearly_mock.assert_not_called() + + +def test_update_pv_monthly_yearly_yields_with_daily_and_monthly_fallback(monkeypatch, tmp_path): + # setup + data.data.system_data = {"system": Mock(data={"log_data_ready": True})} + + parent_path = tmp_path + daily_log_path = parent_path / "data" / "daily_log" + daily_log_path.mkdir(parents=True) + (daily_log_path / "20260201.json").write_text("{}") + (daily_log_path / "20260214.json").write_text("{}") + (daily_log_path / "20260215.json").write_text("{}") + + monkeypatch.setattr(update_yields, "_get_parent_path", lambda: parent_path) + monkeypatch.setattr(update_yields.timecheck, "create_timestamp_YYYY", lambda: "2026") + monkeypatch.setattr(update_yields.timecheck, "create_timestamp_YYYYMM", lambda: "202602") + monkeypatch.setattr(update_yields.timecheck, "create_timestamp_YYYYMMDD", lambda: "20260215") + monkeypatch.setattr(update_yields.timecheck, "get_relative_date_string", lambda _m, month_offset=1: "202602") + + load_daily_mock = Mock(side_effect=[ + {"totals": {"pv": {"pv1": {"energy_exported": 10}}}}, + None, + ]) + save_daily_mock = Mock(return_value={"totals": {"pv": {"pv1": {"energy_exported": 20}}}}) + load_monthly_mock = Mock(return_value=None) + get_monthly_mock = Mock(return_value={"totals": {"pv": {"pv1": {"energy_exported": 100}}}}) + + monkeypatch.setattr(update_yields, "load_daily_source_totals_content", load_daily_mock) + monkeypatch.setattr(update_yields, "save_daily_source_totals", save_daily_mock) + monkeypatch.setattr(update_yields, "load_monthly_source_totals_content", load_monthly_mock) + monkeypatch.setattr(update_yields, "get_monthly_log", get_monthly_mock) + + daily_totals = {"pv": {"pv1": {"energy_exported": 5}}} + + # execution + update_pv_monthly_yearly_yields(daily_totals) + + # evaluation + assert data.data.pv_data["pv1"].data.get.monthly_exported == 35 + assert data.data.pv_data["pv1"].data.get.yearly_exported == 135 + assert data.data.pv_all_data.data.get.monthly_exported == 35 + assert data.data.pv_all_data.data.get.yearly_exported == 135 + + assert load_daily_mock.call_count == 2 + save_daily_mock.assert_called_once_with("20260214", saving=True) + load_monthly_mock.assert_called_once_with("202601") + get_monthly_mock.assert_called_once_with("202601") diff --git a/packages/helpermodules/measurement_logging/write_log.py b/packages/helpermodules/measurement_logging/write_log.py index d0b83c7b2b..d36623d670 100644 --- a/packages/helpermodules/measurement_logging/write_log.py +++ b/packages/helpermodules/measurement_logging/write_log.py @@ -1,22 +1,18 @@ -from enum import Enum import os import json import logging -from math import isnan from pathlib import Path -import re import string -from paho.mqtt.client import Client as MqttClient, MQTTMessage -from typing import Dict, Optional, Union +from typing import Dict, Optional from control import data -from helpermodules.broker import BrokerClient from helpermodules import timecheck from helpermodules.constants import DEFAULT_COLORS from helpermodules.utils.json_file_handler import write_and_check -from helpermodules.utils.topic_parser import decode_payload, get_index from modules.common.utils.component_parser import get_component_name_by_id, get_component_color_by_id +from helpermodules.measurement_logging.process_log_entry_builder import LegacySmartHomeLogData, create_entry + log = logging.getLogger(__name__) # erstellt für jeden Tag eine Datei, die die Daten für den Langzeitgraph enthält. @@ -108,56 +104,11 @@ # } -class LogType(Enum): - DAILY = "daily" - MONTHLY = "monthly" - - -class LegacySmartHomeLogData: - def __init__(self) -> None: - self.all_received_topics: Dict = {} - self.sh_dict: Dict = {} - self.sh_names: Dict = {} - try: - BrokerClient("smart-home-logging", self.on_connect, self.on_message).start_finite_loop() - for topic, payload in self.all_received_topics.items(): - if re.search("openWB/LegacySmartHome/config/get/Devices/[1-9]/device_configured", topic) is not None: - if decode_payload(payload) == 1: - index = get_index(topic) - self.sh_dict.update({f"sh{index}": {}}) - for topic, payload in self.all_received_topics.items(): - if f"openWB/LegacySmartHome/Devices/{index}/Wh" == topic: - self.sh_dict[f"sh{index}"].update({"imported": decode_payload(payload), "exported": 0}) - for sensor_id in range(0, 3): - if f"openWB/LegacySmartHome/Devices/{index}/TemperatureSensor{sensor_id}" == topic: - self.sh_dict[f"sh{index}"].update({f"temp{sensor_id}": decode_payload(payload)}) - for topic, payload in self.all_received_topics.items(): - if f"openWB/LegacySmartHome/config/get/Devices/{index}/device_name" == topic: - self.sh_names.update({f"sh{index}": decode_payload(payload)}) - except Exception: - log.exception("Fehler im Werte-Logging-Modul für SmartHome") - - def on_connect(self, client: MqttClient, userdata, flags: dict, rc: int): - client.subscribe("openWB/LegacySmartHome/#", 2) - - def on_message(self, client: MqttClient, userdata, msg: MQTTMessage): - self.all_received_topics.update({msg.topic: msg.payload}) - - -def save_log(log_type: LogType): - """ Parameter - --------- - folder: str - gibt an, ob ein Tages-oder Monats-Log-Eintrag erstellt werden soll. - """ +def save_log(): try: - parent_file = Path(__file__).resolve().parents[3] / "data" / \ - ("daily_log" if log_type == LogType.DAILY else "monthly_log") + parent_file = Path(__file__).resolve().parents[3] / "data" / "daily_log" parent_file.mkdir(mode=0o755, parents=True, exist_ok=True) - if log_type == LogType.DAILY: - file_name = timecheck.create_timestamp_YYYYMMDD() - else: - file_name = timecheck.create_timestamp_YYYYMM() + file_name = timecheck.create_timestamp_YYYYMMDD() filepath = str(parent_file / f"{file_name}.json") try: @@ -173,7 +124,7 @@ def save_log(log_type: LogType): previous_entry = get_previous_entry(parent_file, content) sh_log_data = LegacySmartHomeLogData() - new_entry = create_entry(log_type, sh_log_data, previous_entry) + new_entry = create_entry(sh_log_data, previous_entry) # json-Objekt in Datei einfügen @@ -205,190 +156,6 @@ def get_previous_entry(parent_file: Path, content: Dict) -> Optional[Dict]: return previous_entry -def create_entry(log_type: LogType, sh_log_data: LegacySmartHomeLogData, previous_entry: Optional[Dict]) -> Dict: - if log_type == LogType.DAILY: - date = timecheck.create_timestamp_HH_MM() - else: - date = timecheck.create_timestamp_YYYYMMDD() - current_timestamp = int(timecheck.create_timestamp()) - - try: - prices = data.data.general_data.data.prices - try: - grid_price = data.data.optional_data.ep_get_current_price() - fault_state = max(data.data.optional_data.data.electricity_pricing.flexible_tariff.get.fault_state, - data.data.optional_data.data.electricity_pricing.grid_fee.get.fault_state) - except Exception: - grid_price = prices.grid - fault_state = 0 - prices_dict = {"grid": grid_price, - "pv": prices.pv, - "bat": prices.bat, - "cp": prices.cp, - "fault_state": fault_state} - except Exception: - log.exception("Fehler im Werte-Logging-Modul für Preise") - prices_dict = {"fault_state": 0} - - try: - cp_dict = {"all": {"imported": data.data.cp_all_data.data.get.imported, - "exported": data.data.cp_all_data.data.get.exported, - "fault_state": data.data.cp_all_data.data.get.fault_state}} - except Exception: - log.exception("Fehler im Werte-Logging-Modul") - cp_dict = {} - for cp in data.data.cp_data: - try: - if "cp" in cp: - cp_dict.update({cp: {"imported": data.data.cp_data[cp].data.get.imported, - "exported": data.data.cp_data[cp].data.get.exported, - "fault_state": data.data.cp_data[cp].data.get.fault_state}}) - except Exception: - log.exception("Fehler im Werte-Logging-Modul für Ladepunkt "+str(cp)) - - ev_dict = {} - for ev in data.data.ev_data: - try: - if "ev" in ev: - ev_dict.update( - {ev: {"soc": data.data.ev_data[ev].data.get.soc, - "fault_state": data.data.ev_data[ev].data.get.fault_state}}) - except Exception: - log.exception("Fehler im Werte-Logging-Modul für EV "+str(ev)) - - counter_dict = {} - counter_all_data = data.data.counter_all_data - # Zählt alle effektiven Hausverbrauchs-Zähler, auch bei Auto-Vererbung über den Parent. - is_home_consumption_by_counter = {} - for current_counter in data.data.counter_data.values(): - try: - is_home_consumption_by_counter[current_counter.num] = counter_all_data.is_home_consumption_counter( - current_counter.num) - except Exception: - log.exception("Fehler beim Ermitteln der Hausverbrauchszähler.") - is_home_consumption_by_counter[current_counter.num] = False - - home_consumption_counter_count = sum(1 for is_hc in is_home_consumption_by_counter.values() if is_hc) - - for counter in data.data.counter_data.values(): - try: - # Der EVU-Zähler muss immer geloggt werden, unabhängig von Hausverbrauchs- oder - # extra_meter-Zuordnung - sonst findet process_log.get_grid_counter() keinen Netzzähler mehr. - is_grid_counter = counter_all_data.get_id_evu_counter() == counter.num - is_home_consumption_counter = is_home_consumption_by_counter.get(counter.num, False) - if not is_grid_counter and is_home_consumption_counter and home_consumption_counter_count == 1: - continue - skip_counter = False - if not is_grid_counter: - for consumer in data.data.consumer_data: - if counter.num == data.data.consumer_data[consumer].data.extra_meter: - skip_counter = True - break - if skip_counter is False: - counter_dict.update( - {f"counter{counter.num}": { - "imported": counter.data.get.imported, - "exported": counter.data.get.exported, - "grid": is_grid_counter, - "fault_state": counter.data.get.fault_state}}) - except Exception: - log.exception("Fehler im Werte-Logging-Modul für Zähler "+str(counter)) - - try: - pv_dict = {"all": {"exported": data.data.pv_all_data.data.get.exported, - "fault_state": data.data.pv_all_data.data.get.fault_state}} - except Exception: - log.exception("Fehler im Werte-Logging-Modul für PV-Daten") - pv_dict = {} - if data.data.pv_all_data.data.config.configured: - for pv in data.data.pv_data: - try: - pv_dict.update( - {pv: {"exported": data.data.pv_data[pv].data.get.exported, - "fault_state": data.data.pv_data[pv].data.get.fault_state}}) - except Exception: - log.exception("Fehler im Werte-Logging-Modul für Wechselrichter "+str(pv)) - - try: - bat_dict = {"all": {"imported": data.data.bat_all_data.data.get.imported, - "exported": data.data.bat_all_data.data.get.exported, - "soc": data.data.bat_all_data.data.get.soc, - "fault_state": data.data.bat_all_data.data.get.fault_state}} - except Exception: - log.exception("Fehler im Werte-Logging-Modul für Batteriespeicher-Daten") - bat_dict = {} - if data.data.bat_all_data.data.config.configured: - for bat in data.data.bat_data: - try: - bat_dict.update({bat: {"imported": data.data.bat_data[bat].data.get.imported, - "exported": data.data.bat_data[bat].data.get.exported, - "soc": data.data.bat_data[bat].data.get.soc, - "fault_state": data.data.bat_data[bat].data.get.fault_state}}) - except Exception: - log.exception("Fehler im Werte-Logging-Modul für Speicher "+str(bat)) - - try: - consumer_dict: Dict[str, Dict[str, Union[float, int]]] = {"all": { - "imported": data.data.consumer_all_data.data.get.imported, - "exported": data.data.consumer_all_data.data.get.exported, - "fault_state": data.data.consumer_all_data.data.get.fault_state}} - except Exception: - log.exception("Fehler im Werte-Logging-Modul für Verbraucher-Daten") - consumer_dict = {} - for consumer in data.data.consumer_data: - try: - consumer_dict.update({consumer: {"imported": data.data.consumer_data[consumer].data.get.imported, - "exported": data.data.consumer_data[consumer].data.get.exported, - "fault_state": data.data.consumer_data[consumer].data.get.fault_state}}) - except Exception: - log.exception("Fehler im Werte-Logging-Modul für Verbraucher "+str(consumer)) - - try: - hc_dict = {"all": { - "imported": data.data.counter_all_data.data.set.imported_home_consumption, - "fault_state": 2 if data.data.counter_all_data.data.set.invalid_home_consumption >= 3 else 0}} - except Exception: - log.exception("Fehler im Werte-Logging-Modul für Hausverbrauch") - hc_dict = {} - new_entry = { - "timestamp": current_timestamp, - "date": date, - "prices": prices_dict, - "cp": cp_dict, - "ev": ev_dict, - "counter": counter_dict, - "pv": pv_dict, - "bat": bat_dict, - "consumer": consumer_dict, - "sh": sh_log_data.sh_dict, - "hc": hc_dict - } - - return fix_values(new_entry, previous_entry) - - -def fix_values(new_entry: Dict, previous_entry: Optional[Dict]) -> Dict: - def find_and_fix_value(value_name): - if value.get(value_name) is not None: - if value[value_name] == 0: - try: - if (previous_entry[group][component][value_name] is not None and - isnan(previous_entry[group][component][value_name]) is False): - value[value_name] = previous_entry[group][component][value_name] - except KeyError: - log.exception("Es konnte kein vorheriger Wert gefunden werden.") - if previous_entry is not None: - for group, value in new_entry.items(): - if group not in ("bat", "counter", "cp", "pv", "hc"): - continue - for component, value in value.items(): - find_and_fix_value("exported") - find_and_fix_value("imported") - else: - log.warning("Keine vorherigen Werte vorhanden, um aktuelle Werte auf Plausibilität zu prüfen.") - return new_entry - - def get_names(elements: Dict, sh_names: Dict, valid_names: Optional[Dict] = None) -> Dict: """ Ermittelt die Namen der Komponenten, Fahrzeuge, Ladepunkte und SmartHome-Geräte, welche in elements vorhanden sind und gibt diese als Dictionary zurück. diff --git a/packages/helpermodules/measurement_logging/write_log_test.py b/packages/helpermodules/measurement_logging/write_log_test.py index 11421bc76b..ba8b155fd5 100644 --- a/packages/helpermodules/measurement_logging/write_log_test.py +++ b/packages/helpermodules/measurement_logging/write_log_test.py @@ -4,6 +4,9 @@ from helpermodules.measurement_logging.write_log import get_names +from helpermodules.measurement_logging.process_log_entry_builder import fix_values + + def test_get_names(daily_log_totals, monkeypatch): # setup component_names_mock = Mock(side_effect=["Speicher", "Zähler", "Wechselrichter"]) @@ -55,7 +58,7 @@ def test_fix_values(): 'timestamp': 1709109001} # execution - fixed_values = write_log.fix_values(new_entry, previous_entry) + fixed_values = fix_values(new_entry, previous_entry) # evaluation assert fixed_values == {'bat': {'all': {'exported': 0, 'imported': 2369.658, 'soc': 97}, @@ -105,7 +108,7 @@ def test_fix_values_missing_components(): 'timestamp': 1709109001} # execution - fixed_values = write_log.fix_values(new_entry, previous_entry) + fixed_values = fix_values(new_entry, previous_entry) # evaluation assert fixed_values == {'bat': {'all': {'exported': 0, 'imported': 2369.658, 'soc': 97}, diff --git a/packages/helpermodules/mosquitto_dynsec/missing_role_topics_test.py b/packages/helpermodules/mosquitto_dynsec/missing_role_topics_test.py index b1c74c086e..6b1b3b3c79 100644 --- a/packages/helpermodules/mosquitto_dynsec/missing_role_topics_test.py +++ b/packages/helpermodules/mosquitto_dynsec/missing_role_topics_test.py @@ -101,6 +101,7 @@ def _get_data_path() -> Path: 'openWB/optional/int_display/pin_active', 'openWB/optional/int_display/pin_code', 'openWB/system/datastore_version', + 'openWB/system/file_operation_version', 'openWB/system/device/+/component/+/simulation', 'openWB/system/device/+/component/+/simulation/power_present', 'openWB/system/device/+/component/+/simulation/present_exported', diff --git a/packages/helpermodules/setdata.py b/packages/helpermodules/setdata.py index 8cb2fed9d3..665ff72fb9 100644 --- a/packages/helpermodules/setdata.py +++ b/packages/helpermodules/setdata.py @@ -486,7 +486,8 @@ def process_chargepoint_topic(self, msg: mqtt.MQTTMessage): else: self._validate_value(msg, float, [(float("-inf"), 0), (6, 32), (0, 0)]) elif "/set/required_power" in msg.topic: - self._validate_value(msg, float, [(0, float("inf"))]) + # Don't accept NaN + self._validate_value(msg, float, [(float("-inf"), float("inf"))]) elif "/set/phases_to_use" in msg.topic: self._validate_value(msg, int, [(0, 3)]) elif ("/set/manual_lock" in msg.topic or @@ -1068,6 +1069,7 @@ def process_system_topic(self, msg: mqtt.MQTTMessage): "openWB/set/system/perform_update" in msg.topic or "openWB/set/system/wizard_done" in msg.topic or "openWB/set/system/update_in_progress" in msg.topic or + "openWB/set/system/log_data_ready" in msg.topic or "openWB/set/system/backup_cloud/backup_before_update" in msg.topic or "openWB/set/system/installAssistantDone" in msg.topic or "openWB/set/system/dataprotection_acknowledged" in msg.topic or @@ -1082,6 +1084,8 @@ def process_system_topic(self, msg: mqtt.MQTTMessage): self._validate_value(msg, float) elif "openWB/set/system/datastore_version" in msg.topic: self._validate_value(msg, int, [(0, UpdateConfig.DATASTORE_VERSION)], collection=list) + elif "openWB/set/system/file_operation_version" in msg.topic: + self._validate_value(msg, int, [(0, UpdateConfig.FILE_OPERATION_VERSION)], collection=list) elif "openWB/set/system/GetRemoteSupport" in msg.topic: # Server-Topic enthält kein json-Payload. payload = msg.payload.decode("utf-8") diff --git a/packages/helpermodules/subdata.py b/packages/helpermodules/subdata.py index a115217f78..6ed8592708 100644 --- a/packages/helpermodules/subdata.py +++ b/packages/helpermodules/subdata.py @@ -1247,6 +1247,9 @@ def process_consumer_topic(self, client: mqtt.Client, var: Dict[str, Consumer], var.pop("consumer"+index) else: if f"consumer{index}" not in var: + if re.search( + r"openWB/consumer/[0-9]+/(module|config|usage|extra_meter)$", msg.topic) is None: + return var[f"consumer{index}"] = Consumer(int(index)) if re.search("openWB/consumer/[0-9]+/module$", msg.topic) is not None: consumer_config = decode_payload(msg.payload) @@ -1274,9 +1277,23 @@ def process_consumer_topic(self, client: mqtt.Client, var: Dict[str, Consumer], elif re.search("openWB/consumer/[0-9]+/set", msg.topic) is not None: self.set_json_payload_class(var["consumer"+index].data.set, msg) elif re.search("openWB/consumer/[0-9]+/extra_meter", msg.topic) is not None: + old_extra_meter = var[f"consumer{index}"].data.extra_meter self.set_json_payload_class(var[f"consumer{index}"].data, msg) + if self.event_subdata_initialized.is_set() and old_extra_meter != var[ + f"consumer{index}"].data.extra_meter: + if self.counter_all_data.update_linked_counter_hierarchy( + int(index), + old_extra_meter, + var[f"consumer{index}"].data.extra_meter): + Pub().pub("openWB/set/counter/get/hierarchy", + self.counter_all_data.data.get.hierarchy) elif re.search("openWB/consumer/[0-9]+/usage$", msg.topic) is not None: - var[f"consumer{index}"].data.usage = dataclass_from_dict(Usage, decode_payload(msg.payload)) + usage = dataclass_from_dict(Usage, decode_payload(msg.payload)) + var[f"consumer{index}"].data.usage = usage + if (self.event_subdata_initialized.is_set() and + self.counter_all_data.update_consumer_loadmanagement_prio(int(index), usage.type)): + Pub().pub("openWB/set/counter/get/loadmanagement_prios", + self.counter_all_data.data.get.loadmanagement_prios) elif re.search("openWB/consumer/[0-9]+/control_parameter/", msg.topic) is not None: if re.search("openWB/consumer/[0-9]+/control_parameter/limit", msg.topic) is not None: payload = decode_payload(msg.payload) diff --git a/packages/helpermodules/subdata_test.py b/packages/helpermodules/subdata_test.py new file mode 100644 index 0000000000..6d610bde64 --- /dev/null +++ b/packages/helpermodules/subdata_test.py @@ -0,0 +1,192 @@ +import json +from typing import Dict, List +from unittest.mock import Mock + +import pytest + +from control.consumer.consumer import Consumer +from control.consumer.usage import ConsumerUsage +from control.counter_all.counter_all import CounterAll +from helpermodules.subdata import SubData + + +@pytest.mark.parametrize( + "usage_type, loadmanagement_prios, expected_loadmanagement_prios, expected_changed", + [ + pytest.param( + ConsumerUsage.SUSPENDABLE_TUNABLE, + [], + [{"type": "consumer", "id": 2}], + True, + id="add controllable consumer", + ), + pytest.param( + ConsumerUsage.CONTINUOUS, + [{"type": "group", "label": "Gruppe", "children": [{"type": "consumer", "id": 2}]}], + [{"type": "group", "label": "Gruppe", "children": [{"type": "consumer", "id": 2}]}], + False, + id="do not duplicate grouped consumer", + ), + pytest.param( + ConsumerUsage.METER_ONLY, + [{"type": "group", "label": "Gruppe", "children": [{"type": "consumer", "id": 2}]}], + [], + True, + id="remove meter-only consumer from group", + ), + pytest.param( + ConsumerUsage.METER_ONLY, + [], + [], + False, + id="ignore absent meter-only consumer", + ), + pytest.param( + ConsumerUsage.SELF_CONTROLLED, + [{"type": "consumer", "id": 2}], + [], + True, + id="remove self-controlled consumer", + ), + ], +) +def test_process_consumer_usage_updates_loadmanagement_prios(usage_type: ConsumerUsage, + loadmanagement_prios: List[Dict], + expected_loadmanagement_prios: List[Dict], + expected_changed: bool, + monkeypatch: pytest.MonkeyPatch, + mock_pub: Mock): + subdata = SubData.__new__(SubData) + subdata.event_subdata_initialized = Mock() + subdata.event_subdata_initialized.is_set.return_value = True + counter_all_data = CounterAll() + counter_all_data.data.get.loadmanagement_prios = loadmanagement_prios + monkeypatch.setattr(SubData, "counter_all_data", counter_all_data) + consumers = {"consumer2": Consumer(2)} + msg = Mock( + topic="openWB/consumer/2/usage", + payload=json.dumps({"type": usage_type.value}).encode("utf-8"), + ) + + subdata.process_consumer_topic(Mock(), consumers, msg) + + assert consumers["consumer2"].data.usage.type == usage_type + assert counter_all_data.data.get.loadmanagement_prios == expected_loadmanagement_prios + if expected_changed: + mock_pub.pub.assert_called_once_with( + "openWB/set/counter/get/loadmanagement_prios", expected_loadmanagement_prios) + else: + mock_pub.pub.assert_not_called() + + +def test_process_consumer_usage_does_not_update_loadmanagement_prios_on_startup(monkeypatch: pytest.MonkeyPatch, + mock_pub: Mock): + subdata = SubData.__new__(SubData) + subdata.event_subdata_initialized = Mock() + subdata.event_subdata_initialized.is_set.return_value = False + counter_all_data = CounterAll() + counter_all_data.data.get.loadmanagement_prios = [{"type": "consumer", "id": 2}] + monkeypatch.setattr(SubData, "counter_all_data", counter_all_data) + consumers = {"consumer2": Consumer(2)} + msg = Mock( + topic="openWB/consumer/2/usage", + payload=json.dumps({"type": ConsumerUsage.METER_ONLY.value}).encode("utf-8"), + ) + + subdata.process_consumer_topic(Mock(), consumers, msg) + + assert consumers["consumer2"].data.usage.type == ConsumerUsage.METER_ONLY + assert counter_all_data.data.get.loadmanagement_prios == [{"type": "consumer", "id": 2}] + mock_pub.pub.assert_not_called() + + +def test_process_consumer_extra_meter_removes_linked_counter_from_hierarchy(monkeypatch: pytest.MonkeyPatch, + mock_pub: Mock): + subdata = SubData.__new__(SubData) + subdata.event_subdata_initialized = Mock() + subdata.event_subdata_initialized.is_set.return_value = True + counter_all_data = CounterAll() + counter_all_data.data.get.hierarchy = [{ + "id": 0, + "type": "counter", + "children": [ + {"id": 2, "type": "consumer", "children": []}, + {"id": 5, "type": "counter", "children": []}, + ], + }] + monkeypatch.setattr(SubData, "counter_all_data", counter_all_data) + consumers = {"consumer2": Consumer(2)} + msg = Mock(topic="openWB/consumer/2/extra_meter", payload=b"5") + + subdata.process_consumer_topic(Mock(), consumers, msg) + + assert consumers["consumer2"].data.extra_meter == 5 + assert counter_all_data.data.get.hierarchy == [{ + "id": 0, + "type": "counter", + "children": [{"id": 2, "type": "consumer", "children": []}], + }] + mock_pub.pub.assert_called_once_with("openWB/set/counter/get/hierarchy", counter_all_data.data.get.hierarchy) + + +def test_process_consumer_extra_meter_adds_unlinked_counter_to_hierarchy(monkeypatch: pytest.MonkeyPatch, + mock_pub: Mock): + subdata = SubData.__new__(SubData) + subdata.event_subdata_initialized = Mock() + subdata.event_subdata_initialized.is_set.return_value = True + counter_all_data = CounterAll() + counter_all_data.data.get.hierarchy = [{ + "id": 0, + "type": "counter", + "children": [{"id": 2, "type": "consumer", "children": []}], + }] + monkeypatch.setattr(SubData, "counter_all_data", counter_all_data) + consumers = {"consumer2": Consumer(2)} + consumers["consumer2"].data.extra_meter = 5 + msg = Mock(topic="openWB/consumer/2/extra_meter", payload=b"null") + + subdata.process_consumer_topic(Mock(), consumers, msg) + + assert consumers["consumer2"].data.extra_meter is None + assert counter_all_data.data.get.hierarchy == [{ + "id": 0, + "type": "counter", + "children": [ + {"id": 2, "type": "consumer", "children": []}, + {"id": 5, "type": "counter", "children": []}, + ], + }] + mock_pub.pub.assert_called_once_with("openWB/set/counter/get/hierarchy", counter_all_data.data.get.hierarchy) + + +def test_process_consumer_extra_meter_switches_linked_counter_in_hierarchy(monkeypatch: pytest.MonkeyPatch, + mock_pub: Mock): + subdata = SubData.__new__(SubData) + subdata.event_subdata_initialized = Mock() + subdata.event_subdata_initialized.is_set.return_value = True + counter_all_data = CounterAll() + counter_all_data.data.get.hierarchy = [{ + "id": 0, + "type": "counter", + "children": [ + {"id": 2, "type": "consumer", "children": []}, + {"id": 6, "type": "counter", "children": []}, + ], + }] + monkeypatch.setattr(SubData, "counter_all_data", counter_all_data) + consumers = {"consumer2": Consumer(2)} + consumers["consumer2"].data.extra_meter = 5 + msg = Mock(topic="openWB/consumer/2/extra_meter", payload=b"6") + + subdata.process_consumer_topic(Mock(), consumers, msg) + + assert consumers["consumer2"].data.extra_meter == 6 + assert counter_all_data.data.get.hierarchy == [{ + "id": 0, + "type": "counter", + "children": [ + {"id": 2, "type": "consumer", "children": []}, + {"id": 5, "type": "counter", "children": []}, + ], + }] + mock_pub.pub.assert_called_once_with("openWB/set/counter/get/hierarchy", counter_all_data.data.get.hierarchy) diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index bfcf34fc25..862f29bb68 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -8,10 +8,13 @@ from pathlib import Path import re import time +import sys +import subprocess from typing import List, Optional from paho.mqtt.client import Client as MqttClient, MQTTMessage from control.chargemode import Chargemode +from control.consumer.usage import NOT_CONTROLLED from control.limiting_value import LoadmanagementLimit from control.chargepoint.chargepoint_template import get_chargepoint_template_default @@ -58,7 +61,9 @@ class UpdateConfig: - DATASTORE_VERSION = 148 + DATASTORE_VERSION = 151 + + FILE_OPERATION_VERSION = 0 valid_topic = [ "^openWB/bat/config/bat_control_activated$", @@ -569,10 +574,12 @@ class UpdateConfig: "^openWB/system/device/[0-9]+/component/[0-9]+/simulation/timestamp_present$", "^openWB/system/device/[0-9]+/config$", "^openWB/system/device/module_update_completed$", + "^openWB/system/file_operation_version$", "^openWB/system/hostname$", "^openWB/system/io/[0-9]+/config$", "^openWB/system/ip_address$", "^openWB/system/lastlivevaluesJson$", + "^openWB/system/log_data_ready$", "^openWB/system/mac_address$", "^openWB/system/mqtt/bridge/[0-9]+$", "^openWB/system/mqtt/valid_partner_ids$", @@ -595,6 +602,7 @@ class UpdateConfig: "^openWB/system/security/access/LoadManagementConfiguration$", "^openWB/system/security/access/ChargePointInstallation$", "^openWB/system/security/access/VehicleConfiguration$", + "^openWB/system/security/access/ConsumerConfiguration$", "^openWB/system/security/access/IoConfiguration$", "^openWB/system/security/access/LegacySmartHomeConfiguration$", "^openWB/system/security/access/InstallAssistant$", @@ -737,6 +745,7 @@ class UpdateConfig: ("openWB/system/security/access/LoadManagementConfiguration", True), ("openWB/system/security/access/ChargePointInstallation", True), ("openWB/system/security/access/VehicleConfiguration", True), + ("openWB/system/security/access/ConsumerConfiguration", True), ("openWB/system/security/access/IoConfiguration", True), ("openWB/system/security/access/LegacySmartHomeConfiguration", True), ("openWB/system/security/access/InstallAssistant", True), @@ -775,6 +784,7 @@ def update(self): try: # erst breaking changes auflösen, sonst sind alte Topics schon gelöscht self.__solve_breaking_changes() + self.__solve_breaking_changes_filesystem() self.__remove_outdated_topics() self._remove_invalid_topics() self.__pub_missing_defaults() @@ -875,6 +885,67 @@ def __solve_breaking_changes(self) -> None: pub_system_message( {}, "Fehler bei der Aktualisierung der Konfiguration des Brokers.", MessageType.ERROR) + def __solve_breaking_changes_filesystem(self) -> None: + """Führt dateisystembezogene Migrationen anhand der file_operation_version aus.""" + file_operation_version = decode_payload(self.all_received_topics.get("openWB/system/file_operation_version")) + if file_operation_version is None: + # Neues Topic (z.B. bei Upgrade von älteren Versionen): alle File-Operation-Upgrades ausführen. + file_operation_version = [] + self.__update_topic("openWB/system/file_operation_version", file_operation_version) + elif isinstance(file_operation_version, int): + # Legacy-Format (int): bereits ausgeführte Upgrades als Liste abbilden. + file_operation_version = list(range(file_operation_version)) + self.__update_topic("openWB/system/file_operation_version", file_operation_version) + + log.debug(f"current file operation version: {file_operation_version}") + log.debug(f"target file operation version: {self.FILE_OPERATION_VERSION}") + for version in list(range(self.FILE_OPERATION_VERSION+1)): + try: + operation_required = version not in file_operation_version + if version == 0: + # Version 0 erneut ausführen, solange die Hintergrund-Generierung der Tages-/Monatssummen + # noch nicht erfolgreich abgeschlossen ist (Flag ist nicht True). + log_totals_generation_finished = decode_payload( + self.all_received_topics.get("openWB/system/log_data_ready")) + operation_required = operation_required or log_totals_generation_finished is not True + + if operation_required: + log.debug(f"upgrading File Operation version '{version}'") + getattr(self, f"upgrade_file_operation_{version}")() + except AttributeError: + log.error(f"missing upgrade function! '{version}'") + except Exception: + log.exception("Fehler bei der Aktualisierung des Brokers.") + pub_system_message( + {}, "Fehler bei der Aktualisierung der Konfiguration des Brokers.", MessageType.ERROR) + + def upgrade_file_operation_0(self) -> None: + """ + Generiere die Totals-Summen für Tage und Monate + """ + + self.__update_topic("openWB/system/log_data_ready", False) + try: + _generate_totals_subprocess = subprocess.Popen( + [ + sys.executable, + "-m", + "helpermodules.measurement_logging.generate_totals_subprocess" + ], + cwd="/var/www/html/openWB/packages", + start_new_session=True, + stdin=subprocess.DEVNULL, + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + close_fds=True + ) + + log.debug("generate_totals_subprocess gestartet, PID: %s", _generate_totals_subprocess.pid) + self._append_file_operation_version(0) + except Exception: + _generate_totals_subprocess = None + log.exception("Fehler beim Starten des generate_totals_subprocess.") + def _loop_all_received_topics(self, callback) -> None: modified_topics = {} for topic, payload in self.all_received_topics.items(): @@ -893,6 +964,12 @@ def _append_datastore_version(self, version: int) -> None: datastore_versions.append(version) self.__update_topic("openWB/system/datastore_version", datastore_versions) + def _append_file_operation_version(self, version: int) -> None: + file_operation_versions = decode_payload(self.all_received_topics.get("openWB/system/file_operation_version")) + if version not in file_operation_versions: + file_operation_versions.append(version) + self.__update_topic("openWB/system/file_operation_version", file_operation_versions) + def upgrade_datastore_0(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: modified_topics = {} @@ -3864,3 +3941,110 @@ def upgrade(topic: str, payload) -> Optional[dict]: return {topic: NO_MODULE} self._loop_all_received_topics(upgrade) self._append_datastore_version(148) + + def upgrade_datastore_149(self) -> None: + """Verbraucher ohne Lastmanagement aus der Prioritätensteuerung entfernen.""" + not_controlled_usage_types = {usage_type.value for usage_type in NOT_CONTROLLED} + not_controlled_consumers = { + int(get_index(topic)) + for topic, payload in self.all_received_topics.items() + if re.search(r"^openWB/consumer/[0-9]+/usage$", topic) is not None + and decode_payload(payload).get("type") in not_controlled_usage_types + } + + def remove_not_controlled_consumers(entries: list) -> None: + for entry in entries.copy(): + if entry.get("type") == "consumer" and entry.get("id") in not_controlled_consumers: + entries.remove(entry) + elif entry.get("type") == "group": + children = entry.get("children", []) + had_children = bool(children) + remove_not_controlled_consumers(children) + if had_children and not children: + entries.remove(entry) + + topic = "openWB/counter/get/loadmanagement_prios" + if topic in self.all_received_topics: + loadmanagement_prios = decode_payload(self.all_received_topics[topic]) + migrated_loadmanagement_prios = copy.deepcopy(loadmanagement_prios) + remove_not_controlled_consumers(migrated_loadmanagement_prios) + if migrated_loadmanagement_prios != loadmanagement_prios: + self.__update_topic(topic, migrated_loadmanagement_prios) + self._append_datastore_version(149) + + def upgrade_datastore_150(self) -> None: + """Fixed-Hours-Wochentage vom alten Schema (So=0..Sa=6) auf Python weekday() (Mo=0..So=6) migrieren.""" + + def _shift_weekday(weekday: int) -> int: + return (weekday + 6) % 7 + + def upgrade(topic: str, payload) -> Optional[dict]: + if ("openWB/optional/ep/flexible_tariff/provider" == topic or + "openWB/optional/ep/grid_fee/provider" == topic): + provider = decode_payload(payload) + if provider.get("type") != "fixed_hours": + return None + config = provider.get("configuration", {}) + tariffs = config.get("tariffs", []) + changed = False + for tariff in tariffs: + active_times = tariff.get("active_times", {}) + weekdays = active_times.get("weekdays") + if isinstance(weekdays, list): + converted = [] + for weekday in weekdays: + try: + weekday_int = int(weekday) + except (TypeError, ValueError): + converted.append(weekday) + continue + converted.append(_shift_weekday(weekday_int)) + if converted != weekdays: + active_times["weekdays"] = converted + changed = True + if changed: + return {topic: provider} + return None + + self._loop_all_received_topics(upgrade) + self._append_datastore_version(150) + + def upgrade_datastore_151(self): + """Bereits verknüpfte Verbraucher-Zähler aus der Hierarchie entfernen.""" + hierarchy_topic = "openWB/counter/get/hierarchy" + hierarchy = decode_payload(self.all_received_topics.get(hierarchy_topic)) + if not isinstance(hierarchy, list) or not hierarchy: + self._append_datastore_version(151) + return + + linked_counter_ids = { + int(extra_meter_id) + for topic, payload in self.all_received_topics.items() + if re.search(r"^openWB/consumer/[0-9]+/extra_meter$", topic) is not None + for extra_meter_id in [decode_payload(payload)] + if extra_meter_id is not None + } + + if not linked_counter_ids: + self._append_datastore_version(151) + return + + migrated_hierarchy = copy.deepcopy(hierarchy) + _counter_all = counter_all.CounterAll() + _counter_all.data.get.hierarchy = migrated_hierarchy + hierarchy_changed = False + + for linked_counter_id in linked_counter_ids: + counter_entry = _counter_all.get_entry_of_element(linked_counter_id) + if not counter_entry or counter_entry.get("type") != ComponentType.COUNTER.value: + continue + parent_entry = _counter_all.get_entry_of_parent(linked_counter_id) + if not parent_entry or parent_entry.get("type") != ComponentType.COUNTER.value: + continue + _counter_all.hierarchy_remove_item(linked_counter_id) + hierarchy_changed = True + + if hierarchy_changed: + self.__update_topic(hierarchy_topic, _counter_all.data.get.hierarchy) + + self._append_datastore_version(151) diff --git a/packages/helpermodules/update_config_test.py b/packages/helpermodules/update_config_test.py index cad4b7c060..1938dcc7ea 100644 --- a/packages/helpermodules/update_config_test.py +++ b/packages/helpermodules/update_config_test.py @@ -363,3 +363,154 @@ def test_upgrade_datastore_142_ev_chargemode_conversion(ev0_prio: bool, assert uc.all_received_topics["openWB/counter/get/loadmanagement_prios"] == expected assert uc.all_received_topics["openWB/system/datastore_version"] == [131, 132, 142] assert mock_pub.pub.call_count == 2 # einmal publishen für Upgrade der Datastore-Version + + +def test_upgrade_datastore_149_removes_not_controlled_consumers(mock_pub: Mock): + uc = UpdateConfig() + uc.all_received_topics = { + "openWB/consumer/1/usage": {"type": "continuous"}, + "openWB/consumer/2/usage": {"type": "meter_only"}, + "openWB/consumer/4/usage": {"type": "self_controlled"}, + "openWB/counter/get/loadmanagement_prios": [ + {"type": "vehicle", "id": 0}, + { + "type": "group", + "label": "Verbraucher", + "children": [ + {"type": "consumer", "id": 1}, + {"type": "consumer", "id": 2}, + {"type": "consumer", "id": 4}, + ], + }, + {"type": "consumer", "id": 3}, + ], + "openWB/system/datastore_version": list(range(149)), + } + + uc.upgrade_datastore_149() + + assert uc.all_received_topics["openWB/counter/get/loadmanagement_prios"] == [ + {"type": "vehicle", "id": 0}, + { + "type": "group", + "label": "Verbraucher", + "children": [{"type": "consumer", "id": 1}], + }, + {"type": "consumer", "id": 3}, + ] + assert uc.all_received_topics["openWB/system/datastore_version"] == list(range(150)) + assert mock_pub.pub.call_count == 2 + + +def test_upgrade_datastore_150_migrates_fixed_hours_weekdays(mock_pub): + uc = UpdateConfig() + uc.all_received_topics = { + "openWB/optional/ep/flexible_tariff/provider": { + "type": "fixed_hours", + "configuration": { + "tariffs": [ + { + "name": "weekdays", + "price": 0.1, + "active_times": { + "dates": [["01-01", "31-12"]], + "times": [["00:00", "24:00"]], + "weekdays": [1, 2, 3, 4, 5], + }, + }, + { + "name": "weekend", + "price": 0.2, + "active_times": { + "dates": [["01-01", "31-12"]], + "times": [["00:00", "24:00"]], + "weekdays": [0, 6], + }, + }, + ] + }, + }, + "openWB/optional/ep/grid_fee/provider": { + "type": "fixed_hours", + "configuration": { + "tariffs": [ + { + "name": "all-days", + "price": 0.3, + "active_times": { + "dates": [["01-01", "31-12"]], + "times": [["00:00", "24:00"]], + "weekdays": [0, 1, 2, 3, 4, 5, 6], + }, + } + ] + }, + }, + "openWB/system/datastore_version": [149], + } + + uc.upgrade_datastore_150() + + flexible_tariffs = uc.all_received_topics["openWB/optional/ep/flexible_tariff/provider"]["configuration"][ + "tariffs" + ] + assert flexible_tariffs[0]["active_times"]["weekdays"] == [0, 1, 2, 3, 4] + assert flexible_tariffs[1]["active_times"]["weekdays"] == [6, 5] + + grid_fee_tariffs = uc.all_received_topics["openWB/optional/ep/grid_fee/provider"]["configuration"]["tariffs"] + assert grid_fee_tariffs[0]["active_times"]["weekdays"] == [6, 0, 1, 2, 3, 4, 5] + + assert uc.all_received_topics["openWB/system/datastore_version"] == [149, 150] + + updated_topics = [call.args[0] for call in mock_pub.pub.call_args_list] + assert "openWB/optional/ep/flexible_tariff/provider" in updated_topics + assert "openWB/optional/ep/grid_fee/provider" in updated_topics + assert "openWB/system/datastore_version" in updated_topics + + +def test_upgrade_datastore_151_removes_linked_extra_meter_counters_from_hierarchy(mock_pub: Mock): + uc = UpdateConfig() + uc.all_received_topics = { + "openWB/consumer/2/extra_meter": 5, + "openWB/consumer/3/extra_meter": None, + "openWB/counter/get/hierarchy": [{ + "id": 0, + "type": "counter", + "children": [ + {"id": 2, "type": "consumer", "children": []}, + {"id": 5, "type": "counter", "children": []}, + {"id": 6, "type": "counter", "children": []}, + ], + }], + "openWB/system/datastore_version": list(range(151)), + } + + uc.upgrade_datastore_151() + + assert uc.all_received_topics["openWB/counter/get/hierarchy"] == [{ + "id": 0, + "type": "counter", + "children": [ + {"id": 2, "type": "consumer", "children": []}, + {"id": 6, "type": "counter", "children": []}, + ], + }] + assert uc.all_received_topics["openWB/system/datastore_version"] == list(range(152)) + assert mock_pub.pub.call_count == 2 + + +@pytest.mark.parametrize("file_operation_version, finished, expected_calls", [ + ([], False, 1), # erster Start + ([0], True, 0), # bereits fertig -> kein Neustart + ([0], False, 1), # angefangen, aber nicht fertig -> Neustart +]) +def test_file_operation_0_start_behavior(file_operation_version, finished, expected_calls): + update_config = UpdateConfig() + update_config.all_received_topics = { + "openWB/system/file_operation_version": file_operation_version, + "openWB/system/log_data_ready": finished + } + + with patch.object(update_config, "upgrade_file_operation_0") as upgrade_mock: + update_config._UpdateConfig__solve_breaking_changes_filesystem() + assert upgrade_mock.call_count == expected_calls diff --git a/packages/main.py b/packages/main.py index d7d63d337f..a9ad7ae912 100755 --- a/packages/main.py +++ b/packages/main.py @@ -27,7 +27,7 @@ from helpermodules.changed_values_handler import ChangedValuesContext from helpermodules.mosquitto_dynsec.mosquitto_dynsec import check_roles_at_start from helpermodules.measurement_logging.update_yields import update_daily_yields, update_pv_monthly_yearly_yields -from helpermodules.measurement_logging.write_log import LogType, save_log +from helpermodules.measurement_logging.write_log import save_log from helpermodules.modbusserver import start_modbus_server from helpermodules.pub import Pub from modules import configuration, loadvars, update_soc @@ -37,6 +37,7 @@ from modules.utils import wait_for_module_update_completed from smarthome.smarthome import readmq, smarthome_handler +from helpermodules.measurement_logging.process_log import save_daily_source_totals, save_monthly_source_totals class HandlerAlgorithm: def __init__(self): @@ -180,9 +181,11 @@ def handler5MinAlgorithm(self): """ try: with ChangedValuesContext(loadvars_.event_module_update_completed): - totals = save_log(LogType.DAILY) - update_daily_yields(totals) - update_pv_monthly_yearly_yields() + entries = save_log() + daily_totals = update_daily_yields(entries) + if daily_totals is not None: + update_pv_monthly_yearly_yields(daily_totals) + for cp in data.data.cp_data.values(): calc_energy_costs(cp) data.data.general_data.grid_protection() @@ -230,7 +233,15 @@ def handler5Min(self): @__with_handler_lock(error_threshold=60) def handler_midnight(self): try: - save_log(LogType.MONTHLY) + today = timecheck.create_timestamp_YYYYMMDD() + previous_day = timecheck.get_relative_date_string(today, day_offset=-1) + save_daily_source_totals(previous_day) + + prev_month = timecheck.get_relative_date_string(today, month_offset=-1)[:6] + # Neuer Monat hat angefangen, daher Monats Totals speichern + if today[6:8] == "01": + save_monthly_source_totals(prev_month, None, saving=True) + thread_errors_path = Path(Path(__file__).resolve().parents[1]/"ramdisk"/"thread_errors.log") with thread_errors_path.open("w") as f: f.write("") diff --git a/packages/modules/chargepoints/external_openwb/chargepoint_module.py b/packages/modules/chargepoints/external_openwb/chargepoint_module.py index c0b162e4c8..db60fb8d5b 100644 --- a/packages/modules/chargepoints/external_openwb/chargepoint_module.py +++ b/packages/modules/chargepoints/external_openwb/chargepoint_module.py @@ -66,12 +66,15 @@ def on_message(client, userdata, message): received_topics.update({message.topic: decode_payload(message.payload)}) received_topics = {} + # Höheres Timeout als der Default: muss zuverlässig alle ~20 retained Topics über eine + # echte Netzwerkverbindung zu einer ggf. gerade stark ausgelasteten Gegenstelle einsammeln + # (zB während einer laufenden Ladung), nicht nur ein oder zwei lokale Werte. BrokerClient(f"subscribeSeriesChargepoint{self.config.id}", on_connect, on_message, host=self.config.configuration.ip_address, port=1886 if self.config.configuration.ip_address == "localhost" else 1883 - ).start_finite_loop() + ).start_finite_loop(timeout=2) if received_topics: log.debug(f"Empfange MQTT Daten für Ladepunkt {self.config.id}: {received_topics}") @@ -101,16 +104,17 @@ def on_message(client, userdata, message): current_branch=parse_received_topics("current_branch"), current_commit=parse_received_topics("current_commit") ) - self.store.set(chargepoint_state) - if received_topics[f"{topic_prefix}fault_state"] == 2: - self.fault_state.error(received_topics[f"{topic_prefix}fault_str"]) - elif received_topics[f"{topic_prefix}fault_state"] == 1: - self.fault_state.warning(received_topics[f"{topic_prefix}fault_str"]) - except KeyError: - if received_topics[f"{topic_prefix}fault_state"] == 2: - self.fault_state.error(received_topics[f"{topic_prefix}fault_str"]) - else: - raise KeyError("Es wurden nicht alle notwendigen Daten empfangen.") + except KeyError as e: + raise KeyError(f"Es wurden nicht alle notwendigen Daten empfangen: {e}") + self.store.set(chargepoint_state) + + fault_state = received_topics.get(f"{topic_prefix}fault_state") + if fault_state == 2: + self.fault_state.error(received_topics.get( + f"{topic_prefix}fault_str", "Fehlerstatus vom internen Ladepunkt")) + elif fault_state == 1: + self.fault_state.warning(received_topics.get( + f"{topic_prefix}fault_str", "Warnung vom internen Ladepunkt")) else: self.fault_state.warning(f"Keine MQTT-Daten für Ladepunkt {self.config.name} empfangen. Noch keine " "Daten nach dem Start oder Ladepunkt nicht erreichbar.") diff --git a/packages/modules/common/component_type.py b/packages/modules/common/component_type.py index 8ae99c397b..2f8cb58a65 100644 --- a/packages/modules/common/component_type.py +++ b/packages/modules/common/component_type.py @@ -63,14 +63,28 @@ def type_topic_mapping_comp(component_type: str) -> str: def component_type_to_readable_text(component_type: ComponentType): - if component_type == ComponentType.BAT: + if component_type == ComponentType.BACKUP_CLOUD: + return "Backup Cloud" + elif component_type == ComponentType.BAT: return "Speicher" - elif component_type == ComponentType.COUNTER: - return "Zähler" elif component_type == ComponentType.CHARGEPOINT: return "Ladepunkt" + elif component_type == ComponentType.CONSUMER: + return "Verbraucher" + elif component_type == ComponentType.COUNTER: + return "Zähler" + elif component_type == ComponentType.FLEXIBLE_TARIFF: + return "Dynamischer Tarif" + elif component_type == ComponentType.GRID_FEE: + return "Netzentgelt" elif component_type == ComponentType.INVERTER: return "Wechselrichter" + elif component_type == ComponentType.IO: + return "IO-Geräte" + elif component_type == ComponentType.VEHICLE: + return "Fahrzeug" + else: + return "Unbekannter Komponenten-Typ" class ComponentDescriptor: diff --git a/packages/modules/common/fault_state.py b/packages/modules/common/fault_state.py index 854787f104..499725ac52 100644 --- a/packages/modules/common/fault_state.py +++ b/packages/modules/common/fault_state.py @@ -1,6 +1,7 @@ import logging import traceback -from typing import Optional, Callable, TypeVar +from types import TracebackType +from typing import Optional, Callable, Type, TypeVar from helpermodules import exceptions from helpermodules.pub import Pub @@ -87,4 +88,30 @@ def from_exception(self, exception: Optional[Exception] = None) -> None: exception) +class FaultStateContext: + def __init__(self, fault_state: FaultState, update_always: bool = True, reraise: bool = False) -> None: + self.__fault_state = fault_state + self.update_always = update_always + self.reraise = reraise + + def __enter__(self) -> None: + if self.update_always: + self.__fault_state.no_error() + return None + + def __exit__(self, + exc_type: Optional[Type[BaseException]], + exc_value: Optional[BaseException], + traceback: Optional[TracebackType]) -> bool: + if exc_value is not None and not isinstance(exc_value, Exception): + return False + if isinstance(exc_value, Exception): + self.__fault_state.from_exception(exc_value) + elif self.update_always is False and self.__fault_state.fault_state == 0: + # Fehlerstatus nicht überschreiben + return True + self.__fault_state.store_error() + return self.reraise is False or exc_value is None + + T_C = TypeVar("T_C", bound=Callable) diff --git a/packages/modules/common/utils/peak_filter.py b/packages/modules/common/utils/peak_filter.py index 0ef0cc1af3..bfb26cfbad 100644 --- a/packages/modules/common/utils/peak_filter.py +++ b/packages/modules/common/utils/peak_filter.py @@ -1,6 +1,6 @@ import logging from control import data -from typing import Optional +from typing import Optional, Tuple from modules.common.fault_state import FaultState from modules.common.component_type import ComponentType @@ -64,12 +64,12 @@ def check_imported_exported( control_interval = data.data.general_data.data.control_interval allowed_deviation = 2 * (control_interval / 3600) * max_power - imp = self.check_total_energy(imported, self.imported, allowed_deviation, max_energy) - self.imported = imported + checked_imp, prev_imp = self.check_total_energy(imported, self.imported, allowed_deviation, max_energy) + self.imported = prev_imp - exp = self.check_total_energy(exported, self.exported, allowed_deviation, max_energy) - self.exported = exported - return imp, exp + checked_exp, prev_exp = self.check_total_energy(exported, self.exported, allowed_deviation, max_energy) + self.exported = prev_exp + return checked_imp, checked_exp return imported, exported def check_total_energy( @@ -78,7 +78,7 @@ def check_total_energy( previous_total_energy: Optional[float], allowed_deviation: float, max_energy: float - ) -> Optional[float]: + ) -> Tuple[Optional[float], Optional[float]]: if total_energy is not None: if total_energy > max_energy: log.debug(f"PeakFilter: Unplausibler Zählerwert: {total_energy / 1000}kWh. " @@ -88,14 +88,37 @@ def check_total_energy( self.fault_state.warning("PeakFilter: Vorheriger Wert None (Startup), " f"aktueller Zählerwert: {total_energy / 1000 }kWh. " "Warte einen Regelintervall.") - elif (allowed_deviation > 0 and - ((total_energy - previous_total_energy) > allowed_deviation or - (total_energy - previous_total_energy) < 0)): + elif allowed_deviation > 0 and (total_energy - previous_total_energy) > allowed_deviation: log.debug(f"PeakFilter: Unplausibler Zählerwert: {total_energy / 1000}kWh. " f"Differenz zum vorherigen Wert: {total_energy - previous_total_energy}Wh. " f"erlaubte Differenz: {round(allowed_deviation, 2)}Wh.") + elif (total_energy - previous_total_energy) < 0: + if previous_total_energy > max_energy: + log.debug("PeakFilter: Erholung nach unplausibel hohem Zählerwert erkannt. " + f"Vorheriger Wert: {previous_total_energy / 1000}kWh über dem 50-Jahres-Limit " + f"({max_energy / 1000}kWh). Aktueller Wert {total_energy / 1000}kWh wird " + "verworfen und als neue Vergleichsbasis verwendet.") + checked_energy = None + prev_energy = total_energy + return checked_energy, prev_energy + log.debug(f"PeakFilter: Unplausibler Rückwärtssprung: {total_energy / 1000}kWh. " + f"Vorherigen Wert: {previous_total_energy / 1000}kWh. " + "Höchststand beibehalten.") + checked_energy = previous_total_energy + prev_energy = previous_total_energy + return checked_energy, prev_energy else: log.debug(f"PeakFilter: Zählerwert: {total_energy}Wh innerhalb der zulässigen Grenzen. " f"Differenz zum vorherigen Wert: {total_energy - previous_total_energy}Wh.") - return total_energy - return None + checked_energy = total_energy + prev_energy = total_energy + return checked_energy, prev_energy + # wenn der Peak-Filter greift, Zählerstand nicht aktualisieren (None). + # Zählerstand merken, damit immer nur die zwei letzten verglichen werden, um Vorwärtssprünge abzubilden. + checked_energy = None + prev_energy = total_energy + return checked_energy, prev_energy + else: + checked_energy = None + prev_energy = None + return checked_energy, prev_energy diff --git a/packages/modules/common/utils/test_peak_filter.py b/packages/modules/common/utils/test_peak_filter.py index b50d9eedd8..9af278ece9 100644 --- a/packages/modules/common/utils/test_peak_filter.py +++ b/packages/modules/common/utils/test_peak_filter.py @@ -95,3 +95,57 @@ def test_check_values_valid(params): imp, exp = pf.check_values(params.power, params.imported, params.exported) assert imp == params.expected_imported assert exp == params.expected_exported + + +def test_check_total_energy_forward_jump_then_accept_second_high_and_wait_after_backward_jump(): + fs = DummyFaultState() + pf = PeakFilter(ComponentType.COUNTER, 1, fs) + + allowed_deviation = 10 + max_energy = 1_000_000_000 + + # Vorwaertssprung: erster Wert wird verworfen, aber als Vergleichsbasis gespeichert. + checked, previous = pf.check_total_energy(2000, 1000, allowed_deviation, max_energy) + assert checked is None + assert previous == 2000 + + # Zweiter hoher Wert mit kleiner Differenz wird uebernommen. + checked, previous = pf.check_total_energy(2005, previous, allowed_deviation, max_energy) + assert checked == 2005 + assert previous == 2005 + + # Rueckwaertssprung: letzter gueltiger Hoechststand bleibt erhalten. + checked, previous = pf.check_total_energy(1900, previous, allowed_deviation, max_energy) + assert checked == 2005 + assert previous == 2005 + + # Unterhalb des Hoechststands wird weiterhin gewartet. + checked, previous = pf.check_total_energy(1990, previous, allowed_deviation, max_energy) + assert checked == 2005 + assert previous == 2005 + + # Naechster gleicher oder hoeherer Wert wird wieder zugelassen. + checked, previous = pf.check_total_energy(2005, previous, allowed_deviation, max_energy) + assert checked == 2005 + assert previous == 2005 + + checked, previous = pf.check_total_energy(2010, previous, allowed_deviation, max_energy) + assert checked == 2010 + assert previous == 2010 + + # Der niedrigere Folgewert wird einmal verworfen und als neue Vergleichsbasis gesetzt. + allowed_deviation = 10 + max_energy = 3000 + + checked, previous = pf.check_total_energy(4000, 2900, allowed_deviation, max_energy) + assert checked is None + assert previous == 4000 + + checked, previous = pf.check_total_energy(2800, previous, allowed_deviation, max_energy) + assert checked is None + assert previous == 2800 + + # Danach wird ein plausibler Folgewert wieder zugelassen. + checked, previous = pf.check_total_energy(2805, previous, allowed_deviation, max_energy) + assert checked == 2805 + assert previous == 2805 diff --git a/packages/modules/consumers/avm/avm/consumer.py b/packages/modules/consumers/avm/avm/consumer.py index 1b32aaa5bf..0461efc4c4 100644 --- a/packages/modules/consumers/avm/avm/consumer.py +++ b/packages/modules/consumers/avm/avm/consumer.py @@ -21,13 +21,30 @@ def create_consumer(config: Avm): ain: Optional[str] = None # Actuator Identification Number - def update() -> ConsumerState: - nonlocal ain + def get_device_list() -> ET.Element: ensure_valid_session_id() response = req.get_http_session().get( f"http://{config.configuration.ip_address}/webservices/homeautoswitch.lua?sid=" f"{config.configuration.session_id}&switchcmd=getdevicelistinfos") - deviceListElementTree = ET.fromstring(response.text.strip()) + return ET.fromstring(response.text.strip()) + + def ensure_valid_ain(deviceListElementTree: Optional[ET.Element] = None) -> str: + # switch_on/switch_off dürfen nicht davon abhängen, dass update() bereits einmal gelaufen ist - + # sonst würde ein Schaltbefehl vor dem ersten erfolgreichen update() mit ain=None gesendet. + nonlocal ain + if ain is not None: + return ain + for device in deviceListElementTree if deviceListElementTree is not None else get_device_list(): + if device.find("name").text == config.configuration.name and device.find("present").text == '1': + ain = device.attrib["identifier"] + return ain + raise RuntimeError( + f"Device with name '{config.configuration.name}' was not found or is not currently available" + ) + + def update() -> ConsumerState: + deviceListElementTree = get_device_list() + ensure_valid_ain(deviceListElementTree) for device in deviceListElementTree: name = device.find("name").text @@ -36,7 +53,6 @@ def update() -> ConsumerState: if presentText != '1': continue - ain = device.attrib["identifier"] powermeterBlock = device.find("powermeter") if powermeterBlock is not None: # AVM returns mW, convert to W here @@ -67,12 +83,12 @@ def update() -> ConsumerState: ) def ensure_valid_session_id(): - if check_valid_session_id() is False: + if session_id_expired(): config.configuration.session_id = get_session_id() config.configuration.session_mtime = time.time() Pub().pub(f"openWB/set/system/device/{config.id}/config", asdict(config)) - def check_valid_session_id() -> bool: + def session_id_expired() -> bool: return (config.configuration.session_id is None or config.configuration.session_mtime is None or time.time() - config.configuration.session_mtime > 300) @@ -87,7 +103,7 @@ def get_session_id(): challengeResponse = ET.fromstring(response.content) session_id = challengeResponse.find('SID').text if session_id != INVALID_SESSIONID: - return + return session_id blockTimeXML = challengeResponse.find('BlockTime') if blockTimeXML is not None and int(blockTimeXML.text) > 0: raise Exception("Durch Anmeldefehler in der Vergangenheit ist der Zugang zur FRITZ!Box " @@ -119,13 +135,13 @@ def switch_on() -> None: ensure_valid_session_id() req.get_http_session().get( f"http://{config.configuration.ip_address}/webservices/homeautoswitch.lua?sid=" - f"{config.configuration.session_id}&switchcmd=setswitchon&ain={ain}") + f"{config.configuration.session_id}&switchcmd=setswitchon&ain={ensure_valid_ain()}") def switch_off() -> None: ensure_valid_session_id() req.get_http_session().get( f"http://{config.configuration.ip_address}/webservices/homeautoswitch.lua?sid=" - f"{config.configuration.session_id}&switchcmd=setswitchoff&ain={ain}") + f"{config.configuration.session_id}&switchcmd=setswitchoff&ain={ensure_valid_ain()}") return ConfigurableConsumer(consumer_config=config, update=update, diff --git a/packages/modules/consumers/daikin/__init__.py b/packages/modules/consumers/daikin/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/consumers/daikin/daikin_homehub_air2air/__init__.py b/packages/modules/consumers/daikin/daikin_homehub_air2air/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/consumers/daikin/daikin_homehub_air2air/config.py b/packages/modules/consumers/daikin/daikin_homehub_air2air/config.py new file mode 100644 index 0000000000..579b42552d --- /dev/null +++ b/packages/modules/consumers/daikin/daikin_homehub_air2air/config.py @@ -0,0 +1,33 @@ +from typing import Optional, Tuple + +from control.consumer.consumer_data import ConsumerUsage +from helpermodules.auto_str import auto_str +from modules.common.consumer_setup import ConsumerSetup +from ..vendor import vendor_descriptor + + +@auto_str +class DaikinConfiguration: + def __init__(self, + ip_address: Optional[str] = None, + port: int = 502, + modbus_id: int = 1): + self.ip_address = ip_address + self.port = port + self.modbus_id = modbus_id + + +@auto_str +class Daikin(ConsumerSetup[DaikinConfiguration]): + def __init__(self, + name: str = "Daikin Air2Air (HomeHub EKRHH)", + type: str = "daikin_homehub_air2air", + id: int = 0, + configuration: Optional[DaikinConfiguration] = None, + # Register gegen das offizielle EKRHH Installer Reference Guide (4PDE744838, + # Kap. 10 "Modbus TCP/IP oder RTU für Luft-zu-Luft-Wärmepumpe") geprüft. + usage: Tuple[ConsumerUsage, ...] = (ConsumerUsage.SUSPENDABLE_ONOFF, + ConsumerUsage.SUSPENDABLE_TUNABLE), + **kwargs) -> None: + super().__init__(name, type, id, vendor=vendor_descriptor.configuration_factory( + ).type, configuration=configuration or DaikinConfiguration(), usage=usage, **kwargs) diff --git a/packages/modules/consumers/daikin/daikin_homehub_air2air/consumer.py b/packages/modules/consumers/daikin/daikin_homehub_air2air/consumer.py new file mode 100644 index 0000000000..601d4d1cc8 --- /dev/null +++ b/packages/modules/consumers/daikin/daikin_homehub_air2air/consumer.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 +import logging +from typing import Optional + +from modules.common.abstract_device import DeviceDescriptor +from modules.common.configurable_consumer import ConfigurableConsumer, SetLimitData +from modules.common.modbus import ModbusDataType, ModbusTcpClient_ +from modules.consumers.daikin.daikin_homehub_air2air.config import Daikin + +log = logging.getLogger(__name__) + + +def create_consumer(config: Daikin): + client: Optional[ModbusTcpClient_] = None + + def initializer(): + nonlocal client + client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) + + def switch_on() -> None: + # Reg 1000: Smart-Grid-Modus, 2 = Empfehlung ein (Boost) + client.write_register(1000, 2, data_type=ModbusDataType.INT_16, unit=config.configuration.modbus_id) + + def switch_off() -> None: + # Reg 1000: Smart-Grid-Modus, 0 = freier Betrieb (Normal) + client.write_register(1000, 0, data_type=ModbusDataType.INT_16, unit=config.configuration.modbus_id) + + def set_power_limit(power_limit: Optional[float], data: SetLimitData) -> None: + # Reg 1001: Leistungsgrenze für Bedarfssteuerung, Pow16 (raw = kW * 100), lt. offiziellem + # Daikin-Referenzhandbuch (EKRHH Installer Reference Guide, Kap. 10.2.1/10.2). Bereich 0..20kW. + # Die Einheit setzt intern trotzdem eine Untergrenze von 40% der Nennleistung der + # Außeneinheit um - Werte darunter reduzieren die Leistung nicht weiter; echtes Abschalten + # läuft über switch_off() (Reg 1000, Zwangsabschaltung). + value = 0 if power_limit is None else round(max(power_limit, 0) / 10) + client.write_register(1001, value, data_type=ModbusDataType.INT_16, unit=config.configuration.modbus_id) + + # Keine update()-Funktion: die HomeHub-Anbindung stellt für Air2Air-Geräte keine + # Leistungsmessung zur Verfügung. Wer den Verbrauch erfassen will, braucht eine separate + # Leistungsmessung (zB Zwischenzähler/Smart-Plug), die diesem Verbraucher zugeordnet wird. + return ConfigurableConsumer(consumer_config=config, + initializer=initializer, + switch_on=switch_on, + switch_off=switch_off, + set_power_limit=set_power_limit) + + +device_descriptor = DeviceDescriptor(configuration_factory=Daikin) diff --git a/packages/modules/consumers/daikin/daikin_homehub_altherma/__init__.py b/packages/modules/consumers/daikin/daikin_homehub_altherma/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/consumers/daikin/daikin_homehub_altherma/config.py b/packages/modules/consumers/daikin/daikin_homehub_altherma/config.py new file mode 100644 index 0000000000..1a60ecb5c7 --- /dev/null +++ b/packages/modules/consumers/daikin/daikin_homehub_altherma/config.py @@ -0,0 +1,34 @@ +from typing import Optional, Tuple + +from control.consumer.consumer_data import ConsumerUsage +from helpermodules.auto_str import auto_str +from modules.common.consumer_setup import ConsumerSetup +from ..vendor import vendor_descriptor + + +@auto_str +class DaikinAlthermaConfiguration: + def __init__(self, + ip_address: Optional[str] = None, + port: int = 502, + modbus_id: int = 1): + self.ip_address = ip_address + self.port = port + self.modbus_id = modbus_id + + +@auto_str +class DaikinAltherma(ConsumerSetup[DaikinAlthermaConfiguration]): + def __init__(self, + name: str = "Daikin Altherma (HomeHub)", + type: str = "daikin_homehub_altherma", + id: int = 0, + configuration: Optional[DaikinAlthermaConfiguration] = None, + # Register gegen das offizielle EKRHH Installer Reference Guide (4PDE744838, + # Kap. 9 "Modbus TCP/IP oder RTU für Daikin Altherma") geprüft. + usage: Tuple[ConsumerUsage, ...] = (ConsumerUsage.SUSPENDABLE_ONOFF, + ConsumerUsage.SUSPENDABLE_TUNABLE, + ConsumerUsage.METER_ONLY), + **kwargs) -> None: + super().__init__(name, type, id, vendor=vendor_descriptor.configuration_factory( + ).type, configuration=configuration or DaikinAlthermaConfiguration(), usage=usage, **kwargs) diff --git a/packages/modules/consumers/daikin/daikin_homehub_altherma/consumer.py b/packages/modules/consumers/daikin/daikin_homehub_altherma/consumer.py new file mode 100644 index 0000000000..31ac5ebe9b --- /dev/null +++ b/packages/modules/consumers/daikin/daikin_homehub_altherma/consumer.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 +import logging +from typing import Optional + +from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_state import ConsumerState +from modules.common.component_type import ComponentType +from modules.common.configurable_consumer import ConfigurableConsumer, SetLimitData +from modules.common.modbus import ModbusDataType, ModbusTcpClient_ +from modules.common.simcount._simcounter import SimCounterConsumer +from modules.consumers.daikin.daikin_homehub_altherma.config import DaikinAltherma + +log = logging.getLogger(__name__) + + +def create_consumer(config: DaikinAltherma): + client: Optional[ModbusTcpClient_] = None + sim_counter: Optional[SimCounterConsumer] = None + + def initializer(): + nonlocal client, sim_counter + client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) + sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) + + def update() -> ConsumerState: + # Reg 51: Stromverbrauch Wärmepumpe, Pow16 (raw = kW * 100) + power = client.read_input_registers( + 50, ModbusDataType.INT_16, unit=config.configuration.modbus_id) * 10 + imported, exported = sim_counter.sim_count(power) + return ConsumerState(power=power, imported=imported, exported=exported) + + def switch_on() -> None: + # Reg 56: Smart-Grid-Modus, 2 = Empfehlung ein (Boost) + client.write_register(55, 2, data_type=ModbusDataType.INT_16, unit=config.configuration.modbus_id) + + def switch_off() -> None: + # Reg 56: Smart-Grid-Modus, 0 = freier Betrieb (Normal) + client.write_register(55, 0, data_type=ModbusDataType.INT_16, unit=config.configuration.modbus_id) + + def set_power_limit(power_limit: Optional[float], data: SetLimitData) -> None: + # Reg 58: Allgemeine Leistungsbegrenzung, Pow16 (raw = kW * 100), lt. offiziellem + # Daikin-Referenzhandbuch (EKRHH Installer Reference Guide, Kap. 9.2.1/9.3). Bereich 0..20kW, + # gilt laut Referenzhandbuch unabhängig vom Smart-Grid-Modus (anders als Reg 57, das nur + # während der Pufferung im Modus "Empfehlung ein" greift). + # Die Einheit setzt intern trotzdem eine Untergrenze von 4,5kW für 15 Minuten nach + # Verdichterstart durch - Werte darunter reduzieren die Leistung in dieser Zeit nicht weiter; + # echtes Abschalten läuft über switch_off() (Reg 56, Zwangsabschaltung). + value = 0 if power_limit is None else round(max(power_limit, 0) / 10) + client.write_register(57, value, data_type=ModbusDataType.INT_16, unit=config.configuration.modbus_id) + + return ConfigurableConsumer(consumer_config=config, + initializer=initializer, + update=update, + switch_on=switch_on, + switch_off=switch_off, + set_power_limit=set_power_limit) + + +device_descriptor = DeviceDescriptor(configuration_factory=DaikinAltherma) diff --git a/packages/modules/consumers/daikin/vendor.py b/packages/modules/consumers/daikin/vendor.py new file mode 100644 index 0000000000..1e0201b718 --- /dev/null +++ b/packages/modules/consumers/daikin/vendor.py @@ -0,0 +1,14 @@ +from pathlib import Path + +from modules.common.abstract_device import DeviceDescriptor +from modules.devices.vendors import VendorGroup + + +class Vendor: + def __init__(self): + self.type = Path(__file__).parent.name + self.vendor = "Daikin" + self.group = VendorGroup.VENDORS.value + + +vendor_descriptor = DeviceDescriptor(configuration_factory=Vendor) diff --git a/packages/modules/consumers/ego/__init__.py b/packages/modules/consumers/ego/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/consumers/ego/ego/__init__.py b/packages/modules/consumers/ego/ego/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/consumers/ego/ego/config.py b/packages/modules/consumers/ego/ego/config.py new file mode 100644 index 0000000000..c0f2c6ea73 --- /dev/null +++ b/packages/modules/consumers/ego/ego/config.py @@ -0,0 +1,32 @@ +from typing import Optional, Tuple + +from control.consumer.consumer_data import ConsumerUsage +from helpermodules.auto_str import auto_str +from modules.common.consumer_setup import ConsumerSetup +from ..vendor import vendor_descriptor + + +@auto_str +class EgoConfiguration: + def __init__(self, + ip_address: Optional[str] = None, + port: int = 502, + modbus_id: int = 247): + self.ip_address = ip_address + self.port = port + self.modbus_id = modbus_id + + +@auto_str +class Ego(ConsumerSetup[EgoConfiguration]): + def __init__(self, + name: str = "E.G.O. Smart Heater", + type: str = "ego", + id: int = 0, + configuration: Optional[EgoConfiguration] = None, + usage: Tuple[ConsumerUsage, ...] = (ConsumerUsage.SUSPENDABLE_TUNABLE, + ConsumerUsage.SELF_CONTROLLED, + ConsumerUsage.METER_ONLY), + **kwargs) -> None: + super().__init__(name, type, id, vendor=vendor_descriptor.configuration_factory( + ).type, configuration=configuration or EgoConfiguration(), usage=usage, **kwargs) diff --git a/packages/modules/consumers/ego/ego/consumer.py b/packages/modules/consumers/ego/ego/consumer.py new file mode 100644 index 0000000000..cf84e0a683 --- /dev/null +++ b/packages/modules/consumers/ego/ego/consumer.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 +import logging +from typing import Optional + +from modules.common.abstract_consumer import CurrentValues +from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_state import ConsumerState +from modules.common.component_type import ComponentType +from modules.common.configurable_consumer import ConfigurableConsumer, SetLimitData +from modules.common.modbus import ModbusDataType, ModbusTcpClient_ +from modules.common.simcount._simcounter import SimCounterConsumer +from modules.consumers.ego.ego.config import Ego + +log = logging.getLogger(__name__) + + +def create_consumer(config: Ego): + client: Optional[ModbusTcpClient_] = None + sim_counter: Optional[SimCounterConsumer] = None + + def initializer(): + nonlocal client, sim_counter + client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) + sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) + + def send_values(values: CurrentValues) -> None: + unit = config.configuration.modbus_id + # Reg 4864 = -1: Heizstab nutzt selbst Reg 4865 (HomeTotalPower) zur Regelung. + client.write_register(4864, -1, data_type=ModbusDataType.INT_16, unit=unit) + # Reg 4865/4866: Netzsaldo, negativ = Überschuss (gleiche Konvention wie evu_power). + client.write_register(4865, round(values.evu_power), data_type=ModbusDataType.INT_32, unit=unit) + + def update() -> ConsumerState: + unit = config.configuration.modbus_id + status = client.read_holding_registers(5128, ModbusDataType.UINT_16, unit=unit) + power = 0 + if status & 0x01: + power += client.read_holding_registers(4096, ModbusDataType.UINT_16, unit=unit) + if status & 0x02: + power += client.read_holding_registers(4128, ModbusDataType.UINT_16, unit=unit) + if status & 0x04: + power += client.read_holding_registers(4160, ModbusDataType.UINT_16, unit=unit) + imported, exported = sim_counter.sim_count(power) + + return ConsumerState( + power=power, + imported=imported, + exported=exported + ) + + def set_power_limit(power_limit: Optional[float], data: SetLimitData) -> None: + # Reg 4864: gewünschte Leistung [W], bestmöglich auf die 500/1000/2000W-Relais verteilt. + value = 0 if power_limit is None else max(round(power_limit), 0) + client.write_register(4864, value, data_type=ModbusDataType.INT_16, unit=config.configuration.modbus_id) + + return ConfigurableConsumer(consumer_config=config, + initializer=initializer, + update=update, + send_values=send_values, + set_power_limit=set_power_limit) + + +device_descriptor = DeviceDescriptor(configuration_factory=Ego) diff --git a/packages/modules/consumers/ego/vendor.py b/packages/modules/consumers/ego/vendor.py new file mode 100644 index 0000000000..c6114229e0 --- /dev/null +++ b/packages/modules/consumers/ego/vendor.py @@ -0,0 +1,14 @@ +from pathlib import Path + +from modules.common.abstract_device import DeviceDescriptor +from modules.devices.vendors import VendorGroup + + +class Vendor: + def __init__(self): + self.type = Path(__file__).parent.name + self.vendor = "E.G.O." + self.group = VendorGroup.VENDORS.value + + +vendor_descriptor = DeviceDescriptor(configuration_factory=Vendor) diff --git a/packages/modules/consumers/ems_esp/__init__.py b/packages/modules/consumers/ems_esp/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/consumers/ems_esp/ems_esp/__init__.py b/packages/modules/consumers/ems_esp/ems_esp/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/consumers/ems_esp/ems_esp/config.py b/packages/modules/consumers/ems_esp/ems_esp/config.py new file mode 100644 index 0000000000..ba89be03e8 --- /dev/null +++ b/packages/modules/consumers/ems_esp/ems_esp/config.py @@ -0,0 +1,33 @@ +from typing import Optional, Tuple + +from control.consumer.consumer_data import ConsumerUsage +from helpermodules.auto_str import auto_str +from modules.common.consumer_setup import ConsumerSetup +from ..vendor import vendor_descriptor + + +@auto_str +class EmsEspConfiguration: + def __init__(self, + ip_address: Optional[str] = None, + token: Optional[str] = None): + self.ip_address = ip_address + self.token = token + + +@auto_str +class EmsEsp(ConsumerSetup[EmsEspConfiguration]): + def __init__(self, + name: str = "EMS-ESP Wärmepumpe (Bosch/Buderus/Junkers)", + type: str = "ems_esp", + id: int = 0, + configuration: Optional[EmsEspConfiguration] = None, + # kein SELF_CONTROLLED: die energyPriceEl/-PV-Entities steuern laut + # EMS-ESP32-Quellcode die Wärmequellen-Auswahl bei Hybridanlagen, nicht die + # Kompressorleistung einer reinen Wärmepumpe. + usage: Tuple[ConsumerUsage, ...] = (ConsumerUsage.SUSPENDABLE_ONOFF, + ConsumerUsage.SUSPENDABLE_TUNABLE, + ConsumerUsage.METER_ONLY), + **kwargs) -> None: + super().__init__(name, type, id, vendor=vendor_descriptor.configuration_factory( + ).type, configuration=configuration or EmsEspConfiguration(), usage=usage, **kwargs) diff --git a/packages/modules/consumers/ems_esp/ems_esp/consumer.py b/packages/modules/consumers/ems_esp/ems_esp/consumer.py new file mode 100644 index 0000000000..802cbff11c --- /dev/null +++ b/packages/modules/consumers/ems_esp/ems_esp/consumer.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 +import logging +from typing import Optional + +from modules.common import req +from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_state import ConsumerState +from modules.common.component_type import ComponentType +from modules.common.configurable_consumer import ConfigurableConsumer, SetLimitData +from modules.common.simcount._simcounter import SimCounterConsumer +from modules.consumers.ems_esp.ems_esp.config import EmsEsp + +log = logging.getLogger(__name__) + + +def create_consumer(config: EmsEsp): + session: Optional[req.CustomSession] = None + sim_counter: Optional[SimCounterConsumer] = None + base_url: str = "" + headers: dict = {} + + def initializer(): + nonlocal session, sim_counter, base_url, headers + session = req.get_http_session() + sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) + # "heatpump" ist der EMS-ESP-Gerätename für eine reine Wärmepumpe; Hybridanlagen mit + # Gas-/Ölkessel laufen zB unter "boiler" (https://emsesp.org/All-Entities). + base_url = f"http://{config.configuration.ip_address}/api/heatpump" + headers = {"Content-Type": "application/json", + "Authorization": f"Bearer {config.configuration.token}"} + + def _write_entity(entity: str, value) -> None: + session.post(f"{base_url}/{entity}", json={"value": value}, headers=headers) + + def switch_on() -> None: + _write_entity("hpin4opt", "1xxxxxxxxxxx") + + def switch_off() -> None: + _write_entity("hpin4opt", "0xxxxxxxxxxx") + _write_entity("hpin1opt", "0xxxxxxxxxxxxxx") + + def update() -> ConsumerState: + # fehlender Schlüssel (zB falsches Modell) kommt als 200 OK zurück, nicht als HTTP-Fehler - + # ohne diese Prüfung würde das unbemerkt als 0W durchgehen. + values = session.get(base_url, headers=headers).json() + if "hpcurrpower" not in values: + raise ValueError( + f"Entity 'hpcurrpower' nicht in der Antwort von {base_url} enthalten - " + f"vorhandene Werte: {list(values.keys())}") + power = float(values["hpcurrpower"]) + imported, exported = sim_counter.sim_count(power) + + return ConsumerState( + power=power, + imported=imported, + exported=exported + ) + + def set_power_limit(power_limit: Optional[float], data: SetLimitData) -> None: + # pvmaxcomp wirkt nur bei aktivem SG-Ready-Boost (Eingang 4); bei SUSPENDABLE_TUNABLE ruft + # der Core nie switch_on, daher hier selbst mitschalten. Wirksamkeit von pvmaxcomp ist + # modellabhängig (EMS-ESP32 Diskussion #2062: funktioniert auf Buderus WLW186i-12E, nicht + # auf Bosch Compress CS7000iAW). + if power_limit is None: + _write_entity("hpin4opt", "0xxxxxxxxxxx") + _write_entity("hpin1opt", "0xxxxxxxxxxxxxx") + else: + _write_entity("hpin4opt", "1xxxxxxxxxxx") + _write_entity("pvmaxcomp", round(max(power_limit, 0) / 1000, 1)) + + return ConfigurableConsumer(consumer_config=config, + initializer=initializer, + update=update, + set_power_limit=set_power_limit, + switch_on=switch_on, + switch_off=switch_off) + + +device_descriptor = DeviceDescriptor(configuration_factory=EmsEsp) diff --git a/packages/modules/consumers/ems_esp/vendor.py b/packages/modules/consumers/ems_esp/vendor.py new file mode 100644 index 0000000000..aae2c507b2 --- /dev/null +++ b/packages/modules/consumers/ems_esp/vendor.py @@ -0,0 +1,14 @@ +from pathlib import Path + +from modules.common.abstract_device import DeviceDescriptor +from modules.devices.vendors import VendorGroup + + +class Vendor: + def __init__(self): + self.type = Path(__file__).parent.name + self.vendor = "EMS-ESP" + self.group = VendorGroup.VENDORS.value + + +vendor_descriptor = DeviceDescriptor(configuration_factory=Vendor) diff --git a/packages/modules/consumers/gree/__init__.py b/packages/modules/consumers/gree/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/consumers/gree/gree/__init__.py b/packages/modules/consumers/gree/gree/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/consumers/gree/gree/config.py b/packages/modules/consumers/gree/gree/config.py new file mode 100644 index 0000000000..90838af3e3 --- /dev/null +++ b/packages/modules/consumers/gree/gree/config.py @@ -0,0 +1,30 @@ +from typing import Optional, Tuple + +from control.consumer.consumer_data import ConsumerUsage +from helpermodules.auto_str import auto_str +from modules.common.consumer_setup import ConsumerSetup +from ..vendor import vendor_descriptor + + +@auto_str +class GreeConfiguration: + def __init__(self, + ip_address: Optional[str] = None, + port: int = 7000): + self.ip_address = ip_address + self.port = port + + +@auto_str +class Gree(ConsumerSetup[GreeConfiguration]): + def __init__(self, + name: str = "Gree Klimaanlage", + type: str = "gree", + id: int = 0, + configuration: Optional[GreeConfiguration] = None, + # UNVERIFIZIERT: kein offizielles Gree-Protokoll veröffentlicht, community-seitig + # reverse-engineert (mehrere unabhängige Implementierungen stimmen überein). + usage: Tuple[ConsumerUsage, ...] = (ConsumerUsage.SUSPENDABLE_ONOFF,), + **kwargs) -> None: + super().__init__(name, type, id, vendor=vendor_descriptor.configuration_factory( + ).type, configuration=configuration or GreeConfiguration(), usage=usage, **kwargs) diff --git a/packages/modules/consumers/gree/gree/consumer.py b/packages/modules/consumers/gree/gree/consumer.py new file mode 100644 index 0000000000..ef5b96763f --- /dev/null +++ b/packages/modules/consumers/gree/gree/consumer.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python3 +import base64 +import json +import logging +import socket +from typing import Optional + +from cryptography.hazmat.primitives import padding +from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes + +from modules.common.abstract_device import DeviceDescriptor +from modules.common.configurable_consumer import ConfigurableConsumer +from modules.consumers.gree.gree.config import Gree + +log = logging.getLogger(__name__) + +# Generischer Schlüssel für Scan/Bind, identisch bei allen Gree-Geräten. +GENERIC_KEY = b"a3K8Bx%2r8Y7#xDh" + + +def _encrypt(key: bytes, payload: dict) -> str: + padder = padding.PKCS7(128).padder() + data = padder.update(json.dumps(payload).encode()) + padder.finalize() + encryptor = Cipher(algorithms.AES(key), modes.ECB()).encryptor() + return base64.b64encode(encryptor.update(data) + encryptor.finalize()).decode() + + +def _decrypt(key: bytes, pack: str) -> dict: + decryptor = Cipher(algorithms.AES(key), modes.ECB()).decryptor() + padded = decryptor.update(base64.b64decode(pack)) + decryptor.finalize() + unpadder = padding.PKCS7(128).unpadder() + data = unpadder.update(padded) + unpadder.finalize() + return json.loads(data) + + +def _request(ip_address: str, port: int, envelope: dict, timeout: float = 3.0) -> dict: + with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sock: + sock.settimeout(timeout) + sock.sendto(json.dumps(envelope).encode(), (ip_address, port)) + data, _ = sock.recvfrom(4096) + return json.loads(data) + + +def create_consumer(config: Gree): + mac: Optional[str] = None + device_key: Optional[bytes] = None + + def initializer(): + nonlocal mac, device_key + ip_address = config.configuration.ip_address + port = config.configuration.port + scan_resp = _request(ip_address, port, {"t": "scan"}) + device_info = _decrypt(GENERIC_KEY, scan_resp["pack"]) + mac = device_info["mac"] + + bind_pack = _encrypt(GENERIC_KEY, {"mac": mac, "t": "bind", "uid": 0}) + bind_envelope = {"cid": "app", "tcid": mac, "i": 1, "t": "pack", "uid": 0, "pack": bind_pack} + bind_resp = _request(ip_address, port, bind_envelope) + bind_result = _decrypt(GENERIC_KEY, bind_resp["pack"]) + device_key = bind_result["key"].encode() + + def error_handler() -> None: + initializer() + + def _send_command(opt: list, p: list) -> None: + pack = _encrypt(device_key, {"opt": opt, "p": p, "t": "cmd"}) + envelope = {"cid": "app", "i": 0, "t": "pack", "uid": 0, "tcid": mac, "pack": pack} + _request(config.configuration.ip_address, config.configuration.port, envelope) + + def switch_on() -> None: + _send_command(["Pow"], [1]) + + def switch_off() -> None: + _send_command(["Pow"], [0]) + + # Keine update()-Funktion: der Statusabruf liefert Betriebsparameter (Modus, Solltemperatur + # etc.), aber keine Leistungsaufnahme. Wer den Verbrauch erfassen will, braucht eine separate + # Leistungsmessung (zB Zwischenzähler/Smart-Plug), die diesem Verbraucher zugeordnet wird. + return ConfigurableConsumer(consumer_config=config, + initializer=initializer, + error_handler=error_handler, + switch_on=switch_on, + switch_off=switch_off) + + +device_descriptor = DeviceDescriptor(configuration_factory=Gree) diff --git a/packages/modules/consumers/gree/vendor.py b/packages/modules/consumers/gree/vendor.py new file mode 100644 index 0000000000..43ac8cb9fd --- /dev/null +++ b/packages/modules/consumers/gree/vendor.py @@ -0,0 +1,14 @@ +from pathlib import Path + +from modules.common.abstract_device import DeviceDescriptor +from modules.devices.vendors import VendorGroup + + +class Vendor: + def __init__(self): + self.type = Path(__file__).parent.name + self.vendor = "Gree" + self.group = VendorGroup.VENDORS.value + + +vendor_descriptor = DeviceDescriptor(configuration_factory=Vendor) diff --git a/packages/modules/consumers/kermi/__init__.py b/packages/modules/consumers/kermi/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/consumers/kermi/kermi/__init__.py b/packages/modules/consumers/kermi/kermi/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/consumers/kermi/kermi/config.py b/packages/modules/consumers/kermi/kermi/config.py new file mode 100644 index 0000000000..a5a778a649 --- /dev/null +++ b/packages/modules/consumers/kermi/kermi/config.py @@ -0,0 +1,31 @@ +from typing import Optional, Tuple + +from control.consumer.consumer_data import ConsumerUsage +from helpermodules.auto_str import auto_str +from modules.common.consumer_setup import ConsumerSetup +from ..vendor import vendor_descriptor + + +@auto_str +class KermiConfiguration: + def __init__(self, + ip_address: Optional[str] = None, + port: int = 502, + modbus_id: int = 40): + self.ip_address = ip_address + self.port = port + self.modbus_id = modbus_id + + +@auto_str +class Kermi(ConsumerSetup[KermiConfiguration]): + def __init__(self, + name: str = "Kermi Wärmepumpe (x-center/x-change)", + type: str = "kermi", + id: int = 0, + configuration: Optional[KermiConfiguration] = None, + usage: Tuple[ConsumerUsage, ...] = (ConsumerUsage.SUSPENDABLE_TUNABLE, + ConsumerUsage.METER_ONLY), + **kwargs) -> None: + super().__init__(name, type, id, vendor=vendor_descriptor.configuration_factory( + ).type, configuration=configuration or KermiConfiguration(), usage=usage, **kwargs) diff --git a/packages/modules/consumers/kermi/kermi/consumer.py b/packages/modules/consumers/kermi/kermi/consumer.py new file mode 100644 index 0000000000..82c9283ce5 --- /dev/null +++ b/packages/modules/consumers/kermi/kermi/consumer.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 +import logging +from typing import Optional + +from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_state import ConsumerState +from modules.common.component_type import ComponentType +from modules.common.configurable_consumer import ConfigurableConsumer, SetLimitData +from modules.common.modbus import ModbusDataType, ModbusTcpClient_ +from modules.common.simcount._simcounter import SimCounterConsumer +from modules.consumers.kermi.kermi.config import Kermi + +log = logging.getLogger(__name__) + + +def create_consumer(config: Kermi): + client: Optional[ModbusTcpClient_] = None + sim_counter: Optional[SimCounterConsumer] = None + + def initializer(): + nonlocal client, sim_counter + client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) + sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) + + def update() -> ConsumerState: + # Reg 108: aktuelle Leistungsaufnahme, Auflösung 100W + power = client.read_holding_registers( + 108, ModbusDataType.INT_16, unit=config.configuration.modbus_id) * 100 + imported, exported = sim_counter.sim_count(power) + + return ConsumerState( + power=power, + imported=imported, + exported=exported + ) + + def set_power_limit(power_limit: Optional[float], data: SetLimitData) -> None: + # Reg 301: PV-Überschussleistung, Auflösung 0,1W (raw = W * 10) + value = int(round((0 if power_limit is None else max(power_limit, 0)) * 10)) + client.write_register(301, value, data_type=ModbusDataType.INT_16, unit=config.configuration.modbus_id) + + return ConfigurableConsumer(consumer_config=config, + initializer=initializer, + update=update, + set_power_limit=set_power_limit) + + +device_descriptor = DeviceDescriptor(configuration_factory=Kermi) diff --git a/packages/modules/consumers/kermi/vendor.py b/packages/modules/consumers/kermi/vendor.py new file mode 100644 index 0000000000..1351918096 --- /dev/null +++ b/packages/modules/consumers/kermi/vendor.py @@ -0,0 +1,14 @@ +from pathlib import Path + +from modules.common.abstract_device import DeviceDescriptor +from modules.devices.vendors import VendorGroup + + +class Vendor: + def __init__(self): + self.type = Path(__file__).parent.name + self.vendor = "Kermi" + self.group = VendorGroup.VENDORS.value + + +vendor_descriptor = DeviceDescriptor(configuration_factory=Vendor) diff --git a/packages/modules/consumers/lg_therma/__init__.py b/packages/modules/consumers/lg_therma/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/consumers/lg_therma/lg_therma/__init__.py b/packages/modules/consumers/lg_therma/lg_therma/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/consumers/lg_therma/lg_therma/config.py b/packages/modules/consumers/lg_therma/lg_therma/config.py new file mode 100644 index 0000000000..ad8fbc259c --- /dev/null +++ b/packages/modules/consumers/lg_therma/lg_therma/config.py @@ -0,0 +1,33 @@ +from typing import Optional, Tuple + +from control.consumer.consumer_data import ConsumerUsage +from helpermodules.auto_str import auto_str +from modules.common.consumer_setup import ConsumerSetup +from ..vendor import vendor_descriptor + + +@auto_str +class LgThermaConfiguration: + def __init__(self, + ip_address: Optional[str] = None, + port: int = 502, + modbus_id: int = 33): + self.ip_address = ip_address + self.port = port + self.modbus_id = modbus_id + + +@auto_str +class LgTherma(ConsumerSetup[LgThermaConfiguration]): + def __init__(self, + name: str = "LG Therma V Wärmepumpe", + type: str = "lg_therma", + id: int = 0, + configuration: Optional[LgThermaConfiguration] = None, + # UNVERIFIZIERT: keine offizielle LG-Dokumentation für dieses Register gefunden. + # PI-485-Protokoll selbst ist offiziell dokumentiert. + usage: Tuple[ConsumerUsage, ...] = (ConsumerUsage.SUSPENDABLE_ONOFF, + ConsumerUsage.METER_ONLY), + **kwargs) -> None: + super().__init__(name, type, id, vendor=vendor_descriptor.configuration_factory( + ).type, configuration=configuration or LgThermaConfiguration(), usage=usage, **kwargs) diff --git a/packages/modules/consumers/lg_therma/lg_therma/consumer.py b/packages/modules/consumers/lg_therma/lg_therma/consumer.py new file mode 100644 index 0000000000..2eaccafe4d --- /dev/null +++ b/packages/modules/consumers/lg_therma/lg_therma/consumer.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +import logging +from typing import Optional + +from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_state import ConsumerState +from modules.common.component_type import ComponentType +from modules.common.configurable_consumer import ConfigurableConsumer +from modules.common.modbus import ModbusDataType, ModbusTcpClient_ +from modules.common.simcount._simcounter import SimCounterConsumer +from modules.consumers.lg_therma.lg_therma.config import LgTherma + +log = logging.getLogger(__name__) + + +def create_consumer(config: LgTherma): + client: Optional[ModbusTcpClient_] = None + sim_counter: Optional[SimCounterConsumer] = None + + def initializer(): + nonlocal client, sim_counter + client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) + sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) + + def switch_on() -> None: + # Reg 9: Energy State, 3 = Ein-Empfehlung (Boost) + client.write_register(9, 3, data_type=ModbusDataType.UINT_16, unit=config.configuration.modbus_id) + + def switch_off() -> None: + # Reg 9: Energy State, 2 = Normalbetrieb + client.write_register(9, 2, data_type=ModbusDataType.UINT_16, unit=config.configuration.modbus_id) + + def update() -> ConsumerState: + # Reg 35: elektrische Leistungsaufnahme [W] + power = client.read_input_registers(35, ModbusDataType.UINT_16, unit=config.configuration.modbus_id) + imported, exported = sim_counter.sim_count(power) + + return ConsumerState( + power=power, + imported=imported, + exported=exported + ) + + return ConfigurableConsumer(consumer_config=config, + initializer=initializer, + update=update, + switch_on=switch_on, + switch_off=switch_off) + + +device_descriptor = DeviceDescriptor(configuration_factory=LgTherma) diff --git a/packages/modules/consumers/lg_therma/vendor.py b/packages/modules/consumers/lg_therma/vendor.py new file mode 100644 index 0000000000..d69bb85b5f --- /dev/null +++ b/packages/modules/consumers/lg_therma/vendor.py @@ -0,0 +1,14 @@ +from pathlib import Path + +from modules.common.abstract_device import DeviceDescriptor +from modules.devices.vendors import VendorGroup + + +class Vendor: + def __init__(self): + self.type = Path(__file__).parent.name + self.vendor = "LG" + self.group = VendorGroup.VENDORS.value + + +vendor_descriptor = DeviceDescriptor(configuration_factory=Vendor) diff --git a/packages/modules/consumers/luxtronik/__init__.py b/packages/modules/consumers/luxtronik/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/consumers/luxtronik/luxtronik/__init__.py b/packages/modules/consumers/luxtronik/luxtronik/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/consumers/luxtronik/luxtronik/config.py b/packages/modules/consumers/luxtronik/luxtronik/config.py new file mode 100644 index 0000000000..207ea3d064 --- /dev/null +++ b/packages/modules/consumers/luxtronik/luxtronik/config.py @@ -0,0 +1,36 @@ +from typing import Optional, Tuple + +from control.consumer.consumer_data import ConsumerUsage +from helpermodules.auto_str import auto_str +from modules.common.consumer_setup import ConsumerSetup +from ..vendor import vendor_descriptor + + +@auto_str +class LuxtronikConfiguration: + def __init__(self, + ip_address: Optional[str] = None, + port: int = 502, + modbus_id: int = 1, + # Anhebung von Heiz- und Warmwassersolltemperatur im Überschussbetrieb [K] - + # abhängig vom Heizsystem (Fußbodenheizung/Heizkörper, Puffergröße), daher + # bewusst konfigurierbar statt fest verdrahtet. + boost_offset: float = 5.0): + self.ip_address = ip_address + self.port = port + self.modbus_id = modbus_id + self.boost_offset = boost_offset + + +@auto_str +class Luxtronik(ConsumerSetup[LuxtronikConfiguration]): + def __init__(self, + name: str = "Luxtronik 2.1 Wärmepumpe (Alpha Innotec/Buderus Logamatic HMC/Novelan/Roth/Wolf u.a.)", + type: str = "luxtronik", + id: int = 0, + configuration: Optional[LuxtronikConfiguration] = None, + usage: Tuple[ConsumerUsage, ...] = (ConsumerUsage.SUSPENDABLE_ONOFF, + ConsumerUsage.METER_ONLY), + **kwargs) -> None: + super().__init__(name, type, id, vendor=vendor_descriptor.configuration_factory( + ).type, configuration=configuration or LuxtronikConfiguration(), usage=usage, **kwargs) diff --git a/packages/modules/consumers/luxtronik/luxtronik/consumer.py b/packages/modules/consumers/luxtronik/luxtronik/consumer.py new file mode 100644 index 0000000000..2b662938c3 --- /dev/null +++ b/packages/modules/consumers/luxtronik/luxtronik/consumer.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 +import logging +from typing import Optional + +from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_state import ConsumerState +from modules.common.component_type import ComponentType +from modules.common.configurable_consumer import ConfigurableConsumer +from modules.common.modbus import ModbusDataType, ModbusTcpClient_ +from modules.common.simcount._simcounter import SimCounterConsumer +from modules.consumers.luxtronik.luxtronik.config import Luxtronik + +log = logging.getLogger(__name__) + + +def create_consumer(config: Luxtronik): + client: Optional[ModbusTcpClient_] = None + sim_counter: Optional[SimCounterConsumer] = None + + def initializer(): + nonlocal client, sim_counter + client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) + sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) + + def switch_on() -> None: + unit = config.configuration.modbus_id + offset = round(config.configuration.boost_offset * 10) + # Reg 10040: LPC-Modus 0=No-Limit. Reg 10000/10005: Heiz./WW-Modus 2=Offset, + # Reg 10002/10007: Offset [0.1K]. + client.write_register(10040, 0, data_type=ModbusDataType.UINT_16, unit=unit) + client.write_register(10000, 2, data_type=ModbusDataType.UINT_16, unit=unit) + client.write_register(10002, offset, data_type=ModbusDataType.INT_16, unit=unit) + client.write_register(10005, 2, data_type=ModbusDataType.UINT_16, unit=unit) + client.write_register(10007, offset, data_type=ModbusDataType.INT_16, unit=unit) + + def switch_off() -> None: + unit = config.configuration.modbus_id + client.write_register(10040, 0, data_type=ModbusDataType.UINT_16, unit=unit) + client.write_register(10000, 0, data_type=ModbusDataType.UINT_16, unit=unit) + client.write_register(10005, 0, data_type=ModbusDataType.UINT_16, unit=unit) + + def update() -> ConsumerState: + # Reg 10301: el. Leistungsaufnahme, Auflösung 100W (kW x0.1) + power = client.read_input_registers( + 10301, ModbusDataType.UINT_16, unit=config.configuration.modbus_id) * 100 + imported, exported = sim_counter.sim_count(power) + + return ConsumerState( + power=power, + imported=imported, + exported=exported + ) + + return ConfigurableConsumer(consumer_config=config, + initializer=initializer, + update=update, + switch_on=switch_on, + switch_off=switch_off) + + +device_descriptor = DeviceDescriptor(configuration_factory=Luxtronik) diff --git a/packages/modules/consumers/luxtronik/vendor.py b/packages/modules/consumers/luxtronik/vendor.py new file mode 100644 index 0000000000..37196cb318 --- /dev/null +++ b/packages/modules/consumers/luxtronik/vendor.py @@ -0,0 +1,14 @@ +from pathlib import Path + +from modules.common.abstract_device import DeviceDescriptor +from modules.devices.vendors import VendorGroup + + +class Vendor: + def __init__(self): + self.type = Path(__file__).parent.name + self.vendor = "Luxtronik" + self.group = VendorGroup.VENDORS.value + + +vendor_descriptor = DeviceDescriptor(configuration_factory=Vendor) diff --git a/packages/modules/consumers/mitsubishi/__init__.py b/packages/modules/consumers/mitsubishi/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/consumers/mitsubishi/mitsubishi_modbus/__init__.py b/packages/modules/consumers/mitsubishi/mitsubishi_modbus/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/consumers/mitsubishi/mitsubishi_modbus/config.py b/packages/modules/consumers/mitsubishi/mitsubishi_modbus/config.py new file mode 100644 index 0000000000..0c6c5f3a81 --- /dev/null +++ b/packages/modules/consumers/mitsubishi/mitsubishi_modbus/config.py @@ -0,0 +1,30 @@ +from typing import Optional, Tuple + +from control.consumer.consumer_data import ConsumerUsage +from helpermodules.auto_str import auto_str +from modules.common.consumer_setup import ConsumerSetup +from ..vendor import vendor_descriptor + + +@auto_str +class MitsubishiModbusConfiguration: + def __init__(self, + ip_address: Optional[str] = None, + port: int = 502, + modbus_id: int = 1): + self.ip_address = ip_address + self.port = port + self.modbus_id = modbus_id + + +@auto_str +class MitsubishiModbus(ConsumerSetup[MitsubishiModbusConfiguration]): + def __init__(self, + name: str = "Mitsubishi Electric Klimaanlage (Intesis Modbus-Interface)", + type: str = "mitsubishi_modbus", + id: int = 0, + configuration: Optional[MitsubishiModbusConfiguration] = None, + usage: Tuple[ConsumerUsage, ...] = (ConsumerUsage.SUSPENDABLE_ONOFF,), + **kwargs) -> None: + super().__init__(name, type, id, vendor=vendor_descriptor.configuration_factory( + ).type, configuration=configuration or MitsubishiModbusConfiguration(), usage=usage, **kwargs) diff --git a/packages/modules/consumers/mitsubishi/mitsubishi_modbus/consumer.py b/packages/modules/consumers/mitsubishi/mitsubishi_modbus/consumer.py new file mode 100644 index 0000000000..a592611d16 --- /dev/null +++ b/packages/modules/consumers/mitsubishi/mitsubishi_modbus/consumer.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 +import logging +from typing import Optional + +from modules.common.abstract_device import DeviceDescriptor +from modules.common.configurable_consumer import ConfigurableConsumer +from modules.common.modbus import ModbusDataType, ModbusTcpClient_ +from modules.consumers.mitsubishi.mitsubishi_modbus.config import MitsubishiModbus + +log = logging.getLogger(__name__) + + +def create_consumer(config: MitsubishiModbus): + client: Optional[ModbusTcpClient_] = None + + def initializer(): + nonlocal client + client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) + + def switch_on() -> None: + # Reg 0: AC unit On/Off, 1 = On + client.write_register(0, 1, data_type=ModbusDataType.INT_16, unit=config.configuration.modbus_id) + + def switch_off() -> None: + # Reg 0: AC unit On/Off, 0 = Off + client.write_register(0, 0, data_type=ModbusDataType.INT_16, unit=config.configuration.modbus_id) + + # Keine update()-Funktion: das Intesis-Interface stellt keine Leistungsmessung zur Verfügung. + # Wer den Verbrauch erfassen will, braucht eine separate Leistungsmessung (zB + # Zwischenzähler/Smart-Plug), die diesem Verbraucher zugeordnet wird. + return ConfigurableConsumer(consumer_config=config, + initializer=initializer, + switch_on=switch_on, + switch_off=switch_off) + + +device_descriptor = DeviceDescriptor(configuration_factory=MitsubishiModbus) diff --git a/packages/modules/consumers/mitsubishi/vendor.py b/packages/modules/consumers/mitsubishi/vendor.py new file mode 100644 index 0000000000..6688774a09 --- /dev/null +++ b/packages/modules/consumers/mitsubishi/vendor.py @@ -0,0 +1,14 @@ +from pathlib import Path + +from modules.common.abstract_device import DeviceDescriptor +from modules.devices.vendors import VendorGroup + + +class Vendor: + def __init__(self): + self.type = Path(__file__).parent.name + self.vendor = "Mitsubishi Electric" + self.group = VendorGroup.VENDORS.value + + +vendor_descriptor = DeviceDescriptor(configuration_factory=Vendor) diff --git a/packages/modules/consumers/mtec/__init__.py b/packages/modules/consumers/mtec/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/consumers/mtec/mtec/__init__.py b/packages/modules/consumers/mtec/mtec/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/consumers/mtec/mtec/config.py b/packages/modules/consumers/mtec/mtec/config.py new file mode 100644 index 0000000000..c0da618a18 --- /dev/null +++ b/packages/modules/consumers/mtec/mtec/config.py @@ -0,0 +1,33 @@ +from typing import Optional, Tuple + +from control.consumer.consumer_data import ConsumerUsage +from helpermodules.auto_str import auto_str +from modules.common.consumer_setup import ConsumerSetup +from ..vendor import vendor_descriptor + + +@auto_str +class MtecConfiguration: + def __init__(self, + ip_address: Optional[str] = None, + port: int = 502, + modbus_id: int = 1): + self.ip_address = ip_address + self.port = port + self.modbus_id = modbus_id + + +@auto_str +class Mtec(ConsumerSetup[MtecConfiguration]): + def __init__(self, + name: str = "M-TEC Wärmepumpe", + type: str = "mtec", + id: int = 0, + configuration: Optional[MtecConfiguration] = None, + # Am Wärmepumpenregler muss "Modul Type" auf "Virtual" und "WMZ Modus" auf + # "Analog" gestellt werden, siehe M-TEC-Anleitung zur PV-Überschussnutzung. + usage: Tuple[ConsumerUsage, ...] = (ConsumerUsage.SUSPENDABLE_TUNABLE, + ConsumerUsage.METER_ONLY), + **kwargs) -> None: + super().__init__(name, type, id, vendor=vendor_descriptor.configuration_factory( + ).type, configuration=configuration or MtecConfiguration(), usage=usage, **kwargs) diff --git a/packages/modules/consumers/mtec/mtec/consumer.py b/packages/modules/consumers/mtec/mtec/consumer.py new file mode 100644 index 0000000000..277c18dc57 --- /dev/null +++ b/packages/modules/consumers/mtec/mtec/consumer.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 +import logging +from typing import Optional + +from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_state import ConsumerState +from modules.common.component_type import ComponentType +from modules.common.configurable_consumer import ConfigurableConsumer, SetLimitData +from modules.common.modbus import ModbusDataType, ModbusTcpClient_ +from modules.common.simcount._simcounter import SimCounterConsumer +from modules.consumers.mtec.mtec.config import Mtec + +log = logging.getLogger(__name__) + + +def create_consumer(config: Mtec): + client: Optional[ModbusTcpClient_] = None + sim_counter: Optional[SimCounterConsumer] = None + + def initializer(): + nonlocal client, sim_counter + client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) + sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) + + def update() -> ConsumerState: + # Reg 707: elektrische Leistungsaufnahme [W] + power = client.read_holding_registers(707, ModbusDataType.INT_16, unit=config.configuration.modbus_id) + imported, exported = sim_counter.sim_count(power) + + return ConsumerState( + power=power, + imported=imported, + exported=exported + ) + + def set_power_limit(power_limit: Optional[float], data: SetLimitData) -> None: + # Reg 1000: PV-Überschussleistung [W] + value = 0 if power_limit is None else max(round(power_limit), 0) + client.write_register(1000, value, data_type=ModbusDataType.INT_16, unit=config.configuration.modbus_id) + + return ConfigurableConsumer(consumer_config=config, + initializer=initializer, + update=update, + set_power_limit=set_power_limit) + + +device_descriptor = DeviceDescriptor(configuration_factory=Mtec) diff --git a/packages/modules/consumers/mtec/vendor.py b/packages/modules/consumers/mtec/vendor.py new file mode 100644 index 0000000000..eba3646172 --- /dev/null +++ b/packages/modules/consumers/mtec/vendor.py @@ -0,0 +1,14 @@ +from pathlib import Path + +from modules.common.abstract_device import DeviceDescriptor +from modules.devices.vendors import VendorGroup + + +class Vendor: + def __init__(self): + self.type = Path(__file__).parent.name + self.vendor = "M-TEC" + self.group = VendorGroup.VENDORS.value + + +vendor_descriptor = DeviceDescriptor(configuration_factory=Vendor) diff --git a/packages/modules/consumers/weishaupt/__init__.py b/packages/modules/consumers/weishaupt/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/consumers/weishaupt/vendor.py b/packages/modules/consumers/weishaupt/vendor.py new file mode 100644 index 0000000000..3623816d5c --- /dev/null +++ b/packages/modules/consumers/weishaupt/vendor.py @@ -0,0 +1,14 @@ +from pathlib import Path + +from modules.common.abstract_device import DeviceDescriptor +from modules.devices.vendors import VendorGroup + + +class Vendor: + def __init__(self): + self.type = Path(__file__).parent.name + self.vendor = "Weishaupt" + self.group = VendorGroup.VENDORS.value + + +vendor_descriptor = DeviceDescriptor(configuration_factory=Vendor) diff --git a/packages/modules/consumers/weishaupt/weishaupt_wwp/__init__.py b/packages/modules/consumers/weishaupt/weishaupt_wwp/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/consumers/weishaupt/weishaupt_wwp/config.py b/packages/modules/consumers/weishaupt/weishaupt_wwp/config.py new file mode 100644 index 0000000000..dbc4bdef2d --- /dev/null +++ b/packages/modules/consumers/weishaupt/weishaupt_wwp/config.py @@ -0,0 +1,33 @@ +from typing import Optional, Tuple + +from control.consumer.consumer_data import ConsumerUsage +from helpermodules.auto_str import auto_str +from modules.common.consumer_setup import ConsumerSetup +from ..vendor import vendor_descriptor + + +@auto_str +class WeishauptConfiguration: + def __init__(self, + ip_address: Optional[str] = None, + port: int = 502, + modbus_id: int = 1): + self.ip_address = ip_address + self.port = port + self.modbus_id = modbus_id + + +@auto_str +class Weishaupt(ConsumerSetup[WeishauptConfiguration]): + def __init__(self, + name: str = "Weishaupt Wärmepumpe (AEROBLOCK/BIBLOCK/SPLITBLOCK/GEOBLOCK)", + type: str = "weishaupt_wwp", + id: int = 0, + configuration: Optional[WeishauptConfiguration] = None, + # kein SUSPENDABLE_ONOFF: die SG-Ready-Eingänge sind auf diesen Geräten laut + # Weishaupt-Datenpunktliste (Modbus TCP WWP) nur lesbar, die Leistungsvorgabe + # SollwertPV übersteuert SG-Ready ohnehin. + usage: Tuple[ConsumerUsage, ...] = (ConsumerUsage.SUSPENDABLE_TUNABLE,), + **kwargs) -> None: + super().__init__(name, type, id, vendor=vendor_descriptor.configuration_factory( + ).type, configuration=configuration or WeishauptConfiguration(), usage=usage, **kwargs) diff --git a/packages/modules/consumers/weishaupt/weishaupt_wwp/consumer.py b/packages/modules/consumers/weishaupt/weishaupt_wwp/consumer.py new file mode 100644 index 0000000000..39ee68b701 --- /dev/null +++ b/packages/modules/consumers/weishaupt/weishaupt_wwp/consumer.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 +import logging +from typing import Optional + +from modules.common.abstract_device import DeviceDescriptor +from modules.common.configurable_consumer import ConfigurableConsumer, SetLimitData +from modules.common.modbus import ModbusDataType, ModbusTcpClient_ +from modules.consumers.weishaupt.weishaupt_wwp.config import Weishaupt + +log = logging.getLogger(__name__) + + +def create_consumer(config: Weishaupt): + client: Optional[ModbusTcpClient_] = None + + def initializer(): + nonlocal client + client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) + + def set_power_limit(power_limit: Optional[float], data: SetLimitData) -> None: + # Reg 40002: SollwertPV [W], 0 gibt die Regelung an die Wärmepumpe zurück (0..65535, + # daher clamp statt negativer Werte). + value = 0 if power_limit is None else min(max(round(power_limit), 0), 65535) + client.write_register(40002, value, data_type=ModbusDataType.UINT_16, unit=config.configuration.modbus_id) + + # Keine update()-Funktion: die Datenpunktliste (83807301) enthält keine elektrische + # Leistungsaufnahme, nur Leistungsanforderung in % (Reg 33103). Wer den Verbrauch erfassen + # will, braucht eine separate Leistungsmessung (zB Zwischenzähler/Smart-Plug). + return ConfigurableConsumer(consumer_config=config, + initializer=initializer, + set_power_limit=set_power_limit) + + +device_descriptor = DeviceDescriptor(configuration_factory=Weishaupt) diff --git a/packages/modules/consumers/xtherma/__init__.py b/packages/modules/consumers/xtherma/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/consumers/xtherma/vendor.py b/packages/modules/consumers/xtherma/vendor.py new file mode 100644 index 0000000000..a311eb1574 --- /dev/null +++ b/packages/modules/consumers/xtherma/vendor.py @@ -0,0 +1,14 @@ +from pathlib import Path + +from modules.common.abstract_device import DeviceDescriptor +from modules.devices.vendors import VendorGroup + + +class Vendor: + def __init__(self): + self.type = Path(__file__).parent.name + self.vendor = "Xtherma" + self.group = VendorGroup.VENDORS.value + + +vendor_descriptor = DeviceDescriptor(configuration_factory=Vendor) diff --git a/packages/modules/consumers/xtherma/xtherma/__init__.py b/packages/modules/consumers/xtherma/xtherma/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/modules/consumers/xtherma/xtherma/config.py b/packages/modules/consumers/xtherma/xtherma/config.py new file mode 100644 index 0000000000..8ecf8e7a84 --- /dev/null +++ b/packages/modules/consumers/xtherma/xtherma/config.py @@ -0,0 +1,32 @@ +from typing import Optional, Tuple + +from control.consumer.consumer_data import ConsumerUsage +from helpermodules.auto_str import auto_str +from modules.common.consumer_setup import ConsumerSetup +from ..vendor import vendor_descriptor + + +@auto_str +class XthermaConfiguration: + def __init__(self, + ip_address: Optional[str] = None, + port: int = 502, + modbus_id: int = 1): + self.ip_address = ip_address + self.port = port + self.modbus_id = modbus_id + + +@auto_str +class Xtherma(ConsumerSetup[XthermaConfiguration]): + def __init__(self, + name: str = "Xtherma Wärmepumpe", + type: str = "xtherma", + id: int = 0, + configuration: Optional[XthermaConfiguration] = None, + usage: Tuple[ConsumerUsage, ...] = (ConsumerUsage.SUSPENDABLE_TUNABLE, + ConsumerUsage.SUSPENDABLE_ONOFF, + ConsumerUsage.METER_ONLY), + **kwargs) -> None: + super().__init__(name, type, id, vendor=vendor_descriptor.configuration_factory( + ).type, configuration=configuration or XthermaConfiguration(), usage=usage, **kwargs) diff --git a/packages/modules/consumers/xtherma/xtherma/consumer.py b/packages/modules/consumers/xtherma/xtherma/consumer.py new file mode 100644 index 0000000000..e1456fd1d4 --- /dev/null +++ b/packages/modules/consumers/xtherma/xtherma/consumer.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python3 +import logging +from typing import Optional + +from helpermodules import timecheck +from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_state import ConsumerState +from modules.common.component_type import ComponentType +from modules.common.configurable_consumer import ConfigurableConsumer, SetLimitData +from modules.common.modbus import ModbusDataType, ModbusTcpClient_ +from modules.common.simcount._simcounter import SimCounterConsumer +from modules.consumers.xtherma.xtherma.config import Xtherma + +log = logging.getLogger(__name__) + + +def create_consumer(config: Xtherma): + client: Optional[ModbusTcpClient_] = None + sim_counter: Optional[SimCounterConsumer] = None + last_write: Optional[float] = None + last_sgready_write: Optional[float] = None + + def initializer(): + nonlocal client, sim_counter + client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) + sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) + + def update() -> ConsumerState: + # Reg 177 (in_total): elektrische Leistungsaufnahme, Auflösung 10W + power = client.read_holding_registers( + 177, ModbusDataType.UINT_16, unit=config.configuration.modbus_id) * 10 + imported, exported = sim_counter.sim_count(power) + + return ConsumerState( + power=power, + imported=imported, + exported=exported + ) + + def set_power_limit(power_limit: Optional[float], data: SetLimitData) -> None: + # Reg 70/71 dürfen laut Xtherma-Protokoll höchstens 1x/min beschrieben werden. + nonlocal last_write + if last_write is not None and timecheck.check_timestamp(last_write, 60): + return + last_write = timecheck.create_timestamp() + unit = config.configuration.modbus_id + if power_limit is None: + client.write_register(70, 0, data_type=ModbusDataType.UINT_16, unit=unit) + else: + # Reg 71: Überschuss [W], 0..100000 + client.write_register( + 71, min(max(round(power_limit), 0), 100000), data_type=ModbusDataType.UINT_16, unit=unit) + client.write_register(70, 1, data_type=ModbusDataType.UINT_16, unit=unit) + + def switch_on() -> None: + # Reg 60: SG-Ready-Modus, darf laut Xtherma-Protokoll höchstens 1x/30min beschrieben + # werden. 1 = Normalbetrieb. + nonlocal last_sgready_write + if last_sgready_write is not None and timecheck.check_timestamp(last_sgready_write, 1800): + return + last_sgready_write = timecheck.create_timestamp() + client.write_register(60, 1, data_type=ModbusDataType.UINT_16, unit=config.configuration.modbus_id) + + def switch_off() -> None: + # Reg 60: SG-Ready-Modus, 2 = Sperre. + nonlocal last_sgready_write + if last_sgready_write is not None and timecheck.check_timestamp(last_sgready_write, 1800): + return + last_sgready_write = timecheck.create_timestamp() + client.write_register(60, 2, data_type=ModbusDataType.UINT_16, unit=config.configuration.modbus_id) + + return ConfigurableConsumer(consumer_config=config, + initializer=initializer, + update=update, + set_power_limit=set_power_limit, + switch_on=switch_on, + switch_off=switch_off) + + +device_descriptor = DeviceDescriptor(configuration_factory=Xtherma) diff --git a/packages/modules/devices/avm/avm/device.py b/packages/modules/devices/avm/avm/device.py index 4c370a9ac0..5103d993db 100644 --- a/packages/modules/devices/avm/avm/device.py +++ b/packages/modules/devices/avm/avm/device.py @@ -50,7 +50,7 @@ def get_session_id(): challengeResponse = ET.fromstring(response.content) session_id = challengeResponse.find('SID').text if session_id != INVALID_SESSIONID: - return + return session_id blockTimeXML = challengeResponse.find('BlockTime') if blockTimeXML is not None and int(blockTimeXML.text) > 0: raise Exception("Durch Anmeldefehler in der Vergangenheit ist der Zugang zur FRITZ!Box " diff --git a/packages/modules/devices/sonnen/sonnenbatterie/api.py b/packages/modules/devices/sonnen/sonnenbatterie/api.py index 5689b6289f..d908d6f0f8 100644 --- a/packages/modules/devices/sonnen/sonnenbatterie/api.py +++ b/packages/modules/devices/sonnen/sonnenbatterie/api.py @@ -133,9 +133,12 @@ class JsonApiVersion(Enum): class JsonApi(): class OperatingMode(Enum): + # only define modes we can override savely MANUAL = "1" SELF_CONSUMPTION = "2" + # MODULE_EXTENSION = "6" TIME_OF_USE = "10" + # OPTIMIZATION = "11" class PowerMeterDirection(Enum): PRODUCTION = "production" @@ -447,12 +450,18 @@ def set_power_limit(self, power_limit: Optional[int]) -> None: configurations = self.__get_configurations() if "EM_OperatingMode" not in configurations: raise KeyError("The key 'EM_OperatingMode' is missing in the API response.") + try: + self.OperatingMode(configurations["EM_OperatingMode"]) + except ValueError: + raise ValueError("Aktive Speichersteuerung wird in " + f"Betriebsmodus {configurations['EM_OperatingMode']} " + "nicht unterstützt.") if self.default_operating_mode is None: # Store the default operating mode for later restoration self.default_operating_mode = self.OperatingMode(configurations["EM_OperatingMode"]) log.debug(f"default_operating_mode set to: {self.default_operating_mode}") - operating_mode = self.OperatingMode(configurations["EM_OperatingMode"]) + if power_limit is None: # No specific power limit is set, activating default mode to allow the system to optimize energy usage by it # self. diff --git a/packages/modules/devices/tesla/tesla/counter.py b/packages/modules/devices/tesla/tesla/counter.py index 8840d2e70b..586214e9dd 100644 --- a/packages/modules/devices/tesla/tesla/counter.py +++ b/packages/modules/devices/tesla/tesla/counter.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 import logging -from requests import HTTPError +import math from modules.common.abstract_device import AbstractCounter from modules.common.component_state import CounterState @@ -18,33 +18,140 @@ def __init__(self, component_config: TeslaCounterSetup) -> None: self.component_config = component_config def initialize(self) -> None: - self.store = get_component_value_store(self.component_config.type, self.component_config.id) - self.fault_state = FaultState(ComponentInfo.from_component_config(self.component_config)) + self.store = get_component_value_store( + self.component_config.type, + self.component_config.id, + ) + self.fault_state = FaultState( + ComponentInfo.from_component_config(self.component_config) + ) + + @staticmethod + def _nearly_zero(x: float, eps: float = 1e-9) -> bool: + return abs(x) < eps + + def _calc_currents_and_pf_from_pqu( + self, + voltages: list[float], + p_list: list[float], + q_list: list[float], + ) -> tuple[list[float], list[float]]: + """ + Calculates signed currents (A) and signed power factors per phase from P/Q/U. + + Convention: + - sign of current follows sign of active power P (import +, export -) + - PF = P / S (signed) + - S = sqrt(P^2 + Q^2) + - I = S / U (signed via P) + """ + currents: list[float] = [0.0, 0.0, 0.0] + pfs: list[float] = [0.0, 0.0, 0.0] + + for i in range(3): + u = voltages[i] + p = p_list[i] + q = q_list[i] + + if self._nearly_zero(u): + currents[i] = 0.0 + pfs[i] = 0.0 + continue + + s = math.sqrt(p * p + q * q) + + if self._nearly_zero(s): + currents[i] = 0.0 + pfs[i] = 0.0 + continue + + pfs[i] = p / s + i_mag = s / u + currents[i] = i_mag if p >= 0 else -i_mag + + return currents, pfs def update(self, client: PowerwallHttpClient, aggregate): - # read firmware version - status = client.get_json("/api/status") - log.debug('Firmware: ' + status["version"]) try: - # read additional info if firmware supports meters_site = client.get_json("/api/meters/site") + cached = meters_site[0]["Cached_readings"] + + voltages = [ + float(cached[f"v_l{phase}n"]) + for phase in range(1, 4) + ] + + p_list = [ + float(cached[f"real_power_{phase}"]) + for phase in ["a", "b", "c"] + ] + + q_list = [ + float(cached[f"reactive_power_{phase}"]) + for phase in ["a", "b", "c"] + ] + + api_currents = [ + float(cached[f"i_{phase}_current"]) + for phase in ["a", "b", "c"] + ] + + imported = aggregate["site"]["energy_imported"] + exported = aggregate["site"]["energy_exported"] + + calculated_currents, power_factors = ( + self._calc_currents_and_pf_from_pqu( + voltages=voltages, + p_list=p_list, + q_list=q_list, + ) + ) + + if all(self._nearly_zero(i) for i in api_currents): + currents = calculated_currents + log.debug( + "Tesla/Neurio phase currents missing (all 0). " + "Calculated currents locally from P/Q and U." + ) + else: + currents = api_currents + log.debug( + "Using phase currents from Tesla/Neurio API." + ) + + frequency = float(aggregate["site"]["frequency"]) + + serial = cached.get("serial_number") + serial_number = str(serial) if serial else None + powerwall_state = CounterState( - imported=aggregate["site"]["energy_imported"], - exported=aggregate["site"]["energy_exported"], + imported=imported, + exported=exported, power=aggregate["site"]["instant_power"], - voltages=[meters_site[0]["Cached_readings"]["v_l" + str(phase) + "n"] for phase in range(1, 4)], - currents=[meters_site[0]["Cached_readings"]["i_" + phase + "_current"] for phase in ["a", "b", "c"]], - powers=[meters_site[0]["Cached_readings"]["real_power_" + phase] for phase in ["a", "b", "c"]] + voltages=voltages, + currents=currents, + powers=p_list, + power_factors=power_factors, + frequency=round(frequency, 2), + serial_number=serial_number, ) - except (KeyError, HTTPError): + + except (KeyError, IndexError, TypeError, ValueError) as e: log.debug( - "Firmware seems not to provide detailed phase measurements. Fallback to total power only.") + "Firmware seems not to provide detailed phase measurements. " + "Fallback to total power only. (%s)", + str(e), + ) + powerwall_state = CounterState( imported=aggregate["site"]["energy_imported"], exported=aggregate["site"]["energy_exported"], - power=aggregate["site"]["instant_power"] + power=aggregate["site"]["instant_power"], ) + self.store.set(powerwall_state) -component_descriptor = ComponentDescriptor(configuration_factory=TeslaCounterSetup) +component_descriptor = ComponentDescriptor( + configuration_factory=TeslaCounterSetup +) diff --git a/packages/modules/devices/tesla/tesla/device.py b/packages/modules/devices/tesla/tesla/device.py index 3a219cc1fe..590089c798 100644 --- a/packages/modules/devices/tesla/tesla/device.py +++ b/packages/modules/devices/tesla/tesla/device.py @@ -2,14 +2,23 @@ import logging import requests from requests import HTTPError -from typing import Iterable, Union +from typing import Iterable, Optional, Union from modules.common.abstract_device import DeviceDescriptor from modules.common.component_context import SingleComponentUpdateContext -from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater +from modules.common.configurable_device import ( + ComponentFactoryByType, + ConfigurableDevice, + MultiComponentUpdater, +) from modules.common.req import get_http_session from modules.devices.tesla.tesla.bat import TeslaBat -from modules.devices.tesla.tesla.config import Tesla, TeslaBatSetup, TeslaCounterSetup, TeslaInverterSetup +from modules.devices.tesla.tesla.config import ( + Tesla, + TeslaBatSetup, + TeslaCounterSetup, + TeslaInverterSetup, +) from modules.devices.tesla.tesla.counter import TeslaCounter from modules.devices.tesla.tesla.http_client import PowerwallHttpClient from modules.devices.tesla.tesla.inverter import TeslaInverter @@ -17,31 +26,47 @@ log = logging.getLogger(__name__) -def __update_components(client: PowerwallHttpClient, - components: Iterable[Union[TeslaBat, TeslaCounter, TeslaInverter]]): +def __update_components( + client: PowerwallHttpClient, + components: Iterable[Union[TeslaBat, TeslaCounter, TeslaInverter]], +): aggregate = client.get_json("/api/meters/aggregates") + for component in components: with SingleComponentUpdateContext(component.fault_state): component.update(client, aggregate) -def _authenticate(session: requests.Session, url: str, email: str, password: str): +def _authenticate( + session: requests.Session, + url: str, + email: str, + password: str, +): """ email is not yet required for login (2022/01), but we simulate the whole login page """ response = session.post( "https://" + url + "/api/login/Basic", - json={"username": "customer", "email": email, "password": password, "force_sm_off": False}, + json={ + "username": "customer", + "email": email, + "password": password, + "force_sm_off": False, + }, verify=False, - timeout=5 + timeout=5, ) - log.debug("Authentication endpoint send cookies %s", str(response.cookies)) - return {"AuthCookie": response.cookies["AuthCookie"], "UserRecord": response.cookies["UserRecord"]} + + return { + "AuthCookie": response.cookies["AuthCookie"], + "UserRecord": response.cookies["UserRecord"], + } def create_device(device_config: Tesla): - http_client = None - session = None + http_client: Optional[PowerwallHttpClient] = None + session: Optional[requests.Session] = None def create_bat_component(component_config: TeslaBatSetup): return TeslaBat(component_config) @@ -52,47 +77,103 @@ def create_counter_component(component_config: TeslaCounterSetup): def create_inverter_component(component_config: TeslaInverterSetup): return TeslaInverter(component_config) - def update_components(components: Iterable[Union[TeslaBat, TeslaCounter, TeslaInverter]]): + def update_components( + components: Iterable[Union[TeslaBat, TeslaCounter, TeslaInverter]], + ): log.debug("Beginning update") + address = device_config.configuration.ip_address email = device_config.configuration.email password = device_config.configuration.password if http_client.cookies is None: - http_client.cookies = _authenticate(session, address, email, password) + http_client.cookies = _authenticate( + session, + address, + email, + password, + ) __update_components(http_client, components) return + try: __update_components(http_client, components) return except HTTPError as e: - if e.response.status_code != 401 and e.response.status_code != 403: - raise e - log.warning("Login to powerwall with existing cookie failed. Will retry with new cookie...") - http_client.cookies = _authenticate(session, address, email, password) + status = getattr( + getattr(e, "response", None), + "status_code", + None, + ) + + if status not in (401, 403): + raise + + log.warning( + "Login to powerwall with existing cookie failed " + "(status=%s). Will retry with new cookie...", + status, + ) + + http_client.cookies = _authenticate( + session, + address, + email, + password, + ) __update_components(http_client, components) - log.debug("Update completed successfully") def initializer(): nonlocal http_client, session + + address = device_config.configuration.ip_address + email = device_config.configuration.email + password = device_config.configuration.password + session = get_http_session() - http_client = PowerwallHttpClient(device_config.configuration.ip_address, session, None) + + http_client = PowerwallHttpClient( + address, + session, + None, + ) + + http_client.cookies = _authenticate( + session, + address, + email, + password, + ) + + try: + status = http_client.get_json("/api/status") + log.debug("Firmware: %s", status["version"]) + except (KeyError, requests.RequestException, ValueError): + log.debug( + "Could not read Tesla Powerwall firmware version.", + exc_info=True, + ) return ConfigurableDevice( device_config=device_config, initializer=initializer, + error_handler=initializer, component_factory=ComponentFactoryByType( bat=create_bat_component, counter=create_counter_component, inverter=create_inverter_component, ), - component_updater=MultiComponentUpdater(update_components) + component_updater=MultiComponentUpdater(update_components), ) device_descriptor = DeviceDescriptor( configuration_factory=Tesla, - compatibility_device_note="Tesla hat die lokale API Anfang 2025 mittels Firmwareupdate abgeschaltet.\nFür " - "Neuanlagen muss aktuell auf unsere Zählerkits zurückgegriffen werden.", - special_icon="ℹ️" + compatibility_device_note=( + "Tesla hat die lokale API mittels Firmwareupdate eingeschränkt.\n" + "Je nach Modell und Firmware-Version kann die Verwendung unserer " + "Zähler-Kits erforderlich sein, falls die direkte Anbindung nicht " + "funktioniert." + ), + special_icon="ℹ️", ) diff --git a/packages/modules/devices/tesla/tesla/http_client.py b/packages/modules/devices/tesla/tesla/http_client.py index f02eb15094..0d45803119 100644 --- a/packages/modules/devices/tesla/tesla/http_client.py +++ b/packages/modules/devices/tesla/tesla/http_client.py @@ -8,5 +8,10 @@ def __init__(self, host: str, session: requests.Session, cookies): self.__session = session def get_json(self, relative_url: str): - url = self.__base_url + relative_url - return self.__session.get(url, cookies=self.cookies, verify=False, timeout=5).json() + response = self.__session.get( + self.__base_url + relative_url, + cookies=self.cookies, + verify=False, + timeout=5, + ) + return response.json() diff --git a/packages/modules/devices/tesla/tesla/tesla.php b/packages/modules/devices/tesla/tesla/tesla.php index ec396b638e..b428767d68 100644 --- a/packages/modules/devices/tesla/tesla/tesla.php +++ b/packages/modules/devices/tesla/tesla/tesla.php @@ -333,7 +333,7 @@ function teslaLogin () { ?>
Anmeldung erfolgreich!
- Die erhaltenen Token wurden gespeichert. Du kannst diese Seite jetzt schließen. + Die erhaltenen Token wurden gespeichert. Sie können diese Seite jetzt schließen.
- Gespeicherte Anmeldedaten wurden entfernt. Du kannst diese Seite jetzt schließen. + Gespeicherte Anmeldedaten wurden entfernt. Sie können diese Seite jetzt schließen.
- + \ No newline at end of file diff --git a/packages/modules/display_themes/colors/source/src/assets/js/processMessages.ts b/packages/modules/display_themes/colors/source/src/assets/js/processMessages.ts index 222cc1163b..cacc32ae61 100755 --- a/packages/modules/display_themes/colors/source/src/assets/js/processMessages.ts +++ b/packages/modules/display_themes/colors/source/src/assets/js/processMessages.ts @@ -29,7 +29,7 @@ const topicsToSubscribe = [ 'openWB/pv/get/#', 'openWB/chargepoint/#', 'openWB/vehicle/#', - 'openWB/general/chargemode_config/pv_charging/#', + 'openWB/general/chargemode_config/bat/#', 'openWB/optional/ep/#', 'openWB/system/#', 'openWB/LegacySmartHome/#', @@ -64,9 +64,7 @@ function processMqttMessage(topic: string, payload: Buffer) { processVehicleTemplateMessages(topic, message) } else if (topic.match(/^openwb\/vehicle\//i)) { processVehicleMessages(topic, message) - } else if ( - topic.match(/^openwb\/general\/chargemode_config\/pv_charging\//i) - ) { + } else if (topic.match(/^openwb\/general\/chargemode_config\/bat\//i)) { processPvConfigMessages(topic, message) } else if (topic.match(/^openwb\/graph\//i)) { processLiveGraphMessages(topic, message) @@ -196,7 +194,7 @@ function processPvConfigMessages(topic: string, message: string) { const elements = topic.split('/') if (elements.length > 0) { switch (elements[4]) { - case 'bat_mode': + case 'mode': globalData.updatePvBatteryPriority(JSON.parse(message)) break default: diff --git a/packages/modules/display_themes/colors/source/src/assets/js/sendMessages.ts b/packages/modules/display_themes/colors/source/src/assets/js/sendMessages.ts index dc6396f6a3..ab17203fb5 100755 --- a/packages/modules/display_themes/colors/source/src/assets/js/sendMessages.ts +++ b/packages/modules/display_themes/colors/source/src/assets/js/sendMessages.ts @@ -19,7 +19,7 @@ const topics: { [topic: string]: string } = { cpScheduledPlanActive: 'openWB/set/vehicle/template/charge_template/%/chargemode/scheduled_charging/plans/@/active', pvBatteryPriority: - 'openWB/set/general/chargemode_config/pv_charging/bat_mode', + 'openWB/set/general/chargemode_config/bat/mode', cpVehicle: 'openWB/set/chargepoint/%/config/ev', cpInstantChargeLimitMode: 'openWB/set/vehicle/template/charge_template/%/chargemode/instant_charging/limit/selected', diff --git a/packages/modules/display_themes/colors/web/assets/index-D-yaNlCX.js b/packages/modules/display_themes/colors/web/assets/index-BSxuYzjG.js similarity index 81% rename from packages/modules/display_themes/colors/web/assets/index-D-yaNlCX.js rename to packages/modules/display_themes/colors/web/assets/index-BSxuYzjG.js index f7a4925a16..11f2851870 100644 --- a/packages/modules/display_themes/colors/web/assets/index-D-yaNlCX.js +++ b/packages/modules/display_themes/colors/web/assets/index-BSxuYzjG.js @@ -7,8 +7,8 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho `+ve.prev}function he(ae,ve){var Ne=_e(ae),Le=[];if(Ne){Le.length=ae.length;for(var je=0;je1;){var _=y.pop(),m=_.obj[_.prop];if(r(m)){for(var w=[],S=0;S=u?E.slice(I,I+u):E,K=[],P=0;P=48&&U<=57||U>=65&&U<=90||U>=97&&U<=122||S===e.RFC1738&&(U===40||U===41)){K[K.length]=R.charAt(P);continue}if(U<128){K[K.length]=n[U];continue}if(U<2048){K[K.length]=n[192|U>>6]+n[128|U&63];continue}if(U<55296||U>=57344){K[K.length]=n[224|U>>12]+n[128|U>>6&63]+n[128|U&63];continue}P+=1,U=65536+((U&1023)<<10|R.charCodeAt(P)&1023),K[K.length]=n[240|U>>18]+n[128|U>>12&63]+n[128|U>>6&63]+n[128|U&63]}T+=K.join("")}return T},f=function(y){for(var _=[{obj:{o:y},prop:"o"}],m=[],w=0;w<_.length;++w)for(var S=_[w],E=S.obj[S.prop],T=Object.keys(E),I=0;I"u"&&(B=0)}if(typeof K=="function"?J=K(_,J):J instanceof Date?J=M(J):m==="comma"&&o(J)&&(J=t.maybeMap(J,function(O){return O instanceof Date?M(O):O})),J===null){if(E)return R&&!le?R(_,c.encoder,me,"key",D):_;J=""}if(f(J)||t.isBuffer(J)){if(R){var se=le?_:R(_,c.encoder,me,"key",D);return[Q(se)+"="+Q(R(J,c.encoder,me,"value",D))]}return[Q(_)+"="+Q(String(J))]}var _e=[];if(typeof J>"u")return _e;var X;if(m==="comma"&&o(J))le&&R&&(J=t.maybeMap(J,R)),X=[{value:J.length>0?J.join(",")||null:void 0}];else if(o(K))X=K;else{var re=Object.keys(J);X=P?re.sort(P):re}var ee=I?_.replace(/\./g,"%2E"):_,F=w&&o(J)&&J.length===1?ee+"[]":ee;if(S&&o(J)&&J.length===0)return F+"[]";for(var V=0;V"u"?b.encodeDotInKeys===!0?!0:c.allowDots:!!b.allowDots;return{addQueryPrefix:typeof b.addQueryPrefix=="boolean"?b.addQueryPrefix:c.addQueryPrefix,allowDots:E,allowEmptyArrays:typeof b.allowEmptyArrays=="boolean"?!!b.allowEmptyArrays:c.allowEmptyArrays,arrayFormat:S,charset:y,charsetSentinel:typeof b.charsetSentinel=="boolean"?b.charsetSentinel:c.charsetSentinel,commaRoundTrip:b.commaRoundTrip,delimiter:typeof b.delimiter>"u"?c.delimiter:b.delimiter,encode:typeof b.encode=="boolean"?b.encode:c.encode,encodeDotInKeys:typeof b.encodeDotInKeys=="boolean"?b.encodeDotInKeys:c.encodeDotInKeys,encoder:typeof b.encoder=="function"?b.encoder:c.encoder,encodeValuesOnly:typeof b.encodeValuesOnly=="boolean"?b.encodeValuesOnly:c.encodeValuesOnly,filter:w,format:_,formatter:m,serializeDate:typeof b.serializeDate=="function"?b.serializeDate:c.serializeDate,skipNulls:typeof b.skipNulls=="boolean"?b.skipNulls:c.skipNulls,sort:typeof b.sort=="function"?b.sort:null,strictNullHandling:typeof b.strictNullHandling=="boolean"?b.strictNullHandling:c.strictNullHandling}};return kl=function(b,y){var _=b,m=g(y),w,S;typeof m.filter=="function"?(S=m.filter,_=S("",_)):o(m.filter)&&(S=m.filter,w=S);var E=[];if(typeof _!="object"||_===null)return"";var T=i[m.arrayFormat],I=T==="comma"&&m.commaRoundTrip;w||(w=Object.keys(_)),m.sort&&w.sort(m.sort);for(var R=e(),K=0;K0?M+U:""},kl}function bP(){if(zd)return Ol;zd=!0;var e=oE(),t=Object.prototype.hasOwnProperty,r=Array.isArray,n={allowDots:!1,allowEmptyArrays:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decodeDotInKeys:!1,decoder:e.decode,delimiter:"&",depth:5,duplicates:"combine",ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictDepth:!1,strictNullHandling:!1},i=function(h){return h.replace(/&#(\d+);/g,function(d,g){return String.fromCharCode(parseInt(g,10))})},o=function(h,d){return h&&typeof h=="string"&&d.comma&&h.indexOf(",")>-1?h.split(","):h},a="utf8=%26%2310003%3B",s="utf8=%E2%9C%93",l=function(h,d){var g={__proto__:null},b=d.ignoreQueryPrefix?h.replace(/^\?/,""):h;b=b.replace(/%5B/gi,"[").replace(/%5D/gi,"]");var y=d.parameterLimit===1/0?void 0:d.parameterLimit,_=b.split(d.delimiter,y),m=-1,w,S=d.charset;if(d.charsetSentinel)for(w=0;w<_.length;++w)_[w].indexOf("utf8=")===0&&(_[w]===s?S="utf-8":_[w]===a&&(S="iso-8859-1"),m=w,w=_.length);for(w=0;w<_.length;++w)if(w!==m){var E=_[w],T=E.indexOf("]="),I=T===-1?E.indexOf("="):T+1,R,K;I===-1?(R=d.decoder(E,n.decoder,S,"key"),K=d.strictNullHandling?null:""):(R=d.decoder(E.slice(0,I),n.decoder,S,"key"),K=e.maybeMap(o(E.slice(I+1),d),function(U){return d.decoder(U,n.decoder,S,"value")})),K&&d.interpretNumericEntities&&S==="iso-8859-1"&&(K=i(K)),E.indexOf("[]=")>-1&&(K=r(K)?[K]:K);var P=t.call(g,R);P&&d.duplicates==="combine"?g[R]=e.combine(g[R],K):(!P||d.duplicates==="last")&&(g[R]=K)}return g},u=function(h,d,g,b){for(var y=b?d:o(d,g),_=h.length-1;_>=0;--_){var m,w=h[_];if(w==="[]"&&g.parseArrays)m=g.allowEmptyArrays&&(y===""||g.strictNullHandling&&y===null)?[]:[].concat(y);else{m=g.plainObjects?Object.create(null):{};var S=w.charAt(0)==="["&&w.charAt(w.length-1)==="]"?w.slice(1,-1):w,E=g.decodeDotInKeys?S.replace(/%2E/g,"."):S,T=parseInt(E,10);!g.parseArrays&&E===""?m={0:y}:!isNaN(T)&&w!==E&&String(T)===E&&T>=0&&g.parseArrays&&T<=g.arrayLimit?(m=[],m[T]=y):E!=="__proto__"&&(m[E]=y)}y=m}return y},c=function(h,d,g,b){if(h){var y=g.allowDots?h.replace(/\.([^.[]+)/g,"[$1]"):h,_=/(\[[^[\]]*])/,m=/(\[[^[\]]*])/g,w=g.depth>0&&_.exec(y),S=w?y.slice(0,w.index):y,E=[];if(S){if(!g.plainObjects&&t.call(Object.prototype,S)&&!g.allowPrototypes)return;E.push(S)}for(var T=0;g.depth>0&&(w=m.exec(y))!==null&&T"u"?n.charset:h.charset,g=typeof h.duplicates>"u"?n.duplicates:h.duplicates;if(g!=="combine"&&g!=="first"&&g!=="last")throw new TypeError("The duplicates option must be either combine, first, or last");var b=typeof h.allowDots>"u"?h.decodeDotInKeys===!0?!0:n.allowDots:!!h.allowDots;return{allowDots:b,allowEmptyArrays:typeof h.allowEmptyArrays=="boolean"?!!h.allowEmptyArrays:n.allowEmptyArrays,allowPrototypes:typeof h.allowPrototypes=="boolean"?h.allowPrototypes:n.allowPrototypes,allowSparse:typeof h.allowSparse=="boolean"?h.allowSparse:n.allowSparse,arrayLimit:typeof h.arrayLimit=="number"?h.arrayLimit:n.arrayLimit,charset:d,charsetSentinel:typeof h.charsetSentinel=="boolean"?h.charsetSentinel:n.charsetSentinel,comma:typeof h.comma=="boolean"?h.comma:n.comma,decodeDotInKeys:typeof h.decodeDotInKeys=="boolean"?h.decodeDotInKeys:n.decodeDotInKeys,decoder:typeof h.decoder=="function"?h.decoder:n.decoder,delimiter:typeof h.delimiter=="string"||e.isRegExp(h.delimiter)?h.delimiter:n.delimiter,depth:typeof h.depth=="number"||h.depth===!1?+h.depth:n.depth,duplicates:g,ignoreQueryPrefix:h.ignoreQueryPrefix===!0,interpretNumericEntities:typeof h.interpretNumericEntities=="boolean"?h.interpretNumericEntities:n.interpretNumericEntities,parameterLimit:typeof h.parameterLimit=="number"?h.parameterLimit:n.parameterLimit,parseArrays:h.parseArrays!==!1,plainObjects:typeof h.plainObjects=="boolean"?h.plainObjects:n.plainObjects,strictDepth:typeof h.strictDepth=="boolean"?!!h.strictDepth:n.strictDepth,strictNullHandling:typeof h.strictNullHandling=="boolean"?h.strictNullHandling:n.strictNullHandling}};return Ol=function(h,d){var g=f(d);if(h===""||h===null||typeof h>"u")return g.plainObjects?Object.create(null):{};for(var b=typeof h=="string"?l(h,g):h,y=g.plainObjects?Object.create(null):{},_=Object.keys(b),m=0;m<_.length;++m){var w=_[m],S=c(w,b[w],g,typeof h=="string");y=e.merge(y,S,g)}return g.allowSparse===!0?y:e.compact(y)},Ol}function _P(){if(Yd)return Ml;Yd=!0;var e=yP(),t=bP(),r=rg();return Ml={formats:r,parse:t,stringify:e},Ml}function vP(){if(Qd)return li;Qd=!0;var e=ai;function t(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}var r=/^([a-z0-9.+-]+:)/i,n=/:[0-9]*$/,i=/^(\/\/?(?!\/)[^?\s]*)(\?[^\s]*)?$/,o=["<",">",'"',"`"," ","\r",` `," "],a=["{","}","|","\\","^","`"].concat(o),s=["'"].concat(a),l=["%","/","?",";","#"].concat(s),u=["/","?","#"],c=255,f=/^[+a-z0-9A-Z_-]{0,63}$/,h=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,d={javascript:!0,"javascript:":!0},g={javascript:!0,"javascript:":!0},b={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},y=_P();function _(E,T,I){if(E&&typeof E=="object"&&E instanceof t)return E;var R=new t;return R.parse(E,T,I),R}t.prototype.parse=function(E,T,I){if(typeof E!="string")throw new TypeError("Parameter 'url' must be a string, not "+typeof E);var R=E.indexOf("?"),K=R!==-1&&R127?re+="x":re+=X[ee];if(!re.match(f)){var V=se.slice(0,J),q=se.slice(J+1),z=X.match(h);z&&(V.push(z[1]),q.unshift(z[2])),q.length&&(M="/"+q.join(".")+M),this.hostname=V.join(".");break}}}this.hostname.length>c?this.hostname="":this.hostname=this.hostname.toLowerCase(),G||(this.hostname=e.toASCII(this.hostname));var C=this.port?":"+this.port:"",k=this.hostname||"";this.host=k+C,this.href+=this.host,G&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),M[0]!=="/"&&(M="/"+M))}if(!d[le])for(var J=0,_e=s.length;J<_e;J++){var N=s[J];if(M.indexOf(N)!==-1){var O=encodeURIComponent(N);O===N&&(O=escape(N)),M=M.split(N).join(O)}}var $=M.indexOf("#");$!==-1&&(this.hash=M.substr($),M=M.slice(0,$));var j=M.indexOf("?");if(j!==-1?(this.search=M.substr(j),this.query=M.substr(j+1),T&&(this.query=y.parse(this.query)),M=M.slice(0,j)):T&&(this.search="",this.query={}),M&&(this.pathname=M),b[le]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var C=this.pathname||"",oe=this.search||"";this.path=C+oe}return this.href=this.format(),this};function m(E){return typeof E=="string"&&(E=_(E)),E instanceof t?E.format():t.prototype.format.call(E)}t.prototype.format=function(){var E=this.auth||"";E&&(E=encodeURIComponent(E),E=E.replace(/%3A/i,":"),E+="@");var T=this.protocol||"",I=this.pathname||"",R=this.hash||"",K=!1,P="";this.host?K=E+this.host:this.hostname&&(K=E+(this.hostname.indexOf(":")===-1?this.hostname:"["+this.hostname+"]"),this.port&&(K+=":"+this.port)),this.query&&typeof this.query=="object"&&Object.keys(this.query).length&&(P=y.stringify(this.query,{arrayFormat:"repeat",addQueryPrefix:!1}));var U=this.search||P&&"?"+P||"";return T&&T.substr(-1)!==":"&&(T+=":"),this.slashes||(!T||b[T])&&K!==!1?(K="//"+(K||""),I&&I.charAt(0)!=="/"&&(I="/"+I)):K||(K=""),R&&R.charAt(0)!=="#"&&(R="#"+R),U&&U.charAt(0)!=="?"&&(U="?"+U),I=I.replace(/[?#]/g,function(M){return encodeURIComponent(M)}),U=U.replace("#","%23"),T+K+I+U+R};function w(E,T){return _(E,!1,!0).resolve(T)}t.prototype.resolve=function(E){return this.resolveObject(_(E,!1,!0)).format()};function S(E,T){return E?_(E,!1,!0).resolveObject(T):T}return t.prototype.resolveObject=function(E){if(typeof E=="string"){var T=new t;T.parse(E,!1,!0),E=T}for(var I=new t,R=Object.keys(this),K=0;K0?I.host.split("@"):!1;re&&(I.auth=re.shift(),I.hostname=re.shift(),I.host=I.hostname)}return I.search=E.search,I.query=E.query,(I.pathname!==null||I.search!==null)&&(I.path=(I.pathname?I.pathname:"")+(I.search?I.search:"")),I.href=I.format(),I}if(!se.length)return I.pathname=null,I.search?I.path="/"+I.search:I.path=null,I.href=I.format(),I;for(var ee=se.slice(-1)[0],F=(I.host||E.host||se.length>1)&&(ee==="."||ee==="..")||ee==="",V=0,q=se.length;q>=0;q--)ee=se[q],ee==="."?se.splice(q,1):ee===".."?(se.splice(q,1),V++):V&&(se.splice(q,1),V--);if(!ie&&!G)for(;V--;V)se.unshift("..");ie&&se[0]!==""&&(!se[0]||se[0].charAt(0)!=="/")&&se.unshift(""),F&&se.join("/").substr(-1)!=="/"&&se.push("");var z=se[0]===""||se[0]&&se[0].charAt(0)==="/";if(X){I.hostname=z?"":se.length?se.shift():"",I.host=I.hostname;var re=I.host&&I.host.indexOf("@")>0?I.host.split("@"):!1;re&&(I.auth=re.shift(),I.hostname=re.shift(),I.host=I.hostname)}return ie=ie||I.host&&se.length,ie&&!z&&se.unshift(""),se.length>0?I.pathname=se.join("/"):(I.pathname=null,I.path=null),(I.pathname!==null||I.search!==null)&&(I.path=(I.pathname?I.pathname:"")+(I.search?I.search:"")),I.auth=E.auth||I.auth,I.slashes=I.slashes||E.slashes,I.href=I.format(),I},t.prototype.parseHost=function(){var E=this.host,T=n.exec(E);T&&(T=T[0],T!==":"&&(this.port=T.substr(1)),E=E.substr(0,E.length-T.length)),E&&(this.hostname=E)},li.parse=_,li.resolve=w,li.resolveObject=S,li.format=m,li.Url=t,li}function sE(e){if(typeof e=="string")e=new URL(e);else if(!(e instanceof URL))throw new Deno.errors.InvalidData("invalid argument path , must be a string or URL");if(e.protocol!=="file:")throw new Deno.errors.InvalidData("invalid url scheme");return tu?wP(e):EP(e)}function wP(e){let t=e.hostname,r=e.pathname;for(let n=0;nbE||i!==":")throw new Deno.errors.InvalidData("file url path must be absolute");return r.slice(1)}}function EP(e){if(e.hostname!=="")throw new Deno.errors.InvalidData("invalid file url hostname");let t=e.pathname;for(let r=0;r{Ae(),Ie(),Te(),FM(),rP(),pP(),nE(),lE=Object.freeze(Object.create(null)),xl={},Vd=!1,Al=typeof globalThis<"u"?globalThis:typeof self<"u"?self:Fo,Tl={},Hd=!1,Il={},qd=!1,Cl={},Gd=!1,kl={},Kd=!1,Ol={},zd=!1,Ml={},Yd=!1,li={},Qd=!1,qt=vP(),qt.parse,qt.resolve,qt.resolveObject,qt.format,qt.Url,Gy=typeof Deno<"u"?Deno.build.os==="windows"?"win32":Deno.build.os:void 0,qt.URL=typeof URL<"u"?URL:null,qt.pathToFileURL=aE,qt.fileURLToPath=sE,uE=qt.Url,cE=qt.format,fE=qt.resolve,hE=qt.resolveObject,dE=qt.parse,pE=qt.URL,gE=92,mE=47,yE=97,bE=122,tu=Gy==="win32",_E=/\//g,vE=/%/g,wE=/\\/g,EE=/\n/g,SE=/\r/g,xE=/\t/g}),xP=Oe((e,t)=>{Ae(),Ie(),Te(),t.exports=function(){throw new Error("ws does not work in the browser. Browser clients must use the native WebSocket object")}}),ng=Oe(e=>{Ae(),Ie(),Te(),Object.defineProperty(e,"__esModule",{value:!0}),e.BufferedDuplex=void 0,e.writev=n;var t=lo(),r=(Bt(),at(Lt));function n(o,a){let s=new Array(o.length);for(let l=0;l{!this.destroyed&&this.readable&&this.push(l)})}_read(o){this.proxy.read(o)}_write(o,a,s){this.isSocketOpen?this.writeToProxy(o,a,s):this.writeQueue.push({chunk:o,encoding:a,cb:s})}_final(o){this.writeQueue=[],this.proxy.end(o)}_destroy(o,a){this.writeQueue=[],this.proxy.destroy(),a(o)}socketReady(){this.emit("connect"),this.isSocketOpen=!0,this.processWriteQueue()}writeToProxy(o,a,s){this.proxy.write(o,a)===!1?this.proxy.once("drain",s):s()}processWriteQueue(){for(;this.writeQueue.length>0;){let{chunk:o,encoding:a,cb:s}=this.writeQueue.shift();this.writeToProxy(o,a,s)}}};e.BufferedDuplex=i}),Ua=Oe(e=>{Ae(),Ie(),Te();var t=e&&e.__importDefault||function(_){return _&&_.__esModule?_:{default:_}};Object.defineProperty(e,"__esModule",{value:!0}),e.streamBuilder=e.browserStreamBuilder=void 0;var r=(Bt(),at(Lt)),n=t(xP()),i=t(Wn()),o=lo(),a=t(zu()),s=ng(),l=(0,i.default)("mqttjs:ws"),u=["rejectUnauthorized","ca","cert","key","pfx","passphrase"];function c(_,m){let w=`${_.protocol}://${_.hostname}:${_.port}${_.path}`;return typeof _.transformWsUrl=="function"&&(w=_.transformWsUrl(w,_,m)),w}function f(_){let m=_;return _.port||(_.protocol==="wss"?m.port=443:m.port=80),_.path||(m.path="/"),_.wsOptions||(m.wsOptions={}),!a.default&&!_.forceNativeWebSocket&&_.protocol==="wss"&&u.forEach(w=>{Object.prototype.hasOwnProperty.call(_,w)&&!Object.prototype.hasOwnProperty.call(_.wsOptions,w)&&(m.wsOptions[w]=_[w])}),m}function h(_){let m=f(_);if(m.hostname||(m.hostname=m.host),!m.hostname){if(typeof document>"u")throw new Error("Could not determine host. Specify host manually.");let w=new URL(document.URL);m.hostname=w.hostname,m.port||(m.port=Number(w.port))}return m.objectMode===void 0&&(m.objectMode=!(m.binary===!0||m.binary===void 0)),m}function d(_,m,w){l("createWebSocket"),l(`protocol: ${w.protocolId} ${w.protocolVersion}`);let S=w.protocolId==="MQIsdp"&&w.protocolVersion===3?"mqttv3.1":"mqtt";l(`creating new Websocket for url: ${m} and protocol: ${S}`);let E;return w.createWebsocket?E=w.createWebsocket(m,[S],w):E=new n.default(m,[S],w.wsOptions),E}function g(_,m){let w=m.protocolId==="MQIsdp"&&m.protocolVersion===3?"mqttv3.1":"mqtt",S=c(m,_),E;return m.createWebsocket?E=m.createWebsocket(S,[w],m):E=new WebSocket(S,[w]),E.binaryType="arraybuffer",E}var b=(_,m)=>{l("streamBuilder");let w=f(m);w.hostname=w.hostname||w.host||"localhost";let S=c(w,_),E=d(_,S,w),T=n.default.createWebSocketStream(E,w.wsOptions);return T.url=S,E.on("close",()=>{T.destroy()}),T};e.streamBuilder=b;var y=(_,m)=>{l("browserStreamBuilder");let w,S=h(m).browserBufferSize||1024*512,E=m.browserBufferTimeout||1e3,T=!m.objectMode,I=g(_,m),R=P(m,le,me);m.objectMode||(R._writev=s.writev.bind(R)),R.on("close",()=>{I.close()});let K=typeof I.addEventListener<"u";I.readyState===I.OPEN?(w=R,w.socket=I):(w=new s.BufferedDuplex(m,R,I),K?I.addEventListener("open",U):I.onopen=U),K?(I.addEventListener("close",M),I.addEventListener("error",D),I.addEventListener("message",Q)):(I.onclose=M,I.onerror=D,I.onmessage=Q);function P(fe,J,de){let B=new o.Transform({objectMode:fe.objectMode});return B._write=J,B._flush=de,B}function U(){l("WebSocket onOpen"),w instanceof s.BufferedDuplex&&w.socketReady()}function M(fe){l("WebSocket onClose",fe),w.end(),w.destroy()}function D(fe){l("WebSocket onError",fe);let J=new Error("WebSocket error");J.event=fe,w.destroy(J)}async function Q(fe){if(!R||!R.readable||!R.writable)return;let{data:J}=fe;J instanceof ArrayBuffer?J=r.Buffer.from(J):J instanceof Blob?J=r.Buffer.from(await new Response(J).arrayBuffer()):J=r.Buffer.from(J,"utf8"),R.push(J)}function le(fe,J,de){if(I.bufferedAmount>S){setTimeout(le,E,fe,J,de);return}T&&typeof fe=="string"&&(fe=r.Buffer.from(fe,"utf8"));try{I.send(fe)}catch(B){return de(B)}de()}function me(fe){I.close(),fe()}return w};e.browserStreamBuilder=y}),ig={};os(ig,{Server:()=>pt,Socket:()=>pt,Stream:()=>pt,_createServerHandle:()=>pt,_normalizeArgs:()=>pt,_setSimultaneousAccepts:()=>pt,connect:()=>pt,createConnection:()=>pt,createServer:()=>pt,default:()=>AE,isIP:()=>pt,isIPv4:()=>pt,isIPv6:()=>pt});function pt(){throw new Error("Node.js net module is not supported by JSPM core outside of Node.js")}var AE,TE=pr(()=>{Ae(),Ie(),Te(),AE={_createServerHandle:pt,_normalizeArgs:pt,_setSimultaneousAccepts:pt,connect:pt,createConnection:pt,createServer:pt,isIP:pt,isIPv4:pt,isIPv6:pt,Server:pt,Socket:pt,Stream:pt}}),IE=Oe((e,t)=>{Ae(),Ie(),Te(),t.exports={}}),Ky=Oe(e=>{Ae(),Ie(),Te();var t=e&&e.__importDefault||function(s){return s&&s.__esModule?s:{default:s}};Object.defineProperty(e,"__esModule",{value:!0});var r=t((TE(),at(ig))),n=t(Wn()),i=t(IE()),o=(0,n.default)("mqttjs:tcp"),a=(s,l)=>{if(l.port=l.port||1883,l.hostname=l.hostname||l.host||"localhost",l.socksProxy)return(0,i.default)(l.hostname,l.port,l.socksProxy,{timeout:l.socksTimeout});let{port:u,path:c}=l,f=l.hostname;return o("port %d and host %s",u,f),r.default.createConnection({port:u,host:f,path:c})};e.default=a}),CE={};os(CE,{default:()=>kE});var kE,AP=pr(()=>{Ae(),Ie(),Te(),kE={}}),zy=Oe(e=>{Ae(),Ie(),Te();var t=e&&e.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(e,"__esModule",{value:!0});var r=(AP(),at(CE)),n=t((TE(),at(ig))),i=t(Wn()),o=t(IE()),a=(0,i.default)("mqttjs:tls");function s(u){let{host:c,port:f,socksProxy:h,...d}=u;if(h!==void 0){let g=(0,o.default)(c,f,h,{timeout:u.socksTimeout});return(0,r.connect)({...d,socket:g})}return(0,r.connect)(u)}var l=(u,c)=>{c.port=c.port||8883,c.host=c.hostname||c.host||"localhost",n.default.isIP(c.host)===0&&!c.servername&&(c.servername=c.host),c.rejectUnauthorized=c.rejectUnauthorized!==!1,delete c.path,a("port %d host %s rejectUnauthorized %b",c.port,c.host,c.rejectUnauthorized);let f=s(c);f.on("secureConnect",()=>{c.rejectUnauthorized&&!f.authorized?f.emit("error",new Error("TLS not authorized")):f.removeListener("error",h)});function h(d){c.rejectUnauthorized&&u.emit("error",d),f.end()}return f.on("error",h),f};e.default=l}),Yy=Oe(e=>{Ae(),Ie(),Te(),Object.defineProperty(e,"__esModule",{value:!0});var t=(Bt(),at(Lt)),r=lo(),n=ng(),i,o,a;function s(){let h=new r.Transform;return h._write=(d,g,b)=>{i.send({data:d.buffer,success(){b()},fail(y){b(new Error(y))}})},h._flush=d=>{i.close({success(){d()}})},h}function l(h){h.hostname||(h.hostname="localhost"),h.path||(h.path="/"),h.wsOptions||(h.wsOptions={})}function u(h,d){let g=h.protocol==="wxs"?"wss":"ws",b=`${g}://${h.hostname}${h.path}`;return h.port&&h.port!==80&&h.port!==443&&(b=`${g}://${h.hostname}:${h.port}${h.path}`),typeof h.transformWsUrl=="function"&&(b=h.transformWsUrl(b,h,d)),b}function c(){i.onOpen(()=>{a.socketReady()}),i.onMessage(h=>{let{data:d}=h;d instanceof ArrayBuffer?d=t.Buffer.from(d):d=t.Buffer.from(d,"utf8"),o.push(d)}),i.onClose(()=>{a.emit("close"),a.end(),a.destroy()}),i.onError(h=>{let d=new Error(h.errMsg);a.destroy(d)})}var f=(h,d)=>{if(d.hostname=d.hostname||d.host,!d.hostname)throw new Error("Could not determine host. Specify host manually.");let g=d.protocolId==="MQIsdp"&&d.protocolVersion===3?"mqttv3.1":"mqtt";l(d);let b=u(d,h);i=wx.connectSocket({url:b,protocols:[g]}),o=s(),a=new n.BufferedDuplex(d,o,i),a._destroy=(_,m)=>{i.close({success(){m&&m(_)}})};let y=a.destroy;return a.destroy=(_,m)=>(a.destroy=y,setTimeout(()=>{i.close({fail(){a._destroy(_,m)}})},0),a),c(),a};e.default=f}),Qy=Oe(e=>{Ae(),Ie(),Te(),Object.defineProperty(e,"__esModule",{value:!0});var t=(Bt(),at(Lt)),r=lo(),n=ng(),i,o,a,s=!1;function l(){let d=new r.Transform;return d._write=(g,b,y)=>{i.sendSocketMessage({data:g.buffer,success(){y()},fail(){y(new Error)}})},d._flush=g=>{i.closeSocket({success(){g()}})},d}function u(d){d.hostname||(d.hostname="localhost"),d.path||(d.path="/"),d.wsOptions||(d.wsOptions={})}function c(d,g){let b=d.protocol==="alis"?"wss":"ws",y=`${b}://${d.hostname}${d.path}`;return d.port&&d.port!==80&&d.port!==443&&(y=`${b}://${d.hostname}:${d.port}${d.path}`),typeof d.transformWsUrl=="function"&&(y=d.transformWsUrl(y,d,g)),y}function f(){s||(s=!0,i.onSocketOpen(()=>{a.socketReady()}),i.onSocketMessage(d=>{if(typeof d.data=="string"){let g=t.Buffer.from(d.data,"base64");o.push(g)}else{let g=new FileReader;g.addEventListener("load",()=>{if(g.result instanceof ArrayBuffer){o.push(t.Buffer.from(g.result));return}o.push(t.Buffer.from(g.result,"utf-8"))}),g.readAsArrayBuffer(d.data)}}),i.onSocketClose(()=>{a.end(),a.destroy()}),i.onSocketError(d=>{a.destroy(d)}))}var h=(d,g)=>{if(g.hostname=g.hostname||g.host,!g.hostname)throw new Error("Could not determine host. Specify host manually.");let b=g.protocolId==="MQIsdp"&&g.protocolVersion===3?"mqttv3.1":"mqtt";u(g);let y=c(g,d);return i=g.my,i.connectSocket({url:y,protocols:b}),o=l(),a=new n.BufferedDuplex(g,o,i),f(),a};e.default=h}),TP=Oe(e=>{Ae(),Ie(),Te();var t=e&&e.__importDefault||function(h){return h&&h.__esModule?h:{default:h}};Object.defineProperty(e,"__esModule",{value:!0}),e.connectAsync=f;var r=t(Wn()),n=t((SP(),at(iE))),i=t(ud()),o=t(zu());typeof ft?.nextTick!="function"&&(ft.nextTick=setImmediate);var a=(0,r.default)("mqttjs"),s=null;function l(){return typeof location<"u"?location.protocol==="https:"?"wss":"ws":typeof document<"u"&&new URL(document.URL).protocol==="https:"?"wss":"ws"}function u(h){let d;if(h.auth)if(d=h.auth.match(/^(.+):(.+)$/),d){let[,g,b]=d;h.username=g,h.password=b}else h.username=h.auth}function c(h,d){if(a("connecting to an MQTT broker..."),typeof h=="object"&&!d&&(d=h,h=""),d=d||{},h&&typeof h=="string"){let y=n.default.parse(h,!0),_={},m=!y.protocol&&!y.hostname&&y.path?.startsWith("/")&&(o.default||d.forceNativeWebSocket);if(y.port!=null&&(_.port=Number(y.port)),_.host=y.hostname,_.query=y.query,_.auth=y.auth,_.protocol=y.protocol,_.path=y.path,d={..._,...d},!d.protocol&&!m)throw new Error("Missing protocol");d.protocol=(d.protocol||l()).replace(/:$/,"")}if(d.unixSocket=d.unixSocket||d.protocol?.includes("+unix"),d.unixSocket?d.protocol=d.protocol.replace("+unix",""):!d.protocol?.startsWith("ws")&&!d.protocol?.startsWith("wx")&&delete d.path,u(d),d.query&&typeof d.query.clientId=="string"&&(d.clientId=d.query.clientId),o.default||d.unixSocket?d.socksProxy=void 0:d.socksProxy===void 0&&typeof ft<"u"&&(d.socksProxy=ft.env.MQTTJS_SOCKS_PROXY),d.cert&&d.key)if(d.protocol){if(["mqtts","wss","wxs","alis"].indexOf(d.protocol)===-1)switch(d.protocol){case"mqtt":d.protocol="mqtts";break;case"ws":d.protocol="wss";break;case"wx":d.protocol="wxs";break;case"ali":d.protocol="alis";break;default:throw new Error(`Unknown protocol for secure connection: "${d.protocol}"!`)}}else throw new Error("Missing secure protocol key");if(s||(s={},!o.default&&!d.forceNativeWebSocket?(s.ws=Ua().streamBuilder,s.wss=Ua().streamBuilder,s.mqtt=Ky().default,s.tcp=Ky().default,s.ssl=zy().default,s.tls=s.ssl,s.mqtts=zy().default):(s.ws=Ua().browserStreamBuilder,s.wss=Ua().browserStreamBuilder,s.wx=Yy().default,s.wxs=Yy().default,s.ali=Qy().default,s.alis=Qy().default)),!s[d.protocol]){let y=["mqtts","wss"].indexOf(d.protocol)!==-1;d.protocol=["mqtt","mqtts","ws","wss","wx","wxs","ali","alis"].filter((_,m)=>y&&m%2===0?!1:typeof s[_]=="function")[0]}if(d.clean===!1&&!d.clientId)throw new Error("Missing clientId for unclean clients");d.protocol&&(d.defaultProtocol=d.protocol);function g(y){return d.servers&&((!y._reconnectCount||y._reconnectCount===d.servers.length)&&(y._reconnectCount=0),d.host=d.servers[y._reconnectCount].host,d.port=d.servers[y._reconnectCount].port,d.protocol=d.servers[y._reconnectCount].protocol?d.servers[y._reconnectCount].protocol:d.defaultProtocol,d.hostname=d.host,y._reconnectCount++),a("calling streambuilder for",d.protocol),s[d.protocol](y,d)}let b=new i.default(g,d);return b.on("error",()=>{}),b}function f(h,d,g=!0){return new Promise((b,y)=>{let _=c(h,d),m={connect:S=>{w(),b(_)},end:()=>{w(),b(_)},error:S=>{w(),_.end(),y(S)}};g===!1&&(m.close=()=>{m.error(new Error("Couldn't connect to server"))});function w(){Object.keys(m).forEach(S=>{_.off(S,m[S])})}Object.keys(m).forEach(S=>{_.on(S,m[S])})})}e.default=c}),Jy=Oe(e=>{Ae(),Ie(),Te();var t=e&&e.__createBinding||(Object.create?(function(d,g,b,y){y===void 0&&(y=b);var _=Object.getOwnPropertyDescriptor(g,b);(!_||("get"in _?!g.__esModule:_.writable||_.configurable))&&(_={enumerable:!0,get:function(){return g[b]}}),Object.defineProperty(d,y,_)}):(function(d,g,b,y){y===void 0&&(y=b),d[y]=g[b]})),r=e&&e.__setModuleDefault||(Object.create?(function(d,g){Object.defineProperty(d,"default",{enumerable:!0,value:g})}):function(d,g){d.default=g}),n=e&&e.__importStar||(function(){var d=function(g){return d=Object.getOwnPropertyNames||function(b){var y=[];for(var _ in b)Object.prototype.hasOwnProperty.call(b,_)&&(y[y.length]=_);return y},d(g)};return function(g){if(g&&g.__esModule)return g;var b={};if(g!=null)for(var y=d(g),_=0;_{Ae(),Ie(),Te();var t=e&&e.__createBinding||(Object.create?(function(a,s,l,u){u===void 0&&(u=l);var c=Object.getOwnPropertyDescriptor(s,l);(!c||("get"in c?!s.__esModule:c.writable||c.configurable))&&(c={enumerable:!0,get:function(){return s[l]}}),Object.defineProperty(a,u,c)}):(function(a,s,l,u){u===void 0&&(u=l),a[u]=s[l]})),r=e&&e.__setModuleDefault||(Object.create?(function(a,s){Object.defineProperty(a,"default",{enumerable:!0,value:s})}):function(a,s){a.default=s}),n=e&&e.__importStar||(function(){var a=function(s){return a=Object.getOwnPropertyNames||function(l){var u=[];for(var c in l)Object.prototype.hasOwnProperty.call(l,c)&&(u[u.length]=c);return u},a(s)};return function(s){if(s&&s.__esModule)return s;var l={};if(s!=null)for(var u=a(s),c=0;c0)throw new Error("Invalid string. Length must be a multiple of 4");var b=d.indexOf("=");b===-1&&(b=g);var y=b===g?0:4-b%4;return[b,y]}function s(d){var g=a(d),b=g[0],y=g[1];return(b+y)*3/4-y}function l(d,g,b){return(g+b)*3/4-b}function u(d){var g,b=a(d),y=b[0],_=b[1],m=new r(l(d,y,_)),w=0,S=_>0?y-4:y,E;for(E=0;E>16&255,m[w++]=g>>8&255,m[w++]=g&255;return _===2&&(g=t[d.charCodeAt(E)]<<2|t[d.charCodeAt(E+1)]>>4,m[w++]=g&255),_===1&&(g=t[d.charCodeAt(E)]<<10|t[d.charCodeAt(E+1)]<<4|t[d.charCodeAt(E+2)]>>2,m[w++]=g>>8&255,m[w++]=g&255),m}function c(d){return e[d>>18&63]+e[d>>12&63]+e[d>>6&63]+e[d&63]}function f(d,g,b){for(var y,_=[],m=g;mS?S:w+m));return y===1?(g=d[b-1],_.push(e[g>>2]+e[g<<4&63]+"==")):y===2&&(g=(d[b-2]<<8)+d[b-1],_.push(e[g>>10]+e[g>>4&63]+e[g<<2&63]+"=")),_.join("")}return bs}var Fa={};var Zy;function OP(){return Zy||(Zy=1,Fa.read=function(e,t,r,n,i){var o,a,s=i*8-n-1,l=(1<>1,c=-7,f=r?i-1:0,h=r?-1:1,d=e[t+f];for(f+=h,o=d&(1<<-c)-1,d>>=-c,c+=s;c>0;o=o*256+e[t+f],f+=h,c-=8);for(a=o&(1<<-c)-1,o>>=-c,c+=n;c>0;a=a*256+e[t+f],f+=h,c-=8);if(o===0)o=1-u;else{if(o===l)return a?NaN:(d?-1:1)*(1/0);a=a+Math.pow(2,n),o=o-u}return(d?-1:1)*a*Math.pow(2,o-n)},Fa.write=function(e,t,r,n,i,o){var a,s,l,u=o*8-i-1,c=(1<>1,h=i===23?Math.pow(2,-24)-Math.pow(2,-77):0,d=n?0:o-1,g=n?1:-1,b=t<0||t===0&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=c):(a=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-a))<1&&(a--,l*=2),a+f>=1?t+=h/l:t+=h*Math.pow(2,1-f),t*l>=2&&(a++,l/=2),a+f>=c?(s=0,a=c):a+f>=1?(s=(t*l-1)*Math.pow(2,i),a=a+f):(s=t*Math.pow(2,f-1)*Math.pow(2,i),a=0));i>=8;e[r+d]=s&255,d+=g,s/=256,i-=8);for(a=a<0;e[r+d]=a&255,d+=g,a/=256,u-=8);e[r+d-g]|=b*128}),Fa}var eb;function xr(){return eb||(eb=1,(function(e){const t=kP(),r=OP(),n=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;e.Buffer=s,e.SlowBuffer=m,e.INSPECT_MAX_BYTES=50;const i=2147483647;e.kMaxLength=i,s.TYPED_ARRAY_SUPPORT=o(),!s.TYPED_ARRAY_SUPPORT&&typeof console<"u"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function o(){try{const v=new Uint8Array(1),p={foo:function(){return 42}};return Object.setPrototypeOf(p,Uint8Array.prototype),Object.setPrototypeOf(v,p),v.foo()===42}catch{return!1}}Object.defineProperty(s.prototype,"parent",{enumerable:!0,get:function(){if(s.isBuffer(this))return this.buffer}}),Object.defineProperty(s.prototype,"offset",{enumerable:!0,get:function(){if(s.isBuffer(this))return this.byteOffset}});function a(v){if(v>i)throw new RangeError('The value "'+v+'" is invalid for option "size"');const p=new Uint8Array(v);return Object.setPrototypeOf(p,s.prototype),p}function s(v,p,x){if(typeof v=="number"){if(typeof p=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return f(v)}return l(v,p,x)}s.poolSize=8192;function l(v,p,x){if(typeof v=="string")return h(v,p);if(ArrayBuffer.isView(v))return g(v);if(v==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof v);if(ue(v,ArrayBuffer)||v&&ue(v.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(ue(v,SharedArrayBuffer)||v&&ue(v.buffer,SharedArrayBuffer)))return b(v,p,x);if(typeof v=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');const L=v.valueOf&&v.valueOf();if(L!=null&&L!==v)return s.from(L,p,x);const Z=y(v);if(Z)return Z;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof v[Symbol.toPrimitive]=="function")return s.from(v[Symbol.toPrimitive]("string"),p,x);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof v)}s.from=function(v,p,x){return l(v,p,x)},Object.setPrototypeOf(s.prototype,Uint8Array.prototype),Object.setPrototypeOf(s,Uint8Array);function u(v){if(typeof v!="number")throw new TypeError('"size" argument must be of type number');if(v<0)throw new RangeError('The value "'+v+'" is invalid for option "size"')}function c(v,p,x){return u(v),v<=0?a(v):p!==void 0?typeof x=="string"?a(v).fill(p,x):a(v).fill(p):a(v)}s.alloc=function(v,p,x){return c(v,p,x)};function f(v){return u(v),a(v<0?0:_(v)|0)}s.allocUnsafe=function(v){return f(v)},s.allocUnsafeSlow=function(v){return f(v)};function h(v,p){if((typeof p!="string"||p==="")&&(p="utf8"),!s.isEncoding(p))throw new TypeError("Unknown encoding: "+p);const x=w(v,p)|0;let L=a(x);const Z=L.write(v,p);return Z!==x&&(L=L.slice(0,Z)),L}function d(v){const p=v.length<0?0:_(v.length)|0,x=a(p);for(let L=0;L=i)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i.toString(16)+" bytes");return v|0}function m(v){return+v!=v&&(v=0),s.alloc(+v)}s.isBuffer=function(p){return p!=null&&p._isBuffer===!0&&p!==s.prototype},s.compare=function(p,x){if(ue(p,Uint8Array)&&(p=s.from(p,p.offset,p.byteLength)),ue(x,Uint8Array)&&(x=s.from(x,x.offset,x.byteLength)),!s.isBuffer(p)||!s.isBuffer(x))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(p===x)return 0;let L=p.length,Z=x.length;for(let he=0,ae=Math.min(L,Z);heZ.length?(s.isBuffer(ae)||(ae=s.from(ae)),ae.copy(Z,he)):Uint8Array.prototype.set.call(Z,ae,he);else if(s.isBuffer(ae))ae.copy(Z,he);else throw new TypeError('"list" argument must be an Array of Buffers');he+=ae.length}return Z};function w(v,p){if(s.isBuffer(v))return v.length;if(ArrayBuffer.isView(v)||ue(v,ArrayBuffer))return v.byteLength;if(typeof v!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof v);const x=v.length,L=arguments.length>2&&arguments[2]===!0;if(!L&&x===0)return 0;let Z=!1;for(;;)switch(p){case"ascii":case"latin1":case"binary":return x;case"utf8":case"utf-8":return j(v).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x*2;case"hex":return x>>>1;case"base64":return ne(v).length;default:if(Z)return L?-1:j(v).length;p=(""+p).toLowerCase(),Z=!0}}s.byteLength=w;function S(v,p,x){let L=!1;if((p===void 0||p<0)&&(p=0),p>this.length||((x===void 0||x>this.length)&&(x=this.length),x<=0)||(x>>>=0,p>>>=0,x<=p))return"";for(v||(v="utf8");;)switch(v){case"hex":return de(this,p,x);case"utf8":case"utf-8":return Q(this,p,x);case"ascii":return fe(this,p,x);case"latin1":case"binary":return J(this,p,x);case"base64":return D(this,p,x);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return B(this,p,x);default:if(L)throw new TypeError("Unknown encoding: "+v);v=(v+"").toLowerCase(),L=!0}}s.prototype._isBuffer=!0;function E(v,p,x){const L=v[p];v[p]=v[x],v[x]=L}s.prototype.swap16=function(){const p=this.length;if(p%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let x=0;xx&&(p+=" ... "),""},n&&(s.prototype[n]=s.prototype.inspect),s.prototype.compare=function(p,x,L,Z,he){if(ue(p,Uint8Array)&&(p=s.from(p,p.offset,p.byteLength)),!s.isBuffer(p))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof p);if(x===void 0&&(x=0),L===void 0&&(L=p?p.length:0),Z===void 0&&(Z=0),he===void 0&&(he=this.length),x<0||L>p.length||Z<0||he>this.length)throw new RangeError("out of range index");if(Z>=he&&x>=L)return 0;if(Z>=he)return-1;if(x>=L)return 1;if(x>>>=0,L>>>=0,Z>>>=0,he>>>=0,this===p)return 0;let ae=he-Z,ve=L-x;const Ne=Math.min(ae,ve),Le=this.slice(Z,he),je=p.slice(x,L);for(let Fe=0;Fe2147483647?x=2147483647:x<-2147483648&&(x=-2147483648),x=+x,ge(x)&&(x=Z?0:v.length-1),x<0&&(x=v.length+x),x>=v.length){if(Z)return-1;x=v.length-1}else if(x<0)if(Z)x=0;else return-1;if(typeof p=="string"&&(p=s.from(p,L)),s.isBuffer(p))return p.length===0?-1:I(v,p,x,L,Z);if(typeof p=="number")return p=p&255,typeof Uint8Array.prototype.indexOf=="function"?Z?Uint8Array.prototype.indexOf.call(v,p,x):Uint8Array.prototype.lastIndexOf.call(v,p,x):I(v,[p],x,L,Z);throw new TypeError("val must be string, number or Buffer")}function I(v,p,x,L,Z){let he=1,ae=v.length,ve=p.length;if(L!==void 0&&(L=String(L).toLowerCase(),L==="ucs2"||L==="ucs-2"||L==="utf16le"||L==="utf-16le")){if(v.length<2||p.length<2)return-1;he=2,ae/=2,ve/=2,x/=2}function Ne(je,Fe){return he===1?je[Fe]:je.readUInt16BE(Fe*he)}let Le;if(Z){let je=-1;for(Le=x;Leae&&(x=ae-ve),Le=x;Le>=0;Le--){let je=!0;for(let Fe=0;FeZ&&(L=Z)):L=Z;const he=p.length;L>he/2&&(L=he/2);let ae;for(ae=0;ae>>0,isFinite(L)?(L=L>>>0,Z===void 0&&(Z="utf8")):(Z=L,L=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");const he=this.length-x;if((L===void 0||L>he)&&(L=he),p.length>0&&(L<0||x<0)||x>this.length)throw new RangeError("Attempt to write outside buffer bounds");Z||(Z="utf8");let ae=!1;for(;;)switch(Z){case"hex":return R(this,p,x,L);case"utf8":case"utf-8":return K(this,p,x,L);case"ascii":case"latin1":case"binary":return P(this,p,x,L);case"base64":return U(this,p,x,L);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return M(this,p,x,L);default:if(ae)throw new TypeError("Unknown encoding: "+Z);Z=(""+Z).toLowerCase(),ae=!0}},s.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function D(v,p,x){return p===0&&x===v.length?t.fromByteArray(v):t.fromByteArray(v.slice(p,x))}function Q(v,p,x){x=Math.min(v.length,x);const L=[];let Z=p;for(;Z239?4:he>223?3:he>191?2:1;if(Z+ve<=x){let Ne,Le,je,Fe;switch(ve){case 1:he<128&&(ae=he);break;case 2:Ne=v[Z+1],(Ne&192)===128&&(Fe=(he&31)<<6|Ne&63,Fe>127&&(ae=Fe));break;case 3:Ne=v[Z+1],Le=v[Z+2],(Ne&192)===128&&(Le&192)===128&&(Fe=(he&15)<<12|(Ne&63)<<6|Le&63,Fe>2047&&(Fe<55296||Fe>57343)&&(ae=Fe));break;case 4:Ne=v[Z+1],Le=v[Z+2],je=v[Z+3],(Ne&192)===128&&(Le&192)===128&&(je&192)===128&&(Fe=(he&15)<<18|(Ne&63)<<12|(Le&63)<<6|je&63,Fe>65535&&Fe<1114112&&(ae=Fe))}}ae===null?(ae=65533,ve=1):ae>65535&&(ae-=65536,L.push(ae>>>10&1023|55296),ae=56320|ae&1023),L.push(ae),Z+=ve}return me(L)}const le=4096;function me(v){const p=v.length;if(p<=le)return String.fromCharCode.apply(String,v);let x="",L=0;for(;LL)&&(x=L);let Z="";for(let he=p;heL&&(p=L),x<0?(x+=L,x<0&&(x=0)):x>L&&(x=L),xx)throw new RangeError("Trying to access beyond buffer length")}s.prototype.readUintLE=s.prototype.readUIntLE=function(p,x,L){p=p>>>0,x=x>>>0,L||ie(p,x,this.length);let Z=this[p],he=1,ae=0;for(;++ae>>0,x=x>>>0,L||ie(p,x,this.length);let Z=this[p+--x],he=1;for(;x>0&&(he*=256);)Z+=this[p+--x]*he;return Z},s.prototype.readUint8=s.prototype.readUInt8=function(p,x){return p=p>>>0,x||ie(p,1,this.length),this[p]},s.prototype.readUint16LE=s.prototype.readUInt16LE=function(p,x){return p=p>>>0,x||ie(p,2,this.length),this[p]|this[p+1]<<8},s.prototype.readUint16BE=s.prototype.readUInt16BE=function(p,x){return p=p>>>0,x||ie(p,2,this.length),this[p]<<8|this[p+1]},s.prototype.readUint32LE=s.prototype.readUInt32LE=function(p,x){return p=p>>>0,x||ie(p,4,this.length),(this[p]|this[p+1]<<8|this[p+2]<<16)+this[p+3]*16777216},s.prototype.readUint32BE=s.prototype.readUInt32BE=function(p,x){return p=p>>>0,x||ie(p,4,this.length),this[p]*16777216+(this[p+1]<<16|this[p+2]<<8|this[p+3])},s.prototype.readBigUInt64LE=ke(function(p){p=p>>>0,k(p,"offset");const x=this[p],L=this[p+7];(x===void 0||L===void 0)&&N(p,this.length-8);const Z=x+this[++p]*2**8+this[++p]*2**16+this[++p]*2**24,he=this[++p]+this[++p]*2**8+this[++p]*2**16+L*2**24;return BigInt(Z)+(BigInt(he)<>>0,k(p,"offset");const x=this[p],L=this[p+7];(x===void 0||L===void 0)&&N(p,this.length-8);const Z=x*2**24+this[++p]*2**16+this[++p]*2**8+this[++p],he=this[++p]*2**24+this[++p]*2**16+this[++p]*2**8+L;return(BigInt(Z)<>>0,x=x>>>0,L||ie(p,x,this.length);let Z=this[p],he=1,ae=0;for(;++ae=he&&(Z-=Math.pow(2,8*x)),Z},s.prototype.readIntBE=function(p,x,L){p=p>>>0,x=x>>>0,L||ie(p,x,this.length);let Z=x,he=1,ae=this[p+--Z];for(;Z>0&&(he*=256);)ae+=this[p+--Z]*he;return he*=128,ae>=he&&(ae-=Math.pow(2,8*x)),ae},s.prototype.readInt8=function(p,x){return p=p>>>0,x||ie(p,1,this.length),this[p]&128?(255-this[p]+1)*-1:this[p]},s.prototype.readInt16LE=function(p,x){p=p>>>0,x||ie(p,2,this.length);const L=this[p]|this[p+1]<<8;return L&32768?L|4294901760:L},s.prototype.readInt16BE=function(p,x){p=p>>>0,x||ie(p,2,this.length);const L=this[p+1]|this[p]<<8;return L&32768?L|4294901760:L},s.prototype.readInt32LE=function(p,x){return p=p>>>0,x||ie(p,4,this.length),this[p]|this[p+1]<<8|this[p+2]<<16|this[p+3]<<24},s.prototype.readInt32BE=function(p,x){return p=p>>>0,x||ie(p,4,this.length),this[p]<<24|this[p+1]<<16|this[p+2]<<8|this[p+3]},s.prototype.readBigInt64LE=ke(function(p){p=p>>>0,k(p,"offset");const x=this[p],L=this[p+7];(x===void 0||L===void 0)&&N(p,this.length-8);const Z=this[p+4]+this[p+5]*2**8+this[p+6]*2**16+(L<<24);return(BigInt(Z)<>>0,k(p,"offset");const x=this[p],L=this[p+7];(x===void 0||L===void 0)&&N(p,this.length-8);const Z=(x<<24)+this[++p]*2**16+this[++p]*2**8+this[++p];return(BigInt(Z)<>>0,x||ie(p,4,this.length),r.read(this,p,!0,23,4)},s.prototype.readFloatBE=function(p,x){return p=p>>>0,x||ie(p,4,this.length),r.read(this,p,!1,23,4)},s.prototype.readDoubleLE=function(p,x){return p=p>>>0,x||ie(p,8,this.length),r.read(this,p,!0,52,8)},s.prototype.readDoubleBE=function(p,x){return p=p>>>0,x||ie(p,8,this.length),r.read(this,p,!1,52,8)};function G(v,p,x,L,Z,he){if(!s.isBuffer(v))throw new TypeError('"buffer" argument must be a Buffer instance');if(p>Z||pv.length)throw new RangeError("Index out of range")}s.prototype.writeUintLE=s.prototype.writeUIntLE=function(p,x,L,Z){if(p=+p,x=x>>>0,L=L>>>0,!Z){const ve=Math.pow(2,8*L)-1;G(this,p,x,L,ve,0)}let he=1,ae=0;for(this[x]=p&255;++ae>>0,L=L>>>0,!Z){const ve=Math.pow(2,8*L)-1;G(this,p,x,L,ve,0)}let he=L-1,ae=1;for(this[x+he]=p&255;--he>=0&&(ae*=256);)this[x+he]=p/ae&255;return x+L},s.prototype.writeUint8=s.prototype.writeUInt8=function(p,x,L){return p=+p,x=x>>>0,L||G(this,p,x,1,255,0),this[x]=p&255,x+1},s.prototype.writeUint16LE=s.prototype.writeUInt16LE=function(p,x,L){return p=+p,x=x>>>0,L||G(this,p,x,2,65535,0),this[x]=p&255,this[x+1]=p>>>8,x+2},s.prototype.writeUint16BE=s.prototype.writeUInt16BE=function(p,x,L){return p=+p,x=x>>>0,L||G(this,p,x,2,65535,0),this[x]=p>>>8,this[x+1]=p&255,x+2},s.prototype.writeUint32LE=s.prototype.writeUInt32LE=function(p,x,L){return p=+p,x=x>>>0,L||G(this,p,x,4,4294967295,0),this[x+3]=p>>>24,this[x+2]=p>>>16,this[x+1]=p>>>8,this[x]=p&255,x+4},s.prototype.writeUint32BE=s.prototype.writeUInt32BE=function(p,x,L){return p=+p,x=x>>>0,L||G(this,p,x,4,4294967295,0),this[x]=p>>>24,this[x+1]=p>>>16,this[x+2]=p>>>8,this[x+3]=p&255,x+4};function se(v,p,x,L,Z){C(p,L,Z,v,x,7);let he=Number(p&BigInt(4294967295));v[x++]=he,he=he>>8,v[x++]=he,he=he>>8,v[x++]=he,he=he>>8,v[x++]=he;let ae=Number(p>>BigInt(32)&BigInt(4294967295));return v[x++]=ae,ae=ae>>8,v[x++]=ae,ae=ae>>8,v[x++]=ae,ae=ae>>8,v[x++]=ae,x}function _e(v,p,x,L,Z){C(p,L,Z,v,x,7);let he=Number(p&BigInt(4294967295));v[x+7]=he,he=he>>8,v[x+6]=he,he=he>>8,v[x+5]=he,he=he>>8,v[x+4]=he;let ae=Number(p>>BigInt(32)&BigInt(4294967295));return v[x+3]=ae,ae=ae>>8,v[x+2]=ae,ae=ae>>8,v[x+1]=ae,ae=ae>>8,v[x]=ae,x+8}s.prototype.writeBigUInt64LE=ke(function(p,x=0){return se(this,p,x,BigInt(0),BigInt("0xffffffffffffffff"))}),s.prototype.writeBigUInt64BE=ke(function(p,x=0){return _e(this,p,x,BigInt(0),BigInt("0xffffffffffffffff"))}),s.prototype.writeIntLE=function(p,x,L,Z){if(p=+p,x=x>>>0,!Z){const Ne=Math.pow(2,8*L-1);G(this,p,x,L,Ne-1,-Ne)}let he=0,ae=1,ve=0;for(this[x]=p&255;++he>0)-ve&255;return x+L},s.prototype.writeIntBE=function(p,x,L,Z){if(p=+p,x=x>>>0,!Z){const Ne=Math.pow(2,8*L-1);G(this,p,x,L,Ne-1,-Ne)}let he=L-1,ae=1,ve=0;for(this[x+he]=p&255;--he>=0&&(ae*=256);)p<0&&ve===0&&this[x+he+1]!==0&&(ve=1),this[x+he]=(p/ae>>0)-ve&255;return x+L},s.prototype.writeInt8=function(p,x,L){return p=+p,x=x>>>0,L||G(this,p,x,1,127,-128),p<0&&(p=255+p+1),this[x]=p&255,x+1},s.prototype.writeInt16LE=function(p,x,L){return p=+p,x=x>>>0,L||G(this,p,x,2,32767,-32768),this[x]=p&255,this[x+1]=p>>>8,x+2},s.prototype.writeInt16BE=function(p,x,L){return p=+p,x=x>>>0,L||G(this,p,x,2,32767,-32768),this[x]=p>>>8,this[x+1]=p&255,x+2},s.prototype.writeInt32LE=function(p,x,L){return p=+p,x=x>>>0,L||G(this,p,x,4,2147483647,-2147483648),this[x]=p&255,this[x+1]=p>>>8,this[x+2]=p>>>16,this[x+3]=p>>>24,x+4},s.prototype.writeInt32BE=function(p,x,L){return p=+p,x=x>>>0,L||G(this,p,x,4,2147483647,-2147483648),p<0&&(p=4294967295+p+1),this[x]=p>>>24,this[x+1]=p>>>16,this[x+2]=p>>>8,this[x+3]=p&255,x+4},s.prototype.writeBigInt64LE=ke(function(p,x=0){return se(this,p,x,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),s.prototype.writeBigInt64BE=ke(function(p,x=0){return _e(this,p,x,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function X(v,p,x,L,Z,he){if(x+L>v.length)throw new RangeError("Index out of range");if(x<0)throw new RangeError("Index out of range")}function re(v,p,x,L,Z){return p=+p,x=x>>>0,Z||X(v,p,x,4),r.write(v,p,x,L,23,4),x+4}s.prototype.writeFloatLE=function(p,x,L){return re(this,p,x,!0,L)},s.prototype.writeFloatBE=function(p,x,L){return re(this,p,x,!1,L)};function ee(v,p,x,L,Z){return p=+p,x=x>>>0,Z||X(v,p,x,8),r.write(v,p,x,L,52,8),x+8}s.prototype.writeDoubleLE=function(p,x,L){return ee(this,p,x,!0,L)},s.prototype.writeDoubleBE=function(p,x,L){return ee(this,p,x,!1,L)},s.prototype.copy=function(p,x,L,Z){if(!s.isBuffer(p))throw new TypeError("argument should be a Buffer");if(L||(L=0),!Z&&Z!==0&&(Z=this.length),x>=p.length&&(x=p.length),x||(x=0),Z>0&&Z=this.length)throw new RangeError("Index out of range");if(Z<0)throw new RangeError("sourceEnd out of bounds");Z>this.length&&(Z=this.length),p.length-x>>0,L=L===void 0?this.length:L>>>0,p||(p=0);let he;if(typeof p=="number")for(he=x;he2**32?Z=q(String(x)):typeof x=="bigint"&&(Z=String(x),(x>BigInt(2)**BigInt(32)||x<-(BigInt(2)**BigInt(32)))&&(Z=q(Z)),Z+="n"),L+=` It must be ${p}. Received ${Z}`,L},RangeError);function q(v){let p="",x=v.length;const L=v[0]==="-"?1:0;for(;x>=L+4;x-=3)p=`_${v.slice(x-3,x)}${p}`;return`${v.slice(0,x)}${p}`}function z(v,p,x){k(p,"offset"),(v[p]===void 0||v[p+x]===void 0)&&N(p,v.length-(x+1))}function C(v,p,x,L,Z,he){if(v>x||v= 0${ae} and < 2${ae} ** ${(he+1)*8}${ae}`:ve=`>= -(2${ae} ** ${(he+1)*8-1}${ae}) and < 2 ** ${(he+1)*8-1}${ae}`,new F.ERR_OUT_OF_RANGE("value",ve,v)}z(L,Z,he)}function k(v,p){if(typeof v!="number")throw new F.ERR_INVALID_ARG_TYPE(p,"number",v)}function N(v,p,x){throw Math.floor(v)!==v?(k(v,x),new F.ERR_OUT_OF_RANGE("offset","an integer",v)):p<0?new F.ERR_BUFFER_OUT_OF_BOUNDS:new F.ERR_OUT_OF_RANGE("offset",`>= 0 and <= ${p}`,v)}const O=/[^+/0-9A-Za-z-_]/g;function $(v){if(v=v.split("=")[0],v=v.trim().replace(O,""),v.length<2)return"";for(;v.length%4!==0;)v=v+"=";return v}function j(v,p){p=p||1/0;let x;const L=v.length;let Z=null;const he=[];for(let ae=0;ae55295&&x<57344){if(!Z){if(x>56319){(p-=3)>-1&&he.push(239,191,189);continue}else if(ae+1===L){(p-=3)>-1&&he.push(239,191,189);continue}Z=x;continue}if(x<56320){(p-=3)>-1&&he.push(239,191,189),Z=x;continue}x=(Z-55296<<10|x-56320)+65536}else Z&&(p-=3)>-1&&he.push(239,191,189);if(Z=null,x<128){if((p-=1)<0)break;he.push(x)}else if(x<2048){if((p-=2)<0)break;he.push(x>>6|192,x&63|128)}else if(x<65536){if((p-=3)<0)break;he.push(x>>12|224,x>>6&63|128,x&63|128)}else if(x<1114112){if((p-=4)<0)break;he.push(x>>18|240,x>>12&63|128,x>>6&63|128,x&63|128)}else throw new Error("Invalid code point")}return he}function oe(v){const p=[];for(let x=0;x>8,Z=x%256,he.push(Z),he.push(L);return he}function ne(v){return t.toByteArray($(v))}function H(v,p,x,L){let Z;for(Z=0;Z=p.length||Z>=v.length);++Z)p[Z+x]=v[Z];return Z}function ue(v,p){return v instanceof p||v!=null&&v.constructor!=null&&v.constructor.name!=null&&v.constructor.name===p.name}function ge(v){return v!==v}const be=(function(){const v="0123456789abcdef",p=new Array(256);for(let x=0;x<16;++x){const L=x*16;for(let Z=0;Z<16;++Z)p[L+Z]=v[x]+v[Z]}return p})();function ke(v){return typeof BigInt>"u"?A:v}function A(){throw new Error("BigInt not supported")}})(Wc)),Wc}var Vc,tb;function _t(){if(tb)return Vc;tb=1;class e extends Error{constructor(r){if(!Array.isArray(r))throw new TypeError(`Expected input to be an Array, got ${typeof r}`);let n="";for(let i=0;i=w+4;m-=3)_=`_${y.slice(m-3,m)}${_}`;return`${y.slice(0,m)}${_}`}function f(y,_,m){if(typeof _=="function")return u(_.length<=m.length,`Code: ${y}; The provided arguments length (${m.length}) does not match the required ones (${_.length}).`),_(...m);const w=(_.match(/%[dfijoOs]/g)||[]).length;return u(w===m.length,`Code: ${y}; The provided arguments length (${m.length}) does not match the required ones (${w}).`),m.length===0?_:e(_,...m)}function h(y,_,m){m||(m=Error);class w extends m{constructor(...E){super(f(y,_,E))}toString(){return`${this.name} [${y}]: ${this.message}`}}Object.defineProperties(w.prototype,{name:{value:m.name,writable:!0,enumerable:!1,configurable:!0},toString:{value(){return`${this.name} [${y}]: ${this.message}`},writable:!0,enumerable:!1,configurable:!0}}),w.prototype.code=y,w.prototype[i]=!0,l[y]=w}function d(y){const _=s+y.name;return Object.defineProperty(y,"name",{value:_}),y}function g(y,_){if(y&&_&&y!==_){if(Array.isArray(_.errors))return _.errors.push(y),_;const m=new n([_,y],_.message);return m.code=_.code,m}return y||_}class b extends Error{constructor(_="The operation was aborted",m=void 0){if(m!==void 0&&typeof m!="object")throw new l.ERR_INVALID_ARG_TYPE("options","Object",m);super(_,m),this.code="ABORT_ERR",this.name="AbortError"}}return h("ERR_ASSERTION","%s",Error),h("ERR_INVALID_ARG_TYPE",(y,_,m)=>{u(typeof y=="string","'name' must be a string"),Array.isArray(_)||(_=[_]);let w="The ";y.endsWith(" argument")?w+=`${y} `:w+=`"${y}" ${y.includes(".")?"property":"argument"} `,w+="must be ";const S=[],E=[],T=[];for(const R of _)u(typeof R=="string","All expected entries have to be of type string"),o.includes(R)?S.push(R.toLowerCase()):a.test(R)?E.push(R):(u(R!=="object",'The value "object" should be written as "Object"'),T.push(R));if(E.length>0){const R=S.indexOf("object");R!==-1&&(S.splice(S,R,1),E.push("Object"))}if(S.length>0){switch(S.length){case 1:w+=`of type ${S[0]}`;break;case 2:w+=`one of type ${S[0]} or ${S[1]}`;break;default:{const R=S.pop();w+=`one of type ${S.join(", ")}, or ${R}`}}(E.length>0||T.length>0)&&(w+=" or ")}if(E.length>0){switch(E.length){case 1:w+=`an instance of ${E[0]}`;break;case 2:w+=`an instance of ${E[0]} or ${E[1]}`;break;default:{const R=E.pop();w+=`an instance of ${E.join(", ")}, or ${R}`}}T.length>0&&(w+=" or ")}switch(T.length){case 0:break;case 1:T[0].toLowerCase()!==T[0]&&(w+="an "),w+=`${T[0]}`;break;case 2:w+=`one of ${T[0]} or ${T[1]}`;break;default:{const R=T.pop();w+=`one of ${T.join(", ")}, or ${R}`}}if(m==null)w+=`. Received ${m}`;else if(typeof m=="function"&&m.name)w+=`. Received function ${m.name}`;else if(typeof m=="object"){var I;if((I=m.constructor)!==null&&I!==void 0&&I.name)w+=`. Received an instance of ${m.constructor.name}`;else{const R=t(m,{depth:-1});w+=`. Received ${R}`}}else{let R=t(m,{colors:!1});R.length>25&&(R=`${R.slice(0,25)}...`),w+=`. Received type ${typeof m} (${R})`}return w},TypeError),h("ERR_INVALID_ARG_VALUE",(y,_,m="is invalid")=>{let w=t(_);return w.length>128&&(w=w.slice(0,128)+"..."),`The ${y.includes(".")?"property":"argument"} '${y}' ${m}. Received ${w}`},TypeError),h("ERR_INVALID_RETURN_VALUE",(y,_,m)=>{var w;const S=m!=null&&(w=m.constructor)!==null&&w!==void 0&&w.name?`instance of ${m.constructor.name}`:`type ${typeof m}`;return`Expected ${y} to be returned from the "${_}" function but got ${S}.`},TypeError),h("ERR_MISSING_ARGS",(...y)=>{u(y.length>0,"At least one arg needs to be specified");let _;const m=y.length;switch(y=(Array.isArray(y)?y:[y]).map(w=>`"${w}"`).join(" or "),m){case 1:_+=`The ${y[0]} argument`;break;case 2:_+=`The ${y[0]} and ${y[1]} arguments`;break;default:{const w=y.pop();_+=`The ${y.join(", ")}, and ${w} arguments`}break}return`${_} must be specified`},TypeError),h("ERR_OUT_OF_RANGE",(y,_,m)=>{u(_,'Missing "range" argument');let w;if(Number.isInteger(m)&&Math.abs(m)>2**32)w=c(String(m));else if(typeof m=="bigint"){w=String(m);const S=BigInt(2)**BigInt(32);(m>S||m<-S)&&(w=c(w)),w+="n"}else w=t(m);return`The value of "${y}" is out of range. It must be ${_}. Received ${w}`},RangeError),h("ERR_MULTIPLE_CALLBACK","Callback called multiple times",Error),h("ERR_METHOD_NOT_IMPLEMENTED","The %s method is not implemented",Error),h("ERR_STREAM_ALREADY_FINISHED","Cannot call %s after a stream was finished",Error),h("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable",Error),h("ERR_STREAM_DESTROYED","Cannot call %s after a stream was destroyed",Error),h("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),h("ERR_STREAM_PREMATURE_CLOSE","Premature close",Error),h("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF",Error),h("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event",Error),h("ERR_STREAM_WRITE_AFTER_END","write after end",Error),h("ERR_UNKNOWN_ENCODING","Unknown encoding: %s",TypeError),Gc={AbortError:b,aggregateTwoErrors:d(g),hideStackFrames:d,codes:l},Gc}var _s={exports:{}},ib;function ra(){if(ib)return _s.exports;ib=1;const{AbortController:e,AbortSignal:t}=typeof self<"u"?self:typeof window<"u"?window:void 0;return _s.exports=e,_s.exports.AbortSignal=t,_s.exports.default=e,_s.exports}var ja={exports:{}},ob;function us(){if(ob)return ja.exports;ob=1;var e=typeof Reflect=="object"?Reflect:null,t=e&&typeof e.apply=="function"?e.apply:function(E,T,I){return Function.prototype.apply.call(E,T,I)},r;e&&typeof e.ownKeys=="function"?r=e.ownKeys:Object.getOwnPropertySymbols?r=function(E){return Object.getOwnPropertyNames(E).concat(Object.getOwnPropertySymbols(E))}:r=function(E){return Object.getOwnPropertyNames(E)};function n(S){console&&console.warn&&console.warn(S)}var i=Number.isNaN||function(E){return E!==E};function o(){o.init.call(this)}ja.exports=o,ja.exports.once=_,o.EventEmitter=o,o.prototype._events=void 0,o.prototype._eventsCount=0,o.prototype._maxListeners=void 0;var a=10;function s(S){if(typeof S!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof S)}Object.defineProperty(o,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(S){if(typeof S!="number"||S<0||i(S))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+S+".");a=S}}),o.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},o.prototype.setMaxListeners=function(E){if(typeof E!="number"||E<0||i(E))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+E+".");return this._maxListeners=E,this};function l(S){return S._maxListeners===void 0?o.defaultMaxListeners:S._maxListeners}o.prototype.getMaxListeners=function(){return l(this)},o.prototype.emit=function(E){for(var T=[],I=1;I0&&(P=T[0]),P instanceof Error)throw P;var U=new Error("Unhandled error."+(P?" ("+P.message+")":""));throw U.context=P,U}var M=K[E];if(M===void 0)return!1;if(typeof M=="function")t(M,this,T);else for(var D=M.length,Q=g(M,D),I=0;I0&&P.length>R&&!P.warned){P.warned=!0;var U=new Error("Possible EventEmitter memory leak detected. "+P.length+" "+String(E)+" listeners added. Use emitter.setMaxListeners() to increase limit");U.name="MaxListenersExceededWarning",U.emitter=S,U.type=E,U.count=P.length,n(U)}return S}o.prototype.addListener=function(E,T){return u(this,E,T,!1)},o.prototype.on=o.prototype.addListener,o.prototype.prependListener=function(E,T){return u(this,E,T,!0)};function c(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function f(S,E,T){var I={fired:!1,wrapFn:void 0,target:S,type:E,listener:T},R=c.bind(I);return R.listener=T,I.wrapFn=R,R}o.prototype.once=function(E,T){return s(T),this.on(E,f(this,E,T)),this},o.prototype.prependOnceListener=function(E,T){return s(T),this.prependListener(E,f(this,E,T)),this},o.prototype.removeListener=function(E,T){var I,R,K,P,U;if(s(T),R=this._events,R===void 0)return this;if(I=R[E],I===void 0)return this;if(I===T||I.listener===T)--this._eventsCount===0?this._events=Object.create(null):(delete R[E],R.removeListener&&this.emit("removeListener",E,I.listener||T));else if(typeof I!="function"){for(K=-1,P=I.length-1;P>=0;P--)if(I[P]===T||I[P].listener===T){U=I[P].listener,K=P;break}if(K<0)return this;K===0?I.shift():b(I,K),I.length===1&&(R[E]=I[0]),R.removeListener!==void 0&&this.emit("removeListener",E,U||T)}return this},o.prototype.off=o.prototype.removeListener,o.prototype.removeAllListeners=function(E){var T,I,R;if(I=this._events,I===void 0)return this;if(I.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):I[E]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete I[E]),this;if(arguments.length===0){var K=Object.keys(I),P;for(R=0;R=0;R--)this.removeListener(E,T[R]);return this};function h(S,E,T){var I=S._events;if(I===void 0)return[];var R=I[E];return R===void 0?[]:typeof R=="function"?T?[R.listener||R]:[R]:T?y(R):g(R,R.length)}o.prototype.listeners=function(E){return h(this,E,!0)},o.prototype.rawListeners=function(E){return h(this,E,!1)},o.listenerCount=function(S,E){return typeof S.listenerCount=="function"?S.listenerCount(E):d.call(S,E)},o.prototype.listenerCount=d;function d(S){var E=this._events;if(E!==void 0){var T=E[S];if(typeof T=="function")return 1;if(T!==void 0)return T.length}return 0}o.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]};function g(S,E){for(var T=new Array(E),I=0;I{if(b!==void 0&&(b===null||typeof b!="object"||!("aborted"in b)))throw new i(y,"AbortSignal",b)},g=(b,y)=>{if(typeof b!="function")throw new i(y,"Function",b)};e.exports={AggregateError:a,kEmptyObject:Object.freeze({}),once(b){let y=!1;return function(..._){y||(y=!0,b.apply(this,_))}},createDeferredPromise:function(){let b,y;return{promise:new Promise((m,w)=>{b=m,y=w}),resolve:b,reject:y}},promisify(b){return new Promise((y,_)=>{b((m,...w)=>m?_(m):y(...w))})},debuglog(){return function(){}},format:r,inspect:n,types:{isAsyncFunction(b){return b instanceof c},isArrayBufferView(b){return ArrayBuffer.isView(b)}},isBlob:h,deprecate(b,y){return b},addAbortListener:us().addAbortListener||function(y,_){if(y===void 0)throw new i("signal","AbortSignal",y);d(y,"signal"),g(_,"listener");let m;return y.aborted?queueMicrotask(()=>_()):(y.addEventListener("abort",_,{__proto__:null,once:!0,[o]:!0}),m=()=>{y.removeEventListener("abort",_)}),{__proto__:null,[s](){var w;(w=m)===null||w===void 0||w()}}},AbortSignalAny:l.any||function(y){if(y.length===1)return y[0];const _=new u,m=()=>_.abort();return y.forEach(w=>{d(w,"signals"),w.addEventListener("abort",m,{once:!0})}),_.signal.addEventListener("abort",()=>{y.forEach(w=>w.removeEventListener("abort",m))},{once:!0}),_.signal}},e.exports.promisify.custom=Symbol.for("nodejs.util.promisify.custom")})(Hc)),Hc.exports}var Wa={},Kc,ab;function Ea(){if(ab)return Kc;ab=1;const{ArrayIsArray:e,ArrayPrototypeIncludes:t,ArrayPrototypeJoin:r,ArrayPrototypeMap:n,NumberIsInteger:i,NumberIsNaN:o,NumberMAX_SAFE_INTEGER:a,NumberMIN_SAFE_INTEGER:s,NumberParseInt:l,ObjectPrototypeHasOwnProperty:u,RegExpPrototypeExec:c,String:f,StringPrototypeToUpperCase:h,StringPrototypeTrim:d}=_t(),{hideStackFrames:g,codes:{ERR_SOCKET_BAD_PORT:b,ERR_INVALID_ARG_TYPE:y,ERR_INVALID_ARG_VALUE:_,ERR_OUT_OF_RANGE:m,ERR_UNKNOWN_SIGNAL:w}}=nr(),{normalizeEncoding:S}=dr(),{isAsyncFunction:E,isArrayBufferView:T}=dr().types,I={};function R(W){return W===(W|0)}function K(W){return W===W>>>0}const P=/^[0-7]+$/,U="must be a 32-bit unsigned integer or an octal string";function M(W,ne,H){if(typeof W>"u"&&(W=H),typeof W=="string"){if(c(P,W)===null)throw new _(ne,W,U);W=l(W,8)}return le(W,ne),W}const D=g((W,ne,H=s,ue=a)=>{if(typeof W!="number")throw new y(ne,"number",W);if(!i(W))throw new m(ne,"an integer",W);if(Wue)throw new m(ne,`>= ${H} && <= ${ue}`,W)}),Q=g((W,ne,H=-2147483648,ue=2147483647)=>{if(typeof W!="number")throw new y(ne,"number",W);if(!i(W))throw new m(ne,"an integer",W);if(Wue)throw new m(ne,`>= ${H} && <= ${ue}`,W)}),le=g((W,ne,H=!1)=>{if(typeof W!="number")throw new y(ne,"number",W);if(!i(W))throw new m(ne,"an integer",W);const ue=H?1:0,ge=4294967295;if(Wge)throw new m(ne,`>= ${ue} && <= ${ge}`,W)});function me(W,ne){if(typeof W!="string")throw new y(ne,"string",W)}function fe(W,ne,H=void 0,ue){if(typeof W!="number")throw new y(ne,"number",W);if(H!=null&&Wue||(H!=null||ue!=null)&&o(W))throw new m(ne,`${H!=null?`>= ${H}`:""}${H!=null&&ue!=null?" && ":""}${ue!=null?`<= ${ue}`:""}`,W)}const J=g((W,ne,H)=>{if(!t(H,W)){const ge="must be one of: "+r(n(H,be=>typeof be=="string"?`'${be}'`:f(be)),", ");throw new _(ne,W,ge)}});function de(W,ne){if(typeof W!="boolean")throw new y(ne,"boolean",W)}function B(W,ne,H){return W==null||!u(W,ne)?H:W[ne]}const ie=g((W,ne,H=null)=>{const ue=B(H,"allowArray",!1),ge=B(H,"allowFunction",!1);if(!B(H,"nullable",!1)&&W===null||!ue&&e(W)||typeof W!="object"&&(!ge||typeof W!="function"))throw new y(ne,"Object",W)}),G=g((W,ne)=>{if(W!=null&&typeof W!="object"&&typeof W!="function")throw new y(ne,"a dictionary",W)}),se=g((W,ne,H=0)=>{if(!e(W))throw new y(ne,"Array",W);if(W.length{if(!T(W))throw new y(ne,["Buffer","TypedArray","DataView"],W)});function V(W,ne){const H=S(ne),ue=W.length;if(H==="hex"&&ue%2!==0)throw new _("encoding",ne,`is invalid for data of length ${ue}`)}function q(W,ne="Port",H=!0){if(typeof W!="number"&&typeof W!="string"||typeof W=="string"&&d(W).length===0||+W!==+W>>>0||W>65535||W===0&&!H)throw new b(ne,W,H);return W|0}const z=g((W,ne)=>{if(W!==void 0&&(W===null||typeof W!="object"||!("aborted"in W)))throw new y(ne,"AbortSignal",W)}),C=g((W,ne)=>{if(typeof W!="function")throw new y(ne,"Function",W)}),k=g((W,ne)=>{if(typeof W!="function"||E(W))throw new y(ne,"Function",W)}),N=g((W,ne)=>{if(W!==void 0)throw new y(ne,"undefined",W)});function O(W,ne,H){if(!t(H,W))throw new y(ne,`('${r(H,"|")}')`,W)}const $=/^(?:<[^>]*>)(?:\s*;\s*[^;"\s]+(?:=(")?[^;"\s]*\1)?)*$/;function j(W,ne){if(typeof W>"u"||!c($,W))throw new _(ne,W,'must be an array or string of format "; rel=preload; as=style"')}function oe(W){if(typeof W=="string")return j(W,"hints"),W;if(e(W)){const ne=W.length;let H="";if(ne===0)return H;for(let ue=0;ue; rel=preload; as=style"')}return Kc={isInt32:R,isUint32:K,parseFileMode:M,validateArray:se,validateStringArray:_e,validateBooleanArray:X,validateAbortSignalArray:re,validateBoolean:de,validateBuffer:F,validateDictionary:G,validateEncoding:V,validateFunction:C,validateInt32:Q,validateInteger:D,validateNumber:fe,validateObject:ie,validateOneOf:J,validatePlainFunction:k,validatePort:q,validateSignalName:ee,validateString:me,validateUint32:le,validateUndefined:N,validateUnion:O,validateAbortSignal:z,validateLinkHeaderValue:oe},Kc}var Va={exports:{}},zc={exports:{}},lb;function uo(){if(lb)return zc.exports;lb=1;var e=zc.exports={},t,r;function n(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}(function(){try{typeof setTimeout=="function"?t=setTimeout:t=n}catch{t=n}try{typeof clearTimeout=="function"?r=clearTimeout:r=i}catch{r=i}})();function o(b){if(t===setTimeout)return setTimeout(b,0);if((t===n||!t)&&setTimeout)return t=setTimeout,setTimeout(b,0);try{return t(b,0)}catch{try{return t.call(null,b,0)}catch{return t.call(this,b,0)}}}function a(b){if(r===clearTimeout)return clearTimeout(b);if((r===i||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(b);try{return r(b)}catch{try{return r.call(null,b)}catch{return r.call(this,b)}}}var s=[],l=!1,u,c=-1;function f(){!l||!u||(l=!1,u.length?s=u.concat(s):c=-1,s.length&&h())}function h(){if(!l){var b=o(f);l=!0;for(var y=s.length;y;){for(u=s,s=[];++c1)for(var _=1;_{};function le(J,de,B){var ie,G;if(arguments.length===2?(B=de,de=o):de==null?de=o:u(de,"options"),l(B,"callback"),s(de.signal,"options.signal"),B=a(B),_(J)||T(J))return me(J,de,B);if(!K(J))throw new n("stream",["ReadableStream","WritableStream","Stream"],J);const se=(ie=de.readable)!==null&&ie!==void 0?ie:y(J),_e=(G=de.writable)!==null&&G!==void 0?G:E(J),X=J._writableState,re=J._readableState,ee=()=>{J.writable||q()};let F=P(J)&&y(J)===se&&E(J)===_e,V=I(J,!1);const q=()=>{V=!0,J.destroyed&&(F=!1),!(F&&(!J.readable||se))&&(!se||z)&&B.call(J)};let z=m(J,!1);const C=()=>{z=!0,J.destroyed&&(F=!1),!(F&&(!J.writable||_e))&&(!_e||V)&&B.call(J)},k=W=>{B.call(J,W)};let N=g(J);const O=()=>{N=!0;const W=R(J)||w(J);if(W&&typeof W!="boolean")return B.call(J,W);if(se&&!z&&y(J,!0)&&!m(J,!1))return B.call(J,new i);if(_e&&!V&&!I(J,!1))return B.call(J,new i);B.call(J)},$=()=>{N=!0;const W=R(J)||w(J);if(W&&typeof W!="boolean")return B.call(J,W);B.call(J)},j=()=>{J.req.on("finish",q)};D(J)?(J.on("complete",q),F||J.on("abort",O),J.req?j():J.on("request",j)):_e&&!X&&(J.on("end",ee),J.on("close",ee)),!F&&typeof J.aborted=="boolean"&&J.on("aborted",O),J.on("end",C),J.on("finish",q),de.error!==!1&&J.on("error",k),J.on("close",O),N?e.nextTick(O):X!=null&&X.errorEmitted||re!=null&&re.errorEmitted?F||e.nextTick($):(!se&&(!F||b(J))&&(V||S(J)===!1)||!_e&&(!F||S(J))&&(z||b(J)===!1)||re&&J.req&&J.aborted)&&e.nextTick($);const oe=()=>{B=Q,J.removeListener("aborted",O),J.removeListener("complete",q),J.removeListener("abort",O),J.removeListener("request",j),J.req&&J.req.removeListener("finish",q),J.removeListener("end",ee),J.removeListener("close",ee),J.removeListener("finish",q),J.removeListener("end",C),J.removeListener("error",k),J.removeListener("close",O)};if(de.signal&&!N){const W=()=>{const ne=B;oe(),ne.call(J,new t(void 0,{cause:de.signal.reason}))};if(de.signal.aborted)e.nextTick(W);else{M=M||dr().addAbortListener;const ne=M(de.signal,W),H=B;B=a((...ue)=>{ne[d](),H.apply(J,ue)})}}return oe}function me(J,de,B){let ie=!1,G=Q;if(de.signal)if(G=()=>{ie=!0,B.call(J,new t(void 0,{cause:de.signal.reason}))},de.signal.aborted)e.nextTick(G);else{M=M||dr().addAbortListener;const _e=M(de.signal,G),X=B;B=a((...re)=>{_e[d](),X.apply(J,re)})}const se=(..._e)=>{ie||e.nextTick(()=>B.apply(J,_e))};return h(J[U].promise,se,se),Q}function fe(J,de){var B;let ie=!1;return de===null&&(de=o),(B=de)!==null&&B!==void 0&&B.cleanup&&(c(de.cleanup,"cleanup"),ie=de.cleanup),new f((G,se)=>{const _e=le(J,de,X=>{ie&&_e(),X?se(X):G()})})}return Va.exports=le,Va.exports.finished=fe,Va.exports}var Qc,fb;function cs(){if(fb)return Qc;fb=1;const e=uo(),{aggregateTwoErrors:t,codes:{ERR_MULTIPLE_CALLBACK:r},AbortError:n}=nr(),{Symbol:i}=_t(),{kIsDestroyed:o,isDestroyed:a,isFinished:s,isServerRequest:l}=Xn(),u=i("kDestroy"),c=i("kConstruct");function f(P,U,M){P&&(P.stack,U&&!U.errored&&(U.errored=P),M&&!M.errored&&(M.errored=P))}function h(P,U){const M=this._readableState,D=this._writableState,Q=D||M;return D!=null&&D.destroyed||M!=null&&M.destroyed?(typeof U=="function"&&U(),this):(f(P,D,M),D&&(D.destroyed=!0),M&&(M.destroyed=!0),Q.constructed?d(this,P,U):this.once(u,function(le){d(this,t(le,P),U)}),this)}function d(P,U,M){let D=!1;function Q(le){if(D)return;D=!0;const me=P._readableState,fe=P._writableState;f(le,fe,me),fe&&(fe.closed=!0),me&&(me.closed=!0),typeof M=="function"&&M(le),le?e.nextTick(g,P,le):e.nextTick(b,P)}try{P._destroy(U||null,Q)}catch(le){Q(le)}}function g(P,U){y(P,U),b(P)}function b(P){const U=P._readableState,M=P._writableState;M&&(M.closeEmitted=!0),U&&(U.closeEmitted=!0),(M!=null&&M.emitClose||U!=null&&U.emitClose)&&P.emit("close")}function y(P,U){const M=P._readableState,D=P._writableState;D!=null&&D.errorEmitted||M!=null&&M.errorEmitted||(D&&(D.errorEmitted=!0),M&&(M.errorEmitted=!0),P.emit("error",U))}function _(){const P=this._readableState,U=this._writableState;P&&(P.constructed=!0,P.closed=!1,P.closeEmitted=!1,P.destroyed=!1,P.errored=null,P.errorEmitted=!1,P.reading=!1,P.ended=P.readable===!1,P.endEmitted=P.readable===!1),U&&(U.constructed=!0,U.destroyed=!1,U.closed=!1,U.closeEmitted=!1,U.errored=null,U.errorEmitted=!1,U.finalCalled=!1,U.prefinished=!1,U.ended=U.writable===!1,U.ending=U.writable===!1,U.finished=U.writable===!1)}function m(P,U,M){const D=P._readableState,Q=P._writableState;if(Q!=null&&Q.destroyed||D!=null&&D.destroyed)return this;D!=null&&D.autoDestroy||Q!=null&&Q.autoDestroy?P.destroy(U):U&&(U.stack,Q&&!Q.errored&&(Q.errored=U),D&&!D.errored&&(D.errored=U),M?e.nextTick(y,P,U):y(P,U))}function w(P,U){if(typeof P._construct!="function")return;const M=P._readableState,D=P._writableState;M&&(M.constructed=!1),D&&(D.constructed=!1),P.once(c,U),!(P.listenerCount(c)>1)&&e.nextTick(S,P)}function S(P){let U=!1;function M(D){if(U){m(P,D??new r);return}U=!0;const Q=P._readableState,le=P._writableState,me=le||Q;Q&&(Q.constructed=!0),le&&(le.constructed=!0),me.destroyed?P.emit(u,D):D?m(P,D,!0):e.nextTick(E,P)}try{P._construct(D=>{e.nextTick(M,D)})}catch(D){e.nextTick(M,D)}}function E(P){P.emit(c)}function T(P){return P?.setHeader&&typeof P.abort=="function"}function I(P){P.emit("close")}function R(P,U){P.emit("error",U),e.nextTick(I,P)}function K(P,U){!P||a(P)||(!U&&!s(P)&&(U=new n),l(P)?(P.socket=null,P.destroy(U)):T(P)?P.abort():T(P.req)?P.req.abort():typeof P.destroy=="function"?P.destroy(U):typeof P.close=="function"?P.close():U?e.nextTick(R,P,U):e.nextTick(I,P),P.destroyed||(P[o]=!0))}return Qc={construct:w,destroyer:K,destroy:h,undestroy:_,errorOrDestroy:m},Qc}var Jc,hb;function og(){if(hb)return Jc;hb=1;const{ArrayIsArray:e,ObjectSetPrototypeOf:t}=_t(),{EventEmitter:r}=us();function n(o){r.call(this,o)}t(n.prototype,r.prototype),t(n,r),n.prototype.pipe=function(o,a){const s=this;function l(b){o.writable&&o.write(b)===!1&&s.pause&&s.pause()}s.on("data",l);function u(){s.readable&&s.resume&&s.resume()}o.on("drain",u),!o._isStdio&&(!a||a.end!==!1)&&(s.on("end",f),s.on("close",h));let c=!1;function f(){c||(c=!0,o.end())}function h(){c||(c=!0,typeof o.destroy=="function"&&o.destroy())}function d(b){g(),r.listenerCount(this,"error")===0&&this.emit("error",b)}i(s,"error",d),i(o,"error",d);function g(){s.removeListener("data",l),o.removeListener("drain",u),s.removeListener("end",f),s.removeListener("close",h),s.removeListener("error",d),o.removeListener("error",d),s.removeListener("end",g),s.removeListener("close",g),o.removeListener("close",g)}return s.on("end",g),s.on("close",g),o.on("close",g),o.emit("pipe",s),o};function i(o,a,s){if(typeof o.prependListener=="function")return o.prependListener(a,s);!o._events||!o._events[a]?o.on(a,s):e(o._events[a])?o._events[a].unshift(s):o._events[a]=[s,o._events[a]]}return Jc={Stream:n,prependListener:i},Jc}var Xc={exports:{}},db;function Yu(){return db||(db=1,(function(e){const{SymbolDispose:t}=_t(),{AbortError:r,codes:n}=nr(),{isNodeStream:i,isWebStream:o,kControllerErrorFunction:a}=Xn(),s=xi(),{ERR_INVALID_ARG_TYPE:l}=n;let u;const c=(f,h)=>{if(typeof f!="object"||!("aborted"in f))throw new l(h,"AbortSignal",f)};e.exports.addAbortSignal=function(h,d){if(c(h,"signal"),!i(d)&&!o(d))throw new l("stream",["ReadableStream","WritableStream","Stream"],d);return e.exports.addAbortSignalNoValidate(h,d)},e.exports.addAbortSignalNoValidate=function(f,h){if(typeof f!="object"||!("aborted"in f))return h;const d=i(h)?()=>{h.destroy(new r(void 0,{cause:f.reason}))}:()=>{h[a](new r(void 0,{cause:f.reason}))};if(f.aborted)d();else{u=u||dr().addAbortListener;const g=u(f,d);s(h,g[t])}return h}})(Xc)),Xc.exports}var Zc,pb;function MP(){if(pb)return Zc;pb=1;const{StringPrototypeSlice:e,SymbolIterator:t,TypedArrayPrototypeSet:r,Uint8Array:n}=_t(),{Buffer:i}=xr(),{inspect:o}=dr();return Zc=class{constructor(){this.head=null,this.tail=null,this.length=0}push(s){const l={data:s,next:null};this.length>0?this.tail.next=l:this.head=l,this.tail=l,++this.length}unshift(s){const l={data:s,next:this.head};this.length===0&&(this.tail=l),this.head=l,++this.length}shift(){if(this.length===0)return;const s=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,s}clear(){this.head=this.tail=null,this.length=0}join(s){if(this.length===0)return"";let l=this.head,u=""+l.data;for(;(l=l.next)!==null;)u+=s+l.data;return u}concat(s){if(this.length===0)return i.alloc(0);const l=i.allocUnsafe(s>>>0);let u=this.head,c=0;for(;u;)r(l,u.data,c),c+=u.data.length,u=u.next;return l}consume(s,l){const u=this.head.data;if(sf.length)l+=f,s-=f.length;else{s===f.length?(l+=f,++c,u.next?this.head=u.next:this.head=this.tail=null):(l+=e(f,0,s),this.head=u,u.data=e(f,s));break}++c}while((u=u.next)!==null);return this.length-=c,l}_getBuffer(s){const l=i.allocUnsafe(s),u=s;let c=this.head,f=0;do{const h=c.data;if(s>h.length)r(l,h,u-s),s-=h.length;else{s===h.length?(r(l,h,u-s),++f,c.next?this.head=c.next:this.head=this.tail=null):(r(l,new n(h.buffer,h.byteOffset,s),u-s),this.head=c,c.data=h.slice(s));break}++f}while((c=c.next)!==null);return this.length-=f,l}[Symbol.for("nodejs.util.inspect.custom")](s,l){return o(this,{...l,depth:0,customInspect:!1})}},Zc}var ef,gb;function Qu(){if(gb)return ef;gb=1;const{MathFloor:e,NumberIsInteger:t}=_t(),{validateInteger:r}=Ea(),{ERR_INVALID_ARG_VALUE:n}=nr().codes;let i=16*1024,o=16;function a(c,f,h){return c.highWaterMark!=null?c.highWaterMark:f?c[h]:null}function s(c){return c?o:i}function l(c,f){r(f,"value",0),c?o=f:i=f}function u(c,f,h,d){const g=a(f,d,h);if(g!=null){if(!t(g)||g<0){const b=d?`options.${h}`:"options.highWaterMark";throw new n(b,g)}return e(g)}return s(c.objectMode)}return ef={getHighWaterMark:u,getDefaultHighWaterMark:s,setDefaultHighWaterMark:l},ef}var tf={},Ha={exports:{}};var mb;function PP(){return mb||(mb=1,(function(e,t){var r=xr(),n=r.Buffer;function i(a,s){for(var l in a)s[l]=a[l]}n.from&&n.alloc&&n.allocUnsafe&&n.allocUnsafeSlow?e.exports=r:(i(r,t),t.Buffer=o);function o(a,s,l){return n(a,s,l)}o.prototype=Object.create(n.prototype),i(n,o),o.from=function(a,s,l){if(typeof a=="number")throw new TypeError("Argument must not be a number");return n(a,s,l)},o.alloc=function(a,s,l){if(typeof a!="number")throw new TypeError("Argument must be a number");var u=n(a);return s!==void 0?typeof l=="string"?u.fill(s,l):u.fill(s):u.fill(0),u},o.allocUnsafe=function(a){if(typeof a!="number")throw new TypeError("Argument must be a number");return n(a)},o.allocUnsafeSlow=function(a){if(typeof a!="number")throw new TypeError("Argument must be a number");return r.SlowBuffer(a)}})(Ha,Ha.exports)),Ha.exports}var yb;function RP(){if(yb)return tf;yb=1;var e=PP().Buffer,t=e.isEncoding||function(_){switch(_=""+_,_&&_.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function r(_){if(!_)return"utf8";for(var m;;)switch(_){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return _;default:if(m)return;_=(""+_).toLowerCase(),m=!0}}function n(_){var m=r(_);if(typeof m!="string"&&(e.isEncoding===t||!t(_)))throw new Error("Unknown encoding: "+_);return m||_}tf.StringDecoder=i;function i(_){this.encoding=n(_);var m;switch(this.encoding){case"utf16le":this.text=f,this.end=h,m=4;break;case"utf8":this.fillLast=l,m=4;break;case"base64":this.text=d,this.end=g,m=3;break;default:this.write=b,this.end=y;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=e.allocUnsafe(m)}i.prototype.write=function(_){if(_.length===0)return"";var m,w;if(this.lastNeed){if(m=this.fillLast(_),m===void 0)return"";w=this.lastNeed,this.lastNeed=0}else w=0;return w<_.length?m?m+this.text(_,w):this.text(_,w):m||""},i.prototype.end=c,i.prototype.text=u,i.prototype.fillLast=function(_){if(this.lastNeed<=_.length)return _.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);_.copy(this.lastChar,this.lastTotal-this.lastNeed,0,_.length),this.lastNeed-=_.length};function o(_){return _<=127?0:_>>5===6?2:_>>4===14?3:_>>3===30?4:_>>6===2?-1:-2}function a(_,m,w){var S=m.length-1;if(S=0?(E>0&&(_.lastNeed=E-1),E):--S=0?(E>0&&(_.lastNeed=E-2),E):--S=0?(E>0&&(E===2?E=0:_.lastNeed=E-3),E):0))}function s(_,m,w){if((m[0]&192)!==128)return _.lastNeed=0,"�";if(_.lastNeed>1&&m.length>1){if((m[1]&192)!==128)return _.lastNeed=1,"�";if(_.lastNeed>2&&m.length>2&&(m[2]&192)!==128)return _.lastNeed=2,"�"}}function l(_){var m=this.lastTotal-this.lastNeed,w=s(this,_);if(w!==void 0)return w;if(this.lastNeed<=_.length)return _.copy(this.lastChar,m,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);_.copy(this.lastChar,m,0,_.length),this.lastNeed-=_.length}function u(_,m){var w=a(this,_,m);if(!this.lastNeed)return _.toString("utf8",m);this.lastTotal=w;var S=_.length-(w-this.lastNeed);return _.copy(this.lastChar,0,S),_.toString("utf8",m,S)}function c(_){var m=_&&_.length?this.write(_):"";return this.lastNeed?m+"�":m}function f(_,m){if((_.length-m)%2===0){var w=_.toString("utf16le",m);if(w){var S=w.charCodeAt(w.length-1);if(S>=55296&&S<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=_[_.length-2],this.lastChar[1]=_[_.length-1],w.slice(0,-1)}return w}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=_[_.length-1],_.toString("utf16le",m,_.length-1)}function h(_){var m=_&&_.length?this.write(_):"";if(this.lastNeed){var w=this.lastTotal-this.lastNeed;return m+this.lastChar.toString("utf16le",0,w)}return m}function d(_,m){var w=(_.length-m)%3;return w===0?_.toString("base64",m):(this.lastNeed=3-w,this.lastTotal=3,w===1?this.lastChar[0]=_[_.length-1]:(this.lastChar[0]=_[_.length-2],this.lastChar[1]=_[_.length-1]),_.toString("base64",m,_.length-w))}function g(_){var m=_&&_.length?this.write(_):"";return this.lastNeed?m+this.lastChar.toString("base64",0,3-this.lastNeed):m}function b(_){return _.toString(this.encoding)}function y(_){return _&&_.length?this.write(_):""}return tf}var rf,bb;function ME(){if(bb)return rf;bb=1;const e=uo(),{PromisePrototypeThen:t,SymbolAsyncIterator:r,SymbolIterator:n}=_t(),{Buffer:i}=xr(),{ERR_INVALID_ARG_TYPE:o,ERR_STREAM_NULL_VALUES:a}=nr().codes;function s(l,u,c){let f;if(typeof u=="string"||u instanceof i)return new l({objectMode:!0,...c,read(){this.push(u),this.push(null)}});let h;if(u&&u[r])h=!0,f=u[r]();else if(u&&u[n])h=!1,f=u[n]();else throw new o("iterable",["Iterable"],u);const d=new l({objectMode:!0,highWaterMark:1,...c});let g=!1;d._read=function(){g||(g=!0,y())},d._destroy=function(_,m){t(b(_),()=>e.nextTick(m,_),w=>e.nextTick(m,w||_))};async function b(_){const m=_!=null,w=typeof f.throw=="function";if(m&&w){const{value:S,done:E}=await f.throw(_);if(await S,E)return}if(typeof f.return=="function"){const{value:S}=await f.return();await S}}async function y(){for(;;){try{const{value:_,done:m}=h?await f.next():f.next();if(m)d.push(null);else{const w=_&&typeof _.then=="function"?await _:_;if(w===null)throw g=!1,new a;if(d.push(w))continue;g=!1}}catch(_){d.destroy(_)}break}}return d}return rf=s,rf}var nf,_b;function Ju(){if(_b)return nf;_b=1;const e=uo(),{ArrayPrototypeIndexOf:t,NumberIsInteger:r,NumberIsNaN:n,NumberParseInt:i,ObjectDefineProperties:o,ObjectKeys:a,ObjectSetPrototypeOf:s,Promise:l,SafeSet:u,SymbolAsyncDispose:c,SymbolAsyncIterator:f,Symbol:h}=_t();nf=ue,ue.ReadableState=H;const{EventEmitter:d}=us(),{Stream:g,prependListener:b}=og(),{Buffer:y}=xr(),{addAbortSignal:_}=Yu(),m=xi();let w=dr().debuglog("stream",ce=>{w=ce});const S=MP(),E=cs(),{getHighWaterMark:T,getDefaultHighWaterMark:I}=Qu(),{aggregateTwoErrors:R,codes:{ERR_INVALID_ARG_TYPE:K,ERR_METHOD_NOT_IMPLEMENTED:P,ERR_OUT_OF_RANGE:U,ERR_STREAM_PUSH_AFTER_EOF:M,ERR_STREAM_UNSHIFT_AFTER_END_EVENT:D},AbortError:Q}=nr(),{validateObject:le}=Ea(),me=h("kPaused"),{StringDecoder:fe}=RP(),J=ME();s(ue.prototype,g.prototype),s(ue,g);const de=()=>{},{errorOrDestroy:B}=E,ie=1,G=2,se=4,_e=8,X=16,re=32,ee=64,F=128,V=256,q=512,z=1024,C=2048,k=4096,N=8192,O=16384,$=32768,j=65536,oe=1<<17,W=1<<18;function ne(ce){return{enumerable:!1,get(){return(this.state&ce)!==0},set(pe){pe?this.state|=ce:this.state&=~ce}}}o(H.prototype,{objectMode:ne(ie),ended:ne(G),endEmitted:ne(se),reading:ne(_e),constructed:ne(X),sync:ne(re),needReadable:ne(ee),emittedReadable:ne(F),readableListening:ne(V),resumeScheduled:ne(q),errorEmitted:ne(z),emitClose:ne(C),autoDestroy:ne(k),destroyed:ne(N),closed:ne(O),closeEmitted:ne($),multiAwaitDrain:ne(j),readingMore:ne(oe),dataEmitted:ne(W)});function H(ce,pe,Y){typeof Y!="boolean"&&(Y=pe instanceof Vn()),this.state=C|k|X|re,ce&&ce.objectMode&&(this.state|=ie),Y&&ce&&ce.readableObjectMode&&(this.state|=ie),this.highWaterMark=ce?T(this,ce,"readableHighWaterMark",Y):I(!1),this.buffer=new S,this.length=0,this.pipes=[],this.flowing=null,this[me]=null,ce&&ce.emitClose===!1&&(this.state&=~C),ce&&ce.autoDestroy===!1&&(this.state&=~k),this.errored=null,this.defaultEncoding=ce&&ce.defaultEncoding||"utf8",this.awaitDrainWriters=null,this.decoder=null,this.encoding=null,ce&&ce.encoding&&(this.decoder=new fe(ce.encoding),this.encoding=ce.encoding)}function ue(ce){if(!(this instanceof ue))return new ue(ce);const pe=this instanceof Vn();this._readableState=new H(ce,this,pe),ce&&(typeof ce.read=="function"&&(this._read=ce.read),typeof ce.destroy=="function"&&(this._destroy=ce.destroy),typeof ce.construct=="function"&&(this._construct=ce.construct),ce.signal&&!pe&&_(ce.signal,this)),g.call(this,ce),E.construct(this,()=>{this._readableState.needReadable&&Z(this,this._readableState)})}ue.prototype.destroy=E.destroy,ue.prototype._undestroy=E.undestroy,ue.prototype._destroy=function(ce,pe){pe(ce)},ue.prototype[d.captureRejectionSymbol]=function(ce){this.destroy(ce)},ue.prototype[c]=function(){let ce;return this.destroyed||(ce=this.readableEnded?null:new Q,this.destroy(ce)),new l((pe,Y)=>m(this,te=>te&&te!==ce?Y(te):pe(null)))},ue.prototype.push=function(ce,pe){return ge(this,ce,pe,!1)},ue.prototype.unshift=function(ce,pe){return ge(this,ce,pe,!0)};function ge(ce,pe,Y,te){w("readableAddChunk",pe);const Ee=ce._readableState;let Be;if((Ee.state&ie)===0&&(typeof pe=="string"?(Y=Y||Ee.defaultEncoding,Ee.encoding!==Y&&(te&&Ee.encoding?pe=y.from(pe,Y).toString(Ee.encoding):(pe=y.from(pe,Y),Y=""))):pe instanceof y?Y="":g._isUint8Array(pe)?(pe=g._uint8ArrayToBuffer(pe),Y=""):pe!=null&&(Be=new K("chunk",["string","Buffer","Uint8Array"],pe))),Be)B(ce,Be);else if(pe===null)Ee.state&=~_e,p(ce,Ee);else if((Ee.state&ie)!==0||pe&&pe.length>0)if(te)if((Ee.state&se)!==0)B(ce,new D);else{if(Ee.destroyed||Ee.errored)return!1;be(ce,Ee,pe,!0)}else if(Ee.ended)B(ce,new M);else{if(Ee.destroyed||Ee.errored)return!1;Ee.state&=~_e,Ee.decoder&&!Y?(pe=Ee.decoder.write(pe),Ee.objectMode||pe.length!==0?be(ce,Ee,pe,!1):Z(ce,Ee)):be(ce,Ee,pe,!1)}else te||(Ee.state&=~_e,Z(ce,Ee));return!Ee.ended&&(Ee.length0?((pe.state&j)!==0?pe.awaitDrainWriters.clear():pe.awaitDrainWriters=null,pe.dataEmitted=!0,ce.emit("data",Y)):(pe.length+=pe.objectMode?1:Y.length,te?pe.buffer.unshift(Y):pe.buffer.push(Y),(pe.state&ee)!==0&&x(ce)),Z(ce,pe)}ue.prototype.isPaused=function(){const ce=this._readableState;return ce[me]===!0||ce.flowing===!1},ue.prototype.setEncoding=function(ce){const pe=new fe(ce);this._readableState.decoder=pe,this._readableState.encoding=this._readableState.decoder.encoding;const Y=this._readableState.buffer;let te="";for(const Ee of Y)te+=pe.write(Ee);return Y.clear(),te!==""&&Y.push(te),this._readableState.length=te.length,this};const ke=1073741824;function A(ce){if(ce>ke)throw new U("size","<= 1GiB",ce);return ce--,ce|=ce>>>1,ce|=ce>>>2,ce|=ce>>>4,ce|=ce>>>8,ce|=ce>>>16,ce++,ce}function v(ce,pe){return ce<=0||pe.length===0&&pe.ended?0:(pe.state&ie)!==0?1:n(ce)?pe.flowing&&pe.length?pe.buffer.first().length:pe.length:ce<=pe.length?ce:pe.ended?pe.length:0}ue.prototype.read=function(ce){w("read",ce),ce===void 0?ce=NaN:r(ce)||(ce=i(ce,10));const pe=this._readableState,Y=ce;if(ce>pe.highWaterMark&&(pe.highWaterMark=A(ce)),ce!==0&&(pe.state&=~F),ce===0&&pe.needReadable&&((pe.highWaterMark!==0?pe.length>=pe.highWaterMark:pe.length>0)||pe.ended))return w("read: emitReadable",pe.length,pe.ended),pe.length===0&&pe.ended?ir(this):x(this),null;if(ce=v(ce,pe),ce===0&&pe.ended)return pe.length===0&&ir(this),null;let te=(pe.state&ee)!==0;if(w("need readable",te),(pe.length===0||pe.length-ce0?Ee=kt(ce,pe):Ee=null,Ee===null?(pe.needReadable=pe.length<=pe.highWaterMark,ce=0):(pe.length-=ce,pe.multiAwaitDrain?pe.awaitDrainWriters.clear():pe.awaitDrainWriters=null),pe.length===0&&(pe.ended||(pe.needReadable=!0),Y!==ce&&pe.ended&&ir(this)),Ee!==null&&!pe.errorEmitted&&!pe.closeEmitted&&(pe.dataEmitted=!0,this.emit("data",Ee)),Ee};function p(ce,pe){if(w("onEofChunk"),!pe.ended){if(pe.decoder){const Y=pe.decoder.end();Y&&Y.length&&(pe.buffer.push(Y),pe.length+=pe.objectMode?1:Y.length)}pe.ended=!0,pe.sync?x(ce):(pe.needReadable=!1,pe.emittedReadable=!0,L(ce))}}function x(ce){const pe=ce._readableState;w("emitReadable",pe.needReadable,pe.emittedReadable),pe.needReadable=!1,pe.emittedReadable||(w("emitReadable",pe.flowing),pe.emittedReadable=!0,e.nextTick(L,ce))}function L(ce){const pe=ce._readableState;w("emitReadable_",pe.destroyed,pe.length,pe.ended),!pe.destroyed&&!pe.errored&&(pe.length||pe.ended)&&(ce.emit("readable"),pe.emittedReadable=!1),pe.needReadable=!pe.flowing&&!pe.ended&&pe.length<=pe.highWaterMark,Fe(ce)}function Z(ce,pe){!pe.readingMore&&pe.constructed&&(pe.readingMore=!0,e.nextTick(he,ce,pe))}function he(ce,pe){for(;!pe.reading&&!pe.ended&&(pe.length1&&te.pipes.includes(ce)&&(w("false write response, pause",te.awaitDrainWriters.size),te.awaitDrainWriters.add(ce)),Y.pause()),yt||(yt=ae(Y,ce),ce.on("drain",yt))}Y.on("data",ti);function ti(Qt){w("ondata");const At=ce.write(Qt);w("dest.write",At),At===!1&&ei()}function ri(Qt){if(w("onerror",Qt),ar(),ce.removeListener("error",ri),ce.listenerCount("error")===0){const At=ce._writableState||ce._readableState;At&&!At.errorEmitted?B(ce,Qt):ce.emit("error",Qt)}}b(ce,"error",ri);function Br(){ce.removeListener("finish",sr),ar()}ce.once("close",Br);function sr(){w("onfinish"),ce.removeListener("close",Br),ar()}ce.once("finish",sr);function ar(){w("unpipe"),Y.unpipe(ce)}return ce.emit("pipe",Y),ce.writableNeedDrain===!0?ei():te.flowing||(w("pipe resume"),Y.resume()),ce};function ae(ce,pe){return function(){const te=ce._readableState;te.awaitDrainWriters===pe?(w("pipeOnDrain",1),te.awaitDrainWriters=null):te.multiAwaitDrain&&(w("pipeOnDrain",te.awaitDrainWriters.size),te.awaitDrainWriters.delete(pe)),(!te.awaitDrainWriters||te.awaitDrainWriters.size===0)&&ce.listenerCount("data")&&ce.resume()}}ue.prototype.unpipe=function(ce){const pe=this._readableState,Y={hasUnpiped:!1};if(pe.pipes.length===0)return this;if(!ce){const Ee=pe.pipes;pe.pipes=[],this.pause();for(let Be=0;Be0,te.flowing!==!1&&this.resume()):ce==="readable"&&!te.endEmitted&&!te.readableListening&&(te.readableListening=te.needReadable=!0,te.flowing=!1,te.emittedReadable=!1,w("on readable",te.length,te.reading),te.length?x(this):te.reading||e.nextTick(Ne,this)),Y},ue.prototype.addListener=ue.prototype.on,ue.prototype.removeListener=function(ce,pe){const Y=g.prototype.removeListener.call(this,ce,pe);return ce==="readable"&&e.nextTick(ve,this),Y},ue.prototype.off=ue.prototype.removeListener,ue.prototype.removeAllListeners=function(ce){const pe=g.prototype.removeAllListeners.apply(this,arguments);return(ce==="readable"||ce===void 0)&&e.nextTick(ve,this),pe};function ve(ce){const pe=ce._readableState;pe.readableListening=ce.listenerCount("readable")>0,pe.resumeScheduled&&pe[me]===!1?pe.flowing=!0:ce.listenerCount("data")>0?ce.resume():pe.readableListening||(pe.flowing=null)}function Ne(ce){w("readable nexttick read 0"),ce.read(0)}ue.prototype.resume=function(){const ce=this._readableState;return ce.flowing||(w("resume"),ce.flowing=!ce.readableListening,Le(this,ce)),ce[me]=!1,this};function Le(ce,pe){pe.resumeScheduled||(pe.resumeScheduled=!0,e.nextTick(je,ce,pe))}function je(ce,pe){w("resume",pe.reading),pe.reading||ce.read(0),pe.resumeScheduled=!1,ce.emit("resume"),Fe(ce),pe.flowing&&!pe.reading&&ce.read(0)}ue.prototype.pause=function(){return w("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(w("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState[me]=!0,this};function Fe(ce){const pe=ce._readableState;for(w("flow",pe.flowing);pe.flowing&&ce.read()!==null;);}ue.prototype.wrap=function(ce){let pe=!1;ce.on("data",te=>{!this.push(te)&&ce.pause&&(pe=!0,ce.pause())}),ce.on("end",()=>{this.push(null)}),ce.on("error",te=>{B(this,te)}),ce.on("close",()=>{this.destroy()}),ce.on("destroy",()=>{this.destroy()}),this._read=()=>{pe&&ce.resume&&(pe=!1,ce.resume())};const Y=a(ce);for(let te=1;te{Ee=$e?R(Ee,$e):null,Y(),Y=de});try{for(;;){const $e=ce.destroyed?null:ce.read();if($e!==null)yield $e;else{if(Ee)throw Ee;if(Ee===null)return;await new l(te)}}}catch($e){throw Ee=R(Ee,$e),Ee}finally{(Ee||pe?.destroyOnReturn!==!1)&&(Ee===void 0||ce._readableState.autoDestroy)?E.destroyer(ce,null):(ce.off("readable",te),Be())}}o(ue.prototype,{readable:{__proto__:null,get(){const ce=this._readableState;return!!ce&&ce.readable!==!1&&!ce.destroyed&&!ce.errorEmitted&&!ce.endEmitted},set(ce){this._readableState&&(this._readableState.readable=!!ce)}},readableDidRead:{__proto__:null,enumerable:!1,get:function(){return this._readableState.dataEmitted}},readableAborted:{__proto__:null,enumerable:!1,get:function(){return!!(this._readableState.readable!==!1&&(this._readableState.destroyed||this._readableState.errored)&&!this._readableState.endEmitted)}},readableHighWaterMark:{__proto__:null,enumerable:!1,get:function(){return this._readableState.highWaterMark}},readableBuffer:{__proto__:null,enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}},readableFlowing:{__proto__:null,enumerable:!1,get:function(){return this._readableState.flowing},set:function(ce){this._readableState&&(this._readableState.flowing=ce)}},readableLength:{__proto__:null,enumerable:!1,get(){return this._readableState.length}},readableObjectMode:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.objectMode:!1}},readableEncoding:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.encoding:null}},errored:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.errored:null}},closed:{__proto__:null,get(){return this._readableState?this._readableState.closed:!1}},destroyed:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.destroyed:!1},set(ce){this._readableState&&(this._readableState.destroyed=ce)}},readableEnded:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.endEmitted:!1}}}),o(H.prototype,{pipesCount:{__proto__:null,get(){return this.pipes.length}},paused:{__proto__:null,get(){return this[me]!==!1},set(ce){this[me]=!!ce}}}),ue._fromList=kt;function kt(ce,pe){if(pe.length===0)return null;let Y;return pe.objectMode?Y=pe.buffer.shift():!ce||ce>=pe.length?(pe.decoder?Y=pe.buffer.join(""):pe.buffer.length===1?Y=pe.buffer.first():Y=pe.buffer.concat(pe.length),pe.buffer.clear()):Y=pe.buffer.consume(ce,pe.decoder),Y}function ir(ce){const pe=ce._readableState;w("endReadable",pe.endEmitted),pe.endEmitted||(pe.ended=!0,e.nextTick(Zn,pe,ce))}function Zn(ce,pe){if(w("endReadableNT",ce.endEmitted,ce.length),!ce.errored&&!ce.closeEmitted&&!ce.endEmitted&&ce.length===0){if(ce.endEmitted=!0,pe.emit("end"),pe.writable&&pe.allowHalfOpen===!1)e.nextTick(Tr,pe);else if(ce.autoDestroy){const Y=pe._writableState;(!Y||Y.autoDestroy&&(Y.finished||Y.writable===!1))&&pe.destroy()}}}function Tr(ce){ce.writable&&!ce.writableEnded&&!ce.destroyed&&ce.end()}ue.from=function(ce,pe){return J(ue,ce,pe)};let $t;function Ai(){return $t===void 0&&($t={}),$t}return ue.fromWeb=function(ce,pe){return Ai().newStreamReadableFromReadableStream(ce,pe)},ue.toWeb=function(ce,pe){return Ai().newReadableStreamFromStreamReadable(ce,pe)},ue.wrap=function(ce,pe){var Y,te;return new ue({objectMode:(Y=(te=ce.readableObjectMode)!==null&&te!==void 0?te:ce.objectMode)!==null&&Y!==void 0?Y:!0,...pe,destroy(Ee,Be){E.destroyer(ce,Ee),Be(Ee)}}).wrap(ce)},nf}var of,vb;function sg(){if(vb)return of;vb=1;const e=uo(),{ArrayPrototypeSlice:t,Error:r,FunctionPrototypeSymbolHasInstance:n,ObjectDefineProperty:i,ObjectDefineProperties:o,ObjectSetPrototypeOf:a,StringPrototypeToLowerCase:s,Symbol:l,SymbolHasInstance:u}=_t();of=le,le.WritableState=D;const{EventEmitter:c}=us(),f=og().Stream,{Buffer:h}=xr(),d=cs(),{addAbortSignal:g}=Yu(),{getHighWaterMark:b,getDefaultHighWaterMark:y}=Qu(),{ERR_INVALID_ARG_TYPE:_,ERR_METHOD_NOT_IMPLEMENTED:m,ERR_MULTIPLE_CALLBACK:w,ERR_STREAM_CANNOT_PIPE:S,ERR_STREAM_DESTROYED:E,ERR_STREAM_ALREADY_FINISHED:T,ERR_STREAM_NULL_VALUES:I,ERR_STREAM_WRITE_AFTER_END:R,ERR_UNKNOWN_ENCODING:K}=nr().codes,{errorOrDestroy:P}=d;a(le.prototype,f.prototype),a(le,f);function U(){}const M=l("kOnFinished");function D(k,N,O){typeof O!="boolean"&&(O=N instanceof Vn()),this.objectMode=!!(k&&k.objectMode),O&&(this.objectMode=this.objectMode||!!(k&&k.writableObjectMode)),this.highWaterMark=k?b(this,k,"writableHighWaterMark",O):y(!1),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;const $=!!(k&&k.decodeStrings===!1);this.decodeStrings=!$,this.defaultEncoding=k&&k.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=B.bind(void 0,N),this.writecb=null,this.writelen=0,this.afterWriteTickInfo=null,Q(this),this.pendingcb=0,this.constructed=!0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!k||k.emitClose!==!1,this.autoDestroy=!k||k.autoDestroy!==!1,this.errored=null,this.closed=!1,this.closeEmitted=!1,this[M]=[]}function Q(k){k.buffered=[],k.bufferedIndex=0,k.allBuffers=!0,k.allNoop=!0}D.prototype.getBuffer=function(){return t(this.buffered,this.bufferedIndex)},i(D.prototype,"bufferedRequestCount",{__proto__:null,get(){return this.buffered.length-this.bufferedIndex}});function le(k){const N=this instanceof Vn();if(!N&&!n(le,this))return new le(k);this._writableState=new D(k,this,N),k&&(typeof k.write=="function"&&(this._write=k.write),typeof k.writev=="function"&&(this._writev=k.writev),typeof k.destroy=="function"&&(this._destroy=k.destroy),typeof k.final=="function"&&(this._final=k.final),typeof k.construct=="function"&&(this._construct=k.construct),k.signal&&g(k.signal,this)),f.call(this,k),d.construct(this,()=>{const O=this._writableState;O.writing||_e(this,O),F(this,O)})}i(le,u,{__proto__:null,value:function(k){return n(this,k)?!0:this!==le?!1:k&&k._writableState instanceof D}}),le.prototype.pipe=function(){P(this,new S)};function me(k,N,O,$){const j=k._writableState;if(typeof O=="function")$=O,O=j.defaultEncoding;else{if(!O)O=j.defaultEncoding;else if(O!=="buffer"&&!h.isEncoding(O))throw new K(O);typeof $!="function"&&($=U)}if(N===null)throw new I;if(!j.objectMode)if(typeof N=="string")j.decodeStrings!==!1&&(N=h.from(N,O),O="buffer");else if(N instanceof h)O="buffer";else if(f._isUint8Array(N))N=f._uint8ArrayToBuffer(N),O="buffer";else throw new _("chunk",["string","Buffer","Uint8Array"],N);let oe;return j.ending?oe=new R:j.destroyed&&(oe=new E("write")),oe?(e.nextTick($,oe),P(k,oe,!0),oe):(j.pendingcb++,fe(k,j,N,O,$))}le.prototype.write=function(k,N,O){return me(this,k,N,O)===!0},le.prototype.cork=function(){this._writableState.corked++},le.prototype.uncork=function(){const k=this._writableState;k.corked&&(k.corked--,k.writing||_e(this,k))},le.prototype.setDefaultEncoding=function(N){if(typeof N=="string"&&(N=s(N)),!h.isEncoding(N))throw new K(N);return this._writableState.defaultEncoding=N,this};function fe(k,N,O,$,j){const oe=N.objectMode?1:O.length;N.length+=oe;const W=N.lengthO.bufferedIndex&&_e(k,O),$?O.afterWriteTickInfo!==null&&O.afterWriteTickInfo.cb===j?O.afterWriteTickInfo.count++:(O.afterWriteTickInfo={count:1,cb:j,stream:k,state:O},e.nextTick(ie,O.afterWriteTickInfo)):G(k,O,1,j))}function ie({stream:k,state:N,count:O,cb:$}){return N.afterWriteTickInfo=null,G(k,N,O,$)}function G(k,N,O,$){for(!N.ending&&!k.destroyed&&N.length===0&&N.needDrain&&(N.needDrain=!1,k.emit("drain"));O-- >0;)N.pendingcb--,$();N.destroyed&&se(N),F(k,N)}function se(k){if(k.writing)return;for(let j=k.bufferedIndex;j1&&k._writev){N.pendingcb-=oe-1;const ne=N.allNoop?U:ue=>{for(let ge=W;ge256?(O.splice(0,W),N.bufferedIndex=0):N.bufferedIndex=W}N.bufferProcessing=!1}le.prototype._write=function(k,N,O){if(this._writev)this._writev([{chunk:k,encoding:N}],O);else throw new m("_write()")},le.prototype._writev=null,le.prototype.end=function(k,N,O){const $=this._writableState;typeof k=="function"?(O=k,k=null,N=null):typeof N=="function"&&(O=N,N=null);let j;if(k!=null){const oe=me(this,k,N);oe instanceof r&&(j=oe)}return $.corked&&($.corked=1,this.uncork()),j||(!$.errored&&!$.ending?($.ending=!0,F(this,$,!0),$.ended=!0):$.finished?j=new T("end"):$.destroyed&&(j=new E("end"))),typeof O=="function"&&(j||$.finished?e.nextTick(O,j):$[M].push(O)),this};function X(k){return k.ending&&!k.destroyed&&k.constructed&&k.length===0&&!k.errored&&k.buffered.length===0&&!k.finished&&!k.writing&&!k.errorEmitted&&!k.closeEmitted}function re(k,N){let O=!1;function $(j){if(O){P(k,j??w());return}if(O=!0,N.pendingcb--,j){const oe=N[M].splice(0);for(let W=0;W{X(j)?V($,j):j.pendingcb--},k,N)):X(N)&&(N.pendingcb++,V(k,N))))}function V(k,N){N.pendingcb--,N.finished=!0;const O=N[M].splice(0);for(let $=0;${if(se!=null)throw new g("nully","body",se)},se=>{b(ie,se)});return ie=new K({objectMode:!0,readable:!1,write:fe,final(se){J(async()=>{try{await G,e.nextTick(se,null)}catch(_e){e.nextTick(se,_e)}})},destroy:de})}throw new g("Iterable, AsyncIterable or AsyncFunction",Q,me)}if(T(D))return M(D.arrayBuffer());if(i(D))return S(K,D,{objectMode:!0,writable:!1});if(u(D?.readable)&&c(D?.writable))return K.fromWeb(D);if(typeof D?.writable=="object"||typeof D?.readable=="object"){const me=D!=null&&D.readable?a(D?.readable)?D?.readable:M(D.readable):void 0,fe=D!=null&&D.writable?s(D?.writable)?D?.writable:M(D.writable):void 0;return U({readable:me,writable:fe})}const le=D?.then;if(typeof le=="function"){let me;return R(le,D,fe=>{fe!=null&&me.push(fe),me.push(null)},fe=>{b(me,fe)}),me=new K({objectMode:!0,writable:!1,read(){}})}throw new d(Q,["Blob","ReadableStream","WritableStream","Stream","Iterable","AsyncIterable","Function","{ readable, writable } pair","Promise"],D)};function P(M){let{promise:D,resolve:Q}=w();const le=new I,me=le.signal;return{value:M((async function*(){for(;;){const J=D;D=null;const{chunk:de,done:B,cb:ie}=await J;if(e.nextTick(ie),B)return;if(me.aborted)throw new h(void 0,{cause:me.reason});({promise:D,resolve:Q}=w()),yield de}})(),{signal:me}),write(J,de,B){const ie=Q;Q=null,ie({chunk:J,done:!1,cb:B})},final(J){const de=Q;Q=null,de({done:!0,cb:J})},destroy(J,de){le.abort(),de(J)}}}function U(M){const D=M.readable&&typeof M.readable.read!="function"?_.wrap(M.readable):M.readable,Q=M.writable;let le=!!r(D),me=!!n(Q),fe,J,de,B,ie;function G(se){const _e=B;B=null,_e?_e(se):se&&ie.destroy(se)}return ie=new K({readableObjectMode:!!(D!=null&&D.readableObjectMode),writableObjectMode:!!(Q!=null&&Q.writableObjectMode),readable:le,writable:me}),me&&(f(Q,se=>{me=!1,se&&b(D,se),G(se)}),ie._write=function(se,_e,X){Q.write(se,_e)?X():fe=X},ie._final=function(se){Q.end(),J=se},Q.on("drain",function(){if(fe){const se=fe;fe=null,se()}}),Q.on("finish",function(){if(J){const se=J;J=null,se()}})),le&&(f(D,se=>{le=!1,se&&b(D,se),G(se)}),D.on("readable",function(){if(de){const se=de;de=null,se()}}),D.on("end",function(){ie.push(null)}),ie._read=function(){for(;;){const se=D.read();if(se===null){de=ie._read;return}if(!ie.push(se))return}}),ie._destroy=function(se,_e){!se&&B!==null&&(se=new h),de=null,fe=null,J=null,B===null?_e(se):(B=_e,b(Q,se),b(D,se))},ie}return sf}var af,Eb;function Vn(){if(Eb)return af;Eb=1;const{ObjectDefineProperties:e,ObjectGetOwnPropertyDescriptor:t,ObjectKeys:r,ObjectSetPrototypeOf:n}=_t();af=a;const i=Ju(),o=sg();n(a.prototype,i.prototype),n(a,i);{const c=r(o.prototype);for(let f=0;f{if(c){u?u(c):this.destroy(c);return}f!=null&&this.push(f),this.push(null),u&&u()}):(this.push(null),u&&u())}function l(){this._final!==s&&s.call(this)}return a.prototype._final=s,a.prototype._transform=function(u,c,f){throw new r("_transform()")},a.prototype._write=function(u,c,f){const h=this._readableState,d=this._writableState,g=h.length;this._transform(u,c,(b,y)=>{if(b){f(b);return}y!=null&&this.push(y),d.ended||g===h.length||h.length{re=!0});const ee=o(se,{readable:_e,writable:X},F=>{re=!F});return{destroy:F=>{re||(re=!0,s.destroyer(se,F||new d("pipe")))},cleanup:ee}}function le(se){return y(se[se.length-1],"streams[stream.length - 1]"),se.pop()}function me(se){if(m(se))return se;if(S(se))return fe(se);throw new c("val",["Readable","Iterable","AsyncIterable"],se)}async function*fe(se){M||(M=Ju()),yield*M.prototype[n].call(se)}async function J(se,_e,X,{end:re}){let ee,F=null;const V=C=>{if(C&&(ee=C),F){const k=F;F=null,k()}},q=()=>new r((C,k)=>{ee?k(ee):F=()=>{ee?k(ee):C()}});_e.on("drain",V);const z=o(_e,{readable:!1},V);try{_e.writableNeedDrain&&await q();for await(const C of se)_e.write(C)||await q();re&&(_e.end(),await q()),X()}catch(C){X(ee!==C?u(ee,C):C)}finally{z(),_e.off("drain",V)}}async function de(se,_e,X,{end:re}){T(_e)&&(_e=_e.writable);const ee=_e.getWriter();try{for await(const F of se)await ee.ready,ee.write(F).catch(()=>{});await ee.ready,re&&await ee.close(),X()}catch(F){try{await ee.abort(F),X(F)}catch(V){X(V)}}}function B(...se){return ie(se,a(le(se)))}function ie(se,_e,X){if(se.length===1&&t(se[0])&&(se=se[0]),se.length<2)throw new h("streams");const re=new P,ee=re.signal,F=X?.signal,V=[];_(F,"options.signal");function q(){j(new b)}D=D||dr().addAbortListener;let z;F&&(z=D(F,q));let C,k;const N=[];let O=0;function $(ue){j(ue,--O===0)}function j(ue,ge){var be;if(ue&&(!C||C.code==="ERR_STREAM_PREMATURE_CLOSE")&&(C=ue),!(!C&&!ge)){for(;N.length;)N.shift()(C);(be=z)===null||be===void 0||be[i](),re.abort(),ge&&(C||V.forEach(ke=>ke()),e.nextTick(_e,C,k))}}let oe;for(let ue=0;ue0,A=be||X?.end!==!1,v=ue===se.length-1;if(E(ge)){let p=function(x){x&&x.name!=="AbortError"&&x.code!=="ERR_STREAM_PREMATURE_CLOSE"&&$(x)};var H=p;if(A){const{destroy:x,cleanup:L}=Q(ge,be,ke);N.push(x),w(ge)&&v&&V.push(L)}ge.on("error",p),w(ge)&&v&&V.push(()=>{ge.removeListener("error",p)})}if(ue===0)if(typeof ge=="function"){if(oe=ge({signal:ee}),!m(oe))throw new f("Iterable, AsyncIterable or Stream","source",oe)}else m(ge)||S(ge)||T(ge)?oe=ge:oe=l.from(ge);else if(typeof ge=="function"){if(T(oe)){var W;oe=me((W=oe)===null||W===void 0?void 0:W.readable)}else oe=me(oe);if(oe=ge(oe,{signal:ee}),be){if(!m(oe,!0))throw new f("AsyncIterable",`transform[${ue-1}]`,oe)}else{var ne;U||(U=RE());const p=new U({objectMode:!0}),x=(ne=oe)===null||ne===void 0?void 0:ne.then;if(typeof x=="function")O++,x.call(oe,he=>{k=he,he!=null&&p.write(he),A&&p.end(),e.nextTick($)},he=>{p.destroy(he),e.nextTick($,he)});else if(m(oe,!0))O++,J(oe,p,$,{end:A});else if(R(oe)||T(oe)){const he=oe.readable||oe;O++,J(he,p,$,{end:A})}else throw new f("AsyncIterable or Promise","destination",oe);oe=p;const{destroy:L,cleanup:Z}=Q(oe,!1,!0);N.push(L),v&&V.push(Z)}}else if(E(ge)){if(S(oe)){O+=2;const p=G(oe,ge,$,{end:A});w(ge)&&v&&V.push(p)}else if(T(oe)||R(oe)){const p=oe.readable||oe;O++,J(p,ge,$,{end:A})}else if(m(oe))O++,J(oe,ge,$,{end:A});else throw new c("val",["Readable","Iterable","AsyncIterable","ReadableStream","TransformStream"],oe);oe=ge}else if(I(ge)){if(S(oe))O++,de(me(oe),ge,$,{end:A});else if(R(oe)||m(oe))O++,de(oe,ge,$,{end:A});else if(T(oe))O++,de(oe.readable,ge,$,{end:A});else throw new c("val",["Readable","Iterable","AsyncIterable","ReadableStream","TransformStream"],oe);oe=ge}else oe=l.from(ge)}return(ee!=null&&ee.aborted||F!=null&&F.aborted)&&e.nextTick(q),oe}function G(se,_e,X,{end:re}){let ee=!1;if(_e.on("close",()=>{ee||X(new g)}),se.pipe(_e,{end:!1}),re){let V=function(){ee=!0,_e.end()};var F=V;K(se)?e.nextTick(V):se.once("end",V)}else X();return o(se,{readable:!0,writable:!1},V=>{const q=se._readableState;V&&V.code==="ERR_STREAM_PREMATURE_CLOSE"&&q&&q.ended&&!q.errored&&!q.errorEmitted?se.once("end",X).once("error",X):X(V)}),o(_e,{readable:!1,writable:!0},X)}return cf={pipelineImpl:ie,pipeline:B},cf}var ff,Tb;function NE(){if(Tb)return ff;Tb=1;const{pipeline:e}=ag(),t=Vn(),{destroyer:r}=cs(),{isNodeStream:n,isReadable:i,isWritable:o,isWebStream:a,isTransformStream:s,isWritableStream:l,isReadableStream:u}=Xn(),{AbortError:c,codes:{ERR_INVALID_ARG_VALUE:f,ERR_MISSING_ARGS:h}}=nr(),d=xi();return ff=function(...b){if(b.length===0)throw new h("streams");if(b.length===1)return t.from(b[0]);const y=[...b];if(typeof b[0]=="function"&&(b[0]=t.from(b[0])),typeof b[b.length-1]=="function"){const U=b.length-1;b[U]=t.from(b[U])}for(let U=0;U0&&!(o(b[U])||l(b[U])||s(b[U])))throw new f(`streams[${U}]`,y[U],"must be writable")}let _,m,w,S,E;function T(U){const M=S;S=null,M?M(U):U?E.destroy(U):!P&&!K&&E.destroy()}const I=b[0],R=e(b,T),K=!!(o(I)||l(I)||s(I)),P=!!(i(R)||u(R)||s(R));if(E=new t({writableObjectMode:!!(I!=null&&I.writableObjectMode),readableObjectMode:!!(R!=null&&R.readableObjectMode),writable:K,readable:P}),K){if(n(I))E._write=function(M,D,Q){I.write(M,D)?Q():_=Q},E._final=function(M){I.end(),m=M},I.on("drain",function(){if(_){const M=_;_=null,M()}});else if(a(I)){const D=(s(I)?I.writable:I).getWriter();E._write=async function(Q,le,me){try{await D.ready,D.write(Q).catch(()=>{}),me()}catch(fe){me(fe)}},E._final=async function(Q){try{await D.ready,D.close().catch(()=>{}),m=Q}catch(le){Q(le)}}}const U=s(R)?R.readable:R;d(U,()=>{if(m){const M=m;m=null,M()}})}if(P){if(n(R))R.on("readable",function(){if(w){const U=w;w=null,U()}}),R.on("end",function(){E.push(null)}),E._read=function(){for(;;){const U=R.read();if(U===null){w=E._read;return}if(!E.push(U))return}};else if(a(R)){const M=(s(R)?R.readable:R).getReader();E._read=async function(){for(;;)try{const{value:D,done:Q}=await M.read();if(!E.push(D))return;if(Q){E.push(null);return}}catch{return}}}}return E._destroy=function(U,M){!U&&S!==null&&(U=new c),w=null,_=null,m=null,S===null?M(U):(S=M,n(R)&&r(R,U))},E},ff}var Ib;function LP(){if(Ib)return Wa;Ib=1;const e=globalThis.AbortController||ra().AbortController,{codes:{ERR_INVALID_ARG_VALUE:t,ERR_INVALID_ARG_TYPE:r,ERR_MISSING_ARGS:n,ERR_OUT_OF_RANGE:i},AbortError:o}=nr(),{validateAbortSignal:a,validateInteger:s,validateObject:l}=Ea(),u=_t().Symbol("kWeak"),c=_t().Symbol("kResistStopPropagation"),{finished:f}=xi(),h=NE(),{addAbortSignalNoValidate:d}=Yu(),{isWritable:g,isNodeStream:b}=Xn(),{deprecate:y}=dr(),{ArrayPrototypePush:_,Boolean:m,MathFloor:w,Number:S,NumberIsNaN:E,Promise:T,PromiseReject:I,PromiseResolve:R,PromisePrototypeThen:K,Symbol:P}=_t(),U=P("kEmpty"),M=P("kEof");function D(F,V){if(V!=null&&l(V,"options"),V?.signal!=null&&a(V.signal,"options.signal"),b(F)&&!g(F))throw new t("stream",F,"must be writable");const q=h(this,F);return V!=null&&V.signal&&d(V.signal,q),q}function Q(F,V){if(typeof F!="function")throw new r("fn",["Function","AsyncFunction"],F);V!=null&&l(V,"options"),V?.signal!=null&&a(V.signal,"options.signal");let q=1;V?.concurrency!=null&&(q=w(V.concurrency));let z=q-1;return V?.highWaterMark!=null&&(z=w(V.highWaterMark)),s(q,"options.concurrency",1),s(z,"options.highWaterMark",0),z+=q,(async function*(){const k=dr().AbortSignalAny([V?.signal].filter(m)),N=this,O=[],$={signal:k};let j,oe,W=!1,ne=0;function H(){W=!0,ue()}function ue(){ne-=1,ge()}function ge(){oe&&!W&&ne=z||ne>=q)&&await new T(A=>{oe=A})}O.push(M)}catch(ke){const A=I(ke);K(A,ue,H),O.push(A)}finally{W=!0,j&&(j(),j=null)}}be();try{for(;;){for(;O.length>0;){const ke=await O[0];if(ke===M)return;if(k.aborted)throw new o;ke!==U&&(yield ke),O.shift(),ge()}await new T(ke=>{j=ke})}}finally{W=!0,oe&&(oe(),oe=null)}}).call(this)}function le(F=void 0){return F!=null&&l(F,"options"),F?.signal!=null&&a(F.signal,"options.signal"),(async function*(){let q=0;for await(const C of this){var z;if(F!=null&&(z=F.signal)!==null&&z!==void 0&&z.aborted)throw new o({cause:F.signal.reason});yield[q++,C]}}).call(this)}async function me(F,V=void 0){for await(const q of B.call(this,F,V))return!0;return!1}async function fe(F,V=void 0){if(typeof F!="function")throw new r("fn",["Function","AsyncFunction"],F);return!await me.call(this,async(...q)=>!await F(...q),V)}async function J(F,V){for await(const q of B.call(this,F,V))return q}async function de(F,V){if(typeof F!="function")throw new r("fn",["Function","AsyncFunction"],F);async function q(z,C){return await F(z,C),U}for await(const z of Q.call(this,q,V));}function B(F,V){if(typeof F!="function")throw new r("fn",["Function","AsyncFunction"],F);async function q(z,C){return await F(z,C)?z:U}return Q.call(this,q,V)}class ie extends n{constructor(){super("reduce"),this.message="Reduce of an empty stream requires an initial value"}}async function G(F,V,q){var z;if(typeof F!="function")throw new r("reducer",["Function","AsyncFunction"],F);q!=null&&l(q,"options"),q?.signal!=null&&a(q.signal,"options.signal");let C=arguments.length>1;if(q!=null&&(z=q.signal)!==null&&z!==void 0&&z.aborted){const j=new o(void 0,{cause:q.signal.reason});throw this.once("error",()=>{}),await f(this.destroy(j)),j}const k=new e,N=k.signal;if(q!=null&&q.signal){const j={once:!0,[u]:this,[c]:!0};q.signal.addEventListener("abort",()=>k.abort(),j)}let O=!1;try{for await(const j of this){var $;if(O=!0,q!=null&&($=q.signal)!==null&&$!==void 0&&$.aborted)throw new o;C?V=await F(V,j,{signal:N}):(V=j,C=!0)}if(!O&&!C)throw new ie}finally{k.abort()}return V}async function se(F){F!=null&&l(F,"options"),F?.signal!=null&&a(F.signal,"options.signal");const V=[];for await(const z of this){var q;if(F!=null&&(q=F.signal)!==null&&q!==void 0&&q.aborted)throw new o(void 0,{cause:F.signal.reason});_(V,z)}return V}function _e(F,V){const q=Q.call(this,F,V);return(async function*(){for await(const C of q)yield*C}).call(this)}function X(F){if(F=S(F),E(F))return 0;if(F<0)throw new i("number",">= 0",F);return F}function re(F,V=void 0){return V!=null&&l(V,"options"),V?.signal!=null&&a(V.signal,"options.signal"),F=X(F),(async function*(){var z;if(V!=null&&(z=V.signal)!==null&&z!==void 0&&z.aborted)throw new o;for await(const k of this){var C;if(V!=null&&(C=V.signal)!==null&&C!==void 0&&C.aborted)throw new o;F--<=0&&(yield k)}}).call(this)}function ee(F,V=void 0){return V!=null&&l(V,"options"),V?.signal!=null&&a(V.signal,"options.signal"),F=X(F),(async function*(){var z;if(V!=null&&(z=V.signal)!==null&&z!==void 0&&z.aborted)throw new o;for await(const k of this){var C;if(V!=null&&(C=V.signal)!==null&&C!==void 0&&C.aborted)throw new o;if(F-- >0&&(yield k),F<=0)return}}).call(this)}return Wa.streamReturningOperators={asIndexedPairs:y(le,"readable.asIndexedPairs will be removed in a future version."),drop:re,filter:B,flatMap:_e,map:Q,take:ee,compose:D},Wa.promiseReturningOperators={every:fe,forEach:de,reduce:G,toArray:se,some:me,find:J},Wa}var hf,Cb;function LE(){if(Cb)return hf;Cb=1;const{ArrayPrototypePop:e,Promise:t}=_t(),{isIterable:r,isNodeStream:n,isWebStream:i}=Xn(),{pipelineImpl:o}=ag(),{finished:a}=xi();BE();function s(...l){return new t((u,c)=>{let f,h;const d=l[l.length-1];if(d&&typeof d=="object"&&!n(d)&&!r(d)&&!i(d)){const g=e(l);f=g.signal,h=g.end}o(l,(g,b)=>{g?c(g):u(b)},{signal:f,end:h})})}return hf={finished:a,pipeline:s},hf}var kb;function BE(){if(kb)return jc.exports;kb=1;const{Buffer:e}=xr(),{ObjectDefineProperty:t,ObjectKeys:r,ReflectApply:n}=_t(),{promisify:{custom:i}}=dr(),{streamReturningOperators:o,promiseReturningOperators:a}=LP(),{codes:{ERR_ILLEGAL_CONSTRUCTOR:s}}=nr(),l=NE(),{setDefaultHighWaterMark:u,getDefaultHighWaterMark:c}=Qu(),{pipeline:f}=ag(),{destroyer:h}=cs(),d=xi(),g=LE(),b=Xn(),y=jc.exports=og().Stream;y.isDestroyed=b.isDestroyed,y.isDisturbed=b.isDisturbed,y.isErrored=b.isErrored,y.isReadable=b.isReadable,y.isWritable=b.isWritable,y.Readable=Ju();for(const w of r(o)){let E=function(...T){if(new.target)throw s();return y.Readable.from(n(S,this,T))};var m=E;const S=o[w];t(E,"name",{__proto__:null,value:S.name}),t(E,"length",{__proto__:null,value:S.length}),t(y.Readable.prototype,w,{__proto__:null,value:E,enumerable:!1,configurable:!0,writable:!0})}for(const w of r(a)){let E=function(...I){if(new.target)throw s();return n(S,this,I)};var m=E;const S=a[w];t(E,"name",{__proto__:null,value:S.name}),t(E,"length",{__proto__:null,value:S.length}),t(y.Readable.prototype,w,{__proto__:null,value:E,enumerable:!1,configurable:!0,writable:!0})}y.Writable=sg(),y.Duplex=Vn(),y.Transform=PE(),y.PassThrough=RE(),y.pipeline=f;const{addAbortSignal:_}=Yu();return y.addAbortSignal=_,y.finished=d,y.destroy=h,y.compose=l,y.setDefaultHighWaterMark=u,y.getDefaultHighWaterMark=c,t(y,"promises",{__proto__:null,configurable:!0,enumerable:!0,get(){return g}}),t(f,i,{__proto__:null,enumerable:!0,get(){return g.pipeline}}),t(d,i,{__proto__:null,enumerable:!0,get(){return g.finished}}),y.Stream=y,y._isUint8Array=function(S){return S instanceof Uint8Array},y._uint8ArrayToBuffer=function(S){return e.from(S.buffer,S.byteOffset,S.byteLength)},jc.exports}var Ob;function BP(){return Ob||(Ob=1,(function(e){const t=BE(),r=LE(),n=t.Readable.destroy;e.exports=t.Readable,e.exports._uint8ArrayToBuffer=t._uint8ArrayToBuffer,e.exports._isUint8Array=t._isUint8Array,e.exports.isDisturbed=t.isDisturbed,e.exports.isErrored=t.isErrored,e.exports.isReadable=t.isReadable,e.exports.Readable=t.Readable,e.exports.Writable=t.Writable,e.exports.Duplex=t.Duplex,e.exports.Transform=t.Transform,e.exports.PassThrough=t.PassThrough,e.exports.addAbortSignal=t.addAbortSignal,e.exports.finished=t.finished,e.exports.destroy=t.destroy,e.exports.destroy=n,e.exports.pipeline=t.pipeline,e.exports.compose=t.compose,Object.defineProperty(t,"promises",{configurable:!0,enumerable:!0,get(){return r}}),e.exports.Stream=t.Stream,e.exports.default=e.exports})(Fc)),Fc.exports}var qa={exports:{}},Mb;function DP(){return Mb||(Mb=1,typeof Object.create=="function"?qa.exports=function(t,r){r&&(t.super_=r,t.prototype=Object.create(r.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:qa.exports=function(t,r){if(r){t.super_=r;var n=function(){};n.prototype=r.prototype,t.prototype=new n,t.prototype.constructor=t}}),qa.exports}var df,Pb;function $P(){if(Pb)return df;Pb=1;const{Buffer:e}=xr(),t=Symbol.for("BufferList");function r(n){if(!(this instanceof r))return new r(n);r._init.call(this,n)}return r._init=function(i){Object.defineProperty(this,t,{value:!0}),this._bufs=[],this.length=0,i&&this.append(i)},r.prototype._new=function(i){return new r(i)},r.prototype._offset=function(i){if(i===0)return[0,0];let o=0;for(let a=0;athis.length||i<0)return;const o=this._offset(i);return this._bufs[o[0]][o[1]]},r.prototype.slice=function(i,o){return typeof i=="number"&&i<0&&(i+=this.length),typeof o=="number"&&o<0&&(o+=this.length),this.copy(null,0,i,o)},r.prototype.copy=function(i,o,a,s){if((typeof a!="number"||a<0)&&(a=0),(typeof s!="number"||s>this.length)&&(s=this.length),a>=this.length||s<=0)return i||e.alloc(0);const l=!!i,u=this._offset(a),c=s-a;let f=c,h=l&&o||0,d=u[1];if(a===0&&s===this.length){if(!l)return this._bufs.length===1?this._bufs[0]:e.concat(this._bufs,this.length);for(let g=0;gb)this._bufs[g].copy(i,h,d),h+=b;else{this._bufs[g].copy(i,h,d,d+f),h+=b;break}f-=b,d&&(d=0)}return i.length>h?i.slice(0,h):i},r.prototype.shallowSlice=function(i,o){if(i=i||0,o=typeof o!="number"?this.length:o,i<0&&(i+=this.length),o<0&&(o+=this.length),i===o)return this._new();const a=this._offset(i),s=this._offset(o),l=this._bufs.slice(a[0],s[0]+1);return s[1]===0?l.pop():l[l.length-1]=l[l.length-1].slice(0,s[1]),a[1]!==0&&(l[0]=l[0].slice(a[1])),this._new(l)},r.prototype.toString=function(i,o,a){return this.slice(o,a).toString(i)},r.prototype.consume=function(i){if(i=Math.trunc(i),Number.isNaN(i)||i<=0)return this;for(;this._bufs.length;)if(i>=this._bufs[0].length)i-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(i),this.length-=i;break}return this},r.prototype.duplicate=function(){const i=this._new();for(let o=0;o=0&&u=0&&uthis.length?this.length:i;const a=this._offset(i);let s=a[0],l=a[1];for(;s=n.length){const f=u.indexOf(n,l);if(f!==-1)return this._reverseOffset([s,f]);l=u.length-n.length+1}else{const f=this._reverseOffset([s,l]);if(this._match(f,n))return f;l++}l=0}return-1},r.prototype._match=function(n,i){if(this.length-n[0,1].map(a=>[0,1].map(s=>{const l=r.alloc(1);return l.writeUInt8(t.codes[i]<r.from([i])),t.EMPTY={pingreq:r.from([t.codes.pingreq<<4,0]),pingresp:r.from([t.codes.pingresp<<4,0]),disconnect:r.from([t.codes.disconnect<<4,0])},t.MQTT5_PUBACK_PUBREC_CODES={0:"Success",16:"No matching subscribers",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",144:"Topic Name invalid",145:"Packet identifier in use",151:"Quota exceeded",153:"Payload format invalid"},t.MQTT5_PUBREL_PUBCOMP_CODES={0:"Success",146:"Packet Identifier not found"},t.MQTT5_SUBACK_CODES={0:"Granted QoS 0",1:"Granted QoS 1",2:"Granted QoS 2",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",143:"Topic Filter invalid",145:"Packet Identifier in use",151:"Quota exceeded",158:"Shared Subscriptions not supported",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"},t.MQTT5_UNSUBACK_CODES={0:"Success",17:"No subscription existed",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",143:"Topic Filter invalid",145:"Packet Identifier in use"},t.MQTT5_DISCONNECT_CODES={0:"Normal disconnection",4:"Disconnect with Will Message",128:"Unspecified error",129:"Malformed Packet",130:"Protocol Error",131:"Implementation specific error",135:"Not authorized",137:"Server busy",139:"Server shutting down",141:"Keep Alive timeout",142:"Session taken over",143:"Topic Filter invalid",144:"Topic Name invalid",147:"Receive Maximum exceeded",148:"Topic Alias invalid",149:"Packet too large",150:"Message rate too high",151:"Quota exceeded",152:"Administrative action",153:"Payload format invalid",154:"Retain not supported",155:"QoS not supported",156:"Use another server",157:"Server moved",158:"Shared Subscriptions not supported",159:"Connection rate exceeded",160:"Maximum connect time",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"},t.MQTT5_AUTH_CODES={0:"Success",24:"Continue authentication",25:"Re-authenticate"}})(gf)),gf.exports}function $E(){throw new Error("setTimeout has not been defined")}function UE(){throw new Error("clearTimeout has not been defined")}var ui=$E,ci=UE;typeof Fo.setTimeout=="function"&&(ui=setTimeout);typeof Fo.clearTimeout=="function"&&(ci=clearTimeout);function FE(e){if(ui===setTimeout)return setTimeout(e,0);if((ui===$E||!ui)&&setTimeout)return ui=setTimeout,setTimeout(e,0);try{return ui(e,0)}catch{try{return ui.call(null,e,0)}catch{return ui.call(this,e,0)}}}function jP(e){if(ci===clearTimeout)return clearTimeout(e);if((ci===UE||!ci)&&clearTimeout)return ci=clearTimeout,clearTimeout(e);try{return ci(e)}catch{try{return ci.call(null,e)}catch{return ci.call(this,e)}}}var Mn=[],Bo=!1,Fi,Pl=-1;function WP(){!Bo||!Fi||(Bo=!1,Fi.length?Mn=Fi.concat(Mn):Pl=-1,Mn.length&&jE())}function jE(){if(!Bo){var e=FE(WP);Bo=!0;for(var t=Mn.length;t;){for(Fi=Mn,Mn=[];++Pl1)for(var r=1;r0)return a(c);if(h==="number"&&isFinite(c))return f.long?l(c):s(c);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(c))};function a(c){if(c=String(c),!(c.length>100)){var f=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(c);if(f){var h=parseFloat(f[1]),d=(f[2]||"ms").toLowerCase();switch(d){case"years":case"year":case"yrs":case"yr":case"y":return h*o;case"weeks":case"week":case"w":return h*i;case"days":case"day":case"d":return h*n;case"hours":case"hour":case"hrs":case"hr":case"h":return h*r;case"minutes":case"minute":case"mins":case"min":case"m":return h*t;case"seconds":case"second":case"secs":case"sec":case"s":return h*e;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return h;default:return}}}}function s(c){var f=Math.abs(c);return f>=n?Math.round(c/n)+"d":f>=r?Math.round(c/r)+"h":f>=t?Math.round(c/t)+"m":f>=e?Math.round(c/e)+"s":c+"ms"}function l(c){var f=Math.abs(c);return f>=n?u(c,f,n,"day"):f>=r?u(c,f,r,"hour"):f>=t?u(c,f,t,"minute"):f>=e?u(c,f,e,"second"):c+" ms"}function u(c,f,h,d){var g=f>=h*1.5;return Math.round(c/h)+" "+d+(g?"s":"")}return mf}var yf,Db;function gR(){if(Db)return yf;Db=1;function e(t){n.debug=n,n.default=n,n.coerce=u,n.disable=s,n.enable=o,n.enabled=l,n.humanize=pR(),n.destroy=c,Object.keys(t).forEach(f=>{n[f]=t[f]}),n.names=[],n.skips=[],n.formatters={};function r(f){let h=0;for(let d=0;d{if(I==="%%")return"%";E++;const K=n.formatters[R];if(typeof K=="function"){const P=_[E];I=K.call(m,P),_.splice(E,1),E--}return I}),n.formatArgs.call(m,_),(m.log||n.log).apply(m,_)}return y.namespace=f,y.useColors=n.useColors(),y.color=n.selectColor(f),y.extend=i,y.destroy=n.destroy,Object.defineProperty(y,"enabled",{enumerable:!0,configurable:!1,get:()=>d!==null?d:(g!==n.namespaces&&(g=n.namespaces,b=n.enabled(f)),b),set:_=>{d=_}}),typeof n.init=="function"&&n.init(y),y}function i(f,h){const d=n(this.namespace+(typeof h>"u"?":":h)+f);return d.log=this.log,d}function o(f){n.save(f),n.namespaces=f,n.names=[],n.skips=[];const h=(typeof f=="string"?f:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(const d of h)d[0]==="-"?n.skips.push(d.slice(1)):n.names.push(d)}function a(f,h){let d=0,g=0,b=-1,y=0;for(;d"-"+h)].join(",");return n.enable(""),f}function l(f){for(const h of n.skips)if(a(f,h))return!1;for(const h of n.names)if(a(f,h))return!0;return!1}function u(f){return f instanceof Error?f.stack||f.message:f}function c(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return n.enable(n.load()),n}return yf=e,yf}var $b;function VE(){return $b||($b=1,(function(e,t){var r={};t.formatArgs=i,t.save=o,t.load=a,t.useColors=n,t.storage=s(),t.destroy=(()=>{let u=!1;return()=>{u||(u=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function n(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let u;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(u=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(u[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function i(u){if(u[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+u[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const c="color: "+this.color;u.splice(1,0,c,"color: inherit");let f=0,h=0;u[0].replace(/%[a-zA-Z%]/g,d=>{d!=="%%"&&(f++,d==="%c"&&(h=f))}),u.splice(h,0,c)}t.log=console.debug||console.log||(()=>{});function o(u){try{u?t.storage.setItem("debug",u):t.storage.removeItem("debug")}catch{}}function a(){let u;try{u=t.storage.getItem("debug")||t.storage.getItem("DEBUG")}catch{}return!u&&typeof Ni<"u"&&"env"in Ni&&(u=r.DEBUG),u}function s(){try{return localStorage}catch{}}e.exports=gR()(t);const{formatters:l}=e.exports;l.j=function(u){try{return JSON.stringify(u)}catch(c){return"[UnexpectedJSONParseError]: "+c.message}}})(Ga,Ga.exports)),Ga.exports}var bf,Ub;function mR(){if(Ub)return bf;Ub=1;const e=UP(),{EventEmitter:t}=us(),r=FP(),n=DE(),i=VE()("mqtt-packet:parser");class o extends t{constructor(){super(),this.parser=this.constructor.parser}static parser(s){return this instanceof o?(this.settings=s||{},this._states=["_parseHeader","_parseLength","_parsePayload","_newPacket"],this._resetState(),this):new o().parser(s)}_resetState(){i("_resetState: resetting packet, error, _list, and _stateCounter"),this.packet=new r,this.error=null,this._list=e(),this._stateCounter=0}parse(s){for(this.error&&this._resetState(),this._list.append(s),i("parse: current state: %s",this._states[this._stateCounter]);(this.packet.length!==-1||this._list.length>0)&&this[this._states[this._stateCounter]]()&&!this.error;)this._stateCounter++,i("parse: state complete. _stateCounter is now: %d",this._stateCounter),i("parse: packet.length: %d, buffer list length: %d",this.packet.length,this._list.length),this._stateCounter>=this._states.length&&(this._stateCounter=0);return i("parse: exited while loop. packet: %d, buffer list length: %d",this.packet.length,this._list.length),this._list.length}_parseHeader(){const s=this._list.readUInt8(0),l=s>>n.CMD_SHIFT;this.packet.cmd=n.types[l];const u=s&15,c=n.requiredHeaderFlags[l];return c!=null&&u!==c?this._emitError(new Error(n.requiredHeaderFlagsErrors[l])):(this.packet.retain=(s&n.RETAIN_MASK)!==0,this.packet.qos=s>>n.QOS_SHIFT&n.QOS_MASK,this.packet.qos>2?this._emitError(new Error("Packet must not have both QoS bits set to 1")):(this.packet.dup=(s&n.DUP_MASK)!==0,i("_parseHeader: packet: %o",this.packet),this._list.consume(1),!0))}_parseLength(){const s=this._parseVarByteNum(!0);return s&&(this.packet.length=s.value,this._list.consume(s.bytes)),i("_parseLength %d",s.value),!!s}_parsePayload(){i("_parsePayload: payload %O",this._list);let s=!1;if(this.packet.length===0||this._list.length>=this.packet.length){switch(this._pos=0,this.packet.cmd){case"connect":this._parseConnect();break;case"connack":this._parseConnack();break;case"publish":this._parsePublish();break;case"puback":case"pubrec":case"pubrel":case"pubcomp":this._parseConfirmation();break;case"subscribe":this._parseSubscribe();break;case"suback":this._parseSuback();break;case"unsubscribe":this._parseUnsubscribe();break;case"unsuback":this._parseUnsuback();break;case"pingreq":case"pingresp":break;case"disconnect":this._parseDisconnect();break;case"auth":this._parseAuth();break;default:this._emitError(new Error("Not supported"))}s=!0}return i("_parsePayload complete result: %s",s),s}_parseConnect(){i("_parseConnect");let s,l,u,c;const f={},h=this.packet,d=this._parseString();if(d===null)return this._emitError(new Error("Cannot parse protocolId"));if(d!=="MQTT"&&d!=="MQIsdp")return this._emitError(new Error("Invalid protocolId"));if(h.protocolId=d,this._pos>=this._list.length)return this._emitError(new Error("Packet too short"));if(h.protocolVersion=this._list.readUInt8(this._pos),h.protocolVersion>=128&&(h.bridgeMode=!0,h.protocolVersion=h.protocolVersion-128),h.protocolVersion!==3&&h.protocolVersion!==4&&h.protocolVersion!==5)return this._emitError(new Error("Invalid protocol version"));if(this._pos++,this._pos>=this._list.length)return this._emitError(new Error("Packet too short"));if(this._list.readUInt8(this._pos)&1)return this._emitError(new Error("Connect flag bit 0 must be 0, but got 1"));f.username=this._list.readUInt8(this._pos)&n.USERNAME_MASK,f.password=this._list.readUInt8(this._pos)&n.PASSWORD_MASK,f.will=this._list.readUInt8(this._pos)&n.WILL_FLAG_MASK;const g=!!(this._list.readUInt8(this._pos)&n.WILL_RETAIN_MASK),b=(this._list.readUInt8(this._pos)&n.WILL_QOS_MASK)>>n.WILL_QOS_SHIFT;if(f.will)h.will={},h.will.retain=g,h.will.qos=b;else{if(g)return this._emitError(new Error("Will Retain Flag must be set to zero when Will Flag is set to 0"));if(b)return this._emitError(new Error("Will QoS must be set to zero when Will Flag is set to 0"))}if(h.clean=(this._list.readUInt8(this._pos)&n.CLEAN_SESSION_MASK)!==0,this._pos++,h.keepalive=this._parseNum(),h.keepalive===-1)return this._emitError(new Error("Packet too short"));if(h.protocolVersion===5){const _=this._parseProperties();Object.getOwnPropertyNames(_).length&&(h.properties=_)}const y=this._parseString();if(y===null)return this._emitError(new Error("Packet too short"));if(h.clientId=y,i("_parseConnect: packet.clientId: %s",h.clientId),f.will){if(h.protocolVersion===5){const _=this._parseProperties();Object.getOwnPropertyNames(_).length&&(h.will.properties=_)}if(s=this._parseString(),s===null)return this._emitError(new Error("Cannot parse will topic"));if(h.will.topic=s,i("_parseConnect: packet.will.topic: %s",h.will.topic),l=this._parseBuffer(),l===null)return this._emitError(new Error("Cannot parse will payload"));h.will.payload=l,i("_parseConnect: packet.will.paylaod: %s",h.will.payload)}if(f.username){if(c=this._parseString(),c===null)return this._emitError(new Error("Cannot parse username"));h.username=c,i("_parseConnect: packet.username: %s",h.username)}if(f.password){if(u=this._parseBuffer(),u===null)return this._emitError(new Error("Cannot parse password"));h.password=u}return this.settings=h,i("_parseConnect: complete"),h}_parseConnack(){i("_parseConnack");const s=this.packet;if(this._list.length<1)return null;const l=this._list.readUInt8(this._pos++);if(l>1)return this._emitError(new Error("Invalid connack flags, bits 7-1 must be set to 0"));if(s.sessionPresent=!!(l&n.SESSIONPRESENT_MASK),this.settings.protocolVersion===5)this._list.length>=2?s.reasonCode=this._list.readUInt8(this._pos++):s.reasonCode=0;else{if(this._list.length<2)return null;s.returnCode=this._list.readUInt8(this._pos++)}if(s.returnCode===-1||s.reasonCode===-1)return this._emitError(new Error("Cannot parse return code"));if(this.settings.protocolVersion===5){const u=this._parseProperties();Object.getOwnPropertyNames(u).length&&(s.properties=u)}i("_parseConnack: complete")}_parsePublish(){i("_parsePublish");const s=this.packet;if(s.topic=this._parseString(),s.topic===null)return this._emitError(new Error("Cannot parse topic"));if(!(s.qos>0&&!this._parseMessageId())){if(this.settings.protocolVersion===5){const l=this._parseProperties();Object.getOwnPropertyNames(l).length&&(s.properties=l)}s.payload=this._list.slice(this._pos,s.length),i("_parsePublish: payload from buffer list: %o",s.payload)}}_parseSubscribe(){i("_parseSubscribe");const s=this.packet;let l,u,c,f,h,d,g;if(s.subscriptions=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){const b=this._parseProperties();Object.getOwnPropertyNames(b).length&&(s.properties=b)}if(s.length<=0)return this._emitError(new Error("Malformed subscribe, no payload specified"));for(;this._pos=s.length)return this._emitError(new Error("Malformed Subscribe Payload"));if(u=this._parseByte(),this.settings.protocolVersion===5){if(u&192)return this._emitError(new Error("Invalid subscribe topic flag bits, bits 7-6 must be 0"))}else if(u&252)return this._emitError(new Error("Invalid subscribe topic flag bits, bits 7-2 must be 0"));if(c=u&n.SUBSCRIBE_OPTIONS_QOS_MASK,c>2)return this._emitError(new Error("Invalid subscribe QoS, must be <= 2"));if(d=(u>>n.SUBSCRIBE_OPTIONS_NL_SHIFT&n.SUBSCRIBE_OPTIONS_NL_MASK)!==0,h=(u>>n.SUBSCRIBE_OPTIONS_RAP_SHIFT&n.SUBSCRIBE_OPTIONS_RAP_MASK)!==0,f=u>>n.SUBSCRIBE_OPTIONS_RH_SHIFT&n.SUBSCRIBE_OPTIONS_RH_MASK,f>2)return this._emitError(new Error("Invalid retain handling, must be <= 2"));g={topic:l,qos:c},this.settings.protocolVersion===5?(g.nl=d,g.rap=h,g.rh=f):this.settings.bridgeMode&&(g.rh=0,g.rap=!0,g.nl=!0),i("_parseSubscribe: push subscription `%s` to subscription",g),s.subscriptions.push(g)}}}_parseSuback(){i("_parseSuback");const s=this.packet;if(this.packet.granted=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){const l=this._parseProperties();Object.getOwnPropertyNames(l).length&&(s.properties=l)}if(s.length<=0)return this._emitError(new Error("Malformed suback, no payload specified"));for(;this._pos2&&l!==128)return this._emitError(new Error("Invalid suback QoS, must be 0, 1, 2 or 128"));this.packet.granted.push(l)}}}_parseUnsubscribe(){i("_parseUnsubscribe");const s=this.packet;if(s.unsubscriptions=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){const l=this._parseProperties();Object.getOwnPropertyNames(l).length&&(s.properties=l)}if(s.length<=0)return this._emitError(new Error("Malformed unsubscribe, no payload specified"));for(;this._pos2){switch(s.reasonCode=this._parseByte(),this.packet.cmd){case"puback":case"pubrec":if(!n.MQTT5_PUBACK_PUBREC_CODES[s.reasonCode])return this._emitError(new Error("Invalid "+this.packet.cmd+" reason code"));break;case"pubrel":case"pubcomp":if(!n.MQTT5_PUBREL_PUBCOMP_CODES[s.reasonCode])return this._emitError(new Error("Invalid "+this.packet.cmd+" reason code"));break}i("_parseConfirmation: packet.reasonCode `%d`",s.reasonCode)}else s.reasonCode=0;if(s.length>3){const l=this._parseProperties();Object.getOwnPropertyNames(l).length&&(s.properties=l)}}return!0}_parseDisconnect(){const s=this.packet;if(i("_parseDisconnect"),this.settings.protocolVersion===5){this._list.length>0?(s.reasonCode=this._parseByte(),n.MQTT5_DISCONNECT_CODES[s.reasonCode]||this._emitError(new Error("Invalid disconnect reason code"))):s.reasonCode=0;const l=this._parseProperties();Object.getOwnPropertyNames(l).length&&(s.properties=l)}return i("_parseDisconnect result: true"),!0}_parseAuth(){i("_parseAuth");const s=this.packet;if(this.settings.protocolVersion!==5)return this._emitError(new Error("Not supported auth packet for this version MQTT"));if(s.reasonCode=this._parseByte(),!n.MQTT5_AUTH_CODES[s.reasonCode])return this._emitError(new Error("Invalid auth reason code"));const l=this._parseProperties();return Object.getOwnPropertyNames(l).length&&(s.properties=l),i("_parseAuth: result: true"),!0}_parseMessageId(){const s=this.packet;return s.messageId=this._parseNum(),s.messageId===null?(this._emitError(new Error("Cannot parse messageId")),!1):(i("_parseMessageId: packet.messageId %d",s.messageId),!0)}_parseString(s){const l=this._parseNum(),u=l+this._pos;if(l===-1||u>this._list.length||u>this.packet.length)return null;const c=this._list.toString("utf8",this._pos,u);return this._pos+=l,i("_parseString: result: %s",c),c}_parseStringPair(){return i("_parseStringPair"),{name:this._parseString(),value:this._parseString()}}_parseBuffer(){const s=this._parseNum(),l=s+this._pos;if(s===-1||l>this._list.length||l>this.packet.length)return null;const u=this._list.slice(this._pos,l);return this._pos+=s,i("_parseBuffer: result: %o",u),u}_parseNum(){if(this._list.length-this._pos<2)return-1;const s=this._list.readUInt16BE(this._pos);return this._pos+=2,i("_parseNum: result: %s",s),s}_parse4ByteNum(){if(this._list.length-this._pos<4)return-1;const s=this._list.readUInt32BE(this._pos);return this._pos+=4,i("_parse4ByteNum: result: %s",s),s}_parseVarByteNum(s){i("_parseVarByteNum");const l=4;let u=0,c=1,f=0,h=!1,d;const g=this._pos?this._pos:0;for(;u=u&&this._emitError(new Error("Invalid variable byte integer")),g&&(this._pos+=u),h?s?h={bytes:u,value:f}:h=f:h=!1,i("_parseVarByteNum: result: %o",h),h}_parseByte(){let s;return this._pos>8,0),u.writeUInt8(l&255,1),u}function o(){for(let l=0;l0&&(c=c|128),h.writeUInt8(c,f++);while(l>0&&f<4);return l>0&&(f=0),n?h.subarray(0,f):h.slice(0,f)}function s(l){const u=e.allocUnsafe(4);return u.writeUInt32BE(l,0),u}return _f={cache:r,generateCache:o,generateNumber:i,genBufVariableByteInt:a,generate4ByteBuffer:s},_f}var vf={exports:{}},jb;function bR(){if(jb)return vf.exports;jb=1,vf.exports={nextTick:e};function e(t,r,n,i){if(typeof t!="function")throw new TypeError('"callback" argument must be a function');var o=arguments.length,a,s;switch(o){case 0:case 1:return Ni.nextTick(t);case 2:return Ni.nextTick(function(){t.call(null,r)});case 3:return Ni.nextTick(function(){t.call(null,r,n)});case 4:return Ni.nextTick(function(){t.call(null,r,n,i)});default:for(a=new Array(o-1),s=0;s=4)&&(N||C))oe+=t.byteLength(N)+2;else{if(q<4)return re.destroy(new Error("clientId must be supplied before 3.1.1")),!1;if(C*1===0)return re.destroy(new Error("clientId must be given if cleanSession set to 0")),!1}if(typeof k!="number"||k<0||k>65535||k%1!==0)return re.destroy(new Error("Invalid keepalive")),!1;oe+=2,oe+=1;let W,ne;if(q===5){if(W=de(re,j),!W)return!1;oe+=W.length}if(z){if(typeof z!="object")return re.destroy(new Error("Invalid will")),!1;if(!z.topic||typeof z.topic!="string")return re.destroy(new Error("Invalid will topic")),!1;if(oe+=t.byteLength(z.topic)+2,oe+=2,z.payload)if(z.payload.length>=0)typeof z.payload=="string"?oe+=t.byteLength(z.payload):oe+=z.payload.length;else return re.destroy(new Error("Invalid will payload")),!1;if(ne={},q===5){if(ne=de(re,z.properties),!ne)return!1;oe+=ne.length}}let H=!1;if(O!=null)if(_e(O))H=!0,oe+=t.byteLength(O)+2;else return re.destroy(new Error("Invalid username")),!1;if($!=null){if(!H)return re.destroy(new Error("Username is required to use password")),!1;if(_e($))oe+=se($)+2;else return re.destroy(new Error("Invalid password")),!1}re.write(e.CONNECT_HEADER),M(re,oe),J(re,V),F.bridgeMode&&(q+=128),re.write(q===131?e.VERSION131:q===132?e.VERSION132:q===4?e.VERSION4:q===5?e.VERSION5:e.VERSION3);let ue=0;return ue|=O!=null?e.USERNAME_MASK:0,ue|=$!=null?e.PASSWORD_MASK:0,ue|=z&&z.retain?e.WILL_RETAIN_MASK:0,ue|=z&&z.qos?z.qos<0&&h(re,N),j?.write(),a("publish: payload: %o",k),re.write(k)}function w(X,re,ee){const F=ee?ee.protocolVersion:4,V=X||{},q=V.cmd||"puback",z=V.messageId,C=V.dup&&q==="pubrel"?e.DUP_MASK:0;let k=0;const N=V.reasonCode,O=V.properties;let $=F===5?3:2;if(q==="pubrel"&&(k=1),typeof z!="number")return re.destroy(new Error("Invalid messageId")),!1;let j=null;if(F===5&&typeof O=="object"){if(j=B(re,O,ee,$),!j)return!1;$+=j.length}return re.write(e.ACKS[q][k][C][0]),$===3&&($+=N!==0?1:-1),M(re,$),h(re,z),F===5&&$!==2&&re.write(t.from([N])),j!==null?j.write():$===4&&re.write(t.from([0])),!0}function S(X,re,ee){a("subscribe: packet: ");const F=ee?ee.protocolVersion:4,V=X||{},q=V.dup?e.DUP_MASK:0,z=V.messageId,C=V.subscriptions,k=V.properties;let N=0;if(typeof z!="number")return re.destroy(new Error("Invalid messageId")),!1;N+=2;let O=null;if(F===5){if(O=de(re,k),!O)return!1;N+=O.length}if(typeof C=="object"&&C.length)for(let j=0;j2)return re.destroy(new Error("Invalid subscriptions - invalid Retain Handling")),!1}N+=t.byteLength(oe)+2+1}else return re.destroy(new Error("Invalid subscriptions")),!1;a("subscribe: writing to stream: %o",e.SUBSCRIBE_HEADER),re.write(e.SUBSCRIBE_HEADER[1][q?1:0][0]),M(re,N),h(re,z),O!==null&&O.write();let $=!0;for(const j of C){const oe=j.topic,W=j.qos,ne=+j.nl,H=+j.rap,ue=j.rh;let ge;D(re,oe),ge=e.SUBSCRIBE_OPTIONS_QOS[W],F===5&&(ge|=ne?e.SUBSCRIBE_OPTIONS_NL:0,ge|=H?e.SUBSCRIBE_OPTIONS_RAP:0,ge|=ue?e.SUBSCRIBE_OPTIONS_RH[ue]:0),$=re.write(t.from([ge]))}return $}function E(X,re,ee){const F=ee?ee.protocolVersion:4,V=X||{},q=V.messageId,z=V.granted,C=V.properties;let k=0;if(typeof q!="number")return re.destroy(new Error("Invalid messageId")),!1;if(k+=2,typeof z=="object"&&z.length)for(let O=0;Oe.VARBYTEINT_MAX)return X.destroy(new Error(`Invalid variable byte integer: ${re}`)),!1;let ee=U[re];return ee||(ee=c(re),re<16384&&(U[re]=ee)),a("writeVarByteInt: writing to stream: %o",ee),X.write(ee)}function D(X,re){const ee=t.byteLength(re);return h(X,ee),a("writeString: %s",re),X.write(re,"utf8")}function Q(X,re,ee){D(X,re),D(X,ee)}function le(X,re){return a("writeNumberCached: number: %d",re),a("writeNumberCached: %o",s[re]),X.write(s[re])}function me(X,re){const ee=l(re);return a("writeNumberGenerated: %o",ee),X.write(ee)}function fe(X,re){const ee=f(re);return a("write4ByteNumber: %o",ee),X.write(ee)}function J(X,re){typeof re=="string"?D(X,re):re?(h(X,re.length),X.write(re)):h(X,0)}function de(X,re){if(typeof re!="object"||re.length!=null)return{length:1,write(){G(X,{},0)}};let ee=0;function F(q,z){const C=e.propertiesTypes[q];let k=0;switch(C){case"byte":{if(typeof z!="boolean")return X.destroy(new Error(`Invalid ${q}: ${z}`)),!1;k+=2;break}case"int8":{if(typeof z!="number"||z<0||z>255)return X.destroy(new Error(`Invalid ${q}: ${z}`)),!1;k+=2;break}case"binary":{if(z&&z===null)return X.destroy(new Error(`Invalid ${q}: ${z}`)),!1;k+=1+t.byteLength(z)+2;break}case"int16":{if(typeof z!="number"||z<0||z>65535)return X.destroy(new Error(`Invalid ${q}: ${z}`)),!1;k+=3;break}case"int32":{if(typeof z!="number"||z<0||z>4294967295)return X.destroy(new Error(`Invalid ${q}: ${z}`)),!1;k+=5;break}case"var":{if(typeof z!="number"||z<0||z>268435455)return X.destroy(new Error(`Invalid ${q}: ${z}`)),!1;k+=1+t.byteLength(c(z));break}case"string":{if(typeof z!="string")return X.destroy(new Error(`Invalid ${q}: ${z}`)),!1;k+=3+t.byteLength(z.toString());break}case"pair":{if(typeof z!="object")return X.destroy(new Error(`Invalid ${q}: ${z}`)),!1;k+=Object.getOwnPropertyNames(z).reduce((N,O)=>{const $=z[O];return Array.isArray($)?N+=$.reduce((j,oe)=>(j+=3+t.byteLength(O.toString())+2+t.byteLength(oe.toString()),j),0):N+=3+t.byteLength(O.toString())+2+t.byteLength(z[O].toString()),N},0);break}default:return X.destroy(new Error(`Invalid property ${q}: ${z}`)),!1}return k}if(re)for(const q in re){let z=0,C=0;const k=re[q];if(k!==void 0){if(Array.isArray(k))for(let N=0;Nq;){const C=V.shift();if(C&&re[C])delete re[C],z=de(X,re);else return!1}return z}function ie(X,re,ee){switch(e.propertiesTypes[re]){case"byte":{X.write(t.from([e.properties[re]])),X.write(t.from([+ee]));break}case"int8":{X.write(t.from([e.properties[re]])),X.write(t.from([ee]));break}case"binary":{X.write(t.from([e.properties[re]])),J(X,ee);break}case"int16":{X.write(t.from([e.properties[re]])),h(X,ee);break}case"int32":{X.write(t.from([e.properties[re]])),fe(X,ee);break}case"var":{X.write(t.from([e.properties[re]])),M(X,ee);break}case"string":{X.write(t.from([e.properties[re]])),D(X,ee);break}case"pair":{Object.getOwnPropertyNames(ee).forEach(V=>{const q=ee[V];Array.isArray(q)?q.forEach(z=>{X.write(t.from([e.properties[re]])),Q(X,V.toString(),z.toString())}):(X.write(t.from([e.properties[re]])),Q(X,V.toString(),q.toString()))});break}default:return X.destroy(new Error(`Invalid property ${re} value: ${ee}`)),!1}}function G(X,re,ee){M(X,ee);for(const F in re)if(Object.prototype.hasOwnProperty.call(re,F)&&re[F]!=null){const V=re[F];if(Array.isArray(V))for(let q=0;q{console.info("MQTT connection successful.")}),_r.on("disconnect",()=>{console.info("MQTT disconnected")}),_r.on("error",e=>{console.error("MQTT connection failed: ",e)})}catch(e){console.error("MQTT connect error: ",e)}async function TR(e){await KE(),_r?_r.on("message",e):console.error("MqttRegister: MQTT client not available")}async function zi(e){ru.topic=e;const{topic:t,qos:r}=ru;await KE(),_r.subscribe(t,{qos:r},n=>{if(n){console.error("MQTT Subscription error: "+n);return}})}function Do(e){ru.topic=e;const{topic:t}=ru;_r.unsubscribe(t,r=>{if(r){console.error("MQTT Unsubscribe from "+e+" failed: "+r);return}})}async function nu(e,t){let n=_r.connected,i=0;for(;!n&&i<10;)console.warn("MQTT not connected. Waiting 0.1 seconds"),await zE(100),n=_r.connected,i+=1;if(i<10)try{_r.publish(e,t,{qos:0},o=>{o&&console.warn("MQTT publish error: ",o),console.info("MQTT publish: Message sent: ["+e+"]("+t+")")})}catch(o){console.warn("MQTT publish: caught error: "+o)}else console.error("MQTT publish: Lost connection to MQTT server. Please reload the page")}function lg(){return qE.clientId}const qb=20;async function KE(){let e=_r.connected,t=0;for(;!e&&t{tsetTimeout(t,e))}let IR=class{id;name="Ladepunkt";icon="Ladepunkt";type="";ev=0;template=0;connectedPhases=0;phase_1=0;autoPhaseSwitchHw=!1;controlPilotInterruptionHw=!1;isEnabled=!0;isPluggedIn=!1;isCharging=!1;_isLocked=!1;_connectedVehicle=0;chargeTemplate=null;chargeTemplateId=0;evTemplate=0;currentPlan="";averageConsumption=0;vehicleName="";rangeCharged=0;rangeUnit="";counter=0;dailyYield=0;energyPv=0;energyBat=0;pvPercentage=0;faultState=0;faultStr="";phasesInUse=0;power=0;chargedSincePlugged=0;stateStr="";current=0;currents=[0,0,0];phasesToUse=0;isSocConfigured=!0;isSocManual=!1;waitingForSoc=!1;color="white";constructor(t){this.id=t}get isLocked(){return this._isLocked}set isLocked(t){this._isLocked=t,zo("cpLock",t,this.id)}updateIsLocked(t){this._isLocked=t}get connectedVehicle(){return this._connectedVehicle}set connectedVehicle(t){this._connectedVehicle=t,zo("cpVehicle",t,this.id)}updateConnectedVehicle(t){this._connectedVehicle=t}get soc(){return Tt[this.connectedVehicle]?Tt[this.connectedVehicle].soc:0}set soc(t){Tt[this.connectedVehicle]&&(Tt[this.connectedVehicle].soc=t)}get chargeMode(){return this.chargeTemplate?.chargemode.selected??"stop"}set chargeMode(t){console.log("set mode"),this.chargeTemplate&&(console.log("active"),this.chargeTemplate.chargemode.selected=t,dt(this.id))}get hasPriority(){return this.chargeTemplate?.prio??!1}set hasPriority(t){this.chargeTemplate.prio=t,dt(this.id)}get timedCharging(){return this.chargeTemplate?this.chargeTemplate.time_charging.active:!1}set timedCharging(t){this.chargeTemplate.time_charging.active=t,dt(this.id)}get instantTargetCurrent(){return this.chargeTemplate?.chargemode.instant_charging.current??0}set instantTargetCurrent(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.instant_charging.current=t,dt(this.id))}get instantChargeLimitMode(){return this.chargeTemplate?.chargemode.instant_charging.limit.selected??"none"}set instantChargeLimitMode(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.instant_charging.limit.selected=t,dt(this.id))}get instantTargetSoc(){return this.chargeTemplate?.chargemode.instant_charging.limit.soc??0}set instantTargetSoc(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.instant_charging.limit.soc=t,dt(this.id))}get instantMaxEnergy(){return this.chargeTemplate?.chargemode.instant_charging.limit.amount??0}set instantMaxEnergy(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.instant_charging.limit.amount=t,dt(this.id))}get instantTargetPhases(){return this.chargeTemplate?.chargemode.instant_charging.phases_to_use??0}set instantTargetPhases(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.instant_charging.phases_to_use=t,dt(this.id))}get pvMinCurrent(){return this.chargeTemplate?.chargemode.pv_charging.min_current??0}set pvMinCurrent(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.min_current=t,dt(this.id))}get pvMinSoc(){return this.chargeTemplate?.chargemode.pv_charging.min_soc??0}set pvMinSoc(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.min_soc=t,dt(this.id))}get pvMinSocCurrent(){return this.chargeTemplate?.chargemode.pv_charging.min_soc_current??0}set pvMinSocCurrent(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.min_soc_current=t,dt(this.id))}set pvMinSocPhases(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.phases_to_use_min_soc=t,dt(this.id))}get pvMinSocPhases(){return this.chargeTemplate?.chargemode.pv_charging.phases_to_use_min_soc??0}get pvChargeLimitMode(){return this.chargeTemplate?.chargemode.pv_charging.limit.selected??"none"}set pvChargeLimitMode(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.limit.selected=t,dt(this.id))}get pvTargetSoc(){return this.chargeTemplate?.chargemode.pv_charging.limit.soc??0}set pvTargetSoc(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.limit.soc=t,dt(this.id))}get pvMaxEnergy(){return this.chargeTemplate?.chargemode.pv_charging.limit.amount??0}set pvMaxEnergy(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.limit.amount=t,dt(this.id))}get pvTargetPhases(){return this.chargeTemplate?.chargemode.pv_charging.phases_to_use??0}set pvTargetPhases(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.phases_to_use=t,dt(this.id))}get ecoMinCurrent(){return this.chargeTemplate?.chargemode.eco_charging.current??0}set ecoMinCurrent(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.eco_charging.current=t,dt(this.id))}get ecoTargetPhases(){return this.chargeTemplate?.chargemode.eco_charging.phases_to_use??0}set ecoTargetPhases(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.eco_charging.phases_to_use=t,dt(this.id))}get ecoChargeLimitMode(){return this.chargeTemplate?.chargemode.eco_charging.limit.selected??"none"}set ecoChargeLimitMode(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.eco_charging.limit.selected=t,dt(this.id))}get ecoTargetSoc(){return this.chargeTemplate?.chargemode.eco_charging.limit.soc??0}set ecoTargetSoc(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.eco_charging.limit.soc=t,dt(this.id))}get ecoMaxEnergy(){return this.chargeTemplate?.chargemode.eco_charging.limit.amount??0}set ecoMaxEnergy(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.eco_charging.limit.amount=t,dt(this.id))}get etMaxPrice(){return(this.chargeTemplate?.chargemode.eco_charging.max_price??0)*1e5}set etMaxPrice(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.eco_charging.max_price=Math.ceil(t*1e3)/1e8,dt(this.id))}get etActive(){return this.chargeTemplate&&this.chargeTemplate.chargemode.selected=="eco_charging"}get realCurrent(){switch(this.phasesInUse){case 0:return 0;case 1:return this.currents[0];case 2:return(this.currents[0]+this.currents[1])/2;case 3:return(this.currents[0]+this.currents[1]+this.currents[2])/3;default:return 0}}toPowerItem(){return{name:this.name,power:this.power,energy:this.dailyYield,energyPv:this.energyPv,energyBat:this.energyBat,pvPercentage:this.pvPercentage,color:this.color,icon:this.icon}}};class CR{id;name="";_chargeTemplateId=0;_evTemplateId=0;tags=[];config={};soc=0;range=0;_etActive=!1;_etMaxPrice=20;constructor(t){this.id=t}get chargeTemplateId(){return this._chargeTemplateId}set chargeTemplateId(t){this._chargeTemplateId=t,zo("vhChargeTemplateId",t,this.id)}updateChargeTemplateId(t){this._chargeTemplateId=t}get evTemplateId(){return this._evTemplateId}set evTemplateId(t){this._evTemplateId=t,zo("vhEvTemplateId",t,this.id)}updateEvTemplateId(t){this._evTemplateId=t}get chargepoint(){for(const t of Object.values(Ve))if(t.connectedVehicle==this.id)return t}}var To=(e=>(e.instant_charging="instant_charging",e.pv_charging="pv_charging",e.scheduled_charging="scheduled_charging",e.eco_charging="eco_charging",e.stop="stop",e))(To||{});const Ve=mt({}),Tt=mt({}),kR=mt({}),OR=mt({});function MR(e){e in Ve||(Ve[e]=new IR(e),Ve[e].color="var(--color-cp"+(Object.values(Ve).length-1)+")")}function PR(){Object.keys(Ve).forEach(e=>{delete Ve[parseInt(e)]})}const YE={cpLock:"openWB/set/chargepoint/%/set/manual_lock",chargeMode:"openWB/set/vehicle/template/charge_template/%/chargemode/selected",cpPriority:"openWB/set/vehicle/template/charge_template/%/prio",cpTimedCharging:"openWB/set/vehicle/template/charge_template/%/time_charging/active",cpTimedPlanActive:"openWB/set/vehicle/template/charge_template/%/time_charging/plans/@/active",cpScheduledPlanActive:"openWB/set/vehicle/template/charge_template/%/chargemode/scheduled_charging/plans/@/active",pvBatteryPriority:"openWB/set/general/chargemode_config/pv_charging/bat_mode",cpVehicle:"openWB/set/chargepoint/%/config/ev",cpInstantChargeLimitMode:"openWB/set/vehicle/template/charge_template/%/chargemode/instant_charging/limit/selected",cpInstantTargetCurrent:"openWB/set/vehicle/template/charge_template/%/chargemode/instant_charging/current",cpInstantTargetSoc:"openWB/set/vehicle/template/charge_template/%/chargemode/instant_charging/limit/soc",cpInstantMaxEnergy:"openWB/set/vehicle/template/charge_template/%/chargemode/instant_charging/limit/amount",cpPvFeedInLimit:"openWB/set/vehicle/template/charge_template/%/chargemode/pv_charging/feed_in_limit",cpPvMinCurrent:"openWB/set/vehicle/template/charge_template/%/chargemode/pv_charging/min_current",cpPvMaxSoc:"openWB/set/vehicle/template/charge_template/%/chargemode/pv_charging/max_soc",cpPvMinSoc:"openWB/set/vehicle/template/charge_template/%/chargemode/pv_charging/min_soc",cpPvMinSocCurrent:"openWB/set/vehicle/template/charge_template/%/chargemode/pv_charging/min_soc_current",cpEtMaxPrice:"openWB/set/vehicle/template/charge_template/%/et/max_price",vhChargeTemplateId:"openWB/set/vehicle/%/charge_template",vhEvTemplateId:"openWB/set/vehicle/%/ev_template",shSetManual:"openWB/set/LegacySmartHome/config/set/Devices/%/mode",shSwitchOn:"openWB/set/LegacySmartHome/config/set/Devices/%/device_manual_control",socUpdate:"openWB/set/vehicle/%/get/force_soc_update",setSoc:"openWB/set/vehicle/%/soc_module/calculated_soc_state/manual_soc",priceCharging:"openWB/set/vehicle/template/charge_template/%/et/active",chargeTemplate:"openWB/set/chargepoint/%/set/charge_template"};function zo(e,t,r=0,n=void 0){if(isNaN(r)){console.warn("Invalid index");return}let i=YE[e];if(!i){console.warn("No topic for update type "+e);return}i=i.replace("%",String(r)),n!=null&&(i=i.replace("@",String(n))),typeof t==="number"?nu(i,JSON.stringify(+t)):nu(i,JSON.stringify(t))}function ji(e,t={}){console.log("send command "+e+" "+JSON.stringify(t)),nu(`openWB/set/command/${lg()}/todo`,JSON.stringify({command:e,data:t}))}function dt(e){nu(YE.chargeTemplate.replace("%",String(e)),JSON.stringify(Ve[e].chargeTemplate))}class RR{batterySoc=0;isBatteryConfigured=!0;chargeMode="0";_pvBatteryPriority="ev_mode";displayLiveGraph=!0;isEtEnabled=!0;etMaxPrice=0;etCurrentPrice=0;cpDailyExported=0;evuId=0;etProvider="";country="de";ipAddress="";systemTime=0;version="";versionDetails="";devBranch="";get pvBatteryPriority(){return this._pvBatteryPriority}set pvBatteryPriority(t){this._pvBatteryPriority=t,zo("pvBatteryPriority",t)}updatePvBatteryPriority(t){this._pvBatteryPriority=t}}const NR=[["EV","ev_mode"],["Speicher","bat_mode"],["MinSoc","min_soc_bat_mode"]],Kt=mt({evuIn:{name:"Netz",color:"var(--color-evu)",icon:""},pv:{name:"PV",color:"var(--color-pv",icon:""},batOut:{name:"Bat >",color:"var(--color-battery)",icon:""},evuOut:{name:"Export",color:"var(--color-export)",icon:""},charging:{name:"Laden",color:"var(--color-charging)",icon:""},devices:{name:"Geräte",color:"var(--color-devices)",icon:""},batIn:{name:"> Bat",color:"var(--color-battery)",icon:""},house:{name:"Haus",color:"var(--color-house)",icon:""},cp1:{name:"Ladepunkt",color:"var(--color-cp1)",icon:"Ladepunkt"},cp2:{name:"Ladepunkt",color:"var(--color-cp2)",icon:"Ladepunkt"},cp3:{name:"Ladepunkt",color:"var(--color-cp3)",icon:"Ladepunkt"},cp4:{name:"Ladepunkt",color:"var(--color-cp4)",icon:"Ladepunkt"},cp5:{name:"Ladepunkt",color:"var(--color-cp5)",icon:"Ladepunkt"},cp6:{name:"Ladepunkt",color:"var(--color-cp6)",icon:"Ladepunkt"},cp7:{name:"Ladepunkt",color:"var(--color-cp7)",icon:"Ladepunkt"},cp8:{name:"Ladepunkt",color:"var(--color-cp8)",icon:"Ladepunkt"},sh1:{name:"Gerät",color:"var(--color-sh1)",icon:"Gerät"},sh2:{name:"Gerät",color:"var(--color-sh2)",icon:"Gerät"},sh3:{name:"Gerät",color:"var(--color-sh3)",icon:"Gerät"},sh4:{name:"Gerät",color:"var(--color-sh4)",icon:"Gerät"},sh5:{name:"Gerät",color:"var(--color-sh5)",icon:"Gerät"},sh6:{name:"Gerät",color:"var(--color-sh6)",icon:"Gerät"},sh7:{name:"Gerät",color:"var(--color-sh7)",icon:"Gerät"},sh8:{name:"Gerät",color:"var(--color-sh8)",icon:"Gerät"},sh9:{name:"Gerät",color:"var(--color-sh9)",icon:"Gerät"}});class QE{_items={};constructor(){this.addItem("evuIn"),this.addItem("pv"),this.addItem("batOut"),this.addItem("evuOut"),this.addItem("charging"),this.addItem("devices"),this.addItem("batIn"),this.addItem("house")}get items(){return this._items}keys(){return Object.keys(this._items)}values(){return Object.values(this._items)}addItem(t){this._items[t]=kn(t)}setEnergy(t,r){this.keys().includes(t)||this.addItem(t),this._items[t].energy=r}setEnergyPv(t,r){this.keys().includes(t)||this.addItem(t),this._items[t].energyPv=r}setEnergyBat(t,r){this.keys().includes(t)||this.addItem(t),this._items[t].energyBat=r}setPvPercentage(t,r){this.keys().includes(t)||this.addItem(t),this._items[t].pvPercentage=r}calculateHouseEnergy(){this._items.house.energy=this._items.evuIn.energy+this._items.pv.energy+this._items.batOut.energy-this._items.evuOut.energy-this._items.batIn.energy-this._items.charging.energy-this._items.devices.energy}}let He=new QE;function ug(){He=new QE}const ot=mt({evuIn:kn("evuIn"),pv:kn("pv"),batOut:kn("batOut")}),Qe=mt({evuOut:kn("evuOut"),charging:kn("charging"),devices:kn("devices"),batIn:kn("batIn"),house:kn("house")}),ht=mt(new RR),iu=zt(!1);function kn(e){return{name:Kt[e]?Kt[e].name:"item",power:0,energy:0,energyPv:0,energyBat:0,pvPercentage:0,color:Kt[e]?Kt[e].color:"var(--color-charging)",icon:Kt[e]?Kt[e].icon:""}}const Mt=mt({active:!1,locked:!0,usePin:!1,code:"",timeout:60,localCpOnly:!1});function $o(){Mt.usePin&&Mt.locked?new hn("#numberpad").toggle():(Mt.locked=!1,setTimeout(()=>{Mt.locked=!0},Mt.timeout*1e3))}function LR(e){return e==Mt.code}const Gb=zt(new Date),BR={class:"scaled"},DR=Ye({__name:"DisplayButton",props:{icon:{},bgcolor:{},color:{}},emits:["click"],setup(e,{emit:t}){const r=e,n=t;function i(){n("click",!0)}return(o,a)=>(Se(),Re("div",{style:xt({"background-color":r.bgcolor?r.bgcolor:"var(--color-bg)",color:r.color?r.color:"var(--color-title)"}),class:"displaybutton rounded-pill",type:"button",onClick:i},[r.icon?(Se(),Re("span",{key:0,class:It(["fas me-2 scaled",r.icon])},null,2)):We("",!0),ye("span",BR,[kr(o.$slots,"default",{},void 0)])],4))}}),rt=(e,t)=>{const r=e.__vccOpts||e;for(const[n,i]of t)r[n]=i;return r},Dr=rt(DR,[["__scopeId","data-v-0f8aebee"]]);function Rl(e,t){return e==null||t==null?NaN:et?1:e>=t?0:NaN}function $R(e,t){return e==null||t==null?NaN:te?1:t>=e?0:NaN}function cg(e){let t,r,n;e.length!==2?(t=Rl,r=(s,l)=>Rl(e(s),l),n=(s,l)=>e(s)-l):(t=e===Rl||e===$R?e:UR,r=e,n=e);function i(s,l,u=0,c=s.length){if(u>>1;r(s[f],l)<0?u=f+1:c=f}while(u>>1;r(s[f],l)<=0?u=f+1:c=f}while(uu&&n(s[f-1],l)>-n(s[f],l)?f-1:f}return{left:i,center:a,right:o}}function UR(){return 0}function FR(e){return e===null?NaN:+e}const jR=cg(Rl),WR=jR.right;cg(FR).center;function Zi(e,t){let r,n;if(t===void 0)for(const i of e)i!=null&&(r===void 0?i>=i&&(r=n=i):(r>i&&(r=i),n=o&&(r=n=o):(r>o&&(r=o),n=GR?10:o>=KR?5:o>=zR?2:1;let s,l,u;return i<0?(u=Math.pow(10,-i)/a,s=Math.round(e*u),l=Math.round(t*u),s/ut&&--l,u=-u):(u=Math.pow(10,i)*a,s=Math.round(e/u),l=Math.round(t/u),s*ut&&--l),l0))return[];if(e===t)return[e];const n=t=i))return[];const s=o-i+1,l=new Array(s);if(n)if(a<0)for(let u=0;u=n)&&(r=n);else{let n=-1;for(let i of e)(i=t(i,++n,e))!=null&&(r=i)&&(r=i)}return r}function JR(e,t,r){e=+e,t=+t,r=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((t-e)/r))|0,o=new Array(i);++n+e(t)}function rN(e,t){return t=Math.max(0,e.bandwidth()-t*2)/2,e.round()&&(t=Math.round(t)),r=>+e(r)+t}function nN(){return!this.__axis}function Xu(e,t){var r=[],n=null,i=null,o=6,a=6,s=3,l=typeof window<"u"&&window.devicePixelRatio>1?0:.5,u=e===Nl||e===Ms?-1:1,c=e===Ms||e===Ll?"x":"y",f=e===Nl||e===Zd?ZR:eN;function h(d){var g=n??(t.ticks?t.ticks.apply(t,r):t.domain()),b=i??(t.tickFormat?t.tickFormat.apply(t,r):XR),y=Math.max(o,0)+s,_=t.range(),m=+_[0]+l,w=+_[_.length-1]+l,S=(t.bandwidth?rN:tN)(t.copy(),l),E=d.selection?d.selection():d,T=E.selectAll(".domain").data([null]),I=E.selectAll(".tick").data(g,t).order(),R=I.exit(),K=I.enter().append("g").attr("class","tick"),P=I.select("line"),U=I.select("text");T=T.merge(T.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),I=I.merge(K),P=P.merge(K.append("line").attr("stroke","currentColor").attr(c+"2",u*o)),U=U.merge(K.append("text").attr("fill","currentColor").attr(c,u*y).attr("dy",e===Nl?"0em":e===Zd?"0.71em":"0.32em")),d!==E&&(T=T.transition(d),I=I.transition(d),P=P.transition(d),U=U.transition(d),R=R.transition(d).attr("opacity",Yb).attr("transform",function(M){return isFinite(M=S(M))?f(M+l):this.getAttribute("transform")}),K.attr("opacity",Yb).attr("transform",function(M){var D=this.parentNode.__axis;return f((D&&isFinite(D=D(M))?D:S(M))+l)})),R.remove(),T.attr("d",e===Ms||e===Ll?a?"M"+u*a+","+m+"H"+l+"V"+w+"H"+u*a:"M"+l+","+m+"V"+w:a?"M"+m+","+u*a+"V"+l+"H"+w+"V"+u*a:"M"+m+","+l+"H"+w),I.attr("opacity",1).attr("transform",function(M){return f(S(M)+l)}),P.attr(c+"2",u*o),U.attr(c,u*y).text(b),E.filter(nN).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",e===Ll?"start":e===Ms?"end":"middle"),E.each(function(){this.__axis=S})}return h.scale=function(d){return arguments.length?(t=d,h):t},h.ticks=function(){return r=Array.from(arguments),h},h.tickArguments=function(d){return arguments.length?(r=d==null?[]:Array.from(d),h):r.slice()},h.tickValues=function(d){return arguments.length?(n=d==null?null:Array.from(d),h):n&&n.slice()},h.tickFormat=function(d){return arguments.length?(i=d,h):i},h.tickSize=function(d){return arguments.length?(o=a=+d,h):o},h.tickSizeInner=function(d){return arguments.length?(o=+d,h):o},h.tickSizeOuter=function(d){return arguments.length?(a=+d,h):a},h.tickPadding=function(d){return arguments.length?(s=+d,h):s},h.offset=function(d){return arguments.length?(l=+d,h):l},h}function iN(e){return Xu(Nl,e)}function oN(e){return Xu(Ll,e)}function Bl(e){return Xu(Zd,e)}function Zu(e){return Xu(Ms,e)}var sN={value:()=>{}};function JE(){for(var e=0,t=arguments.length,r={},n;e=0&&(n=r.slice(i+1),r=r.slice(0,i)),r&&!t.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:n}})}Dl.prototype=JE.prototype={constructor:Dl,on:function(e,t){var r=this._,n=aN(e+"",r),i,o=-1,a=n.length;if(arguments.length<2){for(;++o0)for(var r=new Array(i),n=0,i,o;n=0&&(t=e.slice(0,r))!=="xmlns"&&(e=e.slice(r+1)),Jb.hasOwnProperty(t)?{space:Jb[t],local:e}:e}function uN(e){return function(){var t=this.ownerDocument,r=this.namespaceURI;return r===ep&&t.documentElement.namespaceURI===ep?t.createElement(e):t.createElementNS(r,e)}}function cN(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function XE(e){var t=ec(e);return(t.local?cN:uN)(t)}function fN(){}function fg(e){return e==null?fN:function(){return this.querySelector(e)}}function hN(e){typeof e!="function"&&(e=fg(e));for(var t=this._groups,r=t.length,n=new Array(r),i=0;i=w&&(w=m+1);!(E=y[w])&&++w=0;)(a=n[i])&&(o&&a.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(a,o),o=a);return this}function DN(e){e||(e=$N);function t(f,h){return f&&h?e(f.__data__,h.__data__):!f-!h}for(var r=this._groups,n=r.length,i=new Array(n),o=0;ot?1:e>=t?0:NaN}function UN(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function FN(){return Array.from(this)}function jN(){for(var e=this._groups,t=0,r=e.length;t1?this.each((t==null?XN:typeof t=="function"?e2:ZN)(e,t,r??"")):Yo(this.node(),e)}function Yo(e,t){return e.style.getPropertyValue(t)||n1(e).getComputedStyle(e,null).getPropertyValue(t)}function r2(e){return function(){delete this[e]}}function n2(e,t){return function(){this[e]=t}}function i2(e,t){return function(){var r=t.apply(this,arguments);r==null?delete this[e]:this[e]=r}}function o2(e,t){return arguments.length>1?this.each((t==null?r2:typeof t=="function"?i2:n2)(e,t)):this.node()[e]}function i1(e){return e.trim().split(/^|\s+/)}function hg(e){return e.classList||new o1(e)}function o1(e){this._node=e,this._names=i1(e.getAttribute("class")||"")}o1.prototype={add:function(e){var t=this._names.indexOf(e);t<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function s1(e,t){for(var r=hg(e),n=-1,i=t.length;++n=0&&(r=t.slice(n+1),t=t.slice(0,n)),{type:t,name:r}})}function R2(e){return function(){var t=this.__on;if(t){for(var r=0,n=-1,i=t.length,o;r>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):r===8?Ka(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):r===4?Ka(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=W2.exec(e))?new fr(t[1],t[2],t[3],1):(t=V2.exec(e))?new fr(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=H2.exec(e))?Ka(t[1],t[2],t[3],t[4]):(t=q2.exec(e))?Ka(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=G2.exec(e))?i_(t[1],t[2]/100,t[3]/100,1):(t=K2.exec(e))?i_(t[1],t[2]/100,t[3]/100,t[4]):Xb.hasOwnProperty(e)?t_(Xb[e]):e==="transparent"?new fr(NaN,NaN,NaN,0):null}function t_(e){return new fr(e>>16&255,e>>8&255,e&255,1)}function Ka(e,t,r,n){return n<=0&&(e=t=r=NaN),new fr(e,t,r,n)}function Q2(e){return e instanceof xa||(e=eo(e)),e?(e=e.rgb(),new fr(e.r,e.g,e.b,e.opacity)):new fr}function tp(e,t,r,n){return arguments.length===1?Q2(e):new fr(e,t,r,n??1)}function fr(e,t,r,n){this.r=+e,this.g=+t,this.b=+r,this.opacity=+n}dg(fr,tp,c1(xa,{brighter(e){return e=e==null?au:Math.pow(au,e),new fr(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?na:Math.pow(na,e),new fr(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new fr(Yi(this.r),Yi(this.g),Yi(this.b),lu(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:r_,formatHex:r_,formatHex8:J2,formatRgb:n_,toString:n_}));function r_(){return`#${Wi(this.r)}${Wi(this.g)}${Wi(this.b)}`}function J2(){return`#${Wi(this.r)}${Wi(this.g)}${Wi(this.b)}${Wi((isNaN(this.opacity)?1:this.opacity)*255)}`}function n_(){const e=lu(this.opacity);return`${e===1?"rgb(":"rgba("}${Yi(this.r)}, ${Yi(this.g)}, ${Yi(this.b)}${e===1?")":`, ${e})`}`}function lu(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Yi(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Wi(e){return e=Yi(e),(e<16?"0":"")+e.toString(16)}function i_(e,t,r,n){return n<=0?e=t=r=NaN:r<=0||r>=1?e=t=NaN:t<=0&&(e=NaN),new Ur(e,t,r,n)}function f1(e){if(e instanceof Ur)return new Ur(e.h,e.s,e.l,e.opacity);if(e instanceof xa||(e=eo(e)),!e)return new Ur;if(e instanceof Ur)return e;e=e.rgb();var t=e.r/255,r=e.g/255,n=e.b/255,i=Math.min(t,r,n),o=Math.max(t,r,n),a=NaN,s=o-i,l=(o+i)/2;return s?(t===o?a=(r-n)/s+(r0&&l<1?0:a,new Ur(a,s,l,e.opacity)}function X2(e,t,r,n){return arguments.length===1?f1(e):new Ur(e,t,r,n??1)}function Ur(e,t,r,n){this.h=+e,this.s=+t,this.l=+r,this.opacity=+n}dg(Ur,X2,c1(xa,{brighter(e){return e=e==null?au:Math.pow(au,e),new Ur(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?na:Math.pow(na,e),new Ur(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*t,i=2*r-n;return new fr(Sf(e>=240?e-240:e+120,i,n),Sf(e,i,n),Sf(e<120?e+240:e-120,i,n),this.opacity)},clamp(){return new Ur(o_(this.h),za(this.s),za(this.l),lu(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=lu(this.opacity);return`${e===1?"hsl(":"hsla("}${o_(this.h)}, ${za(this.s)*100}%, ${za(this.l)*100}%${e===1?")":`, ${e})`}`}}));function o_(e){return e=(e||0)%360,e<0?e+360:e}function za(e){return Math.max(0,Math.min(1,e||0))}function Sf(e,t,r){return(e<60?t+(r-t)*e/60:e<180?r:e<240?t+(r-t)*(240-e)/60:t)*255}const pg=e=>()=>e;function Z2(e,t){return function(r){return e+r*t}}function eL(e,t,r){return e=Math.pow(e,r),t=Math.pow(t,r)-e,r=1/r,function(n){return Math.pow(e+n*t,r)}}function tL(e){return(e=+e)==1?h1:function(t,r){return r-t?eL(t,r,e):pg(isNaN(t)?r:t)}}function h1(e,t){var r=t-e;return r?Z2(e,r):pg(isNaN(e)?t:e)}const uu=(function e(t){var r=tL(t);function n(i,o){var a=r((i=tp(i)).r,(o=tp(o)).r),s=r(i.g,o.g),l=r(i.b,o.b),u=h1(i.opacity,o.opacity);return function(c){return i.r=a(c),i.g=s(c),i.b=l(c),i.opacity=u(c),i+""}}return n.gamma=e,n})(1);function rL(e,t){t||(t=[]);var r=e?Math.min(t.length,e.length):0,n=t.slice(),i;return function(o){for(i=0;ir&&(o=t.slice(r,o),s[a]?s[a]+=o:s[++a]=o),(n=n[0])===(i=i[0])?s[a]?s[a]+=i:s[++a]=i:(s[++a]=null,l.push({i:a,x:$r(n,i)})),r=xf.lastIndex;return r180?c+=360:c-u>180&&(u+=360),h.push({i:f.push(i(f)+"rotate(",null,n)-2,x:$r(u,c)})):c&&f.push(i(f)+"rotate("+c+n)}function s(u,c,f,h){u!==c?h.push({i:f.push(i(f)+"skewX(",null,n)-2,x:$r(u,c)}):c&&f.push(i(f)+"skewX("+c+n)}function l(u,c,f,h,d,g){if(u!==f||c!==h){var b=d.push(i(d)+"scale(",null,",",null,")");g.push({i:b-4,x:$r(u,f)},{i:b-2,x:$r(c,h)})}else(f!==1||h!==1)&&d.push(i(d)+"scale("+f+","+h+")")}return function(u,c){var f=[],h=[];return u=e(u),c=e(c),o(u.translateX,u.translateY,c.translateX,c.translateY,f,h),a(u.rotate,c.rotate,f,h),s(u.skewX,c.skewX,f,h),l(u.scaleX,u.scaleY,c.scaleX,c.scaleY,f,h),u=c=null,function(d){for(var g=-1,b=h.length,y;++g=0&&e._call.call(void 0,t),e=e._next;--Qo}function a_(){to=(fu=oa.now())+tc,Qo=Ps=0;try{gL()}finally{Qo=0,yL(),to=0}}function mL(){var e=oa.now(),t=e-fu;t>m1&&(tc-=t,fu=e)}function yL(){for(var e,t=cu,r,n=1/0;t;)t._call?(n>t._time&&(n=t._time),e=t,t=t._next):(r=t._next,t._next=null,t=e?e._next=r:cu=r);Rs=e,ip(n)}function ip(e){if(!Qo){Ps&&(Ps=clearTimeout(Ps));var t=e-to;t>24?(e<1/0&&(Ps=setTimeout(a_,e-oa.now()-tc)),vs&&(vs=clearInterval(vs))):(vs||(fu=oa.now(),vs=setInterval(mL,m1)),Qo=1,y1(a_))}}function l_(e,t,r){var n=new hu;return t=t==null?0:+t,n.restart(i=>{n.stop(),e(i+t)},t,r),n}var bL=JE("start","end","cancel","interrupt"),_L=[],_1=0,u_=1,op=2,$l=3,c_=4,sp=5,Ul=6;function rc(e,t,r,n,i,o){var a=e.__transition;if(!a)e.__transition={};else if(r in a)return;vL(e,r,{name:t,index:n,group:i,on:bL,tween:_L,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:_1})}function yg(e,t){var r=zr(e,t);if(r.state>_1)throw new Error("too late; already scheduled");return r}function pn(e,t){var r=zr(e,t);if(r.state>$l)throw new Error("too late; already running");return r}function zr(e,t){var r=e.__transition;if(!r||!(r=r[t]))throw new Error("transition not found");return r}function vL(e,t,r){var n=e.__transition,i;n[t]=r,r.timer=b1(o,0,r.time);function o(u){r.state=u_,r.timer.restart(a,r.delay,r.time),r.delay<=u&&a(u-r.delay)}function a(u){var c,f,h,d;if(r.state!==u_)return l();for(c in n)if(d=n[c],d.name===r.name){if(d.state===$l)return l_(a);d.state===c_?(d.state=Ul,d.timer.stop(),d.on.call("interrupt",e,e.__data__,d.index,d.group),delete n[c]):+cop&&n.state=0&&(t=t.slice(0,r)),!t||t==="start"})}function JL(e,t,r){var n,i,o=QL(t)?yg:pn;return function(){var a=o(this,e),s=a.on;s!==n&&(i=(n=s).copy()).on(t,r),a.on=i}}function XL(e,t){var r=this._id;return arguments.length<2?zr(this.node(),r).on.on(e):this.each(JL(r,e,t))}function ZL(e){return function(){var t=this.parentNode;for(var r in this.__transition)if(+r!==e)return;t&&t.removeChild(this)}}function eB(){return this.on("end.remove",ZL(this._id))}function tB(e){var t=this._name,r=this._id;typeof e!="function"&&(e=fg(e));for(var n=this._groups,i=n.length,o=new Array(i),a=0;a+e;function EB(e){return((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2}var SB={time:null,delay:0,duration:250,ease:EB};function xB(e,t){for(var r;!(r=e.__transition)||!(r=r[t]);)if(!(e=e.parentNode))throw new Error(`transition ${t} not found`);return r}function AB(e){var t,r;e instanceof Hn?(t=e._id,e=e._name):(t=E1(),(r=SB).time=mg(),e=e==null?null:e+"");for(var n=this._groups,i=n.length,o=0;o=0))throw new Error(`invalid digits: ${e}`);if(t>15)return S1;const r=10**t;return function(n){this._+=n[0];for(let i=1,o=n.length;iPi)if(!(Math.abs(f*l-u*c)>Pi)||!o)this._append`L${this._x1=t},${this._y1=r}`;else{let d=n-a,g=i-s,b=l*l+u*u,y=d*d+g*g,_=Math.sqrt(b),m=Math.sqrt(h),w=o*Math.tan((ap-Math.acos((b+h-y)/(2*_*m)))/2),S=w/m,E=w/_;Math.abs(S-1)>Pi&&this._append`L${t+S*c},${r+S*f}`,this._append`A${o},${o},0,0,${+(f*d>c*g)},${this._x1=t+E*l},${this._y1=r+E*u}`}}arc(t,r,n,i,o,a){if(t=+t,r=+r,n=+n,a=!!a,n<0)throw new Error(`negative radius: ${n}`);let s=n*Math.cos(i),l=n*Math.sin(i),u=t+s,c=r+l,f=1^a,h=a?i-o:o-i;this._x1===null?this._append`M${u},${c}`:(Math.abs(this._x1-u)>Pi||Math.abs(this._y1-c)>Pi)&&this._append`L${u},${c}`,n&&(h<0&&(h=h%lp+lp),h>TB?this._append`A${n},${n},0,1,${f},${t-s},${r-l}A${n},${n},0,1,${f},${this._x1=u},${this._y1=c}`:h>Pi&&this._append`A${n},${n},0,${+(h>=ap)},${f},${this._x1=t+n*Math.cos(o)},${this._y1=r+n*Math.sin(o)}`)}rect(t,r,n,i){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}}function kB(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function du(e,t){if(!isFinite(e)||e===0)return null;var r=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"),n=e.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+e.slice(r+1)]}function Jo(e){return e=du(Math.abs(e)),e?e[1]:NaN}function OB(e,t){return function(r,n){for(var i=r.length,o=[],a=0,s=e[0],l=0;i>0&&s>0&&(l+s+1>n&&(s=Math.max(1,n-l)),o.push(r.substring(i-=s,i+s)),!((l+=s+1)>n));)s=e[a=(a+1)%e.length];return o.reverse().join(t)}}function MB(e){return function(t){return t.replace(/[0-9]/g,function(r){return e[+r]})}}var PB=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function pu(e){if(!(t=PB.exec(e)))throw new Error("invalid format: "+e);var t;return new _g({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}pu.prototype=_g.prototype;function _g(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}_g.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function RB(e){e:for(var t=e.length,r=1,n=-1,i;r0&&(n=0);break}return n>0?e.slice(0,n)+e.slice(i+1):e}var gu;function NB(e,t){var r=du(e,t);if(!r)return gu=void 0,e.toPrecision(t);var n=r[0],i=r[1],o=i-(gu=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,a=n.length;return o===a?n:o>a?n+new Array(o-a+1).join("0"):o>0?n.slice(0,o)+"."+n.slice(o):"0."+new Array(1-o).join("0")+du(e,Math.max(0,t+o-1))[0]}function f_(e,t){var r=du(e,t);if(!r)return e+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}const h_={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:kB,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>f_(e*100,t),r:f_,s:NB,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function d_(e){return e}var p_=Array.prototype.map,g_=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function LB(e){var t=e.grouping===void 0||e.thousands===void 0?d_:OB(p_.call(e.grouping,Number),e.thousands+""),r=e.currency===void 0?"":e.currency[0]+"",n=e.currency===void 0?"":e.currency[1]+"",i=e.decimal===void 0?".":e.decimal+"",o=e.numerals===void 0?d_:MB(p_.call(e.numerals,String)),a=e.percent===void 0?"%":e.percent+"",s=e.minus===void 0?"−":e.minus+"",l=e.nan===void 0?"NaN":e.nan+"";function u(f,h){f=pu(f);var d=f.fill,g=f.align,b=f.sign,y=f.symbol,_=f.zero,m=f.width,w=f.comma,S=f.precision,E=f.trim,T=f.type;T==="n"?(w=!0,T="g"):h_[T]||(S===void 0&&(S=12),E=!0,T="g"),(_||d==="0"&&g==="=")&&(_=!0,d="0",g="=");var I=(h&&h.prefix!==void 0?h.prefix:"")+(y==="$"?r:y==="#"&&/[boxX]/.test(T)?"0"+T.toLowerCase():""),R=(y==="$"?n:/[%p]/.test(T)?a:"")+(h&&h.suffix!==void 0?h.suffix:""),K=h_[T],P=/[defgprs%]/.test(T);S=S===void 0?6:/[gprs]/.test(T)?Math.max(1,Math.min(21,S)):Math.max(0,Math.min(20,S));function U(M){var D=I,Q=R,le,me,fe;if(T==="c")Q=K(M)+Q,M="";else{M=+M;var J=M<0||1/M<0;if(M=isNaN(M)?l:K(Math.abs(M),S),E&&(M=RB(M)),J&&+M==0&&b!=="+"&&(J=!1),D=(J?b==="("?b:s:b==="-"||b==="("?"":b)+D,Q=(T==="s"&&!isNaN(M)&&gu!==void 0?g_[8+gu/3]:"")+Q+(J&&b==="("?")":""),P){for(le=-1,me=M.length;++lefe||fe>57){Q=(fe===46?i+M.slice(le+1):M.slice(le))+Q,M=M.slice(0,le);break}}}w&&!_&&(M=t(M,1/0));var de=D.length+M.length+Q.length,B=de>1)+D+M+Q+B.slice(de);break;default:M=B+D+M+Q;break}return o(M)}return U.toString=function(){return f+""},U}function c(f,h){var d=Math.max(-8,Math.min(8,Math.floor(Jo(h)/3)))*3,g=Math.pow(10,-d),b=u((f=pu(f),f.type="f",f),{suffix:g_[8+d/3]});return function(y){return b(g*y)}}return{format:u,formatPrefix:c}}var Qa,x1,A1;BB({thousands:",",grouping:[3],currency:["$",""]});function BB(e){return Qa=LB(e),x1=Qa.format,A1=Qa.formatPrefix,Qa}function DB(e){return Math.max(0,-Jo(Math.abs(e)))}function $B(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Jo(t)/3)))*3-Jo(Math.abs(e)))}function UB(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Jo(t)-Jo(e))+1}function nc(e,t){switch(arguments.length){case 0:break;case 1:this.range(e);break;default:this.range(t).domain(e);break}return this}const m_=Symbol("implicit");function T1(){var e=new Kb,t=[],r=[],n=m_;function i(o){let a=e.get(o);if(a===void 0){if(n!==m_)return n;e.set(o,a=t.push(o)-1)}return r[a%r.length]}return i.domain=function(o){if(!arguments.length)return t.slice();t=[],e=new Kb;for(const a of o)e.has(a)||e.set(a,t.push(a)-1);return i},i.range=function(o){return arguments.length?(r=Array.from(o),i):r.slice()},i.unknown=function(o){return arguments.length?(n=o,i):n},i.copy=function(){return T1(t,r).unknown(n)},nc.apply(i,arguments),i}function mu(){var e=T1().unknown(void 0),t=e.domain,r=e.range,n=0,i=1,o,a,s=!1,l=0,u=0,c=.5;delete e.unknown;function f(){var h=t().length,d=it&&(r=e,e=t,t=r),function(n){return Math.max(e,Math.min(t,n))}}function VB(e,t,r){var n=e[0],i=e[1],o=t[0],a=t[1];return i2?HB:VB,l=u=null,f}function f(h){return h==null||isNaN(h=+h)?o:(l||(l=s(e.map(n),t,r)))(n(a(h)))}return f.invert=function(h){return a(i((u||(u=s(t,e.map(n),$r)))(h)))},f.domain=function(h){return arguments.length?(e=Array.from(h,jB),c()):e.slice()},f.range=function(h){return arguments.length?(t=Array.from(h),c()):t.slice()},f.rangeRound=function(h){return t=Array.from(h),r=uL,c()},f.clamp=function(h){return arguments.length?(a=h?!0:Co,c()):a!==Co},f.interpolate=function(h){return arguments.length?(r=h,c()):r},f.unknown=function(h){return arguments.length?(o=h,f):o},function(h,d){return n=h,i=d,c()}}function C1(){return qB()(Co,Co)}function GB(e,t,r,n){var i=Xd(e,t,r),o;switch(n=pu(n??",f"),n.type){case"s":{var a=Math.max(Math.abs(e),Math.abs(t));return n.precision==null&&!isNaN(o=$B(i,a))&&(n.precision=o),A1(n,a)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(o=UB(i,Math.max(Math.abs(e),Math.abs(t))))&&(n.precision=o-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(o=DB(i))&&(n.precision=o-(n.type==="%")*2);break}}return x1(n)}function KB(e){var t=e.domain;return e.ticks=function(r){var n=t();return YR(n[0],n[n.length-1],r??10)},e.tickFormat=function(r,n){var i=t();return GB(i[0],i[i.length-1],r??10,n)},e.nice=function(r){r==null&&(r=10);var n=t(),i=0,o=n.length-1,a=n[i],s=n[o],l,u,c=10;for(s0;){if(u=Jd(a,s,r),u===l)return n[i]=a,n[o]=s,t(n);if(u>0)a=Math.floor(a/u)*u,s=Math.ceil(s/u)*u;else if(u<0)a=Math.ceil(a*u)/u,s=Math.floor(s*u)/u;else break;l=u}return e},e}function dn(){var e=C1();return e.copy=function(){return I1(e,dn())},nc.apply(e,arguments),KB(e)}function zB(e,t){e=e.slice();var r=0,n=e.length-1,i=e[r],o=e[n],a;return o(e(o=new Date(+o)),o),i.ceil=o=>(e(o=new Date(o-1)),t(o,1),e(o),o),i.round=o=>{const a=i(o),s=i.ceil(o);return o-a(t(o=new Date(+o),a==null?1:Math.floor(a)),o),i.range=(o,a,s)=>{const l=[];if(o=i.ceil(o),s=s==null?1:Math.floor(s),!(o0))return l;let u;do l.push(u=new Date(+o)),t(o,s),e(o);while(uPt(a=>{if(a>=a)for(;e(a),!o(a);)a.setTime(a-1)},(a,s)=>{if(a>=a)if(s<0)for(;++s<=0;)for(;t(a,-1),!o(a););else for(;--s>=0;)for(;t(a,1),!o(a););}),r&&(i.count=(o,a)=>(Af.setTime(+o),Tf.setTime(+a),e(Af),e(Tf),Math.floor(r(Af,Tf))),i.every=o=>(o=Math.floor(o),!isFinite(o)||!(o>0)?null:o>1?i.filter(n?a=>n(a)%o===0:a=>i.count(0,a)%o===0):i)),i}const yu=Pt(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);yu.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?Pt(t=>{t.setTime(Math.floor(t/e)*e)},(t,r)=>{t.setTime(+t+r*e)},(t,r)=>(r-t)/e):yu);yu.range;const Pn=1e3,Or=Pn*60,Rn=Or*60,qn=Rn*24,vg=qn*7,b_=qn*30,If=qn*365,ko=Pt(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*Pn)},(e,t)=>(t-e)/Pn,e=>e.getUTCSeconds());ko.range;const wg=Pt(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*Pn)},(e,t)=>{e.setTime(+e+t*Or)},(e,t)=>(t-e)/Or,e=>e.getMinutes());wg.range;const YB=Pt(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*Or)},(e,t)=>(t-e)/Or,e=>e.getUTCMinutes());YB.range;const Eg=Pt(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*Pn-e.getMinutes()*Or)},(e,t)=>{e.setTime(+e+t*Rn)},(e,t)=>(t-e)/Rn,e=>e.getHours());Eg.range;const QB=Pt(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*Rn)},(e,t)=>(t-e)/Rn,e=>e.getUTCHours());QB.range;const Aa=Pt(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*Or)/qn,e=>e.getDate()-1);Aa.range;const Sg=Pt(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/qn,e=>e.getUTCDate()-1);Sg.range;const JB=Pt(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/qn,e=>Math.floor(e/qn));JB.range;function fo(e){return Pt(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,r)=>{t.setDate(t.getDate()+r*7)},(t,r)=>(r-t-(r.getTimezoneOffset()-t.getTimezoneOffset())*Or)/vg)}const ic=fo(0),bu=fo(1),XB=fo(2),ZB=fo(3),Xo=fo(4),eD=fo(5),tD=fo(6);ic.range;bu.range;XB.range;ZB.range;Xo.range;eD.range;tD.range;function ho(e){return Pt(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCDate(t.getUTCDate()+r*7)},(t,r)=>(r-t)/vg)}const k1=ho(0),_u=ho(1),rD=ho(2),nD=ho(3),Zo=ho(4),iD=ho(5),oD=ho(6);k1.range;_u.range;rD.range;nD.range;Zo.range;iD.range;oD.range;const xg=Pt(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());xg.range;const sD=Pt(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());sD.range;const Gn=Pt(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());Gn.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:Pt(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,r)=>{t.setFullYear(t.getFullYear()+r*e)});Gn.range;const ro=Pt(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());ro.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:Pt(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCFullYear(t.getUTCFullYear()+r*e)});ro.range;function aD(e,t,r,n,i,o){const a=[[ko,1,Pn],[ko,5,5*Pn],[ko,15,15*Pn],[ko,30,30*Pn],[o,1,Or],[o,5,5*Or],[o,15,15*Or],[o,30,30*Or],[i,1,Rn],[i,3,3*Rn],[i,6,6*Rn],[i,12,12*Rn],[n,1,qn],[n,2,2*qn],[r,1,vg],[t,1,b_],[t,3,3*b_],[e,1,If]];function s(u,c,f){const h=cy).right(a,h);if(d===a.length)return e.every(Xd(u/If,c/If,f));if(d===0)return yu.every(Math.max(Xd(u,c,f),1));const[g,b]=a[h/a[d-1][2]53)return null;"w"in C||(C.w=1),"Z"in C?(N=kf(ws(C.y,0,1)),O=N.getUTCDay(),N=O>4||O===0?_u.ceil(N):_u(N),N=Sg.offset(N,(C.V-1)*7),C.y=N.getUTCFullYear(),C.m=N.getUTCMonth(),C.d=N.getUTCDate()+(C.w+6)%7):(N=Cf(ws(C.y,0,1)),O=N.getDay(),N=O>4||O===0?bu.ceil(N):bu(N),N=Aa.offset(N,(C.V-1)*7),C.y=N.getFullYear(),C.m=N.getMonth(),C.d=N.getDate()+(C.w+6)%7)}else("W"in C||"U"in C)&&("w"in C||(C.w="u"in C?C.u%7:"W"in C?1:0),O="Z"in C?kf(ws(C.y,0,1)).getUTCDay():Cf(ws(C.y,0,1)).getDay(),C.m=0,C.d="W"in C?(C.w+6)%7+C.W*7-(O+5)%7:C.w+C.U*7-(O+6)%7);return"Z"in C?(C.H+=C.Z/100|0,C.M+=C.Z%100,kf(C)):Cf(C)}}function R(V,q,z,C){for(var k=0,N=q.length,O=z.length,$,j;k=O)return-1;if($=q.charCodeAt(k++),$===37){if($=q.charAt(k++),j=E[$ in __?q.charAt(k++):$],!j||(C=j(V,z,C))<0)return-1}else if($!=z.charCodeAt(C++))return-1}return C}function K(V,q,z){var C=u.exec(q.slice(z));return C?(V.p=c.get(C[0].toLowerCase()),z+C[0].length):-1}function P(V,q,z){var C=d.exec(q.slice(z));return C?(V.w=g.get(C[0].toLowerCase()),z+C[0].length):-1}function U(V,q,z){var C=f.exec(q.slice(z));return C?(V.w=h.get(C[0].toLowerCase()),z+C[0].length):-1}function M(V,q,z){var C=_.exec(q.slice(z));return C?(V.m=m.get(C[0].toLowerCase()),z+C[0].length):-1}function D(V,q,z){var C=b.exec(q.slice(z));return C?(V.m=y.get(C[0].toLowerCase()),z+C[0].length):-1}function Q(V,q,z){return R(V,t,q,z)}function le(V,q,z){return R(V,r,q,z)}function me(V,q,z){return R(V,n,q,z)}function fe(V){return a[V.getDay()]}function J(V){return o[V.getDay()]}function de(V){return l[V.getMonth()]}function B(V){return s[V.getMonth()]}function ie(V){return i[+(V.getHours()>=12)]}function G(V){return 1+~~(V.getMonth()/3)}function se(V){return a[V.getUTCDay()]}function _e(V){return o[V.getUTCDay()]}function X(V){return l[V.getUTCMonth()]}function re(V){return s[V.getUTCMonth()]}function ee(V){return i[+(V.getUTCHours()>=12)]}function F(V){return 1+~~(V.getUTCMonth()/3)}return{format:function(V){var q=T(V+="",w);return q.toString=function(){return V},q},parse:function(V){var q=I(V+="",!1);return q.toString=function(){return V},q},utcFormat:function(V){var q=T(V+="",S);return q.toString=function(){return V},q},utcParse:function(V){var q=I(V+="",!0);return q.toString=function(){return V},q}}}var __={"-":"",_:" ",0:"0"},Dt=/^\s*\d+/,fD=/^%/,hD=/[\\^$*+?|[\]().{}]/g;function tt(e,t,r){var n=e<0?"-":"",i=(n?-e:e)+"",o=i.length;return n+(o[t.toLowerCase(),r]))}function pD(e,t,r){var n=Dt.exec(t.slice(r,r+1));return n?(e.w=+n[0],r+n[0].length):-1}function gD(e,t,r){var n=Dt.exec(t.slice(r,r+1));return n?(e.u=+n[0],r+n[0].length):-1}function mD(e,t,r){var n=Dt.exec(t.slice(r,r+2));return n?(e.U=+n[0],r+n[0].length):-1}function yD(e,t,r){var n=Dt.exec(t.slice(r,r+2));return n?(e.V=+n[0],r+n[0].length):-1}function bD(e,t,r){var n=Dt.exec(t.slice(r,r+2));return n?(e.W=+n[0],r+n[0].length):-1}function v_(e,t,r){var n=Dt.exec(t.slice(r,r+4));return n?(e.y=+n[0],r+n[0].length):-1}function w_(e,t,r){var n=Dt.exec(t.slice(r,r+2));return n?(e.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function _D(e,t,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(r,r+6));return n?(e.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function vD(e,t,r){var n=Dt.exec(t.slice(r,r+1));return n?(e.q=n[0]*3-3,r+n[0].length):-1}function wD(e,t,r){var n=Dt.exec(t.slice(r,r+2));return n?(e.m=n[0]-1,r+n[0].length):-1}function E_(e,t,r){var n=Dt.exec(t.slice(r,r+2));return n?(e.d=+n[0],r+n[0].length):-1}function ED(e,t,r){var n=Dt.exec(t.slice(r,r+3));return n?(e.m=0,e.d=+n[0],r+n[0].length):-1}function S_(e,t,r){var n=Dt.exec(t.slice(r,r+2));return n?(e.H=+n[0],r+n[0].length):-1}function SD(e,t,r){var n=Dt.exec(t.slice(r,r+2));return n?(e.M=+n[0],r+n[0].length):-1}function xD(e,t,r){var n=Dt.exec(t.slice(r,r+2));return n?(e.S=+n[0],r+n[0].length):-1}function AD(e,t,r){var n=Dt.exec(t.slice(r,r+3));return n?(e.L=+n[0],r+n[0].length):-1}function TD(e,t,r){var n=Dt.exec(t.slice(r,r+6));return n?(e.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function ID(e,t,r){var n=fD.exec(t.slice(r,r+1));return n?r+n[0].length:-1}function CD(e,t,r){var n=Dt.exec(t.slice(r));return n?(e.Q=+n[0],r+n[0].length):-1}function kD(e,t,r){var n=Dt.exec(t.slice(r));return n?(e.s=+n[0],r+n[0].length):-1}function x_(e,t){return tt(e.getDate(),t,2)}function OD(e,t){return tt(e.getHours(),t,2)}function MD(e,t){return tt(e.getHours()%12||12,t,2)}function PD(e,t){return tt(1+Aa.count(Gn(e),e),t,3)}function O1(e,t){return tt(e.getMilliseconds(),t,3)}function RD(e,t){return O1(e,t)+"000"}function ND(e,t){return tt(e.getMonth()+1,t,2)}function LD(e,t){return tt(e.getMinutes(),t,2)}function BD(e,t){return tt(e.getSeconds(),t,2)}function DD(e){var t=e.getDay();return t===0?7:t}function $D(e,t){return tt(ic.count(Gn(e)-1,e),t,2)}function M1(e){var t=e.getDay();return t>=4||t===0?Xo(e):Xo.ceil(e)}function UD(e,t){return e=M1(e),tt(Xo.count(Gn(e),e)+(Gn(e).getDay()===4),t,2)}function FD(e){return e.getDay()}function jD(e,t){return tt(bu.count(Gn(e)-1,e),t,2)}function WD(e,t){return tt(e.getFullYear()%100,t,2)}function VD(e,t){return e=M1(e),tt(e.getFullYear()%100,t,2)}function HD(e,t){return tt(e.getFullYear()%1e4,t,4)}function qD(e,t){var r=e.getDay();return e=r>=4||r===0?Xo(e):Xo.ceil(e),tt(e.getFullYear()%1e4,t,4)}function GD(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+tt(t/60|0,"0",2)+tt(t%60,"0",2)}function A_(e,t){return tt(e.getUTCDate(),t,2)}function KD(e,t){return tt(e.getUTCHours(),t,2)}function zD(e,t){return tt(e.getUTCHours()%12||12,t,2)}function YD(e,t){return tt(1+Sg.count(ro(e),e),t,3)}function P1(e,t){return tt(e.getUTCMilliseconds(),t,3)}function QD(e,t){return P1(e,t)+"000"}function JD(e,t){return tt(e.getUTCMonth()+1,t,2)}function XD(e,t){return tt(e.getUTCMinutes(),t,2)}function ZD(e,t){return tt(e.getUTCSeconds(),t,2)}function e$(e){var t=e.getUTCDay();return t===0?7:t}function t$(e,t){return tt(k1.count(ro(e)-1,e),t,2)}function R1(e){var t=e.getUTCDay();return t>=4||t===0?Zo(e):Zo.ceil(e)}function r$(e,t){return e=R1(e),tt(Zo.count(ro(e),e)+(ro(e).getUTCDay()===4),t,2)}function n$(e){return e.getUTCDay()}function i$(e,t){return tt(_u.count(ro(e)-1,e),t,2)}function o$(e,t){return tt(e.getUTCFullYear()%100,t,2)}function s$(e,t){return e=R1(e),tt(e.getUTCFullYear()%100,t,2)}function a$(e,t){return tt(e.getUTCFullYear()%1e4,t,4)}function l$(e,t){var r=e.getUTCDay();return e=r>=4||r===0?Zo(e):Zo.ceil(e),tt(e.getUTCFullYear()%1e4,t,4)}function u$(){return"+0000"}function T_(){return"%"}function I_(e){return+e}function C_(e){return Math.floor(+e/1e3)}var yo,sa,aa;c$({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function c$(e){return yo=cD(e),sa=yo.format,aa=yo.parse,yo.utcFormat,yo.utcParse,yo}function f$(e){return new Date(e)}function h$(e){return e instanceof Date?+e:+new Date(+e)}function N1(e,t,r,n,i,o,a,s,l,u){var c=C1(),f=c.invert,h=c.domain,d=u(".%L"),g=u(":%S"),b=u("%I:%M"),y=u("%I %p"),_=u("%a %d"),m=u("%b %d"),w=u("%B"),S=u("%Y");function E(T){return(l(T)1?0:e<-1?ua:Math.acos(e)}function O_(e){return e>=1?vu:e<=-1?-vu:Math.asin(e)}function Ag(e){let t=3;return e.digits=function(r){if(!arguments.length)return t;if(r==null)t=null;else{const n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);t=n}return e},()=>new CB(t)}function g$(e){return e.innerRadius}function m$(e){return e.outerRadius}function y$(e){return e.startAngle}function b$(e){return e.endAngle}function _$(e){return e&&e.padAngle}function v$(e,t,r,n,i,o,a,s){var l=r-e,u=n-t,c=a-i,f=s-o,h=f*l-c*u;if(!(h*hQ*Q+le*le&&(R=P,K=U),{cx:R,cy:K,x01:-c,y01:-f,x11:R*(i/E-1),y11:K*(i/E-1)}}function L1(){var e=g$,t=m$,r=et(0),n=null,i=y$,o=b$,a=_$,s=null,l=Ag(u);function u(){var c,f,h=+e.apply(this,arguments),d=+t.apply(this,arguments),g=i.apply(this,arguments)-vu,b=o.apply(this,arguments)-vu,y=k_(b-g),_=b>g;if(s||(s=c=l()),dlr))s.moveTo(0,0);else if(y>Fl-lr)s.moveTo(d*ki(g),d*Qr(g)),s.arc(0,0,d,g,b,!_),h>lr&&(s.moveTo(h*ki(b),h*Qr(b)),s.arc(0,0,h,b,g,_));else{var m=g,w=b,S=g,E=b,T=y,I=y,R=a.apply(this,arguments)/2,K=R>lr&&(n?+n.apply(this,arguments):Oo(h*h+d*d)),P=Of(k_(d-h)/2,+r.apply(this,arguments)),U=P,M=P,D,Q;if(K>lr){var le=O_(K/h*Qr(R)),me=O_(K/d*Qr(R));(T-=le*2)>lr?(le*=_?1:-1,S+=le,E-=le):(T=0,S=E=(g+b)/2),(I-=me*2)>lr?(me*=_?1:-1,m+=me,w-=me):(I=0,m=w=(g+b)/2)}var fe=d*ki(m),J=d*Qr(m),de=h*ki(E),B=h*Qr(E);if(P>lr){var ie=d*ki(w),G=d*Qr(w),se=h*ki(S),_e=h*Qr(S),X;if(ylr?M>lr?(D=Ja(se,_e,fe,J,d,M,_),Q=Ja(ie,G,de,B,d,M,_),s.moveTo(D.cx+D.x01,D.cy+D.y01),Mlr)||!(T>lr)?s.lineTo(de,B):U>lr?(D=Ja(de,B,ie,G,h,-U,_),Q=Ja(fe,J,se,_e,h,-U,_),s.lineTo(D.cx+D.x01,D.cy+D.y01),U=d;--g)s.point(w[g],S[g]);s.lineEnd(),s.areaEnd()}_&&(w[h]=+e(y,h,f),S[h]=+t(y,h,f),s.point(n?+n(y,h,f):w[h],r?+r(y,h,f):S[h]))}if(m)return s=null,m+""||null}function c(){return Tg().defined(i).curve(a).context(o)}return u.x=function(f){return arguments.length?(e=typeof f=="function"?f:et(+f),n=null,u):e},u.x0=function(f){return arguments.length?(e=typeof f=="function"?f:et(+f),u):e},u.x1=function(f){return arguments.length?(n=f==null?null:typeof f=="function"?f:et(+f),u):n},u.y=function(f){return arguments.length?(t=typeof f=="function"?f:et(+f),r=null,u):t},u.y0=function(f){return arguments.length?(t=typeof f=="function"?f:et(+f),u):t},u.y1=function(f){return arguments.length?(r=f==null?null:typeof f=="function"?f:et(+f),u):r},u.lineX0=u.lineY0=function(){return c().x(e).y(t)},u.lineY1=function(){return c().x(e).y(r)},u.lineX1=function(){return c().x(n).y(t)},u.defined=function(f){return arguments.length?(i=typeof f=="function"?f:et(!!f),u):i},u.curve=function(f){return arguments.length?(a=f,o!=null&&(s=a(o)),u):a},u.context=function(f){return arguments.length?(f==null?o=s=null:s=a(o=f),u):o},u}function w$(e,t){return te?1:t>=e?0:NaN}function E$(e){return e}function F1(){var e=E$,t=w$,r=null,n=et(0),i=et(Fl),o=et(0);function a(s){var l,u=(s=oc(s)).length,c,f,h=0,d=new Array(u),g=new Array(u),b=+n.apply(this,arguments),y=Math.min(Fl,Math.max(-Fl,i.apply(this,arguments)-b)),_,m=Math.min(Math.abs(y)/u,o.apply(this,arguments)),w=m*(y<0?-1:1),S;for(l=0;l0&&(h+=S);for(t!=null?d.sort(function(E,T){return t(g[E],g[T])}):r!=null&&d.sort(function(E,T){return r(s[E],s[T])}),l=0,f=h?(y-u*w)/h:0;l0?S*f:0)+w,g[c]={data:s[c],index:l,value:S,startAngle:b,endAngle:_,padAngle:m};return g}return a.value=function(s){return arguments.length?(e=typeof s=="function"?s:et(+s),a):e},a.sortValues=function(s){return arguments.length?(t=s,r=null,a):t},a.sort=function(s){return arguments.length?(r=s,t=null,a):r},a.startAngle=function(s){return arguments.length?(n=typeof s=="function"?s:et(+s),a):n},a.endAngle=function(s){return arguments.length?(i=typeof s=="function"?s:et(+s),a):i},a.padAngle=function(s){return arguments.length?(o=typeof s=="function"?s:et(+s),a):o},a}function M_(e,t){if((a=e.length)>1)for(var r=1,n,i,o=e[t[0]],a,s=o.length;r=0;)r[t]=t;return r}function S$(e,t){return e[t]}function x$(e){const t=[];return t.key=e,t}function j1(){var e=et([]),t=P_,r=M_,n=S$;function i(o){var a=Array.from(e.apply(this,arguments),x$),s,l=a.length,u=-1,c;for(const f of o)for(s=0,++u;s!t.showInGraph).map(t=>t.id),e.showLG=De.graphPreference=="live",e.displayM=De.displayMode,e.stackO=De.usageStackOrder,e.showGr=De.showGrid,e.decimalP=De.decimalPlaces,e.smartHomeC=De.smartHomeColors,e.relPM=De.showRelativeArcs,e.maxPow=De.maxPower,e.showQA=De.showQuickAccess,e.simpleCP=De.simpleCpList,e.shortCP=De.shortCpList,e.animation=De.showAnimations,e.wideB=De.preferWideBoxes,e.fluidD=De.fluidDisplay,e.clock=De.showClock,e.showButtonBar=De.showButtonBar,e.showCounters=De.showCounters,e.showVehicles=De.showVehicles,e.showPrices=De.showPrices,e.debug=De.debug,document.cookie="openWBColorTheme="+JSON.stringify(e)+";max-age=16000000;samesite=strict"}const k$={class:"navigation"},O$={class:"graphbuttons"},M$={class:"cpbuttons"},P$={class:"timedisplay ms-4"},R$=Ye({__name:"NavigationBar",setup(e){let t;function r(){let l=Object.values(Ve).length;De.cpToShow=(De.cpToShow+1)%l}function n(){let l=Object.values(Ve).length;De.cpToShow=((De.cpToShow-1)%l+l)%l}function i(){De.graphToShow="powermeter"}function o(){De.graphToShow="powergraph"}function a(){De.graphToShow="energymeter"}function s(){Mt.locked?$o():new hn("#statuspage").toggle()}return es(()=>{t=setInterval(()=>{Gb.value=new Date},1e3)}),Ap(()=>{clearInterval(t)}),(l,u)=>(Se(),Re("div",k$,[ye("span",O$,[u[3]||(u[3]=ye("span",{class:"brand me-4"},"openWB",-1)),Me(Dr,{icon:"fa-chart-pie",onClick:i},{default:Ue(()=>[...u[0]||(u[0]=[Xe("Leistung",-1)])]),_:1}),Me(Dr,{icon:"fa-chart-line",onClick:o},{default:Ue(()=>[...u[1]||(u[1]=[Xe("Verlauf",-1)])]),_:1}),Me(Dr,{icon:"fa-chart-column",onClick:a},{default:Ue(()=>[...u[2]||(u[2]=[Xe("Energie",-1)])]),_:1})]),Me(Dr,{icon:"fa-rectangle-list",onClick:s},{default:Ue(()=>[...u[4]||(u[4]=[Xe("Status",-1)])]),_:1}),ye("span",M$,[Object.values(we(Ve)).length>1?(Se(),Ke(Dr,{key:0,color:"var(--color-cp0)",onClick:n},{default:Ue(()=>[...u[5]||(u[5]=[ye("span",{class:"fas fa-arrow-left px-2"},null,-1),ye("span",{class:"fas fa-charging-station pe-2"},null,-1)])]),_:1})):We("",!0),Me(Dr,{bgcolor:we(Mt).locked?"var(--color-evu)":"var(--color-pv)",onClick:we($o)},{default:Ue(()=>[...u[6]||(u[6]=[ye("span",{class:"fas fa-lock px-4"},null,-1)])]),_:1},8,["bgcolor","onClick"]),Object.values(we(Ve)).length>1?(Se(),Ke(Dr,{key:1,color:"var(--color-cp0)",onClick:r},{default:Ue(()=>[...u[7]||(u[7]=[ye("span",{class:"fas fa-charging-station px-2"},null,-1),ye("span",{class:"fas fa-arrow-right pe-2"},null,-1)])]),_:1})):We("",!0),ye("span",P$,qe(we(SA)(we(Gb))),1)])]))}}),N$=rt(R$,[["__scopeId","data-v-6d0b9541"]]),L$=["origin"],B$=Ye({__name:"PMSourceArc",props:{radius:{},cornerRadius:{},circleGapSize:{},emptyPower:{}},setup(e){const t=e,r=Ce(()=>{let n={name:"",power:t.emptyPower,energy:0,energyPv:0,energyBat:0,pvPercentage:0,color:"var(--color-bg)",icon:""},i=ot;i["zz-empty"]=n;const o=Object.values(ot).length-1,a=F1().value(u=>u.power).startAngle(-Math.PI/2+t.circleGapSize).endAngle(Math.PI/2-t.circleGapSize).sort(null),s=L1().innerRadius(t.radius/6*5).outerRadius(t.radius).cornerRadius(t.cornerRadius).padAngle(0),l=Gr("g#pmSourceArc");return l.selectAll("*").remove(),l.selectAll("sources").data(a(Object.values(i))).enter().append("path").attr("d",s).attr("fill",u=>u.data.color).attr("stroke",(u,c)=>c==o?u.data.power>0?"var(--color-scale)":"null":u.data.color),"pmSourceArc.vue"});return GS(()=>{let n=ot.pv.power+ot.evuIn.power+ot.batOut.power;n>De.maxPower&&(De.maxPower=n)}),(n,i)=>(Se(),Re("g",{id:"pmSourceArc",origin:r.value},null,8,L$))}}),D$=["origin"],$$=Ye({__name:"PMUsageArc",props:{radius:{},cornerRadius:{},circleGapSize:{},emptyPower:{}},setup(e){const t=e,r=Ce(()=>{let n={name:"",power:t.emptyPower,energy:0,energyPv:0,energyBat:0,pvPercentage:0,color:"var(--color-bg)",icon:""};const i=[Qe.evuOut,Qe.charging].concat([...Nt.values()].filter(u=>u.configured&&!u.countAsHouse).sort((u,c)=>c.power-u.power)).concat([Qe.batIn,Qe.house]).concat(n),o=i.length-1,a=F1().value(u=>u.power).startAngle(Math.PI*1.5-t.circleGapSize).endAngle(Math.PI/2+t.circleGapSize).sort(null),s=L1().innerRadius(t.radius/6*5).outerRadius(t.radius).cornerRadius(t.cornerRadius),l=Gr("g#pmUsageArc");return l.selectAll("*").remove(),l.selectAll("consumers").data(a(i)).enter().append("path").attr("d",s).attr("fill",u=>u.data.color).attr("stroke",(u,c)=>c==o?u.data.power>0?"var(--color-scale)":"null":u.data.color),"pmUsageArc.vue"});return(n,i)=>(Se(),Re("g",{id:"pmUsageArc",origin:r.value},null,8,D$))}}),V1=Ye({__name:"FormatWatt",props:{watt:{}},setup(e){const t=e,r=Ce(()=>nl(t.watt,De.decimalPlaces));return(n,i)=>qe(r.value)}}),U$={key:0,id:"pmLabel"},F$=["x","y","fill","text-anchor"],j$=22,Jr=Ye({__name:"PMLabel",props:{x:{},y:{},data:{},props:{},anchor:{},labeltext:{},labelicon:{},labelcolor:{}},setup(e){const t=e,r=Ce(()=>t.labeltext?t.labeltext:t.props?t.props.icon+" ":t.labelicon?t.labelicon+" ":""),n=Ce(()=>t.labelcolor?t.labelcolor:t.props?t.props.color:""),i=Ce(()=>!t.data||t.data.power>0),o=Ce(()=>t.labeltext?"":"fas");return(a,s)=>i.value?(Se(),Re("g",U$,[ye("text",{x:e.x,y:e.y,fill:n.value,"text-anchor":e.anchor,"font-size":j$,class:"pmLabel"},[ye("tspan",{class:It(o.value)},qe(r.value),3),ye("tspan",null,[e.data!==void 0?(Se(),Ke(V1,{key:0,watt:e.data.power},null,8,["watt"])):We("",!0)])],8,F$)])):We("",!0)}}),W$={},V$={class:"p-2 m-0 cont"},H$={class:"wb-widget m-0 pb-2 shadow"},q$={class:"header mt-4 mx-2"},G$={class:"titles"},K$={class:"title"},z$={class:"subtitle"},Y$={class:"buttons"},Q$={class:"wb-subwidget mx-2"},J$={key:0},X$={class:"wb-subwidget mx-2"};function Z$(e,t){return Se(),Re("div",V$,[ye("div",H$,[ye("div",q$,[ye("div",G$,[ye("div",K$,[kr(e.$slots,"title",{},()=>[t[0]||(t[0]=ye("div",{class:"p-0"},"(title goes here)",-1))])]),ye("div",z$,[kr(e.$slots,"subtitle",{},void 0)])]),ye("div",Y$,[kr(e.$slots,"buttons",{},void 0)])]),ye("div",Q$,[kr(e.$slots,"default",{},void 0)]),e.$slots.footer!=null?(Se(),Re("div",J$,[t[1]||(t[1]=ye("hr",{class:"grid-col-12"},null,-1)),ye("div",X$,[kr(e.$slots,"footer",{},void 0)])])):We("",!0)])])}const sc=rt(W$,[["render",Z$],["__scopeId","data-v-e8292acd"]]);class eU{active=!1;etPriceList=new Map;etProvider="";etMaxPrice=0;get etCurrentPriceString(){const[t]=Ft.etPriceList.values();return(Math.round(t*10)/10).toFixed(1)+" ct"}}const Ft=mt(new eU),tU={class:"grid-col-12"},rU={id:"powermeter",class:"powermeter p-0 m-0 align-self-stretch"},nU=["viewBox"],iU=["transform"],oU={transform:"scale(0.9294,1)"},sU=["x"],bn=500,_n=20,B_=1,aU=Ye({__name:"PowerMeter",setup(e){const t=bn,r=Math.PI/40,n=[[4],[4,6],[1,4,6],[0,2,4,6],[0,2,3,5,6]],i=[{x:-85,y:t/2*1/5},{x:0,y:t/2*1/5},{x:85,y:t/2*1/5},{x:-85,y:t/2*2/5},{x:0,y:t/2*2/5},{x:85,y:t/2*2/5},{x:0,y:t/2*3/5}],o=Ce(()=>bn/2-_n),a=Ce(()=>{let y="",_=Object.values(ot).filter(m=>m.power>0);return _.length==1&&_[0].name=="PV"?y="Aktueller Verbrauch: ":y="Bezug/Verbrauch: ",y+nl(Qe.house.power+Qe.charging.power+Qe.devices.power+Qe.batIn.power,De.decimalPlaces)}),s=Ce(()=>{let y=ot.pv.power+ot.evuIn.power+ot.batOut.power;return De.maxPower>y?nl(De.maxPower,De.decimalPlaces):nl(y,De.decimalPlaces)}),l=Ce(()=>Object.values(Ve)),u=Ce(()=>{let y=0;return De.showRelativeArcs&&(y=De.maxPower-(ot.pv.power+ot.evuIn.power+ot.batOut.power)),y<0?0:y}),c=Ce(()=>[Qe.evuOut,Qe.charging,Qe.devices,Qe.batIn,Qe.house].filter(y=>y.power>0)),f=Ce(()=>n[c.value.length-1]);function h(y){return i[f.value[y]]}function d(y){return Math.round(l.value[y].soc)}function g(y){return y.length>12?y.slice(0,11)+".":y}const b=Ce(()=>{const[y]=Ft.etPriceList.values();return Math.round(y*10)/10});return(y,_)=>(Se(),Ke(sc,null,{title:Ue(()=>[..._[0]||(_[0]=[Xe(" Aktuelle Leistung ",-1)])]),default:Ue(()=>[ye("div",tU,[ye("figure",rU,[(Se(),Re("svg",{viewBox:"0 0 "+bn+" "+we(t)},[ye("g",{transform:"translate("+bn/2+","+we(t)/2+")"},[ye("g",oU,[Me(B$,{radius:o.value,"corner-radius":B_,"circle-gap-size":r,"empty-power":u.value},null,8,["radius","empty-power"]),Me($$,{"sh-device":we(Nt),radius:o.value,"corner-radius":B_,"circle-gap-size":r,"empty-power":u.value},null,8,["sh-device","radius","empty-power"]),Me(Jr,{x:0,y:-we(t)/10*2,data:we(ot).pv,props:we(Kt).pv,anchor:"middle",config:we(De)},null,8,["y","data","props","config"]),Me(Jr,{x:0,y:-we(t)/10*3,data:we(ot).evuIn,props:we(Kt).evuIn,anchor:"middle",config:we(De)},null,8,["y","data","props","config"]),Me(Jr,{x:0,y:-we(t)/10,data:we(ot).batOut,props:we(Kt).batOut,anchor:"middle",config:we(De)},null,8,["y","data","props","config"]),we(Ft).active?(Se(),Ke(Jr,{key:0,x:0,y:-we(t)/10,data:we(ot).batOut,props:we(Kt).batOut,anchor:"middle",config:we(De)},null,8,["y","data","props","config"])):We("",!0),(Se(!0),Re(ut,null,Wr(c.value,(m,w)=>(Se(),Ke(Jr,{key:w,x:h(w).x,y:h(w).y,data:m,labelicon:m.icon,labelcolor:m.color,anchor:"middle",config:we(De)},null,8,["x","y","data","labelicon","labelcolor","config"]))),128)),l.value.length>0&&we(Tt)[l.value[0].connectedVehicle]?(Se(),Ke(Jr,{key:1,x:-bn/2-_n/4+10,y:-we(t)/2+_n+5,labeltext:g(we(Tt)[l.value[0].connectedVehicle].name)+": "+d(0)+"%",labelcolor:l.value[0].color,anchor:"start",config:we(De)},null,8,["x","y","labeltext","labelcolor","config"])):We("",!0),l.value.length>1&&we(Tt)[l.value[1].connectedVehicle]?(Se(),Ke(Jr,{key:2,x:bn/2+_n/4-10,y:-we(t)/2+_n+5,labeltext:g(we(Tt)[l.value[1].connectedVehicle].name)+": "+d(1)+"%",labelcolor:l.value[1].color,anchor:"end",config:we(De)},null,8,["x","y","labeltext","labelcolor","config"])):We("",!0),we(ht).batterySoc>0?(Se(),Ke(Jr,{key:3,x:-bn/2-_n/4+10,y:we(t)/2-_n+15,labeltext:"Speicher: "+we(ht).batterySoc+"%",labelcolor:we(Qe).batIn.color,anchor:"start",config:we(De)},null,8,["x","y","labeltext","labelcolor","config"])):We("",!0),we(Ft).active?(Se(),Ke(Jr,{key:4,x:bn/2+_n/4-10,y:we(t)/2-_n+15,value:b.value,labeltext:we(Ft).etCurrentPriceString,labelcolor:"var(--color-charging)",anchor:"end",config:we(De)},null,8,["x","y","value","labeltext","config"])):We("",!0),Me(Jr,{x:0,y:0,labeltext:a.value,labelcolor:"var(--color-fg)",anchor:"middle",config:we(De)},null,8,["labeltext","config"]),we(De).showRelativeArcs?(Se(),Re("text",{key:5,x:bn/2-44,y:"2","text-anchor":"middle",fill:"var(--color-axis)","font-size":"12"}," Peak: "+qe(s.value),9,sU)):We("",!0)])],8,iU)],8,nU))])])]),_:1}))}}),En=500,oi=500,Ze={top:10,right:20,bottom:10,left:25},Ig=["charging","house","batIn","devices"];class lU{data=[];_graphMode="";get graphMode(){return this._graphMode}set graphMode(t){this._graphMode=t}}const xe=mt(new lU);let Eu=!0,ca=!0;function D_(){Eu=!1}function $_(){ca=!1}function uU(e){ca=e}function Ta(e){xe.data=e}const Ot=mt({refreshTopicPrefix:"openWB/graph/alllivevaluesJson",updateTopic:"openWB/graph/lastlivevaluesJson",configTopic:"openWB/graph/config/#",initialized:!1,initCounter:0,graphRefreshCounter:0,rawDataPacks:[],duration:0,activate(){xe.data=[],this.unsubscribeUpdates(),this.subscribeRefresh(),zi(this.configTopic),this.initialized=!1,this.initCounter=0,this.graphRefreshCounter=0,this.rawDataPacks=[],pU(),iu.value=!0},deactivate(){this.unsubscribeRefresh(),this.unsubscribeUpdates(),Do(this.configTopic)},subscribeRefresh(){for(let e=1;e<17;e++)zi(this.refreshTopicPrefix+e)},unsubscribeRefresh(){for(let e=1;e<17;e++)Do(this.refreshTopicPrefix+e)},subscribeUpdates(){zi(this.updateTopic)},unsubscribeUpdates(){Do(this.updateTopic)}}),wt=mt({topic:"openWB/log/daily/#",date:new Date,activate(){if(xe.graphMode=="day"||xe.graphMode=="today"){xe.graphMode=="today"&&(this.date=new Date);const e=this.date.getFullYear().toString()+(this.date.getMonth()+1).toString().padStart(2,"0")+this.date.getDate().toString().padStart(2,"0");zi(this.topic),ji("getDailyLog",{day:e})}},deactivate(){Do(this.topic)},back(){this.date=new Date(this.date.setTime(this.date.getTime()-864e5))},forward(){this.date=new Date(this.date.setTime(this.date.getTime()+864e5))},setDate(e){this.date=e},getDate(){return this.date}}),On=mt({topic:"openWB/log/monthly/#",month:new Date().getMonth()+1,year:new Date().getFullYear(),activate(){const e=this.year.toString()+this.month.toString().padStart(2,"0");xe.data=[],zi(this.topic),ji("getMonthlyLog",{month:e})},deactivate(){Do(this.topic)},back(){this.month-=1,this.month<1&&(this.month=12,this.year-=1),this.activate()},forward(){const e=new Date;e.getFullYear()==this.year?this.month-112&&(this.month=1,this.year+=1)),this.activate()},getDate(){return new Date(this.year,this.month)}}),di=mt({topic:"openWB/log/yearly/#",month:new Date().getMonth()+1,year:new Date().getFullYear(),activate(){const e=this.year.toString();xe.data=[],zi(this.topic),ji("getYearlyLog",{year:e})},deactivate(){Do(this.topic)},back(){this.year-=1,this.activate()},forward(){this.year0&&(He.items[e].energyPv+=1e3/12*(t[e]*(t.pv-t.evuOut))/(t.pv-t.evuOut+t.evuIn+t.batOut),He.items[e].energyBat+=1e3/12*(t[e]*t.batOut)/(t.pv-t.evuOut+t.evuIn+t.batOut))}function hU(e,t){t[e]>0&&(He.items[e].energyPv+=1e3*(t[e]*(t.pv-t.evuOut))/(t.pv-t.evuOut+t.evuIn+t.batOut),He.items[e].energyBat+=1e3*(t[e]*t.batOut)/(t.pv-t.evuOut+t.evuIn+t.batOut))}const dU=["evuIn","pv","batIn","evuOut"],Gs=zt(!1);function Cg(e,t){Object.entries(e).length>0?(Gs.value=!1,Object.entries(e.counter).forEach(([r,n])=>{(t.length==0||t.includes(r))&&(He.items.evuIn.energy+=n.energy_imported,He.items.evuOut.energy+=n.energy_exported)}),He.items.pv.energy=e.pv.all.energy_exported,e.bat.all&&(He.items.batIn.energy=e.bat.all.energy_imported,He.items.batOut.energy=e.bat.all.energy_exported),Object.entries(e.cp).forEach(([r,n])=>{r=="all"?He.setEnergy("charging",n.energy_imported):He.setEnergy(r,n.energy_imported)}),He.setEnergy("devices",0),Object.entries(e.sh).forEach(([r,n])=>{He.setEnergy(r,n.energy_imported);const i=r.substring(2);Nt.get(+i).countAsHouse||(He.items.devices.energy+=n.energy_imported)}),e.hc&&e.hc.all?He.setEnergy("house",e.hc.all.energy_imported):He.calculateHouseEnergy(),He.keys().map(r=>{dU.includes(r)||(He.setPvPercentage(r,Math.round((He.items[r].energyPv+He.items[r].energyBat)/He.items[r].energy*100)),Ig.includes(r)&&(Qe[r].energy=He.items[r].energy,Qe[r].energyPv=He.items[r].energyPv,Qe[r].energyBat=He.items[r].energyBat,Qe[r].pvPercentage=He.items[r].pvPercentage))}),xe.graphMode=="today"&&(Object.values(Ve).map(r=>{const n=He.items["cp"+r.id];n&&(r.energyPv=n.energyPv,r.energyBat=n.energyBat,r.pvPercentage=n.pvPercentage)}),Nt.forEach(r=>{const n=He.items["sh"+r.id];n&&(r.energy=n.energy,r.energyPv=n.energyPv,r.energyBat=n.energyBat,r.pvPercentage=n.pvPercentage)}))):Gs.value=!0,iu.value=!0}function pU(){He.keys().map(e=>{Ig.includes(e)&&(Qe[e].energy=He.items[e].energy,Qe[e].energyPv=0,Qe[e].energyBat=0,Qe[e].pvPercentage=0)}),Object.values(Ve).map(e=>{e.energyPv=0,e.energyBat=0,e.pvPercentage=0}),Nt.forEach(e=>{e.energyPv=0,e.energyBat=0,e.pvPercentage=0})}const on=Ce(()=>{const e=Zi(xe.data,t=>t.date);return e[1]?mu().domain(Array.from({length:e[1]},(t,r)=>r+1)).paddingInner(.4).range([0,En-Ze.left-2]):mu().range([0,0])});function kg(){switch(xe.graphMode){case"live":xe.graphMode="today",De.showRightButton=!0,Rt();break;case"today":xe.graphMode="day",wt.date=new Date,wt.back(),Rt();break;case"day":wt.back(),Rt();break;case"month":On.back();break;case"year":di.back();break}}function H1(){const e=new Date;switch(xe.graphMode){case"live":break;case"today":xe.graphMode="live",De.showRightButton=!1,Rt();break;case"day":wt.forward(),wt.date.getDate()==e.getDate()&&wt.date.getMonth()==e.getMonth()&&wt.date.getFullYear()==e.getFullYear()&&(xe.graphMode="today"),Rt();break;case"month":On.forward();break;case"year":di.forward();break}}function q1(){switch(xe.graphMode){case"live":kg();break;case"day":case"today":xe.graphMode="month",Rt();break;case"month":xe.graphMode="year",Rt();break}}function G1(){switch(xe.graphMode){case"year":xe.graphMode="month",Rt();break;case"month":xe.graphMode="today",Rt();break;case"today":case"day":xe.graphMode="live",Rt();break}}function gU(e){if(xe.graphMode=="day"||xe.graphMode=="today"){wt.setDate(e);const t=new Date;wt.date.getDate()==t.getDate()&&wt.date.getMonth()==t.getMonth()&&wt.date.getFullYear()==t.getFullYear()?xe.graphMode="today":xe.graphMode="day",Rt()}}const mU=["origin","transform"],yU=Ye({__name:"PGSourceGraph",props:{width:{},height:{},margin:{}},setup(e){const t=e,r={house:"var(--color-house)",batIn:"var(--color-battery)",inverter:"var(--color-pv)",batOut:"var(--color-battery)",selfUsage:"var(--color-pv)",evuOut:"var(--color-export)",evuIn:"var(--color-evu)"};var n,i;const o=De.showAnimations?De.animationDuration:0,a=De.showAnimations?De.animationDelay:0,s=Ce(()=>{const S=Gr("g#pgSourceGraph");xe.graphMode=="month"||xe.graphMode=="year"?w(S):m(S),S.selectAll(".axis").remove();const E=S.append("g").attr("class","axis");return E.call(b.value),E.selectAll(".tick").attr("font-size",12),E.selectAll(".tick line").attr("stroke",_.value).attr("stroke-width",y.value),E.select(".domain").attr("stroke","var(--color-bg)"),"pgSourceGraph.vue"}),l=Ce(()=>xe.graphMode=="month"||xe.graphMode=="year"?["evuIn","batOut","selfUsage","evuOut"]:["selfUsage","evuOut","batOut","evuIn"]),u=Ce(()=>dn().domain([0,xe.data.length-1]).range([0,t.width])),c=Ce(()=>j1().keys(l.value)),f=Ce(()=>c.value(xe.data)),h=Ce(()=>dn().range([t.height-10,0]).domain(xe.graphMode=="year"?[0,Math.ceil(d.value[1]*10)/10]:[0,Math.ceil(d.value[1])])),d=Ce(()=>{let S=Zi(xe.data,E=>Math.max(E.pv+E.evuIn+E.batOut,E.selfUsage+E.evuOut));return S[0]!=null&&S[1]!=null?(xe.graphMode=="year"&&(S[0]=S[0]/1e3,S[1]=S[1]/1e3),S):[0,0]}),g=Ce(()=>xe.graphMode=="month"||xe.graphMode=="year"?-t.width-t.margin.right-22:-t.width),b=Ce(()=>Zu(h.value).tickSizeInner(g.value).ticks(4).tickFormat(S=>(S==0?"":Math.round(S*10)/10).toLocaleString(void 0))),y=Ce(()=>De.showGrid?"0.5":"1"),_=Ce(()=>De.showGrid?"var(--color-grid)":"var(--color-bg)");function m(S){const E=wu().x((I,R)=>u.value(R)).y(h.value(0)),T=wu().x((I,R)=>u.value(R)).y0(I=>h.value(xe.graphMode=="year"?I[0]/1e3:I[0])).y1(I=>h.value(xe.graphMode=="year"?I[1]/1e3:I[1]));Eu?(S.selectAll("*").remove(),n=S.selectAll(".sourceareas").data(f.value).enter().append("path").attr("fill",(I,R)=>r[l.value[R]]).attr("d",I=>E(I)),n.transition().duration(o).delay(a).ease(qs).attr("d",I=>T(I)),D_()):n.data(f.value).transition().duration(0).ease(qs).attr("d",I=>T(I))}function w(S){Eu?(S.selectAll("*").remove(),i=S.selectAll(".sourcebar").data(f.value).enter().append("g").attr("fill",(E,T)=>r[l.value[T]]).selectAll("rect").data(E=>E).enter().append("rect").attr("x",(E,T)=>on.value(xe.data[T].date)??0).attr("y",()=>h.value(0)).attr("height",0).attr("width",on.value.bandwidth()),i.transition().duration(o).delay(a).ease(qs).attr("height",E=>xe.graphMode=="year"?h.value(E[0]/1e3)-h.value(E[1]/1e3):h.value(E[0])-h.value(E[1])).attr("y",E=>xe.graphMode=="year"?h.value(E[1]/1e3):h.value(E[1])),D_()):(S.selectAll("*").remove(),i=S.selectAll(".sourcebar").data(f.value).enter().append("g").attr("fill",(E,T)=>r[l.value[T]]).selectAll("rect").data(E=>E).enter().append("rect").attr("x",(E,T)=>on.value(xe.data[T].date)??0).attr("y",E=>xe.graphMode=="year"?h.value(E[1]/1e3):h.value(E[1])).attr("width",on.value.bandwidth()).attr("height",E=>xe.graphMode=="year"?h.value(E[0]/1e3)-h.value(E[1]/1e3):h.value(E[0])-h.value(E[1])))}return(S,E)=>(Se(),Re("g",{id:"pgSourceGraph",origin:s.value,transform:"translate("+e.margin.left+","+e.margin.top+")"},null,8,mU))}}),bU=["origin","transform"],_U=Ye({__name:"PGUsageGraph",props:{width:{},height:{},margin:{},stackOrder:{}},setup(e){const t=e,r=[["house","charging","devices","batIn"],["charging","devices","house","batIn"],["devices","charging","house","batIn"]],n={house:"var(--color-house)",charging:"var(--color-charging)",batIn:"var(--color-battery)",batOut:"var(--color-battery)",selfUsage:"var(--color-pv)",evuOut:"var(--color-export)",evuIn:"var(--color-evu)",cp0:"var(--color-cp0)",cp1:"var(--color-cp1)",cp2:"var(--color-cp2)",cp3:"var(--color-cp3)",sh1:"var(--color-sh1)",sh2:"var(--color-sh2)",sh3:"var(--color-sh3)",sh4:"var(--color-sh4)",devices:"var(--color-devices)"};var i,o;const a=De.showAnimations?De.animationDuration:0,s=De.showAnimations?De.animationDelay:0,l=Ce(()=>{const w=Gr("g#pgUsageGraph");xe.graphMode=="month"||xe.graphMode=="year"?m(w):_(w),w.selectAll(".axis").remove();const S=w.append("g").attr("class","axis");return S.call(y.value),S.selectAll(".tick").attr("font-size",12).attr("color","var(--color-axis)"),De.showGrid?S.selectAll(".tick line").attr("stroke","var(--color-grid)").attr("stroke-width","0.5"):S.selectAll(".tick line").attr("stroke","var(--color-bg)"),S.select(".domain").attr("stroke","var(--color-bg)"),"pgUsageGraph.vue"}),u=Ce(()=>j1().keys(d.value)),c=Ce(()=>u.value(xe.data)),f=Ce(()=>dn().domain([0,xe.data.length-1]).range([0,t.width])),h=Ce(()=>dn().range([t.height+10,2*t.height]).domain(xe.graphMode=="year"?[0,Math.ceil(g.value[1]*10)/10]:[0,Math.ceil(g.value[1])])),d=Ce(()=>{if(xe.graphMode!="today"&&xe.graphMode!="day")return r[t.stackOrder];{const w=r[t.stackOrder].slice(),S=w.indexOf("charging");w.splice(S,1);const E=/cp\d+/;let T=[];return xe.data.length>0&&(T=Object.keys(xe.data[0]).reduce((I,R)=>(R.match(E)&&I.push(R),I),[])),T.map((I,R)=>{w.splice(S+R,0,I),n[I]="var(--color-cp"+R+")"}),w}}),g=Ce(()=>{let w=Zi(xe.data,S=>S.house+S.charging+S.batIn+S.devices);return w[0]!=null&&w[1]!=null?(xe.graphMode=="year"&&(w[0]=w[0]/1e3,w[1]=w[1]/1e3),w):[0,0]}),b=Ce(()=>xe.graphMode=="month"||xe.graphMode=="year"?-t.width-t.margin.right-22:-t.width),y=Ce(()=>Zu(h.value).tickSizeInner(b.value).ticks(4).tickFormat(w=>(w==0?"":Math.round(w*10)/10).toLocaleString(void 0)));function _(w){const S=wu().x((T,I)=>f.value(I)).y(h.value(0)),E=wu().x((T,I)=>f.value(I)).y0(T=>h.value(T[0])).y1(T=>h.value(T[1]));De.showAnimations?ca?(w.selectAll("*").remove(),i=w.selectAll(".usageareas").data(c.value).enter().append("path").attr("d",T=>S(T)).attr("fill",(T,I)=>n[d.value[I]]),i.transition().duration(300).delay(100).ease(qs).attr("d",T=>E(T)),$_()):(w.selectAll("*").remove(),w.selectAll(".usageareas").data(c.value).enter().append("path").attr("d",T=>E(T)).attr("fill",(T,I)=>n[d.value[I]])):(w.selectAll("*").remove(),w.selectAll(".usageareas").data(c.value).enter().append("path").attr("d",T=>E(T)).attr("fill",(T,I)=>n[d.value[I]]))}function m(w){ca?(w.selectAll("*").remove(),o=w.selectAll(".usagebar").data(c.value).enter().append("g").attr("fill",(S,E)=>n[r[t.stackOrder][E]]).selectAll("rect").data(S=>S).enter().append("rect").attr("x",(S,E)=>on.value(xe.data[E].date)??0).attr("y",()=>h.value(0)).attr("height",0).attr("width",on.value.bandwidth()),o.transition().duration(a).delay(s).ease(qs).attr("y",S=>xe.graphMode=="year"?h.value(S[0]/1e3):h.value(S[0])).attr("height",S=>xe.graphMode=="year"?h.value(S[1]/1e3)-h.value(S[0]/1e3):h.value(S[1])-h.value(S[0])),$_()):(w.selectAll("*").remove(),o=w.selectAll(".usagebar").data(c.value).enter().append("g").attr("fill",(S,E)=>n[r[t.stackOrder][E]]).selectAll("rect").data(S=>S).enter().append("rect").attr("x",(S,E)=>on.value(xe.data[E].date)??0).attr("y",S=>xe.graphMode=="year"?h.value(S[0]/1e3):h.value(S[0])).attr("height",S=>xe.graphMode=="year"?h.value(S[1]/1e3)-h.value(S[0]/1e3):h.value(S[1])-h.value(S[0])).attr("width",on.value.bandwidth()))}return(w,S)=>(Se(),Re("g",{id:"pgUsageGraph",origin:l.value,transform:"translate("+e.margin.left+","+e.margin.top+")"},null,8,bU))}}),vU=["transform"],wU=["origin","transform"],EU=["origin","transform"],SU={key:0},xU=["width","height"],AU={key:1},TU=["y","width","height"],Mf=12,IU=Ye({__name:"PGXAxis",props:{width:{},height:{},margin:{}},setup(e){const t=e,r=Ce(()=>Bl(s.value).ticks(4).tickSizeInner(a.value).tickFormat(sa("%H:%M"))),n=Ce(()=>iN(s.value).ticks(4).tickSizeInner(a.value+3).tickFormat(sa(""))),i=Ce(()=>Bl(on.value).ticks(4).tickSizeInner(a.value).tickFormat(c=>c.toString())),o=Ce(()=>Bl(on.value).ticks(4).tickSizeInner(a.value).tickFormat(()=>"")),a=Ce(()=>xe.graphMode!=="month"&&xe.graphMode!=="year"?De.showGrid?-(t.height/2-7):-10:0),s=Ce(()=>{let c=Zi(xe.data,f=>f.date);return c[0]&&c[1]?la().domain(c).range([0,t.width]):la().range([0,0])}),l=Ce(()=>{let c=Gr("g#PGXAxis");return c.selectAll("*").remove(),xe.graphMode=="month"||xe.graphMode=="year"?c.call(i.value):c.call(r.value),c.selectAll(".tick > text").attr("fill",(f,h)=>h>0||xe.graphMode=="month"||xe.graphMode=="year"?"var(--color-axis)":"var(--color-bg)").attr("font-size",Mf),De.showGrid?c.selectAll(".tick line").attr("stroke","var(--color-grid)").attr("stroke-width","0.5"):c.selectAll(".tick line").attr("stroke","var(--color-bg)"),c.select(".domain").attr("stroke","var(--color-bg)"),c.append("text").attr("x",-t.margin.left).attr("y",12).attr("fill","var(--color-axis)").attr("font-size",Mf).text(xe.graphMode=="year"?"MW":"kW").attr("text-anchor","start"),"PGXAxis.vue"}),u=Ce(()=>{let c=Gr("g#PGXAxis2");return c.selectAll("*").remove(),xe.graphMode=="month"||xe.graphMode=="year"?c.call(o.value):c.call(n.value),c.selectAll(".tick > text").attr("fill",(f,h)=>h>0||xe.graphMode=="month"||xe.graphMode=="year"?"var(--color-axis)":"var(--color-bg)").attr("font-size",Mf),De.showGrid?(c.selectAll(".tick line").attr("stroke","var(--color-grid)").attr("stroke-width","0.5"),c.select(".domain").attr("stroke","var(--color-bg)")):c.selectAll(".tick line").attr("stroke","var(--color-bg)"),c.select(".domain").attr("stroke","var(--color-bg)"),"PGXAxis2.vue"});return(c,f)=>(Se(),Re("g",{transform:"translate("+e.margin.left+","+e.margin.top+")"},[ye("g",{id:"PGXAxis",class:"axis",origin:l.value,transform:"translate(0,"+(e.height/2-6)+")"},null,8,wU),ye("g",{id:"PGXAxis2",class:"axis",origin:u.value,transform:"translate(0,"+(e.height/2+10)+")"},null,8,EU),we(De).showGrid?(Se(),Re("g",SU,[ye("rect",{x:"0",y:"0",width:e.width,height:e.height/2-10,fill:"none",stroke:"var(--color-grid)","stroke-width":"0.5"},null,8,xU)])):We("",!0),we(De).showGrid?(Se(),Re("g",AU,[ye("rect",{x:"0",y:e.height/2+10,width:e.width,height:e.height/2-10,fill:"none",stroke:"var(--color-grid)","stroke-width":"0.5"},null,8,TU)])):We("",!0)],8,vU))}}),CU=["d"],kU=["d","stroke"],OU=["x","y","text-anchor"],Pf=Ye({__name:"PgSoc",props:{width:{},height:{},margin:{},order:{}},setup(e){const t=e,r=Ce(()=>{let h=Zi(xe.data,d=>d.date);return h[0]&&h[1]?la().domain(h).range([0,t.width]):la().range([0,0])}),n=Ce(()=>dn().range([t.height-10,0]).domain([0,100])),i=Ce(()=>Tg().x(g=>r.value(g.date)).y(g=>n.value(t.order==2?g.batSoc:g["soc"+u.value.connectedVehicle])??n.value(0))(xe.data)??""),o=Ce(()=>t.order==2?"Speicher":u.value.connectedVehicle),a=Ce(()=>t.order==2?"Speicher":u.value.vehicleName),s=Ce(()=>{switch(t.order){case 0:return"var(--color-cp1)";case 1:return"var(--color-cp2)";case 2:return"var(--color-battery)";default:return"red"}}),l=Ce(()=>{switch(t.order){case 0:return t.width-3;case 1:return 3;case 2:return t.width/2;default:return 0}}),u=Ce(()=>{const h=t.order==2?0:t.order;return Object.values(Ve)[h]}),c=Ce(()=>{if(xe.data.length>0){let h;switch(t.order){case 0:return h=xe.data.length-1,n.value(xe.data[h]["soc"+o.value]+2);case 1:return h=0,n.value(xe.data[h]["soc"+o.value]+2);case 2:return h=Math.round(xe.data.length/2),n.value((xe.data[h]?.batSoc??0)+2);default:return 0}}else return 0}),f=Ce(()=>{switch(t.order){case 0:return"end";case 1:return"start";case 2:return"middle";default:return"middle"}});return(h,d)=>(Se(),Re(ut,null,[ye("path",{class:"soc-baseline",d:i.value,stroke:"var(--color-bg)","stroke-width":"1",fill:"none"},null,8,CU),ye("path",{class:"soc-dashes",d:i.value,stroke:s.value,"stroke-width":"1",style:{strokeDasharray:"3,3"},fill:"none"},null,8,kU),ye("text",{class:"cpname",x:l.value,y:c.value,style:xt({fill:s.value,fontSize:10}),"text-anchor":f.value},qe(a.value),13,OU)],64))}}),MU=["transform"],PU=Ye({__name:"PgSocAxis",props:{width:{},height:{},margin:{}},setup(e){const t=e,r=Ce(()=>dn().range([t.height-10,0]).domain([0,100])),n=Ce(()=>oN(r.value).ticks(5).tickFormat(o=>o.toString()+"%"));function i(){let o=Gr("g#PGSocAxis");o.call(n.value),o.selectAll(".tick").attr("font-size",12),o.selectAll(".tick line").attr("stroke","var(--color-bg)"),o.select(".domain").attr("stroke","var(--color-bg)")}return es(()=>{i()}),(o,a)=>(Se(),Re("g",{id:"PGSocAxis",class:"axis",transform:"translate("+(e.width-20)+",0)"},null,8,MU))}}),RU={class:"btn-group m-0",role:"group","aria-label":"radiobar"},NU=["id","value"],LU=Ye({__name:"RadioBarInput",props:{options:{},modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=t,i=Ce({get(){return r.modelValue},set(s){n("update:modelValue",s)}});function o(s){let l=r.options[s].color?r.options[s].color:"var(--color-fg)";return r.options[s].active?{color:"var(--color-bg)",background:l}:{color:l}}function a(s){let l=s.target;for(;l&&!l.value&&l.parentElement;)l=l.parentElement;l.value&&(i.value=l.value)}return(s,l)=>(Se(),Re("div",null,[ye("div",RU,[(Se(!0),Re(ut,null,Wr(e.options,(u,c)=>(Se(),Re("button",{id:"radio-"+u.value,key:c,class:It(["btn btn-outline-secondary btn-sm radiobutton mx-0 mb-0 px-2",u.value==i.value?"active":""]),value:u.value,style:xt(o(c)),onClick:a},[ye("span",{style:xt(o(c)),class:"scaled d-flex flex-column pt-2"},[u.icon?(Se(),Re("i",{key:0,class:It(["fa-solid",u.icon])},null,2)):We("",!0),Xe(" "+qe(u.text),1)],4)],14,NU))),128))])]))}}),K1=rt(LU,[["__scopeId","data-v-270067ed"]]),BU={key:0,class:"fa-solid fa-xl fa-chevron-circle-down p-1",style:{color:"var(--color-bg)"}},DU=Ye({__name:"PgSelector",props:{widgetid:{},showLeftButton:{type:Boolean},showRightButton:{type:Boolean},ignoreLive:{type:Boolean}},emits:["shiftLeft","shiftRight","shiftUp","shiftDown"],setup(e){const t=e,r=zt(0),n=Ce(()=>{switch(xe.graphMode){case"live":return t.ignoreLive?"heute":`${Ot.duration} min`;case"today":return"heute";case"day":return wt.date.getDate()+"."+(wt.date.getMonth()+1)+".";case"month":return xA(On.month-1,On.year);case"year":return di.year.toString();default:return"???"}}),i=["live","today","day","month","year"],o=["Live","Heute","Tag","Monat","Jahr"],a=Ce({get(){return xe.graphMode},set(y){switch(y){case"day":u();break;case"today":c();break;case"live":l();break;case"month":f();break;case"year":h()}}});function s(){r.value+=1,r.value>1&&(r.value=0)}function l(){xe.graphMode!="live"&&(xe.graphMode="live",Rt())}function u(){xe.graphMode!="day"&&xe.graphMode!="today"&&(xe.graphMode="day",Rt())}function c(){xe.graphMode!="today"&&(xe.graphMode="today",gU(new Date),Rt())}function f(){xe.graphMode!="month"&&(xe.graphMode="month",Rt())}function h(){xe.graphMode!="year"&&(xe.graphMode="year",Rt())}const d=Ce(()=>r.value>0?{border:"1px solid var(--color-frame)"}:""),g=Ce(()=>r.value==1?"justify-content-between":"justify-content-end"),b=Ce(()=>r.value==1?"justify-content-between":"justify-content-center");return(y,_)=>(Se(),Re("div",{class:"d-flex flex-column justify-content-center pgselector rounded",style:xt(d.value)},[r.value==2?(Se(),Ke(K1,{key:0,id:"pgm2",modelValue:a.value,"onUpdate:modelValue":_[0]||(_[0]=m=>a.value=m),class:"m-2",options:i.map((m,w)=>({text:o[w],value:m,color:"var(--color-menu)",active:m==we(xe).graphMode}))},null,8,["modelValue","options"])):We("",!0),r.value==1?(Se(),Re("span",{key:1,type:"button",class:It(["arrowButton d-flex align-self-center mb-3 mt-3",{disabled:!t.showLeftButton}]),onClick:_[1]||(_[1]=m=>y.$emit("shiftUp"))},[..._[6]||(_[6]=[ye("i",{class:"fa-solid fa-xl fa-chevron-circle-up"},null,-1)])],2)):We("",!0),ye("div",{class:It(["d-flex align-items-center",b.value])},[r.value==1?(Se(),Re("span",{key:0,type:"button",class:It(["p-1",{disabled:!t.showLeftButton}]),onClick:_[2]||(_[2]=m=>y.$emit("shiftLeft"))},[..._[7]||(_[7]=[ye("span",{class:"fa-solid fa-xl fa-chevron-circle-left arrowButton"},null,-1)])],2)):We("",!0),r.value<2?(Se(),Re("span",{key:1,type:"button",class:"btn-outline-secondary p-2 px-3 badge rounded-pill datebadge",onClick:s},qe(n.value),1)):We("",!0),r.value==1?(Se(),Re("span",{key:2,id:"graphRightButton",type:"button",class:It(["arrowButton fa-solid fa-xl fa-chevron-circle-right p-1",{disabled:!t.showRightButton}]),onClick:_[3]||(_[3]=m=>y.$emit("shiftRight"))},null,2)):We("",!0)],2),ye("div",{class:It(["d-flex align-items-center",g.value])},[r.value==1?(Se(),Re("span",BU)):We("",!0),r.value==1?(Se(),Re("span",{key:1,id:"graphLeftButton",type:"button",class:It(["arrowButton fa-solid fa-xl fa-chevron-circle-down p-1",{disabled:!t.showLeftButton}]),onClick:_[4]||(_[4]=m=>y.$emit("shiftDown"))},null,2)):We("",!0),r.value>0?(Se(),Re("span",{key:2,type:"button",class:"p-1",onClick:_[5]||(_[5]=m=>r.value=0)},[..._[8]||(_[8]=[ye("span",{class:"fa-solid fa-xl fa-circle-check"},null,-1)])])):We("",!0)],2)],4))}}),z1=rt(DU,[["__scopeId","data-v-7fd067cd"]]),$U={class:"d-flex justify-content-end"},UU={class:"grid-col-12"},FU=["viewBox"],jU=["transform"],WU=2,VU="Leistung / Ladestand ",HU=Ye({__name:"PowerGraph",setup(e){function t(){let r=De.usageStackOrder+1;r>WU&&(r=0),De.usageStackOrder=r,uU(!0)}return(r,n)=>(Se(),Ke(sc,null,{title:Ue(()=>[Xe(qe(VU))]),buttons:Ue(()=>[ye("div",$U,[Me(z1,{widgetid:"graphsettings","show-left-button":!0,"show-right-button":!0,"ignore-live":!1,onShiftLeft:we(kg),onShiftRight:we(H1),onShiftUp:we(q1),onShiftDown:we(G1)},null,8,["onShiftLeft","onShiftRight","onShiftUp","onShiftDown"])])]),default:Ue(()=>[ye("div",UU,[ye("figure",{id:"powergraph",class:"p-0 m-0 align-self-stretch",onClick:t},[(Se(),Re("svg",{viewBox:"0 0 "+we(En)+" "+we(oi)},[Me(yU,{width:we(En)-we(Ze).left-2*we(Ze).right,height:(we(oi)-we(Ze).top-we(Ze).bottom)/2,margin:we(Ze)},null,8,["width","height","margin"]),Me(_U,{width:we(En)-we(Ze).left-2*we(Ze).right,height:(we(oi)-we(Ze).top-we(Ze).bottom)/2,margin:we(Ze),"stack-order":we(De).usageStackOrder},null,8,["width","height","margin","stack-order"]),Me(IU,{width:we(En)-we(Ze).left-2*we(Ze).right,height:we(oi)-we(Ze).top-we(Ze).bottom,margin:we(Ze),"graph-data":we(xe)},null,8,["width","height","margin","graph-data"]),ye("g",{transform:"translate("+we(Ze).left+","+we(Ze).top+")"},[(we(xe).graphMode=="day"||we(xe).graphMode=="today"||we(xe).graphMode=="live")&&Object.values(we(Ve)).length>0?(Se(),Ke(Pf,{key:0,width:we(En)-we(Ze).left-2*we(Ze).right,height:(we(oi)-we(Ze).top-we(Ze).bottom)/2,margin:we(Ze),order:0},null,8,["width","height","margin"])):We("",!0),(we(xe).graphMode=="day"||we(xe).graphMode=="today"||we(xe).graphMode=="live")&&Object.values(we(Ve)).length>1?(Se(),Ke(Pf,{key:1,width:we(En)-we(Ze).left-2*we(Ze).right,height:(we(oi)-we(Ze).top-we(Ze).bottom)/2,margin:we(Ze),order:1},null,8,["width","height","margin"])):We("",!0),["day","today","live"].includes(we(xe).graphMode)&&we(ht).isBatteryConfigured?(Se(),Ke(Pf,{key:2,width:we(En)-we(Ze).left-2*we(Ze).right,height:(we(oi)-we(Ze).top-we(Ze).bottom)/2,margin:we(Ze),order:2},null,8,["width","height","margin"])):We("",!0),["day","today","live"].includes(we(xe).graphMode)?(Se(),Ke(PU,{key:3,width:we(En)-we(Ze).left-we(Ze).right,height:(we(oi)-we(Ze).top-we(Ze).bottom)/2,margin:we(Ze)},null,8,["width","height","margin"])):We("",!0)],8,jU)],8,FU))])])]),_:1}))}}),qU=rt(HU,[["__scopeId","data-v-ba892fa4"]]),GU=["id"],KU=["x","width","height","fill"],zU=["x","width","height"],YU=["x","y","width","height"],QU=Ye({__name:"EmBar",props:{item:{},xScale:{},yScale:{},margin:{},height:{},barcount:{},autarchy:{},autText:{}},setup(e){const t=e,r=Ce(()=>t.height-t.yScale(t.item.energy)-t.margin.top-t.margin.bottom),n=Ce(()=>t.item.energyPv>0?t.height-t.yScale(t.item.energyPv)-t.margin.top-t.margin.bottom:0),i=Ce(()=>t.item.energyPv>0?t.height-t.yScale(t.item.energyBat)-t.margin.top-t.margin.bottom:0);return(o,a)=>(Se(),Re("g",{id:"bar-"+t.item.name,transform:"scale(1,-1) translate (0,-445)"},[ye("rect",{class:"bar",x:t.xScale(e.item.name),y:"0",width:t.xScale.bandwidth(),height:r.value,fill:e.item.color},null,8,KU),ye("rect",{class:"bar",x:t.xScale(e.item.name)+t.xScale.bandwidth()/6,y:"0",width:t.xScale.bandwidth()*2/3,height:n.value,fill:"var(--color-pv)","fill-opacity":"66%"},null,8,zU),ye("rect",{class:"bar",x:t.xScale(e.item.name)+t.xScale.bandwidth()/6,y:n.value,width:t.xScale.bandwidth()*2/3,height:i.value,fill:"var(--color-battery)","fill-opacity":"66%"},null,8,YU)],8,GU))}}),JU={id:"emBargraph"},XU=Ye({__name:"EMBarGraph",props:{plotdata:{},xScale:{},yScale:{},margin:{},height:{}},setup(e){const t=e;function r(i){if(i.name=="PV"){const o=xe.graphMode=="live"||xe.graphMode=="day"?ot:He.items,s=(xe.graphMode=="live"||xe.graphMode=="day"?Qe:He.items).evuOut.energy,l=o.pv.energy;return Math.round((l-s)/l*100)}else if(i.name=="Netz"){const o=xe.graphMode=="live"||xe.graphMode=="day"?ot:He.items,a=xe.graphMode=="live"||xe.graphMode=="day"?Qe:He.items,s=a.evuOut.energy,l=o.evuIn.energy,u=o.pv.energy,c=o.batOut.energy,f=a.batIn.energy;return Math.round((u+c-s-f)/(u+c+l-s-f)*100)}else return i.pvPercentage}function n(i){return i.name=="PV"?"Eigen":"Aut"}return(i,o)=>(Se(),Re("g",JU,[(Se(!0),Re(ut,null,Wr(t.plotdata,(a,s)=>(Se(),Re("g",{key:s},[Me(QU,{item:a,"x-scale":t.xScale,"y-scale":t.yScale,margin:t.margin,height:t.height,barcount:t.plotdata.length,"aut-text":n(a),autarchy:r(a)},null,8,["item","x-scale","y-scale","margin","height","barcount","aut-text","autarchy"])]))),128)),o[0]||(o[0]=ye("animateTransform",{"attribute-name":"transform",type:"scale",from:"1 0",to:"1 1",begin:"0s",dur:"2s"},null,-1))]))}}),ZU=["origin"],e3=Ye({__name:"EMYAxis",props:{yScale:{type:[Function,Object]},width:{},fontsize:{}},setup(e){const t=e,r=Ce(()=>Zu(t.yScale).tickFormat(i=>i>0?(i/1e3).toString():"").ticks(6).tickSizeInner(-t.width)),n=Ce(()=>{const i=Gr("g#emYAxis");return i.attr("class","axis").call(r.value),i.append("text").attr("y",6).attr("dy","0.71em").attr("text-anchor","end").text("energy"),i.selectAll(".tick").attr("font-size",t.fontsize),De.showGrid?i.selectAll(".tick line").attr("stroke","var(--color-grid)").attr("stroke-width","0.5"):i.selectAll(".tick line").attr("stroke","var(--color-bg)"),i.select(".domain").attr("stroke","var(--color-bg)"),"emYAxis.vue"});return(i,o)=>(Se(),Re("g",{id:"emYAxis",class:"axis",origin:n.value},null,8,ZU))}}),t3=["id"],r3=["x","y","font-size"],n3=["x","y","font-size","fill"],i3=["x","y","font-size","fill"],o3=Ye({__name:"EmLabel",props:{item:{},xScale:{},yScale:{},margin:{},height:{},barcount:{},autarchy:{},autText:{}},setup(e){const t=e,r=Ce(()=>t.autarchy?t.yScale(t.item.energy)-25:t.yScale(t.item.energy)-10),n=Ce(()=>{let l=16,u=t.barcount;return u<=5?l=16:u==6?l=14:u>6&&u<=8?l=13:u==9?l=11:u==10?l=10:l=9,l}),i=Ce(()=>{let l=12,u=t.barcount;return u<=5?l=12:u==6?l=11:u>6&&u<=8||u==9?l=8:u==10?l=7:l=6,l});function o(l,u){return u.length>i.value?u.substring(0,i.value)+".":u}function a(){return t.autarchy?t.autText+": "+t.autarchy.toLocaleString(void 0)+" %":""}function s(){return"var(--color-pv)"}return(l,u)=>(Se(),Re("g",{id:"barlabel-"+t.item.name},[ye("text",{x:t.xScale(e.item.name)+t.xScale.bandwidth()/2,y:r.value,"font-size":n.value,"text-anchor":"middle",fill:"var(--color-menu)"},qe(we(Op)(e.item.energy,we(De).decimalPlaces,!1)),9,r3),ye("text",{x:t.xScale(e.item.name)+t.xScale.bandwidth()/2,y:t.yScale(e.item.energy)-10,"font-size":n.value-2,"text-anchor":"middle",fill:s()},qe(a()),9,n3),ye("text",{x:t.xScale(e.item.name)+t.xScale.bandwidth()/2,y:t.height-t.margin.bottom-5,"font-size":n.value,"text-anchor":"middle",fill:e.item.color,class:It(e.item.icon.length<=2?"fas":"")},qe(o(e.item.name,e.item.icon)),11,i3)],8,t3))}}),s3={id:"emBarLabels"},a3=Ye({__name:"EMLabels",props:{plotdata:{},xScale:{},yScale:{},height:{},margin:{}},setup(e){const t=e;function r(i){if(i.name=="PV"){const o=xe.graphMode=="live"||xe.graphMode=="day"?ot:He.items,s=(xe.graphMode=="live"||xe.graphMode=="day"?Qe:He.items).evuOut.energy,l=o.pv.energy;return Math.round((l-s)/l*100)}else if(i.name=="Netz"){const o=xe.graphMode=="live"||xe.graphMode=="day"?ot:He.items,a=xe.graphMode=="live"||xe.graphMode=="day"?Qe:He.items,s=a.evuOut.energy,l=o.evuIn.energy,u=o.pv.energy,c=o.batOut.energy,f=a.batIn.energy;return u+c-s-f>0?Math.round((u+c-s-f)/(u+c+l-s-f)*100):0}else return i.pvPercentage}function n(i){return i.name=="PV"?"Eigen":"Aut"}return(i,o)=>(Se(),Re("g",s3,[(Se(!0),Re(ut,null,Wr(t.plotdata,(a,s)=>(Se(),Re("g",{key:s},[Me(o3,{item:a,"x-scale":t.xScale,"y-scale":t.yScale,margin:t.margin,height:t.height,barcount:t.plotdata.length,"aut-text":n(a),autarchy:r(a)},null,8,["item","x-scale","y-scale","margin","height","barcount","aut-text","autarchy"])]))),128))]))}}),l3={class:"grid-col-12"},u3={id:"energymeter",class:"energymeter p-0 m-0 align-self-stretch"},c3={viewBox:"0 0 500 500"},f3=["transform"],h3=["x"],d3={key:0},U_=500,Rf=500,F_=12,p3="Energie",g3=Ye({__name:"EnergyMeter",setup(e){const t={top:25,bottom:30,left:25,right:0},r=Ce(()=>{let a=Object.values(ot),s=o.value,l=He.values(),u=[];switch(De.debug&&(console.debug("----------------------- source summary -----------------"),console.debug(ot),console.debug("----------------------- usage details ------------------"),console.debug(o.value),console.debug("----------------------- historic summary ---------------"),console.debug(He),console.debug("--------------------------------------------------------")),iu.value==!0&&(iu.value=!1),xe.graphMode){default:case"live":case"today":u=a.concat(s).filter(c=>c.energy>0);break;case"day":case"month":case"year":l.length==0?Gs.value=!0:(Gs.value=!1,u=l.filter(c=>c.energy>0))}return u}),n=Ce(()=>mu().range([0,U_-t.left-t.right]).domain(r.value.map(a=>a.name)).padding(.4)),i=Ce(()=>dn().range([Rf-t.bottom-t.top,15]).domain([0,QR(r.value,a=>a.energy)])),o=Ce(()=>{const a=Object.values(Ve).length,s=[...Nt.values()].filter(l=>l.configured).length;return[Qe.evuOut,Qe.devices,Qe.charging].concat(a>1?Object.values(Ve).map(l=>l.toPowerItem()):[]).concat(s>1?[...Nt.values()].filter(l=>l.configured&&l.showInGraph):[]).concat([Qe.batIn,Qe.house])});return(a,s)=>(Se(),Ke(sc,null,{title:Ue(()=>[Xe(qe(p3))]),buttons:Ue(()=>[Me(z1,{widgetid:"graphsettings","show-left-button":!0,"show-right-button":!0,"ignore-live":!0,onShiftLeft:we(kg),onShiftRight:we(H1),onShiftUp:we(q1),onShiftDown:we(G1)},null,8,["onShiftLeft","onShiftRight","onShiftUp","onShiftDown"])]),default:Ue(()=>[ye("div",l3,[ye("figure",u3,[(Se(),Re("svg",c3,[ye("g",{transform:"translate("+t.left+","+t.top+")"},[Me(XU,{plotdata:r.value,"x-scale":n.value,"y-scale":i.value,height:Rf,margin:t},null,8,["plotdata","x-scale","y-scale"]),Me(e3,{"y-scale":i.value,width:U_,fontsize:F_,config:we(De)},null,8,["y-scale","config"]),ye("text",{x:-t.left,y:"-15",fill:"var(--color-axis)","font-size":F_},qe(we(xe).graphMode=="year"?"MWh":"kWh"),9,h3),Me(a3,{plotdata:r.value,"x-scale":n.value,"y-scale":i.value,height:Rf,margin:t,config:we(De)},null,8,["plotdata","x-scale","y-scale","config"])],8,f3)]))])]),we(Gs)?(Se(),Re("p",d3,"No data")):We("",!0)]),_:1}))}}),m3=rt(g3,[["__scopeId","data-v-35f92695"]]),y3=["id"],b3={class:"modal-dialog modal-lg modal-fullscreen-lg-down"},_3={class:"modal-content"},v3={class:"modal-header"},w3={class:"modal-title scaled"},E3=["id"],S3=Ye({__name:"ModalComponent",props:{modalId:{}},setup(e){const t=e;return(r,n)=>(Se(),Re("div",{id:t.modalId,class:"modal fade"},[ye("div",b3,[ye("div",_3,[ye("div",v3,[ye("h3",w3,[kr(r.$slots,"title",{},void 0)]),n[0]||(n[0]=ye("button",{type:"button",class:"btn-close buttonTextSize d-flex justify-content-center pt-3 pb-0","data-bs-dismiss":"modal"},[ye("i",{class:"fa-solid fa-lg fa-circle-check m-0 p-0"})],-1))]),ye("div",{id:"modal-body-"+t.modalId,class:"modal-body"},[kr(r.$slots,"default",{},void 0)],8,E3),n[1]||(n[1]=ye("div",{class:"modal-footer"},null,-1))])])],8,y3))}}),Nf=rt(S3,[["__scopeId","data-v-9e5993e8"]]),x3={class:"digit scaled",type:"button"},A3=Ye({__name:"PadButton",props:{modelValue:{},color:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=zt(!1);function i(){n.value=!0,a("update:modelValue",r.modelValue),setTimeout(()=>{n.value=!1},300)}const o=Ce(()=>n.value?{"background-color":"white",color:"black"}:{"background-color":r.color??"var(--color-axis)"}),a=t;return(s,l)=>(Se(),Re("div",{class:"padbutton",style:xt(o.value),onClick:i},[ye("span",x3,[kr(s.$slots,"default",{},void 0)])],4))}}),Xa=rt(A3,[["__scopeId","data-v-cc256a6f"]]),T3={class:"numberpad"},I3={class:"codedisplay scaled"},C3={class:"numberentry"},k3=Ye({__name:"NumberPad",props:{modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=zt(e.modelValue),i=t,o=Ce(()=>n.value.length==0?"Bitte geben Sie die PIN ein":"*".repeat(n.value.length));function a(s){s==-1?n.value=n.value.slice(0,-1):s==-2?(i("update:modelValue",n.value),n.value=""):n.value=n.value+s.toString()}return(s,l)=>(Se(),Re("div",T3,[ye("p",I3,qe(o.value),1),ye("div",C3,[(Se(),Re(ut,null,Wr(9,u=>Me(Xa,{key:u,"model-value":u,"onUpdate:modelValue":a},{default:Ue(()=>[Xe(qe(u),1)]),_:2},1032,["model-value"])),64)),Me(Xa,{"model-value":0,"onUpdate:modelValue":a},{default:Ue(()=>[...l[0]||(l[0]=[Xe("0",-1)])]),_:1}),Me(Xa,{"model-value":-1,color:"var(--color-devices)","onUpdate:modelValue":a},{default:Ue(()=>[...l[1]||(l[1]=[ye("span",{class:"fas fa-delete-left"},null,-1)])]),_:1}),Me(Xa,{"model-value":-2,color:"var(--color-devices)","data-bs-dismiss":"modal","onUpdate:modelValue":a},{default:Ue(()=>[...l[2]||(l[2]=[ye("span",{class:"fas fa-circle-check"},null,-1)])]),_:1})])]))}}),O3=rt(k3,[["__scopeId","data-v-63c8fa5c"]]),M3={class:"statustable"},P3={key:0,class:"controlbuttons d-flex justify-content-between p-5"},R3={key:1,class:"confirmationBox rounded m-5 p-5 d-flex flex-column align-items-center"},N3={class:"d-flex justify-content-between mt-3"},L3={key:2,class:"confirmationBox rounded m-5 p-5 d-flex flex-column align-items-center"},B3={class:"d-flex justify-content-between mt-3"},D3={key:3,class:"confirmationBox rounded m-5 p-5 d-flex flex-column align-items-center"},$3={key:4,class:"confirmationBox rounded m-5 p-5 d-flex flex-column align-items-center"},U3=Ye({__name:"StatusPage",setup(e){let t=zt(0);function r(){t.value=4,hi.parentChargePoint1!==void 0?(console.log("Shutting down secondary charge point: ",hi.parentChargePoint1),ji("chargepointShutdown",{chargePoint:hi.parentChargePoint1})):(console.log("Shutting down primary system"),ji("systemShutdown"))}function n(){t.value=3,hi.parentChargePoint1!==void 0?(console.log("Rebooting secondary charge point:",hi.parentChargePoint1),ji("chargepointReboot",{chargePoint:hi.parentChargePoint1})):(console.log("Rebooting primary system"),ji("systemReboot"))}function i(){location.reload()}return(o,a)=>(Se(),Re(ut,null,[ye("div",M3,[a[7]||(a[7]=ye("span",{class:"header"},"IP-Adresse:",-1)),ye("span",null,qe(we(ht).ipAddress),1),a[8]||(a[8]=ye("span",{class:"header"},"Systemzeit:",-1)),ye("span",null,qe(new Date(we(ht).systemTime*1e3).toLocaleString(void 0)),1),a[9]||(a[9]=ye("span",{class:"header"},"Version:",-1)),ye("span",null,qe(we(ht).version),1),a[10]||(a[10]=ye("span",{class:"header"},"Version (Details):",-1)),ye("span",null,qe(we(ht).versionDetails),1),a[11]||(a[11]=ye("span",{class:"header"},"Entwicklungszweig:",-1)),ye("span",null,qe(we(ht).devBranch),1)]),we(t)==0?(Se(),Re("div",P3,[ye("button",{class:"btn controlbutton",style:{"background-color":"var(--color-battery)"},onClick:a[0]||(a[0]=s=>i())},[...a[12]||(a[12]=[ye("i",{class:"fa-solid fa-rotate-left"},null,-1),Xe(" Display neu laden ",-1)])]),ye("button",{class:"btn controlbutton",style:{"background-color":"var(--color-evu)"},onClick:a[1]||(a[1]=s=>Ct(t)?t.value=1:t=1)},[...a[13]||(a[13]=[ye("i",{class:"fa-solid fa-power-off"},null,-1),Xe(" openWB neu starten ",-1)])]),ye("button",{class:"btn controlbutton",style:{"background-color":"var(--color-evu)"},onClick:a[2]||(a[2]=s=>Ct(t)?t.value=2:t=2)},[...a[14]||(a[14]=[ye("i",{class:"fa-solid fa-power-off"},null,-1),Xe(" openWB abschalten ",-1)])])])):We("",!0),we(t)==1?(Se(),Re("div",R3,[a[15]||(a[15]=ye("span",{class:"confirmTitle"},"Neustart",-1)),a[16]||(a[16]=ye("span",{class:"confirmQuestion"},"Die openWB jetzt neu starten?",-1)),ye("div",N3,[ye("button",{class:"btn cancelButton mx-3 px-3",onClick:a[3]||(a[3]=s=>Ct(t)?t.value=0:t=0)}," Abbrechen "),ye("button",{class:"btn confirmButton mx-3 px-3",onClick:a[4]||(a[4]=s=>n())}," Neustart ")])])):We("",!0),we(t)==2?(Se(),Re("div",L3,[a[17]||(a[17]=ye("span",{class:"confirmTitle"},"Abschalten",-1)),a[18]||(a[18]=ye("span",{class:"confirmQuestion"},"Die openWB jetzt abschalten?",-1)),ye("div",B3,[ye("button",{class:"btn cancelButton mx-3 px-3",onClick:a[5]||(a[5]=s=>Ct(t)?t.value=0:t=0)}," Abbrechen "),ye("button",{class:"btn confirmButton mx-3 px-3",onClick:a[6]||(a[6]=s=>r())}," Abschalten ")])])):We("",!0),we(t)==3?(Se(),Re("div",D3,[...a[19]||(a[19]=[ye("span",{class:"confirmTitle"},"Die openWB startet jetzt neu. Bitte warten.",-1)])])):We("",!0),we(t)==4?(Se(),Re("div",$3,[...a[20]||(a[20]=[ye("span",{class:"confirmTitle"},"Die openWB wird heruntergefahren. Zum Starten die Stromversorgung aus- und wieder einschalten.",-1)])])):We("",!0)],64))}}),F3=rt(U3,[["__scopeId","data-v-74ffcddc"]]),j3={class:"d-flex align-items-baseline m-0 p-0 scaled"},W3={class:"configwidget ms-1 mb-2 p-0 pt-2 d-flex justify-content-stretch align-items-center"},V3={class:"configslot justify-content-stretch d-flex"},H3=Ye({__name:"ConfigItem",props:{title:{},infotext:{},icon:{},iconcolor:{},fullwidth:{type:Boolean}},setup(e){const t=e;return(r,n)=>(Se(),Re(ut,null,[ye("span",j3,[t.icon?(Se(),Re("i",{key:0,class:It(["fa-solid fa-sm m-0 p-0 me-2 item-icon",t.icon]),style:xt({color:t.iconcolor?t.iconcolor:"var(--color-charging)"})},null,6)):We("",!0),Xe(" "+qe(e.title),1)]),ye("div",W3,[ye("span",V3,[kr(r.$slots,"default",{},void 0)])])],64))}}),gt=rt(H3,[["__scopeId","data-v-b438f667"]]),q3={class:"rangewidget d-flex flex-column"},G3={class:"rangeslider d-flex flex-fill justify-content-between align-items-center"},K3={class:"d-flex flex-fill flex-column justify-content-center m-0 p-0"},z3={key:0,id:"rangeIndicator",class:"rangeIndicator"},Y3={viewBox:"0 0 100 2"},Q3=["width"],J3=["x","width"],X3=["x","width"],Z3=["id","min","max","step"],eF={class:"d-flex justify-content-between align-items-center"},tF={class:"minlabel ps-4"},rF={class:"valuelabel"},nF={class:"maxlabel pe-4"},iF=Ye({__name:"RangeInput",props:{id:{},min:{},max:{},step:{},unit:{},decimals:{},showSubrange:{type:Boolean},subrangeMin:{},subrangeMax:{},modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=r.decimals??0,i=t,o=Ce({get(){return Math.round(r.modelValue*Math.pow(10,n))/Math.pow(10,n)},set(h){i("update:modelValue",h)}});function a(){o.value>r.min&&(o.value=Math.round((o.value-r.step)*Math.pow(10,n))/Math.pow(10,n))}function s(){o.valuedn().domain([r.min,r.max]).range([0,100])),u=Ce(()=>l.value(r.subrangeMin?r.subrangeMin:0)),c=Ce(()=>r.subrangeMin&&r.subrangeMax?l.value(r.subrangeMax)-l.value(r.subrangeMin):0),f=Ce(()=>r.subrangeMax&&r.max?l.value(r.max)-l.value(r.subrangeMax):0);return(h,d)=>(Se(),Re("span",q3,[ye("span",G3,[ye("span",{type:"button",class:"minusButton",onClick:a},[...d[1]||(d[1]=[ye("i",{class:"fa fa-xl fa-minus-square me-2"},null,-1)])]),ye("div",K3,[r.showSubrange?(Se(),Re("figure",z3,[(Se(),Re("svg",Y3,[ye("g",null,[ye("rect",{class:"below",x:0,y:"0",width:u.value,height:"2",rx:"1",ry:"1",fill:"var(--color-evu)"},null,8,Q3),ye("rect",{class:"bar",x:u.value,y:"0",width:c.value,height:"2",rx:"1",ry:"1",fill:"var(--color-charging)"},null,8,J3),ye("rect",{class:"above",x:u.value+c.value,y:"0",width:f.value,height:"2",rx:"1",ry:"1",fill:"var(--color-pv)"},null,8,X3)])]))])):We("",!0),$s(ye("input",{id:e.id,"onUpdate:modelValue":d[0]||(d[0]=g=>o.value=g),type:"range",class:"form-range flex-fill",min:e.min,max:e.max,step:e.step},null,8,Z3),[[gA,o.value,void 0,{number:!0}]])]),ye("span",{type:"button",class:"plusButton",onClick:s},[...d[2]||(d[2]=[ye("i",{class:"fa fa-xl fa-plus-square ms-2"},null,-1)])])]),ye("span",eF,[ye("span",tF,qe(e.min),1),ye("span",rF,qe(o.value)+" "+qe(e.unit),1),ye("span",nF,qe(e.max),1)])]))}}),yr=rt(iF,[["__scopeId","data-v-41dc3794"]]),oF=["id","value"],sF=Ye({__name:"RadioInput",props:{options:{},modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=t,i=Ce({get(){return r.modelValue},set(s){console.log(r.options),console.log("set value",s),n("update:modelValue",s)}});function o(s){return r.options[s][2]?{color:r.options[s][2]}:{color:"var(--color-fg)"}}function a(s){console.log(s);let l=s.target;for(;l&&!l.value&&l.parentElement;)l=l.parentElement;l.value&&(typeof r.options[0][1]=="number"?i.value=Number(l.value):i.value=l.value)}return(s,l)=>(Se(),Re("div",null,[(Se(!0),Re(ut,null,Wr(e.options,(u,c)=>(Se(),Re("button",{id:"radio-"+u[1],key:c,class:It(["btn btn-outline-secondary radiobutton me-2 mb-0 px-2",u[1]==i.value?"active":""]),value:u[1],style:xt(o(c)),onClick:a},[ye("span",{style:xt(o(c)),class:"scaled"},[u[3]?(Se(),Re("i",{key:0,class:It(["fa-solid",u[3]])},null,2)):We("",!0),Xe(" "+qe(u[0]),1)],4)],14,oF))),128))]))}}),bi=rt(sF,[["__scopeId","data-v-1e5bd3af"]]),aF={class:"instantsettings"},lF={key:0,class:"fullwidth"},uF=Ye({__name:"ConfigInstant",props:{chargepointId:{}},setup(e){const t=e,r=Ce(()=>Ve[t.chargepointId]),n=[{name:"keine",id:"none"},{name:"EV-SoC",id:"soc"},{name:"Energiemenge",id:"amount"}],i=Ce({get(){return r.value.instantMaxEnergy/1e3},set(o){r.value.instantMaxEnergy=o*1e3}});return(o,a)=>(Se(),Re("div",aF,[Me(gt,{title:"Stromstärke",icon:"fa-bolt",fullwidth:!0},{default:Ue(()=>[Me(yr,{id:"targetCurrent",modelValue:r.value.instantTargetCurrent,"onUpdate:modelValue":a[0]||(a[0]=s=>r.value.instantTargetCurrent=s),min:6,max:32,step:1,unit:"A"},null,8,["modelValue"])]),_:1}),Me(gt,{title:"Anzahl Phasen",icon:"fa-plug",fullwidth:!0},{default:Ue(()=>[Me(bi,{id:"targetPhases",modelValue:r.value.instantTargetPhases,"onUpdate:modelValue":a[1]||(a[1]=s=>r.value.instantTargetPhases=s),options:[["Eine",1],["Max",3],["Auto",0]]},null,8,["modelValue"])]),_:1}),r.value.instantChargeLimitMode!="none"?(Se(),Re("hr",lF)):We("",!0),Me(gt,{title:"Begrenzung",icon:"fa-hand",fullwidth:!0},{default:Ue(()=>[Me(bi,{modelValue:r.value.instantChargeLimitMode,"onUpdate:modelValue":a[2]||(a[2]=s=>r.value.instantChargeLimitMode=s),options:n.map(s=>[s.name,s.id])},null,8,["modelValue","options"])]),_:1}),r.value.instantChargeLimitMode=="soc"?(Se(),Ke(gt,{key:1,title:"Maximaler SoC",icon:"fa-sliders",fullwidth:!0},{default:Ue(()=>[Me(yr,{id:"maxSoc",modelValue:r.value.instantTargetSoc,"onUpdate:modelValue":a[3]||(a[3]=s=>r.value.instantTargetSoc=s),min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])]),_:1})):We("",!0),r.value.instantChargeLimitMode=="amount"?(Se(),Ke(gt,{key:2,title:"Zu ladende Energie",icon:"fa-sliders",fullwidth:!0},{default:Ue(()=>[Me(yr,{id:"maxEnergy",modelValue:i.value,"onUpdate:modelValue":a[4]||(a[4]=s=>i.value=s),min:0,max:100,step:1,unit:"kWh"},null,8,["modelValue"])]),_:1})):We("",!0)]))}}),cF=rt(uF,[["__scopeId","data-v-49084b39"]]),fF={class:"form-check form-switch d-flex align-items-center justify-content-center"},hF=Ye({__name:"SwitchInput",props:{modelValue:{type:Boolean},onColor:{},offColor:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=t,i=Ce({get(){return r.modelValue},set(o){n("update:modelValue",o)}});return(o,a)=>(Se(),Re("div",fF,[$s(ye("input",{"onUpdate:modelValue":a[0]||(a[0]=s=>i.value=s),class:"form-check-input",type:"checkbox",role:"switch"},null,512),[[mA,i.value]])]))}}),Qi=rt(hF,[["__scopeId","data-v-547e6de4"]]),dF={class:"pvsettings pt-2"},pF={key:3,class:"fullwidth"},gF=Ye({__name:"ConfigPv",props:{chargepointId:{}},setup(e){const t=e,r=Ce(()=>Ve[t.chargepointId]),n=[{name:"keine",id:"none"},{name:"EV-SoC",id:"soc"},{name:"Energiemenge",id:"amount"}],i=Ce({get(){return r.value.pvMaxEnergy/1e3},set(s){r.value.pvMaxEnergy=s*1e3}}),o=Ce({get(){return r.value.pvMinCurrent>5},set(s){s?r.value.pvMinCurrent=6:r.value.pvMinCurrent=0}}),a=Ce({get(){return r.value.pvMinSoc>0},set(s){s?r.value.pvMinSoc=50:r.value.pvMinSoc=0}});return(s,l)=>(Se(),Re("div",dF,[Me(gt,{title:"Minimaler Ladestrom",icon:"fa-bolt",fullwidth:!0},{default:Ue(()=>[Me(Qi,{modelValue:o.value,"onUpdate:modelValue":l[0]||(l[0]=u=>o.value=u)},null,8,["modelValue"])]),_:1}),o.value?(Se(),Ke(gt,{key:0,title:"...bei Ladestrom (minimal)",fullwidth:!0},{default:Ue(()=>[Me(yr,{id:"minCurrent",modelValue:r.value.pvMinCurrent,"onUpdate:modelValue":l[1]||(l[1]=u=>r.value.pvMinCurrent=u),min:6,max:32,step:1,unit:"A"},null,8,["modelValue"])]),_:1})):We("",!0),Me(gt,{title:"Anzahl Phasen",icon:"fa-plug",fullwidth:!0},{default:Ue(()=>[Me(bi,{id:"targetPhases",modelValue:r.value.pvTargetPhases,"onUpdate:modelValue":l[2]||(l[2]=u=>r.value.pvTargetPhases=u),options:[["Eine",1],["Max",3],["Auto",0]]},null,8,["modelValue"])]),_:1}),Me(gt,{title:"Mindest-Ladestand",icon:"fa-battery-half",fullwidth:!0},{default:Ue(()=>[Me(Qi,{modelValue:a.value,"onUpdate:modelValue":l[3]||(l[3]=u=>a.value=u)},null,8,["modelValue"])]),_:1}),a.value?(Se(),Ke(gt,{key:1,title:"...bis SoC",fullwidth:!0},{default:Ue(()=>[Me(yr,{id:"minSoc",modelValue:r.value.pvMinSoc,"onUpdate:modelValue":l[4]||(l[4]=u=>r.value.pvMinSoc=u),min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])]),_:1})):We("",!0),a.value?(Se(),Ke(gt,{key:2,title:"...mit Ladestrom",fullwidth:!0},{default:Ue(()=>[Me(yr,{id:"minSocCurrent",modelValue:r.value.pvMinSocCurrent,"onUpdate:modelValue":l[5]||(l[5]=u=>r.value.pvMinSocCurrent=u),min:6,max:32,step:1,unit:"A"},null,8,["modelValue"])]),_:1})):We("",!0),r.value.pvChargeLimitMode!="none"?(Se(),Re("hr",pF)):We("",!0),Me(gt,{title:"Begrenzung",icon:"fa-hand",fullwidth:!0},{default:Ue(()=>[Me(bi,{modelValue:r.value.pvChargeLimitMode,"onUpdate:modelValue":l[6]||(l[6]=u=>r.value.pvChargeLimitMode=u),options:n.map(u=>[u.name,u.id])},null,8,["modelValue","options"])]),_:1}),r.value.pvChargeLimitMode=="soc"?(Se(),Ke(gt,{key:4,title:"Maximaler SoC",icon:"fa-sliders",fullwidth:!0},{default:Ue(()=>[Me(yr,{id:"maxSoc",modelValue:r.value.pvTargetSoc,"onUpdate:modelValue":l[7]||(l[7]=u=>r.value.pvTargetSoc=u),min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])]),_:1})):We("",!0),r.value.pvChargeLimitMode=="amount"?(Se(),Ke(gt,{key:5,title:"Zu ladende Energie",icon:"fa-sliders",fullwidth:!0},{default:Ue(()=>[Me(yr,{id:"maxEnergy",modelValue:i.value,"onUpdate:modelValue":l[8]||(l[8]=u=>i.value=u),min:0,max:100,step:1,unit:"kWh"},null,8,["modelValue"])]),_:1})):We("",!0)]))}}),mF=rt(gF,[["__scopeId","data-v-cdfd1b6d"]]),yF={class:"d-flex flex-column p-3"},bF={key:0,class:"info p-5"},_F={key:1,class:"table table-dark"},vF=Ye({__name:"ConfigScheduled",props:{chargePoint:{}},setup(e){const t={daily:"Täglich",once:"Einmal",weekly:"Wöchentlich"},r=e,n=Ce(()=>r.chargePoint.chargeTemplate?.chargemode.scheduled_charging.plans??[]);function i(s){return n.value[s].time}function o(s){return{"font-weight":n.value[s].active?"bold":"regular"}}function a(s){r.chargePoint.chargeTemplate.chargemode.scheduled_charging.plans[s].active=n.value[s].active,dt(r.chargePoint.id)}return(s,l)=>(Se(),Re("div",yF,[l[1]||(l[1]=ye("div",{class:"subtitle mb-4"},"Pläne für Zielladen:",-1)),n.value.length==0?(Se(),Re("div",bF," Pläne für das Zielladen können in den Einstellungen des Ladeprofils angelegt werden. ")):(Se(),Re("table",_F,[l[0]||(l[0]=ye("thead",null,[ye("tr",null,[ye("th"),ye("th",null,"Plan"),ye("th",null,"Zielzeit"),ye("th",null,"Ladeziel"),ye("th",null,"Wiederholung")])],-1)),ye("tbody",null,[(Se(!0),Re(ut,null,Wr(n.value,(u,c)=>(Se(),Re("tr",{key:c,style:xt(o(c))},[ye("td",null,[Me(Qi,{modelValue:u.active,"onUpdate:modelValue":[f=>u.active=f,f=>a(c)]},null,8,["modelValue","onUpdate:modelValue"])]),ye("td",null,qe(u.name),1),ye("td",null,qe(i(c)),1),ye("td",null,qe(u.limit.selected=="soc"?u.limit.soc_scheduled+"%":we(Op)(u.limit.amount,0)),1),ye("td",null,qe(t[u.frequency.selected]),1)],4))),128))])]))]))}}),wF=rt(vF,[["__scopeId","data-v-f5100bdc"]]),EF={class:"digit scaled",type:"button"},SF=Ye({__name:"PadButtonSmall",props:{modelValue:{},color:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=zt(!1);function i(){n.value=!0,a("update:modelValue",r.modelValue),setTimeout(()=>{n.value=!1},300)}const o=Ce(()=>n.value?{"background-color":"white",color:"black"}:{"background-color":r.color??"var(--color-axis)"}),a=t;return(s,l)=>(Se(),Re("div",{class:"padbutton",style:xt(o.value),onClick:i},[ye("span",EF,[kr(s.$slots,"default",{},void 0)])],4))}}),Oi=rt(SF,[["__scopeId","data-v-c4e8b67a"]]),xF={class:"numberpad"},AF={class:"codedisplay scaled px-3 py-1 mb-4"},TF={class:"numberentry"},IF=Ye({__name:"PricePad",props:{modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=zt(e.modelValue),i=t;function o(a){a==-1?n.value=n.value.slice(0,-1):a==-2?(i("update:modelValue",n.value),n.value=""):a==-3?n.value.indexOf(".")==-1&&(n.value=n.value+"."):n.value=n.value+a.toString()}return(a,s)=>(Se(),Re("div",xF,[ye("p",AF,qe(n.value)+" ct",1),ye("div",TF,[(Se(),Re(ut,null,Wr(3,l=>Me(Oi,{key:l,"model-value":l,"onUpdate:modelValue":o},{default:Ue(()=>[Xe(qe(l),1)]),_:2},1032,["model-value"])),64)),Me(Oi,{"model-value":-2,color:"var(--color-devices)","onUpdate:modelValue":o},{default:Ue(()=>[...s[0]||(s[0]=[ye("span",{class:"fas fa-circle-check"},null,-1)])]),_:1}),(Se(),Re(ut,null,Wr([4,5,6],l=>Me(Oi,{key:l,"model-value":l,"onUpdate:modelValue":o},{default:Ue(()=>[Xe(qe(l),1)]),_:2},1032,["model-value"])),64)),Me(Oi,{"model-value":-1,color:"var(--color-devices)","onUpdate:modelValue":o},{default:Ue(()=>[...s[1]||(s[1]=[ye("span",{class:"fas fa-delete-left"},null,-1)])]),_:1}),(Se(),Re(ut,null,Wr([7,8,9],l=>Me(Oi,{key:l,"model-value":l,"onUpdate:modelValue":o},{default:Ue(()=>[Xe(qe(l),1)]),_:2},1032,["model-value"])),64)),s[4]||(s[4]=ye("div",null,null,-1)),s[5]||(s[5]=ye("div",null,null,-1)),Me(Oi,{"model-value":0,"onUpdate:modelValue":o},{default:Ue(()=>[...s[2]||(s[2]=[Xe("0",-1)])]),_:1}),Me(Oi,{"model-value":-3,"onUpdate:modelValue":o},{default:Ue(()=>[...s[3]||(s[3]=[Xe(",",-1)])]),_:1})])]))}}),CF=rt(IF,[["__scopeId","data-v-2cdf4e9c"]]),kF={class:"pricesettings"},OF={class:"grapharea rounded shadow p-2"},MF={id:"pricechart"},PF={viewBox:"0 0 400 270"},RF=["id","origin","transform"],NF={class:"controlarea rounded shadow p-2"},LF={class:"pt-1 pb-2 d-flex justify-content-between"},BF={key:1,class:"sliderarea"},Lf=400,Bf=250,j_=12,DF=Ye({__name:"PriceChart",props:{chargePointId:{},globalview:{type:Boolean}},setup(e){const t=e,r=Ce(()=>Ve[t.chargePointId]),n=zt(!1),i=zt(!1);let o=r.value?zt(r.value.etMaxPrice):zt(0);const a=Ce({get(){return o.value},set(P){o.value=P,n.value=!0}}),s=Ce({get(){return(Math.round(o.value*10)/10).toString()},set(P){a.value=parseFloat(P)??a.value,i.value=!1}});function l(){r.value&&(r.value.etMaxPrice=a.value),n.value=!1}const u=zt(!1),c={top:0,bottom:15,left:20,right:15},f=Ce(()=>{let P=[];return Ft.etPriceList.size>0&&Ft.etPriceList.forEach((U,M)=>{P.push([M,U])}),P}),h=Ce(()=>f.value.length>1?(Lf-c.left-c.right)/f.value.length:0),d=Ce(()=>n.value?{background:"var(--color-charging)",color:"var(--color-fg)"}:{background:"var(--color-menu)"});function g(){i.value=!i.value}const b=Ce(()=>{let P=Zi(f.value,U=>U[0]);return P[1]&&(P[1]=new Date(P[1]),P[1].setTime(P[1].getTime()+36e5)),la().range([c.left,Lf-c.right]).domain(P)}),y=Ce(()=>{let P=Zi(f.value,U=>U[1]);return P[0]=P[0]?Math.floor(P[0]-1):0,P[1]=P[1]?Math.floor(P[1]+1):0,P}),_=Ce(()=>dn().range([Bf-c.bottom,0]).domain(y.value)),m=Ce(()=>{const P=Tg(),U=[[c.left,_.value(a.value)],[Lf-c.right-1,_.value(a.value)]];return P(U)}),w=Ce(()=>Bl(b.value).ticks(f.value.length).tickSize(5).tickSizeInner(-Bf).tickFormat(P=>P.getHours()%6==0&&P.getMinutes()==0?sa("%H:%M")(P):"")),S=Ce(()=>Zu(_.value).ticks(6).tickSizeInner(-365).tickFormat(P=>P.toString())),E=Ce(()=>{u.value==!0;const P=Gr("g#"+T.value);P.selectAll("*").remove(),P.selectAll("bar").data(f.value).enter().append("g").append("rect").attr("class","bar").attr("x",Q=>b.value(Q[0])).attr("y",Q=>_.value(Q[1])).attr("width",h.value).attr("height",Q=>_.value(y.value[0])-_.value(Q[1])).attr("fill",Q=>Q[1]<=a.value?"var(--color-charging)":"var(--color-axis)");const M=P.append("g").attr("class","axis").call(w.value);M.attr("transform","translate(0,"+(Bf-c.bottom)+")"),M.selectAll(".tick").attr("font-size",j_).attr("color","var(--color-bg)"),M.selectAll(".tick line").attr("stroke","var(--color-bg)").attr("stroke-width",Q=>Q.getMinutes()==0?Q.getHours()%6==0?"2":"0.5":"0"),M.select(".domain").attr("stroke","var(--color-bg");const D=P.append("g").attr("class","axis").call(S.value);return D.attr("transform","translate("+c.left+",0)"),D.selectAll(".tick").attr("font-size",j_).attr("color","var(--color-bg)"),D.selectAll(".tick line").attr("stroke","var(--color-bg)").attr("stroke-width",Q=>Q%5==0?"2":"0.5"),D.select(".domain").attr("stroke","var(--color-bg)"),P.append("path").attr("d",m.value).attr("stroke","yellow"),"PriceChart.vue"}),T=Ce(()=>r.value?"priceChartCanvas"+r.value.id:"priceChartCanvasGlobal"),I=Ce(()=>{let P=[];return Ft.etPriceList.forEach(U=>{P.push(U)}),P.sort((U,M)=>U-M)});function R(){let P=I.value[0];for(let U of I.value){if(U>=a.value)break;P=U}a.value=P}function K(){let P=I.value[0];for(let U of I.value)if(U>a.value){P=U;break}else P=U;a.value=P}return es(()=>{u.value=!u.value}),(P,U)=>(Se(),Re("div",kF,[ye("div",OF,[ye("figure",MF,[(Se(),Re("svg",PF,[ye("g",{id:T.value,origin:E.value,transform:"translate("+c.top+","+c.right+")"},null,8,RF)]))])]),ye("div",NF,[ye("span",LF,[ye("button",{type:"button",class:"btn btn-lg keypadbutton me-3",onClick:g},[...U[2]||(U[2]=[ye("i",{class:"fa fa-xl fa-keyboard"},null,-1)])]),i.value?We("",!0):(Se(),Re("button",{key:0,type:"button",class:"btn btn-lg confirmbutton",style:xt(d.value),"data-bs-dismiss":"modal",onClick:l}," Bestätigen ",4))]),i.value?(Se(),Ke(CF,{key:0,modelValue:s.value,"onUpdate:modelValue":U[0]||(U[0]=M=>s.value=M),decimals:1,class:"mb-3"},null,8,["modelValue"])):(Se(),Re("div",BF,[Me(yr,{id:"etmaxprice",modelValue:a.value,"onUpdate:modelValue":U[1]||(U[1]=M=>a.value=M),min:Math.floor(I.value[0]-1),max:Math.ceil(I.value[I.value.length-1]+1),step:.1,decimals:1,"show-subrange":!0,"subrange-min":I.value[0],"subrange-max":I.value[I.value.length-1],unit:"ct"},null,8,["modelValue","min","max","subrange-min","subrange-max"]),ye("div",{class:"d-flex justify-content-between pb-2 pt-0 mt-0"},[ye("button",{type:"button",class:"btn jumpbutton",onClick:R},[...U[3]||(U[3]=[ye("i",{class:"fa fa-xl fa-arrow-left"},null,-1)])]),ye("button",{type:"button",class:"btn jumpbutton",onClick:K},[...U[4]||(U[4]=[ye("i",{class:"fa fa-xl fa-arrow-right"},null,-1)])])])]))])]))}}),$F=rt(DF,[["__scopeId","data-v-c5ef2c9d"]]),UF={class:"ecosettings"},FF={key:1,class:"fullwidth"},jF=Ye({__name:"ConfigEco",props:{chargepoint:{}},setup(e){const t=e,r=Ce(()=>Ve[t.chargepoint.id]),n=[{name:"keine",id:"none"},{name:"EV-SoC",id:"soc"},{name:"Energiemenge",id:"amount"}],i=Ce({get(){return r.value.ecoMaxEnergy/1e3},set(s){r.value.ecoMaxEnergy=s*1e3}});function o(){const s=document.getElementById("modal-body-settingspage");s?s.scrollTo({top:s.scrollHeight,behavior:"smooth"}):console.warn("modalbody not found")}function a(){const s=document.getElementById("modal-body-settingspage");window.scrollTo(0,0),s?s.scrollTo({top:0,behavior:"smooth"}):console.warn("modalbody not found")}return(s,l)=>(Se(),Re("div",UF,[we(Ft).active&&we(Ft).etPriceList.size>0?(Se(),Ke($F,{key:0,"charge-point-id":t.chargepoint.id,class:"fullwidth"},null,8,["charge-point-id"])):We("",!0),ye("span",{class:"fullwidth mb-4 mt-2"},[ye("button",{type:"button",class:"btn btn-secondary",onClick:o},[...l[5]||(l[5]=[ye("i",{class:"fa-solid fa-circle-down me-2"},null,-1),Xe(" Abwärts ",-1)])])]),Me(gt,{title:"Minimaler Ladestrom unter der Preisgrenze",icon:"fa-bolt",fullwidth:!0},{default:Ue(()=>[Me(yr,{id:"minCurrent",modelValue:r.value.ecoMinCurrent,"onUpdate:modelValue":l[0]||(l[0]=u=>r.value.ecoMinCurrent=u),min:6,max:32,step:1,unit:"A"},null,8,["modelValue"])]),_:1}),Me(gt,{title:"Anzahl Phasen bei Überschuss",icon:"fa-plug",fullwidth:!0},{default:Ue(()=>[Me(bi,{id:"targetPhases",modelValue:r.value.ecoTargetPhases,"onUpdate:modelValue":l[1]||(l[1]=u=>r.value.ecoTargetPhases=u),options:[["Eine",1],["Max",3],["Auto",0]]},null,8,["modelValue"])]),_:1}),r.value.ecoChargeLimitMode!="none"?(Se(),Re("hr",FF)):We("",!0),Me(gt,{title:"Begrenzung",icon:"fa-hand",fullwidth:!0},{default:Ue(()=>[Me(bi,{modelValue:r.value.ecoChargeLimitMode,"onUpdate:modelValue":l[2]||(l[2]=u=>r.value.ecoChargeLimitMode=u),options:n.map(u=>[u.name,u.id])},null,8,["modelValue","options"])]),_:1}),r.value.ecoChargeLimitMode=="soc"?(Se(),Ke(gt,{key:2,title:"Maximaler SoC",icon:"fa-sliders",fullwidth:!0},{default:Ue(()=>[Me(yr,{id:"maxSoc",modelValue:r.value.ecoTargetSoc,"onUpdate:modelValue":l[3]||(l[3]=u=>r.value.ecoTargetSoc=u),min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])]),_:1})):We("",!0),r.value.ecoChargeLimitMode=="amount"?(Se(),Ke(gt,{key:3,title:"Zu ladende Energie",icon:"fa-sliders",fullwidth:!0},{default:Ue(()=>[Me(yr,{id:"maxEnergy",modelValue:i.value,"onUpdate:modelValue":l[4]||(l[4]=u=>i.value=u),min:0,max:100,step:1,unit:"kWh"},null,8,["modelValue"])]),_:1})):We("",!0),ye("span",{class:"fullwidth"},[ye("button",{type:"button",class:"btn btn-secondary",onClick:a},[...l[6]||(l[6]=[ye("i",{class:"fa-solid fa-circle-up me-2"},null,-1),Xe(" Aufwärts ",-1)])])])]))}}),WF=rt(jF,[["__scopeId","data-v-181d5c2e"]]),VF={class:"d-flex flex-column p-3"},HF={key:0,class:"warning p-5"},qF={class:"table table-dark"},GF=Ye({__name:"ConfigTimed",props:{chargePoint:{}},setup(e){const t={daily:"Täglich",once:"Einmal",weekly:"Wöchentlich"},r=e,n=Ce(()=>r.chargePoint.chargeTemplate?.time_charging.plans??[]);function i(a){r.chargePoint.chargeTemplate.chargemode.scheduled_charging.plans[a].active=n.value[a].active,dt(r.chargePoint.id)}function o(a){return{"font-weight":n.value[a].active?"bold":"regular"}}return(a,s)=>(Se(),Re("div",VF,[s[1]||(s[1]=ye("div",{class:"subtitle mb-4"},"Zeitpläne:",-1)),n.value.length==0?(Se(),Re("div",HF," Es sind noch keine Pläne definiert. Zeitpläne können in der Web-App festgelegt werden. ")):We("",!0),ye("table",qF,[s[0]||(s[0]=ye("thead",null,[ye("tr",null,[ye("th"),ye("th",null,"Von"),ye("th",null,"Bis"),ye("th",null,"Ladestrom"),ye("th",null,"Wiederholung")])],-1)),ye("tbody",null,[(Se(!0),Re(ut,null,Wr(n.value,(l,u)=>(Se(),Re("tr",{key:u,style:xt(o(u))},[ye("td",null,[Me(Qi,{modelValue:l.active,"onUpdate:modelValue":[c=>l.active=c,c=>i(u)]},null,8,["modelValue","onUpdate:modelValue"])]),ye("td",null,qe(l.time[0]),1),ye("td",null,qe(l.time[1]),1),ye("td",null,qe(l.current)+"A",1),ye("td",null,qe(t[l.frequency.selected]),1)],4))),128))])])]))}}),KF=rt(GF,[["__scopeId","data-v-7817e508"]]),zF={class:"chargesettings pt-2"},YF={key:1,class:"grid-col-2 my-2"},QF=Ye({__name:"ChargeConfig",props:{chargepointId:{}},setup(e){const t=e,r=Ce(()=>Ve[t.chargepointId]),n=Ce({get:()=>r.value.connectedVehicle,set:o=>{Ve[r.value.id].connectedVehicle=o}}),i=Ce({get:()=>r.value.timedCharging,set:o=>{Ve[r.value.id].timedCharging=o}});return(o,a)=>(Se(),Re("div",zF,[Object.keys(we(Tt)).length>1?(Se(),Ke(gt,{key:0,title:"Fahrzeug wechseln",icon:"fa-car",fullwidth:!0},{default:Ue(()=>[Me(bi,{modelValue:n.value,"onUpdate:modelValue":a[0]||(a[0]=s=>n.value=s),modelModifiers:{number:!0},options:Object.values(we(Tt)).map(s=>[s.name,s.id])},null,8,["modelValue","options"])]),_:1})):We("",!0),a[5]||(a[5]=ye("hr",{class:"grid-col-2 my-2"},null,-1)),Me(gt,{title:"Priorität",icon:"fa-star",iconcolor:"var(--color-evu)",fullwidth:!0},{default:Ue(()=>[Me(Qi,{modelValue:r.value.hasPriority,"onUpdate:modelValue":a[1]||(a[1]=s=>r.value.hasPriority=s)},null,8,["modelValue"])]),_:1}),Me(gt,{title:"Zeitplan aktivieren",icon:"fa-clock",iconcolor:"var(--color-battery)"},{default:Ue(()=>[Me(Qi,{modelValue:i.value,"onUpdate:modelValue":a[2]||(a[2]=s=>i.value=s)},null,8,["modelValue"])]),_:1}),Me(gt,{title:"Sperren",icon:"fa-lock",iconcolor:"var(--color-evu)",fullwidth:!0},{default:Ue(()=>[Me(Qi,{modelValue:r.value.isLocked,"onUpdate:modelValue":a[3]||(a[3]=s=>r.value.isLocked=s)},null,8,["modelValue"])]),_:1}),we(ht).isBatteryConfigured?(Se(),Re("hr",YF)):We("",!0),we(ht).isBatteryConfigured?(Se(),Ke(gt,{key:2,title:"PV-Priorität (global)",icon:"fa-car-battery",iconcolor:"var(--color-battery)",fullwidth:!0},{default:Ue(()=>[Me(bi,{modelValue:we(ht).pvBatteryPriority,"onUpdate:modelValue":a[4]||(a[4]=s=>we(ht).pvBatteryPriority=s),options:we(NR)},null,8,["modelValue","options"])]),_:1})):We("",!0)]))}}),JF=rt(QF,[["__scopeId","data-v-276daf1f"]]),XF=["id"],ZF={class:"nav nav-tabs nav-justified mx-1 mt-1",role:"tablist"},ej=["id","data-bs-target"],tj=["id","data-bs-target"],rj=["id","data-bs-target"],nj=["id","data-bs-target"],ij=["id","data-bs-target"],oj=["id","data-bs-target"],sj={id:"settingsPanes",class:"tab-content mt-2"},aj=["id"],lj=["id"],uj=["id"],cj=["id"],fj=["id"],hj=["id"],dj=Ye({__name:"SettingsPage",props:{chargepoint:{}},setup(e){const t=e,r=Ce(()=>t.chargepoint.chargeTemplate),n=Ce(()=>t.chargepoint.id);return(i,o)=>(Se(),Re("div",{id:`tabarea-${n.value}`,class:"m-0 mt-1 p-0 grid-col-12 tabarea"},[ye("nav",ZF,[ye("a",{id:"chSettings"+n.value,class:"nav-link active","data-bs-toggle":"tab","data-bs-target":"#chargeSettings"+n.value},[...o[0]||(o[0]=[ye("i",{class:"fa-solid fa-charging-station"},null,-1),Xe(" Allgemein ",-1)])],8,ej),ye("a",{id:"inSettings"+n.value,class:"nav-link","data-bs-toggle":"tab","data-bs-target":"#instantSettings"+n.value},[...o[1]||(o[1]=[ye("i",{class:"fa-solid fa-lg fa-bolt"},null,-1),Xe(" Sofort ",-1)])],8,tj),ye("a",{id:"phvSettings"+n.value,class:"nav-link","data-bs-toggle":"tab","data-bs-target":"#pvSettings"+n.value},[...o[2]||(o[2]=[ye("i",{class:"fa-solid fa-solar-panel me-1"},null,-1),Xe(" PV ",-1)])],8,rj),ye("a",{id:"scSettings"+n.value,class:"nav-link","data-bs-toggle":"tab","data-bs-target":"#scheduledSettings"+n.value},[...o[3]||(o[3]=[ye("i",{class:"fa-solid fa-bullseye me-1"},null,-1),Xe(" Zielladen ",-1)])],8,nj),ye("a",{id:"ecSettings"+n.value,class:"nav-link","data-bs-toggle":"tab","data-bs-target":"#ecoSettings"+n.value},[...o[4]||(o[4]=[ye("i",{class:"fa-solid fa-coins me-1"},null,-1),Xe(" Eco ",-1)])],8,ij),ye("a",{id:"tmSettings"+n.value,class:"nav-link","data-bs-toggle":"tab","data-bs-target":"#timeSettings"+n.value},[...o[5]||(o[5]=[ye("i",{class:"fa-solid fa-clock"},null,-1),Xe(" Zeitpläne ",-1)])],8,oj)]),ye("div",sj,[ye("div",{id:"chargeSettings"+n.value,class:"tab-pane active",role:"tabpanel","aria-labelledby":"instant-tab"},[Me(JF,{"chargepoint-id":n.value},null,8,["chargepoint-id"])],8,aj),ye("div",{id:"instantSettings"+n.value,class:"tab-pane",role:"tabpanel","aria-labelledby":"instant-tab"},[Me(cF,{"chargepoint-id":n.value},null,8,["chargepoint-id"])],8,lj),ye("div",{id:"pvSettings"+n.value,class:"tab-pane",role:"tabpanel","aria-labelledby":"pv-tab"},[Me(mF,{"chargepoint-id":n.value},null,8,["chargepoint-id"])],8,uj),ye("div",{id:"scheduledSettings"+n.value,class:"tab-pane",role:"tabpanel","aria-labelledby":"scheduled-tab"},[r.value!=null?(Se(),Ke(wF,{key:0,"charge-point":t.chargepoint},null,8,["charge-point"])):We("",!0)],8,cj),ye("div",{id:"ecoSettings"+n.value,class:"tab-pane",role:"tabpanel","aria-labelledby":"eco-tab"},[r.value!=null?(Se(),Ke(WF,{key:0,chargepoint:t.chargepoint},null,8,["chargepoint"])):We("",!0)],8,fj),ye("div",{id:"timeSettings"+n.value,class:"tab-pane",role:"tabpanel","aria-labelledby":"time-tab"},[r.value!=null?(Se(),Ke(KF,{key:0,"charge-point":t.chargepoint},null,8,["charge-point"])):We("",!0)],8,hj)])],8,XF))}}),pj=rt(dj,[["__scopeId","data-v-cbeeb183"]]);function gj(e,t){e=="openWB/graph/boolDisplayLiveGraph"?ht.displayLiveGraph=+t==1:e.match(/^openwb\/graph\/alllivevaluesJson[1-9][0-9]*$/i)?mj(e,t):e=="openWB/graph/lastlivevaluesJson"?yj(e,t):e=="openWB/graph/config/duration"&&(Ot.duration=JSON.parse(t))}function mj(e,t){if(!Ot.initialized){let r=[];const n=t.toString().split(` -`);n.length>1?r=n.map(a=>JSON.parse(a)):r=[];const i=e.match(/(\d+)$/g),o=i?i[0]:"";o!=""&&typeof Ot.rawDataPacks[+o-1]>"u"&&(Ot.rawDataPacks[+o-1]=r,Ot.initCounter++)}if(Ot.initCounter==16){const r=[];Ot.unsubscribeRefresh(),Ot.initialized=!0,Ot.rawDataPacks.map(n=>{n.map(i=>{const o=Y1(i);r.push(o)})}),Ta(r),Ot.subscribeUpdates()}}function yj(e,t){const r=JSON.parse(t),n=Y1(r);Ot.graphRefreshCounter++,Ta(xe.data.concat(n)),Ot.graphRefreshCounter>60&&Ot.activate()}function Y1(e){const t=Object.values(Ve).length>0?Object.values(Ve)[0].connectedVehicle:0,r=Object.values(Ve).length>1?Object.values(Ve)[1].connectedVehicle:1,n="ev"+t+"-soc",i="ev"+r+"-soc",o={};o.date=bj(e.time).valueOf(),+e.grid>0?(o.evuIn=+e.grid,o.evuOut=0):+e.grid<=0?(o.evuIn=0,o.evuOut=-e.grid):(o.evuIn=0,o.evuOut=0),+e["pv-all"]>=0?(o.pv=+e["pv-all"],o.inverter=0):(o.pv=0,o.inverter=-e["pv-all"]),o.house=+e["house-power"],+e["bat-all-power"]>0?(o.batOut=0,o.batIn=+e["bat-all-power"]):+e["bat-all-power"]<0?(o.batOut=-e["bat-all-power"],o.batIn=0):(o.batOut=0,o.batIn=0),e["bat-all-soc"]?o.batSoc=+e["bat-all-soc"]:o.batSoc=0,e[n]&&(o["soc"+t]=+e[n]),e[i]&&(o["soc"+r]=+e[i]),o.charging=+e["charging-all"];for(let a=0;a<10;a++){const s="cp"+a;o[s]=+(e[s+"-power"]??0)}return o.selfUsage=o.pv-o.evuOut,o.selfUsage<0&&(o.selfUsage=0),o.devices=0,o}function bj(e){const t=new Date(Date.now()),r=864e5;let n=new Date;const i=aa("%H:%M:%S")(e);return i&&(n=i,n.setDate(t.getDate()),n.setMonth(t.getMonth()),n.setFullYear(t.getFullYear()),n.getHours()>t.getHours()&&(n=new Date(n.getTime()-r))),n}const _j=["evuIn","pv","batIn","evuOut"];let Su=[];function vj(e,t){const r=JSON.parse(t).entries,n=JSON.parse(t).totals;ug(),Su=[],Ig.map(o=>{He.setEnergyPv(o,0),He.setEnergyBat(o,0)});const i=wj(r);Ta(i),Cg(n,Su),De.debug&&(console.debug("---------------------------------------- Graph Data ---------------------------"),console.debug("--- Incoming graph data:"),console.debug(r),console.debug("data to be displayed:"),console.debug(i),console.debug("-------------------------------------------------------------------------------")),xe.graphMode=="today"&&setTimeout(()=>wt.activate(),3e5)}function wj(e){const t=[];let r={};return e.map(n=>{r=Ej(n);const i=r;t.push(i)}),t}function Ej(e){const t={};if(xe.graphMode=="day"||xe.graphMode=="today")if(typeof e.date=="number")t.date=new Date(+e.date*1e3).getTime();else{const n=aa("%H:%M")(e.date);n&&(n.setMonth(wt.date.getMonth()),n.setDate(wt.date.getDate()),n.setFullYear(wt.date.getFullYear()),t.date=n.getTime())}else if(typeof e.date=="string"){const n=aa("%Y%m%d")(e.date);n&&(t.date=n.getDate())}return t.evuOut=0,t.evuIn=0,Object.entries(e.counter).forEach(([n,i])=>{i.grid&&(t.evuOut+=i.power_exported,t.evuIn+=i.power_imported,Su.includes(n)||Su.push(n))}),t.evuOut==0&&t.evuIn==0&&Object.entries(e.counter).forEach(n=>{t.evuOut+=n[1].power_exported,t.evuIn+=n[1].power_imported}),t.pv=e.pv.all.power_exported,Object.entries(e.bat).length>0?(t.batIn=e.bat.all.power_imported,t.batOut=e.bat.all.power_exported,t.batSoc=e.bat.all.soc??0):(t.batIn=0,t.batOut=0,t.batSoc=0),Object.entries(e.cp).forEach(([n,i])=>{n!="all"?(t[n]=i.power_imported,He.keys().includes(n)||He.addItem(n)):t.charging=i.power_imported}),Object.entries(e.ev).forEach(([n,i])=>{n!="all"&&(t["soc"+n.substring(2)]=i.soc)}),t.devices=0,Object.entries(e.sh).forEach(([n,i])=>{n!="all"&&(t[n]=i.power_imported??0,t.devices+=i.power_imported??0,He.keys().includes(n)||He.addItem(n))}),t.selfUsage=t.pv-t.evuOut,e.hc&&e.hc.all?t.house=e.hc.all.power_imported:t.house=t.evuIn+t.batOut+t.pv-t.evuOut-t.charging-t.devices-t.batOut,t.evuIn+t.batOut+t.pv>0?He.keys().filter(n=>!_j.includes(n)).map(n=>{fU(n,t)}):Object.keys(t).map(n=>{t[n+"Pv"]=0,t[n+"Bat"]=0}),t}let Za={};const Og=["charging","house","batIn","devices"],Sj=["evuIn","pv","batIn","evuOut"];let Ks=[];function xj(e,t){const r=JSON.parse(t).entries,n=JSON.parse(t).totals;ug(),Ks=[],Og.map(i=>{He.items[i].energyPv=0,He.items[i].energyBat=0}),r.length>0&&Ta(Q1(r)),Cg(n,[])}function Aj(e,t){const r=JSON.parse(t).entries,n=JSON.parse(t).totals;ug(),Ks=[],Og.forEach(i=>{He.items[i].energyPv=0,He.items[i].energyBat=0}),Ta(Q1(r)),Cg(n,[])}function Q1(e){const t=[];let r={};return Za={},e.map(n=>{r=Tj(n),t.push(r),Object.keys(r).forEach(i=>{i!="date"&&(r[i]<0&&(console.warn(`Negative energy value for ${i} in row ${r.date}. Ignoring the value.`),r[i]=0),Za[i]?Za[i]+=r[i]:Za[i]=r[i])})}),t}function Tj(e){const t={},r=aa("%Y%m%d")(e.date);r&&(t.date=xe.graphMode=="month"?r.getDate():r.getMonth()+1),t.evuOut=0,t.evuIn=0;let n=0,i=0;return Object.entries(e.counter).forEach(([a,s])=>{n+=s.energy_exported,i+=s.energy_imported,s.grid&&(t.evuOut+=s.energy_exported,t.evuIn+=s.energy_imported,Ks.includes(a)||Ks.push(a))}),Ks.length==0&&(t.evuOut=n,t.evuIn=i),t.pv=e.pv.all.energy_exported,Object.entries(e.bat).length>0?(e.bat.all.energy_imported>=0?t.batIn=e.bat.all.energy_imported:(console.warn("ignoring negative value for batIn on day "+t.date),t.batIn=0),e.bat.all.energy_exported>=0?t.batOut=e.bat.all.energy_exported:(console.warn("ignoring negative value for batOut on day "+t.date),t.batOut=0)):(t.batIn=0,t.batOut=0),Object.entries(e.cp).forEach(([a,s])=>{a!="all"?(He.keys().includes(a)||He.addItem(a),t[a]=s.energy_imported):t.charging=s.energy_imported}),Object.entries(e.ev).forEach(([a,s])=>{a!="all"&&(t["soc-"+a]=s.soc)}),t.devices=Object.entries(e.sh).reduce((a,s)=>(He.keys().includes(s[0])||He.addItem(s[0]),s[1].energy_imported>=0?a+=s[1].energy_imported:console.warn(`Negative energy value for device ${s[0]} in row ${t.date}. Ignoring this value`),a),0),t.house=t.pv+t.evuIn+t.batOut-t.evuOut-t.batIn-t.charging,t.selfUsage=t.pv-t.evuOut,t.evuIn+t.batOut+t.pv>0?He.keys().filter(a=>!Sj.includes(a)).map(a=>{hU(a,t)}):Og.map(a=>{t[a+"Pv"]=0,t[a+"Bat"]=0}),t}class Ij{id;dailyYieldExport=0;dailyYieldImport=0;exported=0;faultState=0;faultStr="";imported=0;power=0;soc=0;constructor(t){this.id=t}}const mr=mt({});function Cj(e){e in mr?console.info("Duplicate battery message: "+e):mr[e]=new Ij(e)}function kj(){Object.keys(mr).forEach(e=>{delete mr[parseInt(e)]})}function Oj(e,t){const r=Mj(e);if(r&&!(r in mr)){console.warn("Invalid battery index received: "+r);return}e=="openWB/bat/config/configured"?ht.isBatteryConfigured=t=="true":e=="openWB/bat/get/power"?+t>0?(Qe.batIn.power=+t,ot.batOut.power=0):(Qe.batIn.power=0,ot.batOut.power=-t):e=="openWB/bat/get/soc"?ht.batterySoc=+t:e=="openWB/bat/get/daily_exported"?ot.batOut.energy=+t:e=="openWB/bat/get/daily_imported"?Qe.batIn.energy=+t:r&&(e.match(/^openwb\/bat\/[0-9]+\/get\/daily_yield_export$/i)?mr[r].dailyYieldExport=+t:e.match(/^openwb\/bat\/[0-9]+\/get\/daily_yield_import$/i)?mr[r].dailyYieldImport=+t:e.match(/^openwb\/bat\/[0-9]+\/get\/exported$/i)?mr[r].exported=+t:e.match(/^openwb\/bat\/[0-9]+\/get\/fault_state$/i)?mr[r].faultState=+t:e.match(/^openwb\/bat\/[0-9]+\/get\/fault_str$/i)?mr[r].faultStr=t:e.match(/^openwb\/bat\/[0-9]+\/get\/imported$/i)?mr[r].imported=+t:e.match(/^openwb\/bat\/[0-9]+\/get\/power$/i)?mr[r].power=+t:e.match(/^openwb\/bat\/[0-9]+\/get\/soc$/i)&&(mr[r].soc=+t))}function Mj(e){let t=0;try{const r=e.match(/(?:\/)([0-9]+)(?=\/)/g);return r?(t=+r[0].replace(/[^0-9]+/g,""),t):void 0}catch(r){console.warn("Parser error in getIndex for topic "+e+" : "+r)}}function Pj(e,t){if(e=="openWB/optional/ep/configured")Ft.active=t=="true";else if(e=="openWB/optional/ep/flexible_tariff/provider"){const r=JSON.parse(t);Ft.etProvider=r.name,r.configuration&&r.configuration.country!=null&&(ht.country=r.configuration.country)}else if(e=="openWB/optional/ep/get/prices"){const r=JSON.parse(t);Ft.etPriceList=new Map,Object.keys(r).forEach(n=>{Ft.etPriceList.set(new Date(+n*1e3),r[n]*1e5)})}}function Rj(e,t){const r=J1(e);if(r&&!(r in Ve)){console.warn("Invalid chargepoint id received: "+r);return}if(e=="openWB/chargepoint/get/power"?Qe.charging.power=+t:e=="openWB/chargepoint/get/daily_imported"&&(Qe.charging.energy=+t),e=="openWB/chargepoint/get/daily_exported")ht.cpDailyExported=+t;else if(r)if(e.match(/^openwb\/chargepoint\/[0-9]+\/config$/i))if(Ve[r]){const n=JSON.parse(t);Ve[r].name=n.name,Ve[r].icon=n.name,Kt["cp"+r]?(Kt["cp"+r].name=n.name,Kt["cp"+r].icon=n.name):Kt["cp"+r]={name:n.name,icon:n.name,color:"var(--color-charging)"}}else console.warn("invalid chargepoint index: "+r);else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/state_str$/i))Ve[r].stateStr=JSON.parse(t);else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/fault_str$/i))Ve[r].faultStr=JSON.parse(t);else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/fault_state$/i))Ve[r].faultState=+t;else if(e.match(/^openWB\/chargepoint\/[0-9]+\/get\/power$/i))Ve[r].power=+t;else if(e.match(/^openWB\/chargepoint\/[0-9]+\/get\/daily_imported$/i))Ve[r].dailyYield=+t;else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/plug_state$/i))Ve[r].isPluggedIn=t=="true";else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/charge_state$/i))Ve[r].isCharging=t=="true";else if(e.match(/^openwb\/chargepoint\/[0-9]+\/set\/manual_lock$/i))Ve[r].updateIsLocked(t=="true");else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/enabled$/i))Ve[r].isEnabled=t=="1";else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/phases_in_use/i))Ve[r].phasesInUse=+t;else if(e.match(/^openwb\/chargepoint\/[0-9]+\/set\/current/i))Ve[r].current=+t;else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/currents/i))Ve[r].currents=JSON.parse(t);else if(e.match(/^openwb\/chargepoint\/[0-9]+\/set\/log/i)){const n=JSON.parse(t);Ve[r].chargedSincePlugged=n.imported_since_plugged}else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/connected_vehicle\/soc$/i)){const n=JSON.parse(t);Ve[r].soc=n.soc,Ve[r].waitingForSoc=!1,Ve[r].rangeCharged=n.range_charged,Ve[r].rangeUnit=n.range_unit}else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/connected_vehicle\/info$/i)){const n=JSON.parse(t);Ve[r].vehicleName=String(n.name),Ve[r].updateConnectedVehicle(+n.id)}else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/connected_vehicle\/config$/i)){const n=JSON.parse(t);Ve[r].averageConsumption=n.average_consumption,Ve[r].chargeTemplateId=n.charge_template}else e.match(/^openwb\/chargepoint\/[0-9]+\/set\/charge_template$/i)&&(Ve[r].chargeTemplate=JSON.parse(t))}function Nj(e,t){const r=J1(e);if(r!=null){if(!(r in Tt)){const n=new CR(r);Tt[r]=n}if(e.match(/^openwb\/vehicle\/[0-9]+\/name$/i))Object.values(Ve).forEach(n=>{n.connectedVehicle==r&&(n.vehicleName=JSON.parse(t))}),Tt[r].name=JSON.parse(t);else if(e.match(/^openwb\/vehicle\/[0-9]+\/get\/soc$/i))Tt[r].soc=JSON.parse(t);else if(e.match(/^openwb\/vehicle\/[0-9]+\/get\/range$/i))isNaN(+t)?Tt[r].range=0:Tt[r].range=+t;else if(e.match(/^openwb\/vehicle\/[0-9]+\/charge_template$/i))Tt[r].updateChargeTemplateId(+t);else if(e.match(/^openwb\/vehicle\/[0-9]+\/ev_template$/i))Tt[r].updateEvTemplateId(+t);else if(e.match(/^openwb\/vehicle\/[0-9]+\/soc_module\/config$/i)){const n=JSON.parse(t);Object.values(Ve).forEach(i=>{i.connectedVehicle==r&&(i.isSocConfigured=n.type!==null,i.isSocManual=n.type=="manual")})}}}function Lj(e,t){if(e.match(/^openwb\/vehicle\/template\/charge_template\/[0-9]+$/i)){const r=e.match(/[0-9]+$/i);if(r){const n=+r[0];kR[n]=JSON.parse(t)}}else if(e.match(/^openwb\/vehicle\/template\/ev_template\/[0-9]+$/i)){const r=e.match(/[0-9]+$/i);if(r){const n=+r[0],i=JSON.parse(t);OR[n]=i}}}function J1(e){let t=0;try{const r=e.match(/(?:\/)([0-9]+)(?=\/)/g);return r?(t=+r[0].replace(/[^0-9]+/g,""),t):void 0}catch(r){console.warn("Parser error in getIndex for topic "+e+" : "+r)}}function Bj(e,t){e.match(/^openWB\/LegacySmarthome\/config\//i)?Dj(e,t):e.match(/^openWB\/LegacySmarthome\/Devices\//i)&&$j(e,t)}function Dj(e,t){const r=X1(e);if(r==null)return;Nt.has(r)||W1(r);const n=Nt.get(r);e.match(/^openWB\/LegacySmarthome\/config\/get\/Devices\/[0-9]+\/device_configured$/i)?n.configured=t!="0":e.match(/^openWB\/LegacySmarthome\/config\/get\/Devices\/[0-9]+\/device_name$/i)?(n.name=t.toString(),n.icon=t.toString(),Kt["sh"+r].name=t.toString(),Kt["sh"+r].icon=t.toString()):e.match(/^openWB\/LegacySmarthome\/config\/set\/Devices\/[0-9]+\/mode$/i)?n.isAutomatic=t=="0":e.match(/^openWB\/LegacySmarthome\/config\/get\/Devices\/[0-9]+\/device_canSwitch$/i)?n.canSwitch=t=="1":e.match(/^openWB\/LegacySmarthome\/config\/get\/Devices\/[0-9]+\/device_homeConsumtion$/i)?n.countAsHouse=t=="1":e.match(/^openWB\/LegacySmarthome\/config\/get\/Devices\/[0-9]+\/device_temperatur_configured$/i)&&(n.tempConfigured=+t)}function $j(e,t){const r=X1(e);if(r==null){console.warn("Smarthome: Missing index in "+e);return}Nt.has(r)||W1(r);const n=Nt.get(r);if(e.match(/^openWB\/LegacySmarthome\/Devices\/[0-9]+\/Watt$/i))n.power=+t,Uj("power");else if(!e.match(/^openWB\/LegacySmarthome\/Devices\/[0-9]+\/Wh$/i)){if(e.match(/^openWB\/LegacySmarthome\/Devices\/[0-9]+\/RunningTimeToday$/i))n.runningTime=+t;else if(e.match(/^openWB\/LegacySmarthome\/Devices\/[0-9]+\/TemperatureSensor0$/i))n.temp[0]=+t;else if(e.match(/^openWB\/LegacySmarthome\/Devices\/[0-9]+\/TemperatureSensor1$/i))n.temp[1]=+t;else if(e.match(/^openWB\/LegacySmarthome\/Devices\/[0-9]+\/TemperatureSensor2$/i))n.temp[2]=+t;else if(e.match(/^openWB\/LegacySmartHome\/Devices\/[0-9]+\/Status$/i))switch(+t){case 10:n.status="off";break;case 11:n.status="on";break;case 20:n.status="detection";break;case 30:n.status="timeout";break;default:n.status="off"}}}function Uj(e){switch(e){case"power":Qe.devices.power=[...Nt.values()].filter(t=>t.configured&&!t.countAsHouse).reduce((t,r)=>t+r.power,0);break;case"energy":Qe.devices.energy=[...Nt.values()].filter(t=>t.configured&&!t.countAsHouse).reduce((t,r)=>t+r.energy,0);break;default:console.error("Unknown category")}}function X1(e){let t=0;try{const r=e.match(/(?:\/)([0-9]+)(?=\/)/g);return r?(t=+r[0].replace(/[^0-9]+/g,""),t):void 0}catch(r){console.warn("Parser error in getIndex for topic "+e+" : "+r)}}class Fj{id;name="Zähler";power=0;energy_imported=0;energy_exported=0;grid=!1;type="counter";color="var(--color-evu)";energyPv=0;energyBat=0;pvPercentage=0;icon="";constructor(t){this.id=t}}const Ir=mt({});function jj(e,t){if(e in Ir)console.info("Duplicate counter message: "+e);else switch(Ir[e]=new Fj(e),Ir[e].type=t,t){case"counter":Ir[e].color="var(--color-evu)";break;case"inverter":Ir[e].color="var(--color-pv)";break;case"cp":Ir[e].color="var(--color-charging)";break;case"bat":Ir[e].color="var(--color-bat)";break}}const Wj=["openWB/counter/#","openWB/bat/#","openWB/pv/get/#","openWB/chargepoint/#","openWB/vehicle/#","openWB/general/chargemode_config/pv_charging/#","openWB/optional/ep/#","openWB/system/#","openWB/LegacySmartHome/#","openWB/command/"+lg()+"/#","openWB/optional/int_display/#"];function Vj(){TR(Hj),Wj.forEach(e=>{zi(e)}),Rt()}function Hj(e,t){const r=t.toString();e.match(/^openwb\/counter\/[0-9]+\//i)?qj(e,r):e.match(/^openwb\/counter\//i)?Gj(e,r):e.match(/^openwb\/bat\//i)?Oj(e,r):e.match(/^openwb\/pv\//i)?Kj(e,r):e.match(/^openwb\/chargepoint\//i)?Rj(e,r):e.match(/^openwb\/vehicle\/template\//i)?Lj(e,r):e.match(/^openwb\/vehicle\//i)?Nj(e,r):e.match(/^openwb\/general\/chargemode_config\/pv_charging\//i)?zj(e,r):e.match(/^openwb\/graph\//i)?gj(e,r):e.match(/^openwb\/log\/daily\//i)?vj(e,r):e.match(/^openwb\/log\/monthly\//i)?xj(e,r):e.match(/^openwb\/log\/yearly\//i)?Aj(e,r):e.match(/^openwb\/optional\/ep\//i)?Pj(e,r):e.match(/^openwb\/system\//i)?Qj(e,r):e.match(/^openwb\/LegacySmartHome\//i)?Bj(e,r):e.match(/^openwb\/command\//i)?Jj(e,r):e.match(/^openwb\/optional\//i)&&Xj(e,r)}function qj(e,t){const r=e.split("/"),n=+r[2];if(n==ht.evuId?Yj(e,t):r[3]=="config",r[3]=="get"&&n in Ir)switch(r[4]){case"power":Ir[n].power=+t;break;case"config":break;case"fault_str":break;case"fault_state":break;case"power_factors":break;case"imported":break;case"exported":break;case"frequency":break;case"daily_imported":Ir[n].energy_imported=+t;break;case"daily_exported":Ir[n].energy_exported=+t;break}}function Gj(e,t){if(e.match(/^openwb\/counter\/get\/hierarchy$/i)){const r=JSON.parse(t);if(r.length){PR(),kj();for(const n of r)n.type=="counter"&&(ht.evuId=n.id);Z1(r[0])}}else e.match(/^openwb\/counter\/set\/home_consumption$/i)?Qe.house.power=+t:e.match(/^openwb\/counter\/set\/daily_yield_home_consumption$/i)&&(Qe.house.energy=+t)}function Z1(e){switch(e.type){case"counter":jj(e.id,e.type);break;case"cp":MR(e.id);break;case"bat":Cj(e.id);break}e.children.forEach(t=>Z1(t))}function Kj(e,t){switch(e){case"openWB/pv/get/power":ot.pv.power=-t;break;case"openWB/pv/get/daily_exported":ot.pv.energy=+t;break}}function zj(e,t){const r=e.split("/");r.length>0&&r[4]==="bat_mode"&&ht.updatePvBatteryPriority(JSON.parse(t))}function Yj(e,t){switch(e.split("/")[4]){case"power":+t>0?(ot.evuIn.power=+t,Qe.evuOut.power=0):(ot.evuIn.power=0,Qe.evuOut.power=-t);break;case"daily_imported":ot.evuIn.energy=+t;break;case"daily_exported":Qe.evuOut.energy=+t;break}}function Qj(e,t){if(e.match(/^openWB\/system\/device\/[0-9]+\/component\/[0-9]+\/config$/i)){const r=JSON.parse(t);r.type=="counter"&&(Ir[r.id].name=r.name)}else e.match(/^openWB\/system\/ip_address$/i)?ht.ipAddress=JSON.parse(t):e.match(/^openWB\/system\/time$/i)?ht.systemTime=JSON.parse(t):e.match(/^openWB\/system\/version$/i)?ht.version=JSON.parse(t):e.match(/^openWB\/system\/current_commit$/i)?ht.versionDetails=JSON.parse(t):e.match(/^openWB\/system\/current_branch$/i)&&(ht.devBranch=JSON.parse(t))}function Jj(e,t){const r=e.split("/");if(e.match(/^openWB\/command\/[a-z]+\/error$/i)&&r[2]==lg()){const n=JSON.parse(t);console.error(`Error message from openWB: +`;super(n),this.name="AggregateError",this.errors=r}}return Vc={AggregateError:e,ArrayIsArray(t){return Array.isArray(t)},ArrayPrototypeIncludes(t,r){return t.includes(r)},ArrayPrototypeIndexOf(t,r){return t.indexOf(r)},ArrayPrototypeJoin(t,r){return t.join(r)},ArrayPrototypeMap(t,r){return t.map(r)},ArrayPrototypePop(t,r){return t.pop(r)},ArrayPrototypePush(t,r){return t.push(r)},ArrayPrototypeSlice(t,r,n){return t.slice(r,n)},Error,FunctionPrototypeCall(t,r,...n){return t.call(r,...n)},FunctionPrototypeSymbolHasInstance(t,r){return Function.prototype[Symbol.hasInstance].call(t,r)},MathFloor:Math.floor,Number,NumberIsInteger:Number.isInteger,NumberIsNaN:Number.isNaN,NumberMAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER,NumberMIN_SAFE_INTEGER:Number.MIN_SAFE_INTEGER,NumberParseInt:Number.parseInt,ObjectDefineProperties(t,r){return Object.defineProperties(t,r)},ObjectDefineProperty(t,r,n){return Object.defineProperty(t,r,n)},ObjectGetOwnPropertyDescriptor(t,r){return Object.getOwnPropertyDescriptor(t,r)},ObjectKeys(t){return Object.keys(t)},ObjectSetPrototypeOf(t,r){return Object.setPrototypeOf(t,r)},Promise,PromisePrototypeCatch(t,r){return t.catch(r)},PromisePrototypeThen(t,r,n){return t.then(r,n)},PromiseReject(t){return Promise.reject(t)},PromiseResolve(t){return Promise.resolve(t)},ReflectApply:Reflect.apply,RegExpPrototypeTest(t,r){return t.test(r)},SafeSet:Set,String,StringPrototypeSlice(t,r,n){return t.slice(r,n)},StringPrototypeToLowerCase(t){return t.toLowerCase()},StringPrototypeToUpperCase(t){return t.toUpperCase()},StringPrototypeTrim(t){return t.trim()},Symbol,SymbolFor:Symbol.for,SymbolAsyncIterator:Symbol.asyncIterator,SymbolHasInstance:Symbol.hasInstance,SymbolIterator:Symbol.iterator,SymbolDispose:Symbol.dispose||Symbol("Symbol.dispose"),SymbolAsyncDispose:Symbol.asyncDispose||Symbol("Symbol.asyncDispose"),TypedArrayPrototypeSet(t,r,n){return t.set(r,n)},Boolean,Uint8Array},Vc}var Hc={exports:{}},qc,rb;function OE(){return rb||(rb=1,qc={format(e,...t){return e.replace(/%([sdifj])/g,function(...[r,n]){const i=t.shift();return n==="f"?i.toFixed(6):n==="j"?JSON.stringify(i):n==="s"&&typeof i=="object"?`${i.constructor!==Object?i.constructor.name:""} {}`.trim():i.toString()})},inspect(e){switch(typeof e){case"string":if(e.includes("'"))if(e.includes('"')){if(!e.includes("`")&&!e.includes("${"))return`\`${e}\``}else return`"${e}"`;return`'${e}'`;case"number":return isNaN(e)?"NaN":Object.is(e,-0)?String(e):e;case"bigint":return`${String(e)}n`;case"boolean":case"undefined":return String(e);case"object":return"{}"}}}),qc}var Gc,nb;function nr(){if(nb)return Gc;nb=1;const{format:e,inspect:t}=OE(),{AggregateError:r}=_t(),n=globalThis.AggregateError||r,i=Symbol("kIsNodeError"),o=["string","function","number","object","Function","Object","boolean","bigint","symbol"],a=/^([A-Z][a-z0-9]*)+$/,s="__node_internal_",l={};function u(y,_){if(!y)throw new l.ERR_INTERNAL_ASSERTION(_)}function c(y){let _="",m=y.length;const w=y[0]==="-"?1:0;for(;m>=w+4;m-=3)_=`_${y.slice(m-3,m)}${_}`;return`${y.slice(0,m)}${_}`}function f(y,_,m){if(typeof _=="function")return u(_.length<=m.length,`Code: ${y}; The provided arguments length (${m.length}) does not match the required ones (${_.length}).`),_(...m);const w=(_.match(/%[dfijoOs]/g)||[]).length;return u(w===m.length,`Code: ${y}; The provided arguments length (${m.length}) does not match the required ones (${w}).`),m.length===0?_:e(_,...m)}function h(y,_,m){m||(m=Error);class w extends m{constructor(...E){super(f(y,_,E))}toString(){return`${this.name} [${y}]: ${this.message}`}}Object.defineProperties(w.prototype,{name:{value:m.name,writable:!0,enumerable:!1,configurable:!0},toString:{value(){return`${this.name} [${y}]: ${this.message}`},writable:!0,enumerable:!1,configurable:!0}}),w.prototype.code=y,w.prototype[i]=!0,l[y]=w}function d(y){const _=s+y.name;return Object.defineProperty(y,"name",{value:_}),y}function g(y,_){if(y&&_&&y!==_){if(Array.isArray(_.errors))return _.errors.push(y),_;const m=new n([_,y],_.message);return m.code=_.code,m}return y||_}class b extends Error{constructor(_="The operation was aborted",m=void 0){if(m!==void 0&&typeof m!="object")throw new l.ERR_INVALID_ARG_TYPE("options","Object",m);super(_,m),this.code="ABORT_ERR",this.name="AbortError"}}return h("ERR_ASSERTION","%s",Error),h("ERR_INVALID_ARG_TYPE",(y,_,m)=>{u(typeof y=="string","'name' must be a string"),Array.isArray(_)||(_=[_]);let w="The ";y.endsWith(" argument")?w+=`${y} `:w+=`"${y}" ${y.includes(".")?"property":"argument"} `,w+="must be ";const S=[],E=[],T=[];for(const R of _)u(typeof R=="string","All expected entries have to be of type string"),o.includes(R)?S.push(R.toLowerCase()):a.test(R)?E.push(R):(u(R!=="object",'The value "object" should be written as "Object"'),T.push(R));if(E.length>0){const R=S.indexOf("object");R!==-1&&(S.splice(S,R,1),E.push("Object"))}if(S.length>0){switch(S.length){case 1:w+=`of type ${S[0]}`;break;case 2:w+=`one of type ${S[0]} or ${S[1]}`;break;default:{const R=S.pop();w+=`one of type ${S.join(", ")}, or ${R}`}}(E.length>0||T.length>0)&&(w+=" or ")}if(E.length>0){switch(E.length){case 1:w+=`an instance of ${E[0]}`;break;case 2:w+=`an instance of ${E[0]} or ${E[1]}`;break;default:{const R=E.pop();w+=`an instance of ${E.join(", ")}, or ${R}`}}T.length>0&&(w+=" or ")}switch(T.length){case 0:break;case 1:T[0].toLowerCase()!==T[0]&&(w+="an "),w+=`${T[0]}`;break;case 2:w+=`one of ${T[0]} or ${T[1]}`;break;default:{const R=T.pop();w+=`one of ${T.join(", ")}, or ${R}`}}if(m==null)w+=`. Received ${m}`;else if(typeof m=="function"&&m.name)w+=`. Received function ${m.name}`;else if(typeof m=="object"){var I;if((I=m.constructor)!==null&&I!==void 0&&I.name)w+=`. Received an instance of ${m.constructor.name}`;else{const R=t(m,{depth:-1});w+=`. Received ${R}`}}else{let R=t(m,{colors:!1});R.length>25&&(R=`${R.slice(0,25)}...`),w+=`. Received type ${typeof m} (${R})`}return w},TypeError),h("ERR_INVALID_ARG_VALUE",(y,_,m="is invalid")=>{let w=t(_);return w.length>128&&(w=w.slice(0,128)+"..."),`The ${y.includes(".")?"property":"argument"} '${y}' ${m}. Received ${w}`},TypeError),h("ERR_INVALID_RETURN_VALUE",(y,_,m)=>{var w;const S=m!=null&&(w=m.constructor)!==null&&w!==void 0&&w.name?`instance of ${m.constructor.name}`:`type ${typeof m}`;return`Expected ${y} to be returned from the "${_}" function but got ${S}.`},TypeError),h("ERR_MISSING_ARGS",(...y)=>{u(y.length>0,"At least one arg needs to be specified");let _;const m=y.length;switch(y=(Array.isArray(y)?y:[y]).map(w=>`"${w}"`).join(" or "),m){case 1:_+=`The ${y[0]} argument`;break;case 2:_+=`The ${y[0]} and ${y[1]} arguments`;break;default:{const w=y.pop();_+=`The ${y.join(", ")}, and ${w} arguments`}break}return`${_} must be specified`},TypeError),h("ERR_OUT_OF_RANGE",(y,_,m)=>{u(_,'Missing "range" argument');let w;if(Number.isInteger(m)&&Math.abs(m)>2**32)w=c(String(m));else if(typeof m=="bigint"){w=String(m);const S=BigInt(2)**BigInt(32);(m>S||m<-S)&&(w=c(w)),w+="n"}else w=t(m);return`The value of "${y}" is out of range. It must be ${_}. Received ${w}`},RangeError),h("ERR_MULTIPLE_CALLBACK","Callback called multiple times",Error),h("ERR_METHOD_NOT_IMPLEMENTED","The %s method is not implemented",Error),h("ERR_STREAM_ALREADY_FINISHED","Cannot call %s after a stream was finished",Error),h("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable",Error),h("ERR_STREAM_DESTROYED","Cannot call %s after a stream was destroyed",Error),h("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),h("ERR_STREAM_PREMATURE_CLOSE","Premature close",Error),h("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF",Error),h("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event",Error),h("ERR_STREAM_WRITE_AFTER_END","write after end",Error),h("ERR_UNKNOWN_ENCODING","Unknown encoding: %s",TypeError),Gc={AbortError:b,aggregateTwoErrors:d(g),hideStackFrames:d,codes:l},Gc}var _s={exports:{}},ib;function ra(){if(ib)return _s.exports;ib=1;const{AbortController:e,AbortSignal:t}=typeof self<"u"?self:typeof window<"u"?window:void 0;return _s.exports=e,_s.exports.AbortSignal=t,_s.exports.default=e,_s.exports}var ja={exports:{}},ob;function us(){if(ob)return ja.exports;ob=1;var e=typeof Reflect=="object"?Reflect:null,t=e&&typeof e.apply=="function"?e.apply:function(E,T,I){return Function.prototype.apply.call(E,T,I)},r;e&&typeof e.ownKeys=="function"?r=e.ownKeys:Object.getOwnPropertySymbols?r=function(E){return Object.getOwnPropertyNames(E).concat(Object.getOwnPropertySymbols(E))}:r=function(E){return Object.getOwnPropertyNames(E)};function n(S){console&&console.warn&&console.warn(S)}var i=Number.isNaN||function(E){return E!==E};function o(){o.init.call(this)}ja.exports=o,ja.exports.once=_,o.EventEmitter=o,o.prototype._events=void 0,o.prototype._eventsCount=0,o.prototype._maxListeners=void 0;var a=10;function s(S){if(typeof S!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof S)}Object.defineProperty(o,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(S){if(typeof S!="number"||S<0||i(S))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+S+".");a=S}}),o.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},o.prototype.setMaxListeners=function(E){if(typeof E!="number"||E<0||i(E))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+E+".");return this._maxListeners=E,this};function l(S){return S._maxListeners===void 0?o.defaultMaxListeners:S._maxListeners}o.prototype.getMaxListeners=function(){return l(this)},o.prototype.emit=function(E){for(var T=[],I=1;I0&&(P=T[0]),P instanceof Error)throw P;var U=new Error("Unhandled error."+(P?" ("+P.message+")":""));throw U.context=P,U}var M=K[E];if(M===void 0)return!1;if(typeof M=="function")t(M,this,T);else for(var D=M.length,Q=g(M,D),I=0;I0&&P.length>R&&!P.warned){P.warned=!0;var U=new Error("Possible EventEmitter memory leak detected. "+P.length+" "+String(E)+" listeners added. Use emitter.setMaxListeners() to increase limit");U.name="MaxListenersExceededWarning",U.emitter=S,U.type=E,U.count=P.length,n(U)}return S}o.prototype.addListener=function(E,T){return u(this,E,T,!1)},o.prototype.on=o.prototype.addListener,o.prototype.prependListener=function(E,T){return u(this,E,T,!0)};function c(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function f(S,E,T){var I={fired:!1,wrapFn:void 0,target:S,type:E,listener:T},R=c.bind(I);return R.listener=T,I.wrapFn=R,R}o.prototype.once=function(E,T){return s(T),this.on(E,f(this,E,T)),this},o.prototype.prependOnceListener=function(E,T){return s(T),this.prependListener(E,f(this,E,T)),this},o.prototype.removeListener=function(E,T){var I,R,K,P,U;if(s(T),R=this._events,R===void 0)return this;if(I=R[E],I===void 0)return this;if(I===T||I.listener===T)--this._eventsCount===0?this._events=Object.create(null):(delete R[E],R.removeListener&&this.emit("removeListener",E,I.listener||T));else if(typeof I!="function"){for(K=-1,P=I.length-1;P>=0;P--)if(I[P]===T||I[P].listener===T){U=I[P].listener,K=P;break}if(K<0)return this;K===0?I.shift():b(I,K),I.length===1&&(R[E]=I[0]),R.removeListener!==void 0&&this.emit("removeListener",E,U||T)}return this},o.prototype.off=o.prototype.removeListener,o.prototype.removeAllListeners=function(E){var T,I,R;if(I=this._events,I===void 0)return this;if(I.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):I[E]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete I[E]),this;if(arguments.length===0){var K=Object.keys(I),P;for(R=0;R=0;R--)this.removeListener(E,T[R]);return this};function h(S,E,T){var I=S._events;if(I===void 0)return[];var R=I[E];return R===void 0?[]:typeof R=="function"?T?[R.listener||R]:[R]:T?y(R):g(R,R.length)}o.prototype.listeners=function(E){return h(this,E,!0)},o.prototype.rawListeners=function(E){return h(this,E,!1)},o.listenerCount=function(S,E){return typeof S.listenerCount=="function"?S.listenerCount(E):d.call(S,E)},o.prototype.listenerCount=d;function d(S){var E=this._events;if(E!==void 0){var T=E[S];if(typeof T=="function")return 1;if(T!==void 0)return T.length}return 0}o.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]};function g(S,E){for(var T=new Array(E),I=0;I{if(b!==void 0&&(b===null||typeof b!="object"||!("aborted"in b)))throw new i(y,"AbortSignal",b)},g=(b,y)=>{if(typeof b!="function")throw new i(y,"Function",b)};e.exports={AggregateError:a,kEmptyObject:Object.freeze({}),once(b){let y=!1;return function(..._){y||(y=!0,b.apply(this,_))}},createDeferredPromise:function(){let b,y;return{promise:new Promise((m,w)=>{b=m,y=w}),resolve:b,reject:y}},promisify(b){return new Promise((y,_)=>{b((m,...w)=>m?_(m):y(...w))})},debuglog(){return function(){}},format:r,inspect:n,types:{isAsyncFunction(b){return b instanceof c},isArrayBufferView(b){return ArrayBuffer.isView(b)}},isBlob:h,deprecate(b,y){return b},addAbortListener:us().addAbortListener||function(y,_){if(y===void 0)throw new i("signal","AbortSignal",y);d(y,"signal"),g(_,"listener");let m;return y.aborted?queueMicrotask(()=>_()):(y.addEventListener("abort",_,{__proto__:null,once:!0,[o]:!0}),m=()=>{y.removeEventListener("abort",_)}),{__proto__:null,[s](){var w;(w=m)===null||w===void 0||w()}}},AbortSignalAny:l.any||function(y){if(y.length===1)return y[0];const _=new u,m=()=>_.abort();return y.forEach(w=>{d(w,"signals"),w.addEventListener("abort",m,{once:!0})}),_.signal.addEventListener("abort",()=>{y.forEach(w=>w.removeEventListener("abort",m))},{once:!0}),_.signal}},e.exports.promisify.custom=Symbol.for("nodejs.util.promisify.custom")})(Hc)),Hc.exports}var Wa={},Kc,ab;function Ea(){if(ab)return Kc;ab=1;const{ArrayIsArray:e,ArrayPrototypeIncludes:t,ArrayPrototypeJoin:r,ArrayPrototypeMap:n,NumberIsInteger:i,NumberIsNaN:o,NumberMAX_SAFE_INTEGER:a,NumberMIN_SAFE_INTEGER:s,NumberParseInt:l,ObjectPrototypeHasOwnProperty:u,RegExpPrototypeExec:c,String:f,StringPrototypeToUpperCase:h,StringPrototypeTrim:d}=_t(),{hideStackFrames:g,codes:{ERR_SOCKET_BAD_PORT:b,ERR_INVALID_ARG_TYPE:y,ERR_INVALID_ARG_VALUE:_,ERR_OUT_OF_RANGE:m,ERR_UNKNOWN_SIGNAL:w}}=nr(),{normalizeEncoding:S}=dr(),{isAsyncFunction:E,isArrayBufferView:T}=dr().types,I={};function R(W){return W===(W|0)}function K(W){return W===W>>>0}const P=/^[0-7]+$/,U="must be a 32-bit unsigned integer or an octal string";function M(W,ne,H){if(typeof W>"u"&&(W=H),typeof W=="string"){if(c(P,W)===null)throw new _(ne,W,U);W=l(W,8)}return le(W,ne),W}const D=g((W,ne,H=s,ue=a)=>{if(typeof W!="number")throw new y(ne,"number",W);if(!i(W))throw new m(ne,"an integer",W);if(Wue)throw new m(ne,`>= ${H} && <= ${ue}`,W)}),Q=g((W,ne,H=-2147483648,ue=2147483647)=>{if(typeof W!="number")throw new y(ne,"number",W);if(!i(W))throw new m(ne,"an integer",W);if(Wue)throw new m(ne,`>= ${H} && <= ${ue}`,W)}),le=g((W,ne,H=!1)=>{if(typeof W!="number")throw new y(ne,"number",W);if(!i(W))throw new m(ne,"an integer",W);const ue=H?1:0,ge=4294967295;if(Wge)throw new m(ne,`>= ${ue} && <= ${ge}`,W)});function me(W,ne){if(typeof W!="string")throw new y(ne,"string",W)}function fe(W,ne,H=void 0,ue){if(typeof W!="number")throw new y(ne,"number",W);if(H!=null&&Wue||(H!=null||ue!=null)&&o(W))throw new m(ne,`${H!=null?`>= ${H}`:""}${H!=null&&ue!=null?" && ":""}${ue!=null?`<= ${ue}`:""}`,W)}const J=g((W,ne,H)=>{if(!t(H,W)){const ge="must be one of: "+r(n(H,be=>typeof be=="string"?`'${be}'`:f(be)),", ");throw new _(ne,W,ge)}});function de(W,ne){if(typeof W!="boolean")throw new y(ne,"boolean",W)}function B(W,ne,H){return W==null||!u(W,ne)?H:W[ne]}const ie=g((W,ne,H=null)=>{const ue=B(H,"allowArray",!1),ge=B(H,"allowFunction",!1);if(!B(H,"nullable",!1)&&W===null||!ue&&e(W)||typeof W!="object"&&(!ge||typeof W!="function"))throw new y(ne,"Object",W)}),G=g((W,ne)=>{if(W!=null&&typeof W!="object"&&typeof W!="function")throw new y(ne,"a dictionary",W)}),se=g((W,ne,H=0)=>{if(!e(W))throw new y(ne,"Array",W);if(W.length{if(!T(W))throw new y(ne,["Buffer","TypedArray","DataView"],W)});function V(W,ne){const H=S(ne),ue=W.length;if(H==="hex"&&ue%2!==0)throw new _("encoding",ne,`is invalid for data of length ${ue}`)}function q(W,ne="Port",H=!0){if(typeof W!="number"&&typeof W!="string"||typeof W=="string"&&d(W).length===0||+W!==+W>>>0||W>65535||W===0&&!H)throw new b(ne,W,H);return W|0}const z=g((W,ne)=>{if(W!==void 0&&(W===null||typeof W!="object"||!("aborted"in W)))throw new y(ne,"AbortSignal",W)}),C=g((W,ne)=>{if(typeof W!="function")throw new y(ne,"Function",W)}),k=g((W,ne)=>{if(typeof W!="function"||E(W))throw new y(ne,"Function",W)}),N=g((W,ne)=>{if(W!==void 0)throw new y(ne,"undefined",W)});function O(W,ne,H){if(!t(H,W))throw new y(ne,`('${r(H,"|")}')`,W)}const $=/^(?:<[^>]*>)(?:\s*;\s*[^;"\s]+(?:=(")?[^;"\s]*\1)?)*$/;function j(W,ne){if(typeof W>"u"||!c($,W))throw new _(ne,W,'must be an array or string of format "; rel=preload; as=style"')}function oe(W){if(typeof W=="string")return j(W,"hints"),W;if(e(W)){const ne=W.length;let H="";if(ne===0)return H;for(let ue=0;ue; rel=preload; as=style"')}return Kc={isInt32:R,isUint32:K,parseFileMode:M,validateArray:se,validateStringArray:_e,validateBooleanArray:X,validateAbortSignalArray:re,validateBoolean:de,validateBuffer:F,validateDictionary:G,validateEncoding:V,validateFunction:C,validateInt32:Q,validateInteger:D,validateNumber:fe,validateObject:ie,validateOneOf:J,validatePlainFunction:k,validatePort:q,validateSignalName:ee,validateString:me,validateUint32:le,validateUndefined:N,validateUnion:O,validateAbortSignal:z,validateLinkHeaderValue:oe},Kc}var Va={exports:{}},zc={exports:{}},lb;function uo(){if(lb)return zc.exports;lb=1;var e=zc.exports={},t,r;function n(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}(function(){try{typeof setTimeout=="function"?t=setTimeout:t=n}catch{t=n}try{typeof clearTimeout=="function"?r=clearTimeout:r=i}catch{r=i}})();function o(b){if(t===setTimeout)return setTimeout(b,0);if((t===n||!t)&&setTimeout)return t=setTimeout,setTimeout(b,0);try{return t(b,0)}catch{try{return t.call(null,b,0)}catch{return t.call(this,b,0)}}}function a(b){if(r===clearTimeout)return clearTimeout(b);if((r===i||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(b);try{return r(b)}catch{try{return r.call(null,b)}catch{return r.call(this,b)}}}var s=[],l=!1,u,c=-1;function f(){!l||!u||(l=!1,u.length?s=u.concat(s):c=-1,s.length&&h())}function h(){if(!l){var b=o(f);l=!0;for(var y=s.length;y;){for(u=s,s=[];++c1)for(var _=1;_{};function le(J,de,B){var ie,G;if(arguments.length===2?(B=de,de=o):de==null?de=o:u(de,"options"),l(B,"callback"),s(de.signal,"options.signal"),B=a(B),_(J)||T(J))return me(J,de,B);if(!K(J))throw new n("stream",["ReadableStream","WritableStream","Stream"],J);const se=(ie=de.readable)!==null&&ie!==void 0?ie:y(J),_e=(G=de.writable)!==null&&G!==void 0?G:E(J),X=J._writableState,re=J._readableState,ee=()=>{J.writable||q()};let F=P(J)&&y(J)===se&&E(J)===_e,V=I(J,!1);const q=()=>{V=!0,J.destroyed&&(F=!1),!(F&&(!J.readable||se))&&(!se||z)&&B.call(J)};let z=m(J,!1);const C=()=>{z=!0,J.destroyed&&(F=!1),!(F&&(!J.writable||_e))&&(!_e||V)&&B.call(J)},k=W=>{B.call(J,W)};let N=g(J);const O=()=>{N=!0;const W=R(J)||w(J);if(W&&typeof W!="boolean")return B.call(J,W);if(se&&!z&&y(J,!0)&&!m(J,!1))return B.call(J,new i);if(_e&&!V&&!I(J,!1))return B.call(J,new i);B.call(J)},$=()=>{N=!0;const W=R(J)||w(J);if(W&&typeof W!="boolean")return B.call(J,W);B.call(J)},j=()=>{J.req.on("finish",q)};D(J)?(J.on("complete",q),F||J.on("abort",O),J.req?j():J.on("request",j)):_e&&!X&&(J.on("end",ee),J.on("close",ee)),!F&&typeof J.aborted=="boolean"&&J.on("aborted",O),J.on("end",C),J.on("finish",q),de.error!==!1&&J.on("error",k),J.on("close",O),N?e.nextTick(O):X!=null&&X.errorEmitted||re!=null&&re.errorEmitted?F||e.nextTick($):(!se&&(!F||b(J))&&(V||S(J)===!1)||!_e&&(!F||S(J))&&(z||b(J)===!1)||re&&J.req&&J.aborted)&&e.nextTick($);const oe=()=>{B=Q,J.removeListener("aborted",O),J.removeListener("complete",q),J.removeListener("abort",O),J.removeListener("request",j),J.req&&J.req.removeListener("finish",q),J.removeListener("end",ee),J.removeListener("close",ee),J.removeListener("finish",q),J.removeListener("end",C),J.removeListener("error",k),J.removeListener("close",O)};if(de.signal&&!N){const W=()=>{const ne=B;oe(),ne.call(J,new t(void 0,{cause:de.signal.reason}))};if(de.signal.aborted)e.nextTick(W);else{M=M||dr().addAbortListener;const ne=M(de.signal,W),H=B;B=a((...ue)=>{ne[d](),H.apply(J,ue)})}}return oe}function me(J,de,B){let ie=!1,G=Q;if(de.signal)if(G=()=>{ie=!0,B.call(J,new t(void 0,{cause:de.signal.reason}))},de.signal.aborted)e.nextTick(G);else{M=M||dr().addAbortListener;const _e=M(de.signal,G),X=B;B=a((...re)=>{_e[d](),X.apply(J,re)})}const se=(..._e)=>{ie||e.nextTick(()=>B.apply(J,_e))};return h(J[U].promise,se,se),Q}function fe(J,de){var B;let ie=!1;return de===null&&(de=o),(B=de)!==null&&B!==void 0&&B.cleanup&&(c(de.cleanup,"cleanup"),ie=de.cleanup),new f((G,se)=>{const _e=le(J,de,X=>{ie&&_e(),X?se(X):G()})})}return Va.exports=le,Va.exports.finished=fe,Va.exports}var Qc,fb;function cs(){if(fb)return Qc;fb=1;const e=uo(),{aggregateTwoErrors:t,codes:{ERR_MULTIPLE_CALLBACK:r},AbortError:n}=nr(),{Symbol:i}=_t(),{kIsDestroyed:o,isDestroyed:a,isFinished:s,isServerRequest:l}=Xn(),u=i("kDestroy"),c=i("kConstruct");function f(P,U,M){P&&(P.stack,U&&!U.errored&&(U.errored=P),M&&!M.errored&&(M.errored=P))}function h(P,U){const M=this._readableState,D=this._writableState,Q=D||M;return D!=null&&D.destroyed||M!=null&&M.destroyed?(typeof U=="function"&&U(),this):(f(P,D,M),D&&(D.destroyed=!0),M&&(M.destroyed=!0),Q.constructed?d(this,P,U):this.once(u,function(le){d(this,t(le,P),U)}),this)}function d(P,U,M){let D=!1;function Q(le){if(D)return;D=!0;const me=P._readableState,fe=P._writableState;f(le,fe,me),fe&&(fe.closed=!0),me&&(me.closed=!0),typeof M=="function"&&M(le),le?e.nextTick(g,P,le):e.nextTick(b,P)}try{P._destroy(U||null,Q)}catch(le){Q(le)}}function g(P,U){y(P,U),b(P)}function b(P){const U=P._readableState,M=P._writableState;M&&(M.closeEmitted=!0),U&&(U.closeEmitted=!0),(M!=null&&M.emitClose||U!=null&&U.emitClose)&&P.emit("close")}function y(P,U){const M=P._readableState,D=P._writableState;D!=null&&D.errorEmitted||M!=null&&M.errorEmitted||(D&&(D.errorEmitted=!0),M&&(M.errorEmitted=!0),P.emit("error",U))}function _(){const P=this._readableState,U=this._writableState;P&&(P.constructed=!0,P.closed=!1,P.closeEmitted=!1,P.destroyed=!1,P.errored=null,P.errorEmitted=!1,P.reading=!1,P.ended=P.readable===!1,P.endEmitted=P.readable===!1),U&&(U.constructed=!0,U.destroyed=!1,U.closed=!1,U.closeEmitted=!1,U.errored=null,U.errorEmitted=!1,U.finalCalled=!1,U.prefinished=!1,U.ended=U.writable===!1,U.ending=U.writable===!1,U.finished=U.writable===!1)}function m(P,U,M){const D=P._readableState,Q=P._writableState;if(Q!=null&&Q.destroyed||D!=null&&D.destroyed)return this;D!=null&&D.autoDestroy||Q!=null&&Q.autoDestroy?P.destroy(U):U&&(U.stack,Q&&!Q.errored&&(Q.errored=U),D&&!D.errored&&(D.errored=U),M?e.nextTick(y,P,U):y(P,U))}function w(P,U){if(typeof P._construct!="function")return;const M=P._readableState,D=P._writableState;M&&(M.constructed=!1),D&&(D.constructed=!1),P.once(c,U),!(P.listenerCount(c)>1)&&e.nextTick(S,P)}function S(P){let U=!1;function M(D){if(U){m(P,D??new r);return}U=!0;const Q=P._readableState,le=P._writableState,me=le||Q;Q&&(Q.constructed=!0),le&&(le.constructed=!0),me.destroyed?P.emit(u,D):D?m(P,D,!0):e.nextTick(E,P)}try{P._construct(D=>{e.nextTick(M,D)})}catch(D){e.nextTick(M,D)}}function E(P){P.emit(c)}function T(P){return P?.setHeader&&typeof P.abort=="function"}function I(P){P.emit("close")}function R(P,U){P.emit("error",U),e.nextTick(I,P)}function K(P,U){!P||a(P)||(!U&&!s(P)&&(U=new n),l(P)?(P.socket=null,P.destroy(U)):T(P)?P.abort():T(P.req)?P.req.abort():typeof P.destroy=="function"?P.destroy(U):typeof P.close=="function"?P.close():U?e.nextTick(R,P,U):e.nextTick(I,P),P.destroyed||(P[o]=!0))}return Qc={construct:w,destroyer:K,destroy:h,undestroy:_,errorOrDestroy:m},Qc}var Jc,hb;function og(){if(hb)return Jc;hb=1;const{ArrayIsArray:e,ObjectSetPrototypeOf:t}=_t(),{EventEmitter:r}=us();function n(o){r.call(this,o)}t(n.prototype,r.prototype),t(n,r),n.prototype.pipe=function(o,a){const s=this;function l(b){o.writable&&o.write(b)===!1&&s.pause&&s.pause()}s.on("data",l);function u(){s.readable&&s.resume&&s.resume()}o.on("drain",u),!o._isStdio&&(!a||a.end!==!1)&&(s.on("end",f),s.on("close",h));let c=!1;function f(){c||(c=!0,o.end())}function h(){c||(c=!0,typeof o.destroy=="function"&&o.destroy())}function d(b){g(),r.listenerCount(this,"error")===0&&this.emit("error",b)}i(s,"error",d),i(o,"error",d);function g(){s.removeListener("data",l),o.removeListener("drain",u),s.removeListener("end",f),s.removeListener("close",h),s.removeListener("error",d),o.removeListener("error",d),s.removeListener("end",g),s.removeListener("close",g),o.removeListener("close",g)}return s.on("end",g),s.on("close",g),o.on("close",g),o.emit("pipe",s),o};function i(o,a,s){if(typeof o.prependListener=="function")return o.prependListener(a,s);!o._events||!o._events[a]?o.on(a,s):e(o._events[a])?o._events[a].unshift(s):o._events[a]=[s,o._events[a]]}return Jc={Stream:n,prependListener:i},Jc}var Xc={exports:{}},db;function Yu(){return db||(db=1,(function(e){const{SymbolDispose:t}=_t(),{AbortError:r,codes:n}=nr(),{isNodeStream:i,isWebStream:o,kControllerErrorFunction:a}=Xn(),s=xi(),{ERR_INVALID_ARG_TYPE:l}=n;let u;const c=(f,h)=>{if(typeof f!="object"||!("aborted"in f))throw new l(h,"AbortSignal",f)};e.exports.addAbortSignal=function(h,d){if(c(h,"signal"),!i(d)&&!o(d))throw new l("stream",["ReadableStream","WritableStream","Stream"],d);return e.exports.addAbortSignalNoValidate(h,d)},e.exports.addAbortSignalNoValidate=function(f,h){if(typeof f!="object"||!("aborted"in f))return h;const d=i(h)?()=>{h.destroy(new r(void 0,{cause:f.reason}))}:()=>{h[a](new r(void 0,{cause:f.reason}))};if(f.aborted)d();else{u=u||dr().addAbortListener;const g=u(f,d);s(h,g[t])}return h}})(Xc)),Xc.exports}var Zc,pb;function MP(){if(pb)return Zc;pb=1;const{StringPrototypeSlice:e,SymbolIterator:t,TypedArrayPrototypeSet:r,Uint8Array:n}=_t(),{Buffer:i}=xr(),{inspect:o}=dr();return Zc=class{constructor(){this.head=null,this.tail=null,this.length=0}push(s){const l={data:s,next:null};this.length>0?this.tail.next=l:this.head=l,this.tail=l,++this.length}unshift(s){const l={data:s,next:this.head};this.length===0&&(this.tail=l),this.head=l,++this.length}shift(){if(this.length===0)return;const s=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,s}clear(){this.head=this.tail=null,this.length=0}join(s){if(this.length===0)return"";let l=this.head,u=""+l.data;for(;(l=l.next)!==null;)u+=s+l.data;return u}concat(s){if(this.length===0)return i.alloc(0);const l=i.allocUnsafe(s>>>0);let u=this.head,c=0;for(;u;)r(l,u.data,c),c+=u.data.length,u=u.next;return l}consume(s,l){const u=this.head.data;if(sf.length)l+=f,s-=f.length;else{s===f.length?(l+=f,++c,u.next?this.head=u.next:this.head=this.tail=null):(l+=e(f,0,s),this.head=u,u.data=e(f,s));break}++c}while((u=u.next)!==null);return this.length-=c,l}_getBuffer(s){const l=i.allocUnsafe(s),u=s;let c=this.head,f=0;do{const h=c.data;if(s>h.length)r(l,h,u-s),s-=h.length;else{s===h.length?(r(l,h,u-s),++f,c.next?this.head=c.next:this.head=this.tail=null):(r(l,new n(h.buffer,h.byteOffset,s),u-s),this.head=c,c.data=h.slice(s));break}++f}while((c=c.next)!==null);return this.length-=f,l}[Symbol.for("nodejs.util.inspect.custom")](s,l){return o(this,{...l,depth:0,customInspect:!1})}},Zc}var ef,gb;function Qu(){if(gb)return ef;gb=1;const{MathFloor:e,NumberIsInteger:t}=_t(),{validateInteger:r}=Ea(),{ERR_INVALID_ARG_VALUE:n}=nr().codes;let i=16*1024,o=16;function a(c,f,h){return c.highWaterMark!=null?c.highWaterMark:f?c[h]:null}function s(c){return c?o:i}function l(c,f){r(f,"value",0),c?o=f:i=f}function u(c,f,h,d){const g=a(f,d,h);if(g!=null){if(!t(g)||g<0){const b=d?`options.${h}`:"options.highWaterMark";throw new n(b,g)}return e(g)}return s(c.objectMode)}return ef={getHighWaterMark:u,getDefaultHighWaterMark:s,setDefaultHighWaterMark:l},ef}var tf={},Ha={exports:{}};var mb;function PP(){return mb||(mb=1,(function(e,t){var r=xr(),n=r.Buffer;function i(a,s){for(var l in a)s[l]=a[l]}n.from&&n.alloc&&n.allocUnsafe&&n.allocUnsafeSlow?e.exports=r:(i(r,t),t.Buffer=o);function o(a,s,l){return n(a,s,l)}o.prototype=Object.create(n.prototype),i(n,o),o.from=function(a,s,l){if(typeof a=="number")throw new TypeError("Argument must not be a number");return n(a,s,l)},o.alloc=function(a,s,l){if(typeof a!="number")throw new TypeError("Argument must be a number");var u=n(a);return s!==void 0?typeof l=="string"?u.fill(s,l):u.fill(s):u.fill(0),u},o.allocUnsafe=function(a){if(typeof a!="number")throw new TypeError("Argument must be a number");return n(a)},o.allocUnsafeSlow=function(a){if(typeof a!="number")throw new TypeError("Argument must be a number");return r.SlowBuffer(a)}})(Ha,Ha.exports)),Ha.exports}var yb;function RP(){if(yb)return tf;yb=1;var e=PP().Buffer,t=e.isEncoding||function(_){switch(_=""+_,_&&_.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function r(_){if(!_)return"utf8";for(var m;;)switch(_){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return _;default:if(m)return;_=(""+_).toLowerCase(),m=!0}}function n(_){var m=r(_);if(typeof m!="string"&&(e.isEncoding===t||!t(_)))throw new Error("Unknown encoding: "+_);return m||_}tf.StringDecoder=i;function i(_){this.encoding=n(_);var m;switch(this.encoding){case"utf16le":this.text=f,this.end=h,m=4;break;case"utf8":this.fillLast=l,m=4;break;case"base64":this.text=d,this.end=g,m=3;break;default:this.write=b,this.end=y;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=e.allocUnsafe(m)}i.prototype.write=function(_){if(_.length===0)return"";var m,w;if(this.lastNeed){if(m=this.fillLast(_),m===void 0)return"";w=this.lastNeed,this.lastNeed=0}else w=0;return w<_.length?m?m+this.text(_,w):this.text(_,w):m||""},i.prototype.end=c,i.prototype.text=u,i.prototype.fillLast=function(_){if(this.lastNeed<=_.length)return _.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);_.copy(this.lastChar,this.lastTotal-this.lastNeed,0,_.length),this.lastNeed-=_.length};function o(_){return _<=127?0:_>>5===6?2:_>>4===14?3:_>>3===30?4:_>>6===2?-1:-2}function a(_,m,w){var S=m.length-1;if(S=0?(E>0&&(_.lastNeed=E-1),E):--S=0?(E>0&&(_.lastNeed=E-2),E):--S=0?(E>0&&(E===2?E=0:_.lastNeed=E-3),E):0))}function s(_,m,w){if((m[0]&192)!==128)return _.lastNeed=0,"�";if(_.lastNeed>1&&m.length>1){if((m[1]&192)!==128)return _.lastNeed=1,"�";if(_.lastNeed>2&&m.length>2&&(m[2]&192)!==128)return _.lastNeed=2,"�"}}function l(_){var m=this.lastTotal-this.lastNeed,w=s(this,_);if(w!==void 0)return w;if(this.lastNeed<=_.length)return _.copy(this.lastChar,m,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);_.copy(this.lastChar,m,0,_.length),this.lastNeed-=_.length}function u(_,m){var w=a(this,_,m);if(!this.lastNeed)return _.toString("utf8",m);this.lastTotal=w;var S=_.length-(w-this.lastNeed);return _.copy(this.lastChar,0,S),_.toString("utf8",m,S)}function c(_){var m=_&&_.length?this.write(_):"";return this.lastNeed?m+"�":m}function f(_,m){if((_.length-m)%2===0){var w=_.toString("utf16le",m);if(w){var S=w.charCodeAt(w.length-1);if(S>=55296&&S<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=_[_.length-2],this.lastChar[1]=_[_.length-1],w.slice(0,-1)}return w}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=_[_.length-1],_.toString("utf16le",m,_.length-1)}function h(_){var m=_&&_.length?this.write(_):"";if(this.lastNeed){var w=this.lastTotal-this.lastNeed;return m+this.lastChar.toString("utf16le",0,w)}return m}function d(_,m){var w=(_.length-m)%3;return w===0?_.toString("base64",m):(this.lastNeed=3-w,this.lastTotal=3,w===1?this.lastChar[0]=_[_.length-1]:(this.lastChar[0]=_[_.length-2],this.lastChar[1]=_[_.length-1]),_.toString("base64",m,_.length-w))}function g(_){var m=_&&_.length?this.write(_):"";return this.lastNeed?m+this.lastChar.toString("base64",0,3-this.lastNeed):m}function b(_){return _.toString(this.encoding)}function y(_){return _&&_.length?this.write(_):""}return tf}var rf,bb;function ME(){if(bb)return rf;bb=1;const e=uo(),{PromisePrototypeThen:t,SymbolAsyncIterator:r,SymbolIterator:n}=_t(),{Buffer:i}=xr(),{ERR_INVALID_ARG_TYPE:o,ERR_STREAM_NULL_VALUES:a}=nr().codes;function s(l,u,c){let f;if(typeof u=="string"||u instanceof i)return new l({objectMode:!0,...c,read(){this.push(u),this.push(null)}});let h;if(u&&u[r])h=!0,f=u[r]();else if(u&&u[n])h=!1,f=u[n]();else throw new o("iterable",["Iterable"],u);const d=new l({objectMode:!0,highWaterMark:1,...c});let g=!1;d._read=function(){g||(g=!0,y())},d._destroy=function(_,m){t(b(_),()=>e.nextTick(m,_),w=>e.nextTick(m,w||_))};async function b(_){const m=_!=null,w=typeof f.throw=="function";if(m&&w){const{value:S,done:E}=await f.throw(_);if(await S,E)return}if(typeof f.return=="function"){const{value:S}=await f.return();await S}}async function y(){for(;;){try{const{value:_,done:m}=h?await f.next():f.next();if(m)d.push(null);else{const w=_&&typeof _.then=="function"?await _:_;if(w===null)throw g=!1,new a;if(d.push(w))continue;g=!1}}catch(_){d.destroy(_)}break}}return d}return rf=s,rf}var nf,_b;function Ju(){if(_b)return nf;_b=1;const e=uo(),{ArrayPrototypeIndexOf:t,NumberIsInteger:r,NumberIsNaN:n,NumberParseInt:i,ObjectDefineProperties:o,ObjectKeys:a,ObjectSetPrototypeOf:s,Promise:l,SafeSet:u,SymbolAsyncDispose:c,SymbolAsyncIterator:f,Symbol:h}=_t();nf=ue,ue.ReadableState=H;const{EventEmitter:d}=us(),{Stream:g,prependListener:b}=og(),{Buffer:y}=xr(),{addAbortSignal:_}=Yu(),m=xi();let w=dr().debuglog("stream",ce=>{w=ce});const S=MP(),E=cs(),{getHighWaterMark:T,getDefaultHighWaterMark:I}=Qu(),{aggregateTwoErrors:R,codes:{ERR_INVALID_ARG_TYPE:K,ERR_METHOD_NOT_IMPLEMENTED:P,ERR_OUT_OF_RANGE:U,ERR_STREAM_PUSH_AFTER_EOF:M,ERR_STREAM_UNSHIFT_AFTER_END_EVENT:D},AbortError:Q}=nr(),{validateObject:le}=Ea(),me=h("kPaused"),{StringDecoder:fe}=RP(),J=ME();s(ue.prototype,g.prototype),s(ue,g);const de=()=>{},{errorOrDestroy:B}=E,ie=1,G=2,se=4,_e=8,X=16,re=32,ee=64,F=128,V=256,q=512,z=1024,C=2048,k=4096,N=8192,O=16384,$=32768,j=65536,oe=1<<17,W=1<<18;function ne(ce){return{enumerable:!1,get(){return(this.state&ce)!==0},set(pe){pe?this.state|=ce:this.state&=~ce}}}o(H.prototype,{objectMode:ne(ie),ended:ne(G),endEmitted:ne(se),reading:ne(_e),constructed:ne(X),sync:ne(re),needReadable:ne(ee),emittedReadable:ne(F),readableListening:ne(V),resumeScheduled:ne(q),errorEmitted:ne(z),emitClose:ne(C),autoDestroy:ne(k),destroyed:ne(N),closed:ne(O),closeEmitted:ne($),multiAwaitDrain:ne(j),readingMore:ne(oe),dataEmitted:ne(W)});function H(ce,pe,Y){typeof Y!="boolean"&&(Y=pe instanceof Vn()),this.state=C|k|X|re,ce&&ce.objectMode&&(this.state|=ie),Y&&ce&&ce.readableObjectMode&&(this.state|=ie),this.highWaterMark=ce?T(this,ce,"readableHighWaterMark",Y):I(!1),this.buffer=new S,this.length=0,this.pipes=[],this.flowing=null,this[me]=null,ce&&ce.emitClose===!1&&(this.state&=~C),ce&&ce.autoDestroy===!1&&(this.state&=~k),this.errored=null,this.defaultEncoding=ce&&ce.defaultEncoding||"utf8",this.awaitDrainWriters=null,this.decoder=null,this.encoding=null,ce&&ce.encoding&&(this.decoder=new fe(ce.encoding),this.encoding=ce.encoding)}function ue(ce){if(!(this instanceof ue))return new ue(ce);const pe=this instanceof Vn();this._readableState=new H(ce,this,pe),ce&&(typeof ce.read=="function"&&(this._read=ce.read),typeof ce.destroy=="function"&&(this._destroy=ce.destroy),typeof ce.construct=="function"&&(this._construct=ce.construct),ce.signal&&!pe&&_(ce.signal,this)),g.call(this,ce),E.construct(this,()=>{this._readableState.needReadable&&Z(this,this._readableState)})}ue.prototype.destroy=E.destroy,ue.prototype._undestroy=E.undestroy,ue.prototype._destroy=function(ce,pe){pe(ce)},ue.prototype[d.captureRejectionSymbol]=function(ce){this.destroy(ce)},ue.prototype[c]=function(){let ce;return this.destroyed||(ce=this.readableEnded?null:new Q,this.destroy(ce)),new l((pe,Y)=>m(this,te=>te&&te!==ce?Y(te):pe(null)))},ue.prototype.push=function(ce,pe){return ge(this,ce,pe,!1)},ue.prototype.unshift=function(ce,pe){return ge(this,ce,pe,!0)};function ge(ce,pe,Y,te){w("readableAddChunk",pe);const Ee=ce._readableState;let Be;if((Ee.state&ie)===0&&(typeof pe=="string"?(Y=Y||Ee.defaultEncoding,Ee.encoding!==Y&&(te&&Ee.encoding?pe=y.from(pe,Y).toString(Ee.encoding):(pe=y.from(pe,Y),Y=""))):pe instanceof y?Y="":g._isUint8Array(pe)?(pe=g._uint8ArrayToBuffer(pe),Y=""):pe!=null&&(Be=new K("chunk",["string","Buffer","Uint8Array"],pe))),Be)B(ce,Be);else if(pe===null)Ee.state&=~_e,p(ce,Ee);else if((Ee.state&ie)!==0||pe&&pe.length>0)if(te)if((Ee.state&se)!==0)B(ce,new D);else{if(Ee.destroyed||Ee.errored)return!1;be(ce,Ee,pe,!0)}else if(Ee.ended)B(ce,new M);else{if(Ee.destroyed||Ee.errored)return!1;Ee.state&=~_e,Ee.decoder&&!Y?(pe=Ee.decoder.write(pe),Ee.objectMode||pe.length!==0?be(ce,Ee,pe,!1):Z(ce,Ee)):be(ce,Ee,pe,!1)}else te||(Ee.state&=~_e,Z(ce,Ee));return!Ee.ended&&(Ee.length0?((pe.state&j)!==0?pe.awaitDrainWriters.clear():pe.awaitDrainWriters=null,pe.dataEmitted=!0,ce.emit("data",Y)):(pe.length+=pe.objectMode?1:Y.length,te?pe.buffer.unshift(Y):pe.buffer.push(Y),(pe.state&ee)!==0&&x(ce)),Z(ce,pe)}ue.prototype.isPaused=function(){const ce=this._readableState;return ce[me]===!0||ce.flowing===!1},ue.prototype.setEncoding=function(ce){const pe=new fe(ce);this._readableState.decoder=pe,this._readableState.encoding=this._readableState.decoder.encoding;const Y=this._readableState.buffer;let te="";for(const Ee of Y)te+=pe.write(Ee);return Y.clear(),te!==""&&Y.push(te),this._readableState.length=te.length,this};const ke=1073741824;function A(ce){if(ce>ke)throw new U("size","<= 1GiB",ce);return ce--,ce|=ce>>>1,ce|=ce>>>2,ce|=ce>>>4,ce|=ce>>>8,ce|=ce>>>16,ce++,ce}function v(ce,pe){return ce<=0||pe.length===0&&pe.ended?0:(pe.state&ie)!==0?1:n(ce)?pe.flowing&&pe.length?pe.buffer.first().length:pe.length:ce<=pe.length?ce:pe.ended?pe.length:0}ue.prototype.read=function(ce){w("read",ce),ce===void 0?ce=NaN:r(ce)||(ce=i(ce,10));const pe=this._readableState,Y=ce;if(ce>pe.highWaterMark&&(pe.highWaterMark=A(ce)),ce!==0&&(pe.state&=~F),ce===0&&pe.needReadable&&((pe.highWaterMark!==0?pe.length>=pe.highWaterMark:pe.length>0)||pe.ended))return w("read: emitReadable",pe.length,pe.ended),pe.length===0&&pe.ended?ir(this):x(this),null;if(ce=v(ce,pe),ce===0&&pe.ended)return pe.length===0&&ir(this),null;let te=(pe.state&ee)!==0;if(w("need readable",te),(pe.length===0||pe.length-ce0?Ee=kt(ce,pe):Ee=null,Ee===null?(pe.needReadable=pe.length<=pe.highWaterMark,ce=0):(pe.length-=ce,pe.multiAwaitDrain?pe.awaitDrainWriters.clear():pe.awaitDrainWriters=null),pe.length===0&&(pe.ended||(pe.needReadable=!0),Y!==ce&&pe.ended&&ir(this)),Ee!==null&&!pe.errorEmitted&&!pe.closeEmitted&&(pe.dataEmitted=!0,this.emit("data",Ee)),Ee};function p(ce,pe){if(w("onEofChunk"),!pe.ended){if(pe.decoder){const Y=pe.decoder.end();Y&&Y.length&&(pe.buffer.push(Y),pe.length+=pe.objectMode?1:Y.length)}pe.ended=!0,pe.sync?x(ce):(pe.needReadable=!1,pe.emittedReadable=!0,L(ce))}}function x(ce){const pe=ce._readableState;w("emitReadable",pe.needReadable,pe.emittedReadable),pe.needReadable=!1,pe.emittedReadable||(w("emitReadable",pe.flowing),pe.emittedReadable=!0,e.nextTick(L,ce))}function L(ce){const pe=ce._readableState;w("emitReadable_",pe.destroyed,pe.length,pe.ended),!pe.destroyed&&!pe.errored&&(pe.length||pe.ended)&&(ce.emit("readable"),pe.emittedReadable=!1),pe.needReadable=!pe.flowing&&!pe.ended&&pe.length<=pe.highWaterMark,Fe(ce)}function Z(ce,pe){!pe.readingMore&&pe.constructed&&(pe.readingMore=!0,e.nextTick(he,ce,pe))}function he(ce,pe){for(;!pe.reading&&!pe.ended&&(pe.length1&&te.pipes.includes(ce)&&(w("false write response, pause",te.awaitDrainWriters.size),te.awaitDrainWriters.add(ce)),Y.pause()),yt||(yt=ae(Y,ce),ce.on("drain",yt))}Y.on("data",ti);function ti(Qt){w("ondata");const At=ce.write(Qt);w("dest.write",At),At===!1&&ei()}function ri(Qt){if(w("onerror",Qt),ar(),ce.removeListener("error",ri),ce.listenerCount("error")===0){const At=ce._writableState||ce._readableState;At&&!At.errorEmitted?B(ce,Qt):ce.emit("error",Qt)}}b(ce,"error",ri);function Br(){ce.removeListener("finish",sr),ar()}ce.once("close",Br);function sr(){w("onfinish"),ce.removeListener("close",Br),ar()}ce.once("finish",sr);function ar(){w("unpipe"),Y.unpipe(ce)}return ce.emit("pipe",Y),ce.writableNeedDrain===!0?ei():te.flowing||(w("pipe resume"),Y.resume()),ce};function ae(ce,pe){return function(){const te=ce._readableState;te.awaitDrainWriters===pe?(w("pipeOnDrain",1),te.awaitDrainWriters=null):te.multiAwaitDrain&&(w("pipeOnDrain",te.awaitDrainWriters.size),te.awaitDrainWriters.delete(pe)),(!te.awaitDrainWriters||te.awaitDrainWriters.size===0)&&ce.listenerCount("data")&&ce.resume()}}ue.prototype.unpipe=function(ce){const pe=this._readableState,Y={hasUnpiped:!1};if(pe.pipes.length===0)return this;if(!ce){const Ee=pe.pipes;pe.pipes=[],this.pause();for(let Be=0;Be0,te.flowing!==!1&&this.resume()):ce==="readable"&&!te.endEmitted&&!te.readableListening&&(te.readableListening=te.needReadable=!0,te.flowing=!1,te.emittedReadable=!1,w("on readable",te.length,te.reading),te.length?x(this):te.reading||e.nextTick(Ne,this)),Y},ue.prototype.addListener=ue.prototype.on,ue.prototype.removeListener=function(ce,pe){const Y=g.prototype.removeListener.call(this,ce,pe);return ce==="readable"&&e.nextTick(ve,this),Y},ue.prototype.off=ue.prototype.removeListener,ue.prototype.removeAllListeners=function(ce){const pe=g.prototype.removeAllListeners.apply(this,arguments);return(ce==="readable"||ce===void 0)&&e.nextTick(ve,this),pe};function ve(ce){const pe=ce._readableState;pe.readableListening=ce.listenerCount("readable")>0,pe.resumeScheduled&&pe[me]===!1?pe.flowing=!0:ce.listenerCount("data")>0?ce.resume():pe.readableListening||(pe.flowing=null)}function Ne(ce){w("readable nexttick read 0"),ce.read(0)}ue.prototype.resume=function(){const ce=this._readableState;return ce.flowing||(w("resume"),ce.flowing=!ce.readableListening,Le(this,ce)),ce[me]=!1,this};function Le(ce,pe){pe.resumeScheduled||(pe.resumeScheduled=!0,e.nextTick(je,ce,pe))}function je(ce,pe){w("resume",pe.reading),pe.reading||ce.read(0),pe.resumeScheduled=!1,ce.emit("resume"),Fe(ce),pe.flowing&&!pe.reading&&ce.read(0)}ue.prototype.pause=function(){return w("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(w("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState[me]=!0,this};function Fe(ce){const pe=ce._readableState;for(w("flow",pe.flowing);pe.flowing&&ce.read()!==null;);}ue.prototype.wrap=function(ce){let pe=!1;ce.on("data",te=>{!this.push(te)&&ce.pause&&(pe=!0,ce.pause())}),ce.on("end",()=>{this.push(null)}),ce.on("error",te=>{B(this,te)}),ce.on("close",()=>{this.destroy()}),ce.on("destroy",()=>{this.destroy()}),this._read=()=>{pe&&ce.resume&&(pe=!1,ce.resume())};const Y=a(ce);for(let te=1;te{Ee=$e?R(Ee,$e):null,Y(),Y=de});try{for(;;){const $e=ce.destroyed?null:ce.read();if($e!==null)yield $e;else{if(Ee)throw Ee;if(Ee===null)return;await new l(te)}}}catch($e){throw Ee=R(Ee,$e),Ee}finally{(Ee||pe?.destroyOnReturn!==!1)&&(Ee===void 0||ce._readableState.autoDestroy)?E.destroyer(ce,null):(ce.off("readable",te),Be())}}o(ue.prototype,{readable:{__proto__:null,get(){const ce=this._readableState;return!!ce&&ce.readable!==!1&&!ce.destroyed&&!ce.errorEmitted&&!ce.endEmitted},set(ce){this._readableState&&(this._readableState.readable=!!ce)}},readableDidRead:{__proto__:null,enumerable:!1,get:function(){return this._readableState.dataEmitted}},readableAborted:{__proto__:null,enumerable:!1,get:function(){return!!(this._readableState.readable!==!1&&(this._readableState.destroyed||this._readableState.errored)&&!this._readableState.endEmitted)}},readableHighWaterMark:{__proto__:null,enumerable:!1,get:function(){return this._readableState.highWaterMark}},readableBuffer:{__proto__:null,enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}},readableFlowing:{__proto__:null,enumerable:!1,get:function(){return this._readableState.flowing},set:function(ce){this._readableState&&(this._readableState.flowing=ce)}},readableLength:{__proto__:null,enumerable:!1,get(){return this._readableState.length}},readableObjectMode:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.objectMode:!1}},readableEncoding:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.encoding:null}},errored:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.errored:null}},closed:{__proto__:null,get(){return this._readableState?this._readableState.closed:!1}},destroyed:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.destroyed:!1},set(ce){this._readableState&&(this._readableState.destroyed=ce)}},readableEnded:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.endEmitted:!1}}}),o(H.prototype,{pipesCount:{__proto__:null,get(){return this.pipes.length}},paused:{__proto__:null,get(){return this[me]!==!1},set(ce){this[me]=!!ce}}}),ue._fromList=kt;function kt(ce,pe){if(pe.length===0)return null;let Y;return pe.objectMode?Y=pe.buffer.shift():!ce||ce>=pe.length?(pe.decoder?Y=pe.buffer.join(""):pe.buffer.length===1?Y=pe.buffer.first():Y=pe.buffer.concat(pe.length),pe.buffer.clear()):Y=pe.buffer.consume(ce,pe.decoder),Y}function ir(ce){const pe=ce._readableState;w("endReadable",pe.endEmitted),pe.endEmitted||(pe.ended=!0,e.nextTick(Zn,pe,ce))}function Zn(ce,pe){if(w("endReadableNT",ce.endEmitted,ce.length),!ce.errored&&!ce.closeEmitted&&!ce.endEmitted&&ce.length===0){if(ce.endEmitted=!0,pe.emit("end"),pe.writable&&pe.allowHalfOpen===!1)e.nextTick(Tr,pe);else if(ce.autoDestroy){const Y=pe._writableState;(!Y||Y.autoDestroy&&(Y.finished||Y.writable===!1))&&pe.destroy()}}}function Tr(ce){ce.writable&&!ce.writableEnded&&!ce.destroyed&&ce.end()}ue.from=function(ce,pe){return J(ue,ce,pe)};let $t;function Ai(){return $t===void 0&&($t={}),$t}return ue.fromWeb=function(ce,pe){return Ai().newStreamReadableFromReadableStream(ce,pe)},ue.toWeb=function(ce,pe){return Ai().newReadableStreamFromStreamReadable(ce,pe)},ue.wrap=function(ce,pe){var Y,te;return new ue({objectMode:(Y=(te=ce.readableObjectMode)!==null&&te!==void 0?te:ce.objectMode)!==null&&Y!==void 0?Y:!0,...pe,destroy(Ee,Be){E.destroyer(ce,Ee),Be(Ee)}}).wrap(ce)},nf}var of,vb;function sg(){if(vb)return of;vb=1;const e=uo(),{ArrayPrototypeSlice:t,Error:r,FunctionPrototypeSymbolHasInstance:n,ObjectDefineProperty:i,ObjectDefineProperties:o,ObjectSetPrototypeOf:a,StringPrototypeToLowerCase:s,Symbol:l,SymbolHasInstance:u}=_t();of=le,le.WritableState=D;const{EventEmitter:c}=us(),f=og().Stream,{Buffer:h}=xr(),d=cs(),{addAbortSignal:g}=Yu(),{getHighWaterMark:b,getDefaultHighWaterMark:y}=Qu(),{ERR_INVALID_ARG_TYPE:_,ERR_METHOD_NOT_IMPLEMENTED:m,ERR_MULTIPLE_CALLBACK:w,ERR_STREAM_CANNOT_PIPE:S,ERR_STREAM_DESTROYED:E,ERR_STREAM_ALREADY_FINISHED:T,ERR_STREAM_NULL_VALUES:I,ERR_STREAM_WRITE_AFTER_END:R,ERR_UNKNOWN_ENCODING:K}=nr().codes,{errorOrDestroy:P}=d;a(le.prototype,f.prototype),a(le,f);function U(){}const M=l("kOnFinished");function D(k,N,O){typeof O!="boolean"&&(O=N instanceof Vn()),this.objectMode=!!(k&&k.objectMode),O&&(this.objectMode=this.objectMode||!!(k&&k.writableObjectMode)),this.highWaterMark=k?b(this,k,"writableHighWaterMark",O):y(!1),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;const $=!!(k&&k.decodeStrings===!1);this.decodeStrings=!$,this.defaultEncoding=k&&k.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=B.bind(void 0,N),this.writecb=null,this.writelen=0,this.afterWriteTickInfo=null,Q(this),this.pendingcb=0,this.constructed=!0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!k||k.emitClose!==!1,this.autoDestroy=!k||k.autoDestroy!==!1,this.errored=null,this.closed=!1,this.closeEmitted=!1,this[M]=[]}function Q(k){k.buffered=[],k.bufferedIndex=0,k.allBuffers=!0,k.allNoop=!0}D.prototype.getBuffer=function(){return t(this.buffered,this.bufferedIndex)},i(D.prototype,"bufferedRequestCount",{__proto__:null,get(){return this.buffered.length-this.bufferedIndex}});function le(k){const N=this instanceof Vn();if(!N&&!n(le,this))return new le(k);this._writableState=new D(k,this,N),k&&(typeof k.write=="function"&&(this._write=k.write),typeof k.writev=="function"&&(this._writev=k.writev),typeof k.destroy=="function"&&(this._destroy=k.destroy),typeof k.final=="function"&&(this._final=k.final),typeof k.construct=="function"&&(this._construct=k.construct),k.signal&&g(k.signal,this)),f.call(this,k),d.construct(this,()=>{const O=this._writableState;O.writing||_e(this,O),F(this,O)})}i(le,u,{__proto__:null,value:function(k){return n(this,k)?!0:this!==le?!1:k&&k._writableState instanceof D}}),le.prototype.pipe=function(){P(this,new S)};function me(k,N,O,$){const j=k._writableState;if(typeof O=="function")$=O,O=j.defaultEncoding;else{if(!O)O=j.defaultEncoding;else if(O!=="buffer"&&!h.isEncoding(O))throw new K(O);typeof $!="function"&&($=U)}if(N===null)throw new I;if(!j.objectMode)if(typeof N=="string")j.decodeStrings!==!1&&(N=h.from(N,O),O="buffer");else if(N instanceof h)O="buffer";else if(f._isUint8Array(N))N=f._uint8ArrayToBuffer(N),O="buffer";else throw new _("chunk",["string","Buffer","Uint8Array"],N);let oe;return j.ending?oe=new R:j.destroyed&&(oe=new E("write")),oe?(e.nextTick($,oe),P(k,oe,!0),oe):(j.pendingcb++,fe(k,j,N,O,$))}le.prototype.write=function(k,N,O){return me(this,k,N,O)===!0},le.prototype.cork=function(){this._writableState.corked++},le.prototype.uncork=function(){const k=this._writableState;k.corked&&(k.corked--,k.writing||_e(this,k))},le.prototype.setDefaultEncoding=function(N){if(typeof N=="string"&&(N=s(N)),!h.isEncoding(N))throw new K(N);return this._writableState.defaultEncoding=N,this};function fe(k,N,O,$,j){const oe=N.objectMode?1:O.length;N.length+=oe;const W=N.lengthO.bufferedIndex&&_e(k,O),$?O.afterWriteTickInfo!==null&&O.afterWriteTickInfo.cb===j?O.afterWriteTickInfo.count++:(O.afterWriteTickInfo={count:1,cb:j,stream:k,state:O},e.nextTick(ie,O.afterWriteTickInfo)):G(k,O,1,j))}function ie({stream:k,state:N,count:O,cb:$}){return N.afterWriteTickInfo=null,G(k,N,O,$)}function G(k,N,O,$){for(!N.ending&&!k.destroyed&&N.length===0&&N.needDrain&&(N.needDrain=!1,k.emit("drain"));O-- >0;)N.pendingcb--,$();N.destroyed&&se(N),F(k,N)}function se(k){if(k.writing)return;for(let j=k.bufferedIndex;j1&&k._writev){N.pendingcb-=oe-1;const ne=N.allNoop?U:ue=>{for(let ge=W;ge256?(O.splice(0,W),N.bufferedIndex=0):N.bufferedIndex=W}N.bufferProcessing=!1}le.prototype._write=function(k,N,O){if(this._writev)this._writev([{chunk:k,encoding:N}],O);else throw new m("_write()")},le.prototype._writev=null,le.prototype.end=function(k,N,O){const $=this._writableState;typeof k=="function"?(O=k,k=null,N=null):typeof N=="function"&&(O=N,N=null);let j;if(k!=null){const oe=me(this,k,N);oe instanceof r&&(j=oe)}return $.corked&&($.corked=1,this.uncork()),j||(!$.errored&&!$.ending?($.ending=!0,F(this,$,!0),$.ended=!0):$.finished?j=new T("end"):$.destroyed&&(j=new E("end"))),typeof O=="function"&&(j||$.finished?e.nextTick(O,j):$[M].push(O)),this};function X(k){return k.ending&&!k.destroyed&&k.constructed&&k.length===0&&!k.errored&&k.buffered.length===0&&!k.finished&&!k.writing&&!k.errorEmitted&&!k.closeEmitted}function re(k,N){let O=!1;function $(j){if(O){P(k,j??w());return}if(O=!0,N.pendingcb--,j){const oe=N[M].splice(0);for(let W=0;W{X(j)?V($,j):j.pendingcb--},k,N)):X(N)&&(N.pendingcb++,V(k,N))))}function V(k,N){N.pendingcb--,N.finished=!0;const O=N[M].splice(0);for(let $=0;${if(se!=null)throw new g("nully","body",se)},se=>{b(ie,se)});return ie=new K({objectMode:!0,readable:!1,write:fe,final(se){J(async()=>{try{await G,e.nextTick(se,null)}catch(_e){e.nextTick(se,_e)}})},destroy:de})}throw new g("Iterable, AsyncIterable or AsyncFunction",Q,me)}if(T(D))return M(D.arrayBuffer());if(i(D))return S(K,D,{objectMode:!0,writable:!1});if(u(D?.readable)&&c(D?.writable))return K.fromWeb(D);if(typeof D?.writable=="object"||typeof D?.readable=="object"){const me=D!=null&&D.readable?a(D?.readable)?D?.readable:M(D.readable):void 0,fe=D!=null&&D.writable?s(D?.writable)?D?.writable:M(D.writable):void 0;return U({readable:me,writable:fe})}const le=D?.then;if(typeof le=="function"){let me;return R(le,D,fe=>{fe!=null&&me.push(fe),me.push(null)},fe=>{b(me,fe)}),me=new K({objectMode:!0,writable:!1,read(){}})}throw new d(Q,["Blob","ReadableStream","WritableStream","Stream","Iterable","AsyncIterable","Function","{ readable, writable } pair","Promise"],D)};function P(M){let{promise:D,resolve:Q}=w();const le=new I,me=le.signal;return{value:M((async function*(){for(;;){const J=D;D=null;const{chunk:de,done:B,cb:ie}=await J;if(e.nextTick(ie),B)return;if(me.aborted)throw new h(void 0,{cause:me.reason});({promise:D,resolve:Q}=w()),yield de}})(),{signal:me}),write(J,de,B){const ie=Q;Q=null,ie({chunk:J,done:!1,cb:B})},final(J){const de=Q;Q=null,de({done:!0,cb:J})},destroy(J,de){le.abort(),de(J)}}}function U(M){const D=M.readable&&typeof M.readable.read!="function"?_.wrap(M.readable):M.readable,Q=M.writable;let le=!!r(D),me=!!n(Q),fe,J,de,B,ie;function G(se){const _e=B;B=null,_e?_e(se):se&&ie.destroy(se)}return ie=new K({readableObjectMode:!!(D!=null&&D.readableObjectMode),writableObjectMode:!!(Q!=null&&Q.writableObjectMode),readable:le,writable:me}),me&&(f(Q,se=>{me=!1,se&&b(D,se),G(se)}),ie._write=function(se,_e,X){Q.write(se,_e)?X():fe=X},ie._final=function(se){Q.end(),J=se},Q.on("drain",function(){if(fe){const se=fe;fe=null,se()}}),Q.on("finish",function(){if(J){const se=J;J=null,se()}})),le&&(f(D,se=>{le=!1,se&&b(D,se),G(se)}),D.on("readable",function(){if(de){const se=de;de=null,se()}}),D.on("end",function(){ie.push(null)}),ie._read=function(){for(;;){const se=D.read();if(se===null){de=ie._read;return}if(!ie.push(se))return}}),ie._destroy=function(se,_e){!se&&B!==null&&(se=new h),de=null,fe=null,J=null,B===null?_e(se):(B=_e,b(Q,se),b(D,se))},ie}return sf}var af,Eb;function Vn(){if(Eb)return af;Eb=1;const{ObjectDefineProperties:e,ObjectGetOwnPropertyDescriptor:t,ObjectKeys:r,ObjectSetPrototypeOf:n}=_t();af=a;const i=Ju(),o=sg();n(a.prototype,i.prototype),n(a,i);{const c=r(o.prototype);for(let f=0;f{if(c){u?u(c):this.destroy(c);return}f!=null&&this.push(f),this.push(null),u&&u()}):(this.push(null),u&&u())}function l(){this._final!==s&&s.call(this)}return a.prototype._final=s,a.prototype._transform=function(u,c,f){throw new r("_transform()")},a.prototype._write=function(u,c,f){const h=this._readableState,d=this._writableState,g=h.length;this._transform(u,c,(b,y)=>{if(b){f(b);return}y!=null&&this.push(y),d.ended||g===h.length||h.length{re=!0});const ee=o(se,{readable:_e,writable:X},F=>{re=!F});return{destroy:F=>{re||(re=!0,s.destroyer(se,F||new d("pipe")))},cleanup:ee}}function le(se){return y(se[se.length-1],"streams[stream.length - 1]"),se.pop()}function me(se){if(m(se))return se;if(S(se))return fe(se);throw new c("val",["Readable","Iterable","AsyncIterable"],se)}async function*fe(se){M||(M=Ju()),yield*M.prototype[n].call(se)}async function J(se,_e,X,{end:re}){let ee,F=null;const V=C=>{if(C&&(ee=C),F){const k=F;F=null,k()}},q=()=>new r((C,k)=>{ee?k(ee):F=()=>{ee?k(ee):C()}});_e.on("drain",V);const z=o(_e,{readable:!1},V);try{_e.writableNeedDrain&&await q();for await(const C of se)_e.write(C)||await q();re&&(_e.end(),await q()),X()}catch(C){X(ee!==C?u(ee,C):C)}finally{z(),_e.off("drain",V)}}async function de(se,_e,X,{end:re}){T(_e)&&(_e=_e.writable);const ee=_e.getWriter();try{for await(const F of se)await ee.ready,ee.write(F).catch(()=>{});await ee.ready,re&&await ee.close(),X()}catch(F){try{await ee.abort(F),X(F)}catch(V){X(V)}}}function B(...se){return ie(se,a(le(se)))}function ie(se,_e,X){if(se.length===1&&t(se[0])&&(se=se[0]),se.length<2)throw new h("streams");const re=new P,ee=re.signal,F=X?.signal,V=[];_(F,"options.signal");function q(){j(new b)}D=D||dr().addAbortListener;let z;F&&(z=D(F,q));let C,k;const N=[];let O=0;function $(ue){j(ue,--O===0)}function j(ue,ge){var be;if(ue&&(!C||C.code==="ERR_STREAM_PREMATURE_CLOSE")&&(C=ue),!(!C&&!ge)){for(;N.length;)N.shift()(C);(be=z)===null||be===void 0||be[i](),re.abort(),ge&&(C||V.forEach(ke=>ke()),e.nextTick(_e,C,k))}}let oe;for(let ue=0;ue0,A=be||X?.end!==!1,v=ue===se.length-1;if(E(ge)){let p=function(x){x&&x.name!=="AbortError"&&x.code!=="ERR_STREAM_PREMATURE_CLOSE"&&$(x)};var H=p;if(A){const{destroy:x,cleanup:L}=Q(ge,be,ke);N.push(x),w(ge)&&v&&V.push(L)}ge.on("error",p),w(ge)&&v&&V.push(()=>{ge.removeListener("error",p)})}if(ue===0)if(typeof ge=="function"){if(oe=ge({signal:ee}),!m(oe))throw new f("Iterable, AsyncIterable or Stream","source",oe)}else m(ge)||S(ge)||T(ge)?oe=ge:oe=l.from(ge);else if(typeof ge=="function"){if(T(oe)){var W;oe=me((W=oe)===null||W===void 0?void 0:W.readable)}else oe=me(oe);if(oe=ge(oe,{signal:ee}),be){if(!m(oe,!0))throw new f("AsyncIterable",`transform[${ue-1}]`,oe)}else{var ne;U||(U=RE());const p=new U({objectMode:!0}),x=(ne=oe)===null||ne===void 0?void 0:ne.then;if(typeof x=="function")O++,x.call(oe,he=>{k=he,he!=null&&p.write(he),A&&p.end(),e.nextTick($)},he=>{p.destroy(he),e.nextTick($,he)});else if(m(oe,!0))O++,J(oe,p,$,{end:A});else if(R(oe)||T(oe)){const he=oe.readable||oe;O++,J(he,p,$,{end:A})}else throw new f("AsyncIterable or Promise","destination",oe);oe=p;const{destroy:L,cleanup:Z}=Q(oe,!1,!0);N.push(L),v&&V.push(Z)}}else if(E(ge)){if(S(oe)){O+=2;const p=G(oe,ge,$,{end:A});w(ge)&&v&&V.push(p)}else if(T(oe)||R(oe)){const p=oe.readable||oe;O++,J(p,ge,$,{end:A})}else if(m(oe))O++,J(oe,ge,$,{end:A});else throw new c("val",["Readable","Iterable","AsyncIterable","ReadableStream","TransformStream"],oe);oe=ge}else if(I(ge)){if(S(oe))O++,de(me(oe),ge,$,{end:A});else if(R(oe)||m(oe))O++,de(oe,ge,$,{end:A});else if(T(oe))O++,de(oe.readable,ge,$,{end:A});else throw new c("val",["Readable","Iterable","AsyncIterable","ReadableStream","TransformStream"],oe);oe=ge}else oe=l.from(ge)}return(ee!=null&&ee.aborted||F!=null&&F.aborted)&&e.nextTick(q),oe}function G(se,_e,X,{end:re}){let ee=!1;if(_e.on("close",()=>{ee||X(new g)}),se.pipe(_e,{end:!1}),re){let V=function(){ee=!0,_e.end()};var F=V;K(se)?e.nextTick(V):se.once("end",V)}else X();return o(se,{readable:!0,writable:!1},V=>{const q=se._readableState;V&&V.code==="ERR_STREAM_PREMATURE_CLOSE"&&q&&q.ended&&!q.errored&&!q.errorEmitted?se.once("end",X).once("error",X):X(V)}),o(_e,{readable:!1,writable:!0},X)}return cf={pipelineImpl:ie,pipeline:B},cf}var ff,Tb;function NE(){if(Tb)return ff;Tb=1;const{pipeline:e}=ag(),t=Vn(),{destroyer:r}=cs(),{isNodeStream:n,isReadable:i,isWritable:o,isWebStream:a,isTransformStream:s,isWritableStream:l,isReadableStream:u}=Xn(),{AbortError:c,codes:{ERR_INVALID_ARG_VALUE:f,ERR_MISSING_ARGS:h}}=nr(),d=xi();return ff=function(...b){if(b.length===0)throw new h("streams");if(b.length===1)return t.from(b[0]);const y=[...b];if(typeof b[0]=="function"&&(b[0]=t.from(b[0])),typeof b[b.length-1]=="function"){const U=b.length-1;b[U]=t.from(b[U])}for(let U=0;U0&&!(o(b[U])||l(b[U])||s(b[U])))throw new f(`streams[${U}]`,y[U],"must be writable")}let _,m,w,S,E;function T(U){const M=S;S=null,M?M(U):U?E.destroy(U):!P&&!K&&E.destroy()}const I=b[0],R=e(b,T),K=!!(o(I)||l(I)||s(I)),P=!!(i(R)||u(R)||s(R));if(E=new t({writableObjectMode:!!(I!=null&&I.writableObjectMode),readableObjectMode:!!(R!=null&&R.readableObjectMode),writable:K,readable:P}),K){if(n(I))E._write=function(M,D,Q){I.write(M,D)?Q():_=Q},E._final=function(M){I.end(),m=M},I.on("drain",function(){if(_){const M=_;_=null,M()}});else if(a(I)){const D=(s(I)?I.writable:I).getWriter();E._write=async function(Q,le,me){try{await D.ready,D.write(Q).catch(()=>{}),me()}catch(fe){me(fe)}},E._final=async function(Q){try{await D.ready,D.close().catch(()=>{}),m=Q}catch(le){Q(le)}}}const U=s(R)?R.readable:R;d(U,()=>{if(m){const M=m;m=null,M()}})}if(P){if(n(R))R.on("readable",function(){if(w){const U=w;w=null,U()}}),R.on("end",function(){E.push(null)}),E._read=function(){for(;;){const U=R.read();if(U===null){w=E._read;return}if(!E.push(U))return}};else if(a(R)){const M=(s(R)?R.readable:R).getReader();E._read=async function(){for(;;)try{const{value:D,done:Q}=await M.read();if(!E.push(D))return;if(Q){E.push(null);return}}catch{return}}}}return E._destroy=function(U,M){!U&&S!==null&&(U=new c),w=null,_=null,m=null,S===null?M(U):(S=M,n(R)&&r(R,U))},E},ff}var Ib;function LP(){if(Ib)return Wa;Ib=1;const e=globalThis.AbortController||ra().AbortController,{codes:{ERR_INVALID_ARG_VALUE:t,ERR_INVALID_ARG_TYPE:r,ERR_MISSING_ARGS:n,ERR_OUT_OF_RANGE:i},AbortError:o}=nr(),{validateAbortSignal:a,validateInteger:s,validateObject:l}=Ea(),u=_t().Symbol("kWeak"),c=_t().Symbol("kResistStopPropagation"),{finished:f}=xi(),h=NE(),{addAbortSignalNoValidate:d}=Yu(),{isWritable:g,isNodeStream:b}=Xn(),{deprecate:y}=dr(),{ArrayPrototypePush:_,Boolean:m,MathFloor:w,Number:S,NumberIsNaN:E,Promise:T,PromiseReject:I,PromiseResolve:R,PromisePrototypeThen:K,Symbol:P}=_t(),U=P("kEmpty"),M=P("kEof");function D(F,V){if(V!=null&&l(V,"options"),V?.signal!=null&&a(V.signal,"options.signal"),b(F)&&!g(F))throw new t("stream",F,"must be writable");const q=h(this,F);return V!=null&&V.signal&&d(V.signal,q),q}function Q(F,V){if(typeof F!="function")throw new r("fn",["Function","AsyncFunction"],F);V!=null&&l(V,"options"),V?.signal!=null&&a(V.signal,"options.signal");let q=1;V?.concurrency!=null&&(q=w(V.concurrency));let z=q-1;return V?.highWaterMark!=null&&(z=w(V.highWaterMark)),s(q,"options.concurrency",1),s(z,"options.highWaterMark",0),z+=q,(async function*(){const k=dr().AbortSignalAny([V?.signal].filter(m)),N=this,O=[],$={signal:k};let j,oe,W=!1,ne=0;function H(){W=!0,ue()}function ue(){ne-=1,ge()}function ge(){oe&&!W&&ne=z||ne>=q)&&await new T(A=>{oe=A})}O.push(M)}catch(ke){const A=I(ke);K(A,ue,H),O.push(A)}finally{W=!0,j&&(j(),j=null)}}be();try{for(;;){for(;O.length>0;){const ke=await O[0];if(ke===M)return;if(k.aborted)throw new o;ke!==U&&(yield ke),O.shift(),ge()}await new T(ke=>{j=ke})}}finally{W=!0,oe&&(oe(),oe=null)}}).call(this)}function le(F=void 0){return F!=null&&l(F,"options"),F?.signal!=null&&a(F.signal,"options.signal"),(async function*(){let q=0;for await(const C of this){var z;if(F!=null&&(z=F.signal)!==null&&z!==void 0&&z.aborted)throw new o({cause:F.signal.reason});yield[q++,C]}}).call(this)}async function me(F,V=void 0){for await(const q of B.call(this,F,V))return!0;return!1}async function fe(F,V=void 0){if(typeof F!="function")throw new r("fn",["Function","AsyncFunction"],F);return!await me.call(this,async(...q)=>!await F(...q),V)}async function J(F,V){for await(const q of B.call(this,F,V))return q}async function de(F,V){if(typeof F!="function")throw new r("fn",["Function","AsyncFunction"],F);async function q(z,C){return await F(z,C),U}for await(const z of Q.call(this,q,V));}function B(F,V){if(typeof F!="function")throw new r("fn",["Function","AsyncFunction"],F);async function q(z,C){return await F(z,C)?z:U}return Q.call(this,q,V)}class ie extends n{constructor(){super("reduce"),this.message="Reduce of an empty stream requires an initial value"}}async function G(F,V,q){var z;if(typeof F!="function")throw new r("reducer",["Function","AsyncFunction"],F);q!=null&&l(q,"options"),q?.signal!=null&&a(q.signal,"options.signal");let C=arguments.length>1;if(q!=null&&(z=q.signal)!==null&&z!==void 0&&z.aborted){const j=new o(void 0,{cause:q.signal.reason});throw this.once("error",()=>{}),await f(this.destroy(j)),j}const k=new e,N=k.signal;if(q!=null&&q.signal){const j={once:!0,[u]:this,[c]:!0};q.signal.addEventListener("abort",()=>k.abort(),j)}let O=!1;try{for await(const j of this){var $;if(O=!0,q!=null&&($=q.signal)!==null&&$!==void 0&&$.aborted)throw new o;C?V=await F(V,j,{signal:N}):(V=j,C=!0)}if(!O&&!C)throw new ie}finally{k.abort()}return V}async function se(F){F!=null&&l(F,"options"),F?.signal!=null&&a(F.signal,"options.signal");const V=[];for await(const z of this){var q;if(F!=null&&(q=F.signal)!==null&&q!==void 0&&q.aborted)throw new o(void 0,{cause:F.signal.reason});_(V,z)}return V}function _e(F,V){const q=Q.call(this,F,V);return(async function*(){for await(const C of q)yield*C}).call(this)}function X(F){if(F=S(F),E(F))return 0;if(F<0)throw new i("number",">= 0",F);return F}function re(F,V=void 0){return V!=null&&l(V,"options"),V?.signal!=null&&a(V.signal,"options.signal"),F=X(F),(async function*(){var z;if(V!=null&&(z=V.signal)!==null&&z!==void 0&&z.aborted)throw new o;for await(const k of this){var C;if(V!=null&&(C=V.signal)!==null&&C!==void 0&&C.aborted)throw new o;F--<=0&&(yield k)}}).call(this)}function ee(F,V=void 0){return V!=null&&l(V,"options"),V?.signal!=null&&a(V.signal,"options.signal"),F=X(F),(async function*(){var z;if(V!=null&&(z=V.signal)!==null&&z!==void 0&&z.aborted)throw new o;for await(const k of this){var C;if(V!=null&&(C=V.signal)!==null&&C!==void 0&&C.aborted)throw new o;if(F-- >0&&(yield k),F<=0)return}}).call(this)}return Wa.streamReturningOperators={asIndexedPairs:y(le,"readable.asIndexedPairs will be removed in a future version."),drop:re,filter:B,flatMap:_e,map:Q,take:ee,compose:D},Wa.promiseReturningOperators={every:fe,forEach:de,reduce:G,toArray:se,some:me,find:J},Wa}var hf,Cb;function LE(){if(Cb)return hf;Cb=1;const{ArrayPrototypePop:e,Promise:t}=_t(),{isIterable:r,isNodeStream:n,isWebStream:i}=Xn(),{pipelineImpl:o}=ag(),{finished:a}=xi();BE();function s(...l){return new t((u,c)=>{let f,h;const d=l[l.length-1];if(d&&typeof d=="object"&&!n(d)&&!r(d)&&!i(d)){const g=e(l);f=g.signal,h=g.end}o(l,(g,b)=>{g?c(g):u(b)},{signal:f,end:h})})}return hf={finished:a,pipeline:s},hf}var kb;function BE(){if(kb)return jc.exports;kb=1;const{Buffer:e}=xr(),{ObjectDefineProperty:t,ObjectKeys:r,ReflectApply:n}=_t(),{promisify:{custom:i}}=dr(),{streamReturningOperators:o,promiseReturningOperators:a}=LP(),{codes:{ERR_ILLEGAL_CONSTRUCTOR:s}}=nr(),l=NE(),{setDefaultHighWaterMark:u,getDefaultHighWaterMark:c}=Qu(),{pipeline:f}=ag(),{destroyer:h}=cs(),d=xi(),g=LE(),b=Xn(),y=jc.exports=og().Stream;y.isDestroyed=b.isDestroyed,y.isDisturbed=b.isDisturbed,y.isErrored=b.isErrored,y.isReadable=b.isReadable,y.isWritable=b.isWritable,y.Readable=Ju();for(const w of r(o)){let E=function(...T){if(new.target)throw s();return y.Readable.from(n(S,this,T))};var m=E;const S=o[w];t(E,"name",{__proto__:null,value:S.name}),t(E,"length",{__proto__:null,value:S.length}),t(y.Readable.prototype,w,{__proto__:null,value:E,enumerable:!1,configurable:!0,writable:!0})}for(const w of r(a)){let E=function(...I){if(new.target)throw s();return n(S,this,I)};var m=E;const S=a[w];t(E,"name",{__proto__:null,value:S.name}),t(E,"length",{__proto__:null,value:S.length}),t(y.Readable.prototype,w,{__proto__:null,value:E,enumerable:!1,configurable:!0,writable:!0})}y.Writable=sg(),y.Duplex=Vn(),y.Transform=PE(),y.PassThrough=RE(),y.pipeline=f;const{addAbortSignal:_}=Yu();return y.addAbortSignal=_,y.finished=d,y.destroy=h,y.compose=l,y.setDefaultHighWaterMark=u,y.getDefaultHighWaterMark=c,t(y,"promises",{__proto__:null,configurable:!0,enumerable:!0,get(){return g}}),t(f,i,{__proto__:null,enumerable:!0,get(){return g.pipeline}}),t(d,i,{__proto__:null,enumerable:!0,get(){return g.finished}}),y.Stream=y,y._isUint8Array=function(S){return S instanceof Uint8Array},y._uint8ArrayToBuffer=function(S){return e.from(S.buffer,S.byteOffset,S.byteLength)},jc.exports}var Ob;function BP(){return Ob||(Ob=1,(function(e){const t=BE(),r=LE(),n=t.Readable.destroy;e.exports=t.Readable,e.exports._uint8ArrayToBuffer=t._uint8ArrayToBuffer,e.exports._isUint8Array=t._isUint8Array,e.exports.isDisturbed=t.isDisturbed,e.exports.isErrored=t.isErrored,e.exports.isReadable=t.isReadable,e.exports.Readable=t.Readable,e.exports.Writable=t.Writable,e.exports.Duplex=t.Duplex,e.exports.Transform=t.Transform,e.exports.PassThrough=t.PassThrough,e.exports.addAbortSignal=t.addAbortSignal,e.exports.finished=t.finished,e.exports.destroy=t.destroy,e.exports.destroy=n,e.exports.pipeline=t.pipeline,e.exports.compose=t.compose,Object.defineProperty(t,"promises",{configurable:!0,enumerable:!0,get(){return r}}),e.exports.Stream=t.Stream,e.exports.default=e.exports})(Fc)),Fc.exports}var qa={exports:{}},Mb;function DP(){return Mb||(Mb=1,typeof Object.create=="function"?qa.exports=function(t,r){r&&(t.super_=r,t.prototype=Object.create(r.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:qa.exports=function(t,r){if(r){t.super_=r;var n=function(){};n.prototype=r.prototype,t.prototype=new n,t.prototype.constructor=t}}),qa.exports}var df,Pb;function $P(){if(Pb)return df;Pb=1;const{Buffer:e}=xr(),t=Symbol.for("BufferList");function r(n){if(!(this instanceof r))return new r(n);r._init.call(this,n)}return r._init=function(i){Object.defineProperty(this,t,{value:!0}),this._bufs=[],this.length=0,i&&this.append(i)},r.prototype._new=function(i){return new r(i)},r.prototype._offset=function(i){if(i===0)return[0,0];let o=0;for(let a=0;athis.length||i<0)return;const o=this._offset(i);return this._bufs[o[0]][o[1]]},r.prototype.slice=function(i,o){return typeof i=="number"&&i<0&&(i+=this.length),typeof o=="number"&&o<0&&(o+=this.length),this.copy(null,0,i,o)},r.prototype.copy=function(i,o,a,s){if((typeof a!="number"||a<0)&&(a=0),(typeof s!="number"||s>this.length)&&(s=this.length),a>=this.length||s<=0)return i||e.alloc(0);const l=!!i,u=this._offset(a),c=s-a;let f=c,h=l&&o||0,d=u[1];if(a===0&&s===this.length){if(!l)return this._bufs.length===1?this._bufs[0]:e.concat(this._bufs,this.length);for(let g=0;gb)this._bufs[g].copy(i,h,d),h+=b;else{this._bufs[g].copy(i,h,d,d+f),h+=b;break}f-=b,d&&(d=0)}return i.length>h?i.slice(0,h):i},r.prototype.shallowSlice=function(i,o){if(i=i||0,o=typeof o!="number"?this.length:o,i<0&&(i+=this.length),o<0&&(o+=this.length),i===o)return this._new();const a=this._offset(i),s=this._offset(o),l=this._bufs.slice(a[0],s[0]+1);return s[1]===0?l.pop():l[l.length-1]=l[l.length-1].slice(0,s[1]),a[1]!==0&&(l[0]=l[0].slice(a[1])),this._new(l)},r.prototype.toString=function(i,o,a){return this.slice(o,a).toString(i)},r.prototype.consume=function(i){if(i=Math.trunc(i),Number.isNaN(i)||i<=0)return this;for(;this._bufs.length;)if(i>=this._bufs[0].length)i-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(i),this.length-=i;break}return this},r.prototype.duplicate=function(){const i=this._new();for(let o=0;o=0&&u=0&&uthis.length?this.length:i;const a=this._offset(i);let s=a[0],l=a[1];for(;s=n.length){const f=u.indexOf(n,l);if(f!==-1)return this._reverseOffset([s,f]);l=u.length-n.length+1}else{const f=this._reverseOffset([s,l]);if(this._match(f,n))return f;l++}l=0}return-1},r.prototype._match=function(n,i){if(this.length-n[0,1].map(a=>[0,1].map(s=>{const l=r.alloc(1);return l.writeUInt8(t.codes[i]<r.from([i])),t.EMPTY={pingreq:r.from([t.codes.pingreq<<4,0]),pingresp:r.from([t.codes.pingresp<<4,0]),disconnect:r.from([t.codes.disconnect<<4,0])},t.MQTT5_PUBACK_PUBREC_CODES={0:"Success",16:"No matching subscribers",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",144:"Topic Name invalid",145:"Packet identifier in use",151:"Quota exceeded",153:"Payload format invalid"},t.MQTT5_PUBREL_PUBCOMP_CODES={0:"Success",146:"Packet Identifier not found"},t.MQTT5_SUBACK_CODES={0:"Granted QoS 0",1:"Granted QoS 1",2:"Granted QoS 2",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",143:"Topic Filter invalid",145:"Packet Identifier in use",151:"Quota exceeded",158:"Shared Subscriptions not supported",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"},t.MQTT5_UNSUBACK_CODES={0:"Success",17:"No subscription existed",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",143:"Topic Filter invalid",145:"Packet Identifier in use"},t.MQTT5_DISCONNECT_CODES={0:"Normal disconnection",4:"Disconnect with Will Message",128:"Unspecified error",129:"Malformed Packet",130:"Protocol Error",131:"Implementation specific error",135:"Not authorized",137:"Server busy",139:"Server shutting down",141:"Keep Alive timeout",142:"Session taken over",143:"Topic Filter invalid",144:"Topic Name invalid",147:"Receive Maximum exceeded",148:"Topic Alias invalid",149:"Packet too large",150:"Message rate too high",151:"Quota exceeded",152:"Administrative action",153:"Payload format invalid",154:"Retain not supported",155:"QoS not supported",156:"Use another server",157:"Server moved",158:"Shared Subscriptions not supported",159:"Connection rate exceeded",160:"Maximum connect time",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"},t.MQTT5_AUTH_CODES={0:"Success",24:"Continue authentication",25:"Re-authenticate"}})(gf)),gf.exports}function $E(){throw new Error("setTimeout has not been defined")}function UE(){throw new Error("clearTimeout has not been defined")}var ui=$E,ci=UE;typeof Fo.setTimeout=="function"&&(ui=setTimeout);typeof Fo.clearTimeout=="function"&&(ci=clearTimeout);function FE(e){if(ui===setTimeout)return setTimeout(e,0);if((ui===$E||!ui)&&setTimeout)return ui=setTimeout,setTimeout(e,0);try{return ui(e,0)}catch{try{return ui.call(null,e,0)}catch{return ui.call(this,e,0)}}}function jP(e){if(ci===clearTimeout)return clearTimeout(e);if((ci===UE||!ci)&&clearTimeout)return ci=clearTimeout,clearTimeout(e);try{return ci(e)}catch{try{return ci.call(null,e)}catch{return ci.call(this,e)}}}var Mn=[],Bo=!1,Fi,Pl=-1;function WP(){!Bo||!Fi||(Bo=!1,Fi.length?Mn=Fi.concat(Mn):Pl=-1,Mn.length&&jE())}function jE(){if(!Bo){var e=FE(WP);Bo=!0;for(var t=Mn.length;t;){for(Fi=Mn,Mn=[];++Pl1)for(var r=1;r0)return a(c);if(h==="number"&&isFinite(c))return f.long?l(c):s(c);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(c))};function a(c){if(c=String(c),!(c.length>100)){var f=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(c);if(f){var h=parseFloat(f[1]),d=(f[2]||"ms").toLowerCase();switch(d){case"years":case"year":case"yrs":case"yr":case"y":return h*o;case"weeks":case"week":case"w":return h*i;case"days":case"day":case"d":return h*n;case"hours":case"hour":case"hrs":case"hr":case"h":return h*r;case"minutes":case"minute":case"mins":case"min":case"m":return h*t;case"seconds":case"second":case"secs":case"sec":case"s":return h*e;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return h;default:return}}}}function s(c){var f=Math.abs(c);return f>=n?Math.round(c/n)+"d":f>=r?Math.round(c/r)+"h":f>=t?Math.round(c/t)+"m":f>=e?Math.round(c/e)+"s":c+"ms"}function l(c){var f=Math.abs(c);return f>=n?u(c,f,n,"day"):f>=r?u(c,f,r,"hour"):f>=t?u(c,f,t,"minute"):f>=e?u(c,f,e,"second"):c+" ms"}function u(c,f,h,d){var g=f>=h*1.5;return Math.round(c/h)+" "+d+(g?"s":"")}return mf}var yf,Db;function gR(){if(Db)return yf;Db=1;function e(t){n.debug=n,n.default=n,n.coerce=u,n.disable=s,n.enable=o,n.enabled=l,n.humanize=pR(),n.destroy=c,Object.keys(t).forEach(f=>{n[f]=t[f]}),n.names=[],n.skips=[],n.formatters={};function r(f){let h=0;for(let d=0;d{if(I==="%%")return"%";E++;const K=n.formatters[R];if(typeof K=="function"){const P=_[E];I=K.call(m,P),_.splice(E,1),E--}return I}),n.formatArgs.call(m,_),(m.log||n.log).apply(m,_)}return y.namespace=f,y.useColors=n.useColors(),y.color=n.selectColor(f),y.extend=i,y.destroy=n.destroy,Object.defineProperty(y,"enabled",{enumerable:!0,configurable:!1,get:()=>d!==null?d:(g!==n.namespaces&&(g=n.namespaces,b=n.enabled(f)),b),set:_=>{d=_}}),typeof n.init=="function"&&n.init(y),y}function i(f,h){const d=n(this.namespace+(typeof h>"u"?":":h)+f);return d.log=this.log,d}function o(f){n.save(f),n.namespaces=f,n.names=[],n.skips=[];const h=(typeof f=="string"?f:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(const d of h)d[0]==="-"?n.skips.push(d.slice(1)):n.names.push(d)}function a(f,h){let d=0,g=0,b=-1,y=0;for(;d"-"+h)].join(",");return n.enable(""),f}function l(f){for(const h of n.skips)if(a(f,h))return!1;for(const h of n.names)if(a(f,h))return!0;return!1}function u(f){return f instanceof Error?f.stack||f.message:f}function c(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return n.enable(n.load()),n}return yf=e,yf}var $b;function VE(){return $b||($b=1,(function(e,t){var r={};t.formatArgs=i,t.save=o,t.load=a,t.useColors=n,t.storage=s(),t.destroy=(()=>{let u=!1;return()=>{u||(u=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function n(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let u;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(u=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(u[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function i(u){if(u[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+u[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const c="color: "+this.color;u.splice(1,0,c,"color: inherit");let f=0,h=0;u[0].replace(/%[a-zA-Z%]/g,d=>{d!=="%%"&&(f++,d==="%c"&&(h=f))}),u.splice(h,0,c)}t.log=console.debug||console.log||(()=>{});function o(u){try{u?t.storage.setItem("debug",u):t.storage.removeItem("debug")}catch{}}function a(){let u;try{u=t.storage.getItem("debug")||t.storage.getItem("DEBUG")}catch{}return!u&&typeof Ni<"u"&&"env"in Ni&&(u=r.DEBUG),u}function s(){try{return localStorage}catch{}}e.exports=gR()(t);const{formatters:l}=e.exports;l.j=function(u){try{return JSON.stringify(u)}catch(c){return"[UnexpectedJSONParseError]: "+c.message}}})(Ga,Ga.exports)),Ga.exports}var bf,Ub;function mR(){if(Ub)return bf;Ub=1;const e=UP(),{EventEmitter:t}=us(),r=FP(),n=DE(),i=VE()("mqtt-packet:parser");class o extends t{constructor(){super(),this.parser=this.constructor.parser}static parser(s){return this instanceof o?(this.settings=s||{},this._states=["_parseHeader","_parseLength","_parsePayload","_newPacket"],this._resetState(),this):new o().parser(s)}_resetState(){i("_resetState: resetting packet, error, _list, and _stateCounter"),this.packet=new r,this.error=null,this._list=e(),this._stateCounter=0}parse(s){for(this.error&&this._resetState(),this._list.append(s),i("parse: current state: %s",this._states[this._stateCounter]);(this.packet.length!==-1||this._list.length>0)&&this[this._states[this._stateCounter]]()&&!this.error;)this._stateCounter++,i("parse: state complete. _stateCounter is now: %d",this._stateCounter),i("parse: packet.length: %d, buffer list length: %d",this.packet.length,this._list.length),this._stateCounter>=this._states.length&&(this._stateCounter=0);return i("parse: exited while loop. packet: %d, buffer list length: %d",this.packet.length,this._list.length),this._list.length}_parseHeader(){const s=this._list.readUInt8(0),l=s>>n.CMD_SHIFT;this.packet.cmd=n.types[l];const u=s&15,c=n.requiredHeaderFlags[l];return c!=null&&u!==c?this._emitError(new Error(n.requiredHeaderFlagsErrors[l])):(this.packet.retain=(s&n.RETAIN_MASK)!==0,this.packet.qos=s>>n.QOS_SHIFT&n.QOS_MASK,this.packet.qos>2?this._emitError(new Error("Packet must not have both QoS bits set to 1")):(this.packet.dup=(s&n.DUP_MASK)!==0,i("_parseHeader: packet: %o",this.packet),this._list.consume(1),!0))}_parseLength(){const s=this._parseVarByteNum(!0);return s&&(this.packet.length=s.value,this._list.consume(s.bytes)),i("_parseLength %d",s.value),!!s}_parsePayload(){i("_parsePayload: payload %O",this._list);let s=!1;if(this.packet.length===0||this._list.length>=this.packet.length){switch(this._pos=0,this.packet.cmd){case"connect":this._parseConnect();break;case"connack":this._parseConnack();break;case"publish":this._parsePublish();break;case"puback":case"pubrec":case"pubrel":case"pubcomp":this._parseConfirmation();break;case"subscribe":this._parseSubscribe();break;case"suback":this._parseSuback();break;case"unsubscribe":this._parseUnsubscribe();break;case"unsuback":this._parseUnsuback();break;case"pingreq":case"pingresp":break;case"disconnect":this._parseDisconnect();break;case"auth":this._parseAuth();break;default:this._emitError(new Error("Not supported"))}s=!0}return i("_parsePayload complete result: %s",s),s}_parseConnect(){i("_parseConnect");let s,l,u,c;const f={},h=this.packet,d=this._parseString();if(d===null)return this._emitError(new Error("Cannot parse protocolId"));if(d!=="MQTT"&&d!=="MQIsdp")return this._emitError(new Error("Invalid protocolId"));if(h.protocolId=d,this._pos>=this._list.length)return this._emitError(new Error("Packet too short"));if(h.protocolVersion=this._list.readUInt8(this._pos),h.protocolVersion>=128&&(h.bridgeMode=!0,h.protocolVersion=h.protocolVersion-128),h.protocolVersion!==3&&h.protocolVersion!==4&&h.protocolVersion!==5)return this._emitError(new Error("Invalid protocol version"));if(this._pos++,this._pos>=this._list.length)return this._emitError(new Error("Packet too short"));if(this._list.readUInt8(this._pos)&1)return this._emitError(new Error("Connect flag bit 0 must be 0, but got 1"));f.username=this._list.readUInt8(this._pos)&n.USERNAME_MASK,f.password=this._list.readUInt8(this._pos)&n.PASSWORD_MASK,f.will=this._list.readUInt8(this._pos)&n.WILL_FLAG_MASK;const g=!!(this._list.readUInt8(this._pos)&n.WILL_RETAIN_MASK),b=(this._list.readUInt8(this._pos)&n.WILL_QOS_MASK)>>n.WILL_QOS_SHIFT;if(f.will)h.will={},h.will.retain=g,h.will.qos=b;else{if(g)return this._emitError(new Error("Will Retain Flag must be set to zero when Will Flag is set to 0"));if(b)return this._emitError(new Error("Will QoS must be set to zero when Will Flag is set to 0"))}if(h.clean=(this._list.readUInt8(this._pos)&n.CLEAN_SESSION_MASK)!==0,this._pos++,h.keepalive=this._parseNum(),h.keepalive===-1)return this._emitError(new Error("Packet too short"));if(h.protocolVersion===5){const _=this._parseProperties();Object.getOwnPropertyNames(_).length&&(h.properties=_)}const y=this._parseString();if(y===null)return this._emitError(new Error("Packet too short"));if(h.clientId=y,i("_parseConnect: packet.clientId: %s",h.clientId),f.will){if(h.protocolVersion===5){const _=this._parseProperties();Object.getOwnPropertyNames(_).length&&(h.will.properties=_)}if(s=this._parseString(),s===null)return this._emitError(new Error("Cannot parse will topic"));if(h.will.topic=s,i("_parseConnect: packet.will.topic: %s",h.will.topic),l=this._parseBuffer(),l===null)return this._emitError(new Error("Cannot parse will payload"));h.will.payload=l,i("_parseConnect: packet.will.paylaod: %s",h.will.payload)}if(f.username){if(c=this._parseString(),c===null)return this._emitError(new Error("Cannot parse username"));h.username=c,i("_parseConnect: packet.username: %s",h.username)}if(f.password){if(u=this._parseBuffer(),u===null)return this._emitError(new Error("Cannot parse password"));h.password=u}return this.settings=h,i("_parseConnect: complete"),h}_parseConnack(){i("_parseConnack");const s=this.packet;if(this._list.length<1)return null;const l=this._list.readUInt8(this._pos++);if(l>1)return this._emitError(new Error("Invalid connack flags, bits 7-1 must be set to 0"));if(s.sessionPresent=!!(l&n.SESSIONPRESENT_MASK),this.settings.protocolVersion===5)this._list.length>=2?s.reasonCode=this._list.readUInt8(this._pos++):s.reasonCode=0;else{if(this._list.length<2)return null;s.returnCode=this._list.readUInt8(this._pos++)}if(s.returnCode===-1||s.reasonCode===-1)return this._emitError(new Error("Cannot parse return code"));if(this.settings.protocolVersion===5){const u=this._parseProperties();Object.getOwnPropertyNames(u).length&&(s.properties=u)}i("_parseConnack: complete")}_parsePublish(){i("_parsePublish");const s=this.packet;if(s.topic=this._parseString(),s.topic===null)return this._emitError(new Error("Cannot parse topic"));if(!(s.qos>0&&!this._parseMessageId())){if(this.settings.protocolVersion===5){const l=this._parseProperties();Object.getOwnPropertyNames(l).length&&(s.properties=l)}s.payload=this._list.slice(this._pos,s.length),i("_parsePublish: payload from buffer list: %o",s.payload)}}_parseSubscribe(){i("_parseSubscribe");const s=this.packet;let l,u,c,f,h,d,g;if(s.subscriptions=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){const b=this._parseProperties();Object.getOwnPropertyNames(b).length&&(s.properties=b)}if(s.length<=0)return this._emitError(new Error("Malformed subscribe, no payload specified"));for(;this._pos=s.length)return this._emitError(new Error("Malformed Subscribe Payload"));if(u=this._parseByte(),this.settings.protocolVersion===5){if(u&192)return this._emitError(new Error("Invalid subscribe topic flag bits, bits 7-6 must be 0"))}else if(u&252)return this._emitError(new Error("Invalid subscribe topic flag bits, bits 7-2 must be 0"));if(c=u&n.SUBSCRIBE_OPTIONS_QOS_MASK,c>2)return this._emitError(new Error("Invalid subscribe QoS, must be <= 2"));if(d=(u>>n.SUBSCRIBE_OPTIONS_NL_SHIFT&n.SUBSCRIBE_OPTIONS_NL_MASK)!==0,h=(u>>n.SUBSCRIBE_OPTIONS_RAP_SHIFT&n.SUBSCRIBE_OPTIONS_RAP_MASK)!==0,f=u>>n.SUBSCRIBE_OPTIONS_RH_SHIFT&n.SUBSCRIBE_OPTIONS_RH_MASK,f>2)return this._emitError(new Error("Invalid retain handling, must be <= 2"));g={topic:l,qos:c},this.settings.protocolVersion===5?(g.nl=d,g.rap=h,g.rh=f):this.settings.bridgeMode&&(g.rh=0,g.rap=!0,g.nl=!0),i("_parseSubscribe: push subscription `%s` to subscription",g),s.subscriptions.push(g)}}}_parseSuback(){i("_parseSuback");const s=this.packet;if(this.packet.granted=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){const l=this._parseProperties();Object.getOwnPropertyNames(l).length&&(s.properties=l)}if(s.length<=0)return this._emitError(new Error("Malformed suback, no payload specified"));for(;this._pos2&&l!==128)return this._emitError(new Error("Invalid suback QoS, must be 0, 1, 2 or 128"));this.packet.granted.push(l)}}}_parseUnsubscribe(){i("_parseUnsubscribe");const s=this.packet;if(s.unsubscriptions=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){const l=this._parseProperties();Object.getOwnPropertyNames(l).length&&(s.properties=l)}if(s.length<=0)return this._emitError(new Error("Malformed unsubscribe, no payload specified"));for(;this._pos2){switch(s.reasonCode=this._parseByte(),this.packet.cmd){case"puback":case"pubrec":if(!n.MQTT5_PUBACK_PUBREC_CODES[s.reasonCode])return this._emitError(new Error("Invalid "+this.packet.cmd+" reason code"));break;case"pubrel":case"pubcomp":if(!n.MQTT5_PUBREL_PUBCOMP_CODES[s.reasonCode])return this._emitError(new Error("Invalid "+this.packet.cmd+" reason code"));break}i("_parseConfirmation: packet.reasonCode `%d`",s.reasonCode)}else s.reasonCode=0;if(s.length>3){const l=this._parseProperties();Object.getOwnPropertyNames(l).length&&(s.properties=l)}}return!0}_parseDisconnect(){const s=this.packet;if(i("_parseDisconnect"),this.settings.protocolVersion===5){this._list.length>0?(s.reasonCode=this._parseByte(),n.MQTT5_DISCONNECT_CODES[s.reasonCode]||this._emitError(new Error("Invalid disconnect reason code"))):s.reasonCode=0;const l=this._parseProperties();Object.getOwnPropertyNames(l).length&&(s.properties=l)}return i("_parseDisconnect result: true"),!0}_parseAuth(){i("_parseAuth");const s=this.packet;if(this.settings.protocolVersion!==5)return this._emitError(new Error("Not supported auth packet for this version MQTT"));if(s.reasonCode=this._parseByte(),!n.MQTT5_AUTH_CODES[s.reasonCode])return this._emitError(new Error("Invalid auth reason code"));const l=this._parseProperties();return Object.getOwnPropertyNames(l).length&&(s.properties=l),i("_parseAuth: result: true"),!0}_parseMessageId(){const s=this.packet;return s.messageId=this._parseNum(),s.messageId===null?(this._emitError(new Error("Cannot parse messageId")),!1):(i("_parseMessageId: packet.messageId %d",s.messageId),!0)}_parseString(s){const l=this._parseNum(),u=l+this._pos;if(l===-1||u>this._list.length||u>this.packet.length)return null;const c=this._list.toString("utf8",this._pos,u);return this._pos+=l,i("_parseString: result: %s",c),c}_parseStringPair(){return i("_parseStringPair"),{name:this._parseString(),value:this._parseString()}}_parseBuffer(){const s=this._parseNum(),l=s+this._pos;if(s===-1||l>this._list.length||l>this.packet.length)return null;const u=this._list.slice(this._pos,l);return this._pos+=s,i("_parseBuffer: result: %o",u),u}_parseNum(){if(this._list.length-this._pos<2)return-1;const s=this._list.readUInt16BE(this._pos);return this._pos+=2,i("_parseNum: result: %s",s),s}_parse4ByteNum(){if(this._list.length-this._pos<4)return-1;const s=this._list.readUInt32BE(this._pos);return this._pos+=4,i("_parse4ByteNum: result: %s",s),s}_parseVarByteNum(s){i("_parseVarByteNum");const l=4;let u=0,c=1,f=0,h=!1,d;const g=this._pos?this._pos:0;for(;u=u&&this._emitError(new Error("Invalid variable byte integer")),g&&(this._pos+=u),h?s?h={bytes:u,value:f}:h=f:h=!1,i("_parseVarByteNum: result: %o",h),h}_parseByte(){let s;return this._pos>8,0),u.writeUInt8(l&255,1),u}function o(){for(let l=0;l0&&(c=c|128),h.writeUInt8(c,f++);while(l>0&&f<4);return l>0&&(f=0),n?h.subarray(0,f):h.slice(0,f)}function s(l){const u=e.allocUnsafe(4);return u.writeUInt32BE(l,0),u}return _f={cache:r,generateCache:o,generateNumber:i,genBufVariableByteInt:a,generate4ByteBuffer:s},_f}var vf={exports:{}},jb;function bR(){if(jb)return vf.exports;jb=1,vf.exports={nextTick:e};function e(t,r,n,i){if(typeof t!="function")throw new TypeError('"callback" argument must be a function');var o=arguments.length,a,s;switch(o){case 0:case 1:return Ni.nextTick(t);case 2:return Ni.nextTick(function(){t.call(null,r)});case 3:return Ni.nextTick(function(){t.call(null,r,n)});case 4:return Ni.nextTick(function(){t.call(null,r,n,i)});default:for(a=new Array(o-1),s=0;s=4)&&(N||C))oe+=t.byteLength(N)+2;else{if(q<4)return re.destroy(new Error("clientId must be supplied before 3.1.1")),!1;if(C*1===0)return re.destroy(new Error("clientId must be given if cleanSession set to 0")),!1}if(typeof k!="number"||k<0||k>65535||k%1!==0)return re.destroy(new Error("Invalid keepalive")),!1;oe+=2,oe+=1;let W,ne;if(q===5){if(W=de(re,j),!W)return!1;oe+=W.length}if(z){if(typeof z!="object")return re.destroy(new Error("Invalid will")),!1;if(!z.topic||typeof z.topic!="string")return re.destroy(new Error("Invalid will topic")),!1;if(oe+=t.byteLength(z.topic)+2,oe+=2,z.payload)if(z.payload.length>=0)typeof z.payload=="string"?oe+=t.byteLength(z.payload):oe+=z.payload.length;else return re.destroy(new Error("Invalid will payload")),!1;if(ne={},q===5){if(ne=de(re,z.properties),!ne)return!1;oe+=ne.length}}let H=!1;if(O!=null)if(_e(O))H=!0,oe+=t.byteLength(O)+2;else return re.destroy(new Error("Invalid username")),!1;if($!=null){if(!H)return re.destroy(new Error("Username is required to use password")),!1;if(_e($))oe+=se($)+2;else return re.destroy(new Error("Invalid password")),!1}re.write(e.CONNECT_HEADER),M(re,oe),J(re,V),F.bridgeMode&&(q+=128),re.write(q===131?e.VERSION131:q===132?e.VERSION132:q===4?e.VERSION4:q===5?e.VERSION5:e.VERSION3);let ue=0;return ue|=O!=null?e.USERNAME_MASK:0,ue|=$!=null?e.PASSWORD_MASK:0,ue|=z&&z.retain?e.WILL_RETAIN_MASK:0,ue|=z&&z.qos?z.qos<0&&h(re,N),j?.write(),a("publish: payload: %o",k),re.write(k)}function w(X,re,ee){const F=ee?ee.protocolVersion:4,V=X||{},q=V.cmd||"puback",z=V.messageId,C=V.dup&&q==="pubrel"?e.DUP_MASK:0;let k=0;const N=V.reasonCode,O=V.properties;let $=F===5?3:2;if(q==="pubrel"&&(k=1),typeof z!="number")return re.destroy(new Error("Invalid messageId")),!1;let j=null;if(F===5&&typeof O=="object"){if(j=B(re,O,ee,$),!j)return!1;$+=j.length}return re.write(e.ACKS[q][k][C][0]),$===3&&($+=N!==0?1:-1),M(re,$),h(re,z),F===5&&$!==2&&re.write(t.from([N])),j!==null?j.write():$===4&&re.write(t.from([0])),!0}function S(X,re,ee){a("subscribe: packet: ");const F=ee?ee.protocolVersion:4,V=X||{},q=V.dup?e.DUP_MASK:0,z=V.messageId,C=V.subscriptions,k=V.properties;let N=0;if(typeof z!="number")return re.destroy(new Error("Invalid messageId")),!1;N+=2;let O=null;if(F===5){if(O=de(re,k),!O)return!1;N+=O.length}if(typeof C=="object"&&C.length)for(let j=0;j2)return re.destroy(new Error("Invalid subscriptions - invalid Retain Handling")),!1}N+=t.byteLength(oe)+2+1}else return re.destroy(new Error("Invalid subscriptions")),!1;a("subscribe: writing to stream: %o",e.SUBSCRIBE_HEADER),re.write(e.SUBSCRIBE_HEADER[1][q?1:0][0]),M(re,N),h(re,z),O!==null&&O.write();let $=!0;for(const j of C){const oe=j.topic,W=j.qos,ne=+j.nl,H=+j.rap,ue=j.rh;let ge;D(re,oe),ge=e.SUBSCRIBE_OPTIONS_QOS[W],F===5&&(ge|=ne?e.SUBSCRIBE_OPTIONS_NL:0,ge|=H?e.SUBSCRIBE_OPTIONS_RAP:0,ge|=ue?e.SUBSCRIBE_OPTIONS_RH[ue]:0),$=re.write(t.from([ge]))}return $}function E(X,re,ee){const F=ee?ee.protocolVersion:4,V=X||{},q=V.messageId,z=V.granted,C=V.properties;let k=0;if(typeof q!="number")return re.destroy(new Error("Invalid messageId")),!1;if(k+=2,typeof z=="object"&&z.length)for(let O=0;Oe.VARBYTEINT_MAX)return X.destroy(new Error(`Invalid variable byte integer: ${re}`)),!1;let ee=U[re];return ee||(ee=c(re),re<16384&&(U[re]=ee)),a("writeVarByteInt: writing to stream: %o",ee),X.write(ee)}function D(X,re){const ee=t.byteLength(re);return h(X,ee),a("writeString: %s",re),X.write(re,"utf8")}function Q(X,re,ee){D(X,re),D(X,ee)}function le(X,re){return a("writeNumberCached: number: %d",re),a("writeNumberCached: %o",s[re]),X.write(s[re])}function me(X,re){const ee=l(re);return a("writeNumberGenerated: %o",ee),X.write(ee)}function fe(X,re){const ee=f(re);return a("write4ByteNumber: %o",ee),X.write(ee)}function J(X,re){typeof re=="string"?D(X,re):re?(h(X,re.length),X.write(re)):h(X,0)}function de(X,re){if(typeof re!="object"||re.length!=null)return{length:1,write(){G(X,{},0)}};let ee=0;function F(q,z){const C=e.propertiesTypes[q];let k=0;switch(C){case"byte":{if(typeof z!="boolean")return X.destroy(new Error(`Invalid ${q}: ${z}`)),!1;k+=2;break}case"int8":{if(typeof z!="number"||z<0||z>255)return X.destroy(new Error(`Invalid ${q}: ${z}`)),!1;k+=2;break}case"binary":{if(z&&z===null)return X.destroy(new Error(`Invalid ${q}: ${z}`)),!1;k+=1+t.byteLength(z)+2;break}case"int16":{if(typeof z!="number"||z<0||z>65535)return X.destroy(new Error(`Invalid ${q}: ${z}`)),!1;k+=3;break}case"int32":{if(typeof z!="number"||z<0||z>4294967295)return X.destroy(new Error(`Invalid ${q}: ${z}`)),!1;k+=5;break}case"var":{if(typeof z!="number"||z<0||z>268435455)return X.destroy(new Error(`Invalid ${q}: ${z}`)),!1;k+=1+t.byteLength(c(z));break}case"string":{if(typeof z!="string")return X.destroy(new Error(`Invalid ${q}: ${z}`)),!1;k+=3+t.byteLength(z.toString());break}case"pair":{if(typeof z!="object")return X.destroy(new Error(`Invalid ${q}: ${z}`)),!1;k+=Object.getOwnPropertyNames(z).reduce((N,O)=>{const $=z[O];return Array.isArray($)?N+=$.reduce((j,oe)=>(j+=3+t.byteLength(O.toString())+2+t.byteLength(oe.toString()),j),0):N+=3+t.byteLength(O.toString())+2+t.byteLength(z[O].toString()),N},0);break}default:return X.destroy(new Error(`Invalid property ${q}: ${z}`)),!1}return k}if(re)for(const q in re){let z=0,C=0;const k=re[q];if(k!==void 0){if(Array.isArray(k))for(let N=0;Nq;){const C=V.shift();if(C&&re[C])delete re[C],z=de(X,re);else return!1}return z}function ie(X,re,ee){switch(e.propertiesTypes[re]){case"byte":{X.write(t.from([e.properties[re]])),X.write(t.from([+ee]));break}case"int8":{X.write(t.from([e.properties[re]])),X.write(t.from([ee]));break}case"binary":{X.write(t.from([e.properties[re]])),J(X,ee);break}case"int16":{X.write(t.from([e.properties[re]])),h(X,ee);break}case"int32":{X.write(t.from([e.properties[re]])),fe(X,ee);break}case"var":{X.write(t.from([e.properties[re]])),M(X,ee);break}case"string":{X.write(t.from([e.properties[re]])),D(X,ee);break}case"pair":{Object.getOwnPropertyNames(ee).forEach(V=>{const q=ee[V];Array.isArray(q)?q.forEach(z=>{X.write(t.from([e.properties[re]])),Q(X,V.toString(),z.toString())}):(X.write(t.from([e.properties[re]])),Q(X,V.toString(),q.toString()))});break}default:return X.destroy(new Error(`Invalid property ${re} value: ${ee}`)),!1}}function G(X,re,ee){M(X,ee);for(const F in re)if(Object.prototype.hasOwnProperty.call(re,F)&&re[F]!=null){const V=re[F];if(Array.isArray(V))for(let q=0;q{console.info("MQTT connection successful.")}),_r.on("disconnect",()=>{console.info("MQTT disconnected")}),_r.on("error",e=>{console.error("MQTT connection failed: ",e)})}catch(e){console.error("MQTT connect error: ",e)}async function TR(e){await KE(),_r?_r.on("message",e):console.error("MqttRegister: MQTT client not available")}async function zi(e){ru.topic=e;const{topic:t,qos:r}=ru;await KE(),_r.subscribe(t,{qos:r},n=>{if(n){console.error("MQTT Subscription error: "+n);return}})}function Do(e){ru.topic=e;const{topic:t}=ru;_r.unsubscribe(t,r=>{if(r){console.error("MQTT Unsubscribe from "+e+" failed: "+r);return}})}async function nu(e,t){let n=_r.connected,i=0;for(;!n&&i<10;)console.warn("MQTT not connected. Waiting 0.1 seconds"),await zE(100),n=_r.connected,i+=1;if(i<10)try{_r.publish(e,t,{qos:0},o=>{o&&console.warn("MQTT publish error: ",o),console.info("MQTT publish: Message sent: ["+e+"]("+t+")")})}catch(o){console.warn("MQTT publish: caught error: "+o)}else console.error("MQTT publish: Lost connection to MQTT server. Please reload the page")}function lg(){return qE.clientId}const qb=20;async function KE(){let e=_r.connected,t=0;for(;!e&&t{tsetTimeout(t,e))}let IR=class{id;name="Ladepunkt";icon="Ladepunkt";type="";ev=0;template=0;connectedPhases=0;phase_1=0;autoPhaseSwitchHw=!1;controlPilotInterruptionHw=!1;isEnabled=!0;isPluggedIn=!1;isCharging=!1;_isLocked=!1;_connectedVehicle=0;chargeTemplate=null;chargeTemplateId=0;evTemplate=0;currentPlan="";averageConsumption=0;vehicleName="";rangeCharged=0;rangeUnit="";counter=0;dailyYield=0;energyPv=0;energyBat=0;pvPercentage=0;faultState=0;faultStr="";phasesInUse=0;power=0;chargedSincePlugged=0;stateStr="";current=0;currents=[0,0,0];phasesToUse=0;isSocConfigured=!0;isSocManual=!1;waitingForSoc=!1;color="white";constructor(t){this.id=t}get isLocked(){return this._isLocked}set isLocked(t){this._isLocked=t,zo("cpLock",t,this.id)}updateIsLocked(t){this._isLocked=t}get connectedVehicle(){return this._connectedVehicle}set connectedVehicle(t){this._connectedVehicle=t,zo("cpVehicle",t,this.id)}updateConnectedVehicle(t){this._connectedVehicle=t}get soc(){return Tt[this.connectedVehicle]?Tt[this.connectedVehicle].soc:0}set soc(t){Tt[this.connectedVehicle]&&(Tt[this.connectedVehicle].soc=t)}get chargeMode(){return this.chargeTemplate?.chargemode.selected??"stop"}set chargeMode(t){console.log("set mode"),this.chargeTemplate&&(console.log("active"),this.chargeTemplate.chargemode.selected=t,dt(this.id))}get hasPriority(){return this.chargeTemplate?.prio??!1}set hasPriority(t){this.chargeTemplate.prio=t,dt(this.id)}get timedCharging(){return this.chargeTemplate?this.chargeTemplate.time_charging.active:!1}set timedCharging(t){this.chargeTemplate.time_charging.active=t,dt(this.id)}get instantTargetCurrent(){return this.chargeTemplate?.chargemode.instant_charging.current??0}set instantTargetCurrent(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.instant_charging.current=t,dt(this.id))}get instantChargeLimitMode(){return this.chargeTemplate?.chargemode.instant_charging.limit.selected??"none"}set instantChargeLimitMode(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.instant_charging.limit.selected=t,dt(this.id))}get instantTargetSoc(){return this.chargeTemplate?.chargemode.instant_charging.limit.soc??0}set instantTargetSoc(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.instant_charging.limit.soc=t,dt(this.id))}get instantMaxEnergy(){return this.chargeTemplate?.chargemode.instant_charging.limit.amount??0}set instantMaxEnergy(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.instant_charging.limit.amount=t,dt(this.id))}get instantTargetPhases(){return this.chargeTemplate?.chargemode.instant_charging.phases_to_use??0}set instantTargetPhases(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.instant_charging.phases_to_use=t,dt(this.id))}get pvMinCurrent(){return this.chargeTemplate?.chargemode.pv_charging.min_current??0}set pvMinCurrent(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.min_current=t,dt(this.id))}get pvMinSoc(){return this.chargeTemplate?.chargemode.pv_charging.min_soc??0}set pvMinSoc(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.min_soc=t,dt(this.id))}get pvMinSocCurrent(){return this.chargeTemplate?.chargemode.pv_charging.min_soc_current??0}set pvMinSocCurrent(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.min_soc_current=t,dt(this.id))}set pvMinSocPhases(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.phases_to_use_min_soc=t,dt(this.id))}get pvMinSocPhases(){return this.chargeTemplate?.chargemode.pv_charging.phases_to_use_min_soc??0}get pvChargeLimitMode(){return this.chargeTemplate?.chargemode.pv_charging.limit.selected??"none"}set pvChargeLimitMode(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.limit.selected=t,dt(this.id))}get pvTargetSoc(){return this.chargeTemplate?.chargemode.pv_charging.limit.soc??0}set pvTargetSoc(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.limit.soc=t,dt(this.id))}get pvMaxEnergy(){return this.chargeTemplate?.chargemode.pv_charging.limit.amount??0}set pvMaxEnergy(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.limit.amount=t,dt(this.id))}get pvTargetPhases(){return this.chargeTemplate?.chargemode.pv_charging.phases_to_use??0}set pvTargetPhases(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.phases_to_use=t,dt(this.id))}get ecoMinCurrent(){return this.chargeTemplate?.chargemode.eco_charging.current??0}set ecoMinCurrent(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.eco_charging.current=t,dt(this.id))}get ecoTargetPhases(){return this.chargeTemplate?.chargemode.eco_charging.phases_to_use??0}set ecoTargetPhases(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.eco_charging.phases_to_use=t,dt(this.id))}get ecoChargeLimitMode(){return this.chargeTemplate?.chargemode.eco_charging.limit.selected??"none"}set ecoChargeLimitMode(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.eco_charging.limit.selected=t,dt(this.id))}get ecoTargetSoc(){return this.chargeTemplate?.chargemode.eco_charging.limit.soc??0}set ecoTargetSoc(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.eco_charging.limit.soc=t,dt(this.id))}get ecoMaxEnergy(){return this.chargeTemplate?.chargemode.eco_charging.limit.amount??0}set ecoMaxEnergy(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.eco_charging.limit.amount=t,dt(this.id))}get etMaxPrice(){return(this.chargeTemplate?.chargemode.eco_charging.max_price??0)*1e5}set etMaxPrice(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.eco_charging.max_price=Math.ceil(t*1e3)/1e8,dt(this.id))}get etActive(){return this.chargeTemplate&&this.chargeTemplate.chargemode.selected=="eco_charging"}get realCurrent(){switch(this.phasesInUse){case 0:return 0;case 1:return this.currents[0];case 2:return(this.currents[0]+this.currents[1])/2;case 3:return(this.currents[0]+this.currents[1]+this.currents[2])/3;default:return 0}}toPowerItem(){return{name:this.name,power:this.power,energy:this.dailyYield,energyPv:this.energyPv,energyBat:this.energyBat,pvPercentage:this.pvPercentage,color:this.color,icon:this.icon}}};class CR{id;name="";_chargeTemplateId=0;_evTemplateId=0;tags=[];config={};soc=0;range=0;_etActive=!1;_etMaxPrice=20;constructor(t){this.id=t}get chargeTemplateId(){return this._chargeTemplateId}set chargeTemplateId(t){this._chargeTemplateId=t,zo("vhChargeTemplateId",t,this.id)}updateChargeTemplateId(t){this._chargeTemplateId=t}get evTemplateId(){return this._evTemplateId}set evTemplateId(t){this._evTemplateId=t,zo("vhEvTemplateId",t,this.id)}updateEvTemplateId(t){this._evTemplateId=t}get chargepoint(){for(const t of Object.values(Ve))if(t.connectedVehicle==this.id)return t}}var To=(e=>(e.instant_charging="instant_charging",e.pv_charging="pv_charging",e.scheduled_charging="scheduled_charging",e.eco_charging="eco_charging",e.stop="stop",e))(To||{});const Ve=mt({}),Tt=mt({}),kR=mt({}),OR=mt({});function MR(e){e in Ve||(Ve[e]=new IR(e),Ve[e].color="var(--color-cp"+(Object.values(Ve).length-1)+")")}function PR(){Object.keys(Ve).forEach(e=>{delete Ve[parseInt(e)]})}const YE={cpLock:"openWB/set/chargepoint/%/set/manual_lock",chargeMode:"openWB/set/vehicle/template/charge_template/%/chargemode/selected",cpPriority:"openWB/set/vehicle/template/charge_template/%/prio",cpTimedCharging:"openWB/set/vehicle/template/charge_template/%/time_charging/active",cpTimedPlanActive:"openWB/set/vehicle/template/charge_template/%/time_charging/plans/@/active",cpScheduledPlanActive:"openWB/set/vehicle/template/charge_template/%/chargemode/scheduled_charging/plans/@/active",pvBatteryPriority:"openWB/set/general/chargemode_config/bat/mode",cpVehicle:"openWB/set/chargepoint/%/config/ev",cpInstantChargeLimitMode:"openWB/set/vehicle/template/charge_template/%/chargemode/instant_charging/limit/selected",cpInstantTargetCurrent:"openWB/set/vehicle/template/charge_template/%/chargemode/instant_charging/current",cpInstantTargetSoc:"openWB/set/vehicle/template/charge_template/%/chargemode/instant_charging/limit/soc",cpInstantMaxEnergy:"openWB/set/vehicle/template/charge_template/%/chargemode/instant_charging/limit/amount",cpPvFeedInLimit:"openWB/set/vehicle/template/charge_template/%/chargemode/pv_charging/feed_in_limit",cpPvMinCurrent:"openWB/set/vehicle/template/charge_template/%/chargemode/pv_charging/min_current",cpPvMaxSoc:"openWB/set/vehicle/template/charge_template/%/chargemode/pv_charging/max_soc",cpPvMinSoc:"openWB/set/vehicle/template/charge_template/%/chargemode/pv_charging/min_soc",cpPvMinSocCurrent:"openWB/set/vehicle/template/charge_template/%/chargemode/pv_charging/min_soc_current",cpEtMaxPrice:"openWB/set/vehicle/template/charge_template/%/et/max_price",vhChargeTemplateId:"openWB/set/vehicle/%/charge_template",vhEvTemplateId:"openWB/set/vehicle/%/ev_template",shSetManual:"openWB/set/LegacySmartHome/config/set/Devices/%/mode",shSwitchOn:"openWB/set/LegacySmartHome/config/set/Devices/%/device_manual_control",socUpdate:"openWB/set/vehicle/%/get/force_soc_update",setSoc:"openWB/set/vehicle/%/soc_module/calculated_soc_state/manual_soc",priceCharging:"openWB/set/vehicle/template/charge_template/%/et/active",chargeTemplate:"openWB/set/chargepoint/%/set/charge_template"};function zo(e,t,r=0,n=void 0){if(isNaN(r)){console.warn("Invalid index");return}let i=YE[e];if(!i){console.warn("No topic for update type "+e);return}i=i.replace("%",String(r)),n!=null&&(i=i.replace("@",String(n))),typeof t==="number"?nu(i,JSON.stringify(+t)):nu(i,JSON.stringify(t))}function ji(e,t={}){console.log("send command "+e+" "+JSON.stringify(t)),nu(`openWB/set/command/${lg()}/todo`,JSON.stringify({command:e,data:t}))}function dt(e){nu(YE.chargeTemplate.replace("%",String(e)),JSON.stringify(Ve[e].chargeTemplate))}class RR{batterySoc=0;isBatteryConfigured=!0;chargeMode="0";_pvBatteryPriority="ev_mode";displayLiveGraph=!0;isEtEnabled=!0;etMaxPrice=0;etCurrentPrice=0;cpDailyExported=0;evuId=0;etProvider="";country="de";ipAddress="";systemTime=0;version="";versionDetails="";devBranch="";get pvBatteryPriority(){return this._pvBatteryPriority}set pvBatteryPriority(t){this._pvBatteryPriority=t,zo("pvBatteryPriority",t)}updatePvBatteryPriority(t){this._pvBatteryPriority=t}}const NR=[["EV","ev_mode"],["Speicher","bat_mode"],["MinSoc","min_soc_bat_mode"]],Kt=mt({evuIn:{name:"Netz",color:"var(--color-evu)",icon:""},pv:{name:"PV",color:"var(--color-pv",icon:""},batOut:{name:"Bat >",color:"var(--color-battery)",icon:""},evuOut:{name:"Export",color:"var(--color-export)",icon:""},charging:{name:"Laden",color:"var(--color-charging)",icon:""},devices:{name:"Geräte",color:"var(--color-devices)",icon:""},batIn:{name:"> Bat",color:"var(--color-battery)",icon:""},house:{name:"Haus",color:"var(--color-house)",icon:""},cp1:{name:"Ladepunkt",color:"var(--color-cp1)",icon:"Ladepunkt"},cp2:{name:"Ladepunkt",color:"var(--color-cp2)",icon:"Ladepunkt"},cp3:{name:"Ladepunkt",color:"var(--color-cp3)",icon:"Ladepunkt"},cp4:{name:"Ladepunkt",color:"var(--color-cp4)",icon:"Ladepunkt"},cp5:{name:"Ladepunkt",color:"var(--color-cp5)",icon:"Ladepunkt"},cp6:{name:"Ladepunkt",color:"var(--color-cp6)",icon:"Ladepunkt"},cp7:{name:"Ladepunkt",color:"var(--color-cp7)",icon:"Ladepunkt"},cp8:{name:"Ladepunkt",color:"var(--color-cp8)",icon:"Ladepunkt"},sh1:{name:"Gerät",color:"var(--color-sh1)",icon:"Gerät"},sh2:{name:"Gerät",color:"var(--color-sh2)",icon:"Gerät"},sh3:{name:"Gerät",color:"var(--color-sh3)",icon:"Gerät"},sh4:{name:"Gerät",color:"var(--color-sh4)",icon:"Gerät"},sh5:{name:"Gerät",color:"var(--color-sh5)",icon:"Gerät"},sh6:{name:"Gerät",color:"var(--color-sh6)",icon:"Gerät"},sh7:{name:"Gerät",color:"var(--color-sh7)",icon:"Gerät"},sh8:{name:"Gerät",color:"var(--color-sh8)",icon:"Gerät"},sh9:{name:"Gerät",color:"var(--color-sh9)",icon:"Gerät"}});class QE{_items={};constructor(){this.addItem("evuIn"),this.addItem("pv"),this.addItem("batOut"),this.addItem("evuOut"),this.addItem("charging"),this.addItem("devices"),this.addItem("batIn"),this.addItem("house")}get items(){return this._items}keys(){return Object.keys(this._items)}values(){return Object.values(this._items)}addItem(t){this._items[t]=kn(t)}setEnergy(t,r){this.keys().includes(t)||this.addItem(t),this._items[t].energy=r}setEnergyPv(t,r){this.keys().includes(t)||this.addItem(t),this._items[t].energyPv=r}setEnergyBat(t,r){this.keys().includes(t)||this.addItem(t),this._items[t].energyBat=r}setPvPercentage(t,r){this.keys().includes(t)||this.addItem(t),this._items[t].pvPercentage=r}calculateHouseEnergy(){this._items.house.energy=this._items.evuIn.energy+this._items.pv.energy+this._items.batOut.energy-this._items.evuOut.energy-this._items.batIn.energy-this._items.charging.energy-this._items.devices.energy}}let He=new QE;function ug(){He=new QE}const ot=mt({evuIn:kn("evuIn"),pv:kn("pv"),batOut:kn("batOut")}),Qe=mt({evuOut:kn("evuOut"),charging:kn("charging"),devices:kn("devices"),batIn:kn("batIn"),house:kn("house")}),ht=mt(new RR),iu=zt(!1);function kn(e){return{name:Kt[e]?Kt[e].name:"item",power:0,energy:0,energyPv:0,energyBat:0,pvPercentage:0,color:Kt[e]?Kt[e].color:"var(--color-charging)",icon:Kt[e]?Kt[e].icon:""}}const Mt=mt({active:!1,locked:!0,usePin:!1,code:"",timeout:60,localCpOnly:!1});function $o(){Mt.usePin&&Mt.locked?new hn("#numberpad").toggle():(Mt.locked=!1,setTimeout(()=>{Mt.locked=!0},Mt.timeout*1e3))}function LR(e){return e==Mt.code}const Gb=zt(new Date),BR={class:"scaled"},DR=Ye({__name:"DisplayButton",props:{icon:{},bgcolor:{},color:{}},emits:["click"],setup(e,{emit:t}){const r=e,n=t;function i(){n("click",!0)}return(o,a)=>(Se(),Re("div",{style:xt({"background-color":r.bgcolor?r.bgcolor:"var(--color-bg)",color:r.color?r.color:"var(--color-title)"}),class:"displaybutton rounded-pill",type:"button",onClick:i},[r.icon?(Se(),Re("span",{key:0,class:It(["fas me-2 scaled",r.icon])},null,2)):We("",!0),ye("span",BR,[kr(o.$slots,"default",{},void 0)])],4))}}),rt=(e,t)=>{const r=e.__vccOpts||e;for(const[n,i]of t)r[n]=i;return r},Dr=rt(DR,[["__scopeId","data-v-0f8aebee"]]);function Rl(e,t){return e==null||t==null?NaN:et?1:e>=t?0:NaN}function $R(e,t){return e==null||t==null?NaN:te?1:t>=e?0:NaN}function cg(e){let t,r,n;e.length!==2?(t=Rl,r=(s,l)=>Rl(e(s),l),n=(s,l)=>e(s)-l):(t=e===Rl||e===$R?e:UR,r=e,n=e);function i(s,l,u=0,c=s.length){if(u>>1;r(s[f],l)<0?u=f+1:c=f}while(u>>1;r(s[f],l)<=0?u=f+1:c=f}while(uu&&n(s[f-1],l)>-n(s[f],l)?f-1:f}return{left:i,center:a,right:o}}function UR(){return 0}function FR(e){return e===null?NaN:+e}const jR=cg(Rl),WR=jR.right;cg(FR).center;function Zi(e,t){let r,n;if(t===void 0)for(const i of e)i!=null&&(r===void 0?i>=i&&(r=n=i):(r>i&&(r=i),n=o&&(r=n=o):(r>o&&(r=o),n=GR?10:o>=KR?5:o>=zR?2:1;let s,l,u;return i<0?(u=Math.pow(10,-i)/a,s=Math.round(e*u),l=Math.round(t*u),s/ut&&--l,u=-u):(u=Math.pow(10,i)*a,s=Math.round(e/u),l=Math.round(t/u),s*ut&&--l),l0))return[];if(e===t)return[e];const n=t=i))return[];const s=o-i+1,l=new Array(s);if(n)if(a<0)for(let u=0;u=n)&&(r=n);else{let n=-1;for(let i of e)(i=t(i,++n,e))!=null&&(r=i)&&(r=i)}return r}function JR(e,t,r){e=+e,t=+t,r=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((t-e)/r))|0,o=new Array(i);++n+e(t)}function rN(e,t){return t=Math.max(0,e.bandwidth()-t*2)/2,e.round()&&(t=Math.round(t)),r=>+e(r)+t}function nN(){return!this.__axis}function Xu(e,t){var r=[],n=null,i=null,o=6,a=6,s=3,l=typeof window<"u"&&window.devicePixelRatio>1?0:.5,u=e===Nl||e===Ms?-1:1,c=e===Ms||e===Ll?"x":"y",f=e===Nl||e===Zd?ZR:eN;function h(d){var g=n??(t.ticks?t.ticks.apply(t,r):t.domain()),b=i??(t.tickFormat?t.tickFormat.apply(t,r):XR),y=Math.max(o,0)+s,_=t.range(),m=+_[0]+l,w=+_[_.length-1]+l,S=(t.bandwidth?rN:tN)(t.copy(),l),E=d.selection?d.selection():d,T=E.selectAll(".domain").data([null]),I=E.selectAll(".tick").data(g,t).order(),R=I.exit(),K=I.enter().append("g").attr("class","tick"),P=I.select("line"),U=I.select("text");T=T.merge(T.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),I=I.merge(K),P=P.merge(K.append("line").attr("stroke","currentColor").attr(c+"2",u*o)),U=U.merge(K.append("text").attr("fill","currentColor").attr(c,u*y).attr("dy",e===Nl?"0em":e===Zd?"0.71em":"0.32em")),d!==E&&(T=T.transition(d),I=I.transition(d),P=P.transition(d),U=U.transition(d),R=R.transition(d).attr("opacity",Yb).attr("transform",function(M){return isFinite(M=S(M))?f(M+l):this.getAttribute("transform")}),K.attr("opacity",Yb).attr("transform",function(M){var D=this.parentNode.__axis;return f((D&&isFinite(D=D(M))?D:S(M))+l)})),R.remove(),T.attr("d",e===Ms||e===Ll?a?"M"+u*a+","+m+"H"+l+"V"+w+"H"+u*a:"M"+l+","+m+"V"+w:a?"M"+m+","+u*a+"V"+l+"H"+w+"V"+u*a:"M"+m+","+l+"H"+w),I.attr("opacity",1).attr("transform",function(M){return f(S(M)+l)}),P.attr(c+"2",u*o),U.attr(c,u*y).text(b),E.filter(nN).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",e===Ll?"start":e===Ms?"end":"middle"),E.each(function(){this.__axis=S})}return h.scale=function(d){return arguments.length?(t=d,h):t},h.ticks=function(){return r=Array.from(arguments),h},h.tickArguments=function(d){return arguments.length?(r=d==null?[]:Array.from(d),h):r.slice()},h.tickValues=function(d){return arguments.length?(n=d==null?null:Array.from(d),h):n&&n.slice()},h.tickFormat=function(d){return arguments.length?(i=d,h):i},h.tickSize=function(d){return arguments.length?(o=a=+d,h):o},h.tickSizeInner=function(d){return arguments.length?(o=+d,h):o},h.tickSizeOuter=function(d){return arguments.length?(a=+d,h):a},h.tickPadding=function(d){return arguments.length?(s=+d,h):s},h.offset=function(d){return arguments.length?(l=+d,h):l},h}function iN(e){return Xu(Nl,e)}function oN(e){return Xu(Ll,e)}function Bl(e){return Xu(Zd,e)}function Zu(e){return Xu(Ms,e)}var sN={value:()=>{}};function JE(){for(var e=0,t=arguments.length,r={},n;e=0&&(n=r.slice(i+1),r=r.slice(0,i)),r&&!t.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:n}})}Dl.prototype=JE.prototype={constructor:Dl,on:function(e,t){var r=this._,n=aN(e+"",r),i,o=-1,a=n.length;if(arguments.length<2){for(;++o0)for(var r=new Array(i),n=0,i,o;n=0&&(t=e.slice(0,r))!=="xmlns"&&(e=e.slice(r+1)),Jb.hasOwnProperty(t)?{space:Jb[t],local:e}:e}function uN(e){return function(){var t=this.ownerDocument,r=this.namespaceURI;return r===ep&&t.documentElement.namespaceURI===ep?t.createElement(e):t.createElementNS(r,e)}}function cN(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function XE(e){var t=ec(e);return(t.local?cN:uN)(t)}function fN(){}function fg(e){return e==null?fN:function(){return this.querySelector(e)}}function hN(e){typeof e!="function"&&(e=fg(e));for(var t=this._groups,r=t.length,n=new Array(r),i=0;i=w&&(w=m+1);!(E=y[w])&&++w=0;)(a=n[i])&&(o&&a.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(a,o),o=a);return this}function DN(e){e||(e=$N);function t(f,h){return f&&h?e(f.__data__,h.__data__):!f-!h}for(var r=this._groups,n=r.length,i=new Array(n),o=0;ot?1:e>=t?0:NaN}function UN(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function FN(){return Array.from(this)}function jN(){for(var e=this._groups,t=0,r=e.length;t1?this.each((t==null?XN:typeof t=="function"?e2:ZN)(e,t,r??"")):Yo(this.node(),e)}function Yo(e,t){return e.style.getPropertyValue(t)||n1(e).getComputedStyle(e,null).getPropertyValue(t)}function r2(e){return function(){delete this[e]}}function n2(e,t){return function(){this[e]=t}}function i2(e,t){return function(){var r=t.apply(this,arguments);r==null?delete this[e]:this[e]=r}}function o2(e,t){return arguments.length>1?this.each((t==null?r2:typeof t=="function"?i2:n2)(e,t)):this.node()[e]}function i1(e){return e.trim().split(/^|\s+/)}function hg(e){return e.classList||new o1(e)}function o1(e){this._node=e,this._names=i1(e.getAttribute("class")||"")}o1.prototype={add:function(e){var t=this._names.indexOf(e);t<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function s1(e,t){for(var r=hg(e),n=-1,i=t.length;++n=0&&(r=t.slice(n+1),t=t.slice(0,n)),{type:t,name:r}})}function R2(e){return function(){var t=this.__on;if(t){for(var r=0,n=-1,i=t.length,o;r>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):r===8?Ka(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):r===4?Ka(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=W2.exec(e))?new fr(t[1],t[2],t[3],1):(t=V2.exec(e))?new fr(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=H2.exec(e))?Ka(t[1],t[2],t[3],t[4]):(t=q2.exec(e))?Ka(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=G2.exec(e))?i_(t[1],t[2]/100,t[3]/100,1):(t=K2.exec(e))?i_(t[1],t[2]/100,t[3]/100,t[4]):Xb.hasOwnProperty(e)?t_(Xb[e]):e==="transparent"?new fr(NaN,NaN,NaN,0):null}function t_(e){return new fr(e>>16&255,e>>8&255,e&255,1)}function Ka(e,t,r,n){return n<=0&&(e=t=r=NaN),new fr(e,t,r,n)}function Q2(e){return e instanceof xa||(e=eo(e)),e?(e=e.rgb(),new fr(e.r,e.g,e.b,e.opacity)):new fr}function tp(e,t,r,n){return arguments.length===1?Q2(e):new fr(e,t,r,n??1)}function fr(e,t,r,n){this.r=+e,this.g=+t,this.b=+r,this.opacity=+n}dg(fr,tp,c1(xa,{brighter(e){return e=e==null?au:Math.pow(au,e),new fr(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?na:Math.pow(na,e),new fr(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new fr(Yi(this.r),Yi(this.g),Yi(this.b),lu(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:r_,formatHex:r_,formatHex8:J2,formatRgb:n_,toString:n_}));function r_(){return`#${Wi(this.r)}${Wi(this.g)}${Wi(this.b)}`}function J2(){return`#${Wi(this.r)}${Wi(this.g)}${Wi(this.b)}${Wi((isNaN(this.opacity)?1:this.opacity)*255)}`}function n_(){const e=lu(this.opacity);return`${e===1?"rgb(":"rgba("}${Yi(this.r)}, ${Yi(this.g)}, ${Yi(this.b)}${e===1?")":`, ${e})`}`}function lu(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Yi(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Wi(e){return e=Yi(e),(e<16?"0":"")+e.toString(16)}function i_(e,t,r,n){return n<=0?e=t=r=NaN:r<=0||r>=1?e=t=NaN:t<=0&&(e=NaN),new Ur(e,t,r,n)}function f1(e){if(e instanceof Ur)return new Ur(e.h,e.s,e.l,e.opacity);if(e instanceof xa||(e=eo(e)),!e)return new Ur;if(e instanceof Ur)return e;e=e.rgb();var t=e.r/255,r=e.g/255,n=e.b/255,i=Math.min(t,r,n),o=Math.max(t,r,n),a=NaN,s=o-i,l=(o+i)/2;return s?(t===o?a=(r-n)/s+(r0&&l<1?0:a,new Ur(a,s,l,e.opacity)}function X2(e,t,r,n){return arguments.length===1?f1(e):new Ur(e,t,r,n??1)}function Ur(e,t,r,n){this.h=+e,this.s=+t,this.l=+r,this.opacity=+n}dg(Ur,X2,c1(xa,{brighter(e){return e=e==null?au:Math.pow(au,e),new Ur(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?na:Math.pow(na,e),new Ur(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*t,i=2*r-n;return new fr(Sf(e>=240?e-240:e+120,i,n),Sf(e,i,n),Sf(e<120?e+240:e-120,i,n),this.opacity)},clamp(){return new Ur(o_(this.h),za(this.s),za(this.l),lu(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=lu(this.opacity);return`${e===1?"hsl(":"hsla("}${o_(this.h)}, ${za(this.s)*100}%, ${za(this.l)*100}%${e===1?")":`, ${e})`}`}}));function o_(e){return e=(e||0)%360,e<0?e+360:e}function za(e){return Math.max(0,Math.min(1,e||0))}function Sf(e,t,r){return(e<60?t+(r-t)*e/60:e<180?r:e<240?t+(r-t)*(240-e)/60:t)*255}const pg=e=>()=>e;function Z2(e,t){return function(r){return e+r*t}}function eL(e,t,r){return e=Math.pow(e,r),t=Math.pow(t,r)-e,r=1/r,function(n){return Math.pow(e+n*t,r)}}function tL(e){return(e=+e)==1?h1:function(t,r){return r-t?eL(t,r,e):pg(isNaN(t)?r:t)}}function h1(e,t){var r=t-e;return r?Z2(e,r):pg(isNaN(e)?t:e)}const uu=(function e(t){var r=tL(t);function n(i,o){var a=r((i=tp(i)).r,(o=tp(o)).r),s=r(i.g,o.g),l=r(i.b,o.b),u=h1(i.opacity,o.opacity);return function(c){return i.r=a(c),i.g=s(c),i.b=l(c),i.opacity=u(c),i+""}}return n.gamma=e,n})(1);function rL(e,t){t||(t=[]);var r=e?Math.min(t.length,e.length):0,n=t.slice(),i;return function(o){for(i=0;ir&&(o=t.slice(r,o),s[a]?s[a]+=o:s[++a]=o),(n=n[0])===(i=i[0])?s[a]?s[a]+=i:s[++a]=i:(s[++a]=null,l.push({i:a,x:$r(n,i)})),r=xf.lastIndex;return r180?c+=360:c-u>180&&(u+=360),h.push({i:f.push(i(f)+"rotate(",null,n)-2,x:$r(u,c)})):c&&f.push(i(f)+"rotate("+c+n)}function s(u,c,f,h){u!==c?h.push({i:f.push(i(f)+"skewX(",null,n)-2,x:$r(u,c)}):c&&f.push(i(f)+"skewX("+c+n)}function l(u,c,f,h,d,g){if(u!==f||c!==h){var b=d.push(i(d)+"scale(",null,",",null,")");g.push({i:b-4,x:$r(u,f)},{i:b-2,x:$r(c,h)})}else(f!==1||h!==1)&&d.push(i(d)+"scale("+f+","+h+")")}return function(u,c){var f=[],h=[];return u=e(u),c=e(c),o(u.translateX,u.translateY,c.translateX,c.translateY,f,h),a(u.rotate,c.rotate,f,h),s(u.skewX,c.skewX,f,h),l(u.scaleX,u.scaleY,c.scaleX,c.scaleY,f,h),u=c=null,function(d){for(var g=-1,b=h.length,y;++g=0&&e._call.call(void 0,t),e=e._next;--Qo}function a_(){to=(fu=oa.now())+tc,Qo=Ps=0;try{gL()}finally{Qo=0,yL(),to=0}}function mL(){var e=oa.now(),t=e-fu;t>m1&&(tc-=t,fu=e)}function yL(){for(var e,t=cu,r,n=1/0;t;)t._call?(n>t._time&&(n=t._time),e=t,t=t._next):(r=t._next,t._next=null,t=e?e._next=r:cu=r);Rs=e,ip(n)}function ip(e){if(!Qo){Ps&&(Ps=clearTimeout(Ps));var t=e-to;t>24?(e<1/0&&(Ps=setTimeout(a_,e-oa.now()-tc)),vs&&(vs=clearInterval(vs))):(vs||(fu=oa.now(),vs=setInterval(mL,m1)),Qo=1,y1(a_))}}function l_(e,t,r){var n=new hu;return t=t==null?0:+t,n.restart(i=>{n.stop(),e(i+t)},t,r),n}var bL=JE("start","end","cancel","interrupt"),_L=[],_1=0,u_=1,op=2,$l=3,c_=4,sp=5,Ul=6;function rc(e,t,r,n,i,o){var a=e.__transition;if(!a)e.__transition={};else if(r in a)return;vL(e,r,{name:t,index:n,group:i,on:bL,tween:_L,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:_1})}function yg(e,t){var r=zr(e,t);if(r.state>_1)throw new Error("too late; already scheduled");return r}function pn(e,t){var r=zr(e,t);if(r.state>$l)throw new Error("too late; already running");return r}function zr(e,t){var r=e.__transition;if(!r||!(r=r[t]))throw new Error("transition not found");return r}function vL(e,t,r){var n=e.__transition,i;n[t]=r,r.timer=b1(o,0,r.time);function o(u){r.state=u_,r.timer.restart(a,r.delay,r.time),r.delay<=u&&a(u-r.delay)}function a(u){var c,f,h,d;if(r.state!==u_)return l();for(c in n)if(d=n[c],d.name===r.name){if(d.state===$l)return l_(a);d.state===c_?(d.state=Ul,d.timer.stop(),d.on.call("interrupt",e,e.__data__,d.index,d.group),delete n[c]):+cop&&n.state=0&&(t=t.slice(0,r)),!t||t==="start"})}function JL(e,t,r){var n,i,o=QL(t)?yg:pn;return function(){var a=o(this,e),s=a.on;s!==n&&(i=(n=s).copy()).on(t,r),a.on=i}}function XL(e,t){var r=this._id;return arguments.length<2?zr(this.node(),r).on.on(e):this.each(JL(r,e,t))}function ZL(e){return function(){var t=this.parentNode;for(var r in this.__transition)if(+r!==e)return;t&&t.removeChild(this)}}function eB(){return this.on("end.remove",ZL(this._id))}function tB(e){var t=this._name,r=this._id;typeof e!="function"&&(e=fg(e));for(var n=this._groups,i=n.length,o=new Array(i),a=0;a+e;function EB(e){return((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2}var SB={time:null,delay:0,duration:250,ease:EB};function xB(e,t){for(var r;!(r=e.__transition)||!(r=r[t]);)if(!(e=e.parentNode))throw new Error(`transition ${t} not found`);return r}function AB(e){var t,r;e instanceof Hn?(t=e._id,e=e._name):(t=E1(),(r=SB).time=mg(),e=e==null?null:e+"");for(var n=this._groups,i=n.length,o=0;o=0))throw new Error(`invalid digits: ${e}`);if(t>15)return S1;const r=10**t;return function(n){this._+=n[0];for(let i=1,o=n.length;iPi)if(!(Math.abs(f*l-u*c)>Pi)||!o)this._append`L${this._x1=t},${this._y1=r}`;else{let d=n-a,g=i-s,b=l*l+u*u,y=d*d+g*g,_=Math.sqrt(b),m=Math.sqrt(h),w=o*Math.tan((ap-Math.acos((b+h-y)/(2*_*m)))/2),S=w/m,E=w/_;Math.abs(S-1)>Pi&&this._append`L${t+S*c},${r+S*f}`,this._append`A${o},${o},0,0,${+(f*d>c*g)},${this._x1=t+E*l},${this._y1=r+E*u}`}}arc(t,r,n,i,o,a){if(t=+t,r=+r,n=+n,a=!!a,n<0)throw new Error(`negative radius: ${n}`);let s=n*Math.cos(i),l=n*Math.sin(i),u=t+s,c=r+l,f=1^a,h=a?i-o:o-i;this._x1===null?this._append`M${u},${c}`:(Math.abs(this._x1-u)>Pi||Math.abs(this._y1-c)>Pi)&&this._append`L${u},${c}`,n&&(h<0&&(h=h%lp+lp),h>TB?this._append`A${n},${n},0,1,${f},${t-s},${r-l}A${n},${n},0,1,${f},${this._x1=u},${this._y1=c}`:h>Pi&&this._append`A${n},${n},0,${+(h>=ap)},${f},${this._x1=t+n*Math.cos(o)},${this._y1=r+n*Math.sin(o)}`)}rect(t,r,n,i){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}}function kB(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function du(e,t){if(!isFinite(e)||e===0)return null;var r=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"),n=e.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+e.slice(r+1)]}function Jo(e){return e=du(Math.abs(e)),e?e[1]:NaN}function OB(e,t){return function(r,n){for(var i=r.length,o=[],a=0,s=e[0],l=0;i>0&&s>0&&(l+s+1>n&&(s=Math.max(1,n-l)),o.push(r.substring(i-=s,i+s)),!((l+=s+1)>n));)s=e[a=(a+1)%e.length];return o.reverse().join(t)}}function MB(e){return function(t){return t.replace(/[0-9]/g,function(r){return e[+r]})}}var PB=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function pu(e){if(!(t=PB.exec(e)))throw new Error("invalid format: "+e);var t;return new _g({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}pu.prototype=_g.prototype;function _g(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}_g.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function RB(e){e:for(var t=e.length,r=1,n=-1,i;r0&&(n=0);break}return n>0?e.slice(0,n)+e.slice(i+1):e}var gu;function NB(e,t){var r=du(e,t);if(!r)return gu=void 0,e.toPrecision(t);var n=r[0],i=r[1],o=i-(gu=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,a=n.length;return o===a?n:o>a?n+new Array(o-a+1).join("0"):o>0?n.slice(0,o)+"."+n.slice(o):"0."+new Array(1-o).join("0")+du(e,Math.max(0,t+o-1))[0]}function f_(e,t){var r=du(e,t);if(!r)return e+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}const h_={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:kB,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>f_(e*100,t),r:f_,s:NB,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function d_(e){return e}var p_=Array.prototype.map,g_=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function LB(e){var t=e.grouping===void 0||e.thousands===void 0?d_:OB(p_.call(e.grouping,Number),e.thousands+""),r=e.currency===void 0?"":e.currency[0]+"",n=e.currency===void 0?"":e.currency[1]+"",i=e.decimal===void 0?".":e.decimal+"",o=e.numerals===void 0?d_:MB(p_.call(e.numerals,String)),a=e.percent===void 0?"%":e.percent+"",s=e.minus===void 0?"−":e.minus+"",l=e.nan===void 0?"NaN":e.nan+"";function u(f,h){f=pu(f);var d=f.fill,g=f.align,b=f.sign,y=f.symbol,_=f.zero,m=f.width,w=f.comma,S=f.precision,E=f.trim,T=f.type;T==="n"?(w=!0,T="g"):h_[T]||(S===void 0&&(S=12),E=!0,T="g"),(_||d==="0"&&g==="=")&&(_=!0,d="0",g="=");var I=(h&&h.prefix!==void 0?h.prefix:"")+(y==="$"?r:y==="#"&&/[boxX]/.test(T)?"0"+T.toLowerCase():""),R=(y==="$"?n:/[%p]/.test(T)?a:"")+(h&&h.suffix!==void 0?h.suffix:""),K=h_[T],P=/[defgprs%]/.test(T);S=S===void 0?6:/[gprs]/.test(T)?Math.max(1,Math.min(21,S)):Math.max(0,Math.min(20,S));function U(M){var D=I,Q=R,le,me,fe;if(T==="c")Q=K(M)+Q,M="";else{M=+M;var J=M<0||1/M<0;if(M=isNaN(M)?l:K(Math.abs(M),S),E&&(M=RB(M)),J&&+M==0&&b!=="+"&&(J=!1),D=(J?b==="("?b:s:b==="-"||b==="("?"":b)+D,Q=(T==="s"&&!isNaN(M)&&gu!==void 0?g_[8+gu/3]:"")+Q+(J&&b==="("?")":""),P){for(le=-1,me=M.length;++lefe||fe>57){Q=(fe===46?i+M.slice(le+1):M.slice(le))+Q,M=M.slice(0,le);break}}}w&&!_&&(M=t(M,1/0));var de=D.length+M.length+Q.length,B=de>1)+D+M+Q+B.slice(de);break;default:M=B+D+M+Q;break}return o(M)}return U.toString=function(){return f+""},U}function c(f,h){var d=Math.max(-8,Math.min(8,Math.floor(Jo(h)/3)))*3,g=Math.pow(10,-d),b=u((f=pu(f),f.type="f",f),{suffix:g_[8+d/3]});return function(y){return b(g*y)}}return{format:u,formatPrefix:c}}var Qa,x1,A1;BB({thousands:",",grouping:[3],currency:["$",""]});function BB(e){return Qa=LB(e),x1=Qa.format,A1=Qa.formatPrefix,Qa}function DB(e){return Math.max(0,-Jo(Math.abs(e)))}function $B(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Jo(t)/3)))*3-Jo(Math.abs(e)))}function UB(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Jo(t)-Jo(e))+1}function nc(e,t){switch(arguments.length){case 0:break;case 1:this.range(e);break;default:this.range(t).domain(e);break}return this}const m_=Symbol("implicit");function T1(){var e=new Kb,t=[],r=[],n=m_;function i(o){let a=e.get(o);if(a===void 0){if(n!==m_)return n;e.set(o,a=t.push(o)-1)}return r[a%r.length]}return i.domain=function(o){if(!arguments.length)return t.slice();t=[],e=new Kb;for(const a of o)e.has(a)||e.set(a,t.push(a)-1);return i},i.range=function(o){return arguments.length?(r=Array.from(o),i):r.slice()},i.unknown=function(o){return arguments.length?(n=o,i):n},i.copy=function(){return T1(t,r).unknown(n)},nc.apply(i,arguments),i}function mu(){var e=T1().unknown(void 0),t=e.domain,r=e.range,n=0,i=1,o,a,s=!1,l=0,u=0,c=.5;delete e.unknown;function f(){var h=t().length,d=it&&(r=e,e=t,t=r),function(n){return Math.max(e,Math.min(t,n))}}function VB(e,t,r){var n=e[0],i=e[1],o=t[0],a=t[1];return i2?HB:VB,l=u=null,f}function f(h){return h==null||isNaN(h=+h)?o:(l||(l=s(e.map(n),t,r)))(n(a(h)))}return f.invert=function(h){return a(i((u||(u=s(t,e.map(n),$r)))(h)))},f.domain=function(h){return arguments.length?(e=Array.from(h,jB),c()):e.slice()},f.range=function(h){return arguments.length?(t=Array.from(h),c()):t.slice()},f.rangeRound=function(h){return t=Array.from(h),r=uL,c()},f.clamp=function(h){return arguments.length?(a=h?!0:Co,c()):a!==Co},f.interpolate=function(h){return arguments.length?(r=h,c()):r},f.unknown=function(h){return arguments.length?(o=h,f):o},function(h,d){return n=h,i=d,c()}}function C1(){return qB()(Co,Co)}function GB(e,t,r,n){var i=Xd(e,t,r),o;switch(n=pu(n??",f"),n.type){case"s":{var a=Math.max(Math.abs(e),Math.abs(t));return n.precision==null&&!isNaN(o=$B(i,a))&&(n.precision=o),A1(n,a)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(o=UB(i,Math.max(Math.abs(e),Math.abs(t))))&&(n.precision=o-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(o=DB(i))&&(n.precision=o-(n.type==="%")*2);break}}return x1(n)}function KB(e){var t=e.domain;return e.ticks=function(r){var n=t();return YR(n[0],n[n.length-1],r??10)},e.tickFormat=function(r,n){var i=t();return GB(i[0],i[i.length-1],r??10,n)},e.nice=function(r){r==null&&(r=10);var n=t(),i=0,o=n.length-1,a=n[i],s=n[o],l,u,c=10;for(s0;){if(u=Jd(a,s,r),u===l)return n[i]=a,n[o]=s,t(n);if(u>0)a=Math.floor(a/u)*u,s=Math.ceil(s/u)*u;else if(u<0)a=Math.ceil(a*u)/u,s=Math.floor(s*u)/u;else break;l=u}return e},e}function dn(){var e=C1();return e.copy=function(){return I1(e,dn())},nc.apply(e,arguments),KB(e)}function zB(e,t){e=e.slice();var r=0,n=e.length-1,i=e[r],o=e[n],a;return o(e(o=new Date(+o)),o),i.ceil=o=>(e(o=new Date(o-1)),t(o,1),e(o),o),i.round=o=>{const a=i(o),s=i.ceil(o);return o-a(t(o=new Date(+o),a==null?1:Math.floor(a)),o),i.range=(o,a,s)=>{const l=[];if(o=i.ceil(o),s=s==null?1:Math.floor(s),!(o0))return l;let u;do l.push(u=new Date(+o)),t(o,s),e(o);while(uPt(a=>{if(a>=a)for(;e(a),!o(a);)a.setTime(a-1)},(a,s)=>{if(a>=a)if(s<0)for(;++s<=0;)for(;t(a,-1),!o(a););else for(;--s>=0;)for(;t(a,1),!o(a););}),r&&(i.count=(o,a)=>(Af.setTime(+o),Tf.setTime(+a),e(Af),e(Tf),Math.floor(r(Af,Tf))),i.every=o=>(o=Math.floor(o),!isFinite(o)||!(o>0)?null:o>1?i.filter(n?a=>n(a)%o===0:a=>i.count(0,a)%o===0):i)),i}const yu=Pt(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);yu.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?Pt(t=>{t.setTime(Math.floor(t/e)*e)},(t,r)=>{t.setTime(+t+r*e)},(t,r)=>(r-t)/e):yu);yu.range;const Pn=1e3,Or=Pn*60,Rn=Or*60,qn=Rn*24,vg=qn*7,b_=qn*30,If=qn*365,ko=Pt(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*Pn)},(e,t)=>(t-e)/Pn,e=>e.getUTCSeconds());ko.range;const wg=Pt(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*Pn)},(e,t)=>{e.setTime(+e+t*Or)},(e,t)=>(t-e)/Or,e=>e.getMinutes());wg.range;const YB=Pt(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*Or)},(e,t)=>(t-e)/Or,e=>e.getUTCMinutes());YB.range;const Eg=Pt(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*Pn-e.getMinutes()*Or)},(e,t)=>{e.setTime(+e+t*Rn)},(e,t)=>(t-e)/Rn,e=>e.getHours());Eg.range;const QB=Pt(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*Rn)},(e,t)=>(t-e)/Rn,e=>e.getUTCHours());QB.range;const Aa=Pt(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*Or)/qn,e=>e.getDate()-1);Aa.range;const Sg=Pt(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/qn,e=>e.getUTCDate()-1);Sg.range;const JB=Pt(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/qn,e=>Math.floor(e/qn));JB.range;function fo(e){return Pt(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,r)=>{t.setDate(t.getDate()+r*7)},(t,r)=>(r-t-(r.getTimezoneOffset()-t.getTimezoneOffset())*Or)/vg)}const ic=fo(0),bu=fo(1),XB=fo(2),ZB=fo(3),Xo=fo(4),eD=fo(5),tD=fo(6);ic.range;bu.range;XB.range;ZB.range;Xo.range;eD.range;tD.range;function ho(e){return Pt(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCDate(t.getUTCDate()+r*7)},(t,r)=>(r-t)/vg)}const k1=ho(0),_u=ho(1),rD=ho(2),nD=ho(3),Zo=ho(4),iD=ho(5),oD=ho(6);k1.range;_u.range;rD.range;nD.range;Zo.range;iD.range;oD.range;const xg=Pt(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());xg.range;const sD=Pt(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());sD.range;const Gn=Pt(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());Gn.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:Pt(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,r)=>{t.setFullYear(t.getFullYear()+r*e)});Gn.range;const ro=Pt(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());ro.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:Pt(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCFullYear(t.getUTCFullYear()+r*e)});ro.range;function aD(e,t,r,n,i,o){const a=[[ko,1,Pn],[ko,5,5*Pn],[ko,15,15*Pn],[ko,30,30*Pn],[o,1,Or],[o,5,5*Or],[o,15,15*Or],[o,30,30*Or],[i,1,Rn],[i,3,3*Rn],[i,6,6*Rn],[i,12,12*Rn],[n,1,qn],[n,2,2*qn],[r,1,vg],[t,1,b_],[t,3,3*b_],[e,1,If]];function s(u,c,f){const h=cy).right(a,h);if(d===a.length)return e.every(Xd(u/If,c/If,f));if(d===0)return yu.every(Math.max(Xd(u,c,f),1));const[g,b]=a[h/a[d-1][2]53)return null;"w"in C||(C.w=1),"Z"in C?(N=kf(ws(C.y,0,1)),O=N.getUTCDay(),N=O>4||O===0?_u.ceil(N):_u(N),N=Sg.offset(N,(C.V-1)*7),C.y=N.getUTCFullYear(),C.m=N.getUTCMonth(),C.d=N.getUTCDate()+(C.w+6)%7):(N=Cf(ws(C.y,0,1)),O=N.getDay(),N=O>4||O===0?bu.ceil(N):bu(N),N=Aa.offset(N,(C.V-1)*7),C.y=N.getFullYear(),C.m=N.getMonth(),C.d=N.getDate()+(C.w+6)%7)}else("W"in C||"U"in C)&&("w"in C||(C.w="u"in C?C.u%7:"W"in C?1:0),O="Z"in C?kf(ws(C.y,0,1)).getUTCDay():Cf(ws(C.y,0,1)).getDay(),C.m=0,C.d="W"in C?(C.w+6)%7+C.W*7-(O+5)%7:C.w+C.U*7-(O+6)%7);return"Z"in C?(C.H+=C.Z/100|0,C.M+=C.Z%100,kf(C)):Cf(C)}}function R(V,q,z,C){for(var k=0,N=q.length,O=z.length,$,j;k=O)return-1;if($=q.charCodeAt(k++),$===37){if($=q.charAt(k++),j=E[$ in __?q.charAt(k++):$],!j||(C=j(V,z,C))<0)return-1}else if($!=z.charCodeAt(C++))return-1}return C}function K(V,q,z){var C=u.exec(q.slice(z));return C?(V.p=c.get(C[0].toLowerCase()),z+C[0].length):-1}function P(V,q,z){var C=d.exec(q.slice(z));return C?(V.w=g.get(C[0].toLowerCase()),z+C[0].length):-1}function U(V,q,z){var C=f.exec(q.slice(z));return C?(V.w=h.get(C[0].toLowerCase()),z+C[0].length):-1}function M(V,q,z){var C=_.exec(q.slice(z));return C?(V.m=m.get(C[0].toLowerCase()),z+C[0].length):-1}function D(V,q,z){var C=b.exec(q.slice(z));return C?(V.m=y.get(C[0].toLowerCase()),z+C[0].length):-1}function Q(V,q,z){return R(V,t,q,z)}function le(V,q,z){return R(V,r,q,z)}function me(V,q,z){return R(V,n,q,z)}function fe(V){return a[V.getDay()]}function J(V){return o[V.getDay()]}function de(V){return l[V.getMonth()]}function B(V){return s[V.getMonth()]}function ie(V){return i[+(V.getHours()>=12)]}function G(V){return 1+~~(V.getMonth()/3)}function se(V){return a[V.getUTCDay()]}function _e(V){return o[V.getUTCDay()]}function X(V){return l[V.getUTCMonth()]}function re(V){return s[V.getUTCMonth()]}function ee(V){return i[+(V.getUTCHours()>=12)]}function F(V){return 1+~~(V.getUTCMonth()/3)}return{format:function(V){var q=T(V+="",w);return q.toString=function(){return V},q},parse:function(V){var q=I(V+="",!1);return q.toString=function(){return V},q},utcFormat:function(V){var q=T(V+="",S);return q.toString=function(){return V},q},utcParse:function(V){var q=I(V+="",!0);return q.toString=function(){return V},q}}}var __={"-":"",_:" ",0:"0"},Dt=/^\s*\d+/,fD=/^%/,hD=/[\\^$*+?|[\]().{}]/g;function tt(e,t,r){var n=e<0?"-":"",i=(n?-e:e)+"",o=i.length;return n+(o[t.toLowerCase(),r]))}function pD(e,t,r){var n=Dt.exec(t.slice(r,r+1));return n?(e.w=+n[0],r+n[0].length):-1}function gD(e,t,r){var n=Dt.exec(t.slice(r,r+1));return n?(e.u=+n[0],r+n[0].length):-1}function mD(e,t,r){var n=Dt.exec(t.slice(r,r+2));return n?(e.U=+n[0],r+n[0].length):-1}function yD(e,t,r){var n=Dt.exec(t.slice(r,r+2));return n?(e.V=+n[0],r+n[0].length):-1}function bD(e,t,r){var n=Dt.exec(t.slice(r,r+2));return n?(e.W=+n[0],r+n[0].length):-1}function v_(e,t,r){var n=Dt.exec(t.slice(r,r+4));return n?(e.y=+n[0],r+n[0].length):-1}function w_(e,t,r){var n=Dt.exec(t.slice(r,r+2));return n?(e.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function _D(e,t,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(r,r+6));return n?(e.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function vD(e,t,r){var n=Dt.exec(t.slice(r,r+1));return n?(e.q=n[0]*3-3,r+n[0].length):-1}function wD(e,t,r){var n=Dt.exec(t.slice(r,r+2));return n?(e.m=n[0]-1,r+n[0].length):-1}function E_(e,t,r){var n=Dt.exec(t.slice(r,r+2));return n?(e.d=+n[0],r+n[0].length):-1}function ED(e,t,r){var n=Dt.exec(t.slice(r,r+3));return n?(e.m=0,e.d=+n[0],r+n[0].length):-1}function S_(e,t,r){var n=Dt.exec(t.slice(r,r+2));return n?(e.H=+n[0],r+n[0].length):-1}function SD(e,t,r){var n=Dt.exec(t.slice(r,r+2));return n?(e.M=+n[0],r+n[0].length):-1}function xD(e,t,r){var n=Dt.exec(t.slice(r,r+2));return n?(e.S=+n[0],r+n[0].length):-1}function AD(e,t,r){var n=Dt.exec(t.slice(r,r+3));return n?(e.L=+n[0],r+n[0].length):-1}function TD(e,t,r){var n=Dt.exec(t.slice(r,r+6));return n?(e.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function ID(e,t,r){var n=fD.exec(t.slice(r,r+1));return n?r+n[0].length:-1}function CD(e,t,r){var n=Dt.exec(t.slice(r));return n?(e.Q=+n[0],r+n[0].length):-1}function kD(e,t,r){var n=Dt.exec(t.slice(r));return n?(e.s=+n[0],r+n[0].length):-1}function x_(e,t){return tt(e.getDate(),t,2)}function OD(e,t){return tt(e.getHours(),t,2)}function MD(e,t){return tt(e.getHours()%12||12,t,2)}function PD(e,t){return tt(1+Aa.count(Gn(e),e),t,3)}function O1(e,t){return tt(e.getMilliseconds(),t,3)}function RD(e,t){return O1(e,t)+"000"}function ND(e,t){return tt(e.getMonth()+1,t,2)}function LD(e,t){return tt(e.getMinutes(),t,2)}function BD(e,t){return tt(e.getSeconds(),t,2)}function DD(e){var t=e.getDay();return t===0?7:t}function $D(e,t){return tt(ic.count(Gn(e)-1,e),t,2)}function M1(e){var t=e.getDay();return t>=4||t===0?Xo(e):Xo.ceil(e)}function UD(e,t){return e=M1(e),tt(Xo.count(Gn(e),e)+(Gn(e).getDay()===4),t,2)}function FD(e){return e.getDay()}function jD(e,t){return tt(bu.count(Gn(e)-1,e),t,2)}function WD(e,t){return tt(e.getFullYear()%100,t,2)}function VD(e,t){return e=M1(e),tt(e.getFullYear()%100,t,2)}function HD(e,t){return tt(e.getFullYear()%1e4,t,4)}function qD(e,t){var r=e.getDay();return e=r>=4||r===0?Xo(e):Xo.ceil(e),tt(e.getFullYear()%1e4,t,4)}function GD(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+tt(t/60|0,"0",2)+tt(t%60,"0",2)}function A_(e,t){return tt(e.getUTCDate(),t,2)}function KD(e,t){return tt(e.getUTCHours(),t,2)}function zD(e,t){return tt(e.getUTCHours()%12||12,t,2)}function YD(e,t){return tt(1+Sg.count(ro(e),e),t,3)}function P1(e,t){return tt(e.getUTCMilliseconds(),t,3)}function QD(e,t){return P1(e,t)+"000"}function JD(e,t){return tt(e.getUTCMonth()+1,t,2)}function XD(e,t){return tt(e.getUTCMinutes(),t,2)}function ZD(e,t){return tt(e.getUTCSeconds(),t,2)}function e$(e){var t=e.getUTCDay();return t===0?7:t}function t$(e,t){return tt(k1.count(ro(e)-1,e),t,2)}function R1(e){var t=e.getUTCDay();return t>=4||t===0?Zo(e):Zo.ceil(e)}function r$(e,t){return e=R1(e),tt(Zo.count(ro(e),e)+(ro(e).getUTCDay()===4),t,2)}function n$(e){return e.getUTCDay()}function i$(e,t){return tt(_u.count(ro(e)-1,e),t,2)}function o$(e,t){return tt(e.getUTCFullYear()%100,t,2)}function s$(e,t){return e=R1(e),tt(e.getUTCFullYear()%100,t,2)}function a$(e,t){return tt(e.getUTCFullYear()%1e4,t,4)}function l$(e,t){var r=e.getUTCDay();return e=r>=4||r===0?Zo(e):Zo.ceil(e),tt(e.getUTCFullYear()%1e4,t,4)}function u$(){return"+0000"}function T_(){return"%"}function I_(e){return+e}function C_(e){return Math.floor(+e/1e3)}var yo,sa,aa;c$({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function c$(e){return yo=cD(e),sa=yo.format,aa=yo.parse,yo.utcFormat,yo.utcParse,yo}function f$(e){return new Date(e)}function h$(e){return e instanceof Date?+e:+new Date(+e)}function N1(e,t,r,n,i,o,a,s,l,u){var c=C1(),f=c.invert,h=c.domain,d=u(".%L"),g=u(":%S"),b=u("%I:%M"),y=u("%I %p"),_=u("%a %d"),m=u("%b %d"),w=u("%B"),S=u("%Y");function E(T){return(l(T)1?0:e<-1?ua:Math.acos(e)}function O_(e){return e>=1?vu:e<=-1?-vu:Math.asin(e)}function Ag(e){let t=3;return e.digits=function(r){if(!arguments.length)return t;if(r==null)t=null;else{const n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);t=n}return e},()=>new CB(t)}function g$(e){return e.innerRadius}function m$(e){return e.outerRadius}function y$(e){return e.startAngle}function b$(e){return e.endAngle}function _$(e){return e&&e.padAngle}function v$(e,t,r,n,i,o,a,s){var l=r-e,u=n-t,c=a-i,f=s-o,h=f*l-c*u;if(!(h*hQ*Q+le*le&&(R=P,K=U),{cx:R,cy:K,x01:-c,y01:-f,x11:R*(i/E-1),y11:K*(i/E-1)}}function L1(){var e=g$,t=m$,r=et(0),n=null,i=y$,o=b$,a=_$,s=null,l=Ag(u);function u(){var c,f,h=+e.apply(this,arguments),d=+t.apply(this,arguments),g=i.apply(this,arguments)-vu,b=o.apply(this,arguments)-vu,y=k_(b-g),_=b>g;if(s||(s=c=l()),dlr))s.moveTo(0,0);else if(y>Fl-lr)s.moveTo(d*ki(g),d*Qr(g)),s.arc(0,0,d,g,b,!_),h>lr&&(s.moveTo(h*ki(b),h*Qr(b)),s.arc(0,0,h,b,g,_));else{var m=g,w=b,S=g,E=b,T=y,I=y,R=a.apply(this,arguments)/2,K=R>lr&&(n?+n.apply(this,arguments):Oo(h*h+d*d)),P=Of(k_(d-h)/2,+r.apply(this,arguments)),U=P,M=P,D,Q;if(K>lr){var le=O_(K/h*Qr(R)),me=O_(K/d*Qr(R));(T-=le*2)>lr?(le*=_?1:-1,S+=le,E-=le):(T=0,S=E=(g+b)/2),(I-=me*2)>lr?(me*=_?1:-1,m+=me,w-=me):(I=0,m=w=(g+b)/2)}var fe=d*ki(m),J=d*Qr(m),de=h*ki(E),B=h*Qr(E);if(P>lr){var ie=d*ki(w),G=d*Qr(w),se=h*ki(S),_e=h*Qr(S),X;if(ylr?M>lr?(D=Ja(se,_e,fe,J,d,M,_),Q=Ja(ie,G,de,B,d,M,_),s.moveTo(D.cx+D.x01,D.cy+D.y01),Mlr)||!(T>lr)?s.lineTo(de,B):U>lr?(D=Ja(de,B,ie,G,h,-U,_),Q=Ja(fe,J,se,_e,h,-U,_),s.lineTo(D.cx+D.x01,D.cy+D.y01),U=d;--g)s.point(w[g],S[g]);s.lineEnd(),s.areaEnd()}_&&(w[h]=+e(y,h,f),S[h]=+t(y,h,f),s.point(n?+n(y,h,f):w[h],r?+r(y,h,f):S[h]))}if(m)return s=null,m+""||null}function c(){return Tg().defined(i).curve(a).context(o)}return u.x=function(f){return arguments.length?(e=typeof f=="function"?f:et(+f),n=null,u):e},u.x0=function(f){return arguments.length?(e=typeof f=="function"?f:et(+f),u):e},u.x1=function(f){return arguments.length?(n=f==null?null:typeof f=="function"?f:et(+f),u):n},u.y=function(f){return arguments.length?(t=typeof f=="function"?f:et(+f),r=null,u):t},u.y0=function(f){return arguments.length?(t=typeof f=="function"?f:et(+f),u):t},u.y1=function(f){return arguments.length?(r=f==null?null:typeof f=="function"?f:et(+f),u):r},u.lineX0=u.lineY0=function(){return c().x(e).y(t)},u.lineY1=function(){return c().x(e).y(r)},u.lineX1=function(){return c().x(n).y(t)},u.defined=function(f){return arguments.length?(i=typeof f=="function"?f:et(!!f),u):i},u.curve=function(f){return arguments.length?(a=f,o!=null&&(s=a(o)),u):a},u.context=function(f){return arguments.length?(f==null?o=s=null:s=a(o=f),u):o},u}function w$(e,t){return te?1:t>=e?0:NaN}function E$(e){return e}function F1(){var e=E$,t=w$,r=null,n=et(0),i=et(Fl),o=et(0);function a(s){var l,u=(s=oc(s)).length,c,f,h=0,d=new Array(u),g=new Array(u),b=+n.apply(this,arguments),y=Math.min(Fl,Math.max(-Fl,i.apply(this,arguments)-b)),_,m=Math.min(Math.abs(y)/u,o.apply(this,arguments)),w=m*(y<0?-1:1),S;for(l=0;l0&&(h+=S);for(t!=null?d.sort(function(E,T){return t(g[E],g[T])}):r!=null&&d.sort(function(E,T){return r(s[E],s[T])}),l=0,f=h?(y-u*w)/h:0;l0?S*f:0)+w,g[c]={data:s[c],index:l,value:S,startAngle:b,endAngle:_,padAngle:m};return g}return a.value=function(s){return arguments.length?(e=typeof s=="function"?s:et(+s),a):e},a.sortValues=function(s){return arguments.length?(t=s,r=null,a):t},a.sort=function(s){return arguments.length?(r=s,t=null,a):r},a.startAngle=function(s){return arguments.length?(n=typeof s=="function"?s:et(+s),a):n},a.endAngle=function(s){return arguments.length?(i=typeof s=="function"?s:et(+s),a):i},a.padAngle=function(s){return arguments.length?(o=typeof s=="function"?s:et(+s),a):o},a}function M_(e,t){if((a=e.length)>1)for(var r=1,n,i,o=e[t[0]],a,s=o.length;r=0;)r[t]=t;return r}function S$(e,t){return e[t]}function x$(e){const t=[];return t.key=e,t}function j1(){var e=et([]),t=P_,r=M_,n=S$;function i(o){var a=Array.from(e.apply(this,arguments),x$),s,l=a.length,u=-1,c;for(const f of o)for(s=0,++u;s!t.showInGraph).map(t=>t.id),e.showLG=De.graphPreference=="live",e.displayM=De.displayMode,e.stackO=De.usageStackOrder,e.showGr=De.showGrid,e.decimalP=De.decimalPlaces,e.smartHomeC=De.smartHomeColors,e.relPM=De.showRelativeArcs,e.maxPow=De.maxPower,e.showQA=De.showQuickAccess,e.simpleCP=De.simpleCpList,e.shortCP=De.shortCpList,e.animation=De.showAnimations,e.wideB=De.preferWideBoxes,e.fluidD=De.fluidDisplay,e.clock=De.showClock,e.showButtonBar=De.showButtonBar,e.showCounters=De.showCounters,e.showVehicles=De.showVehicles,e.showPrices=De.showPrices,e.debug=De.debug,document.cookie="openWBColorTheme="+JSON.stringify(e)+";max-age=16000000;samesite=strict"}const k$={class:"navigation"},O$={class:"graphbuttons"},M$={class:"cpbuttons"},P$={class:"timedisplay ms-4"},R$=Ye({__name:"NavigationBar",setup(e){let t;function r(){let l=Object.values(Ve).length;De.cpToShow=(De.cpToShow+1)%l}function n(){let l=Object.values(Ve).length;De.cpToShow=((De.cpToShow-1)%l+l)%l}function i(){De.graphToShow="powermeter"}function o(){De.graphToShow="powergraph"}function a(){De.graphToShow="energymeter"}function s(){Mt.locked?$o():new hn("#statuspage").toggle()}return es(()=>{t=setInterval(()=>{Gb.value=new Date},1e3)}),Ap(()=>{clearInterval(t)}),(l,u)=>(Se(),Re("div",k$,[ye("span",O$,[u[3]||(u[3]=ye("span",{class:"brand me-4"},"openWB",-1)),Me(Dr,{icon:"fa-chart-pie",onClick:i},{default:Ue(()=>[...u[0]||(u[0]=[Xe("Leistung",-1)])]),_:1}),Me(Dr,{icon:"fa-chart-line",onClick:o},{default:Ue(()=>[...u[1]||(u[1]=[Xe("Verlauf",-1)])]),_:1}),Me(Dr,{icon:"fa-chart-column",onClick:a},{default:Ue(()=>[...u[2]||(u[2]=[Xe("Energie",-1)])]),_:1})]),Me(Dr,{icon:"fa-rectangle-list",onClick:s},{default:Ue(()=>[...u[4]||(u[4]=[Xe("Status",-1)])]),_:1}),ye("span",M$,[Object.values(we(Ve)).length>1?(Se(),Ke(Dr,{key:0,color:"var(--color-cp0)",onClick:n},{default:Ue(()=>[...u[5]||(u[5]=[ye("span",{class:"fas fa-arrow-left px-2"},null,-1),ye("span",{class:"fas fa-charging-station pe-2"},null,-1)])]),_:1})):We("",!0),Me(Dr,{bgcolor:we(Mt).locked?"var(--color-evu)":"var(--color-pv)",onClick:we($o)},{default:Ue(()=>[...u[6]||(u[6]=[ye("span",{class:"fas fa-lock px-4"},null,-1)])]),_:1},8,["bgcolor","onClick"]),Object.values(we(Ve)).length>1?(Se(),Ke(Dr,{key:1,color:"var(--color-cp0)",onClick:r},{default:Ue(()=>[...u[7]||(u[7]=[ye("span",{class:"fas fa-charging-station px-2"},null,-1),ye("span",{class:"fas fa-arrow-right pe-2"},null,-1)])]),_:1})):We("",!0),ye("span",P$,qe(we(SA)(we(Gb))),1)])]))}}),N$=rt(R$,[["__scopeId","data-v-6d0b9541"]]),L$=["origin"],B$=Ye({__name:"PMSourceArc",props:{radius:{},cornerRadius:{},circleGapSize:{},emptyPower:{}},setup(e){const t=e,r=Ce(()=>{let n={name:"",power:t.emptyPower,energy:0,energyPv:0,energyBat:0,pvPercentage:0,color:"var(--color-bg)",icon:""},i=ot;i["zz-empty"]=n;const o=Object.values(ot).length-1,a=F1().value(u=>u.power).startAngle(-Math.PI/2+t.circleGapSize).endAngle(Math.PI/2-t.circleGapSize).sort(null),s=L1().innerRadius(t.radius/6*5).outerRadius(t.radius).cornerRadius(t.cornerRadius).padAngle(0),l=Gr("g#pmSourceArc");return l.selectAll("*").remove(),l.selectAll("sources").data(a(Object.values(i))).enter().append("path").attr("d",s).attr("fill",u=>u.data.color).attr("stroke",(u,c)=>c==o?u.data.power>0?"var(--color-scale)":"null":u.data.color),"pmSourceArc.vue"});return GS(()=>{let n=ot.pv.power+ot.evuIn.power+ot.batOut.power;n>De.maxPower&&(De.maxPower=n)}),(n,i)=>(Se(),Re("g",{id:"pmSourceArc",origin:r.value},null,8,L$))}}),D$=["origin"],$$=Ye({__name:"PMUsageArc",props:{radius:{},cornerRadius:{},circleGapSize:{},emptyPower:{}},setup(e){const t=e,r=Ce(()=>{let n={name:"",power:t.emptyPower,energy:0,energyPv:0,energyBat:0,pvPercentage:0,color:"var(--color-bg)",icon:""};const i=[Qe.evuOut,Qe.charging].concat([...Nt.values()].filter(u=>u.configured&&!u.countAsHouse).sort((u,c)=>c.power-u.power)).concat([Qe.batIn,Qe.house]).concat(n),o=i.length-1,a=F1().value(u=>u.power).startAngle(Math.PI*1.5-t.circleGapSize).endAngle(Math.PI/2+t.circleGapSize).sort(null),s=L1().innerRadius(t.radius/6*5).outerRadius(t.radius).cornerRadius(t.cornerRadius),l=Gr("g#pmUsageArc");return l.selectAll("*").remove(),l.selectAll("consumers").data(a(i)).enter().append("path").attr("d",s).attr("fill",u=>u.data.color).attr("stroke",(u,c)=>c==o?u.data.power>0?"var(--color-scale)":"null":u.data.color),"pmUsageArc.vue"});return(n,i)=>(Se(),Re("g",{id:"pmUsageArc",origin:r.value},null,8,D$))}}),V1=Ye({__name:"FormatWatt",props:{watt:{}},setup(e){const t=e,r=Ce(()=>nl(t.watt,De.decimalPlaces));return(n,i)=>qe(r.value)}}),U$={key:0,id:"pmLabel"},F$=["x","y","fill","text-anchor"],j$=22,Jr=Ye({__name:"PMLabel",props:{x:{},y:{},data:{},props:{},anchor:{},labeltext:{},labelicon:{},labelcolor:{}},setup(e){const t=e,r=Ce(()=>t.labeltext?t.labeltext:t.props?t.props.icon+" ":t.labelicon?t.labelicon+" ":""),n=Ce(()=>t.labelcolor?t.labelcolor:t.props?t.props.color:""),i=Ce(()=>!t.data||t.data.power>0),o=Ce(()=>t.labeltext?"":"fas");return(a,s)=>i.value?(Se(),Re("g",U$,[ye("text",{x:e.x,y:e.y,fill:n.value,"text-anchor":e.anchor,"font-size":j$,class:"pmLabel"},[ye("tspan",{class:It(o.value)},qe(r.value),3),ye("tspan",null,[e.data!==void 0?(Se(),Ke(V1,{key:0,watt:e.data.power},null,8,["watt"])):We("",!0)])],8,F$)])):We("",!0)}}),W$={},V$={class:"p-2 m-0 cont"},H$={class:"wb-widget m-0 pb-2 shadow"},q$={class:"header mt-4 mx-2"},G$={class:"titles"},K$={class:"title"},z$={class:"subtitle"},Y$={class:"buttons"},Q$={class:"wb-subwidget mx-2"},J$={key:0},X$={class:"wb-subwidget mx-2"};function Z$(e,t){return Se(),Re("div",V$,[ye("div",H$,[ye("div",q$,[ye("div",G$,[ye("div",K$,[kr(e.$slots,"title",{},()=>[t[0]||(t[0]=ye("div",{class:"p-0"},"(title goes here)",-1))])]),ye("div",z$,[kr(e.$slots,"subtitle",{},void 0)])]),ye("div",Y$,[kr(e.$slots,"buttons",{},void 0)])]),ye("div",Q$,[kr(e.$slots,"default",{},void 0)]),e.$slots.footer!=null?(Se(),Re("div",J$,[t[1]||(t[1]=ye("hr",{class:"grid-col-12"},null,-1)),ye("div",X$,[kr(e.$slots,"footer",{},void 0)])])):We("",!0)])])}const sc=rt(W$,[["render",Z$],["__scopeId","data-v-e8292acd"]]);class eU{active=!1;etPriceList=new Map;etProvider="";etMaxPrice=0;get etCurrentPriceString(){const[t]=Ft.etPriceList.values();return(Math.round(t*10)/10).toFixed(1)+" ct"}}const Ft=mt(new eU),tU={class:"grid-col-12"},rU={id:"powermeter",class:"powermeter p-0 m-0 align-self-stretch"},nU=["viewBox"],iU=["transform"],oU={transform:"scale(0.9294,1)"},sU=["x"],bn=500,_n=20,B_=1,aU=Ye({__name:"PowerMeter",setup(e){const t=bn,r=Math.PI/40,n=[[4],[4,6],[1,4,6],[0,2,4,6],[0,2,3,5,6]],i=[{x:-85,y:t/2*1/5},{x:0,y:t/2*1/5},{x:85,y:t/2*1/5},{x:-85,y:t/2*2/5},{x:0,y:t/2*2/5},{x:85,y:t/2*2/5},{x:0,y:t/2*3/5}],o=Ce(()=>bn/2-_n),a=Ce(()=>{let y="",_=Object.values(ot).filter(m=>m.power>0);return _.length==1&&_[0].name=="PV"?y="Aktueller Verbrauch: ":y="Bezug/Verbrauch: ",y+nl(Qe.house.power+Qe.charging.power+Qe.devices.power+Qe.batIn.power,De.decimalPlaces)}),s=Ce(()=>{let y=ot.pv.power+ot.evuIn.power+ot.batOut.power;return De.maxPower>y?nl(De.maxPower,De.decimalPlaces):nl(y,De.decimalPlaces)}),l=Ce(()=>Object.values(Ve)),u=Ce(()=>{let y=0;return De.showRelativeArcs&&(y=De.maxPower-(ot.pv.power+ot.evuIn.power+ot.batOut.power)),y<0?0:y}),c=Ce(()=>[Qe.evuOut,Qe.charging,Qe.devices,Qe.batIn,Qe.house].filter(y=>y.power>0)),f=Ce(()=>n[c.value.length-1]);function h(y){return i[f.value[y]]}function d(y){return Math.round(l.value[y].soc)}function g(y){return y.length>12?y.slice(0,11)+".":y}const b=Ce(()=>{const[y]=Ft.etPriceList.values();return Math.round(y*10)/10});return(y,_)=>(Se(),Ke(sc,null,{title:Ue(()=>[..._[0]||(_[0]=[Xe(" Aktuelle Leistung ",-1)])]),default:Ue(()=>[ye("div",tU,[ye("figure",rU,[(Se(),Re("svg",{viewBox:"0 0 "+bn+" "+we(t)},[ye("g",{transform:"translate("+bn/2+","+we(t)/2+")"},[ye("g",oU,[Me(B$,{radius:o.value,"corner-radius":B_,"circle-gap-size":r,"empty-power":u.value},null,8,["radius","empty-power"]),Me($$,{"sh-device":we(Nt),radius:o.value,"corner-radius":B_,"circle-gap-size":r,"empty-power":u.value},null,8,["sh-device","radius","empty-power"]),Me(Jr,{x:0,y:-we(t)/10*2,data:we(ot).pv,props:we(Kt).pv,anchor:"middle",config:we(De)},null,8,["y","data","props","config"]),Me(Jr,{x:0,y:-we(t)/10*3,data:we(ot).evuIn,props:we(Kt).evuIn,anchor:"middle",config:we(De)},null,8,["y","data","props","config"]),Me(Jr,{x:0,y:-we(t)/10,data:we(ot).batOut,props:we(Kt).batOut,anchor:"middle",config:we(De)},null,8,["y","data","props","config"]),we(Ft).active?(Se(),Ke(Jr,{key:0,x:0,y:-we(t)/10,data:we(ot).batOut,props:we(Kt).batOut,anchor:"middle",config:we(De)},null,8,["y","data","props","config"])):We("",!0),(Se(!0),Re(ut,null,Wr(c.value,(m,w)=>(Se(),Ke(Jr,{key:w,x:h(w).x,y:h(w).y,data:m,labelicon:m.icon,labelcolor:m.color,anchor:"middle",config:we(De)},null,8,["x","y","data","labelicon","labelcolor","config"]))),128)),l.value.length>0&&we(Tt)[l.value[0].connectedVehicle]?(Se(),Ke(Jr,{key:1,x:-bn/2-_n/4+10,y:-we(t)/2+_n+5,labeltext:g(we(Tt)[l.value[0].connectedVehicle].name)+": "+d(0)+"%",labelcolor:l.value[0].color,anchor:"start",config:we(De)},null,8,["x","y","labeltext","labelcolor","config"])):We("",!0),l.value.length>1&&we(Tt)[l.value[1].connectedVehicle]?(Se(),Ke(Jr,{key:2,x:bn/2+_n/4-10,y:-we(t)/2+_n+5,labeltext:g(we(Tt)[l.value[1].connectedVehicle].name)+": "+d(1)+"%",labelcolor:l.value[1].color,anchor:"end",config:we(De)},null,8,["x","y","labeltext","labelcolor","config"])):We("",!0),we(ht).batterySoc>0?(Se(),Ke(Jr,{key:3,x:-bn/2-_n/4+10,y:we(t)/2-_n+15,labeltext:"Speicher: "+we(ht).batterySoc+"%",labelcolor:we(Qe).batIn.color,anchor:"start",config:we(De)},null,8,["x","y","labeltext","labelcolor","config"])):We("",!0),we(Ft).active?(Se(),Ke(Jr,{key:4,x:bn/2+_n/4-10,y:we(t)/2-_n+15,value:b.value,labeltext:we(Ft).etCurrentPriceString,labelcolor:"var(--color-charging)",anchor:"end",config:we(De)},null,8,["x","y","value","labeltext","config"])):We("",!0),Me(Jr,{x:0,y:0,labeltext:a.value,labelcolor:"var(--color-fg)",anchor:"middle",config:we(De)},null,8,["labeltext","config"]),we(De).showRelativeArcs?(Se(),Re("text",{key:5,x:bn/2-44,y:"2","text-anchor":"middle",fill:"var(--color-axis)","font-size":"12"}," Peak: "+qe(s.value),9,sU)):We("",!0)])],8,iU)],8,nU))])])]),_:1}))}}),En=500,oi=500,Ze={top:10,right:20,bottom:10,left:25},Ig=["charging","house","batIn","devices"];class lU{data=[];_graphMode="";get graphMode(){return this._graphMode}set graphMode(t){this._graphMode=t}}const xe=mt(new lU);let Eu=!0,ca=!0;function D_(){Eu=!1}function $_(){ca=!1}function uU(e){ca=e}function Ta(e){xe.data=e}const Ot=mt({refreshTopicPrefix:"openWB/graph/alllivevaluesJson",updateTopic:"openWB/graph/lastlivevaluesJson",configTopic:"openWB/graph/config/#",initialized:!1,initCounter:0,graphRefreshCounter:0,rawDataPacks:[],duration:0,activate(){xe.data=[],this.unsubscribeUpdates(),this.subscribeRefresh(),zi(this.configTopic),this.initialized=!1,this.initCounter=0,this.graphRefreshCounter=0,this.rawDataPacks=[],pU(),iu.value=!0},deactivate(){this.unsubscribeRefresh(),this.unsubscribeUpdates(),Do(this.configTopic)},subscribeRefresh(){for(let e=1;e<17;e++)zi(this.refreshTopicPrefix+e)},unsubscribeRefresh(){for(let e=1;e<17;e++)Do(this.refreshTopicPrefix+e)},subscribeUpdates(){zi(this.updateTopic)},unsubscribeUpdates(){Do(this.updateTopic)}}),wt=mt({topic:"openWB/log/daily/#",date:new Date,activate(){if(xe.graphMode=="day"||xe.graphMode=="today"){xe.graphMode=="today"&&(this.date=new Date);const e=this.date.getFullYear().toString()+(this.date.getMonth()+1).toString().padStart(2,"0")+this.date.getDate().toString().padStart(2,"0");zi(this.topic),ji("getDailyLog",{day:e})}},deactivate(){Do(this.topic)},back(){this.date=new Date(this.date.setTime(this.date.getTime()-864e5))},forward(){this.date=new Date(this.date.setTime(this.date.getTime()+864e5))},setDate(e){this.date=e},getDate(){return this.date}}),On=mt({topic:"openWB/log/monthly/#",month:new Date().getMonth()+1,year:new Date().getFullYear(),activate(){const e=this.year.toString()+this.month.toString().padStart(2,"0");xe.data=[],zi(this.topic),ji("getMonthlyLog",{month:e})},deactivate(){Do(this.topic)},back(){this.month-=1,this.month<1&&(this.month=12,this.year-=1),this.activate()},forward(){const e=new Date;e.getFullYear()==this.year?this.month-112&&(this.month=1,this.year+=1)),this.activate()},getDate(){return new Date(this.year,this.month)}}),di=mt({topic:"openWB/log/yearly/#",month:new Date().getMonth()+1,year:new Date().getFullYear(),activate(){const e=this.year.toString();xe.data=[],zi(this.topic),ji("getYearlyLog",{year:e})},deactivate(){Do(this.topic)},back(){this.year-=1,this.activate()},forward(){this.year0&&(He.items[e].energyPv+=1e3/12*(t[e]*(t.pv-t.evuOut))/(t.pv-t.evuOut+t.evuIn+t.batOut),He.items[e].energyBat+=1e3/12*(t[e]*t.batOut)/(t.pv-t.evuOut+t.evuIn+t.batOut))}function hU(e,t){t[e]>0&&(He.items[e].energyPv+=1e3*(t[e]*(t.pv-t.evuOut))/(t.pv-t.evuOut+t.evuIn+t.batOut),He.items[e].energyBat+=1e3*(t[e]*t.batOut)/(t.pv-t.evuOut+t.evuIn+t.batOut))}const dU=["evuIn","pv","batIn","evuOut"],Gs=zt(!1);function Cg(e,t){Object.entries(e).length>0?(Gs.value=!1,Object.entries(e.counter).forEach(([r,n])=>{(t.length==0||t.includes(r))&&(He.items.evuIn.energy+=n.energy_imported,He.items.evuOut.energy+=n.energy_exported)}),He.items.pv.energy=e.pv.all.energy_exported,e.bat.all&&(He.items.batIn.energy=e.bat.all.energy_imported,He.items.batOut.energy=e.bat.all.energy_exported),Object.entries(e.cp).forEach(([r,n])=>{r=="all"?He.setEnergy("charging",n.energy_imported):He.setEnergy(r,n.energy_imported)}),He.setEnergy("devices",0),Object.entries(e.sh).forEach(([r,n])=>{He.setEnergy(r,n.energy_imported);const i=r.substring(2);Nt.get(+i).countAsHouse||(He.items.devices.energy+=n.energy_imported)}),e.hc&&e.hc.all?He.setEnergy("house",e.hc.all.energy_imported):He.calculateHouseEnergy(),He.keys().map(r=>{dU.includes(r)||(He.setPvPercentage(r,Math.round((He.items[r].energyPv+He.items[r].energyBat)/He.items[r].energy*100)),Ig.includes(r)&&(Qe[r].energy=He.items[r].energy,Qe[r].energyPv=He.items[r].energyPv,Qe[r].energyBat=He.items[r].energyBat,Qe[r].pvPercentage=He.items[r].pvPercentage))}),xe.graphMode=="today"&&(Object.values(Ve).map(r=>{const n=He.items["cp"+r.id];n&&(r.energyPv=n.energyPv,r.energyBat=n.energyBat,r.pvPercentage=n.pvPercentage)}),Nt.forEach(r=>{const n=He.items["sh"+r.id];n&&(r.energy=n.energy,r.energyPv=n.energyPv,r.energyBat=n.energyBat,r.pvPercentage=n.pvPercentage)}))):Gs.value=!0,iu.value=!0}function pU(){He.keys().map(e=>{Ig.includes(e)&&(Qe[e].energy=He.items[e].energy,Qe[e].energyPv=0,Qe[e].energyBat=0,Qe[e].pvPercentage=0)}),Object.values(Ve).map(e=>{e.energyPv=0,e.energyBat=0,e.pvPercentage=0}),Nt.forEach(e=>{e.energyPv=0,e.energyBat=0,e.pvPercentage=0})}const on=Ce(()=>{const e=Zi(xe.data,t=>t.date);return e[1]?mu().domain(Array.from({length:e[1]},(t,r)=>r+1)).paddingInner(.4).range([0,En-Ze.left-2]):mu().range([0,0])});function kg(){switch(xe.graphMode){case"live":xe.graphMode="today",De.showRightButton=!0,Rt();break;case"today":xe.graphMode="day",wt.date=new Date,wt.back(),Rt();break;case"day":wt.back(),Rt();break;case"month":On.back();break;case"year":di.back();break}}function H1(){const e=new Date;switch(xe.graphMode){case"live":break;case"today":xe.graphMode="live",De.showRightButton=!1,Rt();break;case"day":wt.forward(),wt.date.getDate()==e.getDate()&&wt.date.getMonth()==e.getMonth()&&wt.date.getFullYear()==e.getFullYear()&&(xe.graphMode="today"),Rt();break;case"month":On.forward();break;case"year":di.forward();break}}function q1(){switch(xe.graphMode){case"live":kg();break;case"day":case"today":xe.graphMode="month",Rt();break;case"month":xe.graphMode="year",Rt();break}}function G1(){switch(xe.graphMode){case"year":xe.graphMode="month",Rt();break;case"month":xe.graphMode="today",Rt();break;case"today":case"day":xe.graphMode="live",Rt();break}}function gU(e){if(xe.graphMode=="day"||xe.graphMode=="today"){wt.setDate(e);const t=new Date;wt.date.getDate()==t.getDate()&&wt.date.getMonth()==t.getMonth()&&wt.date.getFullYear()==t.getFullYear()?xe.graphMode="today":xe.graphMode="day",Rt()}}const mU=["origin","transform"],yU=Ye({__name:"PGSourceGraph",props:{width:{},height:{},margin:{}},setup(e){const t=e,r={house:"var(--color-house)",batIn:"var(--color-battery)",inverter:"var(--color-pv)",batOut:"var(--color-battery)",selfUsage:"var(--color-pv)",evuOut:"var(--color-export)",evuIn:"var(--color-evu)"};var n,i;const o=De.showAnimations?De.animationDuration:0,a=De.showAnimations?De.animationDelay:0,s=Ce(()=>{const S=Gr("g#pgSourceGraph");xe.graphMode=="month"||xe.graphMode=="year"?w(S):m(S),S.selectAll(".axis").remove();const E=S.append("g").attr("class","axis");return E.call(b.value),E.selectAll(".tick").attr("font-size",12),E.selectAll(".tick line").attr("stroke",_.value).attr("stroke-width",y.value),E.select(".domain").attr("stroke","var(--color-bg)"),"pgSourceGraph.vue"}),l=Ce(()=>xe.graphMode=="month"||xe.graphMode=="year"?["evuIn","batOut","selfUsage","evuOut"]:["selfUsage","evuOut","batOut","evuIn"]),u=Ce(()=>dn().domain([0,xe.data.length-1]).range([0,t.width])),c=Ce(()=>j1().keys(l.value)),f=Ce(()=>c.value(xe.data)),h=Ce(()=>dn().range([t.height-10,0]).domain(xe.graphMode=="year"?[0,Math.ceil(d.value[1]*10)/10]:[0,Math.ceil(d.value[1])])),d=Ce(()=>{let S=Zi(xe.data,E=>Math.max(E.pv+E.evuIn+E.batOut,E.selfUsage+E.evuOut));return S[0]!=null&&S[1]!=null?(xe.graphMode=="year"&&(S[0]=S[0]/1e3,S[1]=S[1]/1e3),S):[0,0]}),g=Ce(()=>xe.graphMode=="month"||xe.graphMode=="year"?-t.width-t.margin.right-22:-t.width),b=Ce(()=>Zu(h.value).tickSizeInner(g.value).ticks(4).tickFormat(S=>(S==0?"":Math.round(S*10)/10).toLocaleString(void 0))),y=Ce(()=>De.showGrid?"0.5":"1"),_=Ce(()=>De.showGrid?"var(--color-grid)":"var(--color-bg)");function m(S){const E=wu().x((I,R)=>u.value(R)).y(h.value(0)),T=wu().x((I,R)=>u.value(R)).y0(I=>h.value(xe.graphMode=="year"?I[0]/1e3:I[0])).y1(I=>h.value(xe.graphMode=="year"?I[1]/1e3:I[1]));Eu?(S.selectAll("*").remove(),n=S.selectAll(".sourceareas").data(f.value).enter().append("path").attr("fill",(I,R)=>r[l.value[R]]).attr("d",I=>E(I)),n.transition().duration(o).delay(a).ease(qs).attr("d",I=>T(I)),D_()):n.data(f.value).transition().duration(0).ease(qs).attr("d",I=>T(I))}function w(S){Eu?(S.selectAll("*").remove(),i=S.selectAll(".sourcebar").data(f.value).enter().append("g").attr("fill",(E,T)=>r[l.value[T]]).selectAll("rect").data(E=>E).enter().append("rect").attr("x",(E,T)=>on.value(xe.data[T].date)??0).attr("y",()=>h.value(0)).attr("height",0).attr("width",on.value.bandwidth()),i.transition().duration(o).delay(a).ease(qs).attr("height",E=>xe.graphMode=="year"?h.value(E[0]/1e3)-h.value(E[1]/1e3):h.value(E[0])-h.value(E[1])).attr("y",E=>xe.graphMode=="year"?h.value(E[1]/1e3):h.value(E[1])),D_()):(S.selectAll("*").remove(),i=S.selectAll(".sourcebar").data(f.value).enter().append("g").attr("fill",(E,T)=>r[l.value[T]]).selectAll("rect").data(E=>E).enter().append("rect").attr("x",(E,T)=>on.value(xe.data[T].date)??0).attr("y",E=>xe.graphMode=="year"?h.value(E[1]/1e3):h.value(E[1])).attr("width",on.value.bandwidth()).attr("height",E=>xe.graphMode=="year"?h.value(E[0]/1e3)-h.value(E[1]/1e3):h.value(E[0])-h.value(E[1])))}return(S,E)=>(Se(),Re("g",{id:"pgSourceGraph",origin:s.value,transform:"translate("+e.margin.left+","+e.margin.top+")"},null,8,mU))}}),bU=["origin","transform"],_U=Ye({__name:"PGUsageGraph",props:{width:{},height:{},margin:{},stackOrder:{}},setup(e){const t=e,r=[["house","charging","devices","batIn"],["charging","devices","house","batIn"],["devices","charging","house","batIn"]],n={house:"var(--color-house)",charging:"var(--color-charging)",batIn:"var(--color-battery)",batOut:"var(--color-battery)",selfUsage:"var(--color-pv)",evuOut:"var(--color-export)",evuIn:"var(--color-evu)",cp0:"var(--color-cp0)",cp1:"var(--color-cp1)",cp2:"var(--color-cp2)",cp3:"var(--color-cp3)",sh1:"var(--color-sh1)",sh2:"var(--color-sh2)",sh3:"var(--color-sh3)",sh4:"var(--color-sh4)",devices:"var(--color-devices)"};var i,o;const a=De.showAnimations?De.animationDuration:0,s=De.showAnimations?De.animationDelay:0,l=Ce(()=>{const w=Gr("g#pgUsageGraph");xe.graphMode=="month"||xe.graphMode=="year"?m(w):_(w),w.selectAll(".axis").remove();const S=w.append("g").attr("class","axis");return S.call(y.value),S.selectAll(".tick").attr("font-size",12).attr("color","var(--color-axis)"),De.showGrid?S.selectAll(".tick line").attr("stroke","var(--color-grid)").attr("stroke-width","0.5"):S.selectAll(".tick line").attr("stroke","var(--color-bg)"),S.select(".domain").attr("stroke","var(--color-bg)"),"pgUsageGraph.vue"}),u=Ce(()=>j1().keys(d.value)),c=Ce(()=>u.value(xe.data)),f=Ce(()=>dn().domain([0,xe.data.length-1]).range([0,t.width])),h=Ce(()=>dn().range([t.height+10,2*t.height]).domain(xe.graphMode=="year"?[0,Math.ceil(g.value[1]*10)/10]:[0,Math.ceil(g.value[1])])),d=Ce(()=>{if(xe.graphMode!="today"&&xe.graphMode!="day")return r[t.stackOrder];{const w=r[t.stackOrder].slice(),S=w.indexOf("charging");w.splice(S,1);const E=/cp\d+/;let T=[];return xe.data.length>0&&(T=Object.keys(xe.data[0]).reduce((I,R)=>(R.match(E)&&I.push(R),I),[])),T.map((I,R)=>{w.splice(S+R,0,I),n[I]="var(--color-cp"+R+")"}),w}}),g=Ce(()=>{let w=Zi(xe.data,S=>S.house+S.charging+S.batIn+S.devices);return w[0]!=null&&w[1]!=null?(xe.graphMode=="year"&&(w[0]=w[0]/1e3,w[1]=w[1]/1e3),w):[0,0]}),b=Ce(()=>xe.graphMode=="month"||xe.graphMode=="year"?-t.width-t.margin.right-22:-t.width),y=Ce(()=>Zu(h.value).tickSizeInner(b.value).ticks(4).tickFormat(w=>(w==0?"":Math.round(w*10)/10).toLocaleString(void 0)));function _(w){const S=wu().x((T,I)=>f.value(I)).y(h.value(0)),E=wu().x((T,I)=>f.value(I)).y0(T=>h.value(T[0])).y1(T=>h.value(T[1]));De.showAnimations?ca?(w.selectAll("*").remove(),i=w.selectAll(".usageareas").data(c.value).enter().append("path").attr("d",T=>S(T)).attr("fill",(T,I)=>n[d.value[I]]),i.transition().duration(300).delay(100).ease(qs).attr("d",T=>E(T)),$_()):(w.selectAll("*").remove(),w.selectAll(".usageareas").data(c.value).enter().append("path").attr("d",T=>E(T)).attr("fill",(T,I)=>n[d.value[I]])):(w.selectAll("*").remove(),w.selectAll(".usageareas").data(c.value).enter().append("path").attr("d",T=>E(T)).attr("fill",(T,I)=>n[d.value[I]]))}function m(w){ca?(w.selectAll("*").remove(),o=w.selectAll(".usagebar").data(c.value).enter().append("g").attr("fill",(S,E)=>n[r[t.stackOrder][E]]).selectAll("rect").data(S=>S).enter().append("rect").attr("x",(S,E)=>on.value(xe.data[E].date)??0).attr("y",()=>h.value(0)).attr("height",0).attr("width",on.value.bandwidth()),o.transition().duration(a).delay(s).ease(qs).attr("y",S=>xe.graphMode=="year"?h.value(S[0]/1e3):h.value(S[0])).attr("height",S=>xe.graphMode=="year"?h.value(S[1]/1e3)-h.value(S[0]/1e3):h.value(S[1])-h.value(S[0])),$_()):(w.selectAll("*").remove(),o=w.selectAll(".usagebar").data(c.value).enter().append("g").attr("fill",(S,E)=>n[r[t.stackOrder][E]]).selectAll("rect").data(S=>S).enter().append("rect").attr("x",(S,E)=>on.value(xe.data[E].date)??0).attr("y",S=>xe.graphMode=="year"?h.value(S[0]/1e3):h.value(S[0])).attr("height",S=>xe.graphMode=="year"?h.value(S[1]/1e3)-h.value(S[0]/1e3):h.value(S[1])-h.value(S[0])).attr("width",on.value.bandwidth()))}return(w,S)=>(Se(),Re("g",{id:"pgUsageGraph",origin:l.value,transform:"translate("+e.margin.left+","+e.margin.top+")"},null,8,bU))}}),vU=["transform"],wU=["origin","transform"],EU=["origin","transform"],SU={key:0},xU=["width","height"],AU={key:1},TU=["y","width","height"],Mf=12,IU=Ye({__name:"PGXAxis",props:{width:{},height:{},margin:{}},setup(e){const t=e,r=Ce(()=>Bl(s.value).ticks(4).tickSizeInner(a.value).tickFormat(sa("%H:%M"))),n=Ce(()=>iN(s.value).ticks(4).tickSizeInner(a.value+3).tickFormat(sa(""))),i=Ce(()=>Bl(on.value).ticks(4).tickSizeInner(a.value).tickFormat(c=>c.toString())),o=Ce(()=>Bl(on.value).ticks(4).tickSizeInner(a.value).tickFormat(()=>"")),a=Ce(()=>xe.graphMode!=="month"&&xe.graphMode!=="year"?De.showGrid?-(t.height/2-7):-10:0),s=Ce(()=>{let c=Zi(xe.data,f=>f.date);return c[0]&&c[1]?la().domain(c).range([0,t.width]):la().range([0,0])}),l=Ce(()=>{let c=Gr("g#PGXAxis");return c.selectAll("*").remove(),xe.graphMode=="month"||xe.graphMode=="year"?c.call(i.value):c.call(r.value),c.selectAll(".tick > text").attr("fill",(f,h)=>h>0||xe.graphMode=="month"||xe.graphMode=="year"?"var(--color-axis)":"var(--color-bg)").attr("font-size",Mf),De.showGrid?c.selectAll(".tick line").attr("stroke","var(--color-grid)").attr("stroke-width","0.5"):c.selectAll(".tick line").attr("stroke","var(--color-bg)"),c.select(".domain").attr("stroke","var(--color-bg)"),c.append("text").attr("x",-t.margin.left).attr("y",12).attr("fill","var(--color-axis)").attr("font-size",Mf).text(xe.graphMode=="year"?"MW":"kW").attr("text-anchor","start"),"PGXAxis.vue"}),u=Ce(()=>{let c=Gr("g#PGXAxis2");return c.selectAll("*").remove(),xe.graphMode=="month"||xe.graphMode=="year"?c.call(o.value):c.call(n.value),c.selectAll(".tick > text").attr("fill",(f,h)=>h>0||xe.graphMode=="month"||xe.graphMode=="year"?"var(--color-axis)":"var(--color-bg)").attr("font-size",Mf),De.showGrid?(c.selectAll(".tick line").attr("stroke","var(--color-grid)").attr("stroke-width","0.5"),c.select(".domain").attr("stroke","var(--color-bg)")):c.selectAll(".tick line").attr("stroke","var(--color-bg)"),c.select(".domain").attr("stroke","var(--color-bg)"),"PGXAxis2.vue"});return(c,f)=>(Se(),Re("g",{transform:"translate("+e.margin.left+","+e.margin.top+")"},[ye("g",{id:"PGXAxis",class:"axis",origin:l.value,transform:"translate(0,"+(e.height/2-6)+")"},null,8,wU),ye("g",{id:"PGXAxis2",class:"axis",origin:u.value,transform:"translate(0,"+(e.height/2+10)+")"},null,8,EU),we(De).showGrid?(Se(),Re("g",SU,[ye("rect",{x:"0",y:"0",width:e.width,height:e.height/2-10,fill:"none",stroke:"var(--color-grid)","stroke-width":"0.5"},null,8,xU)])):We("",!0),we(De).showGrid?(Se(),Re("g",AU,[ye("rect",{x:"0",y:e.height/2+10,width:e.width,height:e.height/2-10,fill:"none",stroke:"var(--color-grid)","stroke-width":"0.5"},null,8,TU)])):We("",!0)],8,vU))}}),CU=["d"],kU=["d","stroke"],OU=["x","y","text-anchor"],Pf=Ye({__name:"PgSoc",props:{width:{},height:{},margin:{},order:{}},setup(e){const t=e,r=Ce(()=>{let h=Zi(xe.data,d=>d.date);return h[0]&&h[1]?la().domain(h).range([0,t.width]):la().range([0,0])}),n=Ce(()=>dn().range([t.height-10,0]).domain([0,100])),i=Ce(()=>Tg().x(g=>r.value(g.date)).y(g=>n.value(t.order==2?g.batSoc:g["soc"+u.value.connectedVehicle])??n.value(0))(xe.data)??""),o=Ce(()=>t.order==2?"Speicher":u.value.connectedVehicle),a=Ce(()=>t.order==2?"Speicher":u.value.vehicleName),s=Ce(()=>{switch(t.order){case 0:return"var(--color-cp1)";case 1:return"var(--color-cp2)";case 2:return"var(--color-battery)";default:return"red"}}),l=Ce(()=>{switch(t.order){case 0:return t.width-3;case 1:return 3;case 2:return t.width/2;default:return 0}}),u=Ce(()=>{const h=t.order==2?0:t.order;return Object.values(Ve)[h]}),c=Ce(()=>{if(xe.data.length>0){let h;switch(t.order){case 0:return h=xe.data.length-1,n.value(xe.data[h]["soc"+o.value]+2);case 1:return h=0,n.value(xe.data[h]["soc"+o.value]+2);case 2:return h=Math.round(xe.data.length/2),n.value((xe.data[h]?.batSoc??0)+2);default:return 0}}else return 0}),f=Ce(()=>{switch(t.order){case 0:return"end";case 1:return"start";case 2:return"middle";default:return"middle"}});return(h,d)=>(Se(),Re(ut,null,[ye("path",{class:"soc-baseline",d:i.value,stroke:"var(--color-bg)","stroke-width":"1",fill:"none"},null,8,CU),ye("path",{class:"soc-dashes",d:i.value,stroke:s.value,"stroke-width":"1",style:{strokeDasharray:"3,3"},fill:"none"},null,8,kU),ye("text",{class:"cpname",x:l.value,y:c.value,style:xt({fill:s.value,fontSize:10}),"text-anchor":f.value},qe(a.value),13,OU)],64))}}),MU=["transform"],PU=Ye({__name:"PgSocAxis",props:{width:{},height:{},margin:{}},setup(e){const t=e,r=Ce(()=>dn().range([t.height-10,0]).domain([0,100])),n=Ce(()=>oN(r.value).ticks(5).tickFormat(o=>o.toString()+"%"));function i(){let o=Gr("g#PGSocAxis");o.call(n.value),o.selectAll(".tick").attr("font-size",12),o.selectAll(".tick line").attr("stroke","var(--color-bg)"),o.select(".domain").attr("stroke","var(--color-bg)")}return es(()=>{i()}),(o,a)=>(Se(),Re("g",{id:"PGSocAxis",class:"axis",transform:"translate("+(e.width-20)+",0)"},null,8,MU))}}),RU={class:"btn-group m-0",role:"group","aria-label":"radiobar"},NU=["id","value"],LU=Ye({__name:"RadioBarInput",props:{options:{},modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=t,i=Ce({get(){return r.modelValue},set(s){n("update:modelValue",s)}});function o(s){let l=r.options[s].color?r.options[s].color:"var(--color-fg)";return r.options[s].active?{color:"var(--color-bg)",background:l}:{color:l}}function a(s){let l=s.target;for(;l&&!l.value&&l.parentElement;)l=l.parentElement;l.value&&(i.value=l.value)}return(s,l)=>(Se(),Re("div",null,[ye("div",RU,[(Se(!0),Re(ut,null,Wr(e.options,(u,c)=>(Se(),Re("button",{id:"radio-"+u.value,key:c,class:It(["btn btn-outline-secondary btn-sm radiobutton mx-0 mb-0 px-2",u.value==i.value?"active":""]),value:u.value,style:xt(o(c)),onClick:a},[ye("span",{style:xt(o(c)),class:"scaled d-flex flex-column pt-2"},[u.icon?(Se(),Re("i",{key:0,class:It(["fa-solid",u.icon])},null,2)):We("",!0),Xe(" "+qe(u.text),1)],4)],14,NU))),128))])]))}}),K1=rt(LU,[["__scopeId","data-v-270067ed"]]),BU={key:0,class:"fa-solid fa-xl fa-chevron-circle-down p-1",style:{color:"var(--color-bg)"}},DU=Ye({__name:"PgSelector",props:{widgetid:{},showLeftButton:{type:Boolean},showRightButton:{type:Boolean},ignoreLive:{type:Boolean}},emits:["shiftLeft","shiftRight","shiftUp","shiftDown"],setup(e){const t=e,r=zt(0),n=Ce(()=>{switch(xe.graphMode){case"live":return t.ignoreLive?"heute":`${Ot.duration} min`;case"today":return"heute";case"day":return wt.date.getDate()+"."+(wt.date.getMonth()+1)+".";case"month":return xA(On.month-1,On.year);case"year":return di.year.toString();default:return"???"}}),i=["live","today","day","month","year"],o=["Live","Heute","Tag","Monat","Jahr"],a=Ce({get(){return xe.graphMode},set(y){switch(y){case"day":u();break;case"today":c();break;case"live":l();break;case"month":f();break;case"year":h()}}});function s(){r.value+=1,r.value>1&&(r.value=0)}function l(){xe.graphMode!="live"&&(xe.graphMode="live",Rt())}function u(){xe.graphMode!="day"&&xe.graphMode!="today"&&(xe.graphMode="day",Rt())}function c(){xe.graphMode!="today"&&(xe.graphMode="today",gU(new Date),Rt())}function f(){xe.graphMode!="month"&&(xe.graphMode="month",Rt())}function h(){xe.graphMode!="year"&&(xe.graphMode="year",Rt())}const d=Ce(()=>r.value>0?{border:"1px solid var(--color-frame)"}:""),g=Ce(()=>r.value==1?"justify-content-between":"justify-content-end"),b=Ce(()=>r.value==1?"justify-content-between":"justify-content-center");return(y,_)=>(Se(),Re("div",{class:"d-flex flex-column justify-content-center pgselector rounded",style:xt(d.value)},[r.value==2?(Se(),Ke(K1,{key:0,id:"pgm2",modelValue:a.value,"onUpdate:modelValue":_[0]||(_[0]=m=>a.value=m),class:"m-2",options:i.map((m,w)=>({text:o[w],value:m,color:"var(--color-menu)",active:m==we(xe).graphMode}))},null,8,["modelValue","options"])):We("",!0),r.value==1?(Se(),Re("span",{key:1,type:"button",class:It(["arrowButton d-flex align-self-center mb-3 mt-3",{disabled:!t.showLeftButton}]),onClick:_[1]||(_[1]=m=>y.$emit("shiftUp"))},[..._[6]||(_[6]=[ye("i",{class:"fa-solid fa-xl fa-chevron-circle-up"},null,-1)])],2)):We("",!0),ye("div",{class:It(["d-flex align-items-center",b.value])},[r.value==1?(Se(),Re("span",{key:0,type:"button",class:It(["p-1",{disabled:!t.showLeftButton}]),onClick:_[2]||(_[2]=m=>y.$emit("shiftLeft"))},[..._[7]||(_[7]=[ye("span",{class:"fa-solid fa-xl fa-chevron-circle-left arrowButton"},null,-1)])],2)):We("",!0),r.value<2?(Se(),Re("span",{key:1,type:"button",class:"btn-outline-secondary p-2 px-3 badge rounded-pill datebadge",onClick:s},qe(n.value),1)):We("",!0),r.value==1?(Se(),Re("span",{key:2,id:"graphRightButton",type:"button",class:It(["arrowButton fa-solid fa-xl fa-chevron-circle-right p-1",{disabled:!t.showRightButton}]),onClick:_[3]||(_[3]=m=>y.$emit("shiftRight"))},null,2)):We("",!0)],2),ye("div",{class:It(["d-flex align-items-center",g.value])},[r.value==1?(Se(),Re("span",BU)):We("",!0),r.value==1?(Se(),Re("span",{key:1,id:"graphLeftButton",type:"button",class:It(["arrowButton fa-solid fa-xl fa-chevron-circle-down p-1",{disabled:!t.showLeftButton}]),onClick:_[4]||(_[4]=m=>y.$emit("shiftDown"))},null,2)):We("",!0),r.value>0?(Se(),Re("span",{key:2,type:"button",class:"p-1",onClick:_[5]||(_[5]=m=>r.value=0)},[..._[8]||(_[8]=[ye("span",{class:"fa-solid fa-xl fa-circle-check"},null,-1)])])):We("",!0)],2)],4))}}),z1=rt(DU,[["__scopeId","data-v-7fd067cd"]]),$U={class:"d-flex justify-content-end"},UU={class:"grid-col-12"},FU=["viewBox"],jU=["transform"],WU=2,VU="Leistung / Ladestand ",HU=Ye({__name:"PowerGraph",setup(e){function t(){let r=De.usageStackOrder+1;r>WU&&(r=0),De.usageStackOrder=r,uU(!0)}return(r,n)=>(Se(),Ke(sc,null,{title:Ue(()=>[Xe(qe(VU))]),buttons:Ue(()=>[ye("div",$U,[Me(z1,{widgetid:"graphsettings","show-left-button":!0,"show-right-button":!0,"ignore-live":!1,onShiftLeft:we(kg),onShiftRight:we(H1),onShiftUp:we(q1),onShiftDown:we(G1)},null,8,["onShiftLeft","onShiftRight","onShiftUp","onShiftDown"])])]),default:Ue(()=>[ye("div",UU,[ye("figure",{id:"powergraph",class:"p-0 m-0 align-self-stretch",onClick:t},[(Se(),Re("svg",{viewBox:"0 0 "+we(En)+" "+we(oi)},[Me(yU,{width:we(En)-we(Ze).left-2*we(Ze).right,height:(we(oi)-we(Ze).top-we(Ze).bottom)/2,margin:we(Ze)},null,8,["width","height","margin"]),Me(_U,{width:we(En)-we(Ze).left-2*we(Ze).right,height:(we(oi)-we(Ze).top-we(Ze).bottom)/2,margin:we(Ze),"stack-order":we(De).usageStackOrder},null,8,["width","height","margin","stack-order"]),Me(IU,{width:we(En)-we(Ze).left-2*we(Ze).right,height:we(oi)-we(Ze).top-we(Ze).bottom,margin:we(Ze),"graph-data":we(xe)},null,8,["width","height","margin","graph-data"]),ye("g",{transform:"translate("+we(Ze).left+","+we(Ze).top+")"},[(we(xe).graphMode=="day"||we(xe).graphMode=="today"||we(xe).graphMode=="live")&&Object.values(we(Ve)).length>0?(Se(),Ke(Pf,{key:0,width:we(En)-we(Ze).left-2*we(Ze).right,height:(we(oi)-we(Ze).top-we(Ze).bottom)/2,margin:we(Ze),order:0},null,8,["width","height","margin"])):We("",!0),(we(xe).graphMode=="day"||we(xe).graphMode=="today"||we(xe).graphMode=="live")&&Object.values(we(Ve)).length>1?(Se(),Ke(Pf,{key:1,width:we(En)-we(Ze).left-2*we(Ze).right,height:(we(oi)-we(Ze).top-we(Ze).bottom)/2,margin:we(Ze),order:1},null,8,["width","height","margin"])):We("",!0),["day","today","live"].includes(we(xe).graphMode)&&we(ht).isBatteryConfigured?(Se(),Ke(Pf,{key:2,width:we(En)-we(Ze).left-2*we(Ze).right,height:(we(oi)-we(Ze).top-we(Ze).bottom)/2,margin:we(Ze),order:2},null,8,["width","height","margin"])):We("",!0),["day","today","live"].includes(we(xe).graphMode)?(Se(),Ke(PU,{key:3,width:we(En)-we(Ze).left-we(Ze).right,height:(we(oi)-we(Ze).top-we(Ze).bottom)/2,margin:we(Ze)},null,8,["width","height","margin"])):We("",!0)],8,jU)],8,FU))])])]),_:1}))}}),qU=rt(HU,[["__scopeId","data-v-ba892fa4"]]),GU=["id"],KU=["x","width","height","fill"],zU=["x","width","height"],YU=["x","y","width","height"],QU=Ye({__name:"EmBar",props:{item:{},xScale:{},yScale:{},margin:{},height:{},barcount:{},autarchy:{},autText:{}},setup(e){const t=e,r=Ce(()=>t.height-t.yScale(t.item.energy)-t.margin.top-t.margin.bottom),n=Ce(()=>t.item.energyPv>0?t.height-t.yScale(t.item.energyPv)-t.margin.top-t.margin.bottom:0),i=Ce(()=>t.item.energyPv>0?t.height-t.yScale(t.item.energyBat)-t.margin.top-t.margin.bottom:0);return(o,a)=>(Se(),Re("g",{id:"bar-"+t.item.name,transform:"scale(1,-1) translate (0,-445)"},[ye("rect",{class:"bar",x:t.xScale(e.item.name),y:"0",width:t.xScale.bandwidth(),height:r.value,fill:e.item.color},null,8,KU),ye("rect",{class:"bar",x:t.xScale(e.item.name)+t.xScale.bandwidth()/6,y:"0",width:t.xScale.bandwidth()*2/3,height:n.value,fill:"var(--color-pv)","fill-opacity":"66%"},null,8,zU),ye("rect",{class:"bar",x:t.xScale(e.item.name)+t.xScale.bandwidth()/6,y:n.value,width:t.xScale.bandwidth()*2/3,height:i.value,fill:"var(--color-battery)","fill-opacity":"66%"},null,8,YU)],8,GU))}}),JU={id:"emBargraph"},XU=Ye({__name:"EMBarGraph",props:{plotdata:{},xScale:{},yScale:{},margin:{},height:{}},setup(e){const t=e;function r(i){if(i.name=="PV"){const o=xe.graphMode=="live"||xe.graphMode=="day"?ot:He.items,s=(xe.graphMode=="live"||xe.graphMode=="day"?Qe:He.items).evuOut.energy,l=o.pv.energy;return Math.round((l-s)/l*100)}else if(i.name=="Netz"){const o=xe.graphMode=="live"||xe.graphMode=="day"?ot:He.items,a=xe.graphMode=="live"||xe.graphMode=="day"?Qe:He.items,s=a.evuOut.energy,l=o.evuIn.energy,u=o.pv.energy,c=o.batOut.energy,f=a.batIn.energy;return Math.round((u+c-s-f)/(u+c+l-s-f)*100)}else return i.pvPercentage}function n(i){return i.name=="PV"?"Eigen":"Aut"}return(i,o)=>(Se(),Re("g",JU,[(Se(!0),Re(ut,null,Wr(t.plotdata,(a,s)=>(Se(),Re("g",{key:s},[Me(QU,{item:a,"x-scale":t.xScale,"y-scale":t.yScale,margin:t.margin,height:t.height,barcount:t.plotdata.length,"aut-text":n(a),autarchy:r(a)},null,8,["item","x-scale","y-scale","margin","height","barcount","aut-text","autarchy"])]))),128)),o[0]||(o[0]=ye("animateTransform",{"attribute-name":"transform",type:"scale",from:"1 0",to:"1 1",begin:"0s",dur:"2s"},null,-1))]))}}),ZU=["origin"],e3=Ye({__name:"EMYAxis",props:{yScale:{type:[Function,Object]},width:{},fontsize:{}},setup(e){const t=e,r=Ce(()=>Zu(t.yScale).tickFormat(i=>i>0?(i/1e3).toString():"").ticks(6).tickSizeInner(-t.width)),n=Ce(()=>{const i=Gr("g#emYAxis");return i.attr("class","axis").call(r.value),i.append("text").attr("y",6).attr("dy","0.71em").attr("text-anchor","end").text("energy"),i.selectAll(".tick").attr("font-size",t.fontsize),De.showGrid?i.selectAll(".tick line").attr("stroke","var(--color-grid)").attr("stroke-width","0.5"):i.selectAll(".tick line").attr("stroke","var(--color-bg)"),i.select(".domain").attr("stroke","var(--color-bg)"),"emYAxis.vue"});return(i,o)=>(Se(),Re("g",{id:"emYAxis",class:"axis",origin:n.value},null,8,ZU))}}),t3=["id"],r3=["x","y","font-size"],n3=["x","y","font-size","fill"],i3=["x","y","font-size","fill"],o3=Ye({__name:"EmLabel",props:{item:{},xScale:{},yScale:{},margin:{},height:{},barcount:{},autarchy:{},autText:{}},setup(e){const t=e,r=Ce(()=>t.autarchy?t.yScale(t.item.energy)-25:t.yScale(t.item.energy)-10),n=Ce(()=>{let l=16,u=t.barcount;return u<=5?l=16:u==6?l=14:u>6&&u<=8?l=13:u==9?l=11:u==10?l=10:l=9,l}),i=Ce(()=>{let l=12,u=t.barcount;return u<=5?l=12:u==6?l=11:u>6&&u<=8||u==9?l=8:u==10?l=7:l=6,l});function o(l,u){return u.length>i.value?u.substring(0,i.value)+".":u}function a(){return t.autarchy?t.autText+": "+t.autarchy.toLocaleString(void 0)+" %":""}function s(){return"var(--color-pv)"}return(l,u)=>(Se(),Re("g",{id:"barlabel-"+t.item.name},[ye("text",{x:t.xScale(e.item.name)+t.xScale.bandwidth()/2,y:r.value,"font-size":n.value,"text-anchor":"middle",fill:"var(--color-menu)"},qe(we(Op)(e.item.energy,we(De).decimalPlaces,!1)),9,r3),ye("text",{x:t.xScale(e.item.name)+t.xScale.bandwidth()/2,y:t.yScale(e.item.energy)-10,"font-size":n.value-2,"text-anchor":"middle",fill:s()},qe(a()),9,n3),ye("text",{x:t.xScale(e.item.name)+t.xScale.bandwidth()/2,y:t.height-t.margin.bottom-5,"font-size":n.value,"text-anchor":"middle",fill:e.item.color,class:It(e.item.icon.length<=2?"fas":"")},qe(o(e.item.name,e.item.icon)),11,i3)],8,t3))}}),s3={id:"emBarLabels"},a3=Ye({__name:"EMLabels",props:{plotdata:{},xScale:{},yScale:{},height:{},margin:{}},setup(e){const t=e;function r(i){if(i.name=="PV"){const o=xe.graphMode=="live"||xe.graphMode=="day"?ot:He.items,s=(xe.graphMode=="live"||xe.graphMode=="day"?Qe:He.items).evuOut.energy,l=o.pv.energy;return Math.round((l-s)/l*100)}else if(i.name=="Netz"){const o=xe.graphMode=="live"||xe.graphMode=="day"?ot:He.items,a=xe.graphMode=="live"||xe.graphMode=="day"?Qe:He.items,s=a.evuOut.energy,l=o.evuIn.energy,u=o.pv.energy,c=o.batOut.energy,f=a.batIn.energy;return u+c-s-f>0?Math.round((u+c-s-f)/(u+c+l-s-f)*100):0}else return i.pvPercentage}function n(i){return i.name=="PV"?"Eigen":"Aut"}return(i,o)=>(Se(),Re("g",s3,[(Se(!0),Re(ut,null,Wr(t.plotdata,(a,s)=>(Se(),Re("g",{key:s},[Me(o3,{item:a,"x-scale":t.xScale,"y-scale":t.yScale,margin:t.margin,height:t.height,barcount:t.plotdata.length,"aut-text":n(a),autarchy:r(a)},null,8,["item","x-scale","y-scale","margin","height","barcount","aut-text","autarchy"])]))),128))]))}}),l3={class:"grid-col-12"},u3={id:"energymeter",class:"energymeter p-0 m-0 align-self-stretch"},c3={viewBox:"0 0 500 500"},f3=["transform"],h3=["x"],d3={key:0},U_=500,Rf=500,F_=12,p3="Energie",g3=Ye({__name:"EnergyMeter",setup(e){const t={top:25,bottom:30,left:25,right:0},r=Ce(()=>{let a=Object.values(ot),s=o.value,l=He.values(),u=[];switch(De.debug&&(console.debug("----------------------- source summary -----------------"),console.debug(ot),console.debug("----------------------- usage details ------------------"),console.debug(o.value),console.debug("----------------------- historic summary ---------------"),console.debug(He),console.debug("--------------------------------------------------------")),iu.value==!0&&(iu.value=!1),xe.graphMode){default:case"live":case"today":u=a.concat(s).filter(c=>c.energy>0);break;case"day":case"month":case"year":l.length==0?Gs.value=!0:(Gs.value=!1,u=l.filter(c=>c.energy>0))}return u}),n=Ce(()=>mu().range([0,U_-t.left-t.right]).domain(r.value.map(a=>a.name)).padding(.4)),i=Ce(()=>dn().range([Rf-t.bottom-t.top,15]).domain([0,QR(r.value,a=>a.energy)])),o=Ce(()=>{const a=Object.values(Ve).length,s=[...Nt.values()].filter(l=>l.configured).length;return[Qe.evuOut,Qe.devices,Qe.charging].concat(a>1?Object.values(Ve).map(l=>l.toPowerItem()):[]).concat(s>1?[...Nt.values()].filter(l=>l.configured&&l.showInGraph):[]).concat([Qe.batIn,Qe.house])});return(a,s)=>(Se(),Ke(sc,null,{title:Ue(()=>[Xe(qe(p3))]),buttons:Ue(()=>[Me(z1,{widgetid:"graphsettings","show-left-button":!0,"show-right-button":!0,"ignore-live":!0,onShiftLeft:we(kg),onShiftRight:we(H1),onShiftUp:we(q1),onShiftDown:we(G1)},null,8,["onShiftLeft","onShiftRight","onShiftUp","onShiftDown"])]),default:Ue(()=>[ye("div",l3,[ye("figure",u3,[(Se(),Re("svg",c3,[ye("g",{transform:"translate("+t.left+","+t.top+")"},[Me(XU,{plotdata:r.value,"x-scale":n.value,"y-scale":i.value,height:Rf,margin:t},null,8,["plotdata","x-scale","y-scale"]),Me(e3,{"y-scale":i.value,width:U_,fontsize:F_,config:we(De)},null,8,["y-scale","config"]),ye("text",{x:-t.left,y:"-15",fill:"var(--color-axis)","font-size":F_},qe(we(xe).graphMode=="year"?"MWh":"kWh"),9,h3),Me(a3,{plotdata:r.value,"x-scale":n.value,"y-scale":i.value,height:Rf,margin:t,config:we(De)},null,8,["plotdata","x-scale","y-scale","config"])],8,f3)]))])]),we(Gs)?(Se(),Re("p",d3,"No data")):We("",!0)]),_:1}))}}),m3=rt(g3,[["__scopeId","data-v-35f92695"]]),y3=["id"],b3={class:"modal-dialog modal-lg modal-fullscreen-lg-down"},_3={class:"modal-content"},v3={class:"modal-header"},w3={class:"modal-title scaled"},E3=["id"],S3=Ye({__name:"ModalComponent",props:{modalId:{}},setup(e){const t=e;return(r,n)=>(Se(),Re("div",{id:t.modalId,class:"modal fade"},[ye("div",b3,[ye("div",_3,[ye("div",v3,[ye("h3",w3,[kr(r.$slots,"title",{},void 0)]),n[0]||(n[0]=ye("button",{type:"button",class:"btn-close buttonTextSize d-flex justify-content-center pt-3 pb-0","data-bs-dismiss":"modal"},[ye("i",{class:"fa-solid fa-lg fa-circle-check m-0 p-0"})],-1))]),ye("div",{id:"modal-body-"+t.modalId,class:"modal-body"},[kr(r.$slots,"default",{},void 0)],8,E3),n[1]||(n[1]=ye("div",{class:"modal-footer"},null,-1))])])],8,y3))}}),Nf=rt(S3,[["__scopeId","data-v-9e5993e8"]]),x3={class:"digit scaled",type:"button"},A3=Ye({__name:"PadButton",props:{modelValue:{},color:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=zt(!1);function i(){n.value=!0,a("update:modelValue",r.modelValue),setTimeout(()=>{n.value=!1},300)}const o=Ce(()=>n.value?{"background-color":"white",color:"black"}:{"background-color":r.color??"var(--color-axis)"}),a=t;return(s,l)=>(Se(),Re("div",{class:"padbutton",style:xt(o.value),onClick:i},[ye("span",x3,[kr(s.$slots,"default",{},void 0)])],4))}}),Xa=rt(A3,[["__scopeId","data-v-cc256a6f"]]),T3={class:"numberpad"},I3={class:"codedisplay scaled"},C3={class:"numberentry"},k3=Ye({__name:"NumberPad",props:{modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=zt(e.modelValue),i=t,o=Ce(()=>n.value.length==0?"Bitte geben Sie die PIN ein":"*".repeat(n.value.length));function a(s){s==-1?n.value=n.value.slice(0,-1):s==-2?(i("update:modelValue",n.value),n.value=""):n.value=n.value+s.toString()}return(s,l)=>(Se(),Re("div",T3,[ye("p",I3,qe(o.value),1),ye("div",C3,[(Se(),Re(ut,null,Wr(9,u=>Me(Xa,{key:u,"model-value":u,"onUpdate:modelValue":a},{default:Ue(()=>[Xe(qe(u),1)]),_:2},1032,["model-value"])),64)),Me(Xa,{"model-value":0,"onUpdate:modelValue":a},{default:Ue(()=>[...l[0]||(l[0]=[Xe("0",-1)])]),_:1}),Me(Xa,{"model-value":-1,color:"var(--color-devices)","onUpdate:modelValue":a},{default:Ue(()=>[...l[1]||(l[1]=[ye("span",{class:"fas fa-delete-left"},null,-1)])]),_:1}),Me(Xa,{"model-value":-2,color:"var(--color-devices)","data-bs-dismiss":"modal","onUpdate:modelValue":a},{default:Ue(()=>[...l[2]||(l[2]=[ye("span",{class:"fas fa-circle-check"},null,-1)])]),_:1})])]))}}),O3=rt(k3,[["__scopeId","data-v-63c8fa5c"]]),M3={class:"statustable"},P3={key:0,class:"controlbuttons d-flex justify-content-between p-5"},R3={key:1,class:"confirmationBox rounded m-5 p-5 d-flex flex-column align-items-center"},N3={class:"d-flex justify-content-between mt-3"},L3={key:2,class:"confirmationBox rounded m-5 p-5 d-flex flex-column align-items-center"},B3={class:"d-flex justify-content-between mt-3"},D3={key:3,class:"confirmationBox rounded m-5 p-5 d-flex flex-column align-items-center"},$3={key:4,class:"confirmationBox rounded m-5 p-5 d-flex flex-column align-items-center"},U3=Ye({__name:"StatusPage",setup(e){let t=zt(0);function r(){t.value=4,hi.parentChargePoint1!==void 0?(console.log("Shutting down secondary charge point: ",hi.parentChargePoint1),ji("chargepointShutdown",{chargePoint:hi.parentChargePoint1})):(console.log("Shutting down primary system"),ji("systemShutdown"))}function n(){t.value=3,hi.parentChargePoint1!==void 0?(console.log("Rebooting secondary charge point:",hi.parentChargePoint1),ji("chargepointReboot",{chargePoint:hi.parentChargePoint1})):(console.log("Rebooting primary system"),ji("systemReboot"))}function i(){location.reload()}return(o,a)=>(Se(),Re(ut,null,[ye("div",M3,[a[7]||(a[7]=ye("span",{class:"header"},"IP-Adresse:",-1)),ye("span",null,qe(we(ht).ipAddress),1),a[8]||(a[8]=ye("span",{class:"header"},"Systemzeit:",-1)),ye("span",null,qe(new Date(we(ht).systemTime*1e3).toLocaleString(void 0)),1),a[9]||(a[9]=ye("span",{class:"header"},"Version:",-1)),ye("span",null,qe(we(ht).version),1),a[10]||(a[10]=ye("span",{class:"header"},"Version (Details):",-1)),ye("span",null,qe(we(ht).versionDetails),1),a[11]||(a[11]=ye("span",{class:"header"},"Entwicklungszweig:",-1)),ye("span",null,qe(we(ht).devBranch),1)]),we(t)==0?(Se(),Re("div",P3,[ye("button",{class:"btn controlbutton",style:{"background-color":"var(--color-battery)"},onClick:a[0]||(a[0]=s=>i())},[...a[12]||(a[12]=[ye("i",{class:"fa-solid fa-rotate-left"},null,-1),Xe(" Display neu laden ",-1)])]),ye("button",{class:"btn controlbutton",style:{"background-color":"var(--color-evu)"},onClick:a[1]||(a[1]=s=>Ct(t)?t.value=1:t=1)},[...a[13]||(a[13]=[ye("i",{class:"fa-solid fa-power-off"},null,-1),Xe(" openWB neu starten ",-1)])]),ye("button",{class:"btn controlbutton",style:{"background-color":"var(--color-evu)"},onClick:a[2]||(a[2]=s=>Ct(t)?t.value=2:t=2)},[...a[14]||(a[14]=[ye("i",{class:"fa-solid fa-power-off"},null,-1),Xe(" openWB abschalten ",-1)])])])):We("",!0),we(t)==1?(Se(),Re("div",R3,[a[15]||(a[15]=ye("span",{class:"confirmTitle"},"Neustart",-1)),a[16]||(a[16]=ye("span",{class:"confirmQuestion"},"Die openWB jetzt neu starten?",-1)),ye("div",N3,[ye("button",{class:"btn cancelButton mx-3 px-3",onClick:a[3]||(a[3]=s=>Ct(t)?t.value=0:t=0)}," Abbrechen "),ye("button",{class:"btn confirmButton mx-3 px-3",onClick:a[4]||(a[4]=s=>n())}," Neustart ")])])):We("",!0),we(t)==2?(Se(),Re("div",L3,[a[17]||(a[17]=ye("span",{class:"confirmTitle"},"Abschalten",-1)),a[18]||(a[18]=ye("span",{class:"confirmQuestion"},"Die openWB jetzt abschalten?",-1)),ye("div",B3,[ye("button",{class:"btn cancelButton mx-3 px-3",onClick:a[5]||(a[5]=s=>Ct(t)?t.value=0:t=0)}," Abbrechen "),ye("button",{class:"btn confirmButton mx-3 px-3",onClick:a[6]||(a[6]=s=>r())}," Abschalten ")])])):We("",!0),we(t)==3?(Se(),Re("div",D3,[...a[19]||(a[19]=[ye("span",{class:"confirmTitle"},"Die openWB startet jetzt neu. Bitte warten.",-1)])])):We("",!0),we(t)==4?(Se(),Re("div",$3,[...a[20]||(a[20]=[ye("span",{class:"confirmTitle"},"Die openWB wird heruntergefahren. Zum Starten die Stromversorgung aus- und wieder einschalten.",-1)])])):We("",!0)],64))}}),F3=rt(U3,[["__scopeId","data-v-74ffcddc"]]),j3={class:"d-flex align-items-baseline m-0 p-0 scaled"},W3={class:"configwidget ms-1 mb-2 p-0 pt-2 d-flex justify-content-stretch align-items-center"},V3={class:"configslot justify-content-stretch d-flex"},H3=Ye({__name:"ConfigItem",props:{title:{},infotext:{},icon:{},iconcolor:{},fullwidth:{type:Boolean}},setup(e){const t=e;return(r,n)=>(Se(),Re(ut,null,[ye("span",j3,[t.icon?(Se(),Re("i",{key:0,class:It(["fa-solid fa-sm m-0 p-0 me-2 item-icon",t.icon]),style:xt({color:t.iconcolor?t.iconcolor:"var(--color-charging)"})},null,6)):We("",!0),Xe(" "+qe(e.title),1)]),ye("div",W3,[ye("span",V3,[kr(r.$slots,"default",{},void 0)])])],64))}}),gt=rt(H3,[["__scopeId","data-v-b438f667"]]),q3={class:"rangewidget d-flex flex-column"},G3={class:"rangeslider d-flex flex-fill justify-content-between align-items-center"},K3={class:"d-flex flex-fill flex-column justify-content-center m-0 p-0"},z3={key:0,id:"rangeIndicator",class:"rangeIndicator"},Y3={viewBox:"0 0 100 2"},Q3=["width"],J3=["x","width"],X3=["x","width"],Z3=["id","min","max","step"],eF={class:"d-flex justify-content-between align-items-center"},tF={class:"minlabel ps-4"},rF={class:"valuelabel"},nF={class:"maxlabel pe-4"},iF=Ye({__name:"RangeInput",props:{id:{},min:{},max:{},step:{},unit:{},decimals:{},showSubrange:{type:Boolean},subrangeMin:{},subrangeMax:{},modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=r.decimals??0,i=t,o=Ce({get(){return Math.round(r.modelValue*Math.pow(10,n))/Math.pow(10,n)},set(h){i("update:modelValue",h)}});function a(){o.value>r.min&&(o.value=Math.round((o.value-r.step)*Math.pow(10,n))/Math.pow(10,n))}function s(){o.valuedn().domain([r.min,r.max]).range([0,100])),u=Ce(()=>l.value(r.subrangeMin?r.subrangeMin:0)),c=Ce(()=>r.subrangeMin&&r.subrangeMax?l.value(r.subrangeMax)-l.value(r.subrangeMin):0),f=Ce(()=>r.subrangeMax&&r.max?l.value(r.max)-l.value(r.subrangeMax):0);return(h,d)=>(Se(),Re("span",q3,[ye("span",G3,[ye("span",{type:"button",class:"minusButton",onClick:a},[...d[1]||(d[1]=[ye("i",{class:"fa fa-xl fa-minus-square me-2"},null,-1)])]),ye("div",K3,[r.showSubrange?(Se(),Re("figure",z3,[(Se(),Re("svg",Y3,[ye("g",null,[ye("rect",{class:"below",x:0,y:"0",width:u.value,height:"2",rx:"1",ry:"1",fill:"var(--color-evu)"},null,8,Q3),ye("rect",{class:"bar",x:u.value,y:"0",width:c.value,height:"2",rx:"1",ry:"1",fill:"var(--color-charging)"},null,8,J3),ye("rect",{class:"above",x:u.value+c.value,y:"0",width:f.value,height:"2",rx:"1",ry:"1",fill:"var(--color-pv)"},null,8,X3)])]))])):We("",!0),$s(ye("input",{id:e.id,"onUpdate:modelValue":d[0]||(d[0]=g=>o.value=g),type:"range",class:"form-range flex-fill",min:e.min,max:e.max,step:e.step},null,8,Z3),[[gA,o.value,void 0,{number:!0}]])]),ye("span",{type:"button",class:"plusButton",onClick:s},[...d[2]||(d[2]=[ye("i",{class:"fa fa-xl fa-plus-square ms-2"},null,-1)])])]),ye("span",eF,[ye("span",tF,qe(e.min),1),ye("span",rF,qe(o.value)+" "+qe(e.unit),1),ye("span",nF,qe(e.max),1)])]))}}),yr=rt(iF,[["__scopeId","data-v-41dc3794"]]),oF=["id","value"],sF=Ye({__name:"RadioInput",props:{options:{},modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=t,i=Ce({get(){return r.modelValue},set(s){console.log(r.options),console.log("set value",s),n("update:modelValue",s)}});function o(s){return r.options[s][2]?{color:r.options[s][2]}:{color:"var(--color-fg)"}}function a(s){console.log(s);let l=s.target;for(;l&&!l.value&&l.parentElement;)l=l.parentElement;l.value&&(typeof r.options[0][1]=="number"?i.value=Number(l.value):i.value=l.value)}return(s,l)=>(Se(),Re("div",null,[(Se(!0),Re(ut,null,Wr(e.options,(u,c)=>(Se(),Re("button",{id:"radio-"+u[1],key:c,class:It(["btn btn-outline-secondary radiobutton me-2 mb-0 px-2",u[1]==i.value?"active":""]),value:u[1],style:xt(o(c)),onClick:a},[ye("span",{style:xt(o(c)),class:"scaled"},[u[3]?(Se(),Re("i",{key:0,class:It(["fa-solid",u[3]])},null,2)):We("",!0),Xe(" "+qe(u[0]),1)],4)],14,oF))),128))]))}}),bi=rt(sF,[["__scopeId","data-v-1e5bd3af"]]),aF={class:"instantsettings"},lF={key:0,class:"fullwidth"},uF=Ye({__name:"ConfigInstant",props:{chargepointId:{}},setup(e){const t=e,r=Ce(()=>Ve[t.chargepointId]),n=[{name:"keine",id:"none"},{name:"EV-SoC",id:"soc"},{name:"Energiemenge",id:"amount"}],i=Ce({get(){return r.value.instantMaxEnergy/1e3},set(o){r.value.instantMaxEnergy=o*1e3}});return(o,a)=>(Se(),Re("div",aF,[Me(gt,{title:"Stromstärke",icon:"fa-bolt",fullwidth:!0},{default:Ue(()=>[Me(yr,{id:"targetCurrent",modelValue:r.value.instantTargetCurrent,"onUpdate:modelValue":a[0]||(a[0]=s=>r.value.instantTargetCurrent=s),min:6,max:32,step:1,unit:"A"},null,8,["modelValue"])]),_:1}),Me(gt,{title:"Anzahl Phasen",icon:"fa-plug",fullwidth:!0},{default:Ue(()=>[Me(bi,{id:"targetPhases",modelValue:r.value.instantTargetPhases,"onUpdate:modelValue":a[1]||(a[1]=s=>r.value.instantTargetPhases=s),options:[["Eine",1],["Max",3],["Auto",0]]},null,8,["modelValue"])]),_:1}),r.value.instantChargeLimitMode!="none"?(Se(),Re("hr",lF)):We("",!0),Me(gt,{title:"Begrenzung",icon:"fa-hand",fullwidth:!0},{default:Ue(()=>[Me(bi,{modelValue:r.value.instantChargeLimitMode,"onUpdate:modelValue":a[2]||(a[2]=s=>r.value.instantChargeLimitMode=s),options:n.map(s=>[s.name,s.id])},null,8,["modelValue","options"])]),_:1}),r.value.instantChargeLimitMode=="soc"?(Se(),Ke(gt,{key:1,title:"Maximaler SoC",icon:"fa-sliders",fullwidth:!0},{default:Ue(()=>[Me(yr,{id:"maxSoc",modelValue:r.value.instantTargetSoc,"onUpdate:modelValue":a[3]||(a[3]=s=>r.value.instantTargetSoc=s),min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])]),_:1})):We("",!0),r.value.instantChargeLimitMode=="amount"?(Se(),Ke(gt,{key:2,title:"Zu ladende Energie",icon:"fa-sliders",fullwidth:!0},{default:Ue(()=>[Me(yr,{id:"maxEnergy",modelValue:i.value,"onUpdate:modelValue":a[4]||(a[4]=s=>i.value=s),min:0,max:100,step:1,unit:"kWh"},null,8,["modelValue"])]),_:1})):We("",!0)]))}}),cF=rt(uF,[["__scopeId","data-v-49084b39"]]),fF={class:"form-check form-switch d-flex align-items-center justify-content-center"},hF=Ye({__name:"SwitchInput",props:{modelValue:{type:Boolean},onColor:{},offColor:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=t,i=Ce({get(){return r.modelValue},set(o){n("update:modelValue",o)}});return(o,a)=>(Se(),Re("div",fF,[$s(ye("input",{"onUpdate:modelValue":a[0]||(a[0]=s=>i.value=s),class:"form-check-input",type:"checkbox",role:"switch"},null,512),[[mA,i.value]])]))}}),Qi=rt(hF,[["__scopeId","data-v-547e6de4"]]),dF={class:"pvsettings pt-2"},pF={key:3,class:"fullwidth"},gF=Ye({__name:"ConfigPv",props:{chargepointId:{}},setup(e){const t=e,r=Ce(()=>Ve[t.chargepointId]),n=[{name:"keine",id:"none"},{name:"EV-SoC",id:"soc"},{name:"Energiemenge",id:"amount"}],i=Ce({get(){return r.value.pvMaxEnergy/1e3},set(s){r.value.pvMaxEnergy=s*1e3}}),o=Ce({get(){return r.value.pvMinCurrent>5},set(s){s?r.value.pvMinCurrent=6:r.value.pvMinCurrent=0}}),a=Ce({get(){return r.value.pvMinSoc>0},set(s){s?r.value.pvMinSoc=50:r.value.pvMinSoc=0}});return(s,l)=>(Se(),Re("div",dF,[Me(gt,{title:"Minimaler Ladestrom",icon:"fa-bolt",fullwidth:!0},{default:Ue(()=>[Me(Qi,{modelValue:o.value,"onUpdate:modelValue":l[0]||(l[0]=u=>o.value=u)},null,8,["modelValue"])]),_:1}),o.value?(Se(),Ke(gt,{key:0,title:"...bei Ladestrom (minimal)",fullwidth:!0},{default:Ue(()=>[Me(yr,{id:"minCurrent",modelValue:r.value.pvMinCurrent,"onUpdate:modelValue":l[1]||(l[1]=u=>r.value.pvMinCurrent=u),min:6,max:32,step:1,unit:"A"},null,8,["modelValue"])]),_:1})):We("",!0),Me(gt,{title:"Anzahl Phasen",icon:"fa-plug",fullwidth:!0},{default:Ue(()=>[Me(bi,{id:"targetPhases",modelValue:r.value.pvTargetPhases,"onUpdate:modelValue":l[2]||(l[2]=u=>r.value.pvTargetPhases=u),options:[["Eine",1],["Max",3],["Auto",0]]},null,8,["modelValue"])]),_:1}),Me(gt,{title:"Mindest-Ladestand",icon:"fa-battery-half",fullwidth:!0},{default:Ue(()=>[Me(Qi,{modelValue:a.value,"onUpdate:modelValue":l[3]||(l[3]=u=>a.value=u)},null,8,["modelValue"])]),_:1}),a.value?(Se(),Ke(gt,{key:1,title:"...bis SoC",fullwidth:!0},{default:Ue(()=>[Me(yr,{id:"minSoc",modelValue:r.value.pvMinSoc,"onUpdate:modelValue":l[4]||(l[4]=u=>r.value.pvMinSoc=u),min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])]),_:1})):We("",!0),a.value?(Se(),Ke(gt,{key:2,title:"...mit Ladestrom",fullwidth:!0},{default:Ue(()=>[Me(yr,{id:"minSocCurrent",modelValue:r.value.pvMinSocCurrent,"onUpdate:modelValue":l[5]||(l[5]=u=>r.value.pvMinSocCurrent=u),min:6,max:32,step:1,unit:"A"},null,8,["modelValue"])]),_:1})):We("",!0),r.value.pvChargeLimitMode!="none"?(Se(),Re("hr",pF)):We("",!0),Me(gt,{title:"Begrenzung",icon:"fa-hand",fullwidth:!0},{default:Ue(()=>[Me(bi,{modelValue:r.value.pvChargeLimitMode,"onUpdate:modelValue":l[6]||(l[6]=u=>r.value.pvChargeLimitMode=u),options:n.map(u=>[u.name,u.id])},null,8,["modelValue","options"])]),_:1}),r.value.pvChargeLimitMode=="soc"?(Se(),Ke(gt,{key:4,title:"Maximaler SoC",icon:"fa-sliders",fullwidth:!0},{default:Ue(()=>[Me(yr,{id:"maxSoc",modelValue:r.value.pvTargetSoc,"onUpdate:modelValue":l[7]||(l[7]=u=>r.value.pvTargetSoc=u),min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])]),_:1})):We("",!0),r.value.pvChargeLimitMode=="amount"?(Se(),Ke(gt,{key:5,title:"Zu ladende Energie",icon:"fa-sliders",fullwidth:!0},{default:Ue(()=>[Me(yr,{id:"maxEnergy",modelValue:i.value,"onUpdate:modelValue":l[8]||(l[8]=u=>i.value=u),min:0,max:100,step:1,unit:"kWh"},null,8,["modelValue"])]),_:1})):We("",!0)]))}}),mF=rt(gF,[["__scopeId","data-v-cdfd1b6d"]]),yF={class:"d-flex flex-column p-3"},bF={key:0,class:"info p-5"},_F={key:1,class:"table table-dark"},vF=Ye({__name:"ConfigScheduled",props:{chargePoint:{}},setup(e){const t={daily:"Täglich",once:"Einmal",weekly:"Wöchentlich"},r=e,n=Ce(()=>r.chargePoint.chargeTemplate?.chargemode.scheduled_charging.plans??[]);function i(s){return n.value[s].time}function o(s){return{"font-weight":n.value[s].active?"bold":"regular"}}function a(s){r.chargePoint.chargeTemplate.chargemode.scheduled_charging.plans[s].active=n.value[s].active,dt(r.chargePoint.id)}return(s,l)=>(Se(),Re("div",yF,[l[1]||(l[1]=ye("div",{class:"subtitle mb-4"},"Pläne für Zielladen:",-1)),n.value.length==0?(Se(),Re("div",bF," Pläne für das Zielladen können in den Einstellungen des Ladeprofils angelegt werden. ")):(Se(),Re("table",_F,[l[0]||(l[0]=ye("thead",null,[ye("tr",null,[ye("th"),ye("th",null,"Plan"),ye("th",null,"Zielzeit"),ye("th",null,"Ladeziel"),ye("th",null,"Wiederholung")])],-1)),ye("tbody",null,[(Se(!0),Re(ut,null,Wr(n.value,(u,c)=>(Se(),Re("tr",{key:c,style:xt(o(c))},[ye("td",null,[Me(Qi,{modelValue:u.active,"onUpdate:modelValue":[f=>u.active=f,f=>a(c)]},null,8,["modelValue","onUpdate:modelValue"])]),ye("td",null,qe(u.name),1),ye("td",null,qe(i(c)),1),ye("td",null,qe(u.limit.selected=="soc"?u.limit.soc_scheduled+"%":we(Op)(u.limit.amount,0)),1),ye("td",null,qe(t[u.frequency.selected]),1)],4))),128))])]))]))}}),wF=rt(vF,[["__scopeId","data-v-f5100bdc"]]),EF={class:"digit scaled",type:"button"},SF=Ye({__name:"PadButtonSmall",props:{modelValue:{},color:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=zt(!1);function i(){n.value=!0,a("update:modelValue",r.modelValue),setTimeout(()=>{n.value=!1},300)}const o=Ce(()=>n.value?{"background-color":"white",color:"black"}:{"background-color":r.color??"var(--color-axis)"}),a=t;return(s,l)=>(Se(),Re("div",{class:"padbutton",style:xt(o.value),onClick:i},[ye("span",EF,[kr(s.$slots,"default",{},void 0)])],4))}}),Oi=rt(SF,[["__scopeId","data-v-c4e8b67a"]]),xF={class:"numberpad"},AF={class:"codedisplay scaled px-3 py-1 mb-4"},TF={class:"numberentry"},IF=Ye({__name:"PricePad",props:{modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const n=zt(e.modelValue),i=t;function o(a){a==-1?n.value=n.value.slice(0,-1):a==-2?(i("update:modelValue",n.value),n.value=""):a==-3?n.value.indexOf(".")==-1&&(n.value=n.value+"."):n.value=n.value+a.toString()}return(a,s)=>(Se(),Re("div",xF,[ye("p",AF,qe(n.value)+" ct",1),ye("div",TF,[(Se(),Re(ut,null,Wr(3,l=>Me(Oi,{key:l,"model-value":l,"onUpdate:modelValue":o},{default:Ue(()=>[Xe(qe(l),1)]),_:2},1032,["model-value"])),64)),Me(Oi,{"model-value":-2,color:"var(--color-devices)","onUpdate:modelValue":o},{default:Ue(()=>[...s[0]||(s[0]=[ye("span",{class:"fas fa-circle-check"},null,-1)])]),_:1}),(Se(),Re(ut,null,Wr([4,5,6],l=>Me(Oi,{key:l,"model-value":l,"onUpdate:modelValue":o},{default:Ue(()=>[Xe(qe(l),1)]),_:2},1032,["model-value"])),64)),Me(Oi,{"model-value":-1,color:"var(--color-devices)","onUpdate:modelValue":o},{default:Ue(()=>[...s[1]||(s[1]=[ye("span",{class:"fas fa-delete-left"},null,-1)])]),_:1}),(Se(),Re(ut,null,Wr([7,8,9],l=>Me(Oi,{key:l,"model-value":l,"onUpdate:modelValue":o},{default:Ue(()=>[Xe(qe(l),1)]),_:2},1032,["model-value"])),64)),s[4]||(s[4]=ye("div",null,null,-1)),s[5]||(s[5]=ye("div",null,null,-1)),Me(Oi,{"model-value":0,"onUpdate:modelValue":o},{default:Ue(()=>[...s[2]||(s[2]=[Xe("0",-1)])]),_:1}),Me(Oi,{"model-value":-3,"onUpdate:modelValue":o},{default:Ue(()=>[...s[3]||(s[3]=[Xe(",",-1)])]),_:1})])]))}}),CF=rt(IF,[["__scopeId","data-v-2cdf4e9c"]]),kF={class:"pricesettings"},OF={class:"grapharea rounded shadow p-2"},MF={id:"pricechart"},PF={viewBox:"0 0 400 270"},RF=["id","origin","transform"],NF={class:"controlarea rounded shadow p-2"},LF={class:"pt-1 pb-2 d-flex justify-content-between"},BF={key:1,class:"sliderarea"},Lf=400,Bf=250,j_=12,DF=Ye({__name:"PriceChart",props:{chargePointId:{},globalview:{type:Boolean}},setup(e){const t=e,r=Ce(()=>Ve[t.chargePointId]),n=zt(!1),i=zt(!1);let o=r.value?zt(r.value.etMaxPrice):zt(0);const a=Ce({get(){return o.value},set(P){o.value=P,n.value=!0}}),s=Ce({get(){return(Math.round(o.value*10)/10).toString()},set(P){a.value=parseFloat(P)??a.value,i.value=!1}});function l(){r.value&&(r.value.etMaxPrice=a.value),n.value=!1}const u=zt(!1),c={top:0,bottom:15,left:20,right:15},f=Ce(()=>{let P=[];return Ft.etPriceList.size>0&&Ft.etPriceList.forEach((U,M)=>{P.push([M,U])}),P}),h=Ce(()=>f.value.length>1?(Lf-c.left-c.right)/f.value.length:0),d=Ce(()=>n.value?{background:"var(--color-charging)",color:"var(--color-fg)"}:{background:"var(--color-menu)"});function g(){i.value=!i.value}const b=Ce(()=>{let P=Zi(f.value,U=>U[0]);return P[1]&&(P[1]=new Date(P[1]),P[1].setTime(P[1].getTime()+36e5)),la().range([c.left,Lf-c.right]).domain(P)}),y=Ce(()=>{let P=Zi(f.value,U=>U[1]);return P[0]=P[0]?Math.floor(P[0]-1):0,P[1]=P[1]?Math.floor(P[1]+1):0,P}),_=Ce(()=>dn().range([Bf-c.bottom,0]).domain(y.value)),m=Ce(()=>{const P=Tg(),U=[[c.left,_.value(a.value)],[Lf-c.right-1,_.value(a.value)]];return P(U)}),w=Ce(()=>Bl(b.value).ticks(f.value.length).tickSize(5).tickSizeInner(-Bf).tickFormat(P=>P.getHours()%6==0&&P.getMinutes()==0?sa("%H:%M")(P):"")),S=Ce(()=>Zu(_.value).ticks(6).tickSizeInner(-365).tickFormat(P=>P.toString())),E=Ce(()=>{u.value==!0;const P=Gr("g#"+T.value);P.selectAll("*").remove(),P.selectAll("bar").data(f.value).enter().append("g").append("rect").attr("class","bar").attr("x",Q=>b.value(Q[0])).attr("y",Q=>_.value(Q[1])).attr("width",h.value).attr("height",Q=>_.value(y.value[0])-_.value(Q[1])).attr("fill",Q=>Q[1]<=a.value?"var(--color-charging)":"var(--color-axis)");const M=P.append("g").attr("class","axis").call(w.value);M.attr("transform","translate(0,"+(Bf-c.bottom)+")"),M.selectAll(".tick").attr("font-size",j_).attr("color","var(--color-bg)"),M.selectAll(".tick line").attr("stroke","var(--color-bg)").attr("stroke-width",Q=>Q.getMinutes()==0?Q.getHours()%6==0?"2":"0.5":"0"),M.select(".domain").attr("stroke","var(--color-bg");const D=P.append("g").attr("class","axis").call(S.value);return D.attr("transform","translate("+c.left+",0)"),D.selectAll(".tick").attr("font-size",j_).attr("color","var(--color-bg)"),D.selectAll(".tick line").attr("stroke","var(--color-bg)").attr("stroke-width",Q=>Q%5==0?"2":"0.5"),D.select(".domain").attr("stroke","var(--color-bg)"),P.append("path").attr("d",m.value).attr("stroke","yellow"),"PriceChart.vue"}),T=Ce(()=>r.value?"priceChartCanvas"+r.value.id:"priceChartCanvasGlobal"),I=Ce(()=>{let P=[];return Ft.etPriceList.forEach(U=>{P.push(U)}),P.sort((U,M)=>U-M)});function R(){let P=I.value[0];for(let U of I.value){if(U>=a.value)break;P=U}a.value=P}function K(){let P=I.value[0];for(let U of I.value)if(U>a.value){P=U;break}else P=U;a.value=P}return es(()=>{u.value=!u.value}),(P,U)=>(Se(),Re("div",kF,[ye("div",OF,[ye("figure",MF,[(Se(),Re("svg",PF,[ye("g",{id:T.value,origin:E.value,transform:"translate("+c.top+","+c.right+")"},null,8,RF)]))])]),ye("div",NF,[ye("span",LF,[ye("button",{type:"button",class:"btn btn-lg keypadbutton me-3",onClick:g},[...U[2]||(U[2]=[ye("i",{class:"fa fa-xl fa-keyboard"},null,-1)])]),i.value?We("",!0):(Se(),Re("button",{key:0,type:"button",class:"btn btn-lg confirmbutton",style:xt(d.value),"data-bs-dismiss":"modal",onClick:l}," Bestätigen ",4))]),i.value?(Se(),Ke(CF,{key:0,modelValue:s.value,"onUpdate:modelValue":U[0]||(U[0]=M=>s.value=M),decimals:1,class:"mb-3"},null,8,["modelValue"])):(Se(),Re("div",BF,[Me(yr,{id:"etmaxprice",modelValue:a.value,"onUpdate:modelValue":U[1]||(U[1]=M=>a.value=M),min:Math.floor(I.value[0]-1),max:Math.ceil(I.value[I.value.length-1]+1),step:.1,decimals:1,"show-subrange":!0,"subrange-min":I.value[0],"subrange-max":I.value[I.value.length-1],unit:"ct"},null,8,["modelValue","min","max","subrange-min","subrange-max"]),ye("div",{class:"d-flex justify-content-between pb-2 pt-0 mt-0"},[ye("button",{type:"button",class:"btn jumpbutton",onClick:R},[...U[3]||(U[3]=[ye("i",{class:"fa fa-xl fa-arrow-left"},null,-1)])]),ye("button",{type:"button",class:"btn jumpbutton",onClick:K},[...U[4]||(U[4]=[ye("i",{class:"fa fa-xl fa-arrow-right"},null,-1)])])])]))])]))}}),$F=rt(DF,[["__scopeId","data-v-c5ef2c9d"]]),UF={class:"ecosettings"},FF={key:1,class:"fullwidth"},jF=Ye({__name:"ConfigEco",props:{chargepoint:{}},setup(e){const t=e,r=Ce(()=>Ve[t.chargepoint.id]),n=[{name:"keine",id:"none"},{name:"EV-SoC",id:"soc"},{name:"Energiemenge",id:"amount"}],i=Ce({get(){return r.value.ecoMaxEnergy/1e3},set(s){r.value.ecoMaxEnergy=s*1e3}});function o(){const s=document.getElementById("modal-body-settingspage");s?s.scrollTo({top:s.scrollHeight,behavior:"smooth"}):console.warn("modalbody not found")}function a(){const s=document.getElementById("modal-body-settingspage");window.scrollTo(0,0),s?s.scrollTo({top:0,behavior:"smooth"}):console.warn("modalbody not found")}return(s,l)=>(Se(),Re("div",UF,[we(Ft).active&&we(Ft).etPriceList.size>0?(Se(),Ke($F,{key:0,"charge-point-id":t.chargepoint.id,class:"fullwidth"},null,8,["charge-point-id"])):We("",!0),ye("span",{class:"fullwidth mb-4 mt-2"},[ye("button",{type:"button",class:"btn btn-secondary",onClick:o},[...l[5]||(l[5]=[ye("i",{class:"fa-solid fa-circle-down me-2"},null,-1),Xe(" Abwärts ",-1)])])]),Me(gt,{title:"Minimaler Ladestrom unter der Preisgrenze",icon:"fa-bolt",fullwidth:!0},{default:Ue(()=>[Me(yr,{id:"minCurrent",modelValue:r.value.ecoMinCurrent,"onUpdate:modelValue":l[0]||(l[0]=u=>r.value.ecoMinCurrent=u),min:6,max:32,step:1,unit:"A"},null,8,["modelValue"])]),_:1}),Me(gt,{title:"Anzahl Phasen bei Überschuss",icon:"fa-plug",fullwidth:!0},{default:Ue(()=>[Me(bi,{id:"targetPhases",modelValue:r.value.ecoTargetPhases,"onUpdate:modelValue":l[1]||(l[1]=u=>r.value.ecoTargetPhases=u),options:[["Eine",1],["Max",3],["Auto",0]]},null,8,["modelValue"])]),_:1}),r.value.ecoChargeLimitMode!="none"?(Se(),Re("hr",FF)):We("",!0),Me(gt,{title:"Begrenzung",icon:"fa-hand",fullwidth:!0},{default:Ue(()=>[Me(bi,{modelValue:r.value.ecoChargeLimitMode,"onUpdate:modelValue":l[2]||(l[2]=u=>r.value.ecoChargeLimitMode=u),options:n.map(u=>[u.name,u.id])},null,8,["modelValue","options"])]),_:1}),r.value.ecoChargeLimitMode=="soc"?(Se(),Ke(gt,{key:2,title:"Maximaler SoC",icon:"fa-sliders",fullwidth:!0},{default:Ue(()=>[Me(yr,{id:"maxSoc",modelValue:r.value.ecoTargetSoc,"onUpdate:modelValue":l[3]||(l[3]=u=>r.value.ecoTargetSoc=u),min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])]),_:1})):We("",!0),r.value.ecoChargeLimitMode=="amount"?(Se(),Ke(gt,{key:3,title:"Zu ladende Energie",icon:"fa-sliders",fullwidth:!0},{default:Ue(()=>[Me(yr,{id:"maxEnergy",modelValue:i.value,"onUpdate:modelValue":l[4]||(l[4]=u=>i.value=u),min:0,max:100,step:1,unit:"kWh"},null,8,["modelValue"])]),_:1})):We("",!0),ye("span",{class:"fullwidth"},[ye("button",{type:"button",class:"btn btn-secondary",onClick:a},[...l[6]||(l[6]=[ye("i",{class:"fa-solid fa-circle-up me-2"},null,-1),Xe(" Aufwärts ",-1)])])])]))}}),WF=rt(jF,[["__scopeId","data-v-181d5c2e"]]),VF={class:"d-flex flex-column p-3"},HF={key:0,class:"warning p-5"},qF={class:"table table-dark"},GF=Ye({__name:"ConfigTimed",props:{chargePoint:{}},setup(e){const t={daily:"Täglich",once:"Einmal",weekly:"Wöchentlich"},r=e,n=Ce(()=>r.chargePoint.chargeTemplate?.time_charging.plans??[]);function i(a){r.chargePoint.chargeTemplate.chargemode.scheduled_charging.plans[a].active=n.value[a].active,dt(r.chargePoint.id)}function o(a){return{"font-weight":n.value[a].active?"bold":"regular"}}return(a,s)=>(Se(),Re("div",VF,[s[1]||(s[1]=ye("div",{class:"subtitle mb-4"},"Zeitpläne:",-1)),n.value.length==0?(Se(),Re("div",HF," Es sind noch keine Pläne definiert. Zeitpläne können in der Web-App festgelegt werden. ")):We("",!0),ye("table",qF,[s[0]||(s[0]=ye("thead",null,[ye("tr",null,[ye("th"),ye("th",null,"Von"),ye("th",null,"Bis"),ye("th",null,"Ladestrom"),ye("th",null,"Wiederholung")])],-1)),ye("tbody",null,[(Se(!0),Re(ut,null,Wr(n.value,(l,u)=>(Se(),Re("tr",{key:u,style:xt(o(u))},[ye("td",null,[Me(Qi,{modelValue:l.active,"onUpdate:modelValue":[c=>l.active=c,c=>i(u)]},null,8,["modelValue","onUpdate:modelValue"])]),ye("td",null,qe(l.time[0]),1),ye("td",null,qe(l.time[1]),1),ye("td",null,qe(l.current)+"A",1),ye("td",null,qe(t[l.frequency.selected]),1)],4))),128))])])]))}}),KF=rt(GF,[["__scopeId","data-v-7817e508"]]),zF={class:"chargesettings pt-2"},YF={key:1,class:"grid-col-2 my-2"},QF=Ye({__name:"ChargeConfig",props:{chargepointId:{}},setup(e){const t=e,r=Ce(()=>Ve[t.chargepointId]),n=Ce({get:()=>r.value.connectedVehicle,set:o=>{Ve[r.value.id].connectedVehicle=o}}),i=Ce({get:()=>r.value.timedCharging,set:o=>{Ve[r.value.id].timedCharging=o}});return(o,a)=>(Se(),Re("div",zF,[Object.keys(we(Tt)).length>1?(Se(),Ke(gt,{key:0,title:"Fahrzeug wechseln",icon:"fa-car",fullwidth:!0},{default:Ue(()=>[Me(bi,{modelValue:n.value,"onUpdate:modelValue":a[0]||(a[0]=s=>n.value=s),modelModifiers:{number:!0},options:Object.values(we(Tt)).map(s=>[s.name,s.id])},null,8,["modelValue","options"])]),_:1})):We("",!0),a[5]||(a[5]=ye("hr",{class:"grid-col-2 my-2"},null,-1)),Me(gt,{title:"Priorität",icon:"fa-star",iconcolor:"var(--color-evu)",fullwidth:!0},{default:Ue(()=>[Me(Qi,{modelValue:r.value.hasPriority,"onUpdate:modelValue":a[1]||(a[1]=s=>r.value.hasPriority=s)},null,8,["modelValue"])]),_:1}),Me(gt,{title:"Zeitplan aktivieren",icon:"fa-clock",iconcolor:"var(--color-battery)"},{default:Ue(()=>[Me(Qi,{modelValue:i.value,"onUpdate:modelValue":a[2]||(a[2]=s=>i.value=s)},null,8,["modelValue"])]),_:1}),Me(gt,{title:"Sperren",icon:"fa-lock",iconcolor:"var(--color-evu)",fullwidth:!0},{default:Ue(()=>[Me(Qi,{modelValue:r.value.isLocked,"onUpdate:modelValue":a[3]||(a[3]=s=>r.value.isLocked=s)},null,8,["modelValue"])]),_:1}),we(ht).isBatteryConfigured?(Se(),Re("hr",YF)):We("",!0),we(ht).isBatteryConfigured?(Se(),Ke(gt,{key:2,title:"PV-Priorität (global)",icon:"fa-car-battery",iconcolor:"var(--color-battery)",fullwidth:!0},{default:Ue(()=>[Me(bi,{modelValue:we(ht).pvBatteryPriority,"onUpdate:modelValue":a[4]||(a[4]=s=>we(ht).pvBatteryPriority=s),options:we(NR)},null,8,["modelValue","options"])]),_:1})):We("",!0)]))}}),JF=rt(QF,[["__scopeId","data-v-276daf1f"]]),XF=["id"],ZF={class:"nav nav-tabs nav-justified mx-1 mt-1",role:"tablist"},ej=["id","data-bs-target"],tj=["id","data-bs-target"],rj=["id","data-bs-target"],nj=["id","data-bs-target"],ij=["id","data-bs-target"],oj=["id","data-bs-target"],sj={id:"settingsPanes",class:"tab-content mt-2"},aj=["id"],lj=["id"],uj=["id"],cj=["id"],fj=["id"],hj=["id"],dj=Ye({__name:"SettingsPage",props:{chargepoint:{}},setup(e){const t=e,r=Ce(()=>t.chargepoint.chargeTemplate),n=Ce(()=>t.chargepoint.id);return(i,o)=>(Se(),Re("div",{id:`tabarea-${n.value}`,class:"m-0 mt-1 p-0 grid-col-12 tabarea"},[ye("nav",ZF,[ye("a",{id:"chSettings"+n.value,class:"nav-link active","data-bs-toggle":"tab","data-bs-target":"#chargeSettings"+n.value},[...o[0]||(o[0]=[ye("i",{class:"fa-solid fa-charging-station"},null,-1),Xe(" Allgemein ",-1)])],8,ej),ye("a",{id:"inSettings"+n.value,class:"nav-link","data-bs-toggle":"tab","data-bs-target":"#instantSettings"+n.value},[...o[1]||(o[1]=[ye("i",{class:"fa-solid fa-lg fa-bolt"},null,-1),Xe(" Sofort ",-1)])],8,tj),ye("a",{id:"phvSettings"+n.value,class:"nav-link","data-bs-toggle":"tab","data-bs-target":"#pvSettings"+n.value},[...o[2]||(o[2]=[ye("i",{class:"fa-solid fa-solar-panel me-1"},null,-1),Xe(" PV ",-1)])],8,rj),ye("a",{id:"scSettings"+n.value,class:"nav-link","data-bs-toggle":"tab","data-bs-target":"#scheduledSettings"+n.value},[...o[3]||(o[3]=[ye("i",{class:"fa-solid fa-bullseye me-1"},null,-1),Xe(" Zielladen ",-1)])],8,nj),ye("a",{id:"ecSettings"+n.value,class:"nav-link","data-bs-toggle":"tab","data-bs-target":"#ecoSettings"+n.value},[...o[4]||(o[4]=[ye("i",{class:"fa-solid fa-coins me-1"},null,-1),Xe(" Eco ",-1)])],8,ij),ye("a",{id:"tmSettings"+n.value,class:"nav-link","data-bs-toggle":"tab","data-bs-target":"#timeSettings"+n.value},[...o[5]||(o[5]=[ye("i",{class:"fa-solid fa-clock"},null,-1),Xe(" Zeitpläne ",-1)])],8,oj)]),ye("div",sj,[ye("div",{id:"chargeSettings"+n.value,class:"tab-pane active",role:"tabpanel","aria-labelledby":"instant-tab"},[Me(JF,{"chargepoint-id":n.value},null,8,["chargepoint-id"])],8,aj),ye("div",{id:"instantSettings"+n.value,class:"tab-pane",role:"tabpanel","aria-labelledby":"instant-tab"},[Me(cF,{"chargepoint-id":n.value},null,8,["chargepoint-id"])],8,lj),ye("div",{id:"pvSettings"+n.value,class:"tab-pane",role:"tabpanel","aria-labelledby":"pv-tab"},[Me(mF,{"chargepoint-id":n.value},null,8,["chargepoint-id"])],8,uj),ye("div",{id:"scheduledSettings"+n.value,class:"tab-pane",role:"tabpanel","aria-labelledby":"scheduled-tab"},[r.value!=null?(Se(),Ke(wF,{key:0,"charge-point":t.chargepoint},null,8,["charge-point"])):We("",!0)],8,cj),ye("div",{id:"ecoSettings"+n.value,class:"tab-pane",role:"tabpanel","aria-labelledby":"eco-tab"},[r.value!=null?(Se(),Ke(WF,{key:0,chargepoint:t.chargepoint},null,8,["chargepoint"])):We("",!0)],8,fj),ye("div",{id:"timeSettings"+n.value,class:"tab-pane",role:"tabpanel","aria-labelledby":"time-tab"},[r.value!=null?(Se(),Ke(KF,{key:0,"charge-point":t.chargepoint},null,8,["charge-point"])):We("",!0)],8,hj)])],8,XF))}}),pj=rt(dj,[["__scopeId","data-v-cbeeb183"]]);function gj(e,t){e=="openWB/graph/boolDisplayLiveGraph"?ht.displayLiveGraph=+t==1:e.match(/^openwb\/graph\/alllivevaluesJson[1-9][0-9]*$/i)?mj(e,t):e=="openWB/graph/lastlivevaluesJson"?yj(e,t):e=="openWB/graph/config/duration"&&(Ot.duration=JSON.parse(t))}function mj(e,t){if(!Ot.initialized){let r=[];const n=t.toString().split(` +`);n.length>1?r=n.map(a=>JSON.parse(a)):r=[];const i=e.match(/(\d+)$/g),o=i?i[0]:"";o!=""&&typeof Ot.rawDataPacks[+o-1]>"u"&&(Ot.rawDataPacks[+o-1]=r,Ot.initCounter++)}if(Ot.initCounter==16){const r=[];Ot.unsubscribeRefresh(),Ot.initialized=!0,Ot.rawDataPacks.map(n=>{n.map(i=>{const o=Y1(i);r.push(o)})}),Ta(r),Ot.subscribeUpdates()}}function yj(e,t){const r=JSON.parse(t),n=Y1(r);Ot.graphRefreshCounter++,Ta(xe.data.concat(n)),Ot.graphRefreshCounter>60&&Ot.activate()}function Y1(e){const t=Object.values(Ve).length>0?Object.values(Ve)[0].connectedVehicle:0,r=Object.values(Ve).length>1?Object.values(Ve)[1].connectedVehicle:1,n="ev"+t+"-soc",i="ev"+r+"-soc",o={};o.date=bj(e.time).valueOf(),+e.grid>0?(o.evuIn=+e.grid,o.evuOut=0):+e.grid<=0?(o.evuIn=0,o.evuOut=-e.grid):(o.evuIn=0,o.evuOut=0),+e["pv-all"]>=0?(o.pv=+e["pv-all"],o.inverter=0):(o.pv=0,o.inverter=-e["pv-all"]),o.house=+e["house-power"],+e["bat-all-power"]>0?(o.batOut=0,o.batIn=+e["bat-all-power"]):+e["bat-all-power"]<0?(o.batOut=-e["bat-all-power"],o.batIn=0):(o.batOut=0,o.batIn=0),e["bat-all-soc"]?o.batSoc=+e["bat-all-soc"]:o.batSoc=0,e[n]&&(o["soc"+t]=+e[n]),e[i]&&(o["soc"+r]=+e[i]),o.charging=+e["charging-all"];for(let a=0;a<10;a++){const s="cp"+a;o[s]=+(e[s+"-power"]??0)}return o.selfUsage=o.pv-o.evuOut,o.selfUsage<0&&(o.selfUsage=0),o.devices=0,o}function bj(e){const t=new Date(Date.now()),r=864e5;let n=new Date;const i=aa("%H:%M:%S")(e);return i&&(n=i,n.setDate(t.getDate()),n.setMonth(t.getMonth()),n.setFullYear(t.getFullYear()),n.getHours()>t.getHours()&&(n=new Date(n.getTime()-r))),n}const _j=["evuIn","pv","batIn","evuOut"];let Su=[];function vj(e,t){const r=JSON.parse(t).entries,n=JSON.parse(t).totals;ug(),Su=[],Ig.map(o=>{He.setEnergyPv(o,0),He.setEnergyBat(o,0)});const i=wj(r);Ta(i),Cg(n,Su),De.debug&&(console.debug("---------------------------------------- Graph Data ---------------------------"),console.debug("--- Incoming graph data:"),console.debug(r),console.debug("data to be displayed:"),console.debug(i),console.debug("-------------------------------------------------------------------------------")),xe.graphMode=="today"&&setTimeout(()=>wt.activate(),3e5)}function wj(e){const t=[];let r={};return e.map(n=>{r=Ej(n);const i=r;t.push(i)}),t}function Ej(e){const t={};if(xe.graphMode=="day"||xe.graphMode=="today")if(typeof e.date=="number")t.date=new Date(+e.date*1e3).getTime();else{const n=aa("%H:%M")(e.date);n&&(n.setMonth(wt.date.getMonth()),n.setDate(wt.date.getDate()),n.setFullYear(wt.date.getFullYear()),t.date=n.getTime())}else if(typeof e.date=="string"){const n=aa("%Y%m%d")(e.date);n&&(t.date=n.getDate())}return t.evuOut=0,t.evuIn=0,Object.entries(e.counter).forEach(([n,i])=>{i.grid&&(t.evuOut+=i.power_exported,t.evuIn+=i.power_imported,Su.includes(n)||Su.push(n))}),t.evuOut==0&&t.evuIn==0&&Object.entries(e.counter).forEach(n=>{t.evuOut+=n[1].power_exported,t.evuIn+=n[1].power_imported}),t.pv=e.pv.all.power_exported,Object.entries(e.bat).length>0?(t.batIn=e.bat.all.power_imported,t.batOut=e.bat.all.power_exported,t.batSoc=e.bat.all.soc??0):(t.batIn=0,t.batOut=0,t.batSoc=0),Object.entries(e.cp).forEach(([n,i])=>{n!="all"?(t[n]=i.power_imported,He.keys().includes(n)||He.addItem(n)):t.charging=i.power_imported}),Object.entries(e.ev).forEach(([n,i])=>{n!="all"&&(t["soc"+n.substring(2)]=i.soc)}),t.devices=0,Object.entries(e.sh).forEach(([n,i])=>{n!="all"&&(t[n]=i.power_imported??0,t.devices+=i.power_imported??0,He.keys().includes(n)||He.addItem(n))}),t.selfUsage=t.pv-t.evuOut,e.hc&&e.hc.all?t.house=e.hc.all.power_imported:t.house=t.evuIn+t.batOut+t.pv-t.evuOut-t.charging-t.devices-t.batOut,t.evuIn+t.batOut+t.pv>0?He.keys().filter(n=>!_j.includes(n)).map(n=>{fU(n,t)}):Object.keys(t).map(n=>{t[n+"Pv"]=0,t[n+"Bat"]=0}),t}let Za={};const Og=["charging","house","batIn","devices"],Sj=["evuIn","pv","batIn","evuOut"];let Ks=[];function xj(e,t){const r=JSON.parse(t).entries,n=JSON.parse(t).totals;ug(),Ks=[],Og.map(i=>{He.items[i].energyPv=0,He.items[i].energyBat=0}),r.length>0&&Ta(Q1(r)),Cg(n,[])}function Aj(e,t){const r=JSON.parse(t).entries,n=JSON.parse(t).totals;ug(),Ks=[],Og.forEach(i=>{He.items[i].energyPv=0,He.items[i].energyBat=0}),Ta(Q1(r)),Cg(n,[])}function Q1(e){const t=[];let r={};return Za={},e.map(n=>{r=Tj(n),t.push(r),Object.keys(r).forEach(i=>{i!="date"&&(r[i]<0&&(console.warn(`Negative energy value for ${i} in row ${r.date}. Ignoring the value.`),r[i]=0),Za[i]?Za[i]+=r[i]:Za[i]=r[i])})}),t}function Tj(e){const t={},r=aa("%Y%m%d")(e.date);r&&(t.date=xe.graphMode=="month"?r.getDate():r.getMonth()+1),t.evuOut=0,t.evuIn=0;let n=0,i=0;return Object.entries(e.counter).forEach(([a,s])=>{n+=s.energy_exported,i+=s.energy_imported,s.grid&&(t.evuOut+=s.energy_exported,t.evuIn+=s.energy_imported,Ks.includes(a)||Ks.push(a))}),Ks.length==0&&(t.evuOut=n,t.evuIn=i),t.pv=e.pv.all.energy_exported,Object.entries(e.bat).length>0?(e.bat.all.energy_imported>=0?t.batIn=e.bat.all.energy_imported:(console.warn("ignoring negative value for batIn on day "+t.date),t.batIn=0),e.bat.all.energy_exported>=0?t.batOut=e.bat.all.energy_exported:(console.warn("ignoring negative value for batOut on day "+t.date),t.batOut=0)):(t.batIn=0,t.batOut=0),Object.entries(e.cp).forEach(([a,s])=>{a!="all"?(He.keys().includes(a)||He.addItem(a),t[a]=s.energy_imported):t.charging=s.energy_imported}),Object.entries(e.ev).forEach(([a,s])=>{a!="all"&&(t["soc-"+a]=s.soc)}),t.devices=Object.entries(e.sh).reduce((a,s)=>(He.keys().includes(s[0])||He.addItem(s[0]),s[1].energy_imported>=0?a+=s[1].energy_imported:console.warn(`Negative energy value for device ${s[0]} in row ${t.date}. Ignoring this value`),a),0),t.house=t.pv+t.evuIn+t.batOut-t.evuOut-t.batIn-t.charging,t.selfUsage=t.pv-t.evuOut,t.evuIn+t.batOut+t.pv>0?He.keys().filter(a=>!Sj.includes(a)).map(a=>{hU(a,t)}):Og.map(a=>{t[a+"Pv"]=0,t[a+"Bat"]=0}),t}class Ij{id;dailyYieldExport=0;dailyYieldImport=0;exported=0;faultState=0;faultStr="";imported=0;power=0;soc=0;constructor(t){this.id=t}}const mr=mt({});function Cj(e){e in mr?console.info("Duplicate battery message: "+e):mr[e]=new Ij(e)}function kj(){Object.keys(mr).forEach(e=>{delete mr[parseInt(e)]})}function Oj(e,t){const r=Mj(e);if(r&&!(r in mr)){console.warn("Invalid battery index received: "+r);return}e=="openWB/bat/config/configured"?ht.isBatteryConfigured=t=="true":e=="openWB/bat/get/power"?+t>0?(Qe.batIn.power=+t,ot.batOut.power=0):(Qe.batIn.power=0,ot.batOut.power=-t):e=="openWB/bat/get/soc"?ht.batterySoc=+t:e=="openWB/bat/get/daily_exported"?ot.batOut.energy=+t:e=="openWB/bat/get/daily_imported"?Qe.batIn.energy=+t:r&&(e.match(/^openwb\/bat\/[0-9]+\/get\/daily_yield_export$/i)?mr[r].dailyYieldExport=+t:e.match(/^openwb\/bat\/[0-9]+\/get\/daily_yield_import$/i)?mr[r].dailyYieldImport=+t:e.match(/^openwb\/bat\/[0-9]+\/get\/exported$/i)?mr[r].exported=+t:e.match(/^openwb\/bat\/[0-9]+\/get\/fault_state$/i)?mr[r].faultState=+t:e.match(/^openwb\/bat\/[0-9]+\/get\/fault_str$/i)?mr[r].faultStr=t:e.match(/^openwb\/bat\/[0-9]+\/get\/imported$/i)?mr[r].imported=+t:e.match(/^openwb\/bat\/[0-9]+\/get\/power$/i)?mr[r].power=+t:e.match(/^openwb\/bat\/[0-9]+\/get\/soc$/i)&&(mr[r].soc=+t))}function Mj(e){let t=0;try{const r=e.match(/(?:\/)([0-9]+)(?=\/)/g);return r?(t=+r[0].replace(/[^0-9]+/g,""),t):void 0}catch(r){console.warn("Parser error in getIndex for topic "+e+" : "+r)}}function Pj(e,t){if(e=="openWB/optional/ep/configured")Ft.active=t=="true";else if(e=="openWB/optional/ep/flexible_tariff/provider"){const r=JSON.parse(t);Ft.etProvider=r.name,r.configuration&&r.configuration.country!=null&&(ht.country=r.configuration.country)}else if(e=="openWB/optional/ep/get/prices"){const r=JSON.parse(t);Ft.etPriceList=new Map,Object.keys(r).forEach(n=>{Ft.etPriceList.set(new Date(+n*1e3),r[n]*1e5)})}}function Rj(e,t){const r=J1(e);if(r&&!(r in Ve)){console.warn("Invalid chargepoint id received: "+r);return}if(e=="openWB/chargepoint/get/power"?Qe.charging.power=+t:e=="openWB/chargepoint/get/daily_imported"&&(Qe.charging.energy=+t),e=="openWB/chargepoint/get/daily_exported")ht.cpDailyExported=+t;else if(r)if(e.match(/^openwb\/chargepoint\/[0-9]+\/config$/i))if(Ve[r]){const n=JSON.parse(t);Ve[r].name=n.name,Ve[r].icon=n.name,Kt["cp"+r]?(Kt["cp"+r].name=n.name,Kt["cp"+r].icon=n.name):Kt["cp"+r]={name:n.name,icon:n.name,color:"var(--color-charging)"}}else console.warn("invalid chargepoint index: "+r);else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/state_str$/i))Ve[r].stateStr=JSON.parse(t);else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/fault_str$/i))Ve[r].faultStr=JSON.parse(t);else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/fault_state$/i))Ve[r].faultState=+t;else if(e.match(/^openWB\/chargepoint\/[0-9]+\/get\/power$/i))Ve[r].power=+t;else if(e.match(/^openWB\/chargepoint\/[0-9]+\/get\/daily_imported$/i))Ve[r].dailyYield=+t;else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/plug_state$/i))Ve[r].isPluggedIn=t=="true";else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/charge_state$/i))Ve[r].isCharging=t=="true";else if(e.match(/^openwb\/chargepoint\/[0-9]+\/set\/manual_lock$/i))Ve[r].updateIsLocked(t=="true");else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/enabled$/i))Ve[r].isEnabled=t=="1";else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/phases_in_use/i))Ve[r].phasesInUse=+t;else if(e.match(/^openwb\/chargepoint\/[0-9]+\/set\/current/i))Ve[r].current=+t;else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/currents/i))Ve[r].currents=JSON.parse(t);else if(e.match(/^openwb\/chargepoint\/[0-9]+\/set\/log/i)){const n=JSON.parse(t);Ve[r].chargedSincePlugged=n.imported_since_plugged}else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/connected_vehicle\/soc$/i)){const n=JSON.parse(t);Ve[r].soc=n.soc,Ve[r].waitingForSoc=!1,Ve[r].rangeCharged=n.range_charged,Ve[r].rangeUnit=n.range_unit}else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/connected_vehicle\/info$/i)){const n=JSON.parse(t);Ve[r].vehicleName=String(n.name),Ve[r].updateConnectedVehicle(+n.id)}else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/connected_vehicle\/config$/i)){const n=JSON.parse(t);Ve[r].averageConsumption=n.average_consumption,Ve[r].chargeTemplateId=n.charge_template}else e.match(/^openwb\/chargepoint\/[0-9]+\/set\/charge_template$/i)&&(Ve[r].chargeTemplate=JSON.parse(t))}function Nj(e,t){const r=J1(e);if(r!=null){if(!(r in Tt)){const n=new CR(r);Tt[r]=n}if(e.match(/^openwb\/vehicle\/[0-9]+\/name$/i))Object.values(Ve).forEach(n=>{n.connectedVehicle==r&&(n.vehicleName=JSON.parse(t))}),Tt[r].name=JSON.parse(t);else if(e.match(/^openwb\/vehicle\/[0-9]+\/get\/soc$/i))Tt[r].soc=JSON.parse(t);else if(e.match(/^openwb\/vehicle\/[0-9]+\/get\/range$/i))isNaN(+t)?Tt[r].range=0:Tt[r].range=+t;else if(e.match(/^openwb\/vehicle\/[0-9]+\/charge_template$/i))Tt[r].updateChargeTemplateId(+t);else if(e.match(/^openwb\/vehicle\/[0-9]+\/ev_template$/i))Tt[r].updateEvTemplateId(+t);else if(e.match(/^openwb\/vehicle\/[0-9]+\/soc_module\/config$/i)){const n=JSON.parse(t);Object.values(Ve).forEach(i=>{i.connectedVehicle==r&&(i.isSocConfigured=n.type!==null,i.isSocManual=n.type=="manual")})}}}function Lj(e,t){if(e.match(/^openwb\/vehicle\/template\/charge_template\/[0-9]+$/i)){const r=e.match(/[0-9]+$/i);if(r){const n=+r[0];kR[n]=JSON.parse(t)}}else if(e.match(/^openwb\/vehicle\/template\/ev_template\/[0-9]+$/i)){const r=e.match(/[0-9]+$/i);if(r){const n=+r[0],i=JSON.parse(t);OR[n]=i}}}function J1(e){let t=0;try{const r=e.match(/(?:\/)([0-9]+)(?=\/)/g);return r?(t=+r[0].replace(/[^0-9]+/g,""),t):void 0}catch(r){console.warn("Parser error in getIndex for topic "+e+" : "+r)}}function Bj(e,t){e.match(/^openWB\/LegacySmarthome\/config\//i)?Dj(e,t):e.match(/^openWB\/LegacySmarthome\/Devices\//i)&&$j(e,t)}function Dj(e,t){const r=X1(e);if(r==null)return;Nt.has(r)||W1(r);const n=Nt.get(r);e.match(/^openWB\/LegacySmarthome\/config\/get\/Devices\/[0-9]+\/device_configured$/i)?n.configured=t!="0":e.match(/^openWB\/LegacySmarthome\/config\/get\/Devices\/[0-9]+\/device_name$/i)?(n.name=t.toString(),n.icon=t.toString(),Kt["sh"+r].name=t.toString(),Kt["sh"+r].icon=t.toString()):e.match(/^openWB\/LegacySmarthome\/config\/set\/Devices\/[0-9]+\/mode$/i)?n.isAutomatic=t=="0":e.match(/^openWB\/LegacySmarthome\/config\/get\/Devices\/[0-9]+\/device_canSwitch$/i)?n.canSwitch=t=="1":e.match(/^openWB\/LegacySmarthome\/config\/get\/Devices\/[0-9]+\/device_homeConsumtion$/i)?n.countAsHouse=t=="1":e.match(/^openWB\/LegacySmarthome\/config\/get\/Devices\/[0-9]+\/device_temperatur_configured$/i)&&(n.tempConfigured=+t)}function $j(e,t){const r=X1(e);if(r==null){console.warn("Smarthome: Missing index in "+e);return}Nt.has(r)||W1(r);const n=Nt.get(r);if(e.match(/^openWB\/LegacySmarthome\/Devices\/[0-9]+\/Watt$/i))n.power=+t,Uj("power");else if(!e.match(/^openWB\/LegacySmarthome\/Devices\/[0-9]+\/Wh$/i)){if(e.match(/^openWB\/LegacySmarthome\/Devices\/[0-9]+\/RunningTimeToday$/i))n.runningTime=+t;else if(e.match(/^openWB\/LegacySmarthome\/Devices\/[0-9]+\/TemperatureSensor0$/i))n.temp[0]=+t;else if(e.match(/^openWB\/LegacySmarthome\/Devices\/[0-9]+\/TemperatureSensor1$/i))n.temp[1]=+t;else if(e.match(/^openWB\/LegacySmarthome\/Devices\/[0-9]+\/TemperatureSensor2$/i))n.temp[2]=+t;else if(e.match(/^openWB\/LegacySmartHome\/Devices\/[0-9]+\/Status$/i))switch(+t){case 10:n.status="off";break;case 11:n.status="on";break;case 20:n.status="detection";break;case 30:n.status="timeout";break;default:n.status="off"}}}function Uj(e){switch(e){case"power":Qe.devices.power=[...Nt.values()].filter(t=>t.configured&&!t.countAsHouse).reduce((t,r)=>t+r.power,0);break;case"energy":Qe.devices.energy=[...Nt.values()].filter(t=>t.configured&&!t.countAsHouse).reduce((t,r)=>t+r.energy,0);break;default:console.error("Unknown category")}}function X1(e){let t=0;try{const r=e.match(/(?:\/)([0-9]+)(?=\/)/g);return r?(t=+r[0].replace(/[^0-9]+/g,""),t):void 0}catch(r){console.warn("Parser error in getIndex for topic "+e+" : "+r)}}class Fj{id;name="Zähler";power=0;energy_imported=0;energy_exported=0;grid=!1;type="counter";color="var(--color-evu)";energyPv=0;energyBat=0;pvPercentage=0;icon="";constructor(t){this.id=t}}const Ir=mt({});function jj(e,t){if(e in Ir)console.info("Duplicate counter message: "+e);else switch(Ir[e]=new Fj(e),Ir[e].type=t,t){case"counter":Ir[e].color="var(--color-evu)";break;case"inverter":Ir[e].color="var(--color-pv)";break;case"cp":Ir[e].color="var(--color-charging)";break;case"bat":Ir[e].color="var(--color-bat)";break}}const Wj=["openWB/counter/#","openWB/bat/#","openWB/pv/get/#","openWB/chargepoint/#","openWB/vehicle/#","openWB/general/chargemode_config/bat/#","openWB/optional/ep/#","openWB/system/#","openWB/LegacySmartHome/#","openWB/command/"+lg()+"/#","openWB/optional/int_display/#"];function Vj(){TR(Hj),Wj.forEach(e=>{zi(e)}),Rt()}function Hj(e,t){const r=t.toString();e.match(/^openwb\/counter\/[0-9]+\//i)?qj(e,r):e.match(/^openwb\/counter\//i)?Gj(e,r):e.match(/^openwb\/bat\//i)?Oj(e,r):e.match(/^openwb\/pv\//i)?Kj(e,r):e.match(/^openwb\/chargepoint\//i)?Rj(e,r):e.match(/^openwb\/vehicle\/template\//i)?Lj(e,r):e.match(/^openwb\/vehicle\//i)?Nj(e,r):e.match(/^openwb\/general\/chargemode_config\/bat\//i)?zj(e,r):e.match(/^openwb\/graph\//i)?gj(e,r):e.match(/^openwb\/log\/daily\//i)?vj(e,r):e.match(/^openwb\/log\/monthly\//i)?xj(e,r):e.match(/^openwb\/log\/yearly\//i)?Aj(e,r):e.match(/^openwb\/optional\/ep\//i)?Pj(e,r):e.match(/^openwb\/system\//i)?Qj(e,r):e.match(/^openwb\/LegacySmartHome\//i)?Bj(e,r):e.match(/^openwb\/command\//i)?Jj(e,r):e.match(/^openwb\/optional\//i)&&Xj(e,r)}function qj(e,t){const r=e.split("/"),n=+r[2];if(n==ht.evuId?Yj(e,t):r[3]=="config",r[3]=="get"&&n in Ir)switch(r[4]){case"power":Ir[n].power=+t;break;case"config":break;case"fault_str":break;case"fault_state":break;case"power_factors":break;case"imported":break;case"exported":break;case"frequency":break;case"daily_imported":Ir[n].energy_imported=+t;break;case"daily_exported":Ir[n].energy_exported=+t;break}}function Gj(e,t){if(e.match(/^openwb\/counter\/get\/hierarchy$/i)){const r=JSON.parse(t);if(r.length){PR(),kj();for(const n of r)n.type=="counter"&&(ht.evuId=n.id);Z1(r[0])}}else e.match(/^openwb\/counter\/set\/home_consumption$/i)?Qe.house.power=+t:e.match(/^openwb\/counter\/set\/daily_yield_home_consumption$/i)&&(Qe.house.energy=+t)}function Z1(e){switch(e.type){case"counter":jj(e.id,e.type);break;case"cp":MR(e.id);break;case"bat":Cj(e.id);break}e.children.forEach(t=>Z1(t))}function Kj(e,t){switch(e){case"openWB/pv/get/power":ot.pv.power=-t;break;case"openWB/pv/get/daily_exported":ot.pv.energy=+t;break}}function zj(e,t){const r=e.split("/");r.length>0&&r[4]==="mode"&&ht.updatePvBatteryPriority(JSON.parse(t))}function Yj(e,t){switch(e.split("/")[4]){case"power":+t>0?(ot.evuIn.power=+t,Qe.evuOut.power=0):(ot.evuIn.power=0,Qe.evuOut.power=-t);break;case"daily_imported":ot.evuIn.energy=+t;break;case"daily_exported":Qe.evuOut.energy=+t;break}}function Qj(e,t){if(e.match(/^openWB\/system\/device\/[0-9]+\/component\/[0-9]+\/config$/i)){const r=JSON.parse(t);r.type=="counter"&&(Ir[r.id].name=r.name)}else e.match(/^openWB\/system\/ip_address$/i)?ht.ipAddress=JSON.parse(t):e.match(/^openWB\/system\/time$/i)?ht.systemTime=JSON.parse(t):e.match(/^openWB\/system\/version$/i)?ht.version=JSON.parse(t):e.match(/^openWB\/system\/current_commit$/i)?ht.versionDetails=JSON.parse(t):e.match(/^openWB\/system\/current_branch$/i)&&(ht.devBranch=JSON.parse(t))}function Jj(e,t){const r=e.split("/");if(e.match(/^openWB\/command\/[a-z]+\/error$/i)&&r[2]==lg()){const n=JSON.parse(t);console.error(`Error message from openWB: Command: ${n.command} Data: JSON.stringify(err.data) Error: diff --git a/packages/modules/display_themes/colors/web/index.html b/packages/modules/display_themes/colors/web/index.html index 30c98bde19..b6e0b969db 100644 --- a/packages/modules/display_themes/colors/web/index.html +++ b/packages/modules/display_themes/colors/web/index.html @@ -4,7 +4,7 @@ openWB Display - + diff --git a/packages/modules/io_actions/common.py b/packages/modules/io_actions/common.py index fc448436a6..d78b3cfc2c 100644 --- a/packages/modules/io_actions/common.py +++ b/packages/modules/io_actions/common.py @@ -1,6 +1,42 @@ +import logging +from typing import Dict, List, Union + from control import data from modules.common.fault_state_level import FaultStateLevel +from modules.common.utils.component_parser import get_component_name_by_id + + +control_command_log = logging.getLogger("steuve_control_command") def check_fault_state_io_device(io_device: int) -> bool: return data.data.io_states[f"io_states{io_device}"].data.get.fault_state == FaultStateLevel.ERROR + + +def get_device_log_message(device: Dict[str, Union[int, str]]) -> str: + try: + if device["type"] == "cp": + cp = f"cp{device['id']}" + return (f", Ladepunkt {data.data.cp_data[cp].data.config.name}: " + f"{data.data.cp_data[cp].data.get.powers}W") + if device["type"] == "inverter": + inverter = f"pv{device['id']}" + return (f", Erzeugungsanlage {get_component_name_by_id(device['id'])}: " + f"{data.data.pv_data[inverter].data.get.power}W") + if device["type"] == "io": + io = f"io{device['id']}" + return (f", {data.data.system_data[io].config.name} {device['digital_output']}: " + "Leistung unbekannt") + except KeyError: + control_command_log.warning(f"Zugriff auf gelöschtes Gerät nicht möglich: {device}") + except Exception: + control_command_log.exception(f"Fehler beim Zugriff auf Gerät {device}") + return f", Unbekanntes Gerät: {device}" + + +def get_power_log_message(devices: List[Dict[str, Union[int, str]]]) -> str: + evu_counter = data.data.counter_data[data.data.counter_all_data.get_evu_counter_str()] + msg = f"EVU-Zähler: {evu_counter.data.get.powers}W, {evu_counter.data.get.power}W" + for device in devices: + msg += get_device_log_message(device) + return msg diff --git a/packages/modules/io_actions/controllable_consumers/dimming/api_eebus.py b/packages/modules/io_actions/controllable_consumers/dimming/api_eebus.py index 1115671987..3582ccfba1 100644 --- a/packages/modules/io_actions/controllable_consumers/dimming/api_eebus.py +++ b/packages/modules/io_actions/controllable_consumers/dimming/api_eebus.py @@ -9,7 +9,7 @@ from dataclass_utils import asdict from modules.common.abstract_io import AbstractIoAction from modules.common.utils.component_parser import get_io_name_by_id -from modules.io_actions.common import check_fault_state_io_device +from modules.io_actions.common import check_fault_state_io_device, get_power_log_message from modules.io_actions.controllable_consumers.dimming.config import DimmingSetup from modules.io_actions.controllable_consumers.dimming.utils import calc_dimming_surplus from modules.io_devices.eebus.config import AnalogInputMapping, DigitalInputMapping @@ -61,18 +61,7 @@ def setup(self) -> None: control_command_log.info(f"Dimmen aktiviert. Übermittelter LPC-Wert: {lpc_value/1000}kWh. " "Leistungswerte vor Ausführung des Steuerbefehls:") - evu_counter = data.data.counter_data[data.data.counter_all_data.get_evu_counter_str()] - msg = f"EVU-Zähler: {evu_counter.data.get.powers}W, {evu_counter.data.get.power}W" - for device in self.config.configuration.devices: - if device["type"] == "cp": - cp = f"cp{device['id']}" - msg += (f", Ladepunkt {data.data.cp_data[cp].data.config.name}: " - f"{data.data.cp_data[cp].data.get.powers}W") - if device["type"] == "io": - io = f"io{device['id']}" - msg += (f", {data.data.system_data[io].config.name}: " - "Leistung unbekannt") - control_command_log.info(msg) + control_command_log.info(get_power_log_message(self.config.configuration.devices)) elif self.timestamp: Pub().pub(f"openWB/set/io/action/{self.config.id}/timestamp", None) control_command_log.info("Dimmen deaktiviert.") diff --git a/packages/modules/io_actions/controllable_consumers/dimming/api_io.py b/packages/modules/io_actions/controllable_consumers/dimming/api_io.py index 1b1aee08f5..0b50ec0bf6 100644 --- a/packages/modules/io_actions/controllable_consumers/dimming/api_io.py +++ b/packages/modules/io_actions/controllable_consumers/dimming/api_io.py @@ -9,7 +9,7 @@ from dataclass_utils import asdict from modules.common.abstract_io import AbstractIoAction from modules.common.utils.component_parser import get_io_name_by_id -from modules.io_actions.common import check_fault_state_io_device +from modules.io_actions.common import check_fault_state_io_device, get_power_log_message from modules.io_actions.controllable_consumers.dimming.config import DimmingSetup from modules.io_actions.controllable_consumers.dimming.utils import calc_dimming_surplus @@ -55,22 +55,11 @@ def setup(self) -> None: if check_fault_state_io_device(self.config.configuration.io_device) or self.dimming_active(): if self.timestamp is None: Pub().pub(f"openWB/set/io/action/{self.config.id}/timestamp", create_timestamp()) - if check_fault_state_io_device(self.config.configuration.io_device): - control_command_log.info("Fehler des IO-Geräts: Dimmen aktiviert für Failsafe-Modus.") control_command_log.info("Dimmen aktiviert. Leistungswerte vor Ausführung des Steuerbefehls:") + if check_fault_state_io_device(self.config.configuration.io_device): + control_command_log.info("Fehler des IO-Geräts: Dimmen aktiviert für Failsafe-Modus.") - evu_counter = data.data.counter_data[data.data.counter_all_data.get_evu_counter_str()] - msg = f"EVU-Zähler: {evu_counter.data.get.powers}W, {evu_counter.data.get.power}W" - for device in self.config.configuration.devices: - if device["type"] == "cp": - cp = f"cp{device['id']}" - msg += (f", Ladepunkt {data.data.cp_data[cp].data.config.name}: " - f"{data.data.cp_data[cp].data.get.powers}W") - if device["type"] == "io": - io = f"io{device['id']}" - msg += (f", {data.data.system_data[io].config.name}: " - "Leistung unbekannt") - control_command_log.info(msg) + control_command_log.info(get_power_log_message(self.config.configuration.devices)) elif self.timestamp: Pub().pub(f"openWB/set/io/action/{self.config.id}/timestamp", None) control_command_log.info("Dimmen deaktiviert.") diff --git a/packages/modules/io_actions/controllable_consumers/dimming_direct_control/api.py b/packages/modules/io_actions/controllable_consumers/dimming_direct_control/api.py index 22a821e819..7dcb1679f7 100644 --- a/packages/modules/io_actions/controllable_consumers/dimming_direct_control/api.py +++ b/packages/modules/io_actions/controllable_consumers/dimming_direct_control/api.py @@ -8,7 +8,7 @@ from modules.common.abstract_device import DeviceDescriptor from modules.common.abstract_io import AbstractIoAction from modules.common.utils.component_parser import get_io_name_by_id -from modules.io_actions.common import check_fault_state_io_device +from modules.io_actions.common import check_fault_state_io_device, get_power_log_message from modules.io_actions.controllable_consumers.dimming_direct_control.config import DimmingDirectControlSetup control_command_log = logging.getLogger("steuve_control_command") @@ -32,36 +32,31 @@ def __init__(self, config: DimmingDirectControlSetup): def setup(self) -> None: with ModifyLoglevelContext(control_command_log, logging.DEBUG): + device = self.config.configuration.devices[0] + if device["type"] == "cp": + cp = f"cp{device['id']}" + device_name = f"an Ladepunkt {data.data.cp_data[cp].data.config.name}" + elif device["type"] == "io": + io = f"io{device['id']}" + device_name = f"an IO-Gerät {data.data.system_data[io].config.name} {device['digital_output']}" + else: + device_name = f"an unbekanntem Gerät {device['id']}" + if (data.data.io_states[f"io_states{self.config.configuration.io_device}"].data.get.digital_input[ self.dimming_input] == self.dimming_value or check_fault_state_io_device(self.config.configuration.io_device)): - device = self.config.configuration.devices[0] - if device["type"] == "cp": - cp = f"cp{device['id']}" if self.timestamp is None: Pub().pub(f"openWB/set/io/action/{self.config.id}/timestamp", create_timestamp()) - if device["type"] == "cp": - if check_fault_state_io_device(self.config.configuration.io_device): - control_command_log.info( - "Fehler des IO-Geräts: Direktsteuerung an Ladepunkt aktiviert für Failsafe-Modus.") + if check_fault_state_io_device(self.config.configuration.io_device): control_command_log.info( - f"Direktsteuerung an Ladepunkt " - f"{data.data.cp_data[cp].data.config.name} aktiviert. " - "Leistungswerte vor Ausführung des Steuerbefehls:") + "Fehler des IO-Geräts: Direktsteuerung aktiviert für Failsafe-Modus.") + control_command_log.info( + f"Direktsteuerung {device_name} aktiviert. Leistungswerte vor Ausführung des Steuerbefehls:") - evu_counter = data.data.counter_data[data.data.counter_all_data.get_evu_counter_str()] - msg = f"EVU-Zähler: {evu_counter.data.get.powers}W, {evu_counter.data.get.power}W" - if device["type"] == "cp": - msg += (f", Ladepunkt {data.data.cp_data[cp].data.config.name}: " - f"{data.data.cp_data[cp].data.get.powers}W") - if device["type"] == "io": - io = f"io{device['id']}" - msg += (f", IO-Gerät {data.data.system_data[io].config.name}: " - "Leistung unbekannt") - control_command_log.info(msg) + control_command_log.info(get_power_log_message([device])) elif self.timestamp: Pub().pub(f"openWB/set/io/action/{self.config.id}/timestamp", None) - control_command_log.info("Direktsteuerung deaktiviert.") + control_command_log.info(f"Direktsteuerung {device_name} deaktiviert.") def dimming_via_direct_control(self) -> Tuple[Optional[float], LoadmanagementLimit]: if check_fault_state_io_device(self.config.configuration.io_device): diff --git a/packages/modules/io_actions/controllable_consumers/ripple_control_receiver/api.py b/packages/modules/io_actions/controllable_consumers/ripple_control_receiver/api.py index 5fd6b787bb..f6980cbf56 100644 --- a/packages/modules/io_actions/controllable_consumers/ripple_control_receiver/api.py +++ b/packages/modules/io_actions/controllable_consumers/ripple_control_receiver/api.py @@ -8,7 +8,7 @@ from modules.common.abstract_device import DeviceDescriptor from modules.common.abstract_io import AbstractIoAction from modules.common.utils.component_parser import get_io_name_by_id -from modules.io_actions.common import check_fault_state_io_device +from modules.io_actions.common import check_fault_state_io_device, get_power_log_message from modules.io_actions.controllable_consumers.ripple_control_receiver.config import RippleControlReceiverSetup control_command_log = logging.getLogger("steuve_control_command") @@ -17,45 +17,46 @@ class RippleControlReceiver(AbstractIoAction): def __init__(self, config: RippleControlReceiverSetup): self.config = config + for pattern in self.config.configuration.input_pattern: + input_matrix_list = list(pattern["matrix"].items()) + if len(input_matrix_list): + inputs = ", ".join([input_name for input_name, _ in input_matrix_list]) + control_command_log.info(f"RSE-Kontakt: Eingänge {inputs} werden überwacht.") + else: + control_command_log.warning("RSE-Kontakt: Kein Eingang zum Überwachen konfiguriert.") super().__init__() def setup(self) -> None: - def log_active_ripple_control_receiver(): - if self.timestamp is None: - Pub().pub(f"openWB/set/io/action/{self.config.id}/timestamp", create_timestamp()) - if check_fault_state_io_device(self.config.configuration.io_device): + with ModifyLoglevelContext(control_command_log, logging.DEBUG): + io_state = data.data.io_states[f"io_states{self.config.configuration.io_device}"].data.get + + # IO-Fehler aktiviert den Failsafe unabhängig von den Eingangsmustern. + if check_fault_state_io_device(self.config.configuration.io_device): + if self.timestamp is None: + Pub().pub(f"openWB/set/io/action/{self.config.id}/timestamp", create_timestamp()) control_command_log.info( - "Fehler des IO-Geräts: RSE aktiviert für Failsafe-Modus.") - control_command_log.info( - f"RSE-Sperre mit Wert {pattern['value']*100}" - "% aktiviert. Leistungswerte vor Ausführung des Steuerbefehls:") + "RSE-Sperre im Failsafe-Modus aktiviert. " + "Leistungswerte vor Ausführung des Steuerbefehls:") + control_command_log.info("Fehler des IO-Geräts: RSE aktiviert für Failsafe-Modus.") + control_command_log.info(get_power_log_message(self.config.configuration.devices)) + return - evu_counter = data.data.counter_data[data.data.counter_all_data.get_evu_counter_str()] - msg = f"EVU-Zähler: {evu_counter.data.get.powers}W, {evu_counter.data.get.power}W" - for device in self.config.configuration.devices: - if device["type"] == "cp": - cp = f"cp{device['id']}" - msg += (f", Ladepunkt {data.data.cp_data[cp].data.config.name}: " - f"{data.data.cp_data[cp].data.get.powers}W") - if device["type"] == "io": - io = f"io{device['id']}" - msg += (f", IO-Gerät {data.data.io_data[io].data.config.name}: " - "Leistung unbekannt") - control_command_log.info(msg) + matching_pattern = None + for pattern in self.config.configuration.input_pattern: + for digital_input, value in pattern["matrix"].items(): + if io_state.digital_input[digital_input] != value: + break + else: + matching_pattern = pattern + break - with ModifyLoglevelContext(control_command_log, logging.DEBUG): - if check_fault_state_io_device(self.config.configuration.io_device): - for pattern in self.config.configuration.input_pattern: - for digital_input, value in pattern["matrix"].items(): - if data.data.io_states[ - f"io_states{self.config.configuration.io_device}"].data.get.digital_input[ - digital_input] != value: - break - else: - # Alle digitalen Eingänge entsprechen dem Pattern - if pattern["value"] != 1: - log_active_ripple_control_receiver() - break + if matching_pattern and matching_pattern["value"] not in (1, None): + if self.timestamp is None: + Pub().pub(f"openWB/set/io/action/{self.config.id}/timestamp", create_timestamp()) + control_command_log.info( + f"RSE-Sperre mit Wert {matching_pattern['value']*100}% aktiviert. " + "Leistungswerte vor Ausführung des Steuerbefehls:") + control_command_log.info(get_power_log_message(self.config.configuration.devices)) else: if self.timestamp: Pub().pub(f"openWB/set/io/action/{self.config.id}/timestamp", None) diff --git a/packages/modules/io_actions/generator_systems/stepwise_control/api_eebus.py b/packages/modules/io_actions/generator_systems/stepwise_control/api_eebus.py index 03a554c2a3..e5b2081deb 100644 --- a/packages/modules/io_actions/generator_systems/stepwise_control/api_eebus.py +++ b/packages/modules/io_actions/generator_systems/stepwise_control/api_eebus.py @@ -8,7 +8,7 @@ from modules.common.abstract_device import DeviceDescriptor from modules.common.abstract_io import AbstractIoAction from modules.common.utils.component_parser import get_component_name_by_id, get_io_name_by_id -from modules.io_actions.common import check_fault_state_io_device +from modules.io_actions.common import check_fault_state_io_device, get_power_log_message from modules.io_actions.generator_systems.stepwise_control.config import StepwiseControlSetup from modules.io_devices.eebus.config import AnalogInputMapping, DigitalInputMapping @@ -73,35 +73,46 @@ def get_step(self) -> float: def setup(self) -> None: with ModifyLoglevelContext(control_command_log, logging.DEBUG): if check_fault_state_io_device(self.config.configuration.io_device): - control_command_log.info("Fehler des IO-Geräts: EZA-Begrenzung kann nicht erfasst werden.") - else: - self.lpp_value = data.data.io_states[f"io_states{self.config.configuration.io_device}" - ].data.get.analog_input[AnalogInputMapping.LPP_VALUE.name] - lpp_value_prev = data.data.io_states[f"io_states{self.config.configuration.io_device}" - ].data.get.analog_input_prev[AnalogInputMapping.LPP_VALUE.name] - self.lpp_active = data.data.io_states[f"io_states{self.config.configuration.io_device}" - ].data.get.digital_input[DigitalInputMapping.LPP_ACTIVE.name] - lpp_active_prev = data.data.io_states[f"io_states{self.config.configuration.io_device}" - ].data.get.digital_input_prev[DigitalInputMapping.LPP_ACTIVE.name] - changed = True if self.lpp_value != lpp_value_prev or self.lpp_active != lpp_active_prev else False + if self.timestamp is None: + Pub().pub(f"openWB/set/io/action/{self.config.id}/timestamp", create_timestamp()) + control_command_log.info("Fehler des IO-Geräts: EZA-Begrenzung aktiviert für Failsafe-Modus.") + control_command_log.info(get_power_log_message(self.config.configuration.devices)) + self.step = 0 + return + + self.lpp_value = data.data.io_states[f"io_states{self.config.configuration.io_device}" + ].data.get.analog_input[AnalogInputMapping.LPP_VALUE.name] + lpp_value_prev = data.data.io_states[f"io_states{self.config.configuration.io_device}" + ].data.get.analog_input_prev[AnalogInputMapping.LPP_VALUE.name] + self.lpp_active = data.data.io_states[f"io_states{self.config.configuration.io_device}" + ].data.get.digital_input[DigitalInputMapping.LPP_ACTIVE.name] + lpp_active_prev = data.data.io_states[f"io_states{self.config.configuration.io_device}" + ].data.get.digital_input_prev[DigitalInputMapping.LPP_ACTIVE.name] + changed = True if self.lpp_value != lpp_value_prev or self.lpp_active != lpp_active_prev else False - if self.lpp_active: - self.step = self.get_step() - if changed: - Pub().pub(f"openWB/set/io/action/{self.config.id}/timestamp", create_timestamp()) - control_command_log.info( - f"EEBus-Steuerung: EZA-Begrenzung mit LPP-Wert {self.lpp_value}W aktiviert.") - for device in self.config.configuration.devices: + if self.lpp_active: + self.step = self.get_step() + if changed: + Pub().pub(f"openWB/set/io/action/{self.config.id}/timestamp", create_timestamp()) + control_command_log.info( + f"EEBus-Steuerung: EZA-Begrenzung mit LPP-Wert {self.lpp_value}W aktiviert.") + for device in self.config.configuration.devices: + try: control_command_log.info( f"Erzeugungsanlage {get_component_name_by_id(device['id'])} " f"auf {self.lpp_value}W begrenzt. Gestufte Ansteuerung: " f"{self.step*100:.0f}% der maximalen Ausgangsleistung." ) - else: - self.step = 1 - if changed: - Pub().pub(f"openWB/set/io/action/{self.config.id}/timestamp", None) - control_command_log.info("EZA-Begrenzung aufgehoben.") + except ValueError: + control_command_log.warning(f"Zugriff auf gelöschtes Gerät nicht möglich: {device}") + except Exception: + control_command_log.exception(f"Fehler beim Zugriff auf Gerät {device}") + control_command_log.info(get_power_log_message(self.config.configuration.devices)) + else: + self.step = 1 + if changed or self.timestamp: + Pub().pub(f"openWB/set/io/action/{self.config.id}/timestamp", None) + control_command_log.info("EZA-Begrenzung aufgehoben.") def control_stepwise(self) -> Tuple[Optional[float], LoadmanagementLimit]: if check_fault_state_io_device(self.config.configuration.io_device): diff --git a/packages/modules/io_actions/generator_systems/stepwise_control/api_io.py b/packages/modules/io_actions/generator_systems/stepwise_control/api_io.py index 34fc18806f..9440335a85 100644 --- a/packages/modules/io_actions/generator_systems/stepwise_control/api_io.py +++ b/packages/modules/io_actions/generator_systems/stepwise_control/api_io.py @@ -8,7 +8,7 @@ from modules.common.abstract_device import DeviceDescriptor from modules.common.abstract_io import AbstractIoAction from modules.common.utils.component_parser import get_component_name_by_id, get_io_name_by_id -from modules.io_actions.common import check_fault_state_io_device +from modules.io_actions.common import check_fault_state_io_device, get_power_log_message from modules.io_actions.generator_systems.stepwise_control.config import StepwiseControlSetup control_command_log = logging.getLogger("steuve_control_command") @@ -27,63 +27,76 @@ def __init__(self, config: StepwiseControlSetup): for device in self.config.configuration.devices if device["type"] == "inverter" ] - assigned_outputs = [ - f"{device['id']}/{device['digital_output']}" - for device in self.config.configuration.devices - if device["type"] == "io" - ] + self.__unique_outputs = [] + for pattern in self.config.configuration.output_pattern: + for key in pattern["matrix"].keys(): + if key not in self.__unique_outputs: + self.__unique_outputs.append(key) with ModifyLoglevelContext(control_command_log, logging.DEBUG): # Log the configuration details # We cannot use configured names here, as the devices are not yet initialized # and thus the names are not available. - control_command_log.info( + info_message = ( f"Stufenweise Steuerung von EZA: I/O-Gerät: {self.config.configuration.io_device}, " f"Überwachte digitale Eingänge: {self.__unique_inputs}, " - f"zugeordnete Erzeugungsanlagen: {assigned_inverters} " - f"zugeordnete IO-Ausgänge: {assigned_outputs} " - "Die Begrenzung muss in den EZA vorgenommen werden!" + f"zugeordnete Erzeugungsanlagen: {assigned_inverters}, " + f"zugeordnete IO-Ausgänge: {self.__unique_outputs}" ) + if len(self.__unique_outputs) == 0: + info_message += ", Die Begrenzung muss in den EZA vorgenommen werden!" + control_command_log.info(info_message) super().__init__() def setup(self) -> None: with ModifyLoglevelContext(control_command_log, logging.DEBUG): if check_fault_state_io_device(self.config.configuration.io_device): - control_command_log.info("Fehler des IO-Geräts: EZA-Begrenzung kann nicht erfasst werden.") - else: - digital_input = ( - data.data.io_states[ - f"io_states{self.config.configuration.io_device}" - ].data.get.digital_input - ) - digital_input_prev = data.data.io_states[ - f"io_states{self.config.configuration.io_device}"].data.get.digital_input_prev - changed = len([ - input_name for input_name in self.__unique_inputs - if digital_input[input_name] != digital_input_prev[input_name] - ]) > 0 + if self.timestamp is None: + Pub().pub(f"openWB/set/io/action/{self.config.id}/timestamp", create_timestamp()) + control_command_log.info("Fehler des IO-Geräts: EZA-Begrenzung aktiviert für Failsafe-Modus.") + control_command_log.info(get_power_log_message(self.config.configuration.devices)) + return - for pattern in self.config.configuration.input_pattern: - for action_input, value in pattern["matrix"].items(): - if digital_input[action_input] != value: - break - else: - # Alle digitalen Eingänge entsprechen dem Pattern - if pattern["value"] != 1: - if changed: - Pub().pub(f"openWB/set/io/action/{self.config.id}/timestamp", create_timestamp()) - control_command_log.info( - f"EZA-Begrenzung mit Wert {int(pattern['value']*100)}% aktiviert.") - for device in self.config.configuration.devices: + digital_input = ( + data.data.io_states[ + f"io_states{self.config.configuration.io_device}" + ].data.get.digital_input + ) + digital_input_prev = data.data.io_states[ + f"io_states{self.config.configuration.io_device}"].data.get.digital_input_prev + changed = len([ + input_name for input_name in self.__unique_inputs + if digital_input[input_name] != digital_input_prev[input_name] + ]) > 0 + + for pattern in self.config.configuration.input_pattern: + for action_input, value in pattern["matrix"].items(): + if digital_input[action_input] != value: + break + else: + # Alle digitalen Eingänge entsprechen dem Pattern + if pattern["value"] != 1: + if changed: + Pub().pub(f"openWB/set/io/action/{self.config.id}/timestamp", create_timestamp()) + control_command_log.info( + f"EZA-Begrenzung mit Wert {int(pattern['value']*100)}% aktiviert.") + for device in self.config.configuration.devices: + try: if device["type"] == "inverter": control_command_log.info( f"Erzeugungsanlage {get_component_name_by_id(device['id'])} " f"auf {int(pattern['value']*100)}% begrenzt." ) - break - else: - if changed: - Pub().pub(f"openWB/set/io/action/{self.config.id}/timestamp", None) - control_command_log.info("EZA-Begrenzung aufgehoben.") + except ValueError: + control_command_log.warning( + f"Zugriff auf gelöschtes Gerät nicht möglich: {device}") + except Exception: + control_command_log.exception(f"Fehler beim Zugriff auf Gerät {device}") + control_command_log.info(get_power_log_message(self.config.configuration.devices)) + break + else: + if changed or self.timestamp: + Pub().pub(f"openWB/set/io/action/{self.config.id}/timestamp", None) + control_command_log.info("EZA-Begrenzung aufgehoben.") def control_stepwise(self) -> Tuple[Optional[float], LoadmanagementLimit]: if check_fault_state_io_device(self.config.configuration.io_device): diff --git a/packages/modules/web_themes/colors/source/src/assets/js/processMessages.ts b/packages/modules/web_themes/colors/source/src/assets/js/processMessages.ts index 55113caf27..73e76eba40 100755 --- a/packages/modules/web_themes/colors/source/src/assets/js/processMessages.ts +++ b/packages/modules/web_themes/colors/source/src/assets/js/processMessages.ts @@ -38,7 +38,7 @@ const topicsToSubscribe = [ 'openWB/pv/#', 'openWB/chargepoint/#', 'openWB/vehicle/#', - 'openWB/general/chargemode_config/pv_charging/#', + 'openWB/general/chargemode_config/bat/#', 'openWB/general/web_theme', 'openWB/optional/ep/#', 'openWB/system/#', @@ -74,9 +74,7 @@ function processMqttMessage(topic: string, payload: Buffer) { processVehicleTemplateMessages(topic, message) } else if (topic.match(/^openwb\/vehicle\//i)) { processVehicleMessages(topic, message) - } else if ( - topic.match(/^openwb\/general\/chargemode_config\/pv_charging\//i) - ) { + } else if (topic.match(/^openwb\/general\/chargemode_config\/bat\//i)) { processPvConfigMessages(topic, message) } else if (topic.match(/^openwb\/general\/web_theme/i)) { processThemeConfigMessages(topic, message) @@ -195,7 +193,7 @@ function processPvConfigMessages(topic: string, message: string) { const elements = topic.split('/') if (elements.length > 0) { switch (elements[4]) { - case 'bat_mode': + case 'mode': globalData.updatePvBatteryPriority(JSON.parse(message)) break default: diff --git a/packages/modules/web_themes/colors/source/src/assets/js/sendMessages.ts b/packages/modules/web_themes/colors/source/src/assets/js/sendMessages.ts index 687e9c4a9b..81661d2fc9 100644 --- a/packages/modules/web_themes/colors/source/src/assets/js/sendMessages.ts +++ b/packages/modules/web_themes/colors/source/src/assets/js/sendMessages.ts @@ -13,7 +13,7 @@ const topics: { [topic: string]: string } = { 'openWB/set/vehicle/template/charge_template/%/chargemode/selected', cpPriority: 'openWB/set/vehicle/template/charge_template/%/prio', pvBatteryPriority: - 'openWB/set/general/chargemode_config/pv_charging/bat_mode', + 'openWB/set/general/chargemode_config/bat/mode', cpVehicle: 'openWB/set/chargepoint/%/config/ev', cpInstantChargeLimitMode: 'openWB/set/vehicle/template/charge_template/%/chargemode/instant_charging/limit/selected', diff --git a/packages/modules/web_themes/colors/web/assets/index-B6Y8nXWY.js b/packages/modules/web_themes/colors/web/assets/index-Djqr4HnB.js similarity index 73% rename from packages/modules/web_themes/colors/web/assets/index-B6Y8nXWY.js rename to packages/modules/web_themes/colors/web/assets/index-Djqr4HnB.js index b3ccbd2c74..d38115db96 100644 --- a/packages/modules/web_themes/colors/web/assets/index-B6Y8nXWY.js +++ b/packages/modules/web_themes/colors/web/assets/index-Djqr4HnB.js @@ -6,8 +6,8 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho `+Ie.prev}function ve(pe,Ie){var Ue=ge(pe),je=[];if(Ue){je.length=pe.length;for(var qe=0;qe1;){var g=v.pop(),m=g.obj[g.prop];if(r(m)){for(var b=[],_=0;_=u?w.slice(T,T+u):w,j=[],P=0;P=48&&N<=57||N>=65&&N<=90||N>=97&&N<=122||_===e.RFC1738&&(N===40||N===41)){j[j.length]=C.charAt(P);continue}if(N<128){j[j.length]=n[N];continue}if(N<2048){j[j.length]=n[192|N>>6]+n[128|N&63];continue}if(N<55296||N>=57344){j[j.length]=n[224|N>>12]+n[128|N>>6&63]+n[128|N&63];continue}P+=1,N=65536+((N&1023)<<10|C.charCodeAt(P)&1023),j[j.length]=n[240|N>>18]+n[128|N>>12&63]+n[128|N>>6&63]+n[128|N&63]}E+=j.join("")}return E},f=function(v){for(var g=[{obj:{o:v},prop:"o"}],m=[],b=0;b"u"&&($=0)}if(typeof j=="function"?B=j(g,B):B instanceof Date?B=M(B):m==="comma"&&o(B)&&(B=t.maybeMap(B,function(D){return D instanceof Date?M(D):D})),B===null){if(w)return C&&!G?C(g,c.encoder,q,"key",R):g;B=""}if(f(B)||t.isBuffer(B)){if(C){var ue=G?g:C(g,c.encoder,q,"key",R);return[O(ue)+"="+O(C(B,c.encoder,q,"value",R))]}return[O(g)+"="+O(String(B))]}var ge=[];if(typeof B>"u")return ge;var K;if(m==="comma"&&o(B))G&&C&&(B=t.maybeMap(B,C)),K=[{value:B.length>0?B.join(",")||null:void 0}];else if(o(j))K=j;else{var ee=Object.keys(B);K=P?ee.sort(P):ee}var X=T?g.replace(/\./g,"%2E"):g,V=b&&o(B)&&B.length===1?X+"[]":X;if(_&&o(B)&&B.length===0)return V+"[]";for(var Y=0;Y"u"?y.encodeDotInKeys===!0?!0:c.allowDots:!!y.allowDots;return{addQueryPrefix:typeof y.addQueryPrefix=="boolean"?y.addQueryPrefix:c.addQueryPrefix,allowDots:w,allowEmptyArrays:typeof y.allowEmptyArrays=="boolean"?!!y.allowEmptyArrays:c.allowEmptyArrays,arrayFormat:_,charset:v,charsetSentinel:typeof y.charsetSentinel=="boolean"?y.charsetSentinel:c.charsetSentinel,commaRoundTrip:y.commaRoundTrip,delimiter:typeof y.delimiter>"u"?c.delimiter:y.delimiter,encode:typeof y.encode=="boolean"?y.encode:c.encode,encodeDotInKeys:typeof y.encodeDotInKeys=="boolean"?y.encodeDotInKeys:c.encodeDotInKeys,encoder:typeof y.encoder=="function"?y.encoder:c.encoder,encodeValuesOnly:typeof y.encodeValuesOnly=="boolean"?y.encodeValuesOnly:c.encodeValuesOnly,filter:b,format:g,formatter:m,serializeDate:typeof y.serializeDate=="function"?y.serializeDate:c.serializeDate,skipNulls:typeof y.skipNulls=="boolean"?y.skipNulls:c.skipNulls,sort:typeof y.sort=="function"?y.sort:null,strictNullHandling:typeof y.strictNullHandling=="boolean"?y.strictNullHandling:c.strictNullHandling}};return Cu=function(y,v){var g=y,m=p(v),b,_;typeof m.filter=="function"?(_=m.filter,g=_("",g)):o(m.filter)&&(_=m.filter,b=_);var w=[];if(typeof g!="object"||g===null)return"";var E=i[m.arrayFormat],T=E==="comma"&&m.commaRoundTrip;b||(b=Object.keys(g)),m.sort&&b.sort(m.sort);for(var C=e(),j=0;j0?M+N:""},Cu}function GR(){if(_g)return Mu;_g=!0;var e=JS(),t=Object.prototype.hasOwnProperty,r=Array.isArray,n={allowDots:!1,allowEmptyArrays:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decodeDotInKeys:!1,decoder:e.decode,delimiter:"&",depth:5,duplicates:"combine",ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictDepth:!1,strictNullHandling:!1},i=function(d){return d.replace(/&#(\d+);/g,function(h,p){return String.fromCharCode(parseInt(p,10))})},o=function(d,h){return d&&typeof d=="string"&&h.comma&&d.indexOf(",")>-1?d.split(","):d},a="utf8=%26%2310003%3B",s="utf8=%E2%9C%93",l=function(d,h){var p={__proto__:null},y=h.ignoreQueryPrefix?d.replace(/^\?/,""):d;y=y.replace(/%5B/gi,"[").replace(/%5D/gi,"]");var v=h.parameterLimit===1/0?void 0:h.parameterLimit,g=y.split(h.delimiter,v),m=-1,b,_=h.charset;if(h.charsetSentinel)for(b=0;b-1&&(j=r(j)?[j]:j);var P=t.call(p,C);P&&h.duplicates==="combine"?p[C]=e.combine(p[C],j):(!P||h.duplicates==="last")&&(p[C]=j)}return p},u=function(d,h,p,y){for(var v=y?h:o(h,p),g=d.length-1;g>=0;--g){var m,b=d[g];if(b==="[]"&&p.parseArrays)m=p.allowEmptyArrays&&(v===""||p.strictNullHandling&&v===null)?[]:[].concat(v);else{m=p.plainObjects?Object.create(null):{};var _=b.charAt(0)==="["&&b.charAt(b.length-1)==="]"?b.slice(1,-1):b,w=p.decodeDotInKeys?_.replace(/%2E/g,"."):_,E=parseInt(w,10);!p.parseArrays&&w===""?m={0:v}:!isNaN(E)&&b!==w&&String(E)===w&&E>=0&&p.parseArrays&&E<=p.arrayLimit?(m=[],m[E]=v):w!=="__proto__"&&(m[w]=v)}v=m}return v},c=function(d,h,p,y){if(d){var v=p.allowDots?d.replace(/\.([^.[]+)/g,"[$1]"):d,g=/(\[[^[\]]*])/,m=/(\[[^[\]]*])/g,b=p.depth>0&&g.exec(v),_=b?v.slice(0,b.index):v,w=[];if(_){if(!p.plainObjects&&t.call(Object.prototype,_)&&!p.allowPrototypes)return;w.push(_)}for(var E=0;p.depth>0&&(b=m.exec(v))!==null&&E"u"?n.charset:d.charset,p=typeof d.duplicates>"u"?n.duplicates:d.duplicates;if(p!=="combine"&&p!=="first"&&p!=="last")throw new TypeError("The duplicates option must be either combine, first, or last");var y=typeof d.allowDots>"u"?d.decodeDotInKeys===!0?!0:n.allowDots:!!d.allowDots;return{allowDots:y,allowEmptyArrays:typeof d.allowEmptyArrays=="boolean"?!!d.allowEmptyArrays:n.allowEmptyArrays,allowPrototypes:typeof d.allowPrototypes=="boolean"?d.allowPrototypes:n.allowPrototypes,allowSparse:typeof d.allowSparse=="boolean"?d.allowSparse:n.allowSparse,arrayLimit:typeof d.arrayLimit=="number"?d.arrayLimit:n.arrayLimit,charset:h,charsetSentinel:typeof d.charsetSentinel=="boolean"?d.charsetSentinel:n.charsetSentinel,comma:typeof d.comma=="boolean"?d.comma:n.comma,decodeDotInKeys:typeof d.decodeDotInKeys=="boolean"?d.decodeDotInKeys:n.decodeDotInKeys,decoder:typeof d.decoder=="function"?d.decoder:n.decoder,delimiter:typeof d.delimiter=="string"||e.isRegExp(d.delimiter)?d.delimiter:n.delimiter,depth:typeof d.depth=="number"||d.depth===!1?+d.depth:n.depth,duplicates:p,ignoreQueryPrefix:d.ignoreQueryPrefix===!0,interpretNumericEntities:typeof d.interpretNumericEntities=="boolean"?d.interpretNumericEntities:n.interpretNumericEntities,parameterLimit:typeof d.parameterLimit=="number"?d.parameterLimit:n.parameterLimit,parseArrays:d.parseArrays!==!1,plainObjects:typeof d.plainObjects=="boolean"?d.plainObjects:n.plainObjects,strictDepth:typeof d.strictDepth=="boolean"?!!d.strictDepth:n.strictDepth,strictNullHandling:typeof d.strictNullHandling=="boolean"?d.strictNullHandling:n.strictNullHandling}};return Mu=function(d,h){var p=f(h);if(d===""||d===null||typeof d>"u")return p.plainObjects?Object.create(null):{};for(var y=typeof d=="string"?l(d,p):d,v=p.plainObjects?Object.create(null):{},g=Object.keys(y),m=0;m",'"',"`"," ","\r",` `," "],a=["{","}","|","\\","^","`"].concat(o),s=["'"].concat(a),l=["%","/","?",";","#"].concat(s),u=["/","?","#"],c=255,f=/^[+a-z0-9A-Z_-]{0,63}$/,d=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,h={javascript:!0,"javascript:":!0},p={javascript:!0,"javascript:":!0},y={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},v=YR();function g(w,E,T){if(w&&typeof w=="object"&&w instanceof t)return w;var C=new t;return C.parse(w,E,T),C}t.prototype.parse=function(w,E,T){if(typeof w!="string")throw new TypeError("Parameter 'url' must be a string, not "+typeof w);var C=w.indexOf("?"),j=C!==-1&&C127?ee+="x":ee+=K[X];if(!ee.match(f)){var Y=ue.slice(0,B),re=ue.slice(B+1),ne=K.match(d);ne&&(Y.push(ne[1]),re.unshift(ne[2])),re.length&&(M="/"+re.join(".")+M),this.hostname=Y.join(".");break}}}this.hostname.length>c?this.hostname="":this.hostname=this.hostname.toLowerCase(),Z||(this.hostname=e.toASCII(this.hostname));var k=this.port?":"+this.port:"",L=this.hostname||"";this.host=L+k,this.href+=this.host,Z&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),M[0]!=="/"&&(M="/"+M))}if(!h[G])for(var B=0,ge=s.length;B0?T.host.split("@"):!1;ee&&(T.auth=ee.shift(),T.hostname=ee.shift(),T.host=T.hostname)}return T.search=w.search,T.query=w.query,(T.pathname!==null||T.search!==null)&&(T.path=(T.pathname?T.pathname:"")+(T.search?T.search:"")),T.href=T.format(),T}if(!ue.length)return T.pathname=null,T.search?T.path="/"+T.search:T.path=null,T.href=T.format(),T;for(var X=ue.slice(-1)[0],V=(T.host||w.host||ue.length>1)&&(X==="."||X==="..")||X==="",Y=0,re=ue.length;re>=0;re--)X=ue[re],X==="."?ue.splice(re,1):X===".."?(ue.splice(re,1),Y++):Y&&(ue.splice(re,1),Y--);if(!ie&&!Z)for(;Y--;Y)ue.unshift("..");ie&&ue[0]!==""&&(!ue[0]||ue[0].charAt(0)!=="/")&&ue.unshift(""),V&&ue.join("/").substr(-1)!=="/"&&ue.push("");var ne=ue[0]===""||ue[0]&&ue[0].charAt(0)==="/";if(K){T.hostname=ne?"":ue.length?ue.shift():"",T.host=T.hostname;var ee=T.host&&T.host.indexOf("@")>0?T.host.split("@"):!1;ee&&(T.auth=ee.shift(),T.hostname=ee.shift(),T.host=T.hostname)}return ie=ie||T.host&&ue.length,ie&&!ne&&ue.unshift(""),ue.length>0?T.pathname=ue.join("/"):(T.pathname=null,T.path=null),(T.pathname!==null||T.search!==null)&&(T.path=(T.pathname?T.pathname:"")+(T.search?T.search:"")),T.auth=w.auth||T.auth,T.slashes=T.slashes||w.slashes,T.href=T.format(),T},t.prototype.parseHost=function(){var w=this.host,E=n.exec(w);E&&(E=E[0],E!==":"&&(this.port=E.substr(1)),w=w.substr(0,w.length-E.length)),w&&(this.hostname=w)},$i.parse=g,$i.resolve=b,$i.resolveObject=_,$i.format=m,$i.Url=t,$i}function ZS(e){if(typeof e=="string")e=new URL(e);else if(!(e instanceof URL))throw new Deno.errors.InvalidData("invalid argument path , must be a string or URL");if(e.protocol!=="file:")throw new Deno.errors.InvalidData("invalid url scheme");return ac?XR(e):QR(e)}function XR(e){let t=e.hostname,r=e.pathname;for(let n=0;nfE||i!==":")throw new Deno.errors.InvalidData("file url path must be absolute");return r.slice(1)}}function QR(e){if(e.hostname!=="")throw new Deno.errors.InvalidData("invalid file url hostname");let t=e.pathname;for(let r=0;r{Oe(),Re(),Le(),gR(),PR(),WR(),XS(),tE=Object.freeze(Object.create(null)),Eu={},gg=!1,xu=typeof globalThis<"u"?globalThis:typeof self<"u"?self:Es,Tu={},mg=!1,Au={},yg=!1,Iu={},vg=!1,Cu={},bg=!1,Mu={},_g=!1,ku={},wg=!1,$i={},Sg=!1,sr=KR(),sr.parse,sr.resolve,sr.resolveObject,sr.format,sr.Url,zb=typeof Deno<"u"?Deno.build.os==="windows"?"win32":Deno.build.os:void 0,sr.URL=typeof URL<"u"?URL:null,sr.pathToFileURL=eE,sr.fileURLToPath=ZS,rE=sr.Url,nE=sr.format,iE=sr.resolve,oE=sr.resolveObject,sE=sr.parse,aE=sr.URL,lE=92,uE=47,cE=97,fE=122,ac=zb==="win32",dE=/\//g,hE=/%/g,pE=/\\/g,gE=/\n/g,mE=/\r/g,yE=/\t/g}),ZR=Be((e,t)=>{Oe(),Re(),Le(),t.exports=function(){throw new Error("ws does not work in the browser. Browser clients must use the native WebSocket object")}}),Um=Be(e=>{Oe(),Re(),Le(),Object.defineProperty(e,"__esModule",{value:!0}),e.BufferedDuplex=void 0,e.writev=n;var t=zo(),r=(Kt(),bt(Yt));function n(o,a){let s=new Array(o.length);for(let l=0;l{!this.destroyed&&this.readable&&this.push(l)})}_read(o){this.proxy.read(o)}_write(o,a,s){this.isSocketOpen?this.writeToProxy(o,a,s):this.writeQueue.push({chunk:o,encoding:a,cb:s})}_final(o){this.writeQueue=[],this.proxy.end(o)}_destroy(o,a){this.writeQueue=[],this.proxy.destroy(),a(o)}socketReady(){this.emit("connect"),this.isSocketOpen=!0,this.processWriteQueue()}writeToProxy(o,a,s){this.proxy.write(o,a)===!1?this.proxy.once("drain",s):s()}processWriteQueue(){for(;this.writeQueue.length>0;){let{chunk:o,encoding:a,cb:s}=this.writeQueue.shift();this.writeToProxy(o,a,s)}}};e.BufferedDuplex=i}),Cl=Be(e=>{Oe(),Re(),Le();var t=e&&e.__importDefault||function(g){return g&&g.__esModule?g:{default:g}};Object.defineProperty(e,"__esModule",{value:!0}),e.streamBuilder=e.browserStreamBuilder=void 0;var r=(Kt(),bt(Yt)),n=t(ZR()),i=t(yi()),o=zo(),a=t(Gc()),s=Um(),l=(0,i.default)("mqttjs:ws"),u=["rejectUnauthorized","ca","cert","key","pfx","passphrase"];function c(g,m){let b=`${g.protocol}://${g.hostname}:${g.port}${g.path}`;return typeof g.transformWsUrl=="function"&&(b=g.transformWsUrl(b,g,m)),b}function f(g){let m=g;return g.port||(g.protocol==="wss"?m.port=443:m.port=80),g.path||(m.path="/"),g.wsOptions||(m.wsOptions={}),!a.default&&!g.forceNativeWebSocket&&g.protocol==="wss"&&u.forEach(b=>{Object.prototype.hasOwnProperty.call(g,b)&&!Object.prototype.hasOwnProperty.call(g.wsOptions,b)&&(m.wsOptions[b]=g[b])}),m}function d(g){let m=f(g);if(m.hostname||(m.hostname=m.host),!m.hostname){if(typeof document>"u")throw new Error("Could not determine host. Specify host manually.");let b=new URL(document.URL);m.hostname=b.hostname,m.port||(m.port=Number(b.port))}return m.objectMode===void 0&&(m.objectMode=!(m.binary===!0||m.binary===void 0)),m}function h(g,m,b){l("createWebSocket"),l(`protocol: ${b.protocolId} ${b.protocolVersion}`);let _=b.protocolId==="MQIsdp"&&b.protocolVersion===3?"mqttv3.1":"mqtt";l(`creating new Websocket for url: ${m} and protocol: ${_}`);let w;return b.createWebsocket?w=b.createWebsocket(m,[_],b):w=new n.default(m,[_],b.wsOptions),w}function p(g,m){let b=m.protocolId==="MQIsdp"&&m.protocolVersion===3?"mqttv3.1":"mqtt",_=c(m,g),w;return m.createWebsocket?w=m.createWebsocket(_,[b],m):w=new WebSocket(_,[b]),w.binaryType="arraybuffer",w}var y=(g,m)=>{l("streamBuilder");let b=f(m);b.hostname=b.hostname||b.host||"localhost";let _=c(b,g),w=h(g,_,b),E=n.default.createWebSocketStream(w,b.wsOptions);return E.url=_,w.on("close",()=>{E.destroy()}),E};e.streamBuilder=y;var v=(g,m)=>{l("browserStreamBuilder");let b,_=d(m).browserBufferSize||1024*512,w=m.browserBufferTimeout||1e3,E=!m.objectMode,T=p(g,m),C=P(m,G,q);m.objectMode||(C._writev=s.writev.bind(C)),C.on("close",()=>{T.close()});let j=typeof T.addEventListener<"u";T.readyState===T.OPEN?(b=C,b.socket=T):(b=new s.BufferedDuplex(m,C,T),j?T.addEventListener("open",N):T.onopen=N),j?(T.addEventListener("close",M),T.addEventListener("error",R),T.addEventListener("message",O)):(T.onclose=M,T.onerror=R,T.onmessage=O);function P(z,B,ae){let $=new o.Transform({objectMode:z.objectMode});return $._write=B,$._flush=ae,$}function N(){l("WebSocket onOpen"),b instanceof s.BufferedDuplex&&b.socketReady()}function M(z){l("WebSocket onClose",z),b.end(),b.destroy()}function R(z){l("WebSocket onError",z);let B=new Error("WebSocket error");B.event=z,b.destroy(B)}async function O(z){if(!C||!C.readable||!C.writable)return;let{data:B}=z;B instanceof ArrayBuffer?B=r.Buffer.from(B):B instanceof Blob?B=r.Buffer.from(await new Response(B).arrayBuffer()):B=r.Buffer.from(B,"utf8"),C.push(B)}function G(z,B,ae){if(T.bufferedAmount>_){setTimeout(G,w,z,B,ae);return}E&&typeof z=="string"&&(z=r.Buffer.from(z,"utf8"));try{T.send(z)}catch($){return ae($)}ae()}function q(z){T.close(),z()}return b};e.browserStreamBuilder=v}),jm={};Us(jm,{Server:()=>Tt,Socket:()=>Tt,Stream:()=>Tt,_createServerHandle:()=>Tt,_normalizeArgs:()=>Tt,_setSimultaneousAccepts:()=>Tt,connect:()=>Tt,createConnection:()=>Tt,createServer:()=>Tt,default:()=>vE,isIP:()=>Tt,isIPv4:()=>Tt,isIPv6:()=>Tt});function Tt(){throw new Error("Node.js net module is not supported by JSPM core outside of Node.js")}var vE,bE=Or(()=>{Oe(),Re(),Le(),vE={_createServerHandle:Tt,_normalizeArgs:Tt,_setSimultaneousAccepts:Tt,connect:Tt,createConnection:Tt,createServer:Tt,isIP:Tt,isIPv4:Tt,isIPv6:Tt,Server:Tt,Socket:Tt,Stream:Tt}}),_E=Be((e,t)=>{Oe(),Re(),Le(),t.exports={}}),Hb=Be(e=>{Oe(),Re(),Le();var t=e&&e.__importDefault||function(s){return s&&s.__esModule?s:{default:s}};Object.defineProperty(e,"__esModule",{value:!0});var r=t((bE(),bt(jm))),n=t(yi()),i=t(_E()),o=(0,n.default)("mqttjs:tcp"),a=(s,l)=>{if(l.port=l.port||1883,l.hostname=l.hostname||l.host||"localhost",l.socksProxy)return(0,i.default)(l.hostname,l.port,l.socksProxy,{timeout:l.socksTimeout});let{port:u,path:c}=l,f=l.hostname;return o("port %d and host %s",u,f),r.default.createConnection({port:u,host:f,path:c})};e.default=a}),wE={};Us(wE,{default:()=>SE});var SE,eN=Or(()=>{Oe(),Re(),Le(),SE={}}),qb=Be(e=>{Oe(),Re(),Le();var t=e&&e.__importDefault||function(u){return u&&u.__esModule?u:{default:u}};Object.defineProperty(e,"__esModule",{value:!0});var r=(eN(),bt(wE)),n=t((bE(),bt(jm))),i=t(yi()),o=t(_E()),a=(0,i.default)("mqttjs:tls");function s(u){let{host:c,port:f,socksProxy:d,...h}=u;if(d!==void 0){let p=(0,o.default)(c,f,d,{timeout:u.socksTimeout});return(0,r.connect)({...h,socket:p})}return(0,r.connect)(u)}var l=(u,c)=>{c.port=c.port||8883,c.host=c.hostname||c.host||"localhost",n.default.isIP(c.host)===0&&(c.servername=c.host),c.rejectUnauthorized=c.rejectUnauthorized!==!1,delete c.path,a("port %d host %s rejectUnauthorized %b",c.port,c.host,c.rejectUnauthorized);let f=s(c);f.on("secureConnect",()=>{c.rejectUnauthorized&&!f.authorized?f.emit("error",new Error("TLS not authorized")):f.removeListener("error",d)});function d(h){c.rejectUnauthorized&&u.emit("error",h),f.end()}return f.on("error",d),f};e.default=l}),Gb=Be(e=>{Oe(),Re(),Le(),Object.defineProperty(e,"__esModule",{value:!0});var t=(Kt(),bt(Yt)),r=zo(),n=Um(),i,o,a;function s(){let d=new r.Transform;return d._write=(h,p,y)=>{i.send({data:h.buffer,success(){y()},fail(v){y(new Error(v))}})},d._flush=h=>{i.close({success(){h()}})},d}function l(d){d.hostname||(d.hostname="localhost"),d.path||(d.path="/"),d.wsOptions||(d.wsOptions={})}function u(d,h){let p=d.protocol==="wxs"?"wss":"ws",y=`${p}://${d.hostname}${d.path}`;return d.port&&d.port!==80&&d.port!==443&&(y=`${p}://${d.hostname}:${d.port}${d.path}`),typeof d.transformWsUrl=="function"&&(y=d.transformWsUrl(y,d,h)),y}function c(){i.onOpen(()=>{a.socketReady()}),i.onMessage(d=>{let{data:h}=d;h instanceof ArrayBuffer?h=t.Buffer.from(h):h=t.Buffer.from(h,"utf8"),o.push(h)}),i.onClose(()=>{a.emit("close"),a.end(),a.destroy()}),i.onError(d=>{let h=new Error(d.errMsg);a.destroy(h)})}var f=(d,h)=>{if(h.hostname=h.hostname||h.host,!h.hostname)throw new Error("Could not determine host. Specify host manually.");let p=h.protocolId==="MQIsdp"&&h.protocolVersion===3?"mqttv3.1":"mqtt";l(h);let y=u(h,d);i=wx.connectSocket({url:y,protocols:[p]}),o=s(),a=new n.BufferedDuplex(h,o,i),a._destroy=(g,m)=>{i.close({success(){m&&m(g)}})};let v=a.destroy;return a.destroy=(g,m)=>(a.destroy=v,setTimeout(()=>{i.close({fail(){a._destroy(g,m)}})},0),a),c(),a};e.default=f}),Yb=Be(e=>{Oe(),Re(),Le(),Object.defineProperty(e,"__esModule",{value:!0});var t=(Kt(),bt(Yt)),r=zo(),n=Um(),i,o,a,s=!1;function l(){let h=new r.Transform;return h._write=(p,y,v)=>{i.sendSocketMessage({data:p.buffer,success(){v()},fail(){v(new Error)}})},h._flush=p=>{i.closeSocket({success(){p()}})},h}function u(h){h.hostname||(h.hostname="localhost"),h.path||(h.path="/"),h.wsOptions||(h.wsOptions={})}function c(h,p){let y=h.protocol==="alis"?"wss":"ws",v=`${y}://${h.hostname}${h.path}`;return h.port&&h.port!==80&&h.port!==443&&(v=`${y}://${h.hostname}:${h.port}${h.path}`),typeof h.transformWsUrl=="function"&&(v=h.transformWsUrl(v,h,p)),v}function f(){s||(s=!0,i.onSocketOpen(()=>{a.socketReady()}),i.onSocketMessage(h=>{if(typeof h.data=="string"){let p=t.Buffer.from(h.data,"base64");o.push(p)}else{let p=new FileReader;p.addEventListener("load",()=>{if(p.result instanceof ArrayBuffer){o.push(t.Buffer.from(p.result));return}o.push(t.Buffer.from(p.result,"utf-8"))}),p.readAsArrayBuffer(h.data)}}),i.onSocketClose(()=>{a.end(),a.destroy()}),i.onSocketError(h=>{a.destroy(h)}))}var d=(h,p)=>{if(p.hostname=p.hostname||p.host,!p.hostname)throw new Error("Could not determine host. Specify host manually.");let y=p.protocolId==="MQIsdp"&&p.protocolVersion===3?"mqttv3.1":"mqtt";u(p);let v=c(p,h);return i=p.my,i.connectSocket({url:v,protocols:y}),o=l(),a=new n.BufferedDuplex(p,o,i),f(),a};e.default=d}),tN=Be(e=>{Oe(),Re(),Le();var t=e&&e.__importDefault||function(f){return f&&f.__esModule?f:{default:f}};Object.defineProperty(e,"__esModule",{value:!0}),e.connectAsync=c;var r=t(yi()),n=t((JR(),bt(QS))),i=t(Np()),o=t(Gc());typeof xt?.nextTick!="function"&&(xt.nextTick=setImmediate);var a=(0,r.default)("mqttjs"),s=null;function l(f){let d;if(f.auth)if(d=f.auth.match(/^(.+):(.+)$/),d){let[,h,p]=d;f.username=h,f.password=p}else f.username=f.auth}function u(f,d){if(a("connecting to an MQTT broker..."),typeof f=="object"&&!d&&(d=f,f=""),d=d||{},f&&typeof f=="string"){let y=n.default.parse(f,!0),v={};if(y.port!=null&&(v.port=Number(y.port)),v.host=y.hostname,v.query=y.query,v.auth=y.auth,v.protocol=y.protocol,v.path=y.path,d={...v,...d},!d.protocol)throw new Error("Missing protocol");d.protocol=d.protocol.replace(/:$/,"")}if(d.unixSocket=d.unixSocket||d.protocol?.includes("+unix"),d.unixSocket?d.protocol=d.protocol.replace("+unix",""):!d.protocol?.startsWith("ws")&&!d.protocol?.startsWith("wx")&&delete d.path,l(d),d.query&&typeof d.query.clientId=="string"&&(d.clientId=d.query.clientId),o.default||d.unixSocket?d.socksProxy=void 0:d.socksProxy===void 0&&typeof xt<"u"&&(d.socksProxy=xt.env.MQTTJS_SOCKS_PROXY),d.cert&&d.key)if(d.protocol){if(["mqtts","wss","wxs","alis"].indexOf(d.protocol)===-1)switch(d.protocol){case"mqtt":d.protocol="mqtts";break;case"ws":d.protocol="wss";break;case"wx":d.protocol="wxs";break;case"ali":d.protocol="alis";break;default:throw new Error(`Unknown protocol for secure connection: "${d.protocol}"!`)}}else throw new Error("Missing secure protocol key");if(s||(s={},!o.default&&!d.forceNativeWebSocket?(s.ws=Cl().streamBuilder,s.wss=Cl().streamBuilder,s.mqtt=Hb().default,s.tcp=Hb().default,s.ssl=qb().default,s.tls=s.ssl,s.mqtts=qb().default):(s.ws=Cl().browserStreamBuilder,s.wss=Cl().browserStreamBuilder,s.wx=Gb().default,s.wxs=Gb().default,s.ali=Yb().default,s.alis=Yb().default)),!s[d.protocol]){let y=["mqtts","wss"].indexOf(d.protocol)!==-1;d.protocol=["mqtt","mqtts","ws","wss","wx","wxs","ali","alis"].filter((v,g)=>y&&g%2===0?!1:typeof s[v]=="function")[0]}if(d.clean===!1&&!d.clientId)throw new Error("Missing clientId for unclean clients");d.protocol&&(d.defaultProtocol=d.protocol);function h(y){return d.servers&&((!y._reconnectCount||y._reconnectCount===d.servers.length)&&(y._reconnectCount=0),d.host=d.servers[y._reconnectCount].host,d.port=d.servers[y._reconnectCount].port,d.protocol=d.servers[y._reconnectCount].protocol?d.servers[y._reconnectCount].protocol:d.defaultProtocol,d.hostname=d.host,y._reconnectCount++),a("calling streambuilder for",d.protocol),s[d.protocol](y,d)}let p=new i.default(h,d);return p.on("error",()=>{}),p}function c(f,d,h=!0){return new Promise((p,y)=>{let v=u(f,d),g={connect:b=>{m(),p(v)},end:()=>{m(),p(v)},error:b=>{m(),v.end(),y(b)}};h===!1&&(g.close=()=>{g.error(new Error("Couldn't connect to server"))});function m(){Object.keys(g).forEach(b=>{v.off(b,g[b])})}Object.keys(g).forEach(b=>{v.on(b,g[b])})})}e.default=u}),Kb=Be(e=>{Oe(),Re(),Le();var t=e&&e.__createBinding||(Object.create?function(h,p,y,v){v===void 0&&(v=y);var g=Object.getOwnPropertyDescriptor(p,y);(!g||("get"in g?!p.__esModule:g.writable||g.configurable))&&(g={enumerable:!0,get:function(){return p[y]}}),Object.defineProperty(h,v,g)}:function(h,p,y,v){v===void 0&&(v=y),h[v]=p[y]}),r=e&&e.__setModuleDefault||(Object.create?function(h,p){Object.defineProperty(h,"default",{enumerable:!0,value:p})}:function(h,p){h.default=p}),n=e&&e.__importStar||(function(){var h=function(p){return h=Object.getOwnPropertyNames||function(y){var v=[];for(var g in y)Object.prototype.hasOwnProperty.call(y,g)&&(v[v.length]=g);return v},h(p)};return function(p){if(p&&p.__esModule)return p;var y={};if(p!=null)for(var v=h(p),g=0;g{Oe(),Re(),Le();var t=e&&e.__createBinding||(Object.create?function(a,s,l,u){u===void 0&&(u=l);var c=Object.getOwnPropertyDescriptor(s,l);(!c||("get"in c?!s.__esModule:c.writable||c.configurable))&&(c={enumerable:!0,get:function(){return s[l]}}),Object.defineProperty(a,u,c)}:function(a,s,l,u){u===void 0&&(u=l),a[u]=s[l]}),r=e&&e.__setModuleDefault||(Object.create?function(a,s){Object.defineProperty(a,"default",{enumerable:!0,value:s})}:function(a,s){a.default=s}),n=e&&e.__importStar||(function(){var a=function(s){return a=Object.getOwnPropertyNames||function(l){var u=[];for(var c in l)Object.prototype.hasOwnProperty.call(l,c)&&(u[u.length]=c);return u},a(s)};return function(s){if(s&&s.__esModule)return s;var l={};if(s!=null)for(var u=a(s),c=0;c0)throw new Error("Invalid string. Length must be a multiple of 4");var y=h.indexOf("=");y===-1&&(y=p);var v=y===p?0:4-y%4;return[y,v]}function s(h){var p=a(h),y=p[0],v=p[1];return(y+v)*3/4-v}function l(h,p,y){return(p+y)*3/4-y}function u(h){var p,y=a(h),v=y[0],g=y[1],m=new r(l(h,v,g)),b=0,_=g>0?v-4:v,w;for(w=0;w<_;w+=4)p=t[h.charCodeAt(w)]<<18|t[h.charCodeAt(w+1)]<<12|t[h.charCodeAt(w+2)]<<6|t[h.charCodeAt(w+3)],m[b++]=p>>16&255,m[b++]=p>>8&255,m[b++]=p&255;return g===2&&(p=t[h.charCodeAt(w)]<<2|t[h.charCodeAt(w+1)]>>4,m[b++]=p&255),g===1&&(p=t[h.charCodeAt(w)]<<10|t[h.charCodeAt(w+1)]<<4|t[h.charCodeAt(w+2)]>>2,m[b++]=p>>8&255,m[b++]=p&255),m}function c(h){return e[h>>18&63]+e[h>>12&63]+e[h>>6&63]+e[h&63]}function f(h,p,y){for(var v,g=[],m=p;m_?_:b+m));return v===1?(p=h[y-1],g.push(e[p>>2]+e[p<<4&63]+"==")):v===2&&(p=(h[y-2]<<8)+h[y-1],g.push(e[p>>10]+e[p>>4&63]+e[p<<2&63]+"=")),g.join("")}return aa}var Ml={};var Qb;function oN(){return Qb||(Qb=1,Ml.read=function(e,t,r,n,i){var o,a,s=i*8-n-1,l=(1<>1,c=-7,f=r?i-1:0,d=r?-1:1,h=e[t+f];for(f+=d,o=h&(1<<-c)-1,h>>=-c,c+=s;c>0;o=o*256+e[t+f],f+=d,c-=8);for(a=o&(1<<-c)-1,o>>=-c,c+=n;c>0;a=a*256+e[t+f],f+=d,c-=8);if(o===0)o=1-u;else{if(o===l)return a?NaN:(h?-1:1)*(1/0);a=a+Math.pow(2,n),o=o-u}return(h?-1:1)*a*Math.pow(2,o-n)},Ml.write=function(e,t,r,n,i,o){var a,s,l,u=o*8-i-1,c=(1<>1,d=i===23?Math.pow(2,-24)-Math.pow(2,-77):0,h=n?0:o-1,p=n?1:-1,y=t<0||t===0&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=c):(a=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-a))<1&&(a--,l*=2),a+f>=1?t+=d/l:t+=d*Math.pow(2,1-f),t*l>=2&&(a++,l/=2),a+f>=c?(s=0,a=c):a+f>=1?(s=(t*l-1)*Math.pow(2,i),a=a+f):(s=t*Math.pow(2,f-1)*Math.pow(2,i),a=0));i>=8;e[r+h]=s&255,h+=p,s/=256,i-=8);for(a=a<0;e[r+h]=a&255,h+=p,a/=256,u-=8);e[r+h-p]|=y*128}),Ml}var Jb;function qr(){return Jb||(Jb=1,(function(e){const t=iN(),r=oN(),n=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;e.Buffer=s,e.SlowBuffer=m,e.INSPECT_MAX_BYTES=50;const i=2147483647;e.kMaxLength=i,s.TYPED_ARRAY_SUPPORT=o(),!s.TYPED_ARRAY_SUPPORT&&typeof console<"u"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function o(){try{const x=new Uint8Array(1),S={foo:function(){return 42}};return Object.setPrototypeOf(S,Uint8Array.prototype),Object.setPrototypeOf(x,S),x.foo()===42}catch{return!1}}Object.defineProperty(s.prototype,"parent",{enumerable:!0,get:function(){if(s.isBuffer(this))return this.buffer}}),Object.defineProperty(s.prototype,"offset",{enumerable:!0,get:function(){if(s.isBuffer(this))return this.byteOffset}});function a(x){if(x>i)throw new RangeError('The value "'+x+'" is invalid for option "size"');const S=new Uint8Array(x);return Object.setPrototypeOf(S,s.prototype),S}function s(x,S,A){if(typeof x=="number"){if(typeof S=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return f(x)}return l(x,S,A)}s.poolSize=8192;function l(x,S,A){if(typeof x=="string")return d(x,S);if(ArrayBuffer.isView(x))return p(x);if(x==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof x);if(me(x,ArrayBuffer)||x&&me(x.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(me(x,SharedArrayBuffer)||x&&me(x.buffer,SharedArrayBuffer)))return y(x,S,A);if(typeof x=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');const W=x.valueOf&&x.valueOf();if(W!=null&&W!==x)return s.from(W,S,A);const ce=v(x);if(ce)return ce;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof x[Symbol.toPrimitive]=="function")return s.from(x[Symbol.toPrimitive]("string"),S,A);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof x)}s.from=function(x,S,A){return l(x,S,A)},Object.setPrototypeOf(s.prototype,Uint8Array.prototype),Object.setPrototypeOf(s,Uint8Array);function u(x){if(typeof x!="number")throw new TypeError('"size" argument must be of type number');if(x<0)throw new RangeError('The value "'+x+'" is invalid for option "size"')}function c(x,S,A){return u(x),x<=0?a(x):S!==void 0?typeof A=="string"?a(x).fill(S,A):a(x).fill(S):a(x)}s.alloc=function(x,S,A){return c(x,S,A)};function f(x){return u(x),a(x<0?0:g(x)|0)}s.allocUnsafe=function(x){return f(x)},s.allocUnsafeSlow=function(x){return f(x)};function d(x,S){if((typeof S!="string"||S==="")&&(S="utf8"),!s.isEncoding(S))throw new TypeError("Unknown encoding: "+S);const A=b(x,S)|0;let W=a(A);const ce=W.write(x,S);return ce!==A&&(W=W.slice(0,ce)),W}function h(x){const S=x.length<0?0:g(x.length)|0,A=a(S);for(let W=0;W=i)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i.toString(16)+" bytes");return x|0}function m(x){return+x!=x&&(x=0),s.alloc(+x)}s.isBuffer=function(S){return S!=null&&S._isBuffer===!0&&S!==s.prototype},s.compare=function(S,A){if(me(S,Uint8Array)&&(S=s.from(S,S.offset,S.byteLength)),me(A,Uint8Array)&&(A=s.from(A,A.offset,A.byteLength)),!s.isBuffer(S)||!s.isBuffer(A))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(S===A)return 0;let W=S.length,ce=A.length;for(let ve=0,pe=Math.min(W,ce);vece.length?(s.isBuffer(pe)||(pe=s.from(pe)),pe.copy(ce,ve)):Uint8Array.prototype.set.call(ce,pe,ve);else if(s.isBuffer(pe))pe.copy(ce,ve);else throw new TypeError('"list" argument must be an Array of Buffers');ve+=pe.length}return ce};function b(x,S){if(s.isBuffer(x))return x.length;if(ArrayBuffer.isView(x)||me(x,ArrayBuffer))return x.byteLength;if(typeof x!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof x);const A=x.length,W=arguments.length>2&&arguments[2]===!0;if(!W&&A===0)return 0;let ce=!1;for(;;)switch(S){case"ascii":case"latin1":case"binary":return A;case"utf8":case"utf-8":return Q(x).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return A*2;case"hex":return A>>>1;case"base64":return fe(x).length;default:if(ce)return W?-1:Q(x).length;S=(""+S).toLowerCase(),ce=!0}}s.byteLength=b;function _(x,S,A){let W=!1;if((S===void 0||S<0)&&(S=0),S>this.length||((A===void 0||A>this.length)&&(A=this.length),A<=0)||(A>>>=0,S>>>=0,A<=S))return"";for(x||(x="utf8");;)switch(x){case"hex":return ae(this,S,A);case"utf8":case"utf-8":return O(this,S,A);case"ascii":return z(this,S,A);case"latin1":case"binary":return B(this,S,A);case"base64":return R(this,S,A);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return $(this,S,A);default:if(W)throw new TypeError("Unknown encoding: "+x);x=(x+"").toLowerCase(),W=!0}}s.prototype._isBuffer=!0;function w(x,S,A){const W=x[S];x[S]=x[A],x[A]=W}s.prototype.swap16=function(){const S=this.length;if(S%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let A=0;AA&&(S+=" ... "),""},n&&(s.prototype[n]=s.prototype.inspect),s.prototype.compare=function(S,A,W,ce,ve){if(me(S,Uint8Array)&&(S=s.from(S,S.offset,S.byteLength)),!s.isBuffer(S))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof S);if(A===void 0&&(A=0),W===void 0&&(W=S?S.length:0),ce===void 0&&(ce=0),ve===void 0&&(ve=this.length),A<0||W>S.length||ce<0||ve>this.length)throw new RangeError("out of range index");if(ce>=ve&&A>=W)return 0;if(ce>=ve)return-1;if(A>=W)return 1;if(A>>>=0,W>>>=0,ce>>>=0,ve>>>=0,this===S)return 0;let pe=ve-ce,Ie=W-A;const Ue=Math.min(pe,Ie),je=this.slice(ce,ve),qe=S.slice(A,W);for(let He=0;He2147483647?A=2147483647:A<-2147483648&&(A=-2147483648),A=+A,Ee(A)&&(A=ce?0:x.length-1),A<0&&(A=x.length+A),A>=x.length){if(ce)return-1;A=x.length-1}else if(A<0)if(ce)A=0;else return-1;if(typeof S=="string"&&(S=s.from(S,W)),s.isBuffer(S))return S.length===0?-1:T(x,S,A,W,ce);if(typeof S=="number")return S=S&255,typeof Uint8Array.prototype.indexOf=="function"?ce?Uint8Array.prototype.indexOf.call(x,S,A):Uint8Array.prototype.lastIndexOf.call(x,S,A):T(x,[S],A,W,ce);throw new TypeError("val must be string, number or Buffer")}function T(x,S,A,W,ce){let ve=1,pe=x.length,Ie=S.length;if(W!==void 0&&(W=String(W).toLowerCase(),W==="ucs2"||W==="ucs-2"||W==="utf16le"||W==="utf-16le")){if(x.length<2||S.length<2)return-1;ve=2,pe/=2,Ie/=2,A/=2}function Ue(qe,He){return ve===1?qe[He]:qe.readUInt16BE(He*ve)}let je;if(ce){let qe=-1;for(je=A;jepe&&(A=pe-Ie),je=A;je>=0;je--){let qe=!0;for(let He=0;Hece&&(W=ce)):W=ce;const ve=S.length;W>ve/2&&(W=ve/2);let pe;for(pe=0;pe>>0,isFinite(W)?(W=W>>>0,ce===void 0&&(ce="utf8")):(ce=W,W=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");const ve=this.length-A;if((W===void 0||W>ve)&&(W=ve),S.length>0&&(W<0||A<0)||A>this.length)throw new RangeError("Attempt to write outside buffer bounds");ce||(ce="utf8");let pe=!1;for(;;)switch(ce){case"hex":return C(this,S,A,W);case"utf8":case"utf-8":return j(this,S,A,W);case"ascii":case"latin1":case"binary":return P(this,S,A,W);case"base64":return N(this,S,A,W);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return M(this,S,A,W);default:if(pe)throw new TypeError("Unknown encoding: "+ce);ce=(""+ce).toLowerCase(),pe=!0}},s.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function R(x,S,A){return S===0&&A===x.length?t.fromByteArray(x):t.fromByteArray(x.slice(S,A))}function O(x,S,A){A=Math.min(x.length,A);const W=[];let ce=S;for(;ce239?4:ve>223?3:ve>191?2:1;if(ce+Ie<=A){let Ue,je,qe,He;switch(Ie){case 1:ve<128&&(pe=ve);break;case 2:Ue=x[ce+1],(Ue&192)===128&&(He=(ve&31)<<6|Ue&63,He>127&&(pe=He));break;case 3:Ue=x[ce+1],je=x[ce+2],(Ue&192)===128&&(je&192)===128&&(He=(ve&15)<<12|(Ue&63)<<6|je&63,He>2047&&(He<55296||He>57343)&&(pe=He));break;case 4:Ue=x[ce+1],je=x[ce+2],qe=x[ce+3],(Ue&192)===128&&(je&192)===128&&(qe&192)===128&&(He=(ve&15)<<18|(Ue&63)<<12|(je&63)<<6|qe&63,He>65535&&He<1114112&&(pe=He))}}pe===null?(pe=65533,Ie=1):pe>65535&&(pe-=65536,W.push(pe>>>10&1023|55296),pe=56320|pe&1023),W.push(pe),ce+=Ie}return q(W)}const G=4096;function q(x){const S=x.length;if(S<=G)return String.fromCharCode.apply(String,x);let A="",W=0;for(;WW)&&(A=W);let ce="";for(let ve=S;veW&&(S=W),A<0?(A+=W,A<0&&(A=0)):A>W&&(A=W),AA)throw new RangeError("Trying to access beyond buffer length")}s.prototype.readUintLE=s.prototype.readUIntLE=function(S,A,W){S=S>>>0,A=A>>>0,W||ie(S,A,this.length);let ce=this[S],ve=1,pe=0;for(;++pe>>0,A=A>>>0,W||ie(S,A,this.length);let ce=this[S+--A],ve=1;for(;A>0&&(ve*=256);)ce+=this[S+--A]*ve;return ce},s.prototype.readUint8=s.prototype.readUInt8=function(S,A){return S=S>>>0,A||ie(S,1,this.length),this[S]},s.prototype.readUint16LE=s.prototype.readUInt16LE=function(S,A){return S=S>>>0,A||ie(S,2,this.length),this[S]|this[S+1]<<8},s.prototype.readUint16BE=s.prototype.readUInt16BE=function(S,A){return S=S>>>0,A||ie(S,2,this.length),this[S]<<8|this[S+1]},s.prototype.readUint32LE=s.prototype.readUInt32LE=function(S,A){return S=S>>>0,A||ie(S,4,this.length),(this[S]|this[S+1]<<8|this[S+2]<<16)+this[S+3]*16777216},s.prototype.readUint32BE=s.prototype.readUInt32BE=function(S,A){return S=S>>>0,A||ie(S,4,this.length),this[S]*16777216+(this[S+1]<<16|this[S+2]<<8|this[S+3])},s.prototype.readBigUInt64LE=Ne(function(S){S=S>>>0,L(S,"offset");const A=this[S],W=this[S+7];(A===void 0||W===void 0)&&F(S,this.length-8);const ce=A+this[++S]*2**8+this[++S]*2**16+this[++S]*2**24,ve=this[++S]+this[++S]*2**8+this[++S]*2**16+W*2**24;return BigInt(ce)+(BigInt(ve)<>>0,L(S,"offset");const A=this[S],W=this[S+7];(A===void 0||W===void 0)&&F(S,this.length-8);const ce=A*2**24+this[++S]*2**16+this[++S]*2**8+this[++S],ve=this[++S]*2**24+this[++S]*2**16+this[++S]*2**8+W;return(BigInt(ce)<>>0,A=A>>>0,W||ie(S,A,this.length);let ce=this[S],ve=1,pe=0;for(;++pe=ve&&(ce-=Math.pow(2,8*A)),ce},s.prototype.readIntBE=function(S,A,W){S=S>>>0,A=A>>>0,W||ie(S,A,this.length);let ce=A,ve=1,pe=this[S+--ce];for(;ce>0&&(ve*=256);)pe+=this[S+--ce]*ve;return ve*=128,pe>=ve&&(pe-=Math.pow(2,8*A)),pe},s.prototype.readInt8=function(S,A){return S=S>>>0,A||ie(S,1,this.length),this[S]&128?(255-this[S]+1)*-1:this[S]},s.prototype.readInt16LE=function(S,A){S=S>>>0,A||ie(S,2,this.length);const W=this[S]|this[S+1]<<8;return W&32768?W|4294901760:W},s.prototype.readInt16BE=function(S,A){S=S>>>0,A||ie(S,2,this.length);const W=this[S+1]|this[S]<<8;return W&32768?W|4294901760:W},s.prototype.readInt32LE=function(S,A){return S=S>>>0,A||ie(S,4,this.length),this[S]|this[S+1]<<8|this[S+2]<<16|this[S+3]<<24},s.prototype.readInt32BE=function(S,A){return S=S>>>0,A||ie(S,4,this.length),this[S]<<24|this[S+1]<<16|this[S+2]<<8|this[S+3]},s.prototype.readBigInt64LE=Ne(function(S){S=S>>>0,L(S,"offset");const A=this[S],W=this[S+7];(A===void 0||W===void 0)&&F(S,this.length-8);const ce=this[S+4]+this[S+5]*2**8+this[S+6]*2**16+(W<<24);return(BigInt(ce)<>>0,L(S,"offset");const A=this[S],W=this[S+7];(A===void 0||W===void 0)&&F(S,this.length-8);const ce=(A<<24)+this[++S]*2**16+this[++S]*2**8+this[++S];return(BigInt(ce)<>>0,A||ie(S,4,this.length),r.read(this,S,!0,23,4)},s.prototype.readFloatBE=function(S,A){return S=S>>>0,A||ie(S,4,this.length),r.read(this,S,!1,23,4)},s.prototype.readDoubleLE=function(S,A){return S=S>>>0,A||ie(S,8,this.length),r.read(this,S,!0,52,8)},s.prototype.readDoubleBE=function(S,A){return S=S>>>0,A||ie(S,8,this.length),r.read(this,S,!1,52,8)};function Z(x,S,A,W,ce,ve){if(!s.isBuffer(x))throw new TypeError('"buffer" argument must be a Buffer instance');if(S>ce||Sx.length)throw new RangeError("Index out of range")}s.prototype.writeUintLE=s.prototype.writeUIntLE=function(S,A,W,ce){if(S=+S,A=A>>>0,W=W>>>0,!ce){const Ie=Math.pow(2,8*W)-1;Z(this,S,A,W,Ie,0)}let ve=1,pe=0;for(this[A]=S&255;++pe>>0,W=W>>>0,!ce){const Ie=Math.pow(2,8*W)-1;Z(this,S,A,W,Ie,0)}let ve=W-1,pe=1;for(this[A+ve]=S&255;--ve>=0&&(pe*=256);)this[A+ve]=S/pe&255;return A+W},s.prototype.writeUint8=s.prototype.writeUInt8=function(S,A,W){return S=+S,A=A>>>0,W||Z(this,S,A,1,255,0),this[A]=S&255,A+1},s.prototype.writeUint16LE=s.prototype.writeUInt16LE=function(S,A,W){return S=+S,A=A>>>0,W||Z(this,S,A,2,65535,0),this[A]=S&255,this[A+1]=S>>>8,A+2},s.prototype.writeUint16BE=s.prototype.writeUInt16BE=function(S,A,W){return S=+S,A=A>>>0,W||Z(this,S,A,2,65535,0),this[A]=S>>>8,this[A+1]=S&255,A+2},s.prototype.writeUint32LE=s.prototype.writeUInt32LE=function(S,A,W){return S=+S,A=A>>>0,W||Z(this,S,A,4,4294967295,0),this[A+3]=S>>>24,this[A+2]=S>>>16,this[A+1]=S>>>8,this[A]=S&255,A+4},s.prototype.writeUint32BE=s.prototype.writeUInt32BE=function(S,A,W){return S=+S,A=A>>>0,W||Z(this,S,A,4,4294967295,0),this[A]=S>>>24,this[A+1]=S>>>16,this[A+2]=S>>>8,this[A+3]=S&255,A+4};function ue(x,S,A,W,ce){k(S,W,ce,x,A,7);let ve=Number(S&BigInt(4294967295));x[A++]=ve,ve=ve>>8,x[A++]=ve,ve=ve>>8,x[A++]=ve,ve=ve>>8,x[A++]=ve;let pe=Number(S>>BigInt(32)&BigInt(4294967295));return x[A++]=pe,pe=pe>>8,x[A++]=pe,pe=pe>>8,x[A++]=pe,pe=pe>>8,x[A++]=pe,A}function ge(x,S,A,W,ce){k(S,W,ce,x,A,7);let ve=Number(S&BigInt(4294967295));x[A+7]=ve,ve=ve>>8,x[A+6]=ve,ve=ve>>8,x[A+5]=ve,ve=ve>>8,x[A+4]=ve;let pe=Number(S>>BigInt(32)&BigInt(4294967295));return x[A+3]=pe,pe=pe>>8,x[A+2]=pe,pe=pe>>8,x[A+1]=pe,pe=pe>>8,x[A]=pe,A+8}s.prototype.writeBigUInt64LE=Ne(function(S,A=0){return ue(this,S,A,BigInt(0),BigInt("0xffffffffffffffff"))}),s.prototype.writeBigUInt64BE=Ne(function(S,A=0){return ge(this,S,A,BigInt(0),BigInt("0xffffffffffffffff"))}),s.prototype.writeIntLE=function(S,A,W,ce){if(S=+S,A=A>>>0,!ce){const Ue=Math.pow(2,8*W-1);Z(this,S,A,W,Ue-1,-Ue)}let ve=0,pe=1,Ie=0;for(this[A]=S&255;++ve>0)-Ie&255;return A+W},s.prototype.writeIntBE=function(S,A,W,ce){if(S=+S,A=A>>>0,!ce){const Ue=Math.pow(2,8*W-1);Z(this,S,A,W,Ue-1,-Ue)}let ve=W-1,pe=1,Ie=0;for(this[A+ve]=S&255;--ve>=0&&(pe*=256);)S<0&&Ie===0&&this[A+ve+1]!==0&&(Ie=1),this[A+ve]=(S/pe>>0)-Ie&255;return A+W},s.prototype.writeInt8=function(S,A,W){return S=+S,A=A>>>0,W||Z(this,S,A,1,127,-128),S<0&&(S=255+S+1),this[A]=S&255,A+1},s.prototype.writeInt16LE=function(S,A,W){return S=+S,A=A>>>0,W||Z(this,S,A,2,32767,-32768),this[A]=S&255,this[A+1]=S>>>8,A+2},s.prototype.writeInt16BE=function(S,A,W){return S=+S,A=A>>>0,W||Z(this,S,A,2,32767,-32768),this[A]=S>>>8,this[A+1]=S&255,A+2},s.prototype.writeInt32LE=function(S,A,W){return S=+S,A=A>>>0,W||Z(this,S,A,4,2147483647,-2147483648),this[A]=S&255,this[A+1]=S>>>8,this[A+2]=S>>>16,this[A+3]=S>>>24,A+4},s.prototype.writeInt32BE=function(S,A,W){return S=+S,A=A>>>0,W||Z(this,S,A,4,2147483647,-2147483648),S<0&&(S=4294967295+S+1),this[A]=S>>>24,this[A+1]=S>>>16,this[A+2]=S>>>8,this[A+3]=S&255,A+4},s.prototype.writeBigInt64LE=Ne(function(S,A=0){return ue(this,S,A,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),s.prototype.writeBigInt64BE=Ne(function(S,A=0){return ge(this,S,A,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function K(x,S,A,W,ce,ve){if(A+W>x.length)throw new RangeError("Index out of range");if(A<0)throw new RangeError("Index out of range")}function ee(x,S,A,W,ce){return S=+S,A=A>>>0,ce||K(x,S,A,4),r.write(x,S,A,W,23,4),A+4}s.prototype.writeFloatLE=function(S,A,W){return ee(this,S,A,!0,W)},s.prototype.writeFloatBE=function(S,A,W){return ee(this,S,A,!1,W)};function X(x,S,A,W,ce){return S=+S,A=A>>>0,ce||K(x,S,A,8),r.write(x,S,A,W,52,8),A+8}s.prototype.writeDoubleLE=function(S,A,W){return X(this,S,A,!0,W)},s.prototype.writeDoubleBE=function(S,A,W){return X(this,S,A,!1,W)},s.prototype.copy=function(S,A,W,ce){if(!s.isBuffer(S))throw new TypeError("argument should be a Buffer");if(W||(W=0),!ce&&ce!==0&&(ce=this.length),A>=S.length&&(A=S.length),A||(A=0),ce>0&&ce=this.length)throw new RangeError("Index out of range");if(ce<0)throw new RangeError("sourceEnd out of bounds");ce>this.length&&(ce=this.length),S.length-A>>0,W=W===void 0?this.length:W>>>0,S||(S=0);let ve;if(typeof S=="number")for(ve=A;ve2**32?ce=re(String(A)):typeof A=="bigint"&&(ce=String(A),(A>BigInt(2)**BigInt(32)||A<-(BigInt(2)**BigInt(32)))&&(ce=re(ce)),ce+="n"),W+=` It must be ${S}. Received ${ce}`,W},RangeError);function re(x){let S="",A=x.length;const W=x[0]==="-"?1:0;for(;A>=W+4;A-=3)S=`_${x.slice(A-3,A)}${S}`;return`${x.slice(0,A)}${S}`}function ne(x,S,A){L(S,"offset"),(x[S]===void 0||x[S+A]===void 0)&&F(S,x.length-(A+1))}function k(x,S,A,W,ce,ve){if(x>A||x= 0${pe} and < 2${pe} ** ${(ve+1)*8}${pe}`:Ie=`>= -(2${pe} ** ${(ve+1)*8-1}${pe}) and < 2 ** ${(ve+1)*8-1}${pe}`,new V.ERR_OUT_OF_RANGE("value",Ie,x)}ne(W,ce,ve)}function L(x,S){if(typeof x!="number")throw new V.ERR_INVALID_ARG_TYPE(S,"number",x)}function F(x,S,A){throw Math.floor(x)!==x?(L(x,A),new V.ERR_OUT_OF_RANGE("offset","an integer",x)):S<0?new V.ERR_BUFFER_OUT_OF_BOUNDS:new V.ERR_OUT_OF_RANGE("offset",`>= 0 and <= ${S}`,x)}const D=/[^+/0-9A-Za-z-_]/g;function H(x){if(x=x.split("=")[0],x=x.trim().replace(D,""),x.length<2)return"";for(;x.length%4!==0;)x=x+"=";return x}function Q(x,S){S=S||1/0;let A;const W=x.length;let ce=null;const ve=[];for(let pe=0;pe55295&&A<57344){if(!ce){if(A>56319){(S-=3)>-1&&ve.push(239,191,189);continue}else if(pe+1===W){(S-=3)>-1&&ve.push(239,191,189);continue}ce=A;continue}if(A<56320){(S-=3)>-1&&ve.push(239,191,189),ce=A;continue}A=(ce-55296<<10|A-56320)+65536}else ce&&(S-=3)>-1&&ve.push(239,191,189);if(ce=null,A<128){if((S-=1)<0)break;ve.push(A)}else if(A<2048){if((S-=2)<0)break;ve.push(A>>6|192,A&63|128)}else if(A<65536){if((S-=3)<0)break;ve.push(A>>12|224,A>>6&63|128,A&63|128)}else if(A<1114112){if((S-=4)<0)break;ve.push(A>>18|240,A>>12&63|128,A>>6&63|128,A&63|128)}else throw new Error("Invalid code point")}return ve}function de(x){const S=[];for(let A=0;A>8,ce=A%256,ve.push(ce),ve.push(W);return ve}function fe(x){return t.toByteArray(H(x))}function te(x,S,A,W){let ce;for(ce=0;ce=S.length||ce>=x.length);++ce)S[ce+A]=x[ce];return ce}function me(x,S){return x instanceof S||x!=null&&x.constructor!=null&&x.constructor.name!=null&&x.constructor.name===S.name}function Ee(x){return x!==x}const xe=(function(){const x="0123456789abcdef",S=new Array(256);for(let A=0;A<16;++A){const W=A*16;for(let ce=0;ce<16;++ce)S[W+ce]=x[A]+x[ce]}return S})();function Ne(x){return typeof BigInt>"u"?I:x}function I(){throw new Error("BigInt not supported")}})(Lf)),Lf}var Rf,Zb;function Rt(){if(Zb)return Rf;Zb=1;class e extends Error{constructor(r){if(!Array.isArray(r))throw new TypeError(`Expected input to be an Array, got ${typeof r}`);let n="";for(let i=0;i=b+4;m-=3)g=`_${v.slice(m-3,m)}${g}`;return`${v.slice(0,m)}${g}`}function f(v,g,m){if(typeof g=="function")return u(g.length<=m.length,`Code: ${v}; The provided arguments length (${m.length}) does not match the required ones (${g.length}).`),g(...m);const b=(g.match(/%[dfijoOs]/g)||[]).length;return u(b===m.length,`Code: ${v}; The provided arguments length (${m.length}) does not match the required ones (${b}).`),m.length===0?g:e(g,...m)}function d(v,g,m){m||(m=Error);class b extends m{constructor(...w){super(f(v,g,w))}toString(){return`${this.name} [${v}]: ${this.message}`}}Object.defineProperties(b.prototype,{name:{value:m.name,writable:!0,enumerable:!1,configurable:!0},toString:{value(){return`${this.name} [${v}]: ${this.message}`},writable:!0,enumerable:!1,configurable:!0}}),b.prototype.code=v,b.prototype[i]=!0,l[v]=b}function h(v){const g=s+v.name;return Object.defineProperty(v,"name",{value:g}),v}function p(v,g){if(v&&g&&v!==g){if(Array.isArray(g.errors))return g.errors.push(v),g;const m=new n([g,v],g.message);return m.code=g.code,m}return v||g}class y extends Error{constructor(g="The operation was aborted",m=void 0){if(m!==void 0&&typeof m!="object")throw new l.ERR_INVALID_ARG_TYPE("options","Object",m);super(g,m),this.code="ABORT_ERR",this.name="AbortError"}}return d("ERR_ASSERTION","%s",Error),d("ERR_INVALID_ARG_TYPE",(v,g,m)=>{u(typeof v=="string","'name' must be a string"),Array.isArray(g)||(g=[g]);let b="The ";v.endsWith(" argument")?b+=`${v} `:b+=`"${v}" ${v.includes(".")?"property":"argument"} `,b+="must be ";const _=[],w=[],E=[];for(const C of g)u(typeof C=="string","All expected entries have to be of type string"),o.includes(C)?_.push(C.toLowerCase()):a.test(C)?w.push(C):(u(C!=="object",'The value "object" should be written as "Object"'),E.push(C));if(w.length>0){const C=_.indexOf("object");C!==-1&&(_.splice(_,C,1),w.push("Object"))}if(_.length>0){switch(_.length){case 1:b+=`of type ${_[0]}`;break;case 2:b+=`one of type ${_[0]} or ${_[1]}`;break;default:{const C=_.pop();b+=`one of type ${_.join(", ")}, or ${C}`}}(w.length>0||E.length>0)&&(b+=" or ")}if(w.length>0){switch(w.length){case 1:b+=`an instance of ${w[0]}`;break;case 2:b+=`an instance of ${w[0]} or ${w[1]}`;break;default:{const C=w.pop();b+=`an instance of ${w.join(", ")}, or ${C}`}}E.length>0&&(b+=" or ")}switch(E.length){case 0:break;case 1:E[0].toLowerCase()!==E[0]&&(b+="an "),b+=`${E[0]}`;break;case 2:b+=`one of ${E[0]} or ${E[1]}`;break;default:{const C=E.pop();b+=`one of ${E.join(", ")}, or ${C}`}}if(m==null)b+=`. Received ${m}`;else if(typeof m=="function"&&m.name)b+=`. Received function ${m.name}`;else if(typeof m=="object"){var T;if((T=m.constructor)!==null&&T!==void 0&&T.name)b+=`. Received an instance of ${m.constructor.name}`;else{const C=t(m,{depth:-1});b+=`. Received ${C}`}}else{let C=t(m,{colors:!1});C.length>25&&(C=`${C.slice(0,25)}...`),b+=`. Received type ${typeof m} (${C})`}return b},TypeError),d("ERR_INVALID_ARG_VALUE",(v,g,m="is invalid")=>{let b=t(g);return b.length>128&&(b=b.slice(0,128)+"..."),`The ${v.includes(".")?"property":"argument"} '${v}' ${m}. Received ${b}`},TypeError),d("ERR_INVALID_RETURN_VALUE",(v,g,m)=>{var b;const _=m!=null&&(b=m.constructor)!==null&&b!==void 0&&b.name?`instance of ${m.constructor.name}`:`type ${typeof m}`;return`Expected ${v} to be returned from the "${g}" function but got ${_}.`},TypeError),d("ERR_MISSING_ARGS",(...v)=>{u(v.length>0,"At least one arg needs to be specified");let g;const m=v.length;switch(v=(Array.isArray(v)?v:[v]).map(b=>`"${b}"`).join(" or "),m){case 1:g+=`The ${v[0]} argument`;break;case 2:g+=`The ${v[0]} and ${v[1]} arguments`;break;default:{const b=v.pop();g+=`The ${v.join(", ")}, and ${b} arguments`}break}return`${g} must be specified`},TypeError),d("ERR_OUT_OF_RANGE",(v,g,m)=>{u(g,'Missing "range" argument');let b;if(Number.isInteger(m)&&Math.abs(m)>2**32)b=c(String(m));else if(typeof m=="bigint"){b=String(m);const _=BigInt(2)**BigInt(32);(m>_||m<-_)&&(b=c(b)),b+="n"}else b=t(m);return`The value of "${v}" is out of range. It must be ${g}. Received ${b}`},RangeError),d("ERR_MULTIPLE_CALLBACK","Callback called multiple times",Error),d("ERR_METHOD_NOT_IMPLEMENTED","The %s method is not implemented",Error),d("ERR_STREAM_ALREADY_FINISHED","Cannot call %s after a stream was finished",Error),d("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable",Error),d("ERR_STREAM_DESTROYED","Cannot call %s after a stream was destroyed",Error),d("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),d("ERR_STREAM_PREMATURE_CLOSE","Premature close",Error),d("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF",Error),d("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event",Error),d("ERR_STREAM_WRITE_AFTER_END","write after end",Error),d("ERR_UNKNOWN_ENCODING","Unknown encoding: %s",TypeError),Df={AbortError:y,aggregateTwoErrors:h(p),hideStackFrames:h,codes:l},Df}var la={exports:{}},r0;function Ha(){if(r0)return la.exports;r0=1;const{AbortController:e,AbortSignal:t}=typeof self<"u"?self:typeof window<"u"?window:void 0;return la.exports=e,la.exports.AbortSignal=t,la.exports.default=e,la.exports}var kl={exports:{}},n0;function zs(){if(n0)return kl.exports;n0=1;var e=typeof Reflect=="object"?Reflect:null,t=e&&typeof e.apply=="function"?e.apply:function(w,E,T){return Function.prototype.apply.call(w,E,T)},r;e&&typeof e.ownKeys=="function"?r=e.ownKeys:Object.getOwnPropertySymbols?r=function(w){return Object.getOwnPropertyNames(w).concat(Object.getOwnPropertySymbols(w))}:r=function(w){return Object.getOwnPropertyNames(w)};function n(_){console&&console.warn&&console.warn(_)}var i=Number.isNaN||function(w){return w!==w};function o(){o.init.call(this)}kl.exports=o,kl.exports.once=g,o.EventEmitter=o,o.prototype._events=void 0,o.prototype._eventsCount=0,o.prototype._maxListeners=void 0;var a=10;function s(_){if(typeof _!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof _)}Object.defineProperty(o,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(_){if(typeof _!="number"||_<0||i(_))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+_+".");a=_}}),o.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},o.prototype.setMaxListeners=function(w){if(typeof w!="number"||w<0||i(w))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+w+".");return this._maxListeners=w,this};function l(_){return _._maxListeners===void 0?o.defaultMaxListeners:_._maxListeners}o.prototype.getMaxListeners=function(){return l(this)},o.prototype.emit=function(w){for(var E=[],T=1;T0&&(P=E[0]),P instanceof Error)throw P;var N=new Error("Unhandled error."+(P?" ("+P.message+")":""));throw N.context=P,N}var M=j[w];if(M===void 0)return!1;if(typeof M=="function")t(M,this,E);else for(var R=M.length,O=p(M,R),T=0;T0&&P.length>C&&!P.warned){P.warned=!0;var N=new Error("Possible EventEmitter memory leak detected. "+P.length+" "+String(w)+" listeners added. Use emitter.setMaxListeners() to increase limit");N.name="MaxListenersExceededWarning",N.emitter=_,N.type=w,N.count=P.length,n(N)}return _}o.prototype.addListener=function(w,E){return u(this,w,E,!1)},o.prototype.on=o.prototype.addListener,o.prototype.prependListener=function(w,E){return u(this,w,E,!0)};function c(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function f(_,w,E){var T={fired:!1,wrapFn:void 0,target:_,type:w,listener:E},C=c.bind(T);return C.listener=E,T.wrapFn=C,C}o.prototype.once=function(w,E){return s(E),this.on(w,f(this,w,E)),this},o.prototype.prependOnceListener=function(w,E){return s(E),this.prependListener(w,f(this,w,E)),this},o.prototype.removeListener=function(w,E){var T,C,j,P,N;if(s(E),C=this._events,C===void 0)return this;if(T=C[w],T===void 0)return this;if(T===E||T.listener===E)--this._eventsCount===0?this._events=Object.create(null):(delete C[w],C.removeListener&&this.emit("removeListener",w,T.listener||E));else if(typeof T!="function"){for(j=-1,P=T.length-1;P>=0;P--)if(T[P]===E||T[P].listener===E){N=T[P].listener,j=P;break}if(j<0)return this;j===0?T.shift():y(T,j),T.length===1&&(C[w]=T[0]),C.removeListener!==void 0&&this.emit("removeListener",w,N||E)}return this},o.prototype.off=o.prototype.removeListener,o.prototype.removeAllListeners=function(w){var E,T,C;if(T=this._events,T===void 0)return this;if(T.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):T[w]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete T[w]),this;if(arguments.length===0){var j=Object.keys(T),P;for(C=0;C=0;C--)this.removeListener(w,E[C]);return this};function d(_,w,E){var T=_._events;if(T===void 0)return[];var C=T[w];return C===void 0?[]:typeof C=="function"?E?[C.listener||C]:[C]:E?v(C):p(C,C.length)}o.prototype.listeners=function(w){return d(this,w,!0)},o.prototype.rawListeners=function(w){return d(this,w,!1)},o.listenerCount=function(_,w){return typeof _.listenerCount=="function"?_.listenerCount(w):h.call(_,w)},o.prototype.listenerCount=h;function h(_){var w=this._events;if(w!==void 0){var E=w[_];if(typeof E=="function")return 1;if(E!==void 0)return E.length}return 0}o.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]};function p(_,w){for(var E=new Array(w),T=0;T{if(y!==void 0&&(y===null||typeof y!="object"||!("aborted"in y)))throw new i(v,"AbortSignal",y)},p=(y,v)=>{if(typeof y!="function")throw new i(v,"Function",y)};e.exports={AggregateError:a,kEmptyObject:Object.freeze({}),once(y){let v=!1;return function(...g){v||(v=!0,y.apply(this,g))}},createDeferredPromise:function(){let y,v;return{promise:new Promise((m,b)=>{y=m,v=b}),resolve:y,reject:v}},promisify(y){return new Promise((v,g)=>{y((m,...b)=>m?g(m):v(...b))})},debuglog(){return function(){}},format:r,inspect:n,types:{isAsyncFunction(y){return y instanceof c},isArrayBufferView(y){return ArrayBuffer.isView(y)}},isBlob:d,deprecate(y,v){return y},addAbortListener:zs().addAbortListener||function(v,g){if(v===void 0)throw new i("signal","AbortSignal",v);h(v,"signal"),p(g,"listener");let m;return v.aborted?queueMicrotask(()=>g()):(v.addEventListener("abort",g,{__proto__:null,once:!0,[o]:!0}),m=()=>{v.removeEventListener("abort",g)}),{__proto__:null,[s](){var b;(b=m)===null||b===void 0||b()}}},AbortSignalAny:l.any||function(v){if(v.length===1)return v[0];const g=new u,m=()=>g.abort();return v.forEach(b=>{h(b,"signals"),b.addEventListener("abort",m,{once:!0})}),g.signal.addEventListener("abort",()=>{v.forEach(b=>b.removeEventListener("abort",m))},{once:!0}),g.signal}},e.exports.promisify.custom=Symbol.for("nodejs.util.promisify.custom")})(Nf)),Nf.exports}var Pl={},Bf,o0;function sl(){if(o0)return Bf;o0=1;const{ArrayIsArray:e,ArrayPrototypeIncludes:t,ArrayPrototypeJoin:r,ArrayPrototypeMap:n,NumberIsInteger:i,NumberIsNaN:o,NumberMAX_SAFE_INTEGER:a,NumberMIN_SAFE_INTEGER:s,NumberParseInt:l,ObjectPrototypeHasOwnProperty:u,RegExpPrototypeExec:c,String:f,StringPrototypeToUpperCase:d,StringPrototypeTrim:h}=Rt(),{hideStackFrames:p,codes:{ERR_SOCKET_BAD_PORT:y,ERR_INVALID_ARG_TYPE:v,ERR_INVALID_ARG_VALUE:g,ERR_OUT_OF_RANGE:m,ERR_UNKNOWN_SIGNAL:b}}=br(),{normalizeEncoding:_}=Pr(),{isAsyncFunction:w,isArrayBufferView:E}=Pr().types,T={};function C(J){return J===(J|0)}function j(J){return J===J>>>0}const P=/^[0-7]+$/,N="must be a 32-bit unsigned integer or an octal string";function M(J,fe,te){if(typeof J>"u"&&(J=te),typeof J=="string"){if(c(P,J)===null)throw new g(fe,J,N);J=l(J,8)}return G(J,fe),J}const R=p((J,fe,te=s,me=a)=>{if(typeof J!="number")throw new v(fe,"number",J);if(!i(J))throw new m(fe,"an integer",J);if(Jme)throw new m(fe,`>= ${te} && <= ${me}`,J)}),O=p((J,fe,te=-2147483648,me=2147483647)=>{if(typeof J!="number")throw new v(fe,"number",J);if(!i(J))throw new m(fe,"an integer",J);if(Jme)throw new m(fe,`>= ${te} && <= ${me}`,J)}),G=p((J,fe,te=!1)=>{if(typeof J!="number")throw new v(fe,"number",J);if(!i(J))throw new m(fe,"an integer",J);const me=te?1:0,Ee=4294967295;if(JEe)throw new m(fe,`>= ${me} && <= ${Ee}`,J)});function q(J,fe){if(typeof J!="string")throw new v(fe,"string",J)}function z(J,fe,te=void 0,me){if(typeof J!="number")throw new v(fe,"number",J);if(te!=null&&Jme||(te!=null||me!=null)&&o(J))throw new m(fe,`${te!=null?`>= ${te}`:""}${te!=null&&me!=null?" && ":""}${me!=null?`<= ${me}`:""}`,J)}const B=p((J,fe,te)=>{if(!t(te,J)){const Ee="must be one of: "+r(n(te,xe=>typeof xe=="string"?`'${xe}'`:f(xe)),", ");throw new g(fe,J,Ee)}});function ae(J,fe){if(typeof J!="boolean")throw new v(fe,"boolean",J)}function $(J,fe,te){return J==null||!u(J,fe)?te:J[fe]}const ie=p((J,fe,te=null)=>{const me=$(te,"allowArray",!1),Ee=$(te,"allowFunction",!1);if(!$(te,"nullable",!1)&&J===null||!me&&e(J)||typeof J!="object"&&(!Ee||typeof J!="function"))throw new v(fe,"Object",J)}),Z=p((J,fe)=>{if(J!=null&&typeof J!="object"&&typeof J!="function")throw new v(fe,"a dictionary",J)}),ue=p((J,fe,te=0)=>{if(!e(J))throw new v(fe,"Array",J);if(J.length{if(!E(J))throw new v(fe,["Buffer","TypedArray","DataView"],J)});function Y(J,fe){const te=_(fe),me=J.length;if(te==="hex"&&me%2!==0)throw new g("encoding",fe,`is invalid for data of length ${me}`)}function re(J,fe="Port",te=!0){if(typeof J!="number"&&typeof J!="string"||typeof J=="string"&&h(J).length===0||+J!==+J>>>0||J>65535||J===0&&!te)throw new y(fe,J,te);return J|0}const ne=p((J,fe)=>{if(J!==void 0&&(J===null||typeof J!="object"||!("aborted"in J)))throw new v(fe,"AbortSignal",J)}),k=p((J,fe)=>{if(typeof J!="function")throw new v(fe,"Function",J)}),L=p((J,fe)=>{if(typeof J!="function"||w(J))throw new v(fe,"Function",J)}),F=p((J,fe)=>{if(J!==void 0)throw new v(fe,"undefined",J)});function D(J,fe,te){if(!t(te,J))throw new v(fe,`('${r(te,"|")}')`,J)}const H=/^(?:<[^>]*>)(?:\s*;\s*[^;"\s]+(?:=(")?[^;"\s]*\1)?)*$/;function Q(J,fe){if(typeof J>"u"||!c(H,J))throw new g(fe,J,'must be an array or string of format "; rel=preload; as=style"')}function de(J){if(typeof J=="string")return Q(J,"hints"),J;if(e(J)){const fe=J.length;let te="";if(fe===0)return te;for(let me=0;me; rel=preload; as=style"')}return Bf={isInt32:C,isUint32:j,parseFileMode:M,validateArray:ue,validateStringArray:ge,validateBooleanArray:K,validateAbortSignalArray:ee,validateBoolean:ae,validateBuffer:V,validateDictionary:Z,validateEncoding:Y,validateFunction:k,validateInt32:O,validateInteger:R,validateNumber:z,validateObject:ie,validateOneOf:B,validatePlainFunction:L,validatePort:re,validateSignalName:X,validateString:q,validateUint32:G,validateUndefined:F,validateUnion:D,validateAbortSignal:ne,validateLinkHeaderValue:de},Bf}var Ol={exports:{}},Ff={exports:{}},s0;function Ho(){if(s0)return Ff.exports;s0=1;var e=Ff.exports={},t,r;function n(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}(function(){try{typeof setTimeout=="function"?t=setTimeout:t=n}catch{t=n}try{typeof clearTimeout=="function"?r=clearTimeout:r=i}catch{r=i}})();function o(y){if(t===setTimeout)return setTimeout(y,0);if((t===n||!t)&&setTimeout)return t=setTimeout,setTimeout(y,0);try{return t(y,0)}catch{try{return t.call(null,y,0)}catch{return t.call(this,y,0)}}}function a(y){if(r===clearTimeout)return clearTimeout(y);if((r===i||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(y);try{return r(y)}catch{try{return r.call(null,y)}catch{return r.call(this,y)}}}var s=[],l=!1,u,c=-1;function f(){!l||!u||(l=!1,u.length?s=u.concat(s):c=-1,s.length&&d())}function d(){if(!l){var y=o(f);l=!0;for(var v=s.length;v;){for(u=s,s=[];++c1)for(var g=1;g{};function G(B,ae,$){var ie,Z;if(arguments.length===2?($=ae,ae=o):ae==null?ae=o:u(ae,"options"),l($,"callback"),s(ae.signal,"options.signal"),$=a($),g(B)||E(B))return q(B,ae,$);if(!j(B))throw new n("stream",["ReadableStream","WritableStream","Stream"],B);const ue=(ie=ae.readable)!==null&&ie!==void 0?ie:v(B),ge=(Z=ae.writable)!==null&&Z!==void 0?Z:w(B),K=B._writableState,ee=B._readableState,X=()=>{B.writable||re()};let V=P(B)&&v(B)===ue&&w(B)===ge,Y=T(B,!1);const re=()=>{Y=!0,B.destroyed&&(V=!1),!(V&&(!B.readable||ue))&&(!ue||ne)&&$.call(B)};let ne=m(B,!1);const k=()=>{ne=!0,B.destroyed&&(V=!1),!(V&&(!B.writable||ge))&&(!ge||Y)&&$.call(B)},L=J=>{$.call(B,J)};let F=p(B);const D=()=>{F=!0;const J=C(B)||b(B);if(J&&typeof J!="boolean")return $.call(B,J);if(ue&&!ne&&v(B,!0)&&!m(B,!1))return $.call(B,new i);if(ge&&!Y&&!T(B,!1))return $.call(B,new i);$.call(B)},H=()=>{F=!0;const J=C(B)||b(B);if(J&&typeof J!="boolean")return $.call(B,J);$.call(B)},Q=()=>{B.req.on("finish",re)};R(B)?(B.on("complete",re),V||B.on("abort",D),B.req?Q():B.on("request",Q)):ge&&!K&&(B.on("end",X),B.on("close",X)),!V&&typeof B.aborted=="boolean"&&B.on("aborted",D),B.on("end",k),B.on("finish",re),ae.error!==!1&&B.on("error",L),B.on("close",D),F?e.nextTick(D):K!=null&&K.errorEmitted||ee!=null&&ee.errorEmitted?V||e.nextTick(H):(!ue&&(!V||y(B))&&(Y||_(B)===!1)||!ge&&(!V||_(B))&&(ne||y(B)===!1)||ee&&B.req&&B.aborted)&&e.nextTick(H);const de=()=>{$=O,B.removeListener("aborted",D),B.removeListener("complete",re),B.removeListener("abort",D),B.removeListener("request",Q),B.req&&B.req.removeListener("finish",re),B.removeListener("end",X),B.removeListener("close",X),B.removeListener("finish",re),B.removeListener("end",k),B.removeListener("error",L),B.removeListener("close",D)};if(ae.signal&&!F){const J=()=>{const fe=$;de(),fe.call(B,new t(void 0,{cause:ae.signal.reason}))};if(ae.signal.aborted)e.nextTick(J);else{M=M||Pr().addAbortListener;const fe=M(ae.signal,J),te=$;$=a((...me)=>{fe[h](),te.apply(B,me)})}}return de}function q(B,ae,$){let ie=!1,Z=O;if(ae.signal)if(Z=()=>{ie=!0,$.call(B,new t(void 0,{cause:ae.signal.reason}))},ae.signal.aborted)e.nextTick(Z);else{M=M||Pr().addAbortListener;const ge=M(ae.signal,Z),K=$;$=a((...ee)=>{ge[h](),K.apply(B,ee)})}const ue=(...ge)=>{ie||e.nextTick(()=>$.apply(B,ge))};return d(B[N].promise,ue,ue),O}function z(B,ae){var $;let ie=!1;return ae===null&&(ae=o),($=ae)!==null&&$!==void 0&&$.cleanup&&(c(ae.cleanup,"cleanup"),ie=ae.cleanup),new f((Z,ue)=>{const ge=G(B,ae,K=>{ie&&ge(),K?ue(K):Z()})})}return Ol.exports=G,Ol.exports.finished=z,Ol.exports}var jf,u0;function Hs(){if(u0)return jf;u0=1;const e=Ho(),{aggregateTwoErrors:t,codes:{ERR_MULTIPLE_CALLBACK:r},AbortError:n}=br(),{Symbol:i}=Rt(),{kIsDestroyed:o,isDestroyed:a,isFinished:s,isServerRequest:l}=Ai(),u=i("kDestroy"),c=i("kConstruct");function f(P,N,M){P&&(P.stack,N&&!N.errored&&(N.errored=P),M&&!M.errored&&(M.errored=P))}function d(P,N){const M=this._readableState,R=this._writableState,O=R||M;return R!=null&&R.destroyed||M!=null&&M.destroyed?(typeof N=="function"&&N(),this):(f(P,R,M),R&&(R.destroyed=!0),M&&(M.destroyed=!0),O.constructed?h(this,P,N):this.once(u,function(G){h(this,t(G,P),N)}),this)}function h(P,N,M){let R=!1;function O(G){if(R)return;R=!0;const q=P._readableState,z=P._writableState;f(G,z,q),z&&(z.closed=!0),q&&(q.closed=!0),typeof M=="function"&&M(G),G?e.nextTick(p,P,G):e.nextTick(y,P)}try{P._destroy(N||null,O)}catch(G){O(G)}}function p(P,N){v(P,N),y(P)}function y(P){const N=P._readableState,M=P._writableState;M&&(M.closeEmitted=!0),N&&(N.closeEmitted=!0),(M!=null&&M.emitClose||N!=null&&N.emitClose)&&P.emit("close")}function v(P,N){const M=P._readableState,R=P._writableState;R!=null&&R.errorEmitted||M!=null&&M.errorEmitted||(R&&(R.errorEmitted=!0),M&&(M.errorEmitted=!0),P.emit("error",N))}function g(){const P=this._readableState,N=this._writableState;P&&(P.constructed=!0,P.closed=!1,P.closeEmitted=!1,P.destroyed=!1,P.errored=null,P.errorEmitted=!1,P.reading=!1,P.ended=P.readable===!1,P.endEmitted=P.readable===!1),N&&(N.constructed=!0,N.destroyed=!1,N.closed=!1,N.closeEmitted=!1,N.errored=null,N.errorEmitted=!1,N.finalCalled=!1,N.prefinished=!1,N.ended=N.writable===!1,N.ending=N.writable===!1,N.finished=N.writable===!1)}function m(P,N,M){const R=P._readableState,O=P._writableState;if(O!=null&&O.destroyed||R!=null&&R.destroyed)return this;R!=null&&R.autoDestroy||O!=null&&O.autoDestroy?P.destroy(N):N&&(N.stack,O&&!O.errored&&(O.errored=N),R&&!R.errored&&(R.errored=N),M?e.nextTick(v,P,N):v(P,N))}function b(P,N){if(typeof P._construct!="function")return;const M=P._readableState,R=P._writableState;M&&(M.constructed=!1),R&&(R.constructed=!1),P.once(c,N),!(P.listenerCount(c)>1)&&e.nextTick(_,P)}function _(P){let N=!1;function M(R){if(N){m(P,R??new r);return}N=!0;const O=P._readableState,G=P._writableState,q=G||O;O&&(O.constructed=!0),G&&(G.constructed=!0),q.destroyed?P.emit(u,R):R?m(P,R,!0):e.nextTick(w,P)}try{P._construct(R=>{e.nextTick(M,R)})}catch(R){e.nextTick(M,R)}}function w(P){P.emit(c)}function E(P){return P?.setHeader&&typeof P.abort=="function"}function T(P){P.emit("close")}function C(P,N){P.emit("error",N),e.nextTick(T,P)}function j(P,N){!P||a(P)||(!N&&!s(P)&&(N=new n),l(P)?(P.socket=null,P.destroy(N)):E(P)?P.abort():E(P.req)?P.req.abort():typeof P.destroy=="function"?P.destroy(N):typeof P.close=="function"?P.close():N?e.nextTick(C,P,N):e.nextTick(T,P),P.destroyed||(P[o]=!0))}return jf={construct:b,destroyer:j,destroy:d,undestroy:g,errorOrDestroy:m},jf}var Vf,c0;function Vm(){if(c0)return Vf;c0=1;const{ArrayIsArray:e,ObjectSetPrototypeOf:t}=Rt(),{EventEmitter:r}=zs();function n(o){r.call(this,o)}t(n.prototype,r.prototype),t(n,r),n.prototype.pipe=function(o,a){const s=this;function l(y){o.writable&&o.write(y)===!1&&s.pause&&s.pause()}s.on("data",l);function u(){s.readable&&s.resume&&s.resume()}o.on("drain",u),!o._isStdio&&(!a||a.end!==!1)&&(s.on("end",f),s.on("close",d));let c=!1;function f(){c||(c=!0,o.end())}function d(){c||(c=!0,typeof o.destroy=="function"&&o.destroy())}function h(y){p(),r.listenerCount(this,"error")===0&&this.emit("error",y)}i(s,"error",h),i(o,"error",h);function p(){s.removeListener("data",l),o.removeListener("drain",u),s.removeListener("end",f),s.removeListener("close",d),s.removeListener("error",h),o.removeListener("error",h),s.removeListener("end",p),s.removeListener("close",p),o.removeListener("close",p)}return s.on("end",p),s.on("close",p),o.on("close",p),o.emit("pipe",s),o};function i(o,a,s){if(typeof o.prependListener=="function")return o.prependListener(a,s);!o._events||!o._events[a]?o.on(a,s):e(o._events[a])?o._events[a].unshift(s):o._events[a]=[s,o._events[a]]}return Vf={Stream:n,prependListener:i},Vf}var Wf={exports:{}},f0;function Yc(){return f0||(f0=1,(function(e){const{SymbolDispose:t}=Rt(),{AbortError:r,codes:n}=br(),{isNodeStream:i,isWebStream:o,kControllerErrorFunction:a}=Ai(),s=Ji(),{ERR_INVALID_ARG_TYPE:l}=n;let u;const c=(f,d)=>{if(typeof f!="object"||!("aborted"in f))throw new l(d,"AbortSignal",f)};e.exports.addAbortSignal=function(d,h){if(c(d,"signal"),!i(h)&&!o(h))throw new l("stream",["ReadableStream","WritableStream","Stream"],h);return e.exports.addAbortSignalNoValidate(d,h)},e.exports.addAbortSignalNoValidate=function(f,d){if(typeof f!="object"||!("aborted"in f))return d;const h=i(d)?()=>{d.destroy(new r(void 0,{cause:f.reason}))}:()=>{d[a](new r(void 0,{cause:f.reason}))};if(f.aborted)h();else{u=u||Pr().addAbortListener;const p=u(f,h);s(d,p[t])}return d}})(Wf)),Wf.exports}var zf,d0;function sN(){if(d0)return zf;d0=1;const{StringPrototypeSlice:e,SymbolIterator:t,TypedArrayPrototypeSet:r,Uint8Array:n}=Rt(),{Buffer:i}=qr(),{inspect:o}=Pr();return zf=class{constructor(){this.head=null,this.tail=null,this.length=0}push(s){const l={data:s,next:null};this.length>0?this.tail.next=l:this.head=l,this.tail=l,++this.length}unshift(s){const l={data:s,next:this.head};this.length===0&&(this.tail=l),this.head=l,++this.length}shift(){if(this.length===0)return;const s=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,s}clear(){this.head=this.tail=null,this.length=0}join(s){if(this.length===0)return"";let l=this.head,u=""+l.data;for(;(l=l.next)!==null;)u+=s+l.data;return u}concat(s){if(this.length===0)return i.alloc(0);const l=i.allocUnsafe(s>>>0);let u=this.head,c=0;for(;u;)r(l,u.data,c),c+=u.data.length,u=u.next;return l}consume(s,l){const u=this.head.data;if(sf.length)l+=f,s-=f.length;else{s===f.length?(l+=f,++c,u.next?this.head=u.next:this.head=this.tail=null):(l+=e(f,0,s),this.head=u,u.data=e(f,s));break}++c}while((u=u.next)!==null);return this.length-=c,l}_getBuffer(s){const l=i.allocUnsafe(s),u=s;let c=this.head,f=0;do{const d=c.data;if(s>d.length)r(l,d,u-s),s-=d.length;else{s===d.length?(r(l,d,u-s),++f,c.next?this.head=c.next:this.head=this.tail=null):(r(l,new n(d.buffer,d.byteOffset,s),u-s),this.head=c,c.data=d.slice(s));break}++f}while((c=c.next)!==null);return this.length-=f,l}[Symbol.for("nodejs.util.inspect.custom")](s,l){return o(this,{...l,depth:0,customInspect:!1})}},zf}var Hf,h0;function Kc(){if(h0)return Hf;h0=1;const{MathFloor:e,NumberIsInteger:t}=Rt(),{validateInteger:r}=sl(),{ERR_INVALID_ARG_VALUE:n}=br().codes;let i=16*1024,o=16;function a(c,f,d){return c.highWaterMark!=null?c.highWaterMark:f?c[d]:null}function s(c){return c?o:i}function l(c,f){r(f,"value",0),c?o=f:i=f}function u(c,f,d,h){const p=a(f,h,d);if(p!=null){if(!t(p)||p<0){const y=h?`options.${d}`:"options.highWaterMark";throw new n(y,p)}return e(p)}return s(c.objectMode)}return Hf={getHighWaterMark:u,getDefaultHighWaterMark:s,setDefaultHighWaterMark:l},Hf}var qf={},Ll={exports:{}};var p0;function aN(){return p0||(p0=1,(function(e,t){var r=qr(),n=r.Buffer;function i(a,s){for(var l in a)s[l]=a[l]}n.from&&n.alloc&&n.allocUnsafe&&n.allocUnsafeSlow?e.exports=r:(i(r,t),t.Buffer=o);function o(a,s,l){return n(a,s,l)}o.prototype=Object.create(n.prototype),i(n,o),o.from=function(a,s,l){if(typeof a=="number")throw new TypeError("Argument must not be a number");return n(a,s,l)},o.alloc=function(a,s,l){if(typeof a!="number")throw new TypeError("Argument must be a number");var u=n(a);return s!==void 0?typeof l=="string"?u.fill(s,l):u.fill(s):u.fill(0),u},o.allocUnsafe=function(a){if(typeof a!="number")throw new TypeError("Argument must be a number");return n(a)},o.allocUnsafeSlow=function(a){if(typeof a!="number")throw new TypeError("Argument must be a number");return r.SlowBuffer(a)}})(Ll,Ll.exports)),Ll.exports}var g0;function lN(){if(g0)return qf;g0=1;var e=aN().Buffer,t=e.isEncoding||function(g){switch(g=""+g,g&&g.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function r(g){if(!g)return"utf8";for(var m;;)switch(g){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return g;default:if(m)return;g=(""+g).toLowerCase(),m=!0}}function n(g){var m=r(g);if(typeof m!="string"&&(e.isEncoding===t||!t(g)))throw new Error("Unknown encoding: "+g);return m||g}qf.StringDecoder=i;function i(g){this.encoding=n(g);var m;switch(this.encoding){case"utf16le":this.text=f,this.end=d,m=4;break;case"utf8":this.fillLast=l,m=4;break;case"base64":this.text=h,this.end=p,m=3;break;default:this.write=y,this.end=v;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=e.allocUnsafe(m)}i.prototype.write=function(g){if(g.length===0)return"";var m,b;if(this.lastNeed){if(m=this.fillLast(g),m===void 0)return"";b=this.lastNeed,this.lastNeed=0}else b=0;return b>5===6?2:g>>4===14?3:g>>3===30?4:g>>6===2?-1:-2}function a(g,m,b){var _=m.length-1;if(_=0?(w>0&&(g.lastNeed=w-1),w):--_=0?(w>0&&(g.lastNeed=w-2),w):--_=0?(w>0&&(w===2?w=0:g.lastNeed=w-3),w):0))}function s(g,m,b){if((m[0]&192)!==128)return g.lastNeed=0,"�";if(g.lastNeed>1&&m.length>1){if((m[1]&192)!==128)return g.lastNeed=1,"�";if(g.lastNeed>2&&m.length>2&&(m[2]&192)!==128)return g.lastNeed=2,"�"}}function l(g){var m=this.lastTotal-this.lastNeed,b=s(this,g);if(b!==void 0)return b;if(this.lastNeed<=g.length)return g.copy(this.lastChar,m,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);g.copy(this.lastChar,m,0,g.length),this.lastNeed-=g.length}function u(g,m){var b=a(this,g,m);if(!this.lastNeed)return g.toString("utf8",m);this.lastTotal=b;var _=g.length-(b-this.lastNeed);return g.copy(this.lastChar,0,_),g.toString("utf8",m,_)}function c(g){var m=g&&g.length?this.write(g):"";return this.lastNeed?m+"�":m}function f(g,m){if((g.length-m)%2===0){var b=g.toString("utf16le",m);if(b){var _=b.charCodeAt(b.length-1);if(_>=55296&&_<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=g[g.length-2],this.lastChar[1]=g[g.length-1],b.slice(0,-1)}return b}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=g[g.length-1],g.toString("utf16le",m,g.length-1)}function d(g){var m=g&&g.length?this.write(g):"";if(this.lastNeed){var b=this.lastTotal-this.lastNeed;return m+this.lastChar.toString("utf16le",0,b)}return m}function h(g,m){var b=(g.length-m)%3;return b===0?g.toString("base64",m):(this.lastNeed=3-b,this.lastTotal=3,b===1?this.lastChar[0]=g[g.length-1]:(this.lastChar[0]=g[g.length-2],this.lastChar[1]=g[g.length-1]),g.toString("base64",m,g.length-b))}function p(g){var m=g&&g.length?this.write(g):"";return this.lastNeed?m+this.lastChar.toString("base64",0,3-this.lastNeed):m}function y(g){return g.toString(this.encoding)}function v(g){return g&&g.length?this.write(g):""}return qf}var Gf,m0;function xE(){if(m0)return Gf;m0=1;const e=Ho(),{PromisePrototypeThen:t,SymbolAsyncIterator:r,SymbolIterator:n}=Rt(),{Buffer:i}=qr(),{ERR_INVALID_ARG_TYPE:o,ERR_STREAM_NULL_VALUES:a}=br().codes;function s(l,u,c){let f;if(typeof u=="string"||u instanceof i)return new l({objectMode:!0,...c,read(){this.push(u),this.push(null)}});let d;if(u&&u[r])d=!0,f=u[r]();else if(u&&u[n])d=!1,f=u[n]();else throw new o("iterable",["Iterable"],u);const h=new l({objectMode:!0,highWaterMark:1,...c});let p=!1;h._read=function(){p||(p=!0,v())},h._destroy=function(g,m){t(y(g),()=>e.nextTick(m,g),b=>e.nextTick(m,b||g))};async function y(g){const m=g!=null,b=typeof f.throw=="function";if(m&&b){const{value:_,done:w}=await f.throw(g);if(await _,w)return}if(typeof f.return=="function"){const{value:_}=await f.return();await _}}async function v(){for(;;){try{const{value:g,done:m}=d?await f.next():f.next();if(m)h.push(null);else{const b=g&&typeof g.then=="function"?await g:g;if(b===null)throw p=!1,new a;if(h.push(b))continue;p=!1}}catch(g){h.destroy(g)}break}}return h}return Gf=s,Gf}var Yf,y0;function Xc(){if(y0)return Yf;y0=1;const e=Ho(),{ArrayPrototypeIndexOf:t,NumberIsInteger:r,NumberIsNaN:n,NumberParseInt:i,ObjectDefineProperties:o,ObjectKeys:a,ObjectSetPrototypeOf:s,Promise:l,SafeSet:u,SymbolAsyncDispose:c,SymbolAsyncIterator:f,Symbol:d}=Rt();Yf=me,me.ReadableState=te;const{EventEmitter:h}=zs(),{Stream:p,prependListener:y}=Vm(),{Buffer:v}=qr(),{addAbortSignal:g}=Yc(),m=Ji();let b=Pr().debuglog("stream",ye=>{b=ye});const _=sN(),w=Hs(),{getHighWaterMark:E,getDefaultHighWaterMark:T}=Kc(),{aggregateTwoErrors:C,codes:{ERR_INVALID_ARG_TYPE:j,ERR_METHOD_NOT_IMPLEMENTED:P,ERR_OUT_OF_RANGE:N,ERR_STREAM_PUSH_AFTER_EOF:M,ERR_STREAM_UNSHIFT_AFTER_END_EVENT:R},AbortError:O}=br(),{validateObject:G}=sl(),q=d("kPaused"),{StringDecoder:z}=lN(),B=xE();s(me.prototype,p.prototype),s(me,p);const ae=()=>{},{errorOrDestroy:$}=w,ie=1,Z=2,ue=4,ge=8,K=16,ee=32,X=64,V=128,Y=256,re=512,ne=1024,k=2048,L=4096,F=8192,D=16384,H=32768,Q=65536,de=1<<17,J=1<<18;function fe(ye){return{enumerable:!1,get(){return(this.state&ye)!==0},set(be){be?this.state|=ye:this.state&=~ye}}}o(te.prototype,{objectMode:fe(ie),ended:fe(Z),endEmitted:fe(ue),reading:fe(ge),constructed:fe(K),sync:fe(ee),needReadable:fe(X),emittedReadable:fe(V),readableListening:fe(Y),resumeScheduled:fe(re),errorEmitted:fe(ne),emitClose:fe(k),autoDestroy:fe(L),destroyed:fe(F),closed:fe(D),closeEmitted:fe(H),multiAwaitDrain:fe(Q),readingMore:fe(de),dataEmitted:fe(J)});function te(ye,be,oe){typeof oe!="boolean"&&(oe=be instanceof vi()),this.state=k|L|K|ee,ye&&ye.objectMode&&(this.state|=ie),oe&&ye&&ye.readableObjectMode&&(this.state|=ie),this.highWaterMark=ye?E(this,ye,"readableHighWaterMark",oe):T(!1),this.buffer=new _,this.length=0,this.pipes=[],this.flowing=null,this[q]=null,ye&&ye.emitClose===!1&&(this.state&=~k),ye&&ye.autoDestroy===!1&&(this.state&=~L),this.errored=null,this.defaultEncoding=ye&&ye.defaultEncoding||"utf8",this.awaitDrainWriters=null,this.decoder=null,this.encoding=null,ye&&ye.encoding&&(this.decoder=new z(ye.encoding),this.encoding=ye.encoding)}function me(ye){if(!(this instanceof me))return new me(ye);const be=this instanceof vi();this._readableState=new te(ye,this,be),ye&&(typeof ye.read=="function"&&(this._read=ye.read),typeof ye.destroy=="function"&&(this._destroy=ye.destroy),typeof ye.construct=="function"&&(this._construct=ye.construct),ye.signal&&!be&&g(ye.signal,this)),p.call(this,ye),w.construct(this,()=>{this._readableState.needReadable&&ce(this,this._readableState)})}me.prototype.destroy=w.destroy,me.prototype._undestroy=w.undestroy,me.prototype._destroy=function(ye,be){be(ye)},me.prototype[h.captureRejectionSymbol]=function(ye){this.destroy(ye)},me.prototype[c]=function(){let ye;return this.destroyed||(ye=this.readableEnded?null:new O,this.destroy(ye)),new l((be,oe)=>m(this,he=>he&&he!==ye?oe(he):be(null)))},me.prototype.push=function(ye,be){return Ee(this,ye,be,!1)},me.prototype.unshift=function(ye,be){return Ee(this,ye,be,!0)};function Ee(ye,be,oe,he){b("readableAddChunk",be);const ke=ye._readableState;let Ve;if((ke.state&ie)===0&&(typeof be=="string"?(oe=oe||ke.defaultEncoding,ke.encoding!==oe&&(he&&ke.encoding?be=v.from(be,oe).toString(ke.encoding):(be=v.from(be,oe),oe=""))):be instanceof v?oe="":p._isUint8Array(be)?(be=p._uint8ArrayToBuffer(be),oe=""):be!=null&&(Ve=new j("chunk",["string","Buffer","Uint8Array"],be))),Ve)$(ye,Ve);else if(be===null)ke.state&=~ge,S(ye,ke);else if((ke.state&ie)!==0||be&&be.length>0)if(he)if((ke.state&ue)!==0)$(ye,new R);else{if(ke.destroyed||ke.errored)return!1;xe(ye,ke,be,!0)}else if(ke.ended)$(ye,new M);else{if(ke.destroyed||ke.errored)return!1;ke.state&=~ge,ke.decoder&&!oe?(be=ke.decoder.write(be),ke.objectMode||be.length!==0?xe(ye,ke,be,!1):ce(ye,ke)):xe(ye,ke,be,!1)}else he||(ke.state&=~ge,ce(ye,ke));return!ke.ended&&(ke.length0?((be.state&Q)!==0?be.awaitDrainWriters.clear():be.awaitDrainWriters=null,be.dataEmitted=!0,ye.emit("data",oe)):(be.length+=be.objectMode?1:oe.length,he?be.buffer.unshift(oe):be.buffer.push(oe),(be.state&X)!==0&&A(ye)),ce(ye,be)}me.prototype.isPaused=function(){const ye=this._readableState;return ye[q]===!0||ye.flowing===!1},me.prototype.setEncoding=function(ye){const be=new z(ye);this._readableState.decoder=be,this._readableState.encoding=this._readableState.decoder.encoding;const oe=this._readableState.buffer;let he="";for(const ke of oe)he+=be.write(ke);return oe.clear(),he!==""&&oe.push(he),this._readableState.length=he.length,this};const Ne=1073741824;function I(ye){if(ye>Ne)throw new N("size","<= 1GiB",ye);return ye--,ye|=ye>>>1,ye|=ye>>>2,ye|=ye>>>4,ye|=ye>>>8,ye|=ye>>>16,ye++,ye}function x(ye,be){return ye<=0||be.length===0&&be.ended?0:(be.state&ie)!==0?1:n(ye)?be.flowing&&be.length?be.buffer.first().length:be.length:ye<=be.length?ye:be.ended?be.length:0}me.prototype.read=function(ye){b("read",ye),ye===void 0?ye=NaN:r(ye)||(ye=i(ye,10));const be=this._readableState,oe=ye;if(ye>be.highWaterMark&&(be.highWaterMark=I(ye)),ye!==0&&(be.state&=~V),ye===0&&be.needReadable&&((be.highWaterMark!==0?be.length>=be.highWaterMark:be.length>0)||be.ended))return b("read: emitReadable",be.length,be.ended),be.length===0&&be.ended?_r(this):A(this),null;if(ye=x(ye,be),ye===0&&be.ended)return be.length===0&&_r(this),null;let he=(be.state&X)!==0;if(b("need readable",he),(be.length===0||be.length-ye0?ke=Ut(ye,be):ke=null,ke===null?(be.needReadable=be.length<=be.highWaterMark,ye=0):(be.length-=ye,be.multiAwaitDrain?be.awaitDrainWriters.clear():be.awaitDrainWriters=null),be.length===0&&(be.ended||(be.needReadable=!0),oe!==ye&&be.ended&&_r(this)),ke!==null&&!be.errorEmitted&&!be.closeEmitted&&(be.dataEmitted=!0,this.emit("data",ke)),ke};function S(ye,be){if(b("onEofChunk"),!be.ended){if(be.decoder){const oe=be.decoder.end();oe&&oe.length&&(be.buffer.push(oe),be.length+=be.objectMode?1:oe.length)}be.ended=!0,be.sync?A(ye):(be.needReadable=!1,be.emittedReadable=!0,W(ye))}}function A(ye){const be=ye._readableState;b("emitReadable",be.needReadable,be.emittedReadable),be.needReadable=!1,be.emittedReadable||(b("emitReadable",be.flowing),be.emittedReadable=!0,e.nextTick(W,ye))}function W(ye){const be=ye._readableState;b("emitReadable_",be.destroyed,be.length,be.ended),!be.destroyed&&!be.errored&&(be.length||be.ended)&&(ye.emit("readable"),be.emittedReadable=!1),be.needReadable=!be.flowing&&!be.ended&&be.length<=be.highWaterMark,He(ye)}function ce(ye,be){!be.readingMore&&be.constructed&&(be.readingMore=!0,e.nextTick(ve,ye,be))}function ve(ye,be){for(;!be.reading&&!be.ended&&(be.length1&&he.pipes.includes(ye)&&(b("false write response, pause",he.awaitDrainWriters.size),he.awaitDrainWriters.add(ye)),oe.pause()),kt||(kt=pe(oe,ye),ye.on("drain",kt))}oe.on("data",ki);function ki(cr){b("ondata");const Ft=ye.write(cr);b("dest.write",Ft),Ft===!1&&Mi()}function Pi(cr){if(b("onerror",cr),Er(),ye.removeListener("error",Pi),ye.listenerCount("error")===0){const Ft=ye._writableState||ye._readableState;Ft&&!Ft.errorEmitted?$(ye,cr):ye.emit("error",cr)}}y(ye,"error",Pi);function on(){ye.removeListener("finish",Sr),Er()}ye.once("close",on);function Sr(){b("onfinish"),ye.removeListener("close",on),Er()}ye.once("finish",Sr);function Er(){b("unpipe"),oe.unpipe(ye)}return ye.emit("pipe",oe),ye.writableNeedDrain===!0?Mi():he.flowing||(b("pipe resume"),oe.resume()),ye};function pe(ye,be){return function(){const he=ye._readableState;he.awaitDrainWriters===be?(b("pipeOnDrain",1),he.awaitDrainWriters=null):he.multiAwaitDrain&&(b("pipeOnDrain",he.awaitDrainWriters.size),he.awaitDrainWriters.delete(be)),(!he.awaitDrainWriters||he.awaitDrainWriters.size===0)&&ye.listenerCount("data")&&ye.resume()}}me.prototype.unpipe=function(ye){const be=this._readableState,oe={hasUnpiped:!1};if(be.pipes.length===0)return this;if(!ye){const ke=be.pipes;be.pipes=[],this.pause();for(let Ve=0;Ve0,he.flowing!==!1&&this.resume()):ye==="readable"&&!he.endEmitted&&!he.readableListening&&(he.readableListening=he.needReadable=!0,he.flowing=!1,he.emittedReadable=!1,b("on readable",he.length,he.reading),he.length?A(this):he.reading||e.nextTick(Ue,this)),oe},me.prototype.addListener=me.prototype.on,me.prototype.removeListener=function(ye,be){const oe=p.prototype.removeListener.call(this,ye,be);return ye==="readable"&&e.nextTick(Ie,this),oe},me.prototype.off=me.prototype.removeListener,me.prototype.removeAllListeners=function(ye){const be=p.prototype.removeAllListeners.apply(this,arguments);return(ye==="readable"||ye===void 0)&&e.nextTick(Ie,this),be};function Ie(ye){const be=ye._readableState;be.readableListening=ye.listenerCount("readable")>0,be.resumeScheduled&&be[q]===!1?be.flowing=!0:ye.listenerCount("data")>0?ye.resume():be.readableListening||(be.flowing=null)}function Ue(ye){b("readable nexttick read 0"),ye.read(0)}me.prototype.resume=function(){const ye=this._readableState;return ye.flowing||(b("resume"),ye.flowing=!ye.readableListening,je(this,ye)),ye[q]=!1,this};function je(ye,be){be.resumeScheduled||(be.resumeScheduled=!0,e.nextTick(qe,ye,be))}function qe(ye,be){b("resume",be.reading),be.reading||ye.read(0),be.resumeScheduled=!1,ye.emit("resume"),He(ye),be.flowing&&!be.reading&&ye.read(0)}me.prototype.pause=function(){return b("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(b("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState[q]=!0,this};function He(ye){const be=ye._readableState;for(b("flow",be.flowing);be.flowing&&ye.read()!==null;);}me.prototype.wrap=function(ye){let be=!1;ye.on("data",he=>{!this.push(he)&&ye.pause&&(be=!0,ye.pause())}),ye.on("end",()=>{this.push(null)}),ye.on("error",he=>{$(this,he)}),ye.on("close",()=>{this.destroy()}),ye.on("destroy",()=>{this.destroy()}),this._read=()=>{be&&ye.resume&&(be=!1,ye.resume())};const oe=a(ye);for(let he=1;he{ke=ze?C(ke,ze):null,oe(),oe=ae});try{for(;;){const ze=ye.destroyed?null:ye.read();if(ze!==null)yield ze;else{if(ke)throw ke;if(ke===null)return;await new l(he)}}}catch(ze){throw ke=C(ke,ze),ke}finally{(ke||be?.destroyOnReturn!==!1)&&(ke===void 0||ye._readableState.autoDestroy)?w.destroyer(ye,null):(ye.off("readable",he),Ve())}}o(me.prototype,{readable:{__proto__:null,get(){const ye=this._readableState;return!!ye&&ye.readable!==!1&&!ye.destroyed&&!ye.errorEmitted&&!ye.endEmitted},set(ye){this._readableState&&(this._readableState.readable=!!ye)}},readableDidRead:{__proto__:null,enumerable:!1,get:function(){return this._readableState.dataEmitted}},readableAborted:{__proto__:null,enumerable:!1,get:function(){return!!(this._readableState.readable!==!1&&(this._readableState.destroyed||this._readableState.errored)&&!this._readableState.endEmitted)}},readableHighWaterMark:{__proto__:null,enumerable:!1,get:function(){return this._readableState.highWaterMark}},readableBuffer:{__proto__:null,enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}},readableFlowing:{__proto__:null,enumerable:!1,get:function(){return this._readableState.flowing},set:function(ye){this._readableState&&(this._readableState.flowing=ye)}},readableLength:{__proto__:null,enumerable:!1,get(){return this._readableState.length}},readableObjectMode:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.objectMode:!1}},readableEncoding:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.encoding:null}},errored:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.errored:null}},closed:{__proto__:null,get(){return this._readableState?this._readableState.closed:!1}},destroyed:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.destroyed:!1},set(ye){this._readableState&&(this._readableState.destroyed=ye)}},readableEnded:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.endEmitted:!1}}}),o(te.prototype,{pipesCount:{__proto__:null,get(){return this.pipes.length}},paused:{__proto__:null,get(){return this[q]!==!1},set(ye){this[q]=!!ye}}}),me._fromList=Ut;function Ut(ye,be){if(be.length===0)return null;let oe;return be.objectMode?oe=be.buffer.shift():!ye||ye>=be.length?(be.decoder?oe=be.buffer.join(""):be.buffer.length===1?oe=be.buffer.first():oe=be.buffer.concat(be.length),be.buffer.clear()):oe=be.buffer.consume(ye,be.decoder),oe}function _r(ye){const be=ye._readableState;b("endReadable",be.endEmitted),be.endEmitted||(be.ended=!0,e.nextTick(Ci,be,ye))}function Ci(ye,be){if(b("endReadableNT",ye.endEmitted,ye.length),!ye.errored&&!ye.closeEmitted&&!ye.endEmitted&&ye.length===0){if(ye.endEmitted=!0,be.emit("end"),be.writable&&be.allowHalfOpen===!1)e.nextTick(Yr,be);else if(ye.autoDestroy){const oe=be._writableState;(!oe||oe.autoDestroy&&(oe.finished||oe.writable===!1))&&be.destroy()}}}function Yr(ye){ye.writable&&!ye.writableEnded&&!ye.destroyed&&ye.end()}me.from=function(ye,be){return B(me,ye,be)};let Xt;function no(){return Xt===void 0&&(Xt={}),Xt}return me.fromWeb=function(ye,be){return no().newStreamReadableFromReadableStream(ye,be)},me.toWeb=function(ye,be){return no().newReadableStreamFromStreamReadable(ye,be)},me.wrap=function(ye,be){var oe,he;return new me({objectMode:(oe=(he=ye.readableObjectMode)!==null&&he!==void 0?he:ye.objectMode)!==null&&oe!==void 0?oe:!0,...be,destroy(ke,Ve){w.destroyer(ye,ke),Ve(ke)}}).wrap(ye)},Yf}var Kf,v0;function Wm(){if(v0)return Kf;v0=1;const e=Ho(),{ArrayPrototypeSlice:t,Error:r,FunctionPrototypeSymbolHasInstance:n,ObjectDefineProperty:i,ObjectDefineProperties:o,ObjectSetPrototypeOf:a,StringPrototypeToLowerCase:s,Symbol:l,SymbolHasInstance:u}=Rt();Kf=G,G.WritableState=R;const{EventEmitter:c}=zs(),f=Vm().Stream,{Buffer:d}=qr(),h=Hs(),{addAbortSignal:p}=Yc(),{getHighWaterMark:y,getDefaultHighWaterMark:v}=Kc(),{ERR_INVALID_ARG_TYPE:g,ERR_METHOD_NOT_IMPLEMENTED:m,ERR_MULTIPLE_CALLBACK:b,ERR_STREAM_CANNOT_PIPE:_,ERR_STREAM_DESTROYED:w,ERR_STREAM_ALREADY_FINISHED:E,ERR_STREAM_NULL_VALUES:T,ERR_STREAM_WRITE_AFTER_END:C,ERR_UNKNOWN_ENCODING:j}=br().codes,{errorOrDestroy:P}=h;a(G.prototype,f.prototype),a(G,f);function N(){}const M=l("kOnFinished");function R(L,F,D){typeof D!="boolean"&&(D=F instanceof vi()),this.objectMode=!!(L&&L.objectMode),D&&(this.objectMode=this.objectMode||!!(L&&L.writableObjectMode)),this.highWaterMark=L?y(this,L,"writableHighWaterMark",D):v(!1),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;const H=!!(L&&L.decodeStrings===!1);this.decodeStrings=!H,this.defaultEncoding=L&&L.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=$.bind(void 0,F),this.writecb=null,this.writelen=0,this.afterWriteTickInfo=null,O(this),this.pendingcb=0,this.constructed=!0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!L||L.emitClose!==!1,this.autoDestroy=!L||L.autoDestroy!==!1,this.errored=null,this.closed=!1,this.closeEmitted=!1,this[M]=[]}function O(L){L.buffered=[],L.bufferedIndex=0,L.allBuffers=!0,L.allNoop=!0}R.prototype.getBuffer=function(){return t(this.buffered,this.bufferedIndex)},i(R.prototype,"bufferedRequestCount",{__proto__:null,get(){return this.buffered.length-this.bufferedIndex}});function G(L){const F=this instanceof vi();if(!F&&!n(G,this))return new G(L);this._writableState=new R(L,this,F),L&&(typeof L.write=="function"&&(this._write=L.write),typeof L.writev=="function"&&(this._writev=L.writev),typeof L.destroy=="function"&&(this._destroy=L.destroy),typeof L.final=="function"&&(this._final=L.final),typeof L.construct=="function"&&(this._construct=L.construct),L.signal&&p(L.signal,this)),f.call(this,L),h.construct(this,()=>{const D=this._writableState;D.writing||ge(this,D),V(this,D)})}i(G,u,{__proto__:null,value:function(L){return n(this,L)?!0:this!==G?!1:L&&L._writableState instanceof R}}),G.prototype.pipe=function(){P(this,new _)};function q(L,F,D,H){const Q=L._writableState;if(typeof D=="function")H=D,D=Q.defaultEncoding;else{if(!D)D=Q.defaultEncoding;else if(D!=="buffer"&&!d.isEncoding(D))throw new j(D);typeof H!="function"&&(H=N)}if(F===null)throw new T;if(!Q.objectMode)if(typeof F=="string")Q.decodeStrings!==!1&&(F=d.from(F,D),D="buffer");else if(F instanceof d)D="buffer";else if(f._isUint8Array(F))F=f._uint8ArrayToBuffer(F),D="buffer";else throw new g("chunk",["string","Buffer","Uint8Array"],F);let de;return Q.ending?de=new C:Q.destroyed&&(de=new w("write")),de?(e.nextTick(H,de),P(L,de,!0),de):(Q.pendingcb++,z(L,Q,F,D,H))}G.prototype.write=function(L,F,D){return q(this,L,F,D)===!0},G.prototype.cork=function(){this._writableState.corked++},G.prototype.uncork=function(){const L=this._writableState;L.corked&&(L.corked--,L.writing||ge(this,L))},G.prototype.setDefaultEncoding=function(F){if(typeof F=="string"&&(F=s(F)),!d.isEncoding(F))throw new j(F);return this._writableState.defaultEncoding=F,this};function z(L,F,D,H,Q){const de=F.objectMode?1:D.length;F.length+=de;const J=F.lengthD.bufferedIndex&&ge(L,D),H?D.afterWriteTickInfo!==null&&D.afterWriteTickInfo.cb===Q?D.afterWriteTickInfo.count++:(D.afterWriteTickInfo={count:1,cb:Q,stream:L,state:D},e.nextTick(ie,D.afterWriteTickInfo)):Z(L,D,1,Q))}function ie({stream:L,state:F,count:D,cb:H}){return F.afterWriteTickInfo=null,Z(L,F,D,H)}function Z(L,F,D,H){for(!F.ending&&!L.destroyed&&F.length===0&&F.needDrain&&(F.needDrain=!1,L.emit("drain"));D-- >0;)F.pendingcb--,H();F.destroyed&&ue(F),V(L,F)}function ue(L){if(L.writing)return;for(let Q=L.bufferedIndex;Q1&&L._writev){F.pendingcb-=de-1;const fe=F.allNoop?N:me=>{for(let Ee=J;Ee256?(D.splice(0,J),F.bufferedIndex=0):F.bufferedIndex=J}F.bufferProcessing=!1}G.prototype._write=function(L,F,D){if(this._writev)this._writev([{chunk:L,encoding:F}],D);else throw new m("_write()")},G.prototype._writev=null,G.prototype.end=function(L,F,D){const H=this._writableState;typeof L=="function"?(D=L,L=null,F=null):typeof F=="function"&&(D=F,F=null);let Q;if(L!=null){const de=q(this,L,F);de instanceof r&&(Q=de)}return H.corked&&(H.corked=1,this.uncork()),Q||(!H.errored&&!H.ending?(H.ending=!0,V(this,H,!0),H.ended=!0):H.finished?Q=new E("end"):H.destroyed&&(Q=new w("end"))),typeof D=="function"&&(Q||H.finished?e.nextTick(D,Q):H[M].push(D)),this};function K(L){return L.ending&&!L.destroyed&&L.constructed&&L.length===0&&!L.errored&&L.buffered.length===0&&!L.finished&&!L.writing&&!L.errorEmitted&&!L.closeEmitted}function ee(L,F){let D=!1;function H(Q){if(D){P(L,Q??b());return}if(D=!0,F.pendingcb--,Q){const de=F[M].splice(0);for(let J=0;J{K(Q)?Y(H,Q):Q.pendingcb--},L,F)):K(F)&&(F.pendingcb++,Y(L,F))))}function Y(L,F){F.pendingcb--,F.finished=!0;const D=F[M].splice(0);for(let H=0;H{if(ue!=null)throw new p("nully","body",ue)},ue=>{y(ie,ue)});return ie=new j({objectMode:!0,readable:!1,write:z,final(ue){B(async()=>{try{await Z,e.nextTick(ue,null)}catch(ge){e.nextTick(ue,ge)}})},destroy:ae})}throw new p("Iterable, AsyncIterable or AsyncFunction",O,q)}if(E(R))return M(R.arrayBuffer());if(i(R))return _(j,R,{objectMode:!0,writable:!1});if(u(R?.readable)&&c(R?.writable))return j.fromWeb(R);if(typeof R?.writable=="object"||typeof R?.readable=="object"){const q=R!=null&&R.readable?a(R?.readable)?R?.readable:M(R.readable):void 0,z=R!=null&&R.writable?s(R?.writable)?R?.writable:M(R.writable):void 0;return N({readable:q,writable:z})}const G=R?.then;if(typeof G=="function"){let q;return C(G,R,z=>{z!=null&&q.push(z),q.push(null)},z=>{y(q,z)}),q=new j({objectMode:!0,writable:!1,read(){}})}throw new h(O,["Blob","ReadableStream","WritableStream","Stream","Iterable","AsyncIterable","Function","{ readable, writable } pair","Promise"],R)};function P(M){let{promise:R,resolve:O}=b();const G=new T,q=G.signal;return{value:M((async function*(){for(;;){const B=R;R=null;const{chunk:ae,done:$,cb:ie}=await B;if(e.nextTick(ie),$)return;if(q.aborted)throw new d(void 0,{cause:q.reason});({promise:R,resolve:O}=b()),yield ae}})(),{signal:q}),write(B,ae,$){const ie=O;O=null,ie({chunk:B,done:!1,cb:$})},final(B){const ae=O;O=null,ae({done:!0,cb:B})},destroy(B,ae){G.abort(),ae(B)}}}function N(M){const R=M.readable&&typeof M.readable.read!="function"?g.wrap(M.readable):M.readable,O=M.writable;let G=!!r(R),q=!!n(O),z,B,ae,$,ie;function Z(ue){const ge=$;$=null,ge?ge(ue):ue&&ie.destroy(ue)}return ie=new j({readableObjectMode:!!(R!=null&&R.readableObjectMode),writableObjectMode:!!(O!=null&&O.writableObjectMode),readable:G,writable:q}),q&&(f(O,ue=>{q=!1,ue&&y(R,ue),Z(ue)}),ie._write=function(ue,ge,K){O.write(ue,ge)?K():z=K},ie._final=function(ue){O.end(),B=ue},O.on("drain",function(){if(z){const ue=z;z=null,ue()}}),O.on("finish",function(){if(B){const ue=B;B=null,ue()}})),G&&(f(R,ue=>{G=!1,ue&&y(R,ue),Z(ue)}),R.on("readable",function(){if(ae){const ue=ae;ae=null,ue()}}),R.on("end",function(){ie.push(null)}),ie._read=function(){for(;;){const ue=R.read();if(ue===null){ae=ie._read;return}if(!ie.push(ue))return}}),ie._destroy=function(ue,ge){!ue&&$!==null&&(ue=new d),ae=null,z=null,B=null,$===null?ge(ue):($=ge,y(O,ue),y(R,ue))},ie}return Xf}var Qf,_0;function vi(){if(_0)return Qf;_0=1;const{ObjectDefineProperties:e,ObjectGetOwnPropertyDescriptor:t,ObjectKeys:r,ObjectSetPrototypeOf:n}=Rt();Qf=a;const i=Xc(),o=Wm();n(a.prototype,i.prototype),n(a,i);{const c=r(o.prototype);for(let f=0;f{if(c){u?u(c):this.destroy(c);return}f!=null&&this.push(f),this.push(null),u&&u()}):(this.push(null),u&&u())}function l(){this._final!==s&&s.call(this)}return a.prototype._final=s,a.prototype._transform=function(u,c,f){throw new r("_transform()")},a.prototype._write=function(u,c,f){const d=this._readableState,h=this._writableState,p=d.length;this._transform(u,c,(y,v)=>{if(y){f(y);return}v!=null&&this.push(v),h.ended||p===d.length||d.length{ee=!0});const X=o(ue,{readable:ge,writable:K},V=>{ee=!V});return{destroy:V=>{ee||(ee=!0,s.destroyer(ue,V||new h("pipe")))},cleanup:X}}function G(ue){return v(ue[ue.length-1],"streams[stream.length - 1]"),ue.pop()}function q(ue){if(m(ue))return ue;if(_(ue))return z(ue);throw new c("val",["Readable","Iterable","AsyncIterable"],ue)}async function*z(ue){M||(M=Xc()),yield*M.prototype[n].call(ue)}async function B(ue,ge,K,{end:ee}){let X,V=null;const Y=k=>{if(k&&(X=k),V){const L=V;V=null,L()}},re=()=>new r((k,L)=>{X?L(X):V=()=>{X?L(X):k()}});ge.on("drain",Y);const ne=o(ge,{readable:!1},Y);try{ge.writableNeedDrain&&await re();for await(const k of ue)ge.write(k)||await re();ee&&(ge.end(),await re()),K()}catch(k){K(X!==k?u(X,k):k)}finally{ne(),ge.off("drain",Y)}}async function ae(ue,ge,K,{end:ee}){E(ge)&&(ge=ge.writable);const X=ge.getWriter();try{for await(const V of ue)await X.ready,X.write(V).catch(()=>{});await X.ready,ee&&await X.close(),K()}catch(V){try{await X.abort(V),K(V)}catch(Y){K(Y)}}}function $(...ue){return ie(ue,a(G(ue)))}function ie(ue,ge,K){if(ue.length===1&&t(ue[0])&&(ue=ue[0]),ue.length<2)throw new d("streams");const ee=new P,X=ee.signal,V=K?.signal,Y=[];g(V,"options.signal");function re(){Q(new y)}R=R||Pr().addAbortListener;let ne;V&&(ne=R(V,re));let k,L;const F=[];let D=0;function H(me){Q(me,--D===0)}function Q(me,Ee){var xe;if(me&&(!k||k.code==="ERR_STREAM_PREMATURE_CLOSE")&&(k=me),!(!k&&!Ee)){for(;F.length;)F.shift()(k);(xe=ne)===null||xe===void 0||xe[i](),ee.abort(),Ee&&(k||Y.forEach(Ne=>Ne()),e.nextTick(ge,k,L))}}let de;for(let me=0;me0,I=xe||K?.end!==!1,x=me===ue.length-1;if(w(Ee)){let S=function(A){A&&A.name!=="AbortError"&&A.code!=="ERR_STREAM_PREMATURE_CLOSE"&&H(A)};var te=S;if(I){const{destroy:A,cleanup:W}=O(Ee,xe,Ne);F.push(A),b(Ee)&&x&&Y.push(W)}Ee.on("error",S),b(Ee)&&x&&Y.push(()=>{Ee.removeListener("error",S)})}if(me===0)if(typeof Ee=="function"){if(de=Ee({signal:X}),!m(de))throw new f("Iterable, AsyncIterable or Stream","source",de)}else m(Ee)||_(Ee)||E(Ee)?de=Ee:de=l.from(Ee);else if(typeof Ee=="function"){if(E(de)){var J;de=q((J=de)===null||J===void 0?void 0:J.readable)}else de=q(de);if(de=Ee(de,{signal:X}),xe){if(!m(de,!0))throw new f("AsyncIterable",`transform[${me-1}]`,de)}else{var fe;N||(N=AE());const S=new N({objectMode:!0}),A=(fe=de)===null||fe===void 0?void 0:fe.then;if(typeof A=="function")D++,A.call(de,ve=>{L=ve,ve!=null&&S.write(ve),I&&S.end(),e.nextTick(H)},ve=>{S.destroy(ve),e.nextTick(H,ve)});else if(m(de,!0))D++,B(de,S,H,{end:I});else if(C(de)||E(de)){const ve=de.readable||de;D++,B(ve,S,H,{end:I})}else throw new f("AsyncIterable or Promise","destination",de);de=S;const{destroy:W,cleanup:ce}=O(de,!1,!0);F.push(W),x&&Y.push(ce)}}else if(w(Ee)){if(_(de)){D+=2;const S=Z(de,Ee,H,{end:I});b(Ee)&&x&&Y.push(S)}else if(E(de)||C(de)){const S=de.readable||de;D++,B(S,Ee,H,{end:I})}else if(m(de))D++,B(de,Ee,H,{end:I});else throw new c("val",["Readable","Iterable","AsyncIterable","ReadableStream","TransformStream"],de);de=Ee}else if(T(Ee)){if(_(de))D++,ae(q(de),Ee,H,{end:I});else if(C(de)||m(de))D++,ae(de,Ee,H,{end:I});else if(E(de))D++,ae(de.readable,Ee,H,{end:I});else throw new c("val",["Readable","Iterable","AsyncIterable","ReadableStream","TransformStream"],de);de=Ee}else de=l.from(Ee)}return(X!=null&&X.aborted||V!=null&&V.aborted)&&e.nextTick(re),de}function Z(ue,ge,K,{end:ee}){let X=!1;if(ge.on("close",()=>{X||K(new p)}),ue.pipe(ge,{end:!1}),ee){let Y=function(){X=!0,ge.end()};var V=Y;j(ue)?e.nextTick(Y):ue.once("end",Y)}else K();return o(ue,{readable:!0,writable:!1},Y=>{const re=ue._readableState;Y&&Y.code==="ERR_STREAM_PREMATURE_CLOSE"&&re&&re.ended&&!re.errored&&!re.errorEmitted?ue.once("end",K).once("error",K):K(Y)}),o(ge,{readable:!1,writable:!0},K)}return ed={pipelineImpl:ie,pipeline:$},ed}var td,x0;function IE(){if(x0)return td;x0=1;const{pipeline:e}=zm(),t=vi(),{destroyer:r}=Hs(),{isNodeStream:n,isReadable:i,isWritable:o,isWebStream:a,isTransformStream:s,isWritableStream:l,isReadableStream:u}=Ai(),{AbortError:c,codes:{ERR_INVALID_ARG_VALUE:f,ERR_MISSING_ARGS:d}}=br(),h=Ji();return td=function(...y){if(y.length===0)throw new d("streams");if(y.length===1)return t.from(y[0]);const v=[...y];if(typeof y[0]=="function"&&(y[0]=t.from(y[0])),typeof y[y.length-1]=="function"){const N=y.length-1;y[N]=t.from(y[N])}for(let N=0;N0&&!(o(y[N])||l(y[N])||s(y[N])))throw new f(`streams[${N}]`,v[N],"must be writable")}let g,m,b,_,w;function E(N){const M=_;_=null,M?M(N):N?w.destroy(N):!P&&!j&&w.destroy()}const T=y[0],C=e(y,E),j=!!(o(T)||l(T)||s(T)),P=!!(i(C)||u(C)||s(C));if(w=new t({writableObjectMode:!!(T!=null&&T.writableObjectMode),readableObjectMode:!!(C!=null&&C.readableObjectMode),writable:j,readable:P}),j){if(n(T))w._write=function(M,R,O){T.write(M,R)?O():g=O},w._final=function(M){T.end(),m=M},T.on("drain",function(){if(g){const M=g;g=null,M()}});else if(a(T)){const R=(s(T)?T.writable:T).getWriter();w._write=async function(O,G,q){try{await R.ready,R.write(O).catch(()=>{}),q()}catch(z){q(z)}},w._final=async function(O){try{await R.ready,R.close().catch(()=>{}),m=O}catch(G){O(G)}}}const N=s(C)?C.readable:C;h(N,()=>{if(m){const M=m;m=null,M()}})}if(P){if(n(C))C.on("readable",function(){if(b){const N=b;b=null,N()}}),C.on("end",function(){w.push(null)}),w._read=function(){for(;;){const N=C.read();if(N===null){b=w._read;return}if(!w.push(N))return}};else if(a(C)){const M=(s(C)?C.readable:C).getReader();w._read=async function(){for(;;)try{const{value:R,done:O}=await M.read();if(!w.push(R))return;if(O){w.push(null);return}}catch{return}}}}return w._destroy=function(N,M){!N&&_!==null&&(N=new c),b=null,g=null,m=null,_===null?M(N):(_=M,n(C)&&r(C,N))},w},td}var T0;function cN(){if(T0)return Pl;T0=1;const e=globalThis.AbortController||Ha().AbortController,{codes:{ERR_INVALID_ARG_VALUE:t,ERR_INVALID_ARG_TYPE:r,ERR_MISSING_ARGS:n,ERR_OUT_OF_RANGE:i},AbortError:o}=br(),{validateAbortSignal:a,validateInteger:s,validateObject:l}=sl(),u=Rt().Symbol("kWeak"),c=Rt().Symbol("kResistStopPropagation"),{finished:f}=Ji(),d=IE(),{addAbortSignalNoValidate:h}=Yc(),{isWritable:p,isNodeStream:y}=Ai(),{deprecate:v}=Pr(),{ArrayPrototypePush:g,Boolean:m,MathFloor:b,Number:_,NumberIsNaN:w,Promise:E,PromiseReject:T,PromiseResolve:C,PromisePrototypeThen:j,Symbol:P}=Rt(),N=P("kEmpty"),M=P("kEof");function R(V,Y){if(Y!=null&&l(Y,"options"),Y?.signal!=null&&a(Y.signal,"options.signal"),y(V)&&!p(V))throw new t("stream",V,"must be writable");const re=d(this,V);return Y!=null&&Y.signal&&h(Y.signal,re),re}function O(V,Y){if(typeof V!="function")throw new r("fn",["Function","AsyncFunction"],V);Y!=null&&l(Y,"options"),Y?.signal!=null&&a(Y.signal,"options.signal");let re=1;Y?.concurrency!=null&&(re=b(Y.concurrency));let ne=re-1;return Y?.highWaterMark!=null&&(ne=b(Y.highWaterMark)),s(re,"options.concurrency",1),s(ne,"options.highWaterMark",0),ne+=re,(async function*(){const L=Pr().AbortSignalAny([Y?.signal].filter(m)),F=this,D=[],H={signal:L};let Q,de,J=!1,fe=0;function te(){J=!0,me()}function me(){fe-=1,Ee()}function Ee(){de&&!J&&fe=ne||fe>=re)&&await new E(I=>{de=I})}D.push(M)}catch(Ne){const I=T(Ne);j(I,me,te),D.push(I)}finally{J=!0,Q&&(Q(),Q=null)}}xe();try{for(;;){for(;D.length>0;){const Ne=await D[0];if(Ne===M)return;if(L.aborted)throw new o;Ne!==N&&(yield Ne),D.shift(),Ee()}await new E(Ne=>{Q=Ne})}}finally{J=!0,de&&(de(),de=null)}}).call(this)}function G(V=void 0){return V!=null&&l(V,"options"),V?.signal!=null&&a(V.signal,"options.signal"),(async function*(){let re=0;for await(const k of this){var ne;if(V!=null&&(ne=V.signal)!==null&&ne!==void 0&&ne.aborted)throw new o({cause:V.signal.reason});yield[re++,k]}}).call(this)}async function q(V,Y=void 0){for await(const re of $.call(this,V,Y))return!0;return!1}async function z(V,Y=void 0){if(typeof V!="function")throw new r("fn",["Function","AsyncFunction"],V);return!await q.call(this,async(...re)=>!await V(...re),Y)}async function B(V,Y){for await(const re of $.call(this,V,Y))return re}async function ae(V,Y){if(typeof V!="function")throw new r("fn",["Function","AsyncFunction"],V);async function re(ne,k){return await V(ne,k),N}for await(const ne of O.call(this,re,Y));}function $(V,Y){if(typeof V!="function")throw new r("fn",["Function","AsyncFunction"],V);async function re(ne,k){return await V(ne,k)?ne:N}return O.call(this,re,Y)}class ie extends n{constructor(){super("reduce"),this.message="Reduce of an empty stream requires an initial value"}}async function Z(V,Y,re){var ne;if(typeof V!="function")throw new r("reducer",["Function","AsyncFunction"],V);re!=null&&l(re,"options"),re?.signal!=null&&a(re.signal,"options.signal");let k=arguments.length>1;if(re!=null&&(ne=re.signal)!==null&&ne!==void 0&&ne.aborted){const Q=new o(void 0,{cause:re.signal.reason});throw this.once("error",()=>{}),await f(this.destroy(Q)),Q}const L=new e,F=L.signal;if(re!=null&&re.signal){const Q={once:!0,[u]:this,[c]:!0};re.signal.addEventListener("abort",()=>L.abort(),Q)}let D=!1;try{for await(const Q of this){var H;if(D=!0,re!=null&&(H=re.signal)!==null&&H!==void 0&&H.aborted)throw new o;k?Y=await V(Y,Q,{signal:F}):(Y=Q,k=!0)}if(!D&&!k)throw new ie}finally{L.abort()}return Y}async function ue(V){V!=null&&l(V,"options"),V?.signal!=null&&a(V.signal,"options.signal");const Y=[];for await(const ne of this){var re;if(V!=null&&(re=V.signal)!==null&&re!==void 0&&re.aborted)throw new o(void 0,{cause:V.signal.reason});g(Y,ne)}return Y}function ge(V,Y){const re=O.call(this,V,Y);return(async function*(){for await(const k of re)yield*k}).call(this)}function K(V){if(V=_(V),w(V))return 0;if(V<0)throw new i("number",">= 0",V);return V}function ee(V,Y=void 0){return Y!=null&&l(Y,"options"),Y?.signal!=null&&a(Y.signal,"options.signal"),V=K(V),(async function*(){var ne;if(Y!=null&&(ne=Y.signal)!==null&&ne!==void 0&&ne.aborted)throw new o;for await(const L of this){var k;if(Y!=null&&(k=Y.signal)!==null&&k!==void 0&&k.aborted)throw new o;V--<=0&&(yield L)}}).call(this)}function X(V,Y=void 0){return Y!=null&&l(Y,"options"),Y?.signal!=null&&a(Y.signal,"options.signal"),V=K(V),(async function*(){var ne;if(Y!=null&&(ne=Y.signal)!==null&&ne!==void 0&&ne.aborted)throw new o;for await(const L of this){var k;if(Y!=null&&(k=Y.signal)!==null&&k!==void 0&&k.aborted)throw new o;if(V-- >0&&(yield L),V<=0)return}}).call(this)}return Pl.streamReturningOperators={asIndexedPairs:v(G,"readable.asIndexedPairs will be removed in a future version."),drop:ee,filter:$,flatMap:ge,map:O,take:X,compose:R},Pl.promiseReturningOperators={every:z,forEach:ae,reduce:Z,toArray:ue,some:q,find:B},Pl}var rd,A0;function CE(){if(A0)return rd;A0=1;const{ArrayPrototypePop:e,Promise:t}=Rt(),{isIterable:r,isNodeStream:n,isWebStream:i}=Ai(),{pipelineImpl:o}=zm(),{finished:a}=Ji();ME();function s(...l){return new t((u,c)=>{let f,d;const h=l[l.length-1];if(h&&typeof h=="object"&&!n(h)&&!r(h)&&!i(h)){const p=e(l);f=p.signal,d=p.end}o(l,(p,y)=>{p?c(p):u(y)},{signal:f,end:d})})}return rd={finished:a,pipeline:s},rd}var I0;function ME(){if(I0)return Of.exports;I0=1;const{Buffer:e}=qr(),{ObjectDefineProperty:t,ObjectKeys:r,ReflectApply:n}=Rt(),{promisify:{custom:i}}=Pr(),{streamReturningOperators:o,promiseReturningOperators:a}=cN(),{codes:{ERR_ILLEGAL_CONSTRUCTOR:s}}=br(),l=IE(),{setDefaultHighWaterMark:u,getDefaultHighWaterMark:c}=Kc(),{pipeline:f}=zm(),{destroyer:d}=Hs(),h=Ji(),p=CE(),y=Ai(),v=Of.exports=Vm().Stream;v.isDestroyed=y.isDestroyed,v.isDisturbed=y.isDisturbed,v.isErrored=y.isErrored,v.isReadable=y.isReadable,v.isWritable=y.isWritable,v.Readable=Xc();for(const b of r(o)){let w=function(...E){if(new.target)throw s();return v.Readable.from(n(_,this,E))};var m=w;const _=o[b];t(w,"name",{__proto__:null,value:_.name}),t(w,"length",{__proto__:null,value:_.length}),t(v.Readable.prototype,b,{__proto__:null,value:w,enumerable:!1,configurable:!0,writable:!0})}for(const b of r(a)){let w=function(...T){if(new.target)throw s();return n(_,this,T)};var m=w;const _=a[b];t(w,"name",{__proto__:null,value:_.name}),t(w,"length",{__proto__:null,value:_.length}),t(v.Readable.prototype,b,{__proto__:null,value:w,enumerable:!1,configurable:!0,writable:!0})}v.Writable=Wm(),v.Duplex=vi(),v.Transform=TE(),v.PassThrough=AE(),v.pipeline=f;const{addAbortSignal:g}=Yc();return v.addAbortSignal=g,v.finished=h,v.destroy=d,v.compose=l,v.setDefaultHighWaterMark=u,v.getDefaultHighWaterMark=c,t(v,"promises",{__proto__:null,configurable:!0,enumerable:!0,get(){return p}}),t(f,i,{__proto__:null,enumerable:!0,get(){return p.pipeline}}),t(h,i,{__proto__:null,enumerable:!0,get(){return p.finished}}),v.Stream=v,v._isUint8Array=function(_){return _ instanceof Uint8Array},v._uint8ArrayToBuffer=function(_){return e.from(_.buffer,_.byteOffset,_.byteLength)},Of.exports}var C0;function fN(){return C0||(C0=1,(function(e){const t=ME(),r=CE(),n=t.Readable.destroy;e.exports=t.Readable,e.exports._uint8ArrayToBuffer=t._uint8ArrayToBuffer,e.exports._isUint8Array=t._isUint8Array,e.exports.isDisturbed=t.isDisturbed,e.exports.isErrored=t.isErrored,e.exports.isReadable=t.isReadable,e.exports.Readable=t.Readable,e.exports.Writable=t.Writable,e.exports.Duplex=t.Duplex,e.exports.Transform=t.Transform,e.exports.PassThrough=t.PassThrough,e.exports.addAbortSignal=t.addAbortSignal,e.exports.finished=t.finished,e.exports.destroy=t.destroy,e.exports.destroy=n,e.exports.pipeline=t.pipeline,e.exports.compose=t.compose,Object.defineProperty(t,"promises",{configurable:!0,enumerable:!0,get(){return r}}),e.exports.Stream=t.Stream,e.exports.default=e.exports})(Pf)),Pf.exports}var Rl={exports:{}},M0;function dN(){return M0||(M0=1,typeof Object.create=="function"?Rl.exports=function(t,r){r&&(t.super_=r,t.prototype=Object.create(r.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:Rl.exports=function(t,r){if(r){t.super_=r;var n=function(){};n.prototype=r.prototype,t.prototype=new n,t.prototype.constructor=t}}),Rl.exports}var nd,k0;function hN(){if(k0)return nd;k0=1;const{Buffer:e}=qr(),t=Symbol.for("BufferList");function r(n){if(!(this instanceof r))return new r(n);r._init.call(this,n)}return r._init=function(i){Object.defineProperty(this,t,{value:!0}),this._bufs=[],this.length=0,i&&this.append(i)},r.prototype._new=function(i){return new r(i)},r.prototype._offset=function(i){if(i===0)return[0,0];let o=0;for(let a=0;athis.length||i<0)return;const o=this._offset(i);return this._bufs[o[0]][o[1]]},r.prototype.slice=function(i,o){return typeof i=="number"&&i<0&&(i+=this.length),typeof o=="number"&&o<0&&(o+=this.length),this.copy(null,0,i,o)},r.prototype.copy=function(i,o,a,s){if((typeof a!="number"||a<0)&&(a=0),(typeof s!="number"||s>this.length)&&(s=this.length),a>=this.length||s<=0)return i||e.alloc(0);const l=!!i,u=this._offset(a),c=s-a;let f=c,d=l&&o||0,h=u[1];if(a===0&&s===this.length){if(!l)return this._bufs.length===1?this._bufs[0]:e.concat(this._bufs,this.length);for(let p=0;py)this._bufs[p].copy(i,d,h),d+=y;else{this._bufs[p].copy(i,d,h,h+f),d+=y;break}f-=y,h&&(h=0)}return i.length>d?i.slice(0,d):i},r.prototype.shallowSlice=function(i,o){if(i=i||0,o=typeof o!="number"?this.length:o,i<0&&(i+=this.length),o<0&&(o+=this.length),i===o)return this._new();const a=this._offset(i),s=this._offset(o),l=this._bufs.slice(a[0],s[0]+1);return s[1]===0?l.pop():l[l.length-1]=l[l.length-1].slice(0,s[1]),a[1]!==0&&(l[0]=l[0].slice(a[1])),this._new(l)},r.prototype.toString=function(i,o,a){return this.slice(o,a).toString(i)},r.prototype.consume=function(i){if(i=Math.trunc(i),Number.isNaN(i)||i<=0)return this;for(;this._bufs.length;)if(i>=this._bufs[0].length)i-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(i),this.length-=i;break}return this},r.prototype.duplicate=function(){const i=this._new();for(let o=0;o=0&&u=0&&uthis.length?this.length:i;const a=this._offset(i);let s=a[0],l=a[1];for(;s=n.length){const f=u.indexOf(n,l);if(f!==-1)return this._reverseOffset([s,f]);l=u.length-n.length+1}else{const f=this._reverseOffset([s,l]);if(this._match(f,n))return f;l++}l=0}return-1},r.prototype._match=function(n,i){if(this.length-n[0,1].map(a=>[0,1].map(s=>{const l=r.alloc(1);return l.writeUInt8(t.codes[i]<r.from([i])),t.EMPTY={pingreq:r.from([t.codes.pingreq<<4,0]),pingresp:r.from([t.codes.pingresp<<4,0]),disconnect:r.from([t.codes.disconnect<<4,0])},t.MQTT5_PUBACK_PUBREC_CODES={0:"Success",16:"No matching subscribers",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",144:"Topic Name invalid",145:"Packet identifier in use",151:"Quota exceeded",153:"Payload format invalid"},t.MQTT5_PUBREL_PUBCOMP_CODES={0:"Success",146:"Packet Identifier not found"},t.MQTT5_SUBACK_CODES={0:"Granted QoS 0",1:"Granted QoS 1",2:"Granted QoS 2",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",143:"Topic Filter invalid",145:"Packet Identifier in use",151:"Quota exceeded",158:"Shared Subscriptions not supported",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"},t.MQTT5_UNSUBACK_CODES={0:"Success",17:"No subscription existed",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",143:"Topic Filter invalid",145:"Packet Identifier in use"},t.MQTT5_DISCONNECT_CODES={0:"Normal disconnection",4:"Disconnect with Will Message",128:"Unspecified error",129:"Malformed Packet",130:"Protocol Error",131:"Implementation specific error",135:"Not authorized",137:"Server busy",139:"Server shutting down",141:"Keep Alive timeout",142:"Session taken over",143:"Topic Filter invalid",144:"Topic Name invalid",147:"Receive Maximum exceeded",148:"Topic Alias invalid",149:"Packet too large",150:"Message rate too high",151:"Quota exceeded",152:"Administrative action",153:"Payload format invalid",154:"Retain not supported",155:"QoS not supported",156:"Use another server",157:"Server moved",158:"Shared Subscriptions not supported",159:"Connection rate exceeded",160:"Maximum connect time",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"},t.MQTT5_AUTH_CODES={0:"Success",24:"Continue authentication",25:"Re-authenticate"}})(od)),od.exports}function PE(){throw new Error("setTimeout has not been defined")}function OE(){throw new Error("clearTimeout has not been defined")}var Di=PE,Bi=OE;typeof Es.setTimeout=="function"&&(Di=setTimeout);typeof Es.clearTimeout=="function"&&(Bi=clearTimeout);function LE(e){if(Di===setTimeout)return setTimeout(e,0);if((Di===PE||!Di)&&setTimeout)return Di=setTimeout,setTimeout(e,0);try{return Di(e,0)}catch{try{return Di.call(null,e,0)}catch{return Di.call(this,e,0)}}}function mN(e){if(Bi===clearTimeout)return clearTimeout(e);if((Bi===OE||!Bi)&&clearTimeout)return Bi=clearTimeout,clearTimeout(e);try{return Bi(e)}catch{try{return Bi.call(null,e)}catch{return Bi.call(this,e)}}}var ii=[],ws=!1,bo,Pu=-1;function yN(){!ws||!bo||(ws=!1,bo.length?ii=bo.concat(ii):Pu=-1,ii.length&&RE())}function RE(){if(!ws){var e=LE(yN);ws=!0;for(var t=ii.length;t;){for(bo=ii,ii=[];++Pu1)for(var r=1;r0)return a(c);if(d==="number"&&isFinite(c))return f.long?l(c):s(c);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(c))};function a(c){if(c=String(c),!(c.length>100)){var f=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(c);if(f){var d=parseFloat(f[1]),h=(f[2]||"ms").toLowerCase();switch(h){case"years":case"year":case"yrs":case"yr":case"y":return d*o;case"weeks":case"week":case"w":return d*i;case"days":case"day":case"d":return d*n;case"hours":case"hour":case"hrs":case"hr":case"h":return d*r;case"minutes":case"minute":case"mins":case"min":case"m":return d*t;case"seconds":case"second":case"secs":case"sec":case"s":return d*e;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return d;default:return}}}}function s(c){var f=Math.abs(c);return f>=n?Math.round(c/n)+"d":f>=r?Math.round(c/r)+"h":f>=t?Math.round(c/t)+"m":f>=e?Math.round(c/e)+"s":c+"ms"}function l(c){var f=Math.abs(c);return f>=n?u(c,f,n,"day"):f>=r?u(c,f,r,"hour"):f>=t?u(c,f,t,"minute"):f>=e?u(c,f,e,"second"):c+" ms"}function u(c,f,d,h){var p=f>=d*1.5;return Math.round(c/d)+" "+h+(p?"s":"")}return sd}var ad,N0;function zN(){if(N0)return ad;N0=1;function e(t){n.debug=n,n.default=n,n.coerce=u,n.disable=s,n.enable=o,n.enabled=l,n.humanize=WN(),n.destroy=c,Object.keys(t).forEach(f=>{n[f]=t[f]}),n.names=[],n.skips=[],n.formatters={};function r(f){let d=0;for(let h=0;h{if(T==="%%")return"%";w++;const j=n.formatters[C];if(typeof j=="function"){const P=g[w];T=j.call(m,P),g.splice(w,1),w--}return T}),n.formatArgs.call(m,g),(m.log||n.log).apply(m,g)}return v.namespace=f,v.useColors=n.useColors(),v.color=n.selectColor(f),v.extend=i,v.destroy=n.destroy,Object.defineProperty(v,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(p!==n.namespaces&&(p=n.namespaces,y=n.enabled(f)),y),set:g=>{h=g}}),typeof n.init=="function"&&n.init(v),v}function i(f,d){const h=n(this.namespace+(typeof d>"u"?":":d)+f);return h.log=this.log,h}function o(f){n.save(f),n.namespaces=f,n.names=[],n.skips=[];const d=(typeof f=="string"?f:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(const h of d)h[0]==="-"?n.skips.push(h.slice(1)):n.names.push(h)}function a(f,d){let h=0,p=0,y=-1,v=0;for(;h"-"+d)].join(",");return n.enable(""),f}function l(f){for(const d of n.skips)if(a(f,d))return!1;for(const d of n.names)if(a(f,d))return!0;return!1}function u(f){return f instanceof Error?f.stack||f.message:f}function c(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return n.enable(n.load()),n}return ad=e,ad}var $0;function $E(){return $0||($0=1,(function(e,t){var r={};t.formatArgs=i,t.save=o,t.load=a,t.useColors=n,t.storage=s(),t.destroy=(()=>{let u=!1;return()=>{u||(u=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function n(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let u;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(u=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(u[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function i(u){if(u[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+u[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const c="color: "+this.color;u.splice(1,0,c,"color: inherit");let f=0,d=0;u[0].replace(/%[a-zA-Z%]/g,h=>{h!=="%%"&&(f++,h==="%c"&&(d=f))}),u.splice(d,0,c)}t.log=console.debug||console.log||(()=>{});function o(u){try{u?t.storage.setItem("debug",u):t.storage.removeItem("debug")}catch{}}function a(){let u;try{u=t.storage.getItem("debug")||t.storage.getItem("DEBUG")}catch{}return!u&&typeof po<"u"&&"env"in po&&(u=r.DEBUG),u}function s(){try{return localStorage}catch{}}e.exports=zN()(t);const{formatters:l}=e.exports;l.j=function(u){try{return JSON.stringify(u)}catch(c){return"[UnexpectedJSONParseError]: "+c.message}}})(Nl,Nl.exports)),Nl.exports}var ld,D0;function HN(){if(D0)return ld;D0=1;const e=pN(),{EventEmitter:t}=zs(),r=gN(),n=kE(),i=$E()("mqtt-packet:parser");class o extends t{constructor(){super(),this.parser=this.constructor.parser}static parser(s){return this instanceof o?(this.settings=s||{},this._states=["_parseHeader","_parseLength","_parsePayload","_newPacket"],this._resetState(),this):new o().parser(s)}_resetState(){i("_resetState: resetting packet, error, _list, and _stateCounter"),this.packet=new r,this.error=null,this._list=e(),this._stateCounter=0}parse(s){for(this.error&&this._resetState(),this._list.append(s),i("parse: current state: %s",this._states[this._stateCounter]);(this.packet.length!==-1||this._list.length>0)&&this[this._states[this._stateCounter]]()&&!this.error;)this._stateCounter++,i("parse: state complete. _stateCounter is now: %d",this._stateCounter),i("parse: packet.length: %d, buffer list length: %d",this.packet.length,this._list.length),this._stateCounter>=this._states.length&&(this._stateCounter=0);return i("parse: exited while loop. packet: %d, buffer list length: %d",this.packet.length,this._list.length),this._list.length}_parseHeader(){const s=this._list.readUInt8(0),l=s>>n.CMD_SHIFT;this.packet.cmd=n.types[l];const u=s&15,c=n.requiredHeaderFlags[l];return c!=null&&u!==c?this._emitError(new Error(n.requiredHeaderFlagsErrors[l])):(this.packet.retain=(s&n.RETAIN_MASK)!==0,this.packet.qos=s>>n.QOS_SHIFT&n.QOS_MASK,this.packet.qos>2?this._emitError(new Error("Packet must not have both QoS bits set to 1")):(this.packet.dup=(s&n.DUP_MASK)!==0,i("_parseHeader: packet: %o",this.packet),this._list.consume(1),!0))}_parseLength(){const s=this._parseVarByteNum(!0);return s&&(this.packet.length=s.value,this._list.consume(s.bytes)),i("_parseLength %d",s.value),!!s}_parsePayload(){i("_parsePayload: payload %O",this._list);let s=!1;if(this.packet.length===0||this._list.length>=this.packet.length){switch(this._pos=0,this.packet.cmd){case"connect":this._parseConnect();break;case"connack":this._parseConnack();break;case"publish":this._parsePublish();break;case"puback":case"pubrec":case"pubrel":case"pubcomp":this._parseConfirmation();break;case"subscribe":this._parseSubscribe();break;case"suback":this._parseSuback();break;case"unsubscribe":this._parseUnsubscribe();break;case"unsuback":this._parseUnsuback();break;case"pingreq":case"pingresp":break;case"disconnect":this._parseDisconnect();break;case"auth":this._parseAuth();break;default:this._emitError(new Error("Not supported"))}s=!0}return i("_parsePayload complete result: %s",s),s}_parseConnect(){i("_parseConnect");let s,l,u,c;const f={},d=this.packet,h=this._parseString();if(h===null)return this._emitError(new Error("Cannot parse protocolId"));if(h!=="MQTT"&&h!=="MQIsdp")return this._emitError(new Error("Invalid protocolId"));if(d.protocolId=h,this._pos>=this._list.length)return this._emitError(new Error("Packet too short"));if(d.protocolVersion=this._list.readUInt8(this._pos),d.protocolVersion>=128&&(d.bridgeMode=!0,d.protocolVersion=d.protocolVersion-128),d.protocolVersion!==3&&d.protocolVersion!==4&&d.protocolVersion!==5)return this._emitError(new Error("Invalid protocol version"));if(this._pos++,this._pos>=this._list.length)return this._emitError(new Error("Packet too short"));if(this._list.readUInt8(this._pos)&1)return this._emitError(new Error("Connect flag bit 0 must be 0, but got 1"));f.username=this._list.readUInt8(this._pos)&n.USERNAME_MASK,f.password=this._list.readUInt8(this._pos)&n.PASSWORD_MASK,f.will=this._list.readUInt8(this._pos)&n.WILL_FLAG_MASK;const p=!!(this._list.readUInt8(this._pos)&n.WILL_RETAIN_MASK),y=(this._list.readUInt8(this._pos)&n.WILL_QOS_MASK)>>n.WILL_QOS_SHIFT;if(f.will)d.will={},d.will.retain=p,d.will.qos=y;else{if(p)return this._emitError(new Error("Will Retain Flag must be set to zero when Will Flag is set to 0"));if(y)return this._emitError(new Error("Will QoS must be set to zero when Will Flag is set to 0"))}if(d.clean=(this._list.readUInt8(this._pos)&n.CLEAN_SESSION_MASK)!==0,this._pos++,d.keepalive=this._parseNum(),d.keepalive===-1)return this._emitError(new Error("Packet too short"));if(d.protocolVersion===5){const g=this._parseProperties();Object.getOwnPropertyNames(g).length&&(d.properties=g)}const v=this._parseString();if(v===null)return this._emitError(new Error("Packet too short"));if(d.clientId=v,i("_parseConnect: packet.clientId: %s",d.clientId),f.will){if(d.protocolVersion===5){const g=this._parseProperties();Object.getOwnPropertyNames(g).length&&(d.will.properties=g)}if(s=this._parseString(),s===null)return this._emitError(new Error("Cannot parse will topic"));if(d.will.topic=s,i("_parseConnect: packet.will.topic: %s",d.will.topic),l=this._parseBuffer(),l===null)return this._emitError(new Error("Cannot parse will payload"));d.will.payload=l,i("_parseConnect: packet.will.paylaod: %s",d.will.payload)}if(f.username){if(c=this._parseString(),c===null)return this._emitError(new Error("Cannot parse username"));d.username=c,i("_parseConnect: packet.username: %s",d.username)}if(f.password){if(u=this._parseBuffer(),u===null)return this._emitError(new Error("Cannot parse password"));d.password=u}return this.settings=d,i("_parseConnect: complete"),d}_parseConnack(){i("_parseConnack");const s=this.packet;if(this._list.length<1)return null;const l=this._list.readUInt8(this._pos++);if(l>1)return this._emitError(new Error("Invalid connack flags, bits 7-1 must be set to 0"));if(s.sessionPresent=!!(l&n.SESSIONPRESENT_MASK),this.settings.protocolVersion===5)this._list.length>=2?s.reasonCode=this._list.readUInt8(this._pos++):s.reasonCode=0;else{if(this._list.length<2)return null;s.returnCode=this._list.readUInt8(this._pos++)}if(s.returnCode===-1||s.reasonCode===-1)return this._emitError(new Error("Cannot parse return code"));if(this.settings.protocolVersion===5){const u=this._parseProperties();Object.getOwnPropertyNames(u).length&&(s.properties=u)}i("_parseConnack: complete")}_parsePublish(){i("_parsePublish");const s=this.packet;if(s.topic=this._parseString(),s.topic===null)return this._emitError(new Error("Cannot parse topic"));if(!(s.qos>0&&!this._parseMessageId())){if(this.settings.protocolVersion===5){const l=this._parseProperties();Object.getOwnPropertyNames(l).length&&(s.properties=l)}s.payload=this._list.slice(this._pos,s.length),i("_parsePublish: payload from buffer list: %o",s.payload)}}_parseSubscribe(){i("_parseSubscribe");const s=this.packet;let l,u,c,f,d,h,p;if(s.subscriptions=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){const y=this._parseProperties();Object.getOwnPropertyNames(y).length&&(s.properties=y)}if(s.length<=0)return this._emitError(new Error("Malformed subscribe, no payload specified"));for(;this._pos=s.length)return this._emitError(new Error("Malformed Subscribe Payload"));if(u=this._parseByte(),this.settings.protocolVersion===5){if(u&192)return this._emitError(new Error("Invalid subscribe topic flag bits, bits 7-6 must be 0"))}else if(u&252)return this._emitError(new Error("Invalid subscribe topic flag bits, bits 7-2 must be 0"));if(c=u&n.SUBSCRIBE_OPTIONS_QOS_MASK,c>2)return this._emitError(new Error("Invalid subscribe QoS, must be <= 2"));if(h=(u>>n.SUBSCRIBE_OPTIONS_NL_SHIFT&n.SUBSCRIBE_OPTIONS_NL_MASK)!==0,d=(u>>n.SUBSCRIBE_OPTIONS_RAP_SHIFT&n.SUBSCRIBE_OPTIONS_RAP_MASK)!==0,f=u>>n.SUBSCRIBE_OPTIONS_RH_SHIFT&n.SUBSCRIBE_OPTIONS_RH_MASK,f>2)return this._emitError(new Error("Invalid retain handling, must be <= 2"));p={topic:l,qos:c},this.settings.protocolVersion===5?(p.nl=h,p.rap=d,p.rh=f):this.settings.bridgeMode&&(p.rh=0,p.rap=!0,p.nl=!0),i("_parseSubscribe: push subscription `%s` to subscription",p),s.subscriptions.push(p)}}}_parseSuback(){i("_parseSuback");const s=this.packet;if(this.packet.granted=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){const l=this._parseProperties();Object.getOwnPropertyNames(l).length&&(s.properties=l)}if(s.length<=0)return this._emitError(new Error("Malformed suback, no payload specified"));for(;this._pos2&&l!==128)return this._emitError(new Error("Invalid suback QoS, must be 0, 1, 2 or 128"));this.packet.granted.push(l)}}}_parseUnsubscribe(){i("_parseUnsubscribe");const s=this.packet;if(s.unsubscriptions=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){const l=this._parseProperties();Object.getOwnPropertyNames(l).length&&(s.properties=l)}if(s.length<=0)return this._emitError(new Error("Malformed unsubscribe, no payload specified"));for(;this._pos2){switch(s.reasonCode=this._parseByte(),this.packet.cmd){case"puback":case"pubrec":if(!n.MQTT5_PUBACK_PUBREC_CODES[s.reasonCode])return this._emitError(new Error("Invalid "+this.packet.cmd+" reason code"));break;case"pubrel":case"pubcomp":if(!n.MQTT5_PUBREL_PUBCOMP_CODES[s.reasonCode])return this._emitError(new Error("Invalid "+this.packet.cmd+" reason code"));break}i("_parseConfirmation: packet.reasonCode `%d`",s.reasonCode)}else s.reasonCode=0;if(s.length>3){const l=this._parseProperties();Object.getOwnPropertyNames(l).length&&(s.properties=l)}}return!0}_parseDisconnect(){const s=this.packet;if(i("_parseDisconnect"),this.settings.protocolVersion===5){this._list.length>0?(s.reasonCode=this._parseByte(),n.MQTT5_DISCONNECT_CODES[s.reasonCode]||this._emitError(new Error("Invalid disconnect reason code"))):s.reasonCode=0;const l=this._parseProperties();Object.getOwnPropertyNames(l).length&&(s.properties=l)}return i("_parseDisconnect result: true"),!0}_parseAuth(){i("_parseAuth");const s=this.packet;if(this.settings.protocolVersion!==5)return this._emitError(new Error("Not supported auth packet for this version MQTT"));if(s.reasonCode=this._parseByte(),!n.MQTT5_AUTH_CODES[s.reasonCode])return this._emitError(new Error("Invalid auth reason code"));const l=this._parseProperties();return Object.getOwnPropertyNames(l).length&&(s.properties=l),i("_parseAuth: result: true"),!0}_parseMessageId(){const s=this.packet;return s.messageId=this._parseNum(),s.messageId===null?(this._emitError(new Error("Cannot parse messageId")),!1):(i("_parseMessageId: packet.messageId %d",s.messageId),!0)}_parseString(s){const l=this._parseNum(),u=l+this._pos;if(l===-1||u>this._list.length||u>this.packet.length)return null;const c=this._list.toString("utf8",this._pos,u);return this._pos+=l,i("_parseString: result: %s",c),c}_parseStringPair(){return i("_parseStringPair"),{name:this._parseString(),value:this._parseString()}}_parseBuffer(){const s=this._parseNum(),l=s+this._pos;if(s===-1||l>this._list.length||l>this.packet.length)return null;const u=this._list.slice(this._pos,l);return this._pos+=s,i("_parseBuffer: result: %o",u),u}_parseNum(){if(this._list.length-this._pos<2)return-1;const s=this._list.readUInt16BE(this._pos);return this._pos+=2,i("_parseNum: result: %s",s),s}_parse4ByteNum(){if(this._list.length-this._pos<4)return-1;const s=this._list.readUInt32BE(this._pos);return this._pos+=4,i("_parse4ByteNum: result: %s",s),s}_parseVarByteNum(s){i("_parseVarByteNum");const l=4;let u=0,c=1,f=0,d=!1,h;const p=this._pos?this._pos:0;for(;u=u&&this._emitError(new Error("Invalid variable byte integer")),p&&(this._pos+=u),d?s?d={bytes:u,value:f}:d=f:d=!1,i("_parseVarByteNum: result: %o",d),d}_parseByte(){let s;return this._pos>8,0),u.writeUInt8(l&255,1),u}function o(){for(let l=0;l0&&(c=c|128),d.writeUInt8(c,f++);while(l>0&&f<4);return l>0&&(f=0),n?d.subarray(0,f):d.slice(0,f)}function s(l){const u=e.allocUnsafe(4);return u.writeUInt32BE(l,0),u}return ud={cache:r,generateCache:o,generateNumber:i,genBufVariableByteInt:a,generate4ByteBuffer:s},ud}var cd={exports:{}},F0;function GN(){if(F0)return cd.exports;F0=1,cd.exports={nextTick:e};function e(t,r,n,i){if(typeof t!="function")throw new TypeError('"callback" argument must be a function');var o=arguments.length,a,s;switch(o){case 0:case 1:return po.nextTick(t);case 2:return po.nextTick(function(){t.call(null,r)});case 3:return po.nextTick(function(){t.call(null,r,n)});case 4:return po.nextTick(function(){t.call(null,r,n,i)});default:for(a=new Array(o-1),s=0;s=4)&&(F||k))de+=t.byteLength(F)+2;else{if(re<4)return ee.destroy(new Error("clientId must be supplied before 3.1.1")),!1;if(k*1===0)return ee.destroy(new Error("clientId must be given if cleanSession set to 0")),!1}if(typeof L!="number"||L<0||L>65535||L%1!==0)return ee.destroy(new Error("Invalid keepalive")),!1;de+=2,de+=1;let J,fe;if(re===5){if(J=ae(ee,Q),!J)return!1;de+=J.length}if(ne){if(typeof ne!="object")return ee.destroy(new Error("Invalid will")),!1;if(!ne.topic||typeof ne.topic!="string")return ee.destroy(new Error("Invalid will topic")),!1;if(de+=t.byteLength(ne.topic)+2,de+=2,ne.payload)if(ne.payload.length>=0)typeof ne.payload=="string"?de+=t.byteLength(ne.payload):de+=ne.payload.length;else return ee.destroy(new Error("Invalid will payload")),!1;if(fe={},re===5){if(fe=ae(ee,ne.properties),!fe)return!1;de+=fe.length}}let te=!1;if(D!=null)if(ge(D))te=!0,de+=t.byteLength(D)+2;else return ee.destroy(new Error("Invalid username")),!1;if(H!=null){if(!te)return ee.destroy(new Error("Username is required to use password")),!1;if(ge(H))de+=ue(H)+2;else return ee.destroy(new Error("Invalid password")),!1}ee.write(e.CONNECT_HEADER),M(ee,de),B(ee,Y),V.bridgeMode&&(re+=128),ee.write(re===131?e.VERSION131:re===132?e.VERSION132:re===4?e.VERSION4:re===5?e.VERSION5:e.VERSION3);let me=0;return me|=D!=null?e.USERNAME_MASK:0,me|=H!=null?e.PASSWORD_MASK:0,me|=ne&&ne.retain?e.WILL_RETAIN_MASK:0,me|=ne&&ne.qos?ne.qos<0&&d(ee,F),Q?.write(),a("publish: payload: %o",L),ee.write(L)}function b(K,ee,X){const V=X?X.protocolVersion:4,Y=K||{},re=Y.cmd||"puback",ne=Y.messageId,k=Y.dup&&re==="pubrel"?e.DUP_MASK:0;let L=0;const F=Y.reasonCode,D=Y.properties;let H=V===5?3:2;if(re==="pubrel"&&(L=1),typeof ne!="number")return ee.destroy(new Error("Invalid messageId")),!1;let Q=null;if(V===5&&typeof D=="object"){if(Q=$(ee,D,X,H),!Q)return!1;H+=Q.length}return ee.write(e.ACKS[re][L][k][0]),H===3&&(H+=F!==0?1:-1),M(ee,H),d(ee,ne),V===5&&H!==2&&ee.write(t.from([F])),Q!==null?Q.write():H===4&&ee.write(t.from([0])),!0}function _(K,ee,X){a("subscribe: packet: ");const V=X?X.protocolVersion:4,Y=K||{},re=Y.dup?e.DUP_MASK:0,ne=Y.messageId,k=Y.subscriptions,L=Y.properties;let F=0;if(typeof ne!="number")return ee.destroy(new Error("Invalid messageId")),!1;F+=2;let D=null;if(V===5){if(D=ae(ee,L),!D)return!1;F+=D.length}if(typeof k=="object"&&k.length)for(let Q=0;Q2)return ee.destroy(new Error("Invalid subscriptions - invalid Retain Handling")),!1}F+=t.byteLength(de)+2+1}else return ee.destroy(new Error("Invalid subscriptions")),!1;a("subscribe: writing to stream: %o",e.SUBSCRIBE_HEADER),ee.write(e.SUBSCRIBE_HEADER[1][re?1:0][0]),M(ee,F),d(ee,ne),D!==null&&D.write();let H=!0;for(const Q of k){const de=Q.topic,J=Q.qos,fe=+Q.nl,te=+Q.rap,me=Q.rh;let Ee;R(ee,de),Ee=e.SUBSCRIBE_OPTIONS_QOS[J],V===5&&(Ee|=fe?e.SUBSCRIBE_OPTIONS_NL:0,Ee|=te?e.SUBSCRIBE_OPTIONS_RAP:0,Ee|=me?e.SUBSCRIBE_OPTIONS_RH[me]:0),H=ee.write(t.from([Ee]))}return H}function w(K,ee,X){const V=X?X.protocolVersion:4,Y=K||{},re=Y.messageId,ne=Y.granted,k=Y.properties;let L=0;if(typeof re!="number")return ee.destroy(new Error("Invalid messageId")),!1;if(L+=2,typeof ne=="object"&&ne.length)for(let D=0;De.VARBYTEINT_MAX)return K.destroy(new Error(`Invalid variable byte integer: ${ee}`)),!1;let X=N[ee];return X||(X=c(ee),ee<16384&&(N[ee]=X)),a("writeVarByteInt: writing to stream: %o",X),K.write(X)}function R(K,ee){const X=t.byteLength(ee);return d(K,X),a("writeString: %s",ee),K.write(ee,"utf8")}function O(K,ee,X){R(K,ee),R(K,X)}function G(K,ee){return a("writeNumberCached: number: %d",ee),a("writeNumberCached: %o",s[ee]),K.write(s[ee])}function q(K,ee){const X=l(ee);return a("writeNumberGenerated: %o",X),K.write(X)}function z(K,ee){const X=f(ee);return a("write4ByteNumber: %o",X),K.write(X)}function B(K,ee){typeof ee=="string"?R(K,ee):ee?(d(K,ee.length),K.write(ee)):d(K,0)}function ae(K,ee){if(typeof ee!="object"||ee.length!=null)return{length:1,write(){Z(K,{},0)}};let X=0;function V(re,ne){const k=e.propertiesTypes[re];let L=0;switch(k){case"byte":{if(typeof ne!="boolean")return K.destroy(new Error(`Invalid ${re}: ${ne}`)),!1;L+=2;break}case"int8":{if(typeof ne!="number"||ne<0||ne>255)return K.destroy(new Error(`Invalid ${re}: ${ne}`)),!1;L+=2;break}case"binary":{if(ne&&ne===null)return K.destroy(new Error(`Invalid ${re}: ${ne}`)),!1;L+=1+t.byteLength(ne)+2;break}case"int16":{if(typeof ne!="number"||ne<0||ne>65535)return K.destroy(new Error(`Invalid ${re}: ${ne}`)),!1;L+=3;break}case"int32":{if(typeof ne!="number"||ne<0||ne>4294967295)return K.destroy(new Error(`Invalid ${re}: ${ne}`)),!1;L+=5;break}case"var":{if(typeof ne!="number"||ne<0||ne>268435455)return K.destroy(new Error(`Invalid ${re}: ${ne}`)),!1;L+=1+t.byteLength(c(ne));break}case"string":{if(typeof ne!="string")return K.destroy(new Error(`Invalid ${re}: ${ne}`)),!1;L+=3+t.byteLength(ne.toString());break}case"pair":{if(typeof ne!="object")return K.destroy(new Error(`Invalid ${re}: ${ne}`)),!1;L+=Object.getOwnPropertyNames(ne).reduce((F,D)=>{const H=ne[D];return Array.isArray(H)?F+=H.reduce((Q,de)=>(Q+=3+t.byteLength(D.toString())+2+t.byteLength(de.toString()),Q),0):F+=3+t.byteLength(D.toString())+2+t.byteLength(ne[D].toString()),F},0);break}default:return K.destroy(new Error(`Invalid property ${re}: ${ne}`)),!1}return L}if(ee)for(const re in ee){let ne=0,k=0;const L=ee[re];if(L!==void 0){if(Array.isArray(L))for(let F=0;Fre;){const k=Y.shift();if(k&&ee[k])delete ee[k],ne=ae(K,ee);else return!1}return ne}function ie(K,ee,X){switch(e.propertiesTypes[ee]){case"byte":{K.write(t.from([e.properties[ee]])),K.write(t.from([+X]));break}case"int8":{K.write(t.from([e.properties[ee]])),K.write(t.from([X]));break}case"binary":{K.write(t.from([e.properties[ee]])),B(K,X);break}case"int16":{K.write(t.from([e.properties[ee]])),d(K,X);break}case"int32":{K.write(t.from([e.properties[ee]])),z(K,X);break}case"var":{K.write(t.from([e.properties[ee]])),M(K,X);break}case"string":{K.write(t.from([e.properties[ee]])),R(K,X);break}case"pair":{Object.getOwnPropertyNames(X).forEach(Y=>{const re=X[Y];Array.isArray(re)?re.forEach(ne=>{K.write(t.from([e.properties[ee]])),O(K,Y.toString(),ne.toString())}):(K.write(t.from([e.properties[ee]])),O(K,Y.toString(),re.toString()))});break}default:return K.destroy(new Error(`Invalid property ${ee} value: ${X}`)),!1}}function Z(K,ee,X){M(K,X);for(const V in ee)if(Object.prototype.hasOwnProperty.call(ee,V)&&ee[V]!=null){const Y=ee[V];if(Array.isArray(Y))for(let re=0;re{console.info("MQTT connection successful")}),un.on("disconnect",()=>{console.info("MQTT disconnected")}),un.on("error",e=>{console.error("MQTT connection failed: ",e)})}catch(e){console.error("MQTT connect error: ",e)}function e$(e){un?un.on("message",e):console.error("MqttRegister: MQTT client not available")}function Io(e){lc.topic=e;const{topic:t,qos:r}=lc;un.subscribe(t,{qos:r},n=>{if(n){console.error("MQTT Subscription error: "+n);return}})}function Ss(e){lc.topic=e;const{topic:t}=lc;un.unsubscribe(t,r=>{if(r){console.error("MQTT Unsubscribe from "+e+" failed: "+r);return}})}async function uc(e,t){let n=un.connected,i=0;for(;!n&&i<20;)console.warn("MQTT publish: Not connected. Waiting 0.1 seconds"),await t$(100),n=un.connected,i+=1;if(i<20)try{un.publish(e,t,{qos:0},o=>{o&&console.warn("MQTT publish error: ",o),console.info("MQTT publish: Message sent: ["+e+"]("+t+")")})}catch(o){console.warn("MQTT publish: caught error: "+o)}else console.error("MQTT publish: Lost connection to MQTT server. Please reload the page")}function Hm(){return BE.clientId}function t$(e){return new Promise(t=>setTimeout(t,e))}class r${id;name="Ladepunkt";icon="Ladepunkt";type=yt.chargepoint;ev=0;template=0;connectedPhases=0;phase_1=0;autoPhaseSwitchHw=!1;controlPilotInterruptionHw=!1;isEnabled=!0;isPluggedIn=!1;isCharging=!1;_isLocked=!1;_connectedVehicle=0;chargeTemplate=null;evTemplate=0;_chargeMode=$r.pv_charging;_hasPriority=!1;currentPlan="";averageConsumption=0;_vehicleName="";rangeCharged=0;rangeUnit="";counter=0;dailyYield=0;now={energy:0,energyPv:0,energyBat:0,pvPercentage:0};past={energy:0,energyPv:0,energyBat:0,pvPercentage:0};energyPv=0;energyBat=0;pvPercentage=0;faultState=0;faultStr="";phasesInUse=0;power=0;chargedSincePlugged=0;stateStr="";current=0;currents=[0,0,0];phasesToUse=0;isSocConfigured=!0;isSocManual=!1;waitingForSoc=!1;color="white";showInGraph=!0;_timedCharging=!1;_instantChargeLimitMode="";_instantTargetCurrent=0;_instantTargetSoc=0;_instantMaxEnergy=0;_instantTargetPhases=0;_pvMinCurrent=0;_pvMaxSoc=0;_pvMinSoc=0;_pvMinSocCurrent=0;_pvMinSocPhases=1;_pvChargeLimitMode="";_pvTargetSoc=0;_pvMaxEnergy=0;_pvTargetPhases=0;_ecoMinCurrent=0;_ecoTargetPhases=0;_ecoChargeLimitMode="";_ecoTargetSoc=0;_ecoMaxEnergy=0;_etActive=!1;_etMaxPrice=20;constructor(t){this.id=t}get vehicleName(){return rt[this.connectedVehicle]?.name??""}set vehicleName(t){this._vehicleName=t}get isLocked(){return this._isLocked}set isLocked(t){this._isLocked=t,Mr("cpLock",t,this.id)}updateIsLocked(t){this._isLocked=t}get connectedVehicle(){return this._connectedVehicle}set connectedVehicle(t){this._connectedVehicle=t,Mr("cpVehicle",t,this.id)}updateConnectedVehicle(t){this._connectedVehicle=t}get soc(){return rt[this.connectedVehicle]?rt[this.connectedVehicle].soc:0}set soc(t){rt[this.connectedVehicle]&&(rt[this.connectedVehicle].soc=t)}get chargeMode(){return this.chargeTemplate?.chargemode.selected??$r.stop}set chargeMode(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.selected=t,St(this.id))}get hasPriority(){return this.chargeTemplate?.prio??!1}set hasPriority(t){this.chargeTemplate&&(this.chargeTemplate.prio=t,St(this.id))}get timedCharging(){return this.chargeTemplate?this.chargeTemplate.time_charging.active:!1}set timedCharging(t){this.chargeTemplate.time_charging.active=t,St(this.id)}get instantTargetCurrent(){return this.chargeTemplate?.chargemode.instant_charging.current??0}set instantTargetCurrent(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.instant_charging.current=t,St(this.id))}get instantChargeLimitMode(){return this.chargeTemplate?.chargemode.instant_charging.limit.selected??"none"}set instantChargeLimitMode(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.instant_charging.limit.selected=t,St(this.id))}get instantTargetSoc(){return this.chargeTemplate?.chargemode.instant_charging.limit.soc??0}set instantTargetSoc(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.instant_charging.limit.soc=t,St(this.id))}get instantMaxEnergy(){return this.chargeTemplate?.chargemode.instant_charging.limit.amount??0}set instantMaxEnergy(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.instant_charging.limit.amount=t,St(this.id))}get instantTargetPhases(){return this.chargeTemplate?.chargemode.instant_charging.phases_to_use??0}set instantTargetPhases(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.instant_charging.phases_to_use=t,St(this.id))}get pvMinCurrent(){return this.chargeTemplate?.chargemode.pv_charging.min_current??0}set pvMinCurrent(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.min_current=t,St(this.id))}get pvMaxSoc(){return this._pvMaxSoc}set pvMaxSoc(t){this._pvMaxSoc=t,Mr("cpPvMaxSoc",t,this.id)}updatePvMaxSoc(t){this._pvMaxSoc=t}get pvMinSoc(){return this.chargeTemplate?.chargemode.pv_charging.min_soc??0}set pvMinSoc(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.min_soc=t,St(this.id))}get pvMinSocCurrent(){return this.chargeTemplate?.chargemode.pv_charging.min_soc_current??0}set pvMinSocCurrent(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.min_soc_current=t,St(this.id))}set pvMinSocPhases(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.phases_to_use_min_soc=t,St(this.id))}get pvMinSocPhases(){return this.chargeTemplate?.chargemode.pv_charging.phases_to_use_min_soc??0}get pvChargeLimitMode(){return this.chargeTemplate?.chargemode.pv_charging.limit.selected??"none"}set pvChargeLimitMode(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.limit.selected=t,St(this.id))}get pvTargetSoc(){return this.chargeTemplate?.chargemode.pv_charging.limit.soc??0}set pvTargetSoc(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.limit.soc=t,St(this.id))}get pvMaxEnergy(){return this.chargeTemplate?.chargemode.pv_charging.limit.amount??0}set pvMaxEnergy(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.limit.amount=t,St(this.id))}get pvTargetPhases(){return this.chargeTemplate?.chargemode.pv_charging.phases_to_use??0}set pvTargetPhases(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.phases_to_use=t,St(this.id))}get ecoMinCurrent(){return this.chargeTemplate?.chargemode.eco_charging.current??0}set ecoMinCurrent(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.eco_charging.current=t,St(this.id))}get ecoTargetPhases(){return this.chargeTemplate?.chargemode.eco_charging.phases_to_use??0}set ecoTargetPhases(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.eco_charging.phases_to_use=t,St(this.id))}get ecoChargeLimitMode(){return this.chargeTemplate?.chargemode.eco_charging.limit.selected??"none"}set ecoChargeLimitMode(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.eco_charging.limit.selected=t,St(this.id))}get ecoTargetSoc(){return this.chargeTemplate?.chargemode.eco_charging.limit.soc??0}set ecoTargetSoc(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.eco_charging.limit.soc=t,St(this.id))}get ecoMaxEnergy(){return this.chargeTemplate?.chargemode.eco_charging.limit.amount??0}set ecoMaxEnergy(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.eco_charging.limit.amount=t,St(this.id))}get etMaxPrice(){return(this.chargeTemplate?.chargemode.eco_charging.max_price??0)*1e5}set etMaxPrice(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.eco_charging.max_price=Math.ceil(t*1e3)/1e8,St(this.id))}get etActive(){return this.chargeTemplate&&this.chargeTemplate.chargemode.selected==$r.eco_charging}get realCurrent(){switch(this.phasesInUse){case 0:return 0;case 1:return this.currents[0];case 2:return(this.currents[0]+this.currents[1])/2;case 3:return(this.currents[0]+this.currents[1]+this.currents[2])/3;default:return 0}}}class n${id;name="__invalid";tags=[];config={};soc=0;range=0;constructor(t){this.id=t}_chargeTemplateId=0;isSocConfigured=!1;isSocManual=!1;get chargeTemplateId(){return this._chargeTemplateId}set chargeTemplateId(t){this._chargeTemplateId=t,Mr("vhChargeTemplateId",t,this.id)}updateChargeTemplateId(t){this._chargeTemplateId=t}_evTemplateId=0;get evTemplateId(){return this._evTemplateId}set evTemplateId(t){this._evTemplateId=t,Mr("vhEvTemplateId",t,this.id)}updateEvTemplateId(t){this._evTemplateId=t}get chargepoint(){for(const t of Object.values(Ye))if(t.connectedVehicle==this.id)return t}get visible(){return this.name!="__invalid"&&(this.id!=0||Ce.showStandardVehicle)}}const Ye=Dt({}),rt=Dt({}),qa=Dt({}),UE=Dt({});function i$(e){if(!(e in Ye)){Ye[e]=new r$(e);const t=zE("cp",Object.values(Ye).length-1);Ye[e].color=t}}function o$(){Object.keys(Ye).forEach(e=>{delete Ye[parseInt(e)]})}const At=_e(()=>{let e=[];const t=Object.values(Ye).filter(n=>rt[n.connectedVehicle]&&rt[n.connectedVehicle].isSocConfigured).map(n=>n.connectedVehicle),r=Object.values(rt).filter(n=>n.visible&&n.isSocConfigured&&!t.includes(n.id));return e=t.concat(r.map(n=>n.id)).slice(0,2),e.length==0?e=[-1,-1]:e.length==1&&e.push(-1),e}),qm=[{name:"keine",id:"none"},{name:"Ladestand",id:"soc"},{name:"Energie",id:"amount"}],jE={cpLock:"openWB/set/chargepoint/%/set/manual_lock",chargeMode:"openWB/set/vehicle/template/charge_template/%/chargemode/selected",cpPriority:"openWB/set/vehicle/template/charge_template/%/prio",pvBatteryPriority:"openWB/set/general/chargemode_config/pv_charging/bat_mode",cpVehicle:"openWB/set/chargepoint/%/config/ev",cpInstantChargeLimitMode:"openWB/set/vehicle/template/charge_template/%/chargemode/instant_charging/limit/selected",cpInstantTargetCurrent:"openWB/set/vehicle/template/charge_template/%/chargemode/instant_charging/current",cpInstantTargetSoc:"openWB/set/vehicle/template/charge_template/%/chargemode/instant_charging/limit/soc",cpInstantMaxEnergy:"openWB/set/vehicle/template/charge_template/%/chargemode/instant_charging/limit/amount",cpPvFeedInLimit:"openWB/set/vehicle/template/charge_template/%/chargemode/pv_charging/feed_in_limit",cpPvMinCurrent:"openWB/set/vehicle/template/charge_template/%/chargemode/pv_charging/min_current",cpPvMaxSoc:"openWB/set/vehicle/template/charge_template/%/chargemode/pv_charging/max_soc",cpPvMinSoc:"openWB/set/vehicle/template/charge_template/%/chargemode/pv_charging/min_soc",cpPvMinSocCurrent:"openWB/set/vehicle/template/charge_template/%/chargemode/pv_charging/min_soc_current",cpEtMaxPrice:"openWB/set/vehicle/template/charge_template/%/et/max_price",vhChargeTemplateId:"openWB/set/vehicle/%/charge_template",vhEvTemplateId:"openWB/set/vehicle/%/ev_template",shSetManual:"openWB/set/LegacySmartHome/config/set/Devices/%/mode",shSwitchOn:"openWB/set/LegacySmartHome/config/set/Devices/%/device_manual_control",socUpdate:"openWB/set/vehicle/%/get/force_soc_update",setSoc:"openWB/set/vehicle/%/soc_module/calculated_soc_state/manual_soc",priceCharging:"openWB/set/vehicle/template/charge_template/%/et/active",chargeTemplate:"openWB/set/chargepoint/%/set/charge_template"};function Mr(e,t,r=0){if(isNaN(r)){console.warn("Invalid index");return}let n=jE[e];if(!n){console.warn("No topic for update type "+e);return}n=n.replace("%",String(r)),typeof t==="number"?uc(n,JSON.stringify(+t)):uc(n,JSON.stringify(t))}function No(e){uc("openWB/set/command/"+Hm()+"/todo",JSON.stringify(e))}function St(e){uc(jE.chargeTemplate.replace("%",String(e)),JSON.stringify(Ye[e].chargeTemplate))}class s${id;name="Zähler";power=0;now={energy:0,energyPv:0,energyBat:0,pvPercentage:0};past={energy:0,energyPv:0,energyBat:0,pvPercentage:0};energy_imported=0;energy_exported=0;grid=!1;counterType="counter";type=yt.counter;color="var(--color-ctr7)";icon="Zähler";_showInGraph=!1;constructor(t){this.id=t}get showInGraph(){return this._showInGraph}set showInGraph(t){this._showInGraph=t,Qt()}}const ct=Dt(new Map);function a$(e,t,r=!1){if(ct.has(e))console.info("Duplicate counter message: "+e);else switch(ct.set(e,new s$(e)),ct.get(e).counterType=t,ct.get(e).grid=r,t){case"counter":ct.get(e).color=r?"var(--color-evu)":"var(--color-ctr"+(ct.size-1)+")";break;case"inverter":ct.get(e).color="var(--color-pv)";break;case"cp":ct.get(e).color="var(--color-charging)";break;case"bat":ct.get(e).color="var(--color-bat)";break}}function l$(e){switch(e){case"power":Pe.setPower("counters",[...ct.values()].filter(t=>t.showInGraph).reduce((t,r)=>t+r.power,0));break;case"energy":Pe.setEnergy("counters",[...ct.values()].filter(t=>!t.showInGraph).reduce((t,r)=>t+r.now.energy,0));break;default:console.error("Unknown category")}}let u$=class{_showRelativeArcs=!1;showTodayGraph=!0;_graphPreference="today";_usageStackOrder=0;_displayMode="dark";_liveGraphDuration=7200;_showGrid=!1;_smartHomeColors="normal";_decimalPlaces=1;_showQuickAccess=!0;_simpleCpList=!1;_shortCpList="no";_showAnimations=!0;_preferWideBoxes=!1;_maxPower=4e3;_fluidDisplay=!1;_showClock="off";_showButtonBar=!0;_showCounters=!1;_showVehicles=!1;_showStandardVehicle=!0;_showPrices=!1;_showInverters=!1;_alternativeEnergy=!1;_debug=!1;_lowerPriceBound=0;_upperPriceBound=0;_showPmLabels=!0;showRightButton=!0;showLeftButton=!0;animationDuration=300;animationDelay=100;zoomGraph=!1;zoomedWidget=1;countersToShow=[];constructor(){}get showRelativeArcs(){return this._showRelativeArcs}setShowRelativeArcs(t){this._showRelativeArcs=t}get graphPreference(){return this._graphPreference}set graphPreference(t){this._graphPreference=t,Qt()}setGraphPreference(t){this._graphPreference=t}get usageStackOrder(){return this._usageStackOrder}set usageStackOrder(t){this._usageStackOrder=t,Qt()}setUsageStackOrder(t){this._usageStackOrder=t}get displayMode(){return this._displayMode}setDisplayMode(t){this._displayMode=t,h$(t)}get liveGraphDuration(){return this._liveGraphDuration}setLiveGraphDuration(t){this._liveGraphDuration=t}get showGrid(){return this._showGrid}setShowGrid(t){this._showGrid=t}get decimalPlaces(){return this._decimalPlaces}setDecimalPlaces(t){this._decimalPlaces=t}get smartHomeColors(){return this._smartHomeColors}setSmartHomeColors(t){this._smartHomeColors=t,g$(t)}get showQuickAccess(){return this._showQuickAccess}set showQuickAccess(t){this._showQuickAccess=t,Qt()}setShowQuickAccess(t){this._showQuickAccess=t}get simpleCpList(){return this._simpleCpList}set simpleCpList(t){this._simpleCpList=t,Qt()}setSimpleCpList(t){this._simpleCpList=t}get shortCpList(){return this._shortCpList}set shortCpList(t){this._shortCpList=t,Qt()}setShortCpList(t){this._shortCpList=t}get showAnimations(){return this._showAnimations}set showAnimations(t){this._showAnimations=t,Qt()}setShowAnimations(t){this._showAnimations=t}get preferWideBoxes(){return this._preferWideBoxes}set preferWideBoxes(t){this._preferWideBoxes=t,Qt()}setPreferWideBoxes(t){this._preferWideBoxes=t}get maxPower(){return this._maxPower}set maxPower(t){this._maxPower=t,Qt()}setMaxPower(t){this._maxPower=t}get fluidDisplay(){return this._fluidDisplay}set fluidDisplay(t){this._fluidDisplay=t,Qt()}setFluidDisplay(t){this._fluidDisplay=t}get showClock(){return this._showClock}set showClock(t){this._showClock=t,Qt()}setShowClock(t){this._showClock=t}get debug(){return this._debug}set debug(t){this._debug=t,Qt()}setDebug(t){this._debug=t}get showButtonBar(){return this._showButtonBar}set showButtonBar(t){this._showButtonBar=t,Qt()}setShowButtonBar(t){this._showButtonBar=t}get showCounters(){return this._showCounters}setShowCounters(t){this._showCounters=t}get showVehicles(){return this._showVehicles}setShowVehicles(t){this._showVehicles=t}get showStandardVehicle(){return this._showStandardVehicle}setShowStandardVehicle(t){this._showStandardVehicle=t}get showPrices(){return this._showPrices}setShowPrices(t){this._showPrices=t}get showInverters(){return this._showInverters}setShowInverters(t){this._showInverters=t}get alternativeEnergy(){return this._alternativeEnergy}setAlternativeEnergy(t){this._alternativeEnergy=t}get lowerPriceBound(){return this._lowerPriceBound}setLowerPriceBound(t){this._lowerPriceBound=t}get upperPriceBound(){return this._upperPriceBound}setUpperPriceBound(t){this._upperPriceBound=t}get showPmLabels(){return this._showPmLabels}set showPmLabels(t){this._showPmLabels=t,Qt()}setShowPmLabels(t){this._showPmLabels=t}};const Ce=Dt(new u$);function VE(){y$();const e=dt("html");e.classed("theme-dark",Ce.displayMode=="dark"),e.classed("theme-light",Ce.displayMode=="light"),e.classed("theme-blue",Ce.displayMode=="blue"),e.classed("shcolors-standard",Ce.smartHomeColors=="standard"),e.classed("shcolors-advanced",Ce.smartHomeColors=="advanced"),e.classed("shcolors-normal",Ce.smartHomeColors=="normal")}const c$=992,cc=Dt({x:document.documentElement.clientWidth,y:document.documentElement.clientHeight});function f$(){cc.x=document.documentElement.clientWidth,cc.y=document.documentElement.clientHeight,VE()}const Ln=_e(()=>cc.x>=c$),zt={instant_charging:{mode:$r.instant_charging,name:"Sofort",color:"var(--color-charging)",icon:"fa-bolt"},pv_charging:{mode:$r.pv_charging,name:"PV",color:"var(--color-pv)",icon:"fa-solar-panel"},scheduled_charging:{mode:$r.scheduled_charging,name:"Zielladen",color:"var(--color-battery)",icon:"fa-bullseye"},eco_charging:{mode:$r.eco_charging,name:"Eco",color:"var(--color-eco)",icon:"fa-coins"},stop:{mode:$r.stop,name:"Stop",color:"var(--color-fg)",icon:"fa-power-off"}};class d${batterySoc=0;isBatteryConfigured=!0;chargeMode="0";_pvBatteryPriority="ev_mode";displayLiveGraph=!0;isEtEnabled=!0;etMaxPrice=0;etCurrentPrice=0;cpDailyExported=0;evuId=0;etProvider="";country="de";get pvBatteryPriority(){return this._pvBatteryPriority}set pvBatteryPriority(t){this._pvBatteryPriority=t,Mr("pvBatteryPriority",t)}updatePvBatteryPriority(t){this._pvBatteryPriority=t}}function Qt(){m$()}function h$(e){const t=dt("html");t.classed("theme-dark",e=="dark"),t.classed("theme-light",e=="light"),t.classed("theme-blue",e=="blue"),Qt()}function p$(){Ce.maxPower=Pe.getPower("evuIn")+Pe.getPower("pv")+Pe.getPower("batOut"),Qt()}function g$(e){const t=dt("html");t.classed("shcolors-normal",e=="normal"),t.classed("shcolors-standard",e=="standard"),t.classed("shcolors-advanced",e=="advanced")}const xn={chargemode:"Der Lademodus für das Fahrzeug an diesem Ladepunkt",vehicle:"Das Fahrzeug, das an diesem Ladepounkt geladen wird",locked:"Für das Laden sperren",priority:"Fahrzeuge mit Priorität werden bevorzugt mit mehr Leistung geladen, falls verfügbar",timeplan:"Das Laden nach Zeitplan für dieses Fahrzeug aktivieren",minsoc:"Immer mindestens bis zum eingestellten Ladestand laden. Wenn notwendig mit Netzstrom.",minpv:"Durchgehend mit mindestens dem eingestellten Strom laden. Wenn notwendig mit Netzstrom.",pricebased:"Laden bei dynamischem Stromtarif, wenn eingestellter Maximalpreis unterboten wird.",pvpriority:"Ladepriorität bei PV-Produktion. Bevorzung von Fahzeugen, Speicher, oder Fahrzeugen bis zum eingestellten Mindest-Ladestand. Die Einstellung ist für alle Ladepunkte gleich.",chargeTemplate:"Ladeprofil für dieses Fahrzeug.",ecoMinCurrent:"Minimaler Ladestrom beim Preisladen. Bei PV-Überschuss kann der Strom höher sein."};function m$(){const e={};e.hideSH=[...Ct.values()].filter(t=>!t.showInGraph).map(t=>t.id),e.showCtr=[...ct.values()].filter(t=>t.showInGraph).map(t=>t.id.toString()),e.showLG=Ce.graphPreference=="live",e.stackO=Ce.usageStackOrder,e.maxPow=Ce.maxPower,e.showQA=Ce.showQuickAccess,e.simpleCP=Ce.simpleCpList,e.shortCP=Ce.shortCpList,e.animation=Ce.showAnimations,e.wideB=Ce.preferWideBoxes,e.fluidD=Ce.fluidDisplay,e.clock=Ce.showClock,e.showButtonBar=Ce.showButtonBar,e.lowerP=Ce.lowerPriceBound,e.upperP=Ce.upperPriceBound,e.pmLabels=Ce.showPmLabels,e.debug=Ce.debug,document.cookie="openWBColorTheme="+JSON.stringify(e)+";max-age=16000000;"}function y$(){const t=document.cookie.split(";").filter(r=>r.split("=")[0]==="openWBColorTheme");if(t.length>0){const r=JSON.parse(t[0].split("=")[1]);r.hideSH!==void 0&&r.hideSH.forEach(n=>{Ct.get(n)==null&&Im(n),Ct.get(n).setShowInGraph(!1)}),r.showCtr!==void 0&&(Ce.countersToShow=r.showCtr.map(n=>+n)),r.showLG!==void 0&&Ce.setGraphPreference(r.showLG?"live":"today"),r.maxPow!==void 0&&Ce.setMaxPower(+r.maxPow),r.stackO!==void 0&&Ce.setUsageStackOrder(r.stackO),r.showQA!==void 0&&Ce.setShowQuickAccess(r.showQA),r.simpleCP!==void 0&&Ce.setSimpleCpList(r.simpleCP),r.shortCP!==void 0&&Ce.setShortCpList(r.shortCP),r.animation!=null&&Ce.setShowAnimations(r.animation),r.wideB!=null&&Ce.setPreferWideBoxes(r.wideB),r.fluidD!=null&&Ce.setFluidDisplay(r.fluidD),r.clock!=null&&Ce.setShowClock(r.clock),r.showButtonBar!==void 0&&Ce.setShowButtonBar(r.showButtonBar),r.lowerP!==void 0&&Ce.setLowerPriceBound(r.lowerP),r.upperP!==void 0&&Ce.setUpperPriceBound(r.upperP),r.pmLabels!==void 0&&Ce.setShowPmLabels(r.pmLabels),r.debug!==void 0&&Ce.setDebug(r.debug)}}const dr=500,Kr=500,Ze={top:15,right:20,bottom:10,left:25};class v${data=[];_graphMode="";waitForData=!0;get graphMode(){return this._graphMode}set graphMode(t){this._graphMode=t}get usePastData(){return this.graphMode!="live"&&this.graphMode!="today"}get graphScope(){return this.usePastData?"past":"now"}}const Te=Dt(new v$),WE=et(Am),oi=_e(()=>[0,dr-Ze.left-2*Ze.right].map(e=>WE.value.applyX(e)));let fc=!0,Ga=!0;function z0(){fc=!1}function H0(){Ga=!1}function b$(e){Ga=e}function al(e){if(Te.graphMode=="live"&&e.length>0){const t=new Date().getTime()-Ce.liveGraphDuration*1e3;Te.data=e.filter(r=>r.date>t),Te.waitForData=!1}else Te.data=e,Te.waitForData=!1}const Wt=Dt({refreshTopicPrefix:"openWB/graph/alllivevaluesJson",updateTopic:"openWB/graph/lastlivevaluesJson",configTopic:"openWB/graph/config/#",initialized:!1,initCounter:0,graphRefreshCounter:0,rawDataPacks:[],duration:0,activate(e){this.unsubscribeUpdates(),this.subscribeRefresh(),e&&(Te.data=[]),Te.waitForData=!0,Io(this.configTopic),this.initialized=!1,this.initCounter=0,this.graphRefreshCounter=0,this.rawDataPacks=[],w$(),Ps.value=!0},deactivate(){this.unsubscribeRefresh(),this.unsubscribeUpdates(),Ss(this.configTopic)},subscribeRefresh(){for(let e=1;e<17;e++)Io(this.refreshTopicPrefix+e)},unsubscribeRefresh(){for(let e=1;e<17;e++)Ss(this.refreshTopicPrefix+e)},subscribeUpdates(){Io(this.updateTopic)},unsubscribeUpdates(){Ss(this.updateTopic)}}),$t=Dt({topic:"openWB/log/daily/#",date:new Date,activate(e){if(Te.graphMode=="day"||Te.graphMode=="today"){Te.graphMode=="today"&&(this.date=new Date);const t=this.date.getFullYear().toString()+(this.date.getMonth()+1).toString().padStart(2,"0")+this.date.getDate().toString().padStart(2,"0");this.topic="openWB/log/daily/"+t,Io(this.topic),e&&(Te.data=[]),Te.waitForData=!0,No({command:"getDailyLog",data:{date:t}})}},deactivate(){Ss(this.topic)},back(){this.date=new Date(this.date.setTime(this.date.getTime()-864e5))},forward(){this.date=new Date(this.date.setTime(this.date.getTime()+864e5))},setDate(e){this.date=e},getDate(){return this.date}}),Cn=Dt({topic:"openWB/log/monthly/#",month:new Date().getMonth()+1,year:new Date().getFullYear(),activate(e){const t=this.year.toString()+this.month.toString().padStart(2,"0");Te.data=[],Io(this.topic),e&&(Te.data=[]),Te.waitForData=!0,No({command:"getMonthlyLog",data:{date:t}})},deactivate(){Ss(this.topic)},back(){this.month-=1,this.month<1&&(this.month=12,this.year-=1),this.activate()},forward(){const e=new Date;e.getFullYear()==this.year?this.month-112&&(this.month=1,this.year+=1)),this.activate()},getDate(){return new Date(this.year,this.month)}}),ji=Dt({topic:"openWB/log/yearly/#",month:new Date().getMonth()+1,year:new Date().getFullYear(),activate(e){const t=this.year.toString();Io(this.topic),e&&(Te.data=[]),Te.waitForData=!0,No({command:"getYearlyLog",data:{date:t}})},deactivate(){Ss(this.topic)},back(){this.year-=1,this.activate()},forward(){this.year{(t.length==0||t.includes(s))&&(Pe.setEnergy("evuIn",l.energy_imported),Pe.setEnergy("evuOut",l.energy_exported))}),Pe.setEnergy("pv",e.pv.all.energy_exported),e.bat.all&&(Pe.setEnergy("batIn",e.bat.all.energy_imported),Pe.setEnergy("batOut",e.bat.all.energy_exported)),Object.entries(e.cp).forEach(([s,l])=>{s=="all"?hd(l,"charging"):hd(l,s)}),Pe.setEnergy("devices",0);let r=0,n=0;Object.entries(e.sh).forEach(([s,l])=>{Pe.setEnergy(s,l.energy_imported),Pe.calculatePvPercentage(s),Ct.get(s).countAsHouse||(Pe.setEnergy("devices",Pe.getEnergy("devices")+l.energy_imported),r+=Pe.getItem(s)[Te.graphScope].energyPv,n+=Pe.getItem(s)[Te.graphScope].energyBat)}),Pe.setEnergyPv("devices",r),Pe.setEnergyBat("devices",n),Pe.calculatePvPercentage("devices"),Pe.setEnergy("counters",0);let i=0,o=0,a=0;Object.entries(e.counter).forEach(([s,l])=>{!l.grid&&ct.get(+s.slice(7))&&ct.get(+s.slice(7)).showInGraph&&(hd(l,s),i+=l.energy_imported,o+=l.energy_imported_pv,a+=l.energy_imported_bat)}),Pe.setEnergy("counters",i),Pe.setEnergyPv("counters",o),Pe.setEnergyBat("counters",a),Pe.calculatePvPercentage("counters"),Pe.setEnergy("house",0),e.hc&&e.hc.all?(Pe.setEnergy("house",e.hc.all.energy_imported),e.hc.all.energy_imported_pv!=null&&(Pe.setEnergyPv("house",e.hc.all.energy_imported_pv),Pe.setEnergyBat("house",e.hc.all.energy_imported_bat))):Pe.calculateHouseEnergy()}Ps.value=!0}const cn=_e(()=>{const e=pn(Te.data,t=>new Date(t.date));return e[0]&&e[1]?Th().domain(e).range([0,dr-Ze.left-2*Ze.right]):Hi().range([0,0])});function hd(e,t){Pe.setEnergy(t,e.energy_imported),Pe.setEnergyPv(t,e.energy_imported_pv),Pe.setEnergyBat(t,e.energy_imported_bat),Pe.calculatePvPercentage(t)}function w$(){Pe.items.forEach(e=>{e.now.energyPv=0,e.now.energyBat=0,e.now.pvPercentage=0})}const Vi=_e(()=>{const e=pn(Te.data,t=>t.date);return e[1]?Va().domain(Array.from({length:e[1]},(t,r)=>r+1)).paddingInner(.4).range([0,dr-Ze.left-20]):Va().range([0,0])});function Qc(){switch(Te.graphMode){case"live":Te.graphMode="today",Ce.showRightButton=!0,Ht();break;case"today":Te.graphMode="day",$t.deactivate(),$t.back(),$t.activate(),Ht();break;case"day":$t.back(),Ht();break;case"month":Cn.back();break;case"year":ji.back();break}}function Ym(){const e=new Date;switch(Te.graphMode){case"live":break;case"today":Te.graphMode="live",Ce.showRightButton=!1,Ht();break;case"day":$t.forward(),$t.date.getDate()==e.getDate()&&$t.date.getMonth()==e.getMonth()&&$t.date.getFullYear()==e.getFullYear()&&(Te.graphMode="today"),Ht();break;case"month":Cn.forward();break;case"year":ji.forward();break}}function Km(){switch(Te.graphMode){case"live":Qc();break;case"day":case"today":Te.graphMode="month",Ht();break;case"month":Te.graphMode="year",Ht();break}}function Xm(){switch(Te.graphMode){case"year":Te.graphMode="month",Ht();break;case"month":Te.graphMode="today",Ht();break;case"today":case"day":Te.graphMode="live",Ht();break}}function q0(e){if(Te.graphMode=="day"||Te.graphMode=="today"){$t.setDate(e);const t=new Date;$t.date.getDate()==t.getDate()&&$t.date.getMonth()==t.getMonth()&&$t.date.getFullYear()==t.getFullYear()?Te.graphMode="today":Te.graphMode="day",Ht()}}const sn=et(new Map),Xr=Dt({evuIn:{name:"Netz",color:"var(--color-evu)",icon:""},pv:{name:"PV",color:"var(--color-pv",icon:""},batOut:{name:"Bat >",color:"var(--color-battery)",icon:""},evuOut:{name:"Export",color:"var(--color-export)",icon:""},charging:{name:"Laden",color:"var(--color-charging)",icon:""},devices:{name:"Geräte",color:"var(--color-devices)",icon:""},counters:{name:"Zähler",color:"var(--color-counters)",icon:""},batIn:{name:"> Bat",color:"var(--color-battery)",icon:""},house:{name:"Haus",color:"var(--color-house)",icon:""},price:{name:"Strompreis",color:"crimson",icon:""}}),G0=new Map([["pv",["var(--color-pv1)","var(--color-pv2)","var(--color-pv3)","var(--color-pv4)","var(--color-pv5)","var(--color-pv6)","var(--color-pv7)","var(--color-pv8)","var(--color-pv9) "]],["bat",["var(--color-bat1)","var(--color-bat2)","var(--color-bat3)","var(--color-bat4)","var(--color-bat5)","var(--color-bat6)","var(--color-bat7)","var(--color-bat8)","var(--color-bat9) "]],["cp",["var(--color-cp1)","var(--color-cp2)","var(--color-cp3)","var(--color-cp4)","var(--color-cp5)","var(--color-cp6)","var(--color-cp7)","var(--color-cp8) "]],["counter",["var(--color-ctr1)","var(--color-ctr2)","var(--color-ctr3)","var(--color-ctr4)","var(--color-ctr5)","var(--color-ctr6)","var(--color-ctr7)","var(--color-ctr8)","var(--color-ctr9)","var(--color-ctr10) "]],["sh",["var(--color-sh1)","var(--color-sh2)","var(--color-sh3)","var(--color-sh4)","var(--color-sh5)","var(--color-sh6)","var(--color-sh7)","var(--color-sh8)","var(--color-sh9) "]]]);function zE(e,t){if(G0.has(e)){const r=G0.get(e);return r[t%r.length]}return"var(--color-charging)"}class S${_items=new Map;constructor(){this.addItem("evuIn"),this.addItem("pv"),this.addItem("batOut"),this.addItem("evuOut"),this.addItem("charging"),this.addItem("devices"),this.addItem("counters"),this.addItem("batIn"),this.addItem("house")}get items(){return this._items}get usageSummary(){return[this._items.get("evuOut"),this._items.get("charging"),this._items.get("devices"),this._items.get("counters"),this._items.get("batIn"),this._items.get("house")]}get sourceSummary(){return[this._items.get("evuIn"),this._items.get("pv"),this._items.get("batOut")]}keys(){return Array.from(this._items.keys())}values(){return Array.from(this._items.values())}getItem(t){return this._items.get(t)}addItem(t,r,n,i){let o;if(r)o=r;else switch(t){case"evuIn":o=yt.counter;break;case"pv":o=yt.inverter;break;case"batOut":o=yt.battery;break;case"evuOut":o=yt.counter;break;case"charging":o=yt.chargepoint;break;case"devices":o=yt.device;break;case"counters":o=yt.counter;break;case"batIn":o=yt.battery;break;case"house":o=yt.house;break;default:o=yt.counter}this._items.set(t,i?Co(t,o,i):Co(t,o)),n&&(this._items.get(t).name=n.name,this._items.get(t).icon=n.icon,this._items.get(t).color=n.color)}duplicateItem(t,r){let n=Co(t,r.type);n={...r},this._items.set(t,n)}getPower(t){return this._items.get(t).power}setPower(t,r){this.items.has(t)||console.error(`item ${t} not found in item list`),this._items.get(t).power=r}getEnergy(t){return this.items.has(t)||this.addItem(t),Te.usePastData?this._items.get(t).past.energy:this._items.get(t).now.energy}setEnergy(t,r){this.items.has(t)||console.error(`item ${t} not found in item list`),Te.usePastData?this._items.get(t).past.energy=r:this._items.get(t).now.energy=r}setEnergyPv(t,r){this.items.has(t)||this.addItem(t),Te.usePastData?this._items.get(t).past.energyPv=r:this._items.get(t).now.energyPv=r}setEnergyBat(t,r){this.items.has(t)||this.addItem(t),Te.usePastData?this._items.get(t).past.energyBat=r:this._items.get(t).now.energyBat=r}setPvPercentage(t,r){this.items.has(t)||console.error(`item ${t} not found in item list`),Te.usePastData?this._items.get(t).past.pvPercentage=r<=100?r:100:this._items.get(t).now.pvPercentage=r<=100?r:100}calculatePvPercentage(t){this.items.has(t)||console.error(`item ${t} not found in item list`),this._items.get(t)[Te.graphScope].pvPercentage=Math.round((this.items.get(t)[Te.graphScope].energyPv+this.items.get(t)[Te.graphScope].energyBat)/this.items.get(t)[Te.graphScope].energy*100)}calculateHouseEnergy(t=!1){t?this._items.get("house").past.energy=this._items.get("evuIn").past.energy+this._items.get("pv").past.energy+this._items.get("batOut").past.energy-this._items.get("evuOut").past.energy-this._items.get("batIn").past.energy-this._items.get("charging").past.energy-this._items.get("devices").past.energy-this._items.get("counters").past.energy:this._items.get("house").now.energy=this._items.get("evuIn").now.energy+this._items.get("pv").now.energy+this._items.get("batOut").now.energy-this._items.get("evuOut").now.energy-this._items.get("batIn").now.energy-this._items.get("charging").now.energy-this._items.get("devices").now.energy-this._items.get("counters").now.energy}}const Pe=Dt(new S$);function Qm(){Pe.values().forEach(e=>{e.past.energy=0,e.past.energyPv=0,e.past.energyBat=0,e.past.pvPercentage=0})}Co("evuIn",yt.counter),Co("pv",yt.pvSummary),Co("batOut",yt.batterySummary);const wt=Dt(new d$),Ps=et(!1);function Co(e,t,r){return{name:Xr[e]?Xr[e].name:"item",type:t,power:0,now:{energy:0,energyPv:0,energyBat:0,pvPercentage:0},past:{energy:0,energyPv:0,energyBat:0,pvPercentage:0},color:r||(Xr[e]?Xr[e].color:"var(--color-charging)"),icon:Xr[e]?Xr[e].icon:"",showInGraph:!0}}const Eg=et(new Date),Jt=et(new Map),E$=e=>{Jt.value.set(e,new H1(e)),x$()};function x$(){[...Jt.value.values()].sort((t,r)=>t.id-r.id).forEach((t,r)=>{t.color=zE("pv",r)})}class T${id;name="Speicher";type=yt.battery;color="var(--color-battery)";dailyYieldExport=0;dailyYieldImport=0;monthlyYieldExport=0;monthlyYieldImport=0;yearlyYieldExport=0;yearlyYieldImport=0;exported=0;faultState=0;faultStr="";imported=0;power=0;soc=0;now={energy:0,energyPv:0,energyBat:0,pvPercentage:0};past={energy:0,energyPv:0,energyBat:0,pvPercentage:0};showInGraph=!0;icon="Speicher";constructor(t){this.id=t}}const Pt=et(new Map),HE=e=>{Pt.value.set(e,new T$(e))};function A$(){Pt.value=new Map}class I${active=!1;etPriceList=new Map;etProvider="";etMaxPrice=0;country="de";unit="ct";get etCurrentPriceString(){if(this.etPriceList.size>0){const[t]=this.etPriceList.values();return(Math.round(t*10)/10).toFixed(1)+(wt.country==="ch"?" Rp":" ct")}else return"---"}maxPriceForDuration(t,r){if(this.etPriceList.size>0){const n=r?[...this.etPriceList.entries()].filter(o=>o[0]<=r).sort((o,a)=>o[1]-a[1]):[...this.etPriceList.entries()].sort((o,a)=>o[1]-a[1]);let i=0;for(let o=0;o=t)return n[o][1];return-1}else return-1}maxDate(){return this.etPriceList.size>0?Array.from(this.etPriceList.keys()).reduce((t,r)=>t>r?t:r):null}}const mt=Dt(new I$);function Fr(e,t=1){let r;if(e>=1e3&&t<4){switch(t){case 0:r=Math.round(e/1e3);break;case 1:r=Math.round(e/100)/10;break;case 2:r=Math.round(e/10)/100;break;case 3:r=Math.round(e)/1e3;break;default:r=Math.round(e/100)/10;break}return r?.toLocaleString(void 0,{minimumFractionDigits:t})+" kW"}else return Math.round(e).toLocaleString()+" W"}function qi(e,t=1,r=!1){let n;if(e>1e6&&(r=!0,e=e/1e3),e>=1e3&&t<4){switch(t){case 0:n=Math.round(e/1e3);break;case 1:n=Math.round(e/100)/10;break;case 2:n=Math.round(e/10)/100;break;case 3:n=Math.round(e)/1e3;break;default:n=Math.round(e/100)/10;break}return n.toLocaleString(void 0,{minimumFractionDigits:t})+(r?" MWh":" kWh")}else return Math.round(e).toLocaleString()+(r?" kWh":" Wh")}function C$(e){const t=Math.floor(e/3600),r=(e%3600/60).toFixed(0);return t>0?t+"h "+r+" min":r+" min"}function ka(e,t=!1){return t?e.toLocaleTimeString(["de-DE"],{weekday:"short",hour:"2-digit",minute:"2-digit"}):e.toLocaleTimeString(["de-DE"],{hour:"2-digit",minute:"2-digit"})}function M$(e,t){return["Jan","Feb","März","April","Mai","Juni","Juli","Aug","Sep","Okt","Nov","Dez"][e]+" "+t}function k$(e){return e!=999?(Math.round(e*10)/10).toLocaleString(void 0,{minimumFractionDigits:1})+"°":"-"}function P$(e){return`${e.toFixed(2)} ${mt.unit}`}function O$(e){const t=document.documentElement,r=getComputedStyle(t);e=e.slice(4,-1);const n=r.getPropertyValue(e).trim(),i=parseInt(n.slice(1,3),16),o=parseInt(n.slice(3,5),16),a=parseInt(n.slice(5,7),16);return(i*299+o*587+a*114)/1e3>125?"black":"white"}const L$={y:"0",class:"popup-title"},R$={dy:"1em",x:"0",class:"popup-content"},N$=We({__name:"PMPopup",props:{consumer:{}},setup(e){const t=e;function r(n){return n.length>8?n.substring(0,8)+".":n}return(n,i)=>(se(),Se("g",null,[U("rect",{x:"-40",y:"-17",rx:"10",ry:"10",width:"80",height:"40","corner-radius":"20",filter:"url(#f1)",class:"popup",style:ot({fill:t.consumer.color})},null,4),U("text",{dy:"0",x:"0",y:"0",class:"popup-textbox",style:ot({fill:le(O$)(t.consumer.color)})},[U("tspan",L$,$e(r(t.consumer.name)),1),U("tspan",R$,$e(le(Fr)(Math.abs(t.consumer.power))),1)],4)]))}}),Xe=(e,t)=>{const r=e.__vccOpts||e;for(const[n,i]of t)r[n]=i;return r},$$=Xe(N$,[["__scopeId","data-v-a154651e"]]),D$={key:0},B$=["d"],F$=["id","d","fill","stroke"],U$={key:1},j$=["transform"],qE=We({__name:"PMArc",props:{upperArc:{type:Boolean},plotdata:{},radius:{},categoriesToShow:{}},setup(e){const t=e,r=_e(()=>Ce.showRelativeArcs?0:4),n=Math.PI/40,i=_e(()=>t.upperArc?Dv().value(u=>Math.abs(u.power)).startAngle(-Math.PI/2+n).endAngle(Math.PI/2-n).sort(null):Dv().value(u=>u.power).startAngle(Math.PI*1.5-n).endAngle(Math.PI/2+n).sort(null)),o=_e(()=>$v().innerRadius(t.radius*.87).outerRadius(t.radius).cornerRadius(r.value));var a=$v().startAngle(t.upperArc?-Math.PI/2+n:Math.PI*1.5-n).endAngle(t.upperArc?Math.PI/2-n:Math.PI/2+n).innerRadius(t.radius*.87).outerRadius(t.radius).cornerRadius(0);function s(u){return u.data.name=="empty"?u.data.power>0?"var(--color-scale)":"null":"var(--color-bg)"}const l=_e(()=>t.plotdata.reduce((u,c)=>u+Math.abs(c.power),0));return(u,c)=>(se(),Se(Ge,null,[c[0]||(c[0]=U("g",null,[U("defs",null,[U("filter",{id:"f1"},[U("feDropShadow",{dx:"1",dy:"1",rx:"10",ry:"10",stdDeviation:"1","flood-opacity":"0.7","flood-color":"var(--color-axis)"})])])],-1)),le(Ce).showRelativeArcs?(se(),Se("g",D$,[U("path",{d:le(a)(0),fill:"var(--color-bg)",stroke:"var(--color-menu)"},null,8,B$)])):Me("",!0),(se(!0),Se(Ge,null,it(i.value(t.plotdata.filter(f=>f.power!=0)),f=>(se(),Se("g",{id:"test",key:f.data.name},[f.data.name!="empty"?(se(),Se("path",{key:0,id:`segment-${f.data.name}`,class:"segment",d:o.value(f),fill:f.data.color,stroke:s(f)},null,8,F$)):Me("",!0)]))),128)),le(Ce).showPmLabels?(se(),Se("g",U$,[(se(!0),Se(Ge,null,it(i.value(e.plotdata.filter(f=>f.power!=0)),f=>(se(),Se("g",{key:f.data.name,transform:"translate("+o.value.centroid(f)+")"},[e.categoriesToShow.includes(f.data.type)&&Math.abs(f.data.power)/l.value>.06&&f.data.name!="empty"?(se(),De($$,{key:0,consumer:f.data},null,8,["consumer"])):Me("",!0)],8,j$))),128))])):Me("",!0)],64))}}),V$=We({__name:"PMSourceArc",props:{radius:{},cornerRadius:{},circleGapSize:{},emptyPower:{}},setup(e){const t=e,r=[yt.inverter,yt.battery],n=_e(()=>({name:"empty",type:yt.counter,power:t.emptyPower,now:{energy:0,energyPv:0,energyBat:0,pvPercentage:0},past:{energy:0,energyPv:0,energyBat:0,pvPercentage:0},energy:0,energyPv:0,energyBat:0,pvPercentage:0,color:"var(--color-bg)",icon:"",showInGraph:!0})),i=_e(()=>[Pe.getItem("evuIn")].concat(o.value,a.value,n.value)),o=_e(()=>Jt.value.size>1?[...Jt.value.values()].filter(s=>s.power<0).sort((s,l)=>s.power-l.power):Pe.getItem("pv").power>0?[Pe.getItem("pv")]:[]),a=_e(()=>Pt.value.size>1?[...Pt.value.values()].filter(s=>s.power<0).sort((s,l)=>s.power-l.power):[Pe.getItem("batOut")]);return yA(()=>{let s=Pe.getPower("pv")+Pe.getPower("evuIn")+Pe.getPower("batOut");s>Ce.maxPower&&(Ce.maxPower=s)}),(s,l)=>(se(),De(qE,{"upper-arc":!0,plotdata:i.value,radius:t.radius,"categories-to-show":r},null,8,["plotdata","radius"]))}}),W$=We({__name:"PMUsageArc",props:{radius:{},cornerRadius:{},circleGapSize:{},emptyPower:{}},setup(e){const t=e,r=[yt.chargepoint,yt.battery,yt.device,yt.counter],n=_e(()=>({name:"empty",type:yt.counter,power:t.emptyPower,now:{energy:0,energyPv:0,energyBat:0,pvPercentage:0},past:{energy:0,energyPv:0,energyBat:0,pvPercentage:0},color:"var(--color-bg)",icon:"",showInGraph:!0})),i=_e(()=>[Pe.getItem("evuOut")].concat(o.value,a.value,l.value,s.value,u.value,Pe.getItem("house"),n.value)),o=_e(()=>Object.values(Ye).length>1?Object.values(Ye).sort((c,f)=>f.power-c.power):[Pe.getItem("charging")]),a=_e(()=>{let c=0;for(const h of Ct.values())h.configured&&!h.countAsHouse&&!h.showInGraph&&(c+=h.power);const f={name:"Geräte",type:yt.device,power:c,now:{energy:0,energyPv:0,energyBat:0,pvPercentage:0},past:{energy:0,energyPv:0,energyBat:0,pvPercentage:0},color:"var(--color-devices)",icon:"",showInGraph:!0};let d=[...Ct.values()].filter(h=>h.configured);return d.length>1?[f].concat(d.filter(h=>!h.countAsHouse&&h.showInGraph).sort((h,p)=>p.power-h.power)):[Pe.getItem("devices")]}),s=_e(()=>Pt.value.size>1?[...Pt.value.values()].filter(c=>c.power>0).sort((c,f)=>f.power-c.power):Pt.value.size>0?[Pe.getItem("batIn")]:[]),l=_e(()=>ct.size>0?[...ct.values()].filter(c=>c.showInGraph&&c.power>0).sort((c,f)=>f.power-c.power):[]),u=_e(()=>Jt.value.size>1?[...Jt.value.values()].filter(c=>c.power>0).sort((c,f)=>c.power-f.power):Pe.getItem("pv").power<0?[Pe.getItem("pv")]:[]);return(c,f)=>(se(),De(qE,{"upper-arc":!1,plotdata:i.value,radius:t.radius,"categories-to-show":r},null,8,["plotdata","radius"]))}}),ll=We({__name:"FormatWatt",props:{watt:{}},setup(e){const t=e,r=_e(()=>Fr(t.watt,Ce.decimalPlaces));return(n,i)=>$e(r.value)}}),z$={key:0,id:"pmLabel"},H$=["x","y","fill","text-anchor"],q$=22,Sn=We({__name:"PMLabel",props:{x:{},y:{},data:{},props:{},anchor:{},labeltext:{},labelicon:{},labelcolor:{}},setup(e){const t=e,r=_e(()=>t.labeltext?t.labeltext:t.props?t.props.icon+" ":t.labelicon?t.labelicon+" ":""),n=_e(()=>t.labelcolor?t.labelcolor:t.props?t.props.color:""),i=_e(()=>!t.data||t.data.power>0),o=_e(()=>t.labeltext?"":"fas");return(a,s)=>i.value?(se(),Se("g",z$,[U("text",{x:e.x,y:e.y,fill:n.value,"text-anchor":e.anchor,"font-size":q$,class:"pmLabel"},[U("tspan",{class:Qe(o.value)},$e(r.value),3),U("tspan",null,[e.data!==void 0?(se(),De(ll,{key:0,watt:e.data.power},null,8,["watt"])):Me("",!0)])],8,H$)])):Me("",!0)}}),G$={class:"wb-widget p-0 m-0 shadow"},Y$={class:"d-flex justify-content-between"},K$={class:"m-4 me-0 mb-0"},X$={class:"p-4 pb-0 ps-0 m-0",style:{"text-align":"right"}},Q$={class:"px-4 pt-4 pb-2 wb-subwidget"},J$={class:"row"},Z$={class:"col m-0 p-0"},eD={class:"container-fluid m-0 p-0"},tD={key:0},rD={class:"px-4 py-2 wb-subwidget"},nD={class:"row"},iD={class:"col"},oD={class:"container-fluid m-0 p-0"},ul=We({__name:"WBWidget",props:{variableWidth:{type:Boolean},fullWidth:{type:Boolean}},setup(e){const t=e,r=_e(()=>t.fullWidth?"col-12":t.variableWidth&&Ce.preferWideBoxes?"col-lg-6":"col-lg-4");return(n,i)=>(se(),Se("div",{class:Qe(["p-2 m-0 d-flex",r.value])},[U("div",G$,[U("div",Y$,[U("h3",K$,[It(n.$slots,"title",{},()=>[i[0]||(i[0]=U("div",{class:"p-0"},"(title goes here)",-1))]),It(n.$slots,"subtitle")]),U("div",X$,[It(n.$slots,"buttons")])]),U("div",Q$,[U("div",J$,[U("div",Z$,[U("div",eD,[It(n.$slots,"default")])])])]),n.$slots.footer!=null?(se(),Se("div",tD,[i[1]||(i[1]=U("hr",null,null,-1)),U("div",rD,[U("div",nD,[U("div",iD,[U("div",oD,[It(n.$slots,"footer")])])])])])):Me("",!0)])],2))}}),sD={id:"powermeter",class:"p-0 m-0"},aD=["viewBox"],lD=["transform"],uD=["x"],cD=["y"],Wn=500,zn=20,Y0=20,fD=We({__name:"PowerMeter",setup(e){const t=Wn,r=Math.PI/40,n=[[4],[4,6],[1,4,6],[0,2,4,6],[0,2,3,5,6]],i=[{x:-85,y:t/2*1/5},{x:0,y:t/2*1/5},{x:85,y:t/2*1/5},{x:-85,y:t/2*2/5},{x:0,y:t/2*2/5},{x:85,y:t/2*2/5},{x:0,y:t/2*3/5}],o=_e(()=>Wn/2-zn),a=_e(()=>{let v="",g=Pe.sourceSummary.filter(m=>m.power>0);return g.length==1&&g[0].name=="PV"?v="Aktueller Verbrauch: ":v="Bezug/Verbrauch: ",v+Fr(Pe.getPower("house")+Pe.getPower("charging")+Pe.getPower("devices")+Pe.getPower("batIn")+Pe.getPower("counters"),Ce.decimalPlaces)}),s=_e(()=>{let v=Pe.getPower("pv")+Pe.getPower("evuIn")+Pe.getPower("batOut");return Ce.maxPower>v?Fr(Ce.maxPower,Ce.decimalPlaces):Fr(v,Ce.decimalPlaces)}),l=_e(()=>Object.values(Ye)),u=_e(()=>{let v=0;return Ce.showRelativeArcs&&(v=Ce.maxPower-(Pe.getPower("pv")+Pe.getPower("evuIn")+Pe.getPower("batOut"))),v<0?0:v}),c=_e(()=>[Pe.getItem("evuOut"),Pe.getItem("charging"),Pe.getItem("devices"),Pe.getItem("batIn"),Pe.getItem("house"),Pe.getItem("counters")].filter(v=>v.power>0).slice(0,5)),f=_e(()=>n[c.value.length-1]);function d(v){return i[f.value[v]]}function h(v){return v.length>12?v.slice(0,11)+".":v}const p=_e(()=>{const[v]=mt.etPriceList.values();return Math.round(v*10)/10});function y(){Ce.showPmLabels=!Ce.showPmLabels}return(v,g)=>(se(),De(ul,{"full-width":!0},{title:Ae(()=>[...g[0]||(g[0]=[Ke(" Aktuell ",-1)])]),default:Ae(()=>[U("figure",sD,[(se(),Se("svg",{viewBox:"0 0 "+Wn+" "+le(t)},[U("g",{transform:"translate("+Wn/2+","+le(t)/2+")"},[U("g",null,[we(V$,{radius:o.value,"corner-radius":Y0,"circle-gap-size":r,"empty-power":u.value},null,8,["radius","empty-power"]),we(W$,{radius:o.value,"corner-radius":Y0,"circle-gap-size":r,"empty-power":u.value},null,8,["radius","empty-power"]),we(Sn,{x:0,y:-le(t)/10*2,data:le(Pe).getItem("pv"),props:le(Xr).pv,anchor:"middle",config:le(Ce)},null,8,["y","data","props","config"]),we(Sn,{x:0,y:-le(t)/10*3,data:le(Pe).getItem("evuIn"),props:le(Xr).evuIn,anchor:"middle",config:le(Ce)},null,8,["y","data","props","config"]),we(Sn,{x:0,y:-le(t)/10,data:le(Pe).getItem("batOut"),props:le(Xr).batOut,anchor:"middle",config:le(Ce)},null,8,["y","data","props","config"]),le(mt).active?(se(),De(Sn,{key:0,x:0,y:-le(t)/10,data:le(Pe).getItem("batOut"),props:le(Xr).batOut,anchor:"middle",config:le(Ce)},null,8,["y","data","props","config"])):Me("",!0),(se(!0),Se(Ge,null,it(c.value,(m,b)=>(se(),De(Sn,{key:b,x:d(b).x,y:d(b).y,data:m,labelicon:m.icon,labelcolor:m.color,anchor:"middle",config:le(Ce)},null,8,["x","y","data","labelicon","labelcolor","config"]))),128)),le(At)[0]!=null&&le(rt)[le(At)[0]]!=null&&le(rt)[le(At)[0]].isSocConfigured?(se(),De(Sn,{key:1,x:-Wn/2-zn/4+10,y:-le(t)/2+zn+5,labeltext:h(le(rt)[le(At)[0]].name)+": "+Math.round(le(rt)[le(At)[0]].soc)+"%",labelcolor:l.value[0]?l.value[0].color:"var(--color-charging)",anchor:"start",config:le(Ce)},null,8,["x","y","labeltext","labelcolor","config"])):Me("",!0),le(At)[1]!=null&&le(rt)[le(At)[1]]!=null&&le(rt)[le(At)[1]].isSocConfigured?(se(),De(Sn,{key:2,x:Wn/2+zn/4-10,y:-le(t)/2+zn+5,labeltext:h(le(rt)[le(At)[1]].name)+": "+Math.round(le(rt)[le(At)[1]].soc)+"%",labelcolor:l.value[1]?l.value[1].color:"var(--color-charging)",anchor:"end",config:le(Ce)},null,8,["x","y","labeltext","labelcolor","config"])):Me("",!0),le(wt).batterySoc>0?(se(),De(Sn,{key:3,x:-Wn/2-zn/4+10,y:le(t)/2-zn+15,labeltext:"Speicher: "+le(wt).batterySoc+"%",labelcolor:le(Pe).getItem("batIn").color,anchor:"start",config:le(Ce)},null,8,["x","y","labeltext","labelcolor","config"])):Me("",!0),le(mt).active?(se(),De(Sn,{key:4,x:Wn/2+zn/4-10,y:le(t)/2-zn+15,value:p.value,labeltext:le(mt).etCurrentPriceString,labelcolor:"var(--color-charging)",anchor:"end",config:le(Ce)},null,8,["x","y","value","labeltext","config"])):Me("",!0),we(Sn,{x:0,y:0,labeltext:a.value,labelcolor:"var(--color-fg)",anchor:"middle",config:le(Ce)},null,8,["labeltext","config"]),le(Ce).showRelativeArcs?(se(),Se("text",{key:5,x:Wn/2-44,y:"2","text-anchor":"middle",fill:"var(--color-axis)","font-size":"12"}," Peak: "+$e(s.value),9,uD)):Me("",!0),U("text",{x:0,y:le(t)/2*3.8/5,"text-anchor":"middle",fill:"var(--color-menu)","font-size":"28",class:"fas",type:"button",onClick:y},$e(""),8,cD)])],8,lD)],8,aD))])]),_:1}))}}),dD=["origin","origin2","transform"],hD=We({__name:"PgSourceGraph",props:{width:{},height:{},margin:{}},setup(e){const t=e,r={house:"var(--color-house)",batIn:"var(--color-battery)",inverter:"var(--color-pv)",batOut:"var(--color-battery)",selfUsage:"var(--color-pv)",pv:"var(--color-pv)",evuOut:"var(--color-export)",evuIn:"var(--color-evu)"};var n,i;const o=Ce.showAnimations?Ce.animationDuration:0,a=Ce.showAnimations?Ce.animationDelay:0,s=_e(()=>{const _=dt("g#pgSourceGraph");if(Te.data.length>0){Te.graphMode=="month"||Te.graphMode=="year"?m(_,Vi.value):g(_,cn.value),_.selectAll(".axis").remove();const w=_.append("g").attr("class","axis");w.call(p.value),w.selectAll(".tick").attr("font-size",12),w.selectAll(".tick line").attr("stroke",v.value).attr("stroke-width",y.value),w.select(".domain").attr("stroke","var(--color-bg)")}return"pgSourceGraph.vue"}),l=_e(()=>z1().value((_,w)=>_[w]??0).keys(f.value)),u=_e(()=>l.value(Te.data)),c=_e(()=>gn().range([t.height-10,0]).domain(Te.graphMode=="year"?[0,Math.ceil(d.value[1]*10)/10]:[0,Math.ceil(d.value[1])])),f=_e(()=>{let _=[];const w=["batOut","evuIn"];if(Ce.showInverters){const E=/pv\d+/;Te.data.length>0&&(_=Object.keys(Te.data[0]).reduce((T,C)=>(C.match(E)&&T.push(C),T),[]))}switch(Te.graphMode){case"live":return Ce.showInverters?["pv","batOut","evuIn"]:["selfUsage","evuOut","batOut","evuIn"];case"today":case"day":return _.forEach(E=>{r[E]=Jt.value.get(+E.slice(2))?.color??"var(--color-pv)"}),Ce.showInverters?[..._,...w]:["selfUsage","evuOut","batOut","evuIn"];default:return Ce.showInverters?["evuIn","batOut","selfUsage"]:["evuIn","batOut","selfUsage","evuOut"]}}),d=_e(()=>{let _=pn(Te.data,w=>Math.max(w.pv+w.evuIn+w.batOut,w.selfUsage+w.evuOut));return _[0]!=null&&_[1]!=null?(Te.graphMode=="year"&&(_[0]=_[0]/1e3,_[1]=_[1]/1e3),_):[0,0]}),h=_e(()=>Te.graphMode=="month"||Te.graphMode=="year"?-t.width-t.margin.right-22:-t.width),p=_e(()=>Rc(c.value).tickSizeInner(h.value).ticks(4).tickFormat(_=>(_==0?"":Math.round(_*10)/10).toLocaleString(void 0))),y=_e(()=>Ce.showGrid?"0.5":"1"),v=_e(()=>Ce.showGrid?"var(--color-grid)":"var(--color-bg)");function g(_,w){const E=bs().x((C,j)=>w(Te.data[j].date)).y(c.value(0)).curve(_s),T=bs().x((C,j)=>w(Te.data[j].date)).y0(C=>c.value(Te.graphMode=="year"?C[0]/1e3:C[0])).y1(C=>c.value(Te.graphMode=="year"?C[1]/1e3:C[1])).curve(_s);fc?(_.selectAll("*").remove(),n=_.append("svg").attr("x",0).attr("width",t.width).selectAll(".sourceareas").data(u.value).enter().append("path").attr("fill",(j,P)=>r[f.value[P]]).attr("d",j=>E(j)),n.transition().duration(o).delay(a).ease(Ia).attr("d",j=>T(j)),z0()):n.data(u.value).transition().duration(0).ease(Ia).attr("d",C=>T(C))}function m(_,w){Te.data.length>0&&(fc?(_.selectAll("*").remove(),i=_.selectAll(".sourcebar").data(u.value).enter().append("g").attr("fill",(E,T)=>r[f.value[T]]).selectAll("rect").data(E=>E).enter().append("rect").attr("x",(E,T)=>w(Te.data[T].date)??0).attr("y",()=>c.value(0)).attr("height",0).attr("width",w.bandwidth()),i.transition().duration(o).delay(a).ease(Ia).attr("height",E=>Te.graphMode=="year"?c.value(E[0]/1e3)-c.value(E[1]/1e3):c.value(E[0])-c.value(E[1])).attr("y",E=>Te.graphMode=="year"?c.value(E[1]/1e3):c.value(E[1])),z0()):(_.selectAll("*").remove(),i=_.selectAll(".sourcebar").data(u.value).enter().append("g").attr("fill",(E,T)=>r[f.value[T]]).selectAll("rect").data(E=>E).enter().append("rect").attr("x",(E,T)=>w(Te.data[T].date)??0).attr("y",E=>Te.graphMode=="year"?c.value(E[1]/1e3):c.value(E[1])).attr("width",w.bandwidth()).attr("height",E=>Te.graphMode=="year"?c.value(E[0]/1e3)-c.value(E[1]/1e3):c.value(E[0])-c.value(E[1]))))}const b=_e(()=>{const _=dt("g#pgSourceGraph");if(Te.graphMode!="month"&&Te.graphMode!="year"&&Te.data.length>0){cn.value.range(oi.value);const w=bs().x((E,T)=>cn.value(Te.data[T].date)).y0(E=>c.value(E[0])).y1(E=>c.value(E[1])).curve(_s);_.selectAll("path").attr("d",E=>E?w(E):""),_.selectAll("g#sourceToolTips").select("rect").attr("x",E=>cn.value(E.date)).attr("width",t.width/Te.data.length)}return"zoomed"});return(_,w)=>(se(),Se("g",{id:"pgSourceGraph",origin:s.value,origin2:b.value,transform:"translate("+e.margin.left+","+e.margin.top+")"},null,8,dD))}}),pD=["origin","origin2","transform"],gD=We({__name:"PgUsageGraph",props:{width:{},height:{},margin:{},stackOrder:{}},setup(e){const t=e,r=_e(()=>Ce.showInverters?[["house","charging","devices","counters","batIn","evuOut"],["charging","devices","counters","batIn","house","evuOut"],["devices","counters","batIn","charging","house","evuOut"],["batIn","charging","house","devices","counters","evuOut"]]:[["house","charging","devices","counters","batIn"],["charging","devices","counters","batIn","house"],["devices","counters","batIn","charging","house"],["batIn","charging","house","devices","counters"]]),n={house:"var(--color-house)",charging:"var(--color-charging)",batIn:"var(--color-battery)",batOut:"var(--color-battery)",selfUsage:"var(--color-pv)",evuOut:"var(--color-export)",evuIn:"var(--color-evu)",cp0:"var(--color-cp0)",cp1:"var(--color-cp1)",cp2:"var(--color-cp2)",cp3:"var(--color-cp3)",sh1:"var(--color-sh1)",sh2:"var(--color-sh2)",sh3:"var(--color-sh3)",sh4:"var(--color-sh4)",devices:"var(--color-devices)",counters:"var(--color-counters)"};var i,o;const a=Ce.showAnimations?Ce.animationDuration:0,s=Ce.showAnimations?Ce.animationDelay:0,l=_e(()=>{const b=dt("g#pgUsageGraph");Te.graphMode=="month"||Te.graphMode=="year"?g(b):v(b),b.selectAll(".axis").remove();const _=b.append("g").attr("class","axis");return _.call(y.value),_.selectAll(".tick").attr("font-size",12).attr("color","var(--color-axis)"),Ce.showGrid?_.selectAll(".tick line").attr("stroke","var(--color-grid)").attr("stroke-width","0.5"):_.selectAll(".tick line").attr("stroke","var(--color-bg)"),_.select(".domain").attr("stroke","var(--color-bg)"),"pgUsageGraph.vue"}),u=_e(()=>z1().value((b,_)=>b[_]??0).keys(d.value)),c=_e(()=>u.value(Te.data)),f=_e(()=>gn().range([t.height+10,2*t.height]).domain(Te.graphMode=="year"?[0,Math.ceil(h.value[1]*10)/10]:[0,Math.ceil(h.value[1])])),d=_e(()=>{if(Te.graphMode!="today"&&Te.graphMode!="day")return r.value[t.stackOrder];{const b=r.value[t.stackOrder].slice(),_=b.indexOf("charging");b.splice(_,1);const w=/cp\d+/;let E=[];return Te.data.length>0&&(E=Object.keys(Te.data[0]).reduce((T,C)=>(C.match(w)&&T.push(C),T),[])),E.forEach((T,C)=>{b.splice(_+C,0,T),n[T]=Ye[+T.slice(2)]?.color??"black"}),b}}),h=_e(()=>{let b=pn(Te.data,_=>_.house+_.charging+_.batIn+_.devices+_.counters+_.evuOut);return b[0]!=null&&b[1]!=null?(Te.graphMode=="year"&&(b[0]=b[0]/1e3,b[1]=b[1]/1e3),b):[0,0]}),p=_e(()=>Te.graphMode=="month"||Te.graphMode=="year"?-t.width-t.margin.right-22:-t.width),y=_e(()=>Rc(f.value).tickSizeInner(p.value).ticks(4).tickFormat(b=>(b==0?"":Math.round(b*10)/10).toLocaleString(void 0)));function v(b){const _=bs().x((E,T)=>cn.value(Te.data[T].date)).y(f.value(0)).curve(_s),w=bs().x((E,T)=>cn.value(Te.data[T].date)).y0(E=>f.value(E[0])).y1(E=>f.value(E[1])).curve(_s);Ce.showAnimations?Ga?(b.selectAll("*").remove(),i=b.append("svg").attr("x",0).attr("width",t.width).selectAll(".usageareas").data(c.value).enter().append("path").attr("d",T=>_(T)).attr("fill",(T,C)=>n[d.value[C]]),i.transition().duration(300).delay(100).ease(Ia).attr("d",T=>w(T)),H0()):(b.selectAll("*").remove(),b.append("svg").attr("x",0).attr("width",t.width).selectAll(".usageareas").data(c.value).enter().append("path").attr("d",T=>w(T)).attr("fill",(T,C)=>n[d.value[C]])):(b.selectAll("*").remove(),b.append("svg").attr("x",0).attr("width",t.width).selectAll(".usageareas").data(c.value).enter().append("path").attr("d",T=>w(T)).attr("fill",(T,C)=>n[d.value[C]]))}function g(b){Ga?(b.selectAll("*").remove(),o=b.selectAll(".usagebar").data(c.value).enter().append("g").attr("fill",(_,w)=>n[r.value[t.stackOrder][w]]).selectAll("rect").data(_=>_).enter().append("rect").attr("x",(_,w)=>Vi.value(Te.data[w].date)??0).attr("y",()=>f.value(0)).attr("height",0).attr("width",Vi.value.bandwidth()),o.transition().duration(a).delay(s).ease(Ia).attr("y",_=>Te.graphMode=="year"?f.value(_[0]/1e3):f.value(_[0])).attr("height",_=>Te.graphMode=="year"?f.value(_[1]/1e3)-f.value(_[0]/1e3):f.value(_[1])-f.value(_[0])),H0()):(b.selectAll("*").remove(),o=b.selectAll(".usagebar").data(c.value).enter().append("g").attr("fill",(_,w)=>n[r.value[t.stackOrder][w]]).selectAll("rect").data(_=>_).enter().append("rect").attr("x",(_,w)=>Vi.value(Te.data[w].date)??0).attr("y",_=>Te.graphMode=="year"?f.value(_[0]/1e3):f.value(_[0])).attr("height",_=>Te.graphMode=="year"?f.value(_[1]/1e3)-f.value(_[0]/1e3):f.value(_[1])-f.value(_[0])).attr("width",Vi.value.bandwidth()))}const m=_e(()=>{const b=dt("g#pgUsageGraph");if(Te.graphMode!="month"&&Te.graphMode!="year"){cn.value.range(oi.value);const _=bs().x((w,E)=>cn.value(Te.data[E].date)).y0(w=>f.value(w[0])).y1(w=>f.value(w[1])).curve(_s);b.selectAll("path").attr("d",w=>w?_(w):"")}return"zoomed"});return(b,_)=>(se(),Se("g",{id:"pgUsageGraph",origin:l.value,origin2:m.value,transform:"translate("+e.margin.left+","+e.margin.top+")"},null,8,pD))}}),mD=["width"],yD=["transform"],vD=["width"],bD=["transform"],_D=["origin","origin2","transform"],wD=["origin","transform"],SD={key:0},ED=["width","height"],xD={key:1},TD=["y","width","height"],pd=12,AD=We({__name:"PgXAxis",props:{width:{},height:{},margin:{}},setup(e){const t=e,r=_e(()=>eu(cn.value).ticks(6).tickSizeInner(a.value).tickFormat(Ro("%H:%M"))),n=_e(()=>mC(cn.value).ticks(6).tickSizeInner(a.value+3).tickFormat(Ro(""))),i=_e(()=>eu(Vi.value).ticks(4).tickSizeInner(a.value).tickFormat(c=>c.toString())),o=_e(()=>eu(Vi.value).ticks(4).tickSizeInner(a.value).tickFormat(()=>"")),a=_e(()=>Te.graphMode!=="month"&&Te.graphMode!=="year"?Ce.showGrid?-(t.height/2-7):-10:0),s=_e(()=>{let c=dt("g#PGXAxis"),f=dt("g#PgUnit");return c.selectAll("*").remove(),f.selectAll("*").remove(),Te.graphMode=="month"||Te.graphMode=="year"?c.call(i.value):c.call(r.value),c.selectAll(".tick > text").attr("fill",(d,h)=>h>=0||Te.graphMode=="month"||Te.graphMode=="year"?"var(--color-axis)":"var(--color-bg)").attr("font-size",pd),Ce.showGrid?c.selectAll(".tick line").attr("stroke","var(--color-grid)").attr("stroke-width","0.5"):c.selectAll(".tick line").attr("stroke","var(--color-bg)"),c.select(".domain").attr("stroke","var(--color-bg)"),f.append("text").attr("x",0).attr("y",12).attr("fill","var(--color-axis)").attr("font-size",pd).text(Te.graphMode=="year"?"MWh":Te.graphMode=="month"?"kWh":"kW").attr("text-anchor","start"),"PGXAxis.vue"}),l=_e(()=>{let c=dt("g#PGXAxis2");return c.selectAll("*").remove(),Te.graphMode=="month"||Te.graphMode=="year"?c.call(o.value):c.call(n.value),c.selectAll(".tick > text").attr("fill",(f,d)=>d>=0||Te.graphMode=="month"||Te.graphMode=="year"?"var(--color-axis)":"var(--color-bg)").attr("font-size",pd),Ce.showGrid?(c.selectAll(".tick line").attr("stroke","var(--color-grid)").attr("stroke-width","0.5"),c.select(".domain").attr("stroke","var(--color-bg)")):c.selectAll(".tick line").attr("stroke","var(--color-bg)"),c.select(".domain").attr("stroke","var(--color-bg)"),"PGXAxis2.vue"}),u=_e(()=>{if(Te.graphMode!="month"&&Te.graphMode!="year"){const c=dt("g#PGXAxis"),f=dt("g#PGXAxis2");Te.graphMode=="month"||Te.graphMode=="year"?(Vi.value.range(oi.value),c.call(i.value),f.call(o.value)):(cn.value.range(oi.value),c.call(r.value),f.call(n.value))}return"zoomed"});return(c,f)=>(se(),Se(Ge,null,[(se(),Se("svg",{x:"0",width:t.width},[U("g",{id:"PgUnit",transform:"translate(0,"+(e.height/2+9)+")"},null,8,yD)],8,mD)),(se(),Se("svg",{x:0,width:t.width},[U("g",{transform:"translate("+e.margin.left+","+e.margin.top+")"},[U("g",{id:"PGXAxis",class:"axis",origin:s.value,origin2:u.value,transform:"translate(0,"+(e.height/2-6)+")"},null,8,_D),U("g",{id:"PGXAxis2",class:"axis",origin:l.value,transform:"translate(0,"+(e.height/2+-6)+")"},null,8,wD),le(Ce).showGrid?(se(),Se("g",SD,[U("rect",{x:"0",y:"0",width:e.width,height:e.height/2-10,fill:"none",stroke:"var(--color-grid)","stroke-width":"0.5"},null,8,ED)])):Me("",!0),le(Ce).showGrid?(se(),Se("g",xD,[U("rect",{x:"0",y:e.height/2+10,width:e.width,height:e.height/2-10,fill:"none",stroke:"var(--color-grid)","stroke-width":"0.5"},null,8,TD)])):Me("",!0)],8,bD)],8,vD))],64))}}),ID=["width"],CD=["id",".origin","d"],MD=["id","d","stroke"],kD=["x","y","text-anchor"],gd=We({__name:"PgSoc",props:{width:{},height:{},margin:{},order:{}},setup(e){const t=e,r=_e(()=>{let d=pn(Te.data,h=>h.date);return d[0]&&d[1]?Hi().domain(d).range([0,t.width]):Hi().range([0,0])}),n=_e(()=>gn().range([t.height-10,5]).domain([0,100])),i=_e(()=>{let h=ri().x(p=>r.value(p.date)).y(p=>n.value(t.order==2?p.batSoc:t.order==0?p["soc"+At.value[0]]:p["soc"+At.value[1]])??n.value(0))(Te.data);return h||""}),o=_e(()=>t.order),a=_e(()=>{switch(t.order){case 2:return"Speicher";case 1:return rt[At.value[1]]!=null?rt[At.value[1]].name:"???";default:return rt[At.value[0]]!=null?rt[At.value[0]].name:"???"}}),s=_e(()=>{switch(t.order){case 0:return"var(--color-cp1)";case 1:return"var(--color-cp2)";case 2:return"var(--color-battery)";default:return"red"}}),l=_e(()=>{switch(t.order){case 0:return 3;case 1:return t.width-3;case 2:return t.width/2;default:return 0}}),u=_e(()=>{if(Te.data.length>0){let d;switch(t.order){case 0:return d=0,n.value(Te.data[d]["soc"+At.value[0]]+2);case 1:return d=Te.data.length-1,Math.max(12,n.value(Te.data[d]["soc"+At.value[1]]+2));case 2:return d=Math.round(Te.data.length/2),n.value(Te.data[d].batSoc+2);default:return 0}}else return 0}),c=_e(()=>{switch(t.order){case 0:return"start";case 1:return"end";case 2:return"middle";default:return"middle"}}),f=_e(()=>{if(Te.graphMode!="month"&&Te.graphMode!="year"){const d=dt("path#soc-"+o.value),h=dt("path#socdashes-"+o.value);r.value.range(oi.value);const p=ri().x(y=>r.value(y.date)).y(y=>n.value(t.order==2?y.batSoc:t.order==0?y["soc"+At.value[0]]:y["soc"+At.value[1]])??n.value(0));d.attr("d",p(Te.data)),h.attr("d",p(Te.data))}return"zoomed"});return(d,h)=>(se(),Se("svg",{x:"0",width:t.width,class:"PGSoc"},[U("g",null,[U("path",{id:"soc-"+o.value,".origin":f.value,class:"soc-baseline",d:i.value,stroke:"var(--color-bg)","stroke-width":"1",fill:"none"},null,40,CD),U("path",{id:"socdashes-"+o.value,class:"soc-dashes",d:i.value,stroke:s.value,"stroke-width":"1",style:{strokeDasharray:"3,1"},fill:"none"},null,8,MD),U("text",{class:"cpname",x:l.value,y:u.value,style:ot({fill:s.value,fontSize:10}),"text-anchor":c.value},$e(a.value),13,kD)])],8,ID))}}),PD=["transform"],OD=We({__name:"PgSocAxis",props:{width:{},height:{},margin:{}},setup(e){const t=e,r=_e(()=>gn().range([t.height-10,5]).domain([0,100])),n=_e(()=>yC(r.value).ticks(5).tickFormat(o=>o.toString()+"%"));function i(){let o=dt("g#PGSocAxis");o.call(n.value),o.selectAll(".tick").attr("font-size",12),o.selectAll(".tick line").attr("stroke","var(--color-bg)"),o.select(".domain").attr("stroke","var(--color-bg)")}return Hr(()=>{i()}),(o,a)=>(se(),Se("g",{id:"PGSocAxis",class:"axis",transform:"translate("+(e.width-20)+",0)"},null,8,PD))}}),LD={class:"d-flex align-self-top justify-content-center align-items-center"},RD={class:"input-group input-group-xs"},ND={key:0,class:"btn dropdown-toggle",type:"button","data-bs-toggle":"dropdown"},$D={class:"dropdown-menu"},DD={class:"table optiontable"},BD=["onClick"],FD={key:1,class:"btn dropdown-toggle",type:"button","data-bs-toggle":"dropdown"},UD={class:"dropdown-menu"},jD={class:"table optiontable"},VD=["onClick"],WD={key:2,class:"btn dropdown-toggle",type:"button","data-bs-toggle":"dropdown"},zD={class:"dropdown-menu"},HD={class:"table optiontable"},qD=["onClick"],GD=We({__name:"DateInput",props:{modelValue:{type:Date,required:!0},mode:{type:String,default:"day"}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=new Date().getFullYear();let i=Array.from({length:10},(h,p)=>n-p);const o=et(!0),a=t,s=[[0,1,2,3],[4,5,6,7],[8,9,10,11]],l=et(r.modelValue.getDate()),u=et(r.modelValue.getMonth()),c=et(r.modelValue.getFullYear()),f=_e(()=>{const p=new Date(c.value,u.value,1).getDay();let y=0;switch(console.log(u.value),u.value){case 0:case 2:case 4:case 6:case 7:case 9:case 11:y=31;break;case 3:case 5:case 8:case 10:y=30;break;case 1:c.value%4==0&&c.value%100!=0||c.value%400==0?y=29:y=28}let v=[],g=[0,0,0,0,0,0,0],m=p;for(let b=0;b(se(),Se("span",LD,[U("div",RD,[r.mode=="day"||r.mode=="today"?(se(),Se("button",ND,$e(l.value),1)):Me("",!0),U("div",$D,[U("table",DD,[(se(!0),Se(Ge,null,it(f.value,(y,v)=>(se(),Se("tr",{key:v,class:""},[(se(!0),Se(Ge,null,it(y,(g,m)=>(se(),Se("td",{key:m},[g!=0?(se(),Se("span",{key:0,type:"button",class:"btn optionbutton",onClick:b=>l.value=g},$e(g),9,BD)):Me("",!0)]))),128))]))),128))])]),r.mode!="year"&&r.mode!="live"?(se(),Se("button",FD,$e(u.value+1),1)):Me("",!0),U("div",UD,[U("table",jD,[(se(),Se(Ge,null,it(s,(y,v)=>U("tr",{key:v,class:""},[(se(!0),Se(Ge,null,it(y,(g,m)=>(se(),Se("td",{key:m,class:"p-0 m-0"},[U("span",{type:"button",class:"btn btn-sm optionbutton",onClick:b=>u.value=g},$e(g+1),9,VD)]))),128))])),64))])]),r.mode!="live"?(se(),Se("button",WD,$e(c.value),1)):Me("",!0),U("div",zD,[U("table",HD,[(se(!0),Se(Ge,null,it(le(i),(y,v)=>(se(),Se("tr",{key:v,class:""},[U("td",null,[U("span",{type:"button",class:"btn optionbutton",onClick:g=>c.value=y},$e(y),9,qD)])]))),128))])]),r.mode!="live"?(se(),Se("button",{key:3,class:"button-outline-secondary",type:"button",onClick:d},[...p[0]||(p[0]=[U("span",{class:"fa-solid fa-circle-check"},null,-1)])])):Me("",!0)])]))}}),YD=Xe(GD,[["__scopeId","data-v-279434b9"]]),KD={class:"btn-group m-0",role:"group","aria-label":"radiobar"},XD=["id","value"],QD=We({__name:"RadioBarInput",props:{options:{},modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=t,i=_e({get(){return r.modelValue},set(s){n("update:modelValue",s)}});function o(s){let l=r.options[s].color?r.options[s].color:"var(--color-fg)";return r.options[s].active?{color:"var(--color-bg)",background:l}:{color:l}}function a(s){let l=s.target;for(;l&&!l.value&&l.parentElement;)l=l.parentElement;l.value&&(i.value=l.value)}return(s,l)=>(se(),Se("div",null,[U("div",KD,[(se(!0),Se(Ge,null,it(e.options,(u,c)=>(se(),Se("button",{id:"radio-"+u.value,key:c,class:Qe(["btn btn-outline-secondary btn-sm radiobutton mx-0 mb-0 px-2",u.value==i.value?"active":""]),value:u.value,style:ot(o(c)),onClick:a},[U("span",{style:ot(o(c))},[u.icon?(se(),Se("i",{key:0,class:Qe(["fa-solid",u.icon])},null,2)):Me("",!0),Ke(" "+$e(u.text),1)],4)],14,XD))),128))])]))}}),GE=Xe(QD,[["__scopeId","data-v-82ab6829"]]),JD=We({__name:"PgSelector",props:{widgetid:{},showLeftButton:{type:Boolean},showRightButton:{type:Boolean},ignoreLive:{type:Boolean}},emits:["shiftLeft","shiftRight","shiftUp","shiftDown"],setup(e){const t=e,r=et(0),n=_e(()=>{if(Te.waitForData)return"Lädt";switch(Te.graphMode){case"live":return t.ignoreLive?"heute":`${Math.floor(Ce.liveGraphDuration/60)} min`;case"today":return"heute";case"day":return $t.date.getDate()+"."+($t.date.getMonth()+1)+".";case"month":return M$(Cn.month-1,Cn.year);case"year":return ji.year.toString();default:return"???"}}),i=["live","today","day","month","year"],o=["Live","Heute","Tag","Monat","Jahr"],a=_e({get(){return Te.graphMode},set(m){switch(m){case"day":f();break;case"today":d();break;case"live":c();break;case"month":h();break;case"year":p()}}}),s=_e(()=>{switch(Te.graphMode){case"live":case"today":return $t.getDate();case"month":return Cn.getDate();default:return $t.getDate()}});function l(m){q0(m)}function u(){r.value+=1,r.value>2&&(r.value=0)}function c(){Te.graphMode!="live"&&(Te.graphMode="live",Ht())}function f(){Te.graphMode!="day"&&Te.graphMode!="today"&&(Te.graphMode="day",Ht())}function d(){Te.graphMode!="today"&&(Te.graphMode="today",q0(new Date),Ht())}function h(){Te.graphMode!="month"&&(Te.graphMode="month",Ht())}function p(){Te.graphMode!="year"&&(Te.graphMode="year",Ht())}const y=_e(()=>r.value>0?{border:"1px solid var(--color-frame)"}:""),v=_e(()=>r.value==1?"justify-content-between":"justify-content-end"),g=_e(()=>r.value==1?"justify-content-between":"justify-content-center");return(m,b)=>(se(),Se("div",{class:"d-flex flex-column justify-content-center pgselector rounded",style:ot(y.value)},[r.value==2?(se(),De(GE,{key:0,id:"pgm2",modelValue:a.value,"onUpdate:modelValue":b[0]||(b[0]=_=>a.value=_),class:"m-2",options:i.map((_,w)=>({text:o[w],value:_,color:"var(--color-menu)",active:_==le(Te).graphMode}))},null,8,["modelValue","options"])):Me("",!0),r.value==1?(se(),Se("span",{key:1,type:"button",class:Qe(["arrowButton d-flex align-self-center mb-3 mt-3",{disabled:!t.showLeftButton}]),onClick:b[1]||(b[1]=_=>m.$emit("shiftUp"))},[...b[6]||(b[6]=[U("i",{class:"fa-solid fa-xl fa-chevron-circle-up"},null,-1)])],2)):Me("",!0),U("div",{class:Qe(["d-flex align-items-center",g.value])},[r.value==1?(se(),Se("span",{key:0,type:"button",class:Qe(["p-1",{disabled:!t.showLeftButton}]),onClick:b[2]||(b[2]=_=>m.$emit("shiftLeft"))},[...b[7]||(b[7]=[U("span",{class:"fa-solid fa-xl fa-chevron-circle-left arrowButton"},null,-1)])],2)):Me("",!0),r.value<2?(se(),Se("span",{key:1,type:"button",class:"btn-outline-secondary p-2 px-3 badge rounded-pill datebadge",onClick:u},$e(n.value),1)):Me("",!0),r.value==2?(se(),De(YD,{key:2,"model-value":s.value,mode:le(Te).graphMode,"onUpdate:modelValue":l},null,8,["model-value","mode"])):Me("",!0),r.value==1?(se(),Se("span",{key:3,id:"graphRightButton",type:"button",class:Qe(["arrowButton fa-solid fa-xl fa-chevron-circle-right p-1",{disabled:!t.showRightButton}]),onClick:b[3]||(b[3]=_=>m.$emit("shiftRight"))},null,2)):Me("",!0)],2),U("div",{class:Qe(["d-flex align-items-center",v.value])},[r.value==1?(se(),Se("span",{key:0,type:"button",class:"p-1",onClick:u},[...b[8]||(b[8]=[U("span",{class:"fa-solid fa-xl fa-gear"},null,-1)])])):Me("",!0),r.value==1?(se(),Se("span",{key:1,id:"graphLeftButton",type:"button",class:Qe(["arrowButton fa-solid fa-xl fa-chevron-circle-down p-1",{disabled:!t.showLeftButton}]),onClick:b[4]||(b[4]=_=>m.$emit("shiftDown"))},null,2)):Me("",!0),r.value>0?(se(),Se("span",{key:2,type:"button",class:"p-1",onClick:b[5]||(b[5]=_=>r.value=0)},[...b[9]||(b[9]=[U("span",{class:"fa-solid fa-xl fa-circle-check"},null,-1)])])):Me("",!0)],2)],4))}}),Jm=Xe(JD,[["__scopeId","data-v-758b95f3"]]),ZD=["x","fill"],eB=["x"],tB={key:1},xr=We({__name:"PgToolTipLine",props:{cat:{},name:{},indent:{},power:{},width:{}},setup(e){const t=e;return(r,n)=>(se(),Se(Ge,null,[e.power>0?(se(),Se("tspan",{key:0,x:e.indent,dy:"1.3em",class:Qe(e.name?"":"fas"),fill:le(Xr)[e.cat].color},$e(e.name?e.name:le(Xr)[e.cat].icon)+"   ",11,ZD)):Me("",!0),U("tspan",{"text-anchor":"end",x:e.width-5},[e.cat!="price"&&t.power>0?(se(),De(ll,{key:0,watt:e.power*1e3},null,8,["watt"])):Me("",!0),e.cat==="price"?(se(),Se("tspan",tB,$e(le(P$)(t.power)),1)):Me("",!0)],8,eB)],64))}}),rB=["transform"],nB=["width","height"],iB={"text-anchor":"start",x:"5",y:"20","font-size":"16",fill:"var(--color-fg)"},oB=["x"],sB=We({__name:"PgToolTipItem",props:{entry:{},boxwidth:{},xScale:{type:[Function,Object]}},setup(e){const t=e;function r(){return Object.entries(t.entry).filter(([l,u])=>l!="selfUsage"&&!l.startsWith("soc")&&u!=null&&u>0).length*20+2}function n(){return Object.entries(t.entry).filter(([l,u])=>l.startsWith("pv")&&l.length>2&&u>0).map(([l,u])=>({power:u,name:sn.value.get(l)?s(sn.value.get(l)):"Wechselr.",id:l}))}function i(){return Object.entries(t.entry).filter(([l,u])=>l.startsWith("cp")&&l.length>2&&u>0).map(([l,u])=>({power:u,name:sn.value.get(l)?s(sn.value.get(l)):"Ladep.",id:l}))}function o(){return Object.entries(t.entry).filter(([l,u])=>l.startsWith("sh")&&l.length>2&&u>0).map(([l,u])=>({power:u,name:sn.value.get(l)?s(sn.value.get(l)):"Gerät",id:l}))}function a(){return Object.entries(t.entry).filter(([l,u])=>l.startsWith("counter")&&l!="counters"&&l.length>2&&u>0).map(([l,u])=>({power:u,name:sn.value.get(l)?s(sn.value.get(l)):"Zähler",id:l}))}function s(l){return l.length>6?l.slice(0,6)+"...":l}return(l,u)=>(se(),Se("g",{class:"ttmessage",transform:"translate("+e.xScale(e.entry.date)+",0)"},[U("rect",{rx:"5",width:e.boxwidth,height:r(),fill:"var(--color-bg)",opacity:"90%",stroke:"var(--color-menu)","stroke-width":"1"},null,8,nB),U("text",iB,[U("tspan",{"text-anchor":"middle",x:e.boxwidth/2,dy:"0em"},$e(le(Ro)("%H:%M")(new Date(e.entry.date))),9,oB),u[0]||(u[0]=U("line",{y:"120",x1:"5",x2:"100",stroke:"var(--color-fg)","stroke-width":"1"},null,-1)),we(xr,{cat:"evuIn",indent:5,power:e.entry.evuIn,width:e.boxwidth},null,8,["power","width"]),we(xr,{cat:"batOut",indent:5,power:e.entry.batOut,width:e.boxwidth},null,8,["power","width"]),we(xr,{cat:"pv",indent:5,power:e.entry.pv,width:e.boxwidth},null,8,["power","width"]),(se(!0),Se(Ge,null,it(n(),c=>(se(),De(xr,{key:c.id,cat:"pv",name:c.name,power:c.power,indent:10,width:e.boxwidth},null,8,["name","power","width"]))),128)),we(xr,{cat:"house",indent:5,power:e.entry.house,width:e.boxwidth},null,8,["power","width"]),we(xr,{cat:"charging",indent:5,power:e.entry.charging,width:e.boxwidth},null,8,["power","width"]),(se(!0),Se(Ge,null,it(i(),c=>(se(),De(xr,{key:c.id,cat:"charging",name:c.name,power:c.power,indent:10,width:e.boxwidth},null,8,["name","power","width"]))),128)),we(xr,{cat:"devices",indent:5,power:e.entry.devices,width:e.boxwidth},null,8,["power","width"]),(se(!0),Se(Ge,null,it(o(),c=>(se(),De(xr,{key:c.id,cat:"devices",name:c.name,power:c.power,indent:10,width:e.boxwidth},null,8,["name","power","width"]))),128)),we(xr,{cat:"counters",indent:5,power:e.entry.counters,width:e.boxwidth},null,8,["power","width"]),(se(!0),Se(Ge,null,it(a(),c=>(se(),De(xr,{key:c.id,cat:"counters",name:c.name,power:c.power,indent:10,width:e.boxwidth},null,8,["name","power","width"]))),128)),we(xr,{cat:"batIn",indent:5,power:e.entry.batIn,width:e.boxwidth},null,8,["power","width"]),we(xr,{cat:"evuOut",indent:5,power:e.entry.evuOut,width:e.boxwidth},null,8,["power","width"]),le(mt).active?(se(),De(xr,{key:0,cat:"price",indent:5,power:e.entry.price,name:"Preis",width:e.boxwidth},null,8,["power","width"])):Me("",!0)])],8,rB))}}),aB=["origin","transform"],lB=["x","height","width","onMouseover"],K0=140,uB=We({__name:"PgToolTips",props:{width:{},height:{},margin:{},data:{}},setup(e){const t=e,r=et(0),n=_e(()=>{const s=pn(t.data,l=>new Date(l.date));return s[0]&&s[1]?Th().domain(s).range([0,t.width-t.margin.right]):Hi().range([0,0])}),i=_e(()=>{const s=pn(t.data,l=>new Date(l.date));return s[0]&&s[1]?Th().domain(s).range([0,t.width-t.margin.right-K0]):Hi().range([0,0])}),o=_e(()=>((Te.graphMode=="day"||Te.graphMode=="today")&&(n.value.range(oi.value),dt("g#pgToolTips").selectAll("g.ttarea").select("rect").attr("x",(s,l)=>t.data.length>l?n.value(t.data[l].date):0).attr("width",t.data.length>0?(oi.value[1]-oi.value[0])/t.data.length:0)),"PgToolTips.vue:autozoom"));function a(s){r.value=s}return(s,l)=>(se(),Se("g",{id:"pgToolTips",origin:o.value,transform:"translate("+e.margin.left+","+e.margin.top+")"},[(se(!0),Se(Ge,null,it(e.data,u=>(se(),Se("g",{key:u.date,class:"ttitems"},[r.value==u.date?(se(),De(sB,{key:0,entry:u,boxwidth:K0,"x-scale":i.value},null,8,["entry","x-scale"])):Me("",!0)]))),128)),(se(!0),Se(Ge,null,it(e.data,u=>(se(),Se("g",{key:u.date,class:"ttarea",onMouseleave:l[0]||(l[0]=c=>r.value=0)},[U("rect",{x:n.value(u.date),y:"0",height:e.height,class:"ttrect",width:le(Te).data.length>0?e.width/le(Te).data.length:0,opacity:"1%",fill:"var(--color-charging)",onMouseover:c=>a(u.date)},null,40,lB)],32))),128))],8,aB))}}),cB=["width"],fB=[".origin","d"],dB=["d"],hB=["x","y"],pB=We({__name:"PriceLine",props:{width:{},height:{},margin:{}},setup(e){const t=e,r=_e(()=>{let s=pn(Te.data,l=>l.date);return s[0]&&s[1]?Hi().domain(s).range([0,t.width]):Hi().range([0,0])}),n=_e(()=>{let s=pn(Te.data,l=>l.price);return s[0]&&s[1]?(s[0]=0,gn().range([t.height-10,5]).domain(s)):gn().range([t.height-10,0]).domain([0,0])}),i=_e(()=>{let l=ri().x(u=>r.value(u.date)).y(u=>n.value(u.price)??n.value(0))(Te.data);return l||""}),o=_e(()=>{if(Te.data.length>0){let s;return s=Math.round(Te.data.length/2),n.value(Te.data[s].price)+2}else return 0}),a=_e(()=>{if(Te.graphMode!="month"&&Te.graphMode!="year"){const s=dt("path#price"),l=dt("path#pricedashes");r.value.range(oi.value);const u=ri().x(c=>r.value(c.date)).y(c=>n.value(c.price)??n.value(0));s.attr("d",u(Te.data)),l.attr("d",u(Te.data))}return"zoomed"});return(s,l)=>(se(),Se("svg",{x:"0",width:t.width,class:"Prices"},[U("g",null,[U("path",{id:"price",".origin":a.value,class:"price-baseline",d:i.value,stroke:"var(--color-bg)","stroke-width":"1",fill:"none"},null,40,fB),U("path",{id:"pricedashes",class:"price-dashes",d:i.value,stroke:"crimson","stroke-width":"1",style:{strokeDasharray:"3,1"},fill:"none"},null,8,dB),U("text",{class:"pricename",x:t.width/2,y:o.value,style:{fill:"crimson",fontSize:10},"text-anchor":"middle"}," Strompreis ",8,hB)])],8,cB))}}),gB={class:"d-flex justify-content-end"},mB={id:"powergraphFigure",class:"p-0 m-0"},yB=["viewBox"],vB=["transform"],bB=2,_B=We({__name:"PowerGraph",setup(e){const t=_e(()=>{switch(Te.graphMode){case"year":return"Jahresübersicht";case"month":return"Monatsübersicht";default:return"Verlauf"}});function r(){let l=Ce.usageStackOrder+1;l>bB&&(l=0),Ce.usageStackOrder=l,b$(!0)}function n(l){const u=[[0,Ze.top],[dr,Kr-Ze.top]];l.call(G2().scaleExtent([1,8]).translateExtent([[0,0],[dr,Kr]]).extent(u).filter(o).on("zoom",i))}function i(l){WE.value=l.transform}function o(l){return l.preventDefault(),(!l.ctrlKey||l.type==="wheel")&&!l.button}function a(){Ce.zoomedWidget=1,Ce.zoomGraph=!Ce.zoomGraph}function s(){return Ce.zoomGraph?"fa-minimize":"fa-maximize"}return Hr(()=>{const l=dt("svg#powergraph");n(l)}),(l,u)=>(se(),De(ul,{"full-width":!0},{title:Ae(()=>[Ke($e(t.value),1)]),buttons:Ae(()=>[U("div",gB,[we(Jm,{widgetid:"graphsettings","show-left-button":!0,"show-right-button":!0,"ignore-live":!1,onShiftLeft:le(Qc),onShiftRight:le(Ym),onShiftUp:le(Km),onShiftDown:le(Xm)},null,8,["onShiftLeft","onShiftRight","onShiftUp","onShiftDown"]),U("span",{type:"button",class:"ms-1 p-0 pt-1",onClick:r},[...u[0]||(u[0]=[U("span",{class:"fa-solid fa-lg ps-1 fa-sort"},null,-1)])]),le(Ln)?(se(),Se("span",{key:0,type:"button",class:"ms-1 p-0 pt-1",onClick:a},[U("span",{class:Qe(["fa-solid fa-lg ps-1",s()])},null,2)])):Me("",!0)])]),default:Ae(()=>[wi(U("figure",mB,[(se(),Se("svg",{id:"powergraph",class:"powergraphSvg",viewBox:"0 0 "+le(dr)+" "+le(Kr)},[we(hD,{width:le(dr)-le(Ze).left-2*le(Ze).right,height:(le(Kr)-le(Ze).top-le(Ze).bottom)/2,margin:le(Ze)},null,8,["width","height","margin"]),we(gD,{width:le(dr)-le(Ze).left-2*le(Ze).right,height:(le(Kr)-le(Ze).top-le(Ze).bottom)/2,margin:le(Ze),"stack-order":le(Ce).usageStackOrder},null,8,["width","height","margin","stack-order"]),we(AD,{width:le(dr),height:le(Kr)-le(Ze).top-le(Ze).bottom,margin:le(Ze)},null,8,["width","height","margin"]),U("g",{transform:"translate("+le(Ze).left+","+le(Ze).top+")"},[(le(Te).graphMode=="day"||le(Te).graphMode=="today"||le(Te).graphMode=="live")&&le(rt)[le(At)[0]]!=null&&le(rt)[le(At)[0]].isSocConfigured?(se(),De(gd,{key:0,width:le(dr)-le(Ze).left-2*le(Ze).right,height:(le(Kr)-le(Ze).top-le(Ze).bottom)/2,margin:le(Ze),order:0},null,8,["width","height","margin"])):Me("",!0),(le(Te).graphMode=="day"||le(Te).graphMode=="today"||le(Te).graphMode=="live")&&le(rt)[le(At)[1]]!=null&&le(rt)[le(At)[1]].isSocConfigured?(se(),De(gd,{key:1,width:le(dr)-le(Ze).left-2*le(Ze).right,height:(le(Kr)-le(Ze).top-le(Ze).bottom)/2,margin:le(Ze),order:1},null,8,["width","height","margin"])):Me("",!0),(le(Te).graphMode=="day"||le(Te).graphMode=="today"||le(Te).graphMode=="live")&&le(wt).isBatteryConfigured?(se(),De(gd,{key:2,width:le(dr)-le(Ze).left-2*le(Ze).right,height:(le(Kr)-le(Ze).top-le(Ze).bottom)/2,margin:le(Ze),order:2},null,8,["width","height","margin"])):Me("",!0),le(Ce).showPrices&&(le(Te).graphMode=="day"||le(Te).graphMode=="today")?(se(),De(pB,{key:3,width:le(dr)-le(Ze).left-2*le(Ze).right,height:(le(Kr)-le(Ze).top-le(Ze).bottom)/2,margin:le(Ze)},null,8,["width","height","margin"])):Me("",!0),le(Te).graphMode=="day"||le(Te).graphMode=="today"||le(Te).graphMode=="live"?(se(),De(OD,{key:4,width:le(dr)-le(Ze).left-le(Ze).right,height:(le(Kr)-le(Ze).top-le(Ze).bottom)/2,margin:le(Ze)},null,8,["width","height","margin"])):Me("",!0)],8,vB),le(Te).graphMode=="day"||le(Te).graphMode=="today"?(se(),De(uB,{key:0,width:le(dr)-le(Ze).left-le(Ze).right,height:le(Kr)-le(Ze).top-le(Ze).bottom,margin:le(Ze),data:le(Te).data},null,8,["width","height","margin","data"])):Me("",!0)],8,yB))],512),[[MI,le(Te).data.length>0]])]),_:1}))}}),wB=Xe(_B,[["__scopeId","data-v-58fdbe01"]]),SB=["id"],EB=["x","width","height","fill"],xB=["id","to"],TB=["x","width","height"],AB=["to"],IB=["x","y","width","height"],CB=["to"],MB=We({__name:"EmBar",props:{item:{},id:{},xScale:{},yScale:{},margin:{},height:{}},setup(e){const t=e;let r=0;const n=_e(()=>t.height-t.yScale(t.item[a.value].energy)-t.margin.top-t.margin.bottom),i=_e(()=>{let s=0;return t.item[a.value].energyPv>0&&(s=t.height-t.yScale(t.item[a.value].energyPv)-t.margin.top-t.margin.bottom),s>n.value&&(s=n.value),s}),o=_e(()=>{let s=0;return t.item[a.value].energyBat>0&&(s=t.height-t.yScale(t.item[a.value].energyBat)-t.margin.top-t.margin.bottom),s>n.value&&(s=n.value),s}),a=_e(()=>Te.usePastData?"past":"now");return Iw(()=>{if(Ce.showAnimations&&n.value!=r){const s=document.getElementById("bar-animate-"+t.id);s&&s.beginElement(),r=n.value}}),(s,l)=>(se(),Se("g",{id:"bar-"+t.id,transform:"scale(1,-1) translate (0,-445)"},[U("rect",{class:"bar",x:t.xScale(t.id),y:"0",width:t.xScale.bandwidth(),height:n.value,fill:e.item.color,rx:3,ry:3},[U("animate",{id:"bar-animate-"+t.id,attributeName:"height",from:0,to:n.value,dur:"0.5s"},null,8,xB)],8,EB),U("rect",{class:"bar",x:t.xScale(t.id)+t.xScale.bandwidth()/6,y:"0",width:t.xScale.bandwidth()*2/3,height:i.value,fill:"var(--color-pv)","fill-opacity":"66%"},[U("animate",{attributeName:"height",from:0,to:i.value,dur:"0.5s"},null,8,AB)],8,TB),U("rect",{class:"bar",x:t.xScale(t.id)+t.xScale.bandwidth()/6,y:i.value,width:t.xScale.bandwidth()*2/3,height:o.value,fill:"var(--color-battery)","fill-opacity":"66%"},[U("animate",{attributeName:"height",from:0,to:o.value,dur:"0.5s"},null,8,CB)],8,IB)],8,SB))}}),kB={id:"emBargraph"},PB=We({__name:"EMBarGraph",props:{plotdata:{},xScale:{},yScale:{},margin:{},height:{}},setup(e){const t=e;return(r,n)=>(se(),Se("g",kB,[(se(!0),Se(Ge,null,it(t.plotdata,(i,o)=>(se(),Se("g",{key:o},[we(MB,{id:o.toString(),item:i,"x-scale":t.xScale,"y-scale":t.yScale,margin:t.margin,height:t.height},null,8,["id","item","x-scale","y-scale","margin","height"])]))),128)),n[0]||(n[0]=U("animateTransform",{"attribute-name":"transform",type:"scale",from:"1 0",to:"1 1",begin:"0s",dur:"2s"},null,-1))]))}}),OB=["origin"],LB=We({__name:"EMYAxis",props:{yScale:{type:[Function,Object]},width:{},fontsize:{}},setup(e){const t=e,r=_e(()=>Rc(t.yScale).tickFormat(o=>i(o)).ticks(6).tickSizeInner(-t.width)),n=_e(()=>{const o=dt("g#emYAxis");return o.attr("class","axis").call(r.value),o.append("text").attr("y",6).attr("dy","0.71em").attr("text-anchor","end").text("energy"),o.selectAll(".tick").attr("font-size",t.fontsize),Ce.showGrid?o.selectAll(".tick line").attr("stroke","var(--color-grid)").attr("stroke-width","0.5"):o.selectAll(".tick line").attr("stroke","var(--color-bg)"),o.select(".domain").attr("stroke","var(--color-bg)"),"emYAxis.vue"});function i(o){return o>0?Te.graphMode=="year"?(o/1e6).toString():(o/1e3).toString():""}return(o,a)=>(se(),Se("g",{id:"emYAxis",class:"axis",origin:n.value},null,8,OB))}}),RB=["id"],NB=["x","y","font-size"],$B=["x","y","font-size","fill"],DB=["x","y","font-size","fill"],BB=We({__name:"EmLabel",props:{id:{},item:{},xScale:{},yScale:{},margin:{},height:{},barcount:{},autarchy:{},autText:{}},setup(e){const t=e,r=_e(()=>t.autarchy?t.yScale(t.item[o.value].energy)-25:t.yScale(t.item[o.value].energy)-10),n=_e(()=>{let u=16,c=t.barcount;return c<=5?u=16:c==6?u=14:c>6&&c<=8?u=13:c==9?u=11:c==10?u=10:u=9,u}),i=_e(()=>{let u=12,c=t.barcount;return c<=5?u=12:c==6?u=11:c>6&&c<=8||c==9?u=8:c==10?u=7:u=6,u}),o=_e(()=>Te.usePastData?"past":"now");function a(u,c){return c.length>i.value?c.substring(0,i.value)+".":c}function s(){return t.autarchy?t.autText+": "+t.autarchy.toLocaleString(void 0)+" %":""}function l(){return"var(--color-pv)"}return(u,c)=>(se(),Se("g",{id:"barlabel-"+t.item.name},[U("text",{x:t.xScale(t.id)+t.xScale.bandwidth()/2,y:r.value,"font-size":n.value,"text-anchor":"middle",fill:"var(--color-menu)"},$e(le(qi)(e.item[o.value].energy,le(Ce).decimalPlaces,!1)),9,NB),U("text",{x:t.xScale(t.id)+t.xScale.bandwidth()/2,y:t.yScale(e.item[o.value].energy)-10,"font-size":n.value-2,"text-anchor":"middle",fill:l()},$e(s()),9,$B),U("text",{x:t.xScale(t.id)+t.xScale.bandwidth()/2,y:t.height-t.margin.bottom-5,"font-size":n.value,"text-anchor":"middle",fill:e.item.color,class:Qe(e.item.icon.length<=2?"fas":"")},$e(a(e.item.name,e.item.icon)),11,DB)],8,RB))}});function YE(e){if(e.name=="PV"){const t=Pe.getEnergy("evuOut"),r=Pe.getEnergy("pv");return Math.round((r-t)/r*100)}else if(e.name=="Netz"){const t=Pe.getEnergy("evuOut"),r=Pe.getEnergy("evuIn"),n=Pe.getEnergy("pv"),i=Pe.getEnergy("batOut"),o=Pe.getEnergy("batIn");return Math.round((n+i-t-o)/(n+i+r-t-o)*100)}else return e[Te.graphScope].pvPercentage}const FB={id:"emBarLabels"},UB=We({__name:"EMLabels",props:{plotdata:{},xScale:{},yScale:{},height:{},margin:{}},setup(e){const t=e;function r(n){return n.name=="PV"?"Eigen":"Aut"}return(n,i)=>(se(),Se("g",FB,[(se(!0),Se(Ge,null,it(t.plotdata,(o,a)=>(se(),Se("g",{key:a},[we(BB,{id:a.toString(),item:o,"x-scale":t.xScale,"y-scale":t.yScale,margin:t.margin,height:t.height,barcount:t.plotdata.length,"aut-text":r(o),autarchy:le(YE)(o)},null,8,["id","item","x-scale","y-scale","margin","height","barcount","aut-text","autarchy"])]))),128))]))}}),jB={class:"d-flex justify-content-end"},VB={id:"energymeter",class:"p-0 m-0"},WB={viewBox:"0 0 500 500"},zB=["transform"],HB=["x"],qB={key:0},X0=500,md=500,Q0=12,GB="Energie",YB=We({__name:"EnergyMeter",setup(e){const t={top:25,bottom:30,left:25,right:0},r=_e(()=>{let u=[];return Ce.debug&&a(),Ps.value==!0&&(Ps.value=!1),Pe.items.size==0?zi.value=!0:(zi.value=!1,u=[Pe.getItem("evuIn"),Pe.getItem("pv"),Pe.getItem("evuOut"),Pe.getItem("batOut"),Pe.getItem("charging")],Object.values(Ye).length>1&&Object.values(Ye).forEach(c=>{u.push(c)})),u.push(Pe.getItem("devices")),Ct.forEach(c=>{c.showInGraph&&u.push(c)}),ct.forEach(c=>{c.showInGraph&&u.push(c)}),u=u.concat([Pe.getItem("batIn"),Pe.getItem("house")]),u.filter(c=>c[o.value].energy&&c[o.value].energy>0)}),n=_e(()=>Va().range([0,X0-t.left-t.right]).domain(r.value.map((u,c)=>c.toString())).padding(.4)),i=_e(()=>gn().range([md-t.bottom-t.top,15]).domain([0,e1(r.value,u=>u[o.value].energy)??0])),o=_e(()=>Te.usePastData?"past":"now");function a(){console.debug(["all items:",Pe])}function s(){Ce.zoomedWidget=2,Ce.zoomGraph=!Ce.zoomGraph}function l(){return Ce.zoomGraph?"fa-minimize":"fa-maximize"}return(u,c)=>(se(),De(ul,{"full-width":!0},{title:Ae(()=>[Ke($e(GB))]),buttons:Ae(()=>[U("div",jB,[we(Jm,{widgetid:"graphsettings","show-left-button":!0,"show-right-button":!0,"ignore-live":!0,onShiftLeft:le(Qc),onShiftRight:le(Ym),onShiftUp:le(Km),onShiftDown:le(Xm)},null,8,["onShiftLeft","onShiftRight","onShiftUp","onShiftDown"]),le(Ln)?(se(),Se("span",{key:0,type:"button",class:"ms-1 p-0 pt-1",onClick:s},[U("span",{class:Qe(["fa-solid fa-lg ps-1",l()])},null,2)])):Me("",!0)])]),default:Ae(()=>[U("figure",VB,[(se(),Se("svg",WB,[U("g",{transform:"translate("+t.left+","+t.top+")"},[we(PB,{plotdata:r.value,"x-scale":n.value,"y-scale":i.value,height:md,margin:t},null,8,["plotdata","x-scale","y-scale"]),we(LB,{"y-scale":i.value,width:X0,fontsize:Q0,config:le(Ce)},null,8,["y-scale","config"]),U("text",{x:-t.left,y:"-15",fill:"var(--color-axis)","font-size":Q0},$e(le(Te).graphMode=="year"?"MWh":"kWh"),9,HB),we(UB,{plotdata:r.value,"x-scale":n.value,"y-scale":i.value,height:md,margin:t},null,8,["plotdata","x-scale","y-scale"])],8,zB)]))]),le(zi)?(se(),Se("p",qB,"No data")):Me("",!0)]),_:1}))}}),KB=Xe(YB,[["__scopeId","data-v-5d0b5b46"]]),XB=["id"],QB=["y","width","fill"],JB=["y","width"],ZB=["y","x","width"],e3=We({__name:"EnergyBar",props:{id:{},item:{},yScale:{},xScale:{},itemHeight:{}},setup(e){const t=e,r=_e(()=>t.xScale(t.item[Te.graphScope].energy)),n=_e(()=>{let o=0;return t.item[Te.graphScope].energyPv>0&&(o=t.xScale(t.item[Te.graphScope].energyPv)),o>r.value&&(o=r.value),o}),i=_e(()=>{let o=0;return t.item[Te.graphScope].energyBat>0&&(o=t.xScale(t.item[Te.graphScope].energyBat)),o>r.value&&(o=r.value),o});return(o,a)=>(se(),Se("g",{id:`bar-${t.item.name}`},[U("rect",{class:"bar",y:t.yScale(t.id)+t.itemHeight/2-4,x:"0",rx:"6",ry:"6",height:"12",width:r.value,fill:e.item.color},null,8,QB),U("rect",{class:"bar",y:t.yScale(t.id)+t.itemHeight/2+10,x:"0",rx:"3",ry:"3",height:"7",width:n.value,fill:"var(--color-pv)","fill-opacity":"100%"},null,8,JB),U("rect",{class:"bar",y:t.yScale(t.id)+t.itemHeight/2+10,x:n.value,rx:"3",ry:"3",height:"7",width:i.value,fill:"var(--color-battery)","fill-opacity":"100%"},null,8,ZB)],8,XB))}}),t3={id:"emBargraph"},r3=We({__name:"BarGraph",props:{plotdata:{},yscale:{},xscale:{},itemHeight:{}},setup(e){const t=e;return(r,n)=>(se(),Se("g",t3,[(se(!0),Se(Ge,null,it(t.plotdata,(i,o)=>(se(),Se("g",{key:o},[we(e3,{id:o.toString(),item:i,"x-scale":t.xscale,"y-scale":t.yscale,"item-height":e.itemHeight},null,8,["id","item","x-scale","y-scale","item-height"])]))),128))]))}}),n3=["id"],i3=["y","x","fill"],o3=["y","x"],s3=["y","x","font-size"],yd=24,a3=We({__name:"EnergyLabel",props:{id:{},item:{},yscale:{},margin:{},width:{},itemHeight:{},autarchy:{},autText:{}},setup(e){const t=e,r=_e(()=>t.yscale(t.id)+t.itemHeight/3);function n(){return t.autarchy?t.autText+": "+t.autarchy.toLocaleString(void 0)+" %":""}function i(o){return o.length>14?o.slice(0,13)+"...":o}return(o,a)=>(se(),Se("g",{id:"barlabel-"+t.id},[U("text",{y:r.value,x:t.margin.left,"font-size":yd,"text-anchor":"start",fill:e.item.color,class:Qe(e.item.icon.length<=2?"fas":"")},$e(i(t.item.icon)),11,i3),U("text",{y:r.value,x:t.width/2+t.margin.left,"font-size":yd,"text-anchor":"middle",fill:"var(--color-menu)"},$e(le(qi)(e.item[le(Te).graphScope].energy,le(Ce).decimalPlaces,!1)),9,o3),U("text",{y:r.value,x:t.width-t.margin.right,"font-size":yd-2,"text-anchor":"end",fill:"var(--color-pv)"},$e(n()),9,s3)],8,n3))}}),l3={id:"emBarLabels"},u3=We({__name:"EnergyLabels",props:{plotdata:{},yscale:{},width:{},itemHeight:{},margin:{}},setup(e){const t=e;function r(n){return n.name=="PV"?"Eigen":"Aut"}return(n,i)=>(se(),Se("g",l3,[(se(!0),Se(Ge,null,it(t.plotdata,(o,a)=>(se(),Se("g",{key:a},[we(a3,{id:a.toString(),item:o,yscale:t.yscale,margin:t.margin,width:t.width,"item-height":e.itemHeight,"aut-text":r(o),autarchy:le(YE)(o)},null,8,["id","item","yscale","margin","width","item-height","aut-text","autarchy"])]))),128))]))}}),c3={class:"d-flex justify-content-end"},f3={id:"energymeter",class:"p-0 m-0"},d3=["viewBox"],h3=["transform"],p3=["x"],g3={key:0},J0=500,vd=60,m3=12,y3="Energie",v3=We({__name:"EnergyMeter2",setup(e){const t={top:0,bottom:30,left:0,right:0},r=_e(()=>n.value.length*vd+t.top+t.bottom),n=_e(()=>{let l=[];return Ce.debug&&a(),Ps.value==!0&&(Ps.value=!1),Pe.items.size==0?zi.value=!0:(zi.value=!1,l=[Pe.getItem("evuIn"),Pe.getItem("pv"),Pe.getItem("evuOut"),Pe.getItem("batOut"),Pe.getItem("charging")],Object.values(Ye).length>1&&Object.values(Ye).forEach(u=>{l.push(u)})),l.push(Pe.getItem("devices")),Ct.forEach(u=>{u.showInGraph&&l.push(u)}),ct.forEach(u=>{u.showInGraph&&l.push(u)}),l=l.concat([Pe.getItem("batIn"),Pe.getItem("house")]),l.filter(u=>u[Te.graphScope].energy&&u[Te.graphScope].energy>0)}),i=_e(()=>gn().range([0,J0-t.left-t.right]).domain([0,e1(n.value,l=>(Te.graphMode=="live"||Te.graphMode=="today",l[Te.graphScope].energy))??0])),o=_e(()=>Va().range([t.top,r.value-t.bottom]).domain(n.value.map((l,u)=>u.toString())).padding(.1));function a(){console.debug(["all items:",Pe])}function s(){Ce.zoomedWidget=2,Ce.zoomGraph=!Ce.zoomGraph}return(l,u)=>(se(),De(ul,{"full-width":!0},{title:Ae(()=>[Ke($e(y3))]),buttons:Ae(()=>[U("div",c3,[we(Jm,{widgetid:"graphsettings","show-left-button":!0,"show-right-button":!0,"ignore-live":!0,onShiftLeft:le(Qc),onShiftRight:le(Ym),onShiftUp:le(Km),onShiftDown:le(Xm)},null,8,["onShiftLeft","onShiftRight","onShiftUp","onShiftDown"]),le(Ln)?(se(),Se("span",{key:0,type:"button",class:"ms-1 p-0 pt-1",onClick:s},[...u[0]||(u[0]=[U("span",{class:"fa-solid fa-lg ps-1 fa-magnifying-glass"},null,-1)])])):Me("",!0)])]),default:Ae(()=>[U("figure",f3,[(se(),Se("svg",{viewBox:"0 0 500 "+r.value},[U("g",{transform:"translate("+t.left+","+t.top+")"},[we(r3,{plotdata:n.value,xscale:i.value,yscale:o.value,"item-height":vd},null,8,["plotdata","xscale","yscale"]),U("text",{x:-t.left,y:"-15",fill:"var(--color-axis)","font-size":m3},$e(le(Te).graphMode=="year"?"MWh":"kWh"),9,p3),we(u3,{plotdata:n.value,yscale:o.value,width:J0,"item-height":vd,margin:t},null,8,["plotdata","yscale"])],8,h3)],8,d3))]),le(zi)?(se(),Se("p",g3,"No data")):Me("",!0)]),_:1}))}}),b3=Xe(v3,[["__scopeId","data-v-c71dc5a3"]]),_3={class:"d-flex flex-column align-items-center justify-content-start infoitem"},w3=We({__name:"InfoItem",props:{heading:{},small:{type:Boolean}},setup(e){const t=e,r=_e(()=>t.small?{"font-size":"var(--font-small)"}:{"font-size":"var(--font-small)"}),n=_e(()=>t.small?{"font-size":"var(--font-small)"}:{"font-size":"var(--font-normal)"}),i=_e(()=>t.small?"mt-0":"mt-1");return(o,a)=>(se(),Se("span",_3,[U("span",{class:Qe(["d-flex heading",i.value]),style:ot(r.value)},$e(t.heading),7),U("span",{class:"d-flex my-0 me-0 align-items-center content",style:ot(n.value)},[It(o.$slots,"default",{},void 0,!0)],4)]))}}),lt=Xe(w3,[["__scopeId","data-v-f6af00e8"]]);var mr="top",jr="bottom",Vr="right",yr="left",Jc="auto",qs=[mr,jr,Vr,yr],$o="start",Os="end",KE="clippingParents",Zm="viewport",ss="popper",XE="reference",xg=qs.reduce(function(e,t){return e.concat([t+"-"+$o,t+"-"+Os])},[]),ey=[].concat(qs,[Jc]).reduce(function(e,t){return e.concat([t,t+"-"+$o,t+"-"+Os])},[]),QE="beforeRead",JE="read",ZE="afterRead",ex="beforeMain",tx="main",rx="afterMain",nx="beforeWrite",ix="write",ox="afterWrite",sx=[QE,JE,ZE,ex,tx,rx,nx,ix,ox];function Bn(e){return e?(e.nodeName||"").toLowerCase():null}function Wr(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function Do(e){var t=Wr(e).Element;return e instanceof t||e instanceof Element}function en(e){var t=Wr(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function ty(e){if(typeof ShadowRoot>"u")return!1;var t=Wr(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}function S3(e){var t=e.state;Object.keys(t.elements).forEach(function(r){var n=t.styles[r]||{},i=t.attributes[r]||{},o=t.elements[r];!en(o)||!Bn(o)||(Object.assign(o.style,n),Object.keys(i).forEach(function(a){var s=i[a];s===!1?o.removeAttribute(a):o.setAttribute(a,s===!0?"":s)}))})}function E3(e){var t=e.state,r={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,r.popper),t.styles=r,t.elements.arrow&&Object.assign(t.elements.arrow.style,r.arrow),function(){Object.keys(t.elements).forEach(function(n){var i=t.elements[n],o=t.attributes[n]||{},a=Object.keys(t.styles.hasOwnProperty(n)?t.styles[n]:r[n]),s=a.reduce(function(l,u){return l[u]="",l},{});!en(i)||!Bn(i)||(Object.assign(i.style,s),Object.keys(o).forEach(function(l){i.removeAttribute(l)}))})}}const ax={name:"applyStyles",enabled:!0,phase:"write",fn:S3,effect:E3,requires:["computeStyles"]};function Rn(e){return e.split("-")[0]}var Mo=Math.max,dc=Math.min,Ls=Math.round;function Tg(){var e=navigator.userAgentData;return e!=null&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function lx(){return!/^((?!chrome|android).)*safari/i.test(Tg())}function Rs(e,t,r){t===void 0&&(t=!1),r===void 0&&(r=!1);var n=e.getBoundingClientRect(),i=1,o=1;t&&en(e)&&(i=e.offsetWidth>0&&Ls(n.width)/e.offsetWidth||1,o=e.offsetHeight>0&&Ls(n.height)/e.offsetHeight||1);var a=Do(e)?Wr(e):window,s=a.visualViewport,l=!lx()&&r,u=(n.left+(l&&s?s.offsetLeft:0))/i,c=(n.top+(l&&s?s.offsetTop:0))/o,f=n.width/i,d=n.height/o;return{width:f,height:d,top:c,right:u+f,bottom:c+d,left:u,x:u,y:c}}function ry(e){var t=Rs(e),r=e.offsetWidth,n=e.offsetHeight;return Math.abs(t.width-r)<=1&&(r=t.width),Math.abs(t.height-n)<=1&&(n=t.height),{x:e.offsetLeft,y:e.offsetTop,width:r,height:n}}function ux(e,t){var r=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(r&&ty(r)){var n=t;do{if(n&&e.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function bi(e){return Wr(e).getComputedStyle(e)}function x3(e){return["table","td","th"].indexOf(Bn(e))>=0}function Zi(e){return((Do(e)?e.ownerDocument:e.document)||window.document).documentElement}function Zc(e){return Bn(e)==="html"?e:e.assignedSlot||e.parentNode||(ty(e)?e.host:null)||Zi(e)}function Z0(e){return!en(e)||bi(e).position==="fixed"?null:e.offsetParent}function T3(e){var t=/firefox/i.test(Tg()),r=/Trident/i.test(Tg());if(r&&en(e)){var n=bi(e);if(n.position==="fixed")return null}var i=Zc(e);for(ty(i)&&(i=i.host);en(i)&&["html","body"].indexOf(Bn(i))<0;){var o=bi(i);if(o.transform!=="none"||o.perspective!=="none"||o.contain==="paint"||["transform","perspective"].indexOf(o.willChange)!==-1||t&&o.willChange==="filter"||t&&o.filter&&o.filter!=="none")return i;i=i.parentNode}return null}function cl(e){for(var t=Wr(e),r=Z0(e);r&&x3(r)&&bi(r).position==="static";)r=Z0(r);return r&&(Bn(r)==="html"||Bn(r)==="body"&&bi(r).position==="static")?t:r||T3(e)||t}function ny(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function Pa(e,t,r){return Mo(e,dc(t,r))}function A3(e,t,r){var n=Pa(e,t,r);return n>r?r:n}function cx(){return{top:0,right:0,bottom:0,left:0}}function fx(e){return Object.assign({},cx(),e)}function dx(e,t){return t.reduce(function(r,n){return r[n]=e,r},{})}var I3=function(t,r){return t=typeof t=="function"?t(Object.assign({},r.rects,{placement:r.placement})):t,fx(typeof t!="number"?t:dx(t,qs))};function C3(e){var t,r=e.state,n=e.name,i=e.options,o=r.elements.arrow,a=r.modifiersData.popperOffsets,s=Rn(r.placement),l=ny(s),u=[yr,Vr].indexOf(s)>=0,c=u?"height":"width";if(!(!o||!a)){var f=I3(i.padding,r),d=ry(o),h=l==="y"?mr:yr,p=l==="y"?jr:Vr,y=r.rects.reference[c]+r.rects.reference[l]-a[l]-r.rects.popper[c],v=a[l]-r.rects.reference[l],g=cl(o),m=g?l==="y"?g.clientHeight||0:g.clientWidth||0:0,b=y/2-v/2,_=f[h],w=m-d[c]-f[p],E=m/2-d[c]/2+b,T=Pa(_,E,w),C=l;r.modifiersData[n]=(t={},t[C]=T,t.centerOffset=T-E,t)}}function M3(e){var t=e.state,r=e.options,n=r.element,i=n===void 0?"[data-popper-arrow]":n;i!=null&&(typeof i=="string"&&(i=t.elements.popper.querySelector(i),!i)||ux(t.elements.popper,i)&&(t.elements.arrow=i))}const hx={name:"arrow",enabled:!0,phase:"main",fn:C3,effect:M3,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Ns(e){return e.split("-")[1]}var k3={top:"auto",right:"auto",bottom:"auto",left:"auto"};function P3(e,t){var r=e.x,n=e.y,i=t.devicePixelRatio||1;return{x:Ls(r*i)/i||0,y:Ls(n*i)/i||0}}function e_(e){var t,r=e.popper,n=e.popperRect,i=e.placement,o=e.variation,a=e.offsets,s=e.position,l=e.gpuAcceleration,u=e.adaptive,c=e.roundOffsets,f=e.isFixed,d=a.x,h=d===void 0?0:d,p=a.y,y=p===void 0?0:p,v=typeof c=="function"?c({x:h,y}):{x:h,y};h=v.x,y=v.y;var g=a.hasOwnProperty("x"),m=a.hasOwnProperty("y"),b=yr,_=mr,w=window;if(u){var E=cl(r),T="clientHeight",C="clientWidth";if(E===Wr(r)&&(E=Zi(r),bi(E).position!=="static"&&s==="absolute"&&(T="scrollHeight",C="scrollWidth")),E=E,i===mr||(i===yr||i===Vr)&&o===Os){_=jr;var j=f&&E===w&&w.visualViewport?w.visualViewport.height:E[T];y-=j-n.height,y*=l?1:-1}if(i===yr||(i===mr||i===jr)&&o===Os){b=Vr;var P=f&&E===w&&w.visualViewport?w.visualViewport.width:E[C];h-=P-n.width,h*=l?1:-1}}var N=Object.assign({position:s},u&&k3),M=c===!0?P3({x:h,y},Wr(r)):{x:h,y};if(h=M.x,y=M.y,l){var R;return Object.assign({},N,(R={},R[_]=m?"0":"",R[b]=g?"0":"",R.transform=(w.devicePixelRatio||1)<=1?"translate("+h+"px, "+y+"px)":"translate3d("+h+"px, "+y+"px, 0)",R))}return Object.assign({},N,(t={},t[_]=m?y+"px":"",t[b]=g?h+"px":"",t.transform="",t))}function O3(e){var t=e.state,r=e.options,n=r.gpuAcceleration,i=n===void 0?!0:n,o=r.adaptive,a=o===void 0?!0:o,s=r.roundOffsets,l=s===void 0?!0:s,u={placement:Rn(t.placement),variation:Ns(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:i,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,e_(Object.assign({},u,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:a,roundOffsets:l})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,e_(Object.assign({},u,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}const px={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:O3,data:{}};var $l={passive:!0};function L3(e){var t=e.state,r=e.instance,n=e.options,i=n.scroll,o=i===void 0?!0:i,a=n.resize,s=a===void 0?!0:a,l=Wr(t.elements.popper),u=[].concat(t.scrollParents.reference,t.scrollParents.popper);return o&&u.forEach(function(c){c.addEventListener("scroll",r.update,$l)}),s&&l.addEventListener("resize",r.update,$l),function(){o&&u.forEach(function(c){c.removeEventListener("scroll",r.update,$l)}),s&&l.removeEventListener("resize",r.update,$l)}}const gx={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:L3,data:{}};var R3={left:"right",right:"left",bottom:"top",top:"bottom"};function Ou(e){return e.replace(/left|right|bottom|top/g,function(t){return R3[t]})}var N3={start:"end",end:"start"};function t_(e){return e.replace(/start|end/g,function(t){return N3[t]})}function iy(e){var t=Wr(e),r=t.pageXOffset,n=t.pageYOffset;return{scrollLeft:r,scrollTop:n}}function oy(e){return Rs(Zi(e)).left+iy(e).scrollLeft}function $3(e,t){var r=Wr(e),n=Zi(e),i=r.visualViewport,o=n.clientWidth,a=n.clientHeight,s=0,l=0;if(i){o=i.width,a=i.height;var u=lx();(u||!u&&t==="fixed")&&(s=i.offsetLeft,l=i.offsetTop)}return{width:o,height:a,x:s+oy(e),y:l}}function D3(e){var t,r=Zi(e),n=iy(e),i=(t=e.ownerDocument)==null?void 0:t.body,o=Mo(r.scrollWidth,r.clientWidth,i?i.scrollWidth:0,i?i.clientWidth:0),a=Mo(r.scrollHeight,r.clientHeight,i?i.scrollHeight:0,i?i.clientHeight:0),s=-n.scrollLeft+oy(e),l=-n.scrollTop;return bi(i||r).direction==="rtl"&&(s+=Mo(r.clientWidth,i?i.clientWidth:0)-o),{width:o,height:a,x:s,y:l}}function sy(e){var t=bi(e),r=t.overflow,n=t.overflowX,i=t.overflowY;return/auto|scroll|overlay|hidden/.test(r+i+n)}function mx(e){return["html","body","#document"].indexOf(Bn(e))>=0?e.ownerDocument.body:en(e)&&sy(e)?e:mx(Zc(e))}function Oa(e,t){var r;t===void 0&&(t=[]);var n=mx(e),i=n===((r=e.ownerDocument)==null?void 0:r.body),o=Wr(n),a=i?[o].concat(o.visualViewport||[],sy(n)?n:[]):n,s=t.concat(a);return i?s:s.concat(Oa(Zc(a)))}function Ag(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function B3(e,t){var r=Rs(e,!1,t==="fixed");return r.top=r.top+e.clientTop,r.left=r.left+e.clientLeft,r.bottom=r.top+e.clientHeight,r.right=r.left+e.clientWidth,r.width=e.clientWidth,r.height=e.clientHeight,r.x=r.left,r.y=r.top,r}function r_(e,t,r){return t===Zm?Ag($3(e,r)):Do(t)?B3(t,r):Ag(D3(Zi(e)))}function F3(e){var t=Oa(Zc(e)),r=["absolute","fixed"].indexOf(bi(e).position)>=0,n=r&&en(e)?cl(e):e;return Do(n)?t.filter(function(i){return Do(i)&&ux(i,n)&&Bn(i)!=="body"}):[]}function U3(e,t,r,n){var i=t==="clippingParents"?F3(e):[].concat(t),o=[].concat(i,[r]),a=o[0],s=o.reduce(function(l,u){var c=r_(e,u,n);return l.top=Mo(c.top,l.top),l.right=dc(c.right,l.right),l.bottom=dc(c.bottom,l.bottom),l.left=Mo(c.left,l.left),l},r_(e,a,n));return s.width=s.right-s.left,s.height=s.bottom-s.top,s.x=s.left,s.y=s.top,s}function yx(e){var t=e.reference,r=e.element,n=e.placement,i=n?Rn(n):null,o=n?Ns(n):null,a=t.x+t.width/2-r.width/2,s=t.y+t.height/2-r.height/2,l;switch(i){case mr:l={x:a,y:t.y-r.height};break;case jr:l={x:a,y:t.y+t.height};break;case Vr:l={x:t.x+t.width,y:s};break;case yr:l={x:t.x-r.width,y:s};break;default:l={x:t.x,y:t.y}}var u=i?ny(i):null;if(u!=null){var c=u==="y"?"height":"width";switch(o){case $o:l[u]=l[u]-(t[c]/2-r[c]/2);break;case Os:l[u]=l[u]+(t[c]/2-r[c]/2);break}}return l}function $s(e,t){t===void 0&&(t={});var r=t,n=r.placement,i=n===void 0?e.placement:n,o=r.strategy,a=o===void 0?e.strategy:o,s=r.boundary,l=s===void 0?KE:s,u=r.rootBoundary,c=u===void 0?Zm:u,f=r.elementContext,d=f===void 0?ss:f,h=r.altBoundary,p=h===void 0?!1:h,y=r.padding,v=y===void 0?0:y,g=fx(typeof v!="number"?v:dx(v,qs)),m=d===ss?XE:ss,b=e.rects.popper,_=e.elements[p?m:d],w=U3(Do(_)?_:_.contextElement||Zi(e.elements.popper),l,c,a),E=Rs(e.elements.reference),T=yx({reference:E,element:b,placement:i}),C=Ag(Object.assign({},b,T)),j=d===ss?C:E,P={top:w.top-j.top+g.top,bottom:j.bottom-w.bottom+g.bottom,left:w.left-j.left+g.left,right:j.right-w.right+g.right},N=e.modifiersData.offset;if(d===ss&&N){var M=N[i];Object.keys(P).forEach(function(R){var O=[Vr,jr].indexOf(R)>=0?1:-1,G=[mr,jr].indexOf(R)>=0?"y":"x";P[R]+=M[G]*O})}return P}function j3(e,t){t===void 0&&(t={});var r=t,n=r.placement,i=r.boundary,o=r.rootBoundary,a=r.padding,s=r.flipVariations,l=r.allowedAutoPlacements,u=l===void 0?ey:l,c=Ns(n),f=c?s?xg:xg.filter(function(p){return Ns(p)===c}):qs,d=f.filter(function(p){return u.indexOf(p)>=0});d.length===0&&(d=f);var h=d.reduce(function(p,y){return p[y]=$s(e,{placement:y,boundary:i,rootBoundary:o,padding:a})[Rn(y)],p},{});return Object.keys(h).sort(function(p,y){return h[p]-h[y]})}function V3(e){if(Rn(e)===Jc)return[];var t=Ou(e);return[t_(e),t,t_(t)]}function W3(e){var t=e.state,r=e.options,n=e.name;if(!t.modifiersData[n]._skip){for(var i=r.mainAxis,o=i===void 0?!0:i,a=r.altAxis,s=a===void 0?!0:a,l=r.fallbackPlacements,u=r.padding,c=r.boundary,f=r.rootBoundary,d=r.altBoundary,h=r.flipVariations,p=h===void 0?!0:h,y=r.allowedAutoPlacements,v=t.options.placement,g=Rn(v),m=g===v,b=l||(m||!p?[Ou(v)]:V3(v)),_=[v].concat(b).reduce(function(ge,K){return ge.concat(Rn(K)===Jc?j3(t,{placement:K,boundary:c,rootBoundary:f,padding:u,flipVariations:p,allowedAutoPlacements:y}):K)},[]),w=t.rects.reference,E=t.rects.popper,T=new Map,C=!0,j=_[0],P=0;P<_.length;P++){var N=_[P],M=Rn(N),R=Ns(N)===$o,O=[mr,jr].indexOf(M)>=0,G=O?"width":"height",q=$s(t,{placement:N,boundary:c,rootBoundary:f,altBoundary:d,padding:u}),z=O?R?Vr:yr:R?jr:mr;w[G]>E[G]&&(z=Ou(z));var B=Ou(z),ae=[];if(o&&ae.push(q[M]<=0),s&&ae.push(q[z]<=0,q[B]<=0),ae.every(function(ge){return ge})){j=N,C=!1;break}T.set(N,ae)}if(C)for(var $=p?3:1,ie=function(K){var ee=_.find(function(X){var V=T.get(X);if(V)return V.slice(0,K).every(function(Y){return Y})});if(ee)return j=ee,"break"},Z=$;Z>0;Z--){var ue=ie(Z);if(ue==="break")break}t.placement!==j&&(t.modifiersData[n]._skip=!0,t.placement=j,t.reset=!0)}}const vx={name:"flip",enabled:!0,phase:"main",fn:W3,requiresIfExists:["offset"],data:{_skip:!1}};function n_(e,t,r){return r===void 0&&(r={x:0,y:0}),{top:e.top-t.height-r.y,right:e.right-t.width+r.x,bottom:e.bottom-t.height+r.y,left:e.left-t.width-r.x}}function i_(e){return[mr,Vr,jr,yr].some(function(t){return e[t]>=0})}function z3(e){var t=e.state,r=e.name,n=t.rects.reference,i=t.rects.popper,o=t.modifiersData.preventOverflow,a=$s(t,{elementContext:"reference"}),s=$s(t,{altBoundary:!0}),l=n_(a,n),u=n_(s,i,o),c=i_(l),f=i_(u);t.modifiersData[r]={referenceClippingOffsets:l,popperEscapeOffsets:u,isReferenceHidden:c,hasPopperEscaped:f},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":c,"data-popper-escaped":f})}const bx={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:z3};function H3(e,t,r){var n=Rn(e),i=[yr,mr].indexOf(n)>=0?-1:1,o=typeof r=="function"?r(Object.assign({},t,{placement:e})):r,a=o[0],s=o[1];return a=a||0,s=(s||0)*i,[yr,Vr].indexOf(n)>=0?{x:s,y:a}:{x:a,y:s}}function q3(e){var t=e.state,r=e.options,n=e.name,i=r.offset,o=i===void 0?[0,0]:i,a=ey.reduce(function(c,f){return c[f]=H3(f,t.rects,o),c},{}),s=a[t.placement],l=s.x,u=s.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=l,t.modifiersData.popperOffsets.y+=u),t.modifiersData[n]=a}const _x={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:q3};function G3(e){var t=e.state,r=e.name;t.modifiersData[r]=yx({reference:t.rects.reference,element:t.rects.popper,placement:t.placement})}const Sx={name:"popperOffsets",enabled:!0,phase:"read",fn:G3,data:{}};function Y3(e){return e==="x"?"y":"x"}function K3(e){var t=e.state,r=e.options,n=e.name,i=r.mainAxis,o=i===void 0?!0:i,a=r.altAxis,s=a===void 0?!1:a,l=r.boundary,u=r.rootBoundary,c=r.altBoundary,f=r.padding,d=r.tether,h=d===void 0?!0:d,p=r.tetherOffset,y=p===void 0?0:p,v=$s(t,{boundary:l,rootBoundary:u,padding:f,altBoundary:c}),g=Rn(t.placement),m=Ns(t.placement),b=!m,_=ny(g),w=Y3(_),E=t.modifiersData.popperOffsets,T=t.rects.reference,C=t.rects.popper,j=typeof y=="function"?y(Object.assign({},t.rects,{placement:t.placement})):y,P=typeof j=="number"?{mainAxis:j,altAxis:j}:Object.assign({mainAxis:0,altAxis:0},j),N=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,M={x:0,y:0};if(E){if(o){var R,O=_==="y"?mr:yr,G=_==="y"?jr:Vr,q=_==="y"?"height":"width",z=E[_],B=z+v[O],ae=z-v[G],$=h?-C[q]/2:0,ie=m===$o?T[q]:C[q],Z=m===$o?-C[q]:-T[q],ue=t.elements.arrow,ge=h&&ue?ry(ue):{width:0,height:0},K=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:cx(),ee=K[O],X=K[G],V=Pa(0,T[q],ge[q]),Y=b?T[q]/2-$-V-ee-P.mainAxis:ie-V-ee-P.mainAxis,re=b?-T[q]/2+$+V+X+P.mainAxis:Z+V+X+P.mainAxis,ne=t.elements.arrow&&cl(t.elements.arrow),k=ne?_==="y"?ne.clientTop||0:ne.clientLeft||0:0,L=(R=N?.[_])!=null?R:0,F=z+Y-L-k,D=z+re-L,H=Pa(h?dc(B,F):B,z,h?Mo(ae,D):ae);E[_]=H,M[_]=H-z}if(s){var Q,de=_==="x"?mr:yr,J=_==="x"?jr:Vr,fe=E[w],te=w==="y"?"height":"width",me=fe+v[de],Ee=fe-v[J],xe=[mr,yr].indexOf(g)!==-1,Ne=(Q=N?.[w])!=null?Q:0,I=xe?me:fe-T[te]-C[te]-Ne+P.altAxis,x=xe?fe+T[te]+C[te]-Ne-P.altAxis:Ee,S=h&&xe?A3(I,fe,x):Pa(h?I:me,fe,h?x:Ee);E[w]=S,M[w]=S-fe}t.modifiersData[n]=M}}const Ex={name:"preventOverflow",enabled:!0,phase:"main",fn:K3,requiresIfExists:["offset"]};function X3(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function Q3(e){return e===Wr(e)||!en(e)?iy(e):X3(e)}function J3(e){var t=e.getBoundingClientRect(),r=Ls(t.width)/e.offsetWidth||1,n=Ls(t.height)/e.offsetHeight||1;return r!==1||n!==1}function Z3(e,t,r){r===void 0&&(r=!1);var n=en(t),i=en(t)&&J3(t),o=Zi(t),a=Rs(e,i,r),s={scrollLeft:0,scrollTop:0},l={x:0,y:0};return(n||!n&&!r)&&((Bn(t)!=="body"||sy(o))&&(s=Q3(t)),en(t)?(l=Rs(t,!0),l.x+=t.clientLeft,l.y+=t.clientTop):o&&(l.x=oy(o))),{x:a.left+s.scrollLeft-l.x,y:a.top+s.scrollTop-l.y,width:a.width,height:a.height}}function eF(e){var t=new Map,r=new Set,n=[];e.forEach(function(o){t.set(o.name,o)});function i(o){r.add(o.name);var a=[].concat(o.requires||[],o.requiresIfExists||[]);a.forEach(function(s){if(!r.has(s)){var l=t.get(s);l&&i(l)}}),n.push(o)}return e.forEach(function(o){r.has(o.name)||i(o)}),n}function tF(e){var t=eF(e);return sx.reduce(function(r,n){return r.concat(t.filter(function(i){return i.phase===n}))},[])}function rF(e){var t;return function(){return t||(t=new Promise(function(r){Promise.resolve().then(function(){t=void 0,r(e())})})),t}}function nF(e){var t=e.reduce(function(r,n){var i=r[n.name];return r[n.name]=i?Object.assign({},i,n,{options:Object.assign({},i.options,n.options),data:Object.assign({},i.data,n.data)}):n,r},{});return Object.keys(t).map(function(r){return t[r]})}var o_={placement:"bottom",modifiers:[],strategy:"absolute"};function s_(){for(var e=arguments.length,t=new Array(e),r=0;r(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,(t,r)=>`#${CSS.escape(r)}`)),e),aF=e=>e==null?`${e}`:Object.prototype.toString.call(e).match(/\s([a-z]+)/i)[1].toLowerCase(),lF=e=>{do e+=Math.floor(Math.random()*oF);while(document.getElementById(e));return e},uF=e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:r}=window.getComputedStyle(e);const n=Number.parseFloat(t),i=Number.parseFloat(r);return!n&&!i?0:(t=t.split(",")[0],r=r.split(",")[0],(Number.parseFloat(t)+Number.parseFloat(r))*sF)},Ix=e=>{e.dispatchEvent(new Event(Ig))},si=e=>!e||typeof e!="object"?!1:(typeof e.jquery<"u"&&(e=e[0]),typeof e.nodeType<"u"),Gi=e=>si(e)?e.jquery?e[0]:e:typeof e=="string"&&e.length>0?document.querySelector(Ax(e)):null,Gs=e=>{if(!si(e)||e.getClientRects().length===0)return!1;const t=getComputedStyle(e).getPropertyValue("visibility")==="visible",r=e.closest("details:not([open])");if(!r)return t;if(r!==e){const n=e.closest("summary");if(n&&n.parentNode!==r||n===null)return!1}return t},Yi=e=>!e||e.nodeType!==Node.ELEMENT_NODE||e.classList.contains("disabled")?!0:typeof e.disabled<"u"?e.disabled:e.hasAttribute("disabled")&&e.getAttribute("disabled")!=="false",Cx=e=>{if(!document.documentElement.attachShadow)return null;if(typeof e.getRootNode=="function"){const t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?Cx(e.parentNode):null},hc=()=>{},fl=e=>{e.offsetHeight},Mx=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,_d=[],cF=e=>{document.readyState==="loading"?(_d.length||document.addEventListener("DOMContentLoaded",()=>{for(const t of _d)t()}),_d.push(e)):e()},tn=()=>document.documentElement.dir==="rtl",nn=e=>{cF(()=>{const t=Mx();if(t){const r=e.NAME,n=t.fn[r];t.fn[r]=e.jQueryInterface,t.fn[r].Constructor=e,t.fn[r].noConflict=()=>(t.fn[r]=n,e.jQueryInterface)}})},Ir=(e,t=[],r=e)=>typeof e=="function"?e.call(...t):r,kx=(e,t,r=!0)=>{if(!r){Ir(e);return}const i=uF(t)+5;let o=!1;const a=({target:s})=>{s===t&&(o=!0,t.removeEventListener(Ig,a),Ir(e))};t.addEventListener(Ig,a),setTimeout(()=>{o||Ix(t)},i)},ly=(e,t,r,n)=>{const i=e.length;let o=e.indexOf(t);return o===-1?!r&&n?e[i-1]:e[0]:(o+=r?1:-1,n&&(o=(o+i)%i),e[Math.max(0,Math.min(o,i-1))])},fF=/[^.]*(?=\..*)\.|.*/,dF=/\..*/,hF=/::\d+$/,wd={};let a_=1;const Px={mouseenter:"mouseover",mouseleave:"mouseout"},pF=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function Ox(e,t){return t&&`${t}::${a_++}`||e.uidEvent||a_++}function Lx(e){const t=Ox(e);return e.uidEvent=t,wd[t]=wd[t]||{},wd[t]}function gF(e,t){return function r(n){return uy(n,{delegateTarget:e}),r.oneOff&&Fe.off(e,n.type,t),t.apply(e,[n])}}function mF(e,t,r){return function n(i){const o=e.querySelectorAll(t);for(let{target:a}=i;a&&a!==this;a=a.parentNode)for(const s of o)if(s===a)return uy(i,{delegateTarget:a}),n.oneOff&&Fe.off(e,i.type,t,r),r.apply(a,[i])}}function Rx(e,t,r=null){return Object.values(e).find(n=>n.callable===t&&n.delegationSelector===r)}function Nx(e,t,r){const n=typeof t=="string",i=n?r:t||r;let o=$x(e);return pF.has(o)||(o=e),[n,i,o]}function l_(e,t,r,n,i){if(typeof t!="string"||!e)return;let[o,a,s]=Nx(t,r,n);t in Px&&(a=(p=>function(y){if(!y.relatedTarget||y.relatedTarget!==y.delegateTarget&&!y.delegateTarget.contains(y.relatedTarget))return p.call(this,y)})(a));const l=Lx(e),u=l[s]||(l[s]={}),c=Rx(u,a,o?r:null);if(c){c.oneOff=c.oneOff&&i;return}const f=Ox(a,t.replace(fF,"")),d=o?mF(e,r,a):gF(e,a);d.delegationSelector=o?r:null,d.callable=a,d.oneOff=i,d.uidEvent=f,u[f]=d,e.addEventListener(s,d,o)}function Cg(e,t,r,n,i){const o=Rx(t[r],n,i);o&&(e.removeEventListener(r,o,!!i),delete t[r][o.uidEvent])}function yF(e,t,r,n){const i=t[r]||{};for(const[o,a]of Object.entries(i))o.includes(n)&&Cg(e,t,r,a.callable,a.delegationSelector)}function $x(e){return e=e.replace(dF,""),Px[e]||e}const Fe={on(e,t,r,n){l_(e,t,r,n,!1)},one(e,t,r,n){l_(e,t,r,n,!0)},off(e,t,r,n){if(typeof t!="string"||!e)return;const[i,o,a]=Nx(t,r,n),s=a!==t,l=Lx(e),u=l[a]||{},c=t.startsWith(".");if(typeof o<"u"){if(!Object.keys(u).length)return;Cg(e,l,a,o,i?r:null);return}if(c)for(const f of Object.keys(l))yF(e,l,f,t.slice(1));for(const[f,d]of Object.entries(u)){const h=f.replace(hF,"");(!s||t.includes(h))&&Cg(e,l,a,d.callable,d.delegationSelector)}},trigger(e,t,r){if(typeof t!="string"||!e)return null;const n=Mx(),i=$x(t),o=t!==i;let a=null,s=!0,l=!0,u=!1;o&&n&&(a=n.Event(t,r),n(e).trigger(a),s=!a.isPropagationStopped(),l=!a.isImmediatePropagationStopped(),u=a.isDefaultPrevented());const c=uy(new Event(t,{bubbles:s,cancelable:!0}),r);return u&&c.preventDefault(),l&&e.dispatchEvent(c),c.defaultPrevented&&a&&a.preventDefault(),c}};function uy(e,t={}){for(const[r,n]of Object.entries(t))try{e[r]=n}catch{Object.defineProperty(e,r,{configurable:!0,get(){return n}})}return e}function u_(e){if(e==="true")return!0;if(e==="false")return!1;if(e===Number(e).toString())return Number(e);if(e===""||e==="null")return null;if(typeof e!="string")return e;try{return JSON.parse(decodeURIComponent(e))}catch{return e}}function Sd(e){return e.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}const ai={setDataAttribute(e,t,r){e.setAttribute(`data-bs-${Sd(t)}`,r)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${Sd(t)}`)},getDataAttributes(e){if(!e)return{};const t={},r=Object.keys(e.dataset).filter(n=>n.startsWith("bs")&&!n.startsWith("bsConfig"));for(const n of r){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1),t[i]=u_(e.dataset[n])}return t},getDataAttribute(e,t){return u_(e.getAttribute(`data-bs-${Sd(t)}`))}};class dl{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,r){const n=si(r)?ai.getDataAttribute(r,"config"):{};return{...this.constructor.Default,...typeof n=="object"?n:{},...si(r)?ai.getDataAttributes(r):{},...typeof t=="object"?t:{}}}_typeCheckConfig(t,r=this.constructor.DefaultType){for(const[n,i]of Object.entries(r)){const o=t[n],a=si(o)?"element":aF(o);if(!new RegExp(i).test(a))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${i}".`)}}}const vF="5.3.8";class bn extends dl{constructor(t,r){super(),t=Gi(t),t&&(this._element=t,this._config=this._getConfig(r),bd.set(this._element,this.constructor.DATA_KEY,this))}dispose(){bd.remove(this._element,this.constructor.DATA_KEY),Fe.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,r,n=!0){kx(t,r,n)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return bd.get(Gi(t),this.DATA_KEY)}static getOrCreateInstance(t,r={}){return this.getInstance(t)||new this(t,typeof r=="object"?r:null)}static get VERSION(){return vF}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const Ed=e=>{let t=e.getAttribute("data-bs-target");if(!t||t==="#"){let r=e.getAttribute("href");if(!r||!r.includes("#")&&!r.startsWith("."))return null;r.includes("#")&&!r.startsWith("#")&&(r=`#${r.split("#")[1]}`),t=r&&r!=="#"?r.trim():null}return t?t.split(",").map(r=>Ax(r)).join(","):null},Je={find(e,t=document.documentElement){return[].concat(...Element.prototype.querySelectorAll.call(t,e))},findOne(e,t=document.documentElement){return Element.prototype.querySelector.call(t,e)},children(e,t){return[].concat(...e.children).filter(r=>r.matches(t))},parents(e,t){const r=[];let n=e.parentNode.closest(t);for(;n;)r.push(n),n=n.parentNode.closest(t);return r},prev(e,t){let r=e.previousElementSibling;for(;r;){if(r.matches(t))return[r];r=r.previousElementSibling}return[]},next(e,t){let r=e.nextElementSibling;for(;r;){if(r.matches(t))return[r];r=r.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(r=>`${r}:not([tabindex^="-"])`).join(",");return this.find(t,e).filter(r=>!Yi(r)&&Gs(r))},getSelectorFromElement(e){const t=Ed(e);return t&&Je.findOne(t)?t:null},getElementFromSelector(e){const t=Ed(e);return t?Je.findOne(t):null},getMultipleElementsFromSelector(e){const t=Ed(e);return t?Je.find(t):[]}},ef=(e,t="hide")=>{const r=`click.dismiss${e.EVENT_KEY}`,n=e.NAME;Fe.on(document,r,`[data-bs-dismiss="${n}"]`,function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),Yi(this))return;const o=Je.getElementFromSelector(this)||this.closest(`.${n}`);e.getOrCreateInstance(o)[t]()})},bF="alert",_F="bs.alert",Dx=`.${_F}`,wF=`close${Dx}`,SF=`closed${Dx}`,EF="fade",xF="show";class tf extends bn{static get NAME(){return bF}close(){if(Fe.trigger(this._element,wF).defaultPrevented)return;this._element.classList.remove(xF);const r=this._element.classList.contains(EF);this._queueCallback(()=>this._destroyElement(),this._element,r)}_destroyElement(){this._element.remove(),Fe.trigger(this._element,SF),this.dispose()}static jQueryInterface(t){return this.each(function(){const r=tf.getOrCreateInstance(this);if(typeof t=="string"){if(r[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);r[t](this)}})}}ef(tf,"close");nn(tf);const TF="button",AF="bs.button",IF=`.${AF}`,CF=".data-api",MF="active",c_='[data-bs-toggle="button"]',kF=`click${IF}${CF}`;class rf extends bn{static get NAME(){return TF}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle(MF))}static jQueryInterface(t){return this.each(function(){const r=rf.getOrCreateInstance(this);t==="toggle"&&r[t]()})}}Fe.on(document,kF,c_,e=>{e.preventDefault();const t=e.target.closest(c_);rf.getOrCreateInstance(t).toggle()});nn(rf);const PF="swipe",Ys=".bs.swipe",OF=`touchstart${Ys}`,LF=`touchmove${Ys}`,RF=`touchend${Ys}`,NF=`pointerdown${Ys}`,$F=`pointerup${Ys}`,DF="touch",BF="pen",FF="pointer-event",UF=40,jF={endCallback:null,leftCallback:null,rightCallback:null},VF={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class pc extends dl{constructor(t,r){super(),this._element=t,!(!t||!pc.isSupported())&&(this._config=this._getConfig(r),this._deltaX=0,this._supportPointerEvents=!!window.PointerEvent,this._initEvents())}static get Default(){return jF}static get DefaultType(){return VF}static get NAME(){return PF}dispose(){Fe.off(this._element,Ys)}_start(t){if(!this._supportPointerEvents){this._deltaX=t.touches[0].clientX;return}this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX)}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),Ir(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=UF)return;const r=t/this._deltaX;this._deltaX=0,r&&Ir(r>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(Fe.on(this._element,NF,t=>this._start(t)),Fe.on(this._element,$F,t=>this._end(t)),this._element.classList.add(FF)):(Fe.on(this._element,OF,t=>this._start(t)),Fe.on(this._element,LF,t=>this._move(t)),Fe.on(this._element,RF,t=>this._end(t)))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&(t.pointerType===BF||t.pointerType===DF)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const WF="carousel",zF="bs.carousel",eo=`.${zF}`,Bx=".data-api",HF="ArrowLeft",qF="ArrowRight",GF=500,ua="next",Jo="prev",as="left",Lu="right",YF=`slide${eo}`,xd=`slid${eo}`,KF=`keydown${eo}`,XF=`mouseenter${eo}`,QF=`mouseleave${eo}`,JF=`dragstart${eo}`,ZF=`load${eo}${Bx}`,e8=`click${eo}${Bx}`,Fx="carousel",Dl="active",t8="slide",r8="carousel-item-end",n8="carousel-item-start",i8="carousel-item-next",o8="carousel-item-prev",Ux=".active",jx=".carousel-item",s8=Ux+jx,a8=".carousel-item img",l8=".carousel-indicators",u8="[data-bs-slide], [data-bs-slide-to]",c8='[data-bs-ride="carousel"]',f8={[HF]:Lu,[qF]:as},d8={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},h8={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class hl extends bn{constructor(t,r){super(t,r),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=Je.findOne(l8,this._element),this._addEventListeners(),this._config.ride===Fx&&this.cycle()}static get Default(){return d8}static get DefaultType(){return h8}static get NAME(){return WF}next(){this._slide(ua)}nextWhenVisible(){!document.hidden&&Gs(this._element)&&this.next()}prev(){this._slide(Jo)}pause(){this._isSliding&&Ix(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval(()=>this.nextWhenVisible(),this._config.interval)}_maybeEnableCycle(){if(this._config.ride){if(this._isSliding){Fe.one(this._element,xd,()=>this.cycle());return}this.cycle()}}to(t){const r=this._getItems();if(t>r.length-1||t<0)return;if(this._isSliding){Fe.one(this._element,xd,()=>this.to(t));return}const n=this._getItemIndex(this._getActive());if(n===t)return;const i=t>n?ua:Jo;this._slide(i,r[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&Fe.on(this._element,KF,t=>this._keydown(t)),this._config.pause==="hover"&&(Fe.on(this._element,XF,()=>this.pause()),Fe.on(this._element,QF,()=>this._maybeEnableCycle())),this._config.touch&&pc.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const n of Je.find(a8,this._element))Fe.on(n,JF,i=>i.preventDefault());const r={leftCallback:()=>this._slide(this._directionToOrder(as)),rightCallback:()=>this._slide(this._directionToOrder(Lu)),endCallback:()=>{this._config.pause==="hover"&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(()=>this._maybeEnableCycle(),GF+this._config.interval))}};this._swipeHelper=new pc(this._element,r)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const r=f8[t.key];r&&(t.preventDefault(),this._slide(this._directionToOrder(r)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const r=Je.findOne(Ux,this._indicatorsElement);r.classList.remove(Dl),r.removeAttribute("aria-current");const n=Je.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);n&&(n.classList.add(Dl),n.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const r=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=r||this._config.defaultInterval}_slide(t,r=null){if(this._isSliding)return;const n=this._getActive(),i=t===ua,o=r||ly(this._getItems(),n,i,this._config.wrap);if(o===n)return;const a=this._getItemIndex(o),s=h=>Fe.trigger(this._element,h,{relatedTarget:o,direction:this._orderToDirection(t),from:this._getItemIndex(n),to:a});if(s(YF).defaultPrevented||!n||!o)return;const u=!!this._interval;this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(a),this._activeElement=o;const c=i?n8:r8,f=i?i8:o8;o.classList.add(f),fl(o),n.classList.add(c),o.classList.add(c);const d=()=>{o.classList.remove(c,f),o.classList.add(Dl),n.classList.remove(Dl,f,c),this._isSliding=!1,s(xd)};this._queueCallback(d,n,this._isAnimated()),u&&this.cycle()}_isAnimated(){return this._element.classList.contains(t8)}_getActive(){return Je.findOne(s8,this._element)}_getItems(){return Je.find(jx,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return tn()?t===as?Jo:ua:t===as?ua:Jo}_orderToDirection(t){return tn()?t===Jo?as:Lu:t===Jo?Lu:as}static jQueryInterface(t){return this.each(function(){const r=hl.getOrCreateInstance(this,t);if(typeof t=="number"){r.to(t);return}if(typeof t=="string"){if(r[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);r[t]()}})}}Fe.on(document,e8,u8,function(e){const t=Je.getElementFromSelector(this);if(!t||!t.classList.contains(Fx))return;e.preventDefault();const r=hl.getOrCreateInstance(t),n=this.getAttribute("data-bs-slide-to");if(n){r.to(n),r._maybeEnableCycle();return}if(ai.getDataAttribute(this,"slide")==="next"){r.next(),r._maybeEnableCycle();return}r.prev(),r._maybeEnableCycle()});Fe.on(window,ZF,()=>{const e=Je.find(c8);for(const t of e)hl.getOrCreateInstance(t)});nn(hl);const p8="collapse",g8="bs.collapse",pl=`.${g8}`,m8=".data-api",y8=`show${pl}`,v8=`shown${pl}`,b8=`hide${pl}`,_8=`hidden${pl}`,w8=`click${pl}${m8}`,Td="show",fs="collapse",Bl="collapsing",S8="collapsed",E8=`:scope .${fs} .${fs}`,x8="collapse-horizontal",T8="width",A8="height",I8=".collapse.show, .collapse.collapsing",Mg='[data-bs-toggle="collapse"]',C8={parent:null,toggle:!0},M8={parent:"(null|element)",toggle:"boolean"};class Ya extends bn{constructor(t,r){super(t,r),this._isTransitioning=!1,this._triggerArray=[];const n=Je.find(Mg);for(const i of n){const o=Je.getSelectorFromElement(i),a=Je.find(o).filter(s=>s===this._element);o!==null&&a.length&&this._triggerArray.push(i)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return C8}static get DefaultType(){return M8}static get NAME(){return p8}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(I8).filter(s=>s!==this._element).map(s=>Ya.getOrCreateInstance(s,{toggle:!1}))),t.length&&t[0]._isTransitioning||Fe.trigger(this._element,y8).defaultPrevented)return;for(const s of t)s.hide();const n=this._getDimension();this._element.classList.remove(fs),this._element.classList.add(Bl),this._element.style[n]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=()=>{this._isTransitioning=!1,this._element.classList.remove(Bl),this._element.classList.add(fs,Td),this._element.style[n]="",Fe.trigger(this._element,v8)},a=`scroll${n[0].toUpperCase()+n.slice(1)}`;this._queueCallback(i,this._element,!0),this._element.style[n]=`${this._element[a]}px`}hide(){if(this._isTransitioning||!this._isShown()||Fe.trigger(this._element,b8).defaultPrevented)return;const r=this._getDimension();this._element.style[r]=`${this._element.getBoundingClientRect()[r]}px`,fl(this._element),this._element.classList.add(Bl),this._element.classList.remove(fs,Td);for(const i of this._triggerArray){const o=Je.getElementFromSelector(i);o&&!this._isShown(o)&&this._addAriaAndCollapsedClass([i],!1)}this._isTransitioning=!0;const n=()=>{this._isTransitioning=!1,this._element.classList.remove(Bl),this._element.classList.add(fs),Fe.trigger(this._element,_8)};this._element.style[r]="",this._queueCallback(n,this._element,!0)}_isShown(t=this._element){return t.classList.contains(Td)}_configAfterMerge(t){return t.toggle=!!t.toggle,t.parent=Gi(t.parent),t}_getDimension(){return this._element.classList.contains(x8)?T8:A8}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Mg);for(const r of t){const n=Je.getElementFromSelector(r);n&&this._addAriaAndCollapsedClass([r],this._isShown(n))}}_getFirstLevelChildren(t){const r=Je.find(E8,this._config.parent);return Je.find(t,this._config.parent).filter(n=>!r.includes(n))}_addAriaAndCollapsedClass(t,r){if(t.length)for(const n of t)n.classList.toggle(S8,!r),n.setAttribute("aria-expanded",r)}static jQueryInterface(t){const r={};return typeof t=="string"&&/show|hide/.test(t)&&(r.toggle=!1),this.each(function(){const n=Ya.getOrCreateInstance(this,r);if(typeof t=="string"){if(typeof n[t]>"u")throw new TypeError(`No method named "${t}"`);n[t]()}})}}Fe.on(document,w8,Mg,function(e){(e.target.tagName==="A"||e.delegateTarget&&e.delegateTarget.tagName==="A")&&e.preventDefault();for(const t of Je.getMultipleElementsFromSelector(this))Ya.getOrCreateInstance(t,{toggle:!1}).toggle()});nn(Ya);const f_="dropdown",k8="bs.dropdown",Go=`.${k8}`,cy=".data-api",P8="Escape",d_="Tab",O8="ArrowUp",h_="ArrowDown",L8=2,R8=`hide${Go}`,N8=`hidden${Go}`,$8=`show${Go}`,D8=`shown${Go}`,Vx=`click${Go}${cy}`,Wx=`keydown${Go}${cy}`,B8=`keyup${Go}${cy}`,ls="show",F8="dropup",U8="dropend",j8="dropstart",V8="dropup-center",W8="dropdown-center",_o='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',z8=`${_o}.${ls}`,Ru=".dropdown-menu",H8=".navbar",q8=".navbar-nav",G8=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",Y8=tn()?"top-end":"top-start",K8=tn()?"top-start":"top-end",X8=tn()?"bottom-end":"bottom-start",Q8=tn()?"bottom-start":"bottom-end",J8=tn()?"left-start":"right-start",Z8=tn()?"right-start":"left-start",eU="top",tU="bottom",rU={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},nU={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class Nn extends bn{constructor(t,r){super(t,r),this._popper=null,this._parent=this._element.parentNode,this._menu=Je.next(this._element,Ru)[0]||Je.prev(this._element,Ru)[0]||Je.findOne(Ru,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return rU}static get DefaultType(){return nU}static get NAME(){return f_}toggle(){return this._isShown()?this.hide():this.show()}show(){if(Yi(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!Fe.trigger(this._element,$8,t).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(q8))for(const n of[].concat(...document.body.children))Fe.on(n,"mouseover",hc);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(ls),this._element.classList.add(ls),Fe.trigger(this._element,D8,t)}}hide(){if(Yi(this._element)||!this._isShown())return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!Fe.trigger(this._element,R8,t).defaultPrevented){if("ontouchstart"in document.documentElement)for(const n of[].concat(...document.body.children))Fe.off(n,"mouseover",hc);this._popper&&this._popper.destroy(),this._menu.classList.remove(ls),this._element.classList.remove(ls),this._element.setAttribute("aria-expanded","false"),ai.removeDataAttribute(this._menu,"popper"),Fe.trigger(this._element,N8,t)}}_getConfig(t){if(t=super._getConfig(t),typeof t.reference=="object"&&!si(t.reference)&&typeof t.reference.getBoundingClientRect!="function")throw new TypeError(`${f_.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(){if(typeof Tx>"u")throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org/docs/v2/)");let t=this._element;this._config.reference==="parent"?t=this._parent:si(this._config.reference)?t=Gi(this._config.reference):typeof this._config.reference=="object"&&(t=this._config.reference);const r=this._getPopperConfig();this._popper=ay(t,this._menu,r)}_isShown(){return this._menu.classList.contains(ls)}_getPlacement(){const t=this._parent;if(t.classList.contains(U8))return J8;if(t.classList.contains(j8))return Z8;if(t.classList.contains(V8))return eU;if(t.classList.contains(W8))return tU;const r=getComputedStyle(this._menu).getPropertyValue("--bs-position").trim()==="end";return t.classList.contains(F8)?r?K8:Y8:r?Q8:X8}_detectNavbar(){return this._element.closest(H8)!==null}_getOffset(){const{offset:t}=this._config;return typeof t=="string"?t.split(",").map(r=>Number.parseInt(r,10)):typeof t=="function"?r=>t(r,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||this._config.display==="static")&&(ai.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...Ir(this._config.popperConfig,[void 0,t])}}_selectMenuItem({key:t,target:r}){const n=Je.find(G8,this._menu).filter(i=>Gs(i));n.length&&ly(n,r,t===h_,!n.includes(r)).focus()}static jQueryInterface(t){return this.each(function(){const r=Nn.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof r[t]>"u")throw new TypeError(`No method named "${t}"`);r[t]()}})}static clearMenus(t){if(t.button===L8||t.type==="keyup"&&t.key!==d_)return;const r=Je.find(z8);for(const n of r){const i=Nn.getInstance(n);if(!i||i._config.autoClose===!1)continue;const o=t.composedPath(),a=o.includes(i._menu);if(o.includes(i._element)||i._config.autoClose==="inside"&&!a||i._config.autoClose==="outside"&&a||i._menu.contains(t.target)&&(t.type==="keyup"&&t.key===d_||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const s={relatedTarget:i._element};t.type==="click"&&(s.clickEvent=t),i._completeHide(s)}}static dataApiKeydownHandler(t){const r=/input|textarea/i.test(t.target.tagName),n=t.key===P8,i=[O8,h_].includes(t.key);if(!i&&!n||r&&!n)return;t.preventDefault();const o=this.matches(_o)?this:Je.prev(this,_o)[0]||Je.next(this,_o)[0]||Je.findOne(_o,t.delegateTarget.parentNode),a=Nn.getOrCreateInstance(o);if(i){t.stopPropagation(),a.show(),a._selectMenuItem(t);return}a._isShown()&&(t.stopPropagation(),a.hide(),o.focus())}}Fe.on(document,Wx,_o,Nn.dataApiKeydownHandler);Fe.on(document,Wx,Ru,Nn.dataApiKeydownHandler);Fe.on(document,Vx,Nn.clearMenus);Fe.on(document,B8,Nn.clearMenus);Fe.on(document,Vx,_o,function(e){e.preventDefault(),Nn.getOrCreateInstance(this).toggle()});nn(Nn);const zx="backdrop",iU="fade",p_="show",g_=`mousedown.bs.${zx}`,oU={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},sU={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Hx extends dl{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return oU}static get DefaultType(){return sU}static get NAME(){return zx}show(t){if(!this._config.isVisible){Ir(t);return}this._append();const r=this._getElement();this._config.isAnimated&&fl(r),r.classList.add(p_),this._emulateAnimation(()=>{Ir(t)})}hide(t){if(!this._config.isVisible){Ir(t);return}this._getElement().classList.remove(p_),this._emulateAnimation(()=>{this.dispose(),Ir(t)})}dispose(){this._isAppended&&(Fe.off(this._element,g_),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add(iU),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=Gi(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),Fe.on(t,g_,()=>{Ir(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(t){kx(t,this._getElement(),this._config.isAnimated)}}const aU="focustrap",lU="bs.focustrap",gc=`.${lU}`,uU=`focusin${gc}`,cU=`keydown.tab${gc}`,fU="Tab",dU="forward",m_="backward",hU={autofocus:!0,trapElement:null},pU={autofocus:"boolean",trapElement:"element"};class qx extends dl{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return hU}static get DefaultType(){return pU}static get NAME(){return aU}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),Fe.off(document,gc),Fe.on(document,uU,t=>this._handleFocusin(t)),Fe.on(document,cU,t=>this._handleKeydown(t)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,Fe.off(document,gc))}_handleFocusin(t){const{trapElement:r}=this._config;if(t.target===document||t.target===r||r.contains(t.target))return;const n=Je.focusableChildren(r);n.length===0?r.focus():this._lastTabNavDirection===m_?n[n.length-1].focus():n[0].focus()}_handleKeydown(t){t.key===fU&&(this._lastTabNavDirection=t.shiftKey?m_:dU)}}const y_=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",v_=".sticky-top",Fl="padding-right",b_="margin-right";class kg{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,Fl,r=>r+t),this._setElementAttributes(y_,Fl,r=>r+t),this._setElementAttributes(v_,b_,r=>r-t)}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,Fl),this._resetElementAttributes(y_,Fl),this._resetElementAttributes(v_,b_)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,r,n){const i=this.getWidth(),o=a=>{if(a!==this._element&&window.innerWidth>a.clientWidth+i)return;this._saveInitialAttribute(a,r);const s=window.getComputedStyle(a).getPropertyValue(r);a.style.setProperty(r,`${n(Number.parseFloat(s))}px`)};this._applyManipulationCallback(t,o)}_saveInitialAttribute(t,r){const n=t.style.getPropertyValue(r);n&&ai.setDataAttribute(t,r,n)}_resetElementAttributes(t,r){const n=i=>{const o=ai.getDataAttribute(i,r);if(o===null){i.style.removeProperty(r);return}ai.removeDataAttribute(i,r),i.style.setProperty(r,o)};this._applyManipulationCallback(t,n)}_applyManipulationCallback(t,r){if(si(t)){r(t);return}for(const n of Je.find(t,this._element))r(n)}}const gU="modal",mU="bs.modal",rn=`.${mU}`,yU=".data-api",vU="Escape",bU=`hide${rn}`,_U=`hidePrevented${rn}`,Gx=`hidden${rn}`,Yx=`show${rn}`,wU=`shown${rn}`,SU=`resize${rn}`,EU=`click.dismiss${rn}`,xU=`mousedown.dismiss${rn}`,TU=`keydown.dismiss${rn}`,AU=`click${rn}${yU}`,__="modal-open",IU="fade",w_="show",Ad="modal-static",CU=".modal.show",MU=".modal-dialog",kU=".modal-body",PU='[data-bs-toggle="modal"]',OU={backdrop:!0,focus:!0,keyboard:!0},LU={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class _i extends bn{constructor(t,r){super(t,r),this._dialog=Je.findOne(MU,this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new kg,this._addEventListeners()}static get Default(){return OU}static get DefaultType(){return LU}static get NAME(){return gU}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||Fe.trigger(this._element,Yx,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(__),this._adjustDialog(),this._backdrop.show(()=>this._showElement(t)))}hide(){!this._isShown||this._isTransitioning||Fe.trigger(this._element,bU).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(w_),this._queueCallback(()=>this._hideModal(),this._element,this._isAnimated()))}dispose(){Fe.off(window,rn),Fe.off(this._dialog,rn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Hx({isVisible:!!this._config.backdrop,isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new qx({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const r=Je.findOne(kU,this._dialog);r&&(r.scrollTop=0),fl(this._element),this._element.classList.add(w_);const n=()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,Fe.trigger(this._element,wU,{relatedTarget:t})};this._queueCallback(n,this._dialog,this._isAnimated())}_addEventListeners(){Fe.on(this._element,TU,t=>{if(t.key===vU){if(this._config.keyboard){this.hide();return}this._triggerBackdropTransition()}}),Fe.on(window,SU,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),Fe.on(this._element,xU,t=>{Fe.one(this._element,EU,r=>{if(!(this._element!==t.target||this._element!==r.target)){if(this._config.backdrop==="static"){this._triggerBackdropTransition();return}this._config.backdrop&&this.hide()}})})}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(__),this._resetAdjustments(),this._scrollBar.reset(),Fe.trigger(this._element,Gx)})}_isAnimated(){return this._element.classList.contains(IU)}_triggerBackdropTransition(){if(Fe.trigger(this._element,_U).defaultPrevented)return;const r=this._element.scrollHeight>document.documentElement.clientHeight,n=this._element.style.overflowY;n==="hidden"||this._element.classList.contains(Ad)||(r||(this._element.style.overflowY="hidden"),this._element.classList.add(Ad),this._queueCallback(()=>{this._element.classList.remove(Ad),this._queueCallback(()=>{this._element.style.overflowY=n},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,r=this._scrollBar.getWidth(),n=r>0;if(n&&!t){const i=tn()?"paddingLeft":"paddingRight";this._element.style[i]=`${r}px`}if(!n&&t){const i=tn()?"paddingRight":"paddingLeft";this._element.style[i]=`${r}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,r){return this.each(function(){const n=_i.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof n[t]>"u")throw new TypeError(`No method named "${t}"`);n[t](r)}})}}Fe.on(document,AU,PU,function(e){const t=Je.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&e.preventDefault(),Fe.one(t,Yx,i=>{i.defaultPrevented||Fe.one(t,Gx,()=>{Gs(this)&&this.focus()})});const r=Je.findOne(CU);r&&_i.getInstance(r).hide(),_i.getOrCreateInstance(t).toggle(this)});ef(_i);nn(_i);const RU="offcanvas",NU="bs.offcanvas",Ii=`.${NU}`,Kx=".data-api",$U=`load${Ii}${Kx}`,DU="Escape",S_="show",E_="showing",x_="hiding",BU="offcanvas-backdrop",Xx=".offcanvas.show",FU=`show${Ii}`,UU=`shown${Ii}`,jU=`hide${Ii}`,T_=`hidePrevented${Ii}`,Qx=`hidden${Ii}`,VU=`resize${Ii}`,WU=`click${Ii}${Kx}`,zU=`keydown.dismiss${Ii}`,HU='[data-bs-toggle="offcanvas"]',qU={backdrop:!0,keyboard:!0,scroll:!1},GU={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Ki extends bn{constructor(t,r){super(t,r),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return qU}static get DefaultType(){return GU}static get NAME(){return RU}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){if(this._isShown||Fe.trigger(this._element,FU,{relatedTarget:t}).defaultPrevented)return;this._isShown=!0,this._backdrop.show(),this._config.scroll||new kg().hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(E_);const n=()=>{(!this._config.scroll||this._config.backdrop)&&this._focustrap.activate(),this._element.classList.add(S_),this._element.classList.remove(E_),Fe.trigger(this._element,UU,{relatedTarget:t})};this._queueCallback(n,this._element,!0)}hide(){if(!this._isShown||Fe.trigger(this._element,jU).defaultPrevented)return;this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(x_),this._backdrop.hide();const r=()=>{this._element.classList.remove(S_,x_),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||new kg().reset(),Fe.trigger(this._element,Qx)};this._queueCallback(r,this._element,!0)}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=()=>{if(this._config.backdrop==="static"){Fe.trigger(this._element,T_);return}this.hide()},r=!!this._config.backdrop;return new Hx({className:BU,isVisible:r,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:r?t:null})}_initializeFocusTrap(){return new qx({trapElement:this._element})}_addEventListeners(){Fe.on(this._element,zU,t=>{if(t.key===DU){if(this._config.keyboard){this.hide();return}Fe.trigger(this._element,T_)}})}static jQueryInterface(t){return this.each(function(){const r=Ki.getOrCreateInstance(this,t);if(typeof t=="string"){if(r[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);r[t](this)}})}}Fe.on(document,WU,HU,function(e){const t=Je.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&e.preventDefault(),Yi(this))return;Fe.one(t,Qx,()=>{Gs(this)&&this.focus()});const r=Je.findOne(Xx);r&&r!==t&&Ki.getInstance(r).hide(),Ki.getOrCreateInstance(t).toggle(this)});Fe.on(window,$U,()=>{for(const e of Je.find(Xx))Ki.getOrCreateInstance(e).show()});Fe.on(window,VU,()=>{for(const e of Je.find("[aria-modal][class*=show][class*=offcanvas-]"))getComputedStyle(e).position!=="fixed"&&Ki.getOrCreateInstance(e).hide()});ef(Ki);nn(Ki);const YU=/^aria-[\w-]*$/i,Jx={"*":["class","dir","id","lang","role",YU],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},KU=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),XU=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,QU=(e,t)=>{const r=e.nodeName.toLowerCase();return t.includes(r)?KU.has(r)?!!XU.test(e.nodeValue):!0:t.filter(n=>n instanceof RegExp).some(n=>n.test(r))};function JU(e,t,r){if(!e.length)return e;if(r&&typeof r=="function")return r(e);const i=new window.DOMParser().parseFromString(e,"text/html"),o=[].concat(...i.body.querySelectorAll("*"));for(const a of o){const s=a.nodeName.toLowerCase();if(!Object.keys(t).includes(s)){a.remove();continue}const l=[].concat(...a.attributes),u=[].concat(t["*"]||[],t[s]||[]);for(const c of l)QU(c,u)||a.removeAttribute(c.nodeName)}return i.body.innerHTML}const ZU="TemplateFactory",ej={allowList:Jx,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},tj={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},rj={entry:"(string|element|function|null)",selector:"(string|element)"};class nj extends dl{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return ej}static get DefaultType(){return tj}static get NAME(){return ZU}getContent(){return Object.values(this._config.content).map(t=>this._resolvePossibleFunction(t)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[i,o]of Object.entries(this._config.content))this._setContent(t,o,i);const r=t.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&r.classList.add(...n.split(" ")),r}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[r,n]of Object.entries(t))super._typeCheckConfig({selector:r,entry:n},rj)}_setContent(t,r,n){const i=Je.findOne(n,t);if(i){if(r=this._resolvePossibleFunction(r),!r){i.remove();return}if(si(r)){this._putElementInTemplate(Gi(r),i);return}if(this._config.html){i.innerHTML=this._maybeSanitize(r);return}i.textContent=r}}_maybeSanitize(t){return this._config.sanitize?JU(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return Ir(t,[void 0,this])}_putElementInTemplate(t,r){if(this._config.html){r.innerHTML="",r.append(t);return}r.textContent=t.textContent}}const ij="tooltip",oj=new Set(["sanitize","allowList","sanitizeFn"]),Id="fade",sj="modal",Ul="show",aj=".tooltip-inner",A_=`.${sj}`,I_="hide.bs.modal",ca="hover",Cd="focus",Md="click",lj="manual",uj="hide",cj="hidden",fj="show",dj="shown",hj="inserted",pj="click",gj="focusin",mj="focusout",yj="mouseenter",vj="mouseleave",bj={AUTO:"auto",TOP:"top",RIGHT:tn()?"left":"right",BOTTOM:"bottom",LEFT:tn()?"right":"left"},_j={allowList:Jx,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},wj={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Ks extends bn{constructor(t,r){if(typeof Tx>"u")throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/)");super(t,r),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return _j}static get DefaultType(){return wj}static get NAME(){return ij}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){if(this._isEnabled){if(this._isShown()){this._leave();return}this._enter()}}dispose(){clearTimeout(this._timeout),Fe.off(this._element.closest(A_),I_,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if(this._element.style.display==="none")throw new Error("Please use show on visible elements");if(!(this._isWithContent()&&this._isEnabled))return;const t=Fe.trigger(this._element,this.constructor.eventName(fj)),n=(Cx(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!n)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:o}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(o.append(i),Fe.trigger(this._element,this.constructor.eventName(hj))),this._popper=this._createPopper(i),i.classList.add(Ul),"ontouchstart"in document.documentElement)for(const s of[].concat(...document.body.children))Fe.on(s,"mouseover",hc);const a=()=>{Fe.trigger(this._element,this.constructor.eventName(dj)),this._isHovered===!1&&this._leave(),this._isHovered=!1};this._queueCallback(a,this.tip,this._isAnimated())}hide(){if(!this._isShown()||Fe.trigger(this._element,this.constructor.eventName(uj)).defaultPrevented)return;if(this._getTipElement().classList.remove(Ul),"ontouchstart"in document.documentElement)for(const i of[].concat(...document.body.children))Fe.off(i,"mouseover",hc);this._activeTrigger[Md]=!1,this._activeTrigger[Cd]=!1,this._activeTrigger[ca]=!1,this._isHovered=null;const n=()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),Fe.trigger(this._element,this.constructor.eventName(cj)))};this._queueCallback(n,this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return!!this._getTitle()}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const r=this._getTemplateFactory(t).toHtml();if(!r)return null;r.classList.remove(Id,Ul),r.classList.add(`bs-${this.constructor.NAME}-auto`);const n=lF(this.constructor.NAME).toString();return r.setAttribute("id",n),this._isAnimated()&&r.classList.add(Id),r}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new nj({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[aj]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(Id)}_isShown(){return this.tip&&this.tip.classList.contains(Ul)}_createPopper(t){const r=Ir(this._config.placement,[this,t,this._element]),n=bj[r.toUpperCase()];return ay(this._element,t,this._getPopperConfig(n))}_getOffset(){const{offset:t}=this._config;return typeof t=="string"?t.split(",").map(r=>Number.parseInt(r,10)):typeof t=="function"?r=>t(r,this._element):t}_resolvePossibleFunction(t){return Ir(t,[this._element,this._element])}_getPopperConfig(t){const r={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:n=>{this._getTipElement().setAttribute("data-popper-placement",n.state.placement)}}]};return{...r,...Ir(this._config.popperConfig,[void 0,r])}}_setListeners(){const t=this._config.trigger.split(" ");for(const r of t)if(r==="click")Fe.on(this._element,this.constructor.eventName(pj),this._config.selector,n=>{const i=this._initializeOnDelegatedTarget(n);i._activeTrigger[Md]=!(i._isShown()&&i._activeTrigger[Md]),i.toggle()});else if(r!==lj){const n=r===ca?this.constructor.eventName(yj):this.constructor.eventName(gj),i=r===ca?this.constructor.eventName(vj):this.constructor.eventName(mj);Fe.on(this._element,n,this._config.selector,o=>{const a=this._initializeOnDelegatedTarget(o);a._activeTrigger[o.type==="focusin"?Cd:ca]=!0,a._enter()}),Fe.on(this._element,i,this._config.selector,o=>{const a=this._initializeOnDelegatedTarget(o);a._activeTrigger[o.type==="focusout"?Cd:ca]=a._element.contains(o.relatedTarget),a._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},Fe.on(this._element.closest(A_),I_,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(!this._element.getAttribute("aria-label")&&!this._element.textContent.trim()&&this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){if(this._isShown()||this._isHovered){this._isHovered=!0;return}this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show)}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(t,r){clearTimeout(this._timeout),this._timeout=setTimeout(t,r)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const r=ai.getDataAttributes(this._element);for(const n of Object.keys(r))oj.has(n)&&delete r[n];return t={...r,...typeof t=="object"&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=t.container===!1?document.body:Gi(t.container),typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),typeof t.title=="number"&&(t.title=t.title.toString()),typeof t.content=="number"&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[r,n]of Object.entries(this._config))this.constructor.Default[r]!==n&&(t[r]=n);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each(function(){const r=Ks.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof r[t]>"u")throw new TypeError(`No method named "${t}"`);r[t]()}})}}nn(Ks);const Sj="popover",Ej=".popover-header",xj=".popover-body",Tj={...Ks.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},Aj={...Ks.DefaultType,content:"(null|string|element|function)"};class fy extends Ks{static get Default(){return Tj}static get DefaultType(){return Aj}static get NAME(){return Sj}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[Ej]:this._getTitle(),[xj]:this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each(function(){const r=fy.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof r[t]>"u")throw new TypeError(`No method named "${t}"`);r[t]()}})}}nn(fy);const Ij="scrollspy",Cj="bs.scrollspy",dy=`.${Cj}`,Mj=".data-api",kj=`activate${dy}`,C_=`click${dy}`,Pj=`load${dy}${Mj}`,Oj="dropdown-item",Zo="active",Lj='[data-bs-spy="scroll"]',kd="[href]",Rj=".nav, .list-group",M_=".nav-link",Nj=".nav-item",$j=".list-group-item",Dj=`${M_}, ${Nj} > ${M_}, ${$j}`,Bj=".dropdown",Fj=".dropdown-toggle",Uj={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},jj={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class nf extends bn{constructor(t,r){super(t,r),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement=getComputedStyle(this._element).overflowY==="visible"?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return Uj}static get DefaultType(){return jj}static get NAME(){return Ij}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=Gi(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,typeof t.threshold=="string"&&(t.threshold=t.threshold.split(",").map(r=>Number.parseFloat(r))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(Fe.off(this._config.target,C_),Fe.on(this._config.target,C_,kd,t=>{const r=this._observableSections.get(t.target.hash);if(r){t.preventDefault();const n=this._rootElement||window,i=r.offsetTop-this._element.offsetTop;if(n.scrollTo){n.scrollTo({top:i,behavior:"smooth"});return}n.scrollTop=i}}))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver(r=>this._observerCallback(r),t)}_observerCallback(t){const r=a=>this._targetLinks.get(`#${a.target.id}`),n=a=>{this._previousScrollData.visibleEntryTop=a.target.offsetTop,this._process(r(a))},i=(this._rootElement||document.documentElement).scrollTop,o=i>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=i;for(const a of t){if(!a.isIntersecting){this._activeTarget=null,this._clearActiveClass(r(a));continue}const s=a.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(o&&s){if(n(a),!i)return;continue}!o&&!s&&n(a)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=Je.find(kd,this._config.target);for(const r of t){if(!r.hash||Yi(r))continue;const n=Je.findOne(decodeURI(r.hash),this._element);Gs(n)&&(this._targetLinks.set(decodeURI(r.hash),r),this._observableSections.set(r.hash,n))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(Zo),this._activateParents(t),Fe.trigger(this._element,kj,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains(Oj)){Je.findOne(Fj,t.closest(Bj)).classList.add(Zo);return}for(const r of Je.parents(t,Rj))for(const n of Je.prev(r,Dj))n.classList.add(Zo)}_clearActiveClass(t){t.classList.remove(Zo);const r=Je.find(`${kd}.${Zo}`,t);for(const n of r)n.classList.remove(Zo)}static jQueryInterface(t){return this.each(function(){const r=nf.getOrCreateInstance(this,t);if(typeof t=="string"){if(r[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);r[t]()}})}}Fe.on(window,Pj,()=>{for(const e of Je.find(Lj))nf.getOrCreateInstance(e)});nn(nf);const Vj="tab",Wj="bs.tab",Yo=`.${Wj}`,zj=`hide${Yo}`,Hj=`hidden${Yo}`,qj=`show${Yo}`,Gj=`shown${Yo}`,Yj=`click${Yo}`,Kj=`keydown${Yo}`,Xj=`load${Yo}`,Qj="ArrowLeft",k_="ArrowRight",Jj="ArrowUp",P_="ArrowDown",Pd="Home",O_="End",wo="active",L_="fade",Od="show",Zj="dropdown",Zx=".dropdown-toggle",eV=".dropdown-menu",Ld=`:not(${Zx})`,tV='.list-group, .nav, [role="tablist"]',rV=".nav-item, .list-group-item",nV=`.nav-link${Ld}, .list-group-item${Ld}, [role="tab"]${Ld}`,eT='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Rd=`${nV}, ${eT}`,iV=`.${wo}[data-bs-toggle="tab"], .${wo}[data-bs-toggle="pill"], .${wo}[data-bs-toggle="list"]`;class Bo extends bn{constructor(t){super(t),this._parent=this._element.closest(tV),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),Fe.on(this._element,Kj,r=>this._keydown(r)))}static get NAME(){return Vj}show(){const t=this._element;if(this._elemIsActive(t))return;const r=this._getActiveElem(),n=r?Fe.trigger(r,zj,{relatedTarget:t}):null;Fe.trigger(t,qj,{relatedTarget:r}).defaultPrevented||n&&n.defaultPrevented||(this._deactivate(r,t),this._activate(t,r))}_activate(t,r){if(!t)return;t.classList.add(wo),this._activate(Je.getElementFromSelector(t));const n=()=>{if(t.getAttribute("role")!=="tab"){t.classList.add(Od);return}t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),Fe.trigger(t,Gj,{relatedTarget:r})};this._queueCallback(n,t,t.classList.contains(L_))}_deactivate(t,r){if(!t)return;t.classList.remove(wo),t.blur(),this._deactivate(Je.getElementFromSelector(t));const n=()=>{if(t.getAttribute("role")!=="tab"){t.classList.remove(Od);return}t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),Fe.trigger(t,Hj,{relatedTarget:r})};this._queueCallback(n,t,t.classList.contains(L_))}_keydown(t){if(![Qj,k_,Jj,P_,Pd,O_].includes(t.key))return;t.stopPropagation(),t.preventDefault();const r=this._getChildren().filter(i=>!Yi(i));let n;if([Pd,O_].includes(t.key))n=r[t.key===Pd?0:r.length-1];else{const i=[k_,P_].includes(t.key);n=ly(r,t.target,i,!0)}n&&(n.focus({preventScroll:!0}),Bo.getOrCreateInstance(n).show())}_getChildren(){return Je.find(Rd,this._parent)}_getActiveElem(){return this._getChildren().find(t=>this._elemIsActive(t))||null}_setInitialAttributes(t,r){this._setAttributeIfNotExists(t,"role","tablist");for(const n of r)this._setInitialAttributesOnChild(n)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const r=this._elemIsActive(t),n=this._getOuterElement(t);t.setAttribute("aria-selected",r),n!==t&&this._setAttributeIfNotExists(n,"role","presentation"),r||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const r=Je.getElementFromSelector(t);r&&(this._setAttributeIfNotExists(r,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(r,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,r){const n=this._getOuterElement(t);if(!n.classList.contains(Zj))return;const i=(o,a)=>{const s=Je.findOne(o,n);s&&s.classList.toggle(a,r)};i(Zx,wo),i(eV,Od),n.setAttribute("aria-expanded",r)}_setAttributeIfNotExists(t,r,n){t.hasAttribute(r)||t.setAttribute(r,n)}_elemIsActive(t){return t.classList.contains(wo)}_getInnerElement(t){return t.matches(Rd)?t:Je.findOne(Rd,t)}_getOuterElement(t){return t.closest(rV)||t}static jQueryInterface(t){return this.each(function(){const r=Bo.getOrCreateInstance(this);if(typeof t=="string"){if(r[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);r[t]()}})}}Fe.on(document,Yj,eT,function(e){["A","AREA"].includes(this.tagName)&&e.preventDefault(),!Yi(this)&&Bo.getOrCreateInstance(this).show()});Fe.on(window,Xj,()=>{for(const e of Je.find(iV))Bo.getOrCreateInstance(e)});nn(Bo);const oV="toast",sV="bs.toast",to=`.${sV}`,aV=`mouseover${to}`,lV=`mouseout${to}`,uV=`focusin${to}`,cV=`focusout${to}`,fV=`hide${to}`,dV=`hidden${to}`,hV=`show${to}`,pV=`shown${to}`,gV="fade",R_="hide",jl="show",Vl="showing",mV={animation:"boolean",autohide:"boolean",delay:"number"},yV={animation:!0,autohide:!0,delay:5e3};class of extends bn{constructor(t,r){super(t,r),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return yV}static get DefaultType(){return mV}static get NAME(){return oV}show(){if(Fe.trigger(this._element,hV).defaultPrevented)return;this._clearTimeout(),this._config.animation&&this._element.classList.add(gV);const r=()=>{this._element.classList.remove(Vl),Fe.trigger(this._element,pV),this._maybeScheduleHide()};this._element.classList.remove(R_),fl(this._element),this._element.classList.add(jl,Vl),this._queueCallback(r,this._element,this._config.animation)}hide(){if(!this.isShown()||Fe.trigger(this._element,fV).defaultPrevented)return;const r=()=>{this._element.classList.add(R_),this._element.classList.remove(Vl,jl),Fe.trigger(this._element,dV)};this._element.classList.add(Vl),this._queueCallback(r,this._element,this._config.animation)}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(jl),super.dispose()}isShown(){return this._element.classList.contains(jl)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(t,r){switch(t.type){case"mouseover":case"mouseout":{this._hasMouseInteraction=r;break}case"focusin":case"focusout":{this._hasKeyboardInteraction=r;break}}if(r){this._clearTimeout();return}const n=t.relatedTarget;this._element===n||this._element.contains(n)||this._maybeScheduleHide()}_setListeners(){Fe.on(this._element,aV,t=>this._onInteraction(t,!0)),Fe.on(this._element,lV,t=>this._onInteraction(t,!1)),Fe.on(this._element,uV,t=>this._onInteraction(t,!0)),Fe.on(this._element,cV,t=>this._onInteraction(t,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each(function(){const r=of.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof r[t]>"u")throw new TypeError(`No method named "${t}"`);r[t](this)}})}}ef(of);nn(of);const vV={class:"d-flex justify-content-between align-items-center titlerow"},bV={class:"buttonarea d-flex float-right justify-content-end align-items-center"},_V={class:"contentrow grid-col-12"},wV=We({__name:"WbSubwidget",props:{titlecolor:{},fullwidth:{type:Boolean},small:{type:Boolean}},setup(e){const t=e,r=_e(()=>{let i={"font-weight":"bold",color:"var(--color-fg)","font-size":"var(--font-normal)"};return t.titlecolor&&(i.color=t.titlecolor),t.small&&(i["font-size"]="var(--font-verysmall)"),i}),n=_e(()=>t.fullwidth?"grid-col-12":"grid-col-4");return(i,o)=>(se(),Se("div",{class:Qe(["wb-subwidget-noborder px-0 pe-1 my-0 pb-2",n.value])},[U("div",vV,[U("div",{class:"d-flex widgetname p-0 m-0",style:ot(r.value)},[It(i.$slots,"title",{},void 0,!0)],4),U("div",bV,[It(i.$slots,"buttons",{},void 0,!0)])]),U("div",_V,[It(i.$slots,"default",{},void 0,!0)])],2))}}),ro=Xe(wV,[["__scopeId","data-v-2aa2b95f"]]),SV={class:"configitem grid-col-12 mt-0 mb-0 px-0 py-0"},EV={class:"titlerow m-0 p-0 d-flex justify-content-between align-items-center"},xV={class:"lefttitle d-flex justify-content-end align-items-baseline"},TV={class:"d-flex"},AV={class:"righttitle d-flex align-items-center"},IV={class:"inlinecontent"},CV={class:"ms-1 mb-2 p-0 pt-2 d-flex justify-content-stretch align-items-center contentrow"},MV=We({__name:"ConfigItem",props:{title:{},infotext:{},icon:{},fullwidth:{type:Boolean}},setup(e){const t=e,r=et(!1);function n(){r.value=!r.value}const i=_e(()=>{let o={color:"var(--color-charging)"};return r.value&&(o.color="var(--color-battery)"),o});return(o,a)=>(se(),De(ro,{fullwidth:!!e.fullwidth},{default:Ae(()=>[U("div",SV,[U("div",EV,[U("span",xV,[U("span",{class:"d-flex align-items-center m-0 p-0",onClick:n},[t.icon?(se(),Se("i",{key:0,class:Qe(["fa-solid fa-sm m-0 p-0 me-2 item-icon",t.icon])},null,2)):Me("",!0),Ke(" "+$e(e.title),1)]),U("span",TV,[t.infotext?(se(),Se("i",{key:0,class:"fa-solid fa-sm fa-circle-question ms-3 me-2",style:ot(i.value),onClick:n},null,4)):Me("",!0)])]),U("span",AV,[U("span",IV,[It(o.$slots,"inline-item",{},void 0,!0)])])]),r.value?(se(),Se("p",{key:0,class:"infotext shadow m-0 ps-2 mb-1 p-3",onClick:n},[a[0]||(a[0]=U("i",{class:"me-1 fa-solid fa-sm fa-circle-info"},null,-1)),Ke(" "+$e(e.infotext),1)])):Me("",!0),U("div",CV,[It(o.$slots,"default",{},void 0,!0)])])]),_:3},8,["fullwidth"]))}}),ut=Xe(MV,[["__scopeId","data-v-a0a18b4a"]]),kV={class:"d-flex flex-column rangeinput"},PV={class:"d-flex flex-fill justify-content-between align-items-center"},OV={class:"d-flex flex-fill flex-column justify-content-center m-0 p-0"},LV={key:0,id:"rangeIndicator",class:"rangeIndicator"},RV={viewBox:"0 0 100 2"},NV=["width"],$V=["x","width"],DV=["x","width"],BV=["id","min","max","step"],FV={class:"d-flex justify-content-between align-items-center"},UV={class:"minlabel ps-4"},jV={class:"valuelabel"},VV={class:"maxlabel pe-4"},WV=We({__name:"RangeInput",props:{id:{},min:{},max:{},step:{},unit:{},decimals:{},showSubrange:{type:Boolean},subrangeMin:{},subrangeMax:{},modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=r.decimals??0,i=t,o=_e({get(){return Math.round(r.modelValue*Math.pow(10,n))/Math.pow(10,n)},set(f){i("update:modelValue",f)}});function a(){o.value>r.min&&(o.value=Math.round((o.value-r.step)*Math.pow(10,n))/Math.pow(10,n))}function s(){o.valuegn().domain([r.min,r.max]).range([0,100])),u=_e(()=>l.value(r.subrangeMin?r.subrangeMin:0)),c=_e(()=>r.subrangeMin&&r.subrangeMax?l.value(r.subrangeMax)-l.value(r.subrangeMin):0);return(f,d)=>(se(),Se("span",kV,[U("span",PV,[U("span",{type:"button",class:"minusButton",onClick:a},[...d[1]||(d[1]=[U("i",{class:"fa fa-xl fa-minus-square me-2"},null,-1)])]),U("div",OV,[r.showSubrange?(se(),Se("figure",LV,[(se(),Se("svg",RV,[U("g",null,[U("rect",{class:"below",x:0,y:"0",width:u.value,height:"2",rx:"1",ry:"1",fill:"var(--color-evu)"},null,8,NV),U("rect",{class:"bar",x:u.value,y:"0",width:c.value,height:"2",rx:"1",ry:"1",fill:"var(--color-charging)"},null,8,$V),U("rect",{class:"above",x:u.value+c.value,y:"0",width:u.value,height:"2",rx:"1",ry:"1",fill:"var(--color-pv)"},null,8,DV)])]))])):Me("",!0),wi(U("input",{id:e.id,"onUpdate:modelValue":d[0]||(d[0]=h=>o.value=h),type:"range",class:"form-range flex-fill",min:e.min,max:e.max,step:e.step},null,8,BV),[[Pc,o.value,void 0,{number:!0}]])]),U("span",{type:"button",class:"plusButton",onClick:s},[...d[2]||(d[2]=[U("i",{class:"fa fa-xl fa-plus-square ms-2"},null,-1)])])]),U("span",FV,[U("span",UV,$e(e.min),1),U("span",jV,$e(o.value)+" "+$e(e.unit),1),U("span",VV,$e(e.max),1)])]))}}),Ot=Xe(WV,[["__scopeId","data-v-af945965"]]),zV=["id","value"],HV=We({__name:"RadioInput2",props:{options:{},modelValue:{},columns:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=t,i=_e({get(){return r.modelValue},set(s){n("update:modelValue",s)}});function o(s){const l=r.options[s][2]||"var(--color-fg)",u="var(--color-bg)";let c=l,f=u,d=["0","0","0","0"],h=["0","0","0","0"];r.options[s][1]==i.value&&(c=u,f=r.options[s][2]||"var(--color-menu)");const p=r.options.length,y=s%3,v=Math.floor(s/3),g=Math.floor((p-1)/3);return y==0&&(v==0&&(d[0]="0.45rem"),v==g&&(d[3]="0.45rem"),h[1]="0.1px"),y==1&&(h[1]="0.1px",h[3]="0.1px"),y==2&&(v==0&&(d[1]="0.45rem"),v==g&&(d[2]="0.45rem"),h[3]="0.1px"),v!=0&&(h[0]="0.1px"),v!=g&&(h[2]="0.1px"),{color:c,background:f,"border-radius":`${d[0]} ${d[1]} ${d[2]} ${d[3]}`,"border-width":`${h[0]} ${h[1]} ${h[2]} ${h[3]}`}}function a(s){let l=s.target;for(;l&&!l.value&&l.parentElement;)l=l.parentElement;l.value&&(typeof r.options[0][1]=="number"?i.value=Number(l.value):i.value=l.value)}return(s,l)=>(se(),Se("div",{class:"buttongrid",style:ot({"grid-template-columns":"repeat("+(r.columns||3)+", 1fr)"})},[(se(!0),Se(Ge,null,it(r.options,(u,c)=>(se(),Se("button",{id:"radio-"+u[1],key:c,class:Qe(["btn btn-outline-secondary radiobutton me-0 mb-0 px-2",u[1]==i.value?"active":""]),value:u[1],style:ot(o(c)),onClick:a},[U("span",null,[u[3]?(se(),Se("i",{key:0,class:Qe(["fa-solid",u[3]])},null,2)):Me("",!0),Ke(" "+$e(u[0]),1)])],14,zV))),128))],4))}}),jt=Xe(HV,[["__scopeId","data-v-cbeb6176"]]),qV={class:"mt-2"},GV={key:0},YV=We({__name:"ConfigInstant",props:{chargepoint:{}},setup(e){const r=et(e.chargepoint),n=_e({get(){return r.value.instantMaxEnergy/1e3},set(i){r.value.instantMaxEnergy=i*1e3}});return(i,o)=>(se(),Se("div",qV,[o[5]||(o[5]=U("p",{class:"heading ms-1"},"Sofortladen:",-1)),we(ut,{title:"Stromstärke",icon:"fa-bolt",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"targetCurrent",modelValue:r.value.instantTargetCurrent,"onUpdate:modelValue":o[0]||(o[0]=a=>r.value.instantTargetCurrent=a),min:6,max:32,step:1,unit:"A"},null,8,["modelValue"])]),_:1}),we(ut,{title:"Anzahl Phasen",icon:"fa-plug",fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:r.value.instantTargetPhases,"onUpdate:modelValue":o[1]||(o[1]=a=>r.value.instantTargetPhases=a),options:[["1",1],["Maximum",3],["Auto",0]]},null,8,["modelValue"])]),_:1}),r.value.instantChargeLimitMode!="none"?(se(),Se("hr",GV)):Me("",!0),we(ut,{title:"Begrenzung",icon:"fa-hand",fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:r.value.instantChargeLimitMode,"onUpdate:modelValue":o[2]||(o[2]=a=>r.value.instantChargeLimitMode=a),options:le(qm).map(a=>[a.name,a.id])},null,8,["modelValue","options"])]),_:1}),r.value.instantChargeLimitMode=="soc"?(se(),De(ut,{key:1,title:"Maximaler Ladestand",icon:"fa-sliders",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"maxSoc",modelValue:r.value.instantTargetSoc,"onUpdate:modelValue":o[3]||(o[3]=a=>r.value.instantTargetSoc=a),min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])]),_:1})):Me("",!0),r.value.instantChargeLimitMode=="amount"?(se(),De(ut,{key:2,title:"Zu ladende Energie",icon:"fa-sliders",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"maxEnergy",modelValue:n.value,"onUpdate:modelValue":o[4]||(o[4]=a=>n.value=a),min:0,max:100,step:1,unit:"kWh"},null,8,["modelValue"])]),_:1})):Me("",!0)]))}}),KV=Xe(YV,[["__scopeId","data-v-de6b86dd"]]),XV={class:"form-check form-switch"},pr=We({__name:"SwitchInput",props:{modelValue:{type:Boolean},onColor:{},offColor:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=t,i=_e({get(){return r.modelValue},set(a){n("update:modelValue",a)}}),o=_e(()=>i.value?{"background-color":"green"}:{"background-color":"white"});return(a,s)=>(se(),Se("div",XV,[wi(U("input",{"onUpdate:modelValue":s[0]||(s[0]=l=>i.value=l),class:"form-check-input",type:"checkbox",role:"switch",style:ot(o.value)},null,4),[[Oc,i.value]])]))}}),QV={class:"pt-2 d-flex flex-column"},JV={key:0,class:"subconfigstack grid-col-12 mt-4"},ZV={class:"subconfig subgrid"},e4={key:0,class:"subconfigstack mt-4"},t4={class:"subconfig subgrid"},r4={class:"subconfig subgrid"},n4={class:"subconfig subgrid"},i4=We({__name:"ConfigPv",props:{chargepoint:{}},setup(e){const r=et(e.chargepoint),n=_e({get(){return r.value.pvMaxEnergy/1e3},set(a){r.value.pvMaxEnergy=a*1e3}}),i=_e({get(){return r.value.pvMinCurrent>5},set(a){a?r.value.pvMinCurrent=6:r.value.pvMinCurrent=0}}),o=_e({get(){return r.value.pvMinSoc>0},set(a){a?r.value.pvMinSoc=50:r.value.pvMinSoc=0}});return(a,s)=>(se(),Se("div",QV,[s[15]||(s[15]=U("div",{class:"heading ms-1"},"PV-Laden:",-1)),we(ut,{title:"Minimaler Ladestrom",icon:"fa-bolt",infotext:le(xn).minpv,fullwidth:!0},{"inline-item":Ae(()=>[we(pr,{modelValue:i.value,"onUpdate:modelValue":s[0]||(s[0]=l=>i.value=l)},null,8,["modelValue"])]),default:Ae(()=>[i.value?(se(),Se("div",JV,[U("div",ZV,[s[10]||(s[10]=U("span",{class:"subconfigtitle grid-col-1"},"Stärke:",-1)),we(Ot,{id:"minCurrent",modelValue:r.value.pvMinCurrent,"onUpdate:modelValue":s[1]||(s[1]=l=>r.value.pvMinCurrent=l),min:6,max:32,step:1,unit:"A"},null,8,["modelValue"])])])):Me("",!0)]),_:1},8,["infotext"]),we(ut,{title:"Anzahl Phasen",icon:"fa-plug",fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:r.value.pvTargetPhases,"onUpdate:modelValue":s[2]||(s[2]=l=>r.value.pvTargetPhases=l),options:[["1",1],["Maximum",3],["Auto",0]]},null,8,["modelValue"])]),_:1}),we(ut,{title:"Mindest-Ladestand",icon:"fa-battery-half",infotext:le(xn).minsoc,fullwidth:!0},{"inline-item":Ae(()=>[we(pr,{modelValue:o.value,"onUpdate:modelValue":s[3]||(s[3]=l=>o.value=l),class:"grid-col-3"},null,8,["modelValue"])]),default:Ae(()=>[o.value?(se(),Se("div",e4,[U("div",t4,[s[11]||(s[11]=U("span",{class:"subconfigtitle grid-col-1"},"SoC:",-1)),we(Ot,{id:"minSoc",modelValue:r.value.pvMinSoc,"onUpdate:modelValue":s[4]||(s[4]=l=>r.value.pvMinSoc=l),class:"grid-col-2",min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])]),U("div",r4,[s[12]||(s[12]=U("span",{class:"subconfigtitle grid-col-1"},"Ladestrom:",-1)),we(Ot,{id:"minSocCurrent",modelValue:r.value.pvMinSocCurrent,"onUpdate:modelValue":s[5]||(s[5]=l=>r.value.pvMinSocCurrent=l),class:"grid-col-2",min:6,max:32,step:1,unit:"A"},null,8,["modelValue"])]),U("div",n4,[s[13]||(s[13]=U("span",{class:"subconfigtitle grid-col-1"},"Phasen:",-1)),we(jt,{modelValue:r.value.pvMinSocPhases,"onUpdate:modelValue":s[6]||(s[6]=l=>r.value.pvMinSocPhases=l),class:"grid-col-1",columns:2,options:[["1",1],["Maximum",3]]},null,8,["modelValue"])]),s[14]||(s[14]=U("hr",{class:"grid-col-3"},null,-1))])):Me("",!0)]),_:1},8,["infotext"]),we(ut,{title:"Begrenzung",icon:"fa-hand",fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:r.value.pvChargeLimitMode,"onUpdate:modelValue":s[7]||(s[7]=l=>r.value.pvChargeLimitMode=l),options:le(qm).map(l=>[l.name,l.id])},null,8,["modelValue","options"])]),_:1}),r.value.pvChargeLimitMode=="soc"?(se(),De(ut,{key:0,title:"Maximaler Ladestand",icon:"fa-sliders",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"maxSoc",modelValue:r.value.pvTargetSoc,"onUpdate:modelValue":s[8]||(s[8]=l=>r.value.pvTargetSoc=l),min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])]),_:1})):Me("",!0),r.value.pvChargeLimitMode=="amount"?(se(),De(ut,{key:1,title:"Zu ladende Energie",icon:"fa-sliders",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"maxEnergy",modelValue:n.value,"onUpdate:modelValue":s[9]||(s[9]=l=>n.value=l),min:0,max:100,step:1,unit:"kWh"},null,8,["modelValue"])]),_:1})):Me("",!0)]))}}),o4=Xe(i4,[["__scopeId","data-v-0e3a3e4d"]]),s4=["id"],a4={class:"modal-dialog modal-lg modal-fullscreen-lg-down shadow"},l4={class:"modal-content"},u4={class:"modal-header"},c4={class:"modal-title"},f4={class:"modal-body"},d4={class:"modal-footer d-flex justify-content-center"},h4=We({__name:"ModalComponent",props:{modalId:{}},setup(e){const t=e;return Hr(()=>{}),(r,n)=>(se(),De(Ew,{to:"body"},[U("div",{id:t.modalId,class:"modal fade"},[U("div",a4,[U("div",l4,[U("div",u4,[U("h3",c4,[It(r.$slots,"title",{},void 0,!0)]),n[0]||(n[0]=U("button",{type:"button",class:"btn-close d-flex justify-content-center pt-3 pb-0","data-bs-dismiss":"modal"},[U("span",{class:"fa-solid fa-xl fa-circle-check"})],-1))]),U("div",f4,[It(r.$slots,"default",{},void 0,!0)]),U("div",d4,[It(r.$slots,"footer",{},void 0,!0),n[1]||(n[1]=U("button",{class:"close-button-bottom btn btn-secondary","data-bs-dismiss":"modal"}," Schließen ",-1))])])])],8,s4)]))}}),gl=Xe(h4,[["__scopeId","data-v-f2a98bb6"]]),p4={class:"configitem grid-col-12 mt-0 mb-0 px-0 py-0"},g4={class:"titlerow m-0 p-0 subgrid justify-content-between align-items-center"},m4={class:"lefttitle d-flex justify-content-start align-items-baseline"},y4={class:"d-flex"},v4={class:"righttitle d-flex align-items-center"},b4={class:"inlinecontent"},_4={class:"contentrow ms-1 mb-2 p-0 pt-2 d-flex justify-content-stretch align-items-center"},w4=We({__name:"ConfigItem2",props:{title:{},infotext:{},icon:{},fullwidth:{type:Boolean}},setup(e){const t=e,r=et(!1);function n(){r.value=!r.value}const i=_e(()=>{let o={color:"var(--color-charging)"};return r.value&&(o.color="var(--color-battery)"),o});return(o,a)=>(se(),De(ro,{fullwidth:!!e.fullwidth},{default:Ae(()=>[U("div",p4,[U("div",g4,[U("span",m4,[U("span",{class:"d-flex align-items-center m-0 p-0",onClick:n},[t.icon?(se(),Se("i",{key:0,class:Qe(["fa-solid fa-sm m-0 p-0 me-2 item-icon",t.icon])},null,2)):Me("",!0),Ke(" "+$e(e.title),1)]),U("span",y4,[t.infotext?(se(),Se("i",{key:0,class:"fa-solid fa-sm fa-circle-question ms-3 me-2",style:ot(i.value),onClick:n},null,4)):Me("",!0)])]),U("span",v4,[U("span",b4,[It(o.$slots,"inline-item",{},void 0,!0)])])]),r.value?(se(),Se("p",{key:0,class:"infotext shadow m-0 ps-2 mb-1 p-3",onClick:n},[a[0]||(a[0]=U("i",{class:"me-1 fa-solid fa-sm fa-circle-info"},null,-1)),Ke(" "+$e(e.infotext),1)])):Me("",!0),U("div",_4,[It(o.$slots,"default",{},void 0,!0)])])]),_:3},8,["fullwidth"]))}}),pt=Xe(w4,[["__scopeId","data-v-e6631c96"]]),S4={class:"form-group"},E4=We({__name:"TextInput",props:{modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=t,i=_e({get(){return r.modelValue},set(o){n("update:modelValue",o)}});return(o,a)=>(se(),Se("div",S4,[wi(U("input",{id:"name","onUpdate:modelValue":a[0]||(a[0]=s=>i.value=s),type:"text",class:"form-control"},null,512),[[Pc,i.value]])]))}}),Pg=Xe(E4,[["__scopeId","data-v-109e379b"]]),x4=["id","value"],T4=We({__name:"RadioInput",props:{options:{},modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=t,i=_e({get(){return r.modelValue},set(s){n("update:modelValue",s)}});function o(s){return r.options[s][2]?{color:r.options[s][2]}:{color:"var(--color-fg)"}}function a(s){let l=s.target;for(;l&&!l.value&&l.parentElement;)l=l.parentElement;l.value&&(i.value=l.value)}return(s,l)=>(se(),Se("div",null,[(se(!0),Se(Ge,null,it(e.options,(u,c)=>(se(),Se("button",{id:"radio-"+u[1],key:c,class:Qe(["btn btn-outline-secondary radiobutton me-2 mb-0 px-2",u[1]==i.value?"active":""]),value:u[1],style:ot(o(c)),onClick:a},[U("span",{style:ot(o(c))},[u[3]?(se(),Se("i",{key:0,class:Qe(["fa-solid",u[3]])},null,2)):Me("",!0),Ke(" "+$e(u[0]),1)],4)],14,x4))),128))]))}}),tT=Xe(T4,[["__scopeId","data-v-df222cbe"]]),A4={class:"p-1 m-1"},I4={class:"input-group"},C4=["id"],M4=We({__name:"DateInput2",props:{inputId:{type:String,required:!0},modelValue:{type:Date,required:!0}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e;var n=document.getElementById("inputDate");const i=t;function o(s){i("update:modelValue",s)}Hr(()=>{n=document.getElementById(r.inputId),n.value=r.modelValue.toISOString().substring(0,10),n.addEventListener("change",a)});function a(s){const u=s.target.value.split("-"),c=parseInt(u[0]),f=parseInt(u[1])-1,d=parseInt(u[2]);o(new Date(c,f,d))}return(s,l)=>(se(),Se("span",A4,[U("div",I4,[U("input",{id:e.inputId,class:"form-control",type:"date",pattern:"\\d{2}.\\d{2}.\\d{4}",placeholder:"DD.MM.YYYY"},null,8,C4)])]))}}),Og=Xe(M4,[["__scopeId","data-v-5d153a32"]]),k4={class:"d-flex"},P4=["id","onUpdate:modelValue","value"],O4=["for"],L4=We({__name:"CheckBoxInput",props:{options:{},modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=t,i=_e({get(){return r.modelValue},set(a){console.log("SET CHECKBOX"),n("update:modelValue",a)}});function o(a){return i.value[a]?{color:"var(--color-pv)"}:{color:"var(--color-menu)"}}return(a,s)=>(se(),Se("div",k4,[(se(!0),Se(Ge,null,it(e.options,(l,u)=>(se(),Se("div",{key:u},[wi(U("input",{id:"check"+u,"onUpdate:modelValue":c=>i.value[u]=c,class:"form-check-input",type:"checkbox",value:l},null,8,P4),[[Oc,i.value[u]]]),U("label",{class:"form-check-label px-2",for:"check"+u,style:ot(o(u))},$e(e.options[u]),13,O4)]))),128))]))}}),rT=Xe(L4,[["__scopeId","data-v-24da8da3"]]),R4={class:"planeditor p-2"},N4=We({__name:"EditSchedule",props:{modelValue:{},cpId:{}},emits:["update:modelValue","deletePlan"],setup(e,{emit:t}){const r=e,n=t,i=_e({get(){return r.modelValue},set(s){n("update:modelValue",s)}}),o=_e({get(){return i.value.limit.amount/1e3},set(s){i.value.limit.amount=s*1e3}}),a=_e({get(){return new Date(i.value.frequency.once)},set(s){i.value.frequency.once=`${s.getFullYear()}-${s.getMonth()+1}-${s.getDate()}`}});return(s,l)=>(se(),De(gl,{"modal-id":"schedulePlanSettings-"+e.cpId+"-"+e.modelValue.id},{title:Ae(()=>[Ke($e(r.modelValue.name),1)]),footer:Ae(()=>[U("button",{class:"closebutton btn btn-secondary",onClick:l[0]||(l[0]=u=>s.$emit("update:modelValue",i.value))}," Speichern ")]),default:Ae(()=>[U("div",R4,[we(pt,{title:"Name",icon:"fa-calendar-check",fullwidth:!0},{"inline-item":Ae(()=>[we(Pg,{modelValue:i.value.name,"onUpdate:modelValue":l[1]||(l[1]=u=>i.value.name=u),text:"Name des Plans"},null,8,["modelValue"])]),_:1}),we(pt,{title:"Aktiv",icon:"fa-power-off",fullwidth:!0},{"inline-item":Ae(()=>[we(pr,{modelValue:i.value.active,"onUpdate:modelValue":l[2]||(l[2]=u=>i.value.active=u)},null,8,["modelValue"])]),_:1}),we(pt,{title:"Zielzeit",icon:"fa-clock",fullwidth:!0},{"inline-item":Ae(()=>[we(Pg,{modelValue:i.value.time,"onUpdate:modelValue":l[3]||(l[3]=u=>i.value.time=u),text:"Zielzeit (HH:MM)"},null,8,["modelValue"])]),_:1}),we(pt,{title:"Ladestrom (A)",icon:"fa-bolt",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"chargeCurrent",modelValue:i.value.current,"onUpdate:modelValue":l[4]||(l[4]=u=>i.value.current=u),min:6,max:32,step:1,unit:"A"},null,8,["modelValue"])]),_:1}),we(pt,{title:"Ziel",icon:"fa-bullseye",fullwidth:!0},{"inline-item":Ae(()=>[we(tT,{modelValue:i.value.limit.selected,"onUpdate:modelValue":l[5]||(l[5]=u=>i.value.limit.selected=u),options:[["Soc","soc"],["Energie","amount"]]},null,8,["modelValue"])]),_:1}),i.value.limit.selected==="soc"?(se(),De(pt,{key:0,title:"Ziel-SoC",icon:"fa-battery-half",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"evSoc",modelValue:i.value.limit.soc_scheduled,"onUpdate:modelValue":l[6]||(l[6]=u=>i.value.limit.soc_scheduled=u),min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])]),_:1})):Me("",!0),i.value.limit.selected==="soc"?(se(),De(pt,{key:1,title:"Maximaler SoC bei Überschuss",icon:"fa-battery-half",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"evSoc",modelValue:i.value.limit.soc_limit,"onUpdate:modelValue":l[7]||(l[7]=u=>i.value.limit.soc_limit=u),min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])]),_:1})):Me("",!0),i.value.limit.selected==="amount"?(se(),De(pt,{key:2,title:"Energiemenge (kWh)",icon:"fa-charging-station",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"energyAmount",modelValue:o.value,"onUpdate:modelValue":l[8]||(l[8]=u=>o.value=u),min:1,max:150,step:1,unit:"kWh"},null,8,["modelValue"])]),_:1})):Me("",!0),we(pt,{title:"Wiederholungen",icon:"fa-repeat",fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:i.value.frequency.selected,"onUpdate:modelValue":l[9]||(l[9]=u=>i.value.frequency.selected=u),options:[["Einmalig","once"],["Täglich","daily"],["Wöchentlich","weekly"]]},null,8,["modelValue"])]),_:1}),i.value.frequency.selected==="once"?(se(),De(pt,{key:3,title:"Datum"},{"inline-item":Ae(()=>[we(Og,{modelValue:a.value,"onUpdate:modelValue":l[10]||(l[10]=u=>a.value=u),"input-id":"schedule-date-"+r.cpId.toString()+"-"+i.value.id},null,8,["modelValue","input-id"])]),_:1})):Me("",!0),i.value.frequency.selected==="weekly"?(se(),De(pt,{key:4,title:"Tage"},{default:Ae(()=>[we(rT,{modelValue:i.value.frequency.weekly,"onUpdate:modelValue":l[11]||(l[11]=u=>i.value.frequency.weekly=u),options:["Mo","Di","Mi","Do","Fr","Sa","So"]},null,8,["modelValue"])]),_:1})):Me("",!0),we(pt,{title:"Strompreisbasiert Laden",icon:"fa-coins",fullwidth:!0},{"inline-item":Ae(()=>[we(pr,{modelValue:i.value.et_active,"onUpdate:modelValue":l[12]||(l[12]=u=>i.value.et_active=u)},null,8,["modelValue"])]),_:1}),we(pt,{title:"Anzahl Phasen Zielladen",icon:"fa-plug",fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:i.value.phases_to_use,"onUpdate:modelValue":l[13]||(l[13]=u=>i.value.phases_to_use=u),options:[["1",1],["Maximum",3],["Automatik",0]]},null,8,["modelValue"])]),_:1}),we(pt,{title:"Anzahl Phasen bei PV-Überschuss",icon:"fa-plug",fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:i.value.phases_to_use_pv,"onUpdate:modelValue":l[14]||(l[14]=u=>i.value.phases_to_use_pv=u),options:[["1",1],["Maximum",3],["Automatik",0]]},null,8,["modelValue"])]),_:1}),U("button",{class:"btn delete_button align-self-center",type:"button",onClick:l[15]||(l[15]=u=>s.$emit("deletePlan",i.value))}," Plan löschen ")])]),_:1},8,["modal-id"]))}}),$4=Xe(N4,[["__scopeId","data-v-885c7d27"]]),D4={class:"plantable"},B4={class:"planbuttons-left"},F4=["onClick"],U4={class:"targettime"},j4={class:"limit"},V4={class:"planbuttons-right"},W4=["onClick"],z4={key:0,class:"frequency mt-2"},H4={key:1,class:"frequency mt-2"},q4={class:"planname mt-2"},G4=We({__name:"ConfigScheduled",props:{chargePoint:{}},setup(e){const t=e,r=et(0),n=_e(()=>t.chargePoint?.chargeTemplate?.chargemode.scheduled_charging.plans??[]);var i=et(null);function o(g){switch(n.value[g].frequency.selected){case"once":return l(n.value[g].frequency.once);case"daily":return"täglich";case"weekly":return"";default:return""}}function a(g){switch(n.value[g].limit.selected){case"amount":return qi(n.value[g].limit.amount);case"soc":return n.value[g].limit.soc_scheduled+"%"}}function s(g){return n.value[g].time}function l(g){const m=g.split("-");return`${Number(m[2])}.${Number(m[1])}.`}function u(g){return{color:n.value[g].active?"var(--color-switchGreen)":"var(--color-switchRed)"}}function c(g){return{color:n.value[g].active?"var(--color-fg)":"var(--color-menu)"}}function f(g){return n.value[g].limit.selected=="soc"?"fa-arrow-right":"fa-bolt"}function d(g){t.chargePoint.chargeTemplate.chargemode.scheduled_charging.plans[g].active=!n.value[g].active,St(t.chargePoint.id)}function h(g){const m=`schedulePlanSettings-${t.chargePoint.id}-${n.value[g].id}`;r.value=g,i.value=new _i(document.getElementById(m)),i.value.toggle()}function p(){i.value.hide(),St(t.chargePoint.id)}function y(){No({command:"addChargeTemplateSchedulePlan",data:{template:t.chargePoint.chargeTemplate.id,chargepoint:t.chargePoint.id,changed_in_theme:!0}})}function v(){i.value.hide(),No({command:"removeChargeTemplateSchedulePlan",data:{template:t.chargePoint.chargeTemplate.id,plan:n.value[r.value].id,chargepoint:t.chargePoint.id,changed_in_theme:!0}})}return(g,m)=>(se(),Se(Ge,null,[m[1]||(m[1]=U("p",{class:"heading pt-2"},"Zielladen - Pläne:",-1)),U("div",D4,[(se(!0),Se(Ge,null,it(n.value,(b,_)=>(se(),Se("div",{key:_,class:"plandisplay",style:ot(c(_))},[U("span",B4,[U("i",{class:Qe(["planswitch fa fa-xl",b.active?"fa-toggle-on":"fa-toggle-off"]),style:ot(u(_)),type:"button",onClick:w=>d(_)},null,14,F4)]),U("span",U4,$e(s(_)),1),U("span",j4,[U("i",{class:Qe(["fa fa-sm me-1",f(_)])},null,2),Ke($e(a(_)),1)]),U("span",V4,[U("i",{class:"fa-solid fa-lg fa-gear",type:"button",onClick:w=>h(_)},null,8,W4)]),b.frequency.selected!="weekly"?(se(),Se("span",z4,$e(o(_)),1)):(se(),Se("div",H4,[(se(!0),Se(Ge,null,it(b.frequency.weekly,(w,E)=>(se(),Se("i",{key:E,class:Qe("fa-solid fa-xs "+(w?"fa-charging-station":"fa-circle-xmark"))},null,2))),128))])),U("span",q4,$e(b.name),1),m[0]||(m[0]=U("hr",{class:"dividerline"},null,-1))],4))),128))]),U("button",{class:"createButton btn btn-sm",onClick:y},"Neuer Plan"),(se(!0),Se(Ge,null,it(n.value,b=>(se(),De($4,{key:b.id,"model-value":b,"cp-id":e.chargePoint.id,"onUpdate:modelValue":p,onDeletePlan:v},null,8,["model-value","cp-id"]))),128))],64))}}),Y4=Xe(G4,[["__scopeId","data-v-bffeae93"]]),K4=We({__name:"TimeInput",props:{modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=t,i=_e({get(){return r.modelValue},set(o){n("update:modelValue",o)}});return(o,a)=>wi((se(),Se("input",{"onUpdate:modelValue":a[0]||(a[0]=s=>i.value=s),type:"time",class:"form-control",name:"t"},null,512)),[[Pc,i.value]])}}),N_=Xe(K4,[["__scopeId","data-v-51c81cc3"]]),X4={class:"planeditor p-2"},Q4=We({__name:"EditTimeplan",props:{modelValue:{},cpId:{}},emits:["update:modelValue","deletePlan"],setup(e,{emit:t}){const r=e,n=t,i=_e({get(){return r.modelValue},set(l){n("update:modelValue",l)}}),o=_e({get(){return i.value.limit.amount/1e3},set(l){i.value.limit.amount=l*1e3}}),a=_e({get(){return new Date(i.value.frequency.once[0])},set(l){i.value.frequency.once[0]=`${l.getFullYear()}-${l.getMonth()+1}-${l.getDate()}`}}),s=_e({get(){return new Date(i.value.frequency.once[1])},set(l){i.value.frequency.once[1]=`${l.getFullYear()}-${l.getMonth()+1}-${l.getDate()}`}});return(l,u)=>(se(),De(gl,{"modal-id":"timePlanSettings-"+e.cpId+"-"+e.modelValue.id},{title:Ae(()=>[Ke(" Einstellungen Zeitladen: "+$e(e.modelValue.name),1)]),footer:Ae(()=>[U("button",{class:"closebutton btn btn-secondary",onClick:u[0]||(u[0]=c=>l.$emit("update:modelValue",i.value))}," Speichern ")]),default:Ae(()=>[U("div",X4,[we(pt,{title:"Name",icon:"fa-calendar-check",fullwidth:!0},{"inline-item":Ae(()=>[we(Pg,{modelValue:i.value.name,"onUpdate:modelValue":u[1]||(u[1]=c=>i.value.name=c),text:"Name des Plans"},null,8,["modelValue"])]),_:1}),we(pt,{title:"Aktiv",icon:"fa-power-off",fullwidth:!0},{"inline-item":Ae(()=>[we(pr,{modelValue:i.value.active,"onUpdate:modelValue":u[2]||(u[2]=c=>i.value.active=c)},null,8,["modelValue"])]),_:1}),we(pt,{title:"Ladebeginn",icon:"fa-clock",fullwidth:!0},{"inline-item":Ae(()=>[we(N_,{modelValue:i.value.time[0],"onUpdate:modelValue":u[3]||(u[3]=c=>i.value.time[0]=c),text:"Startzeit (HH:MM)"},null,8,["modelValue"])]),_:1}),we(pt,{title:"Ladeende",icon:"fa-clock",fullwidth:!0},{"inline-item":Ae(()=>[we(N_,{modelValue:i.value.time[1],"onUpdate:modelValue":u[4]||(u[4]=c=>i.value.time[1]=c),text:"Zielzeit (HH:MM)"},null,8,["modelValue"])]),_:1}),we(pt,{title:"Ladestrom",icon:"fa-bolt",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"chargeCurrent",modelValue:i.value.current,"onUpdate:modelValue":u[5]||(u[5]=c=>i.value.current=c),min:6,max:32,step:1,unit:"A"},null,8,["modelValue"])]),_:1}),we(pt,{title:"Begrenzung",icon:"fa-bullseye",fullwidth:!0},{"inline-item":Ae(()=>[we(tT,{modelValue:i.value.limit.selected,"onUpdate:modelValue":u[6]||(u[6]=c=>i.value.limit.selected=c),options:[["Aus","none"],["Soc","soc"],["Energie","amount"]]},null,8,["modelValue"])]),_:1}),i.value.limit.selected==="soc"?(se(),De(pt,{key:0,title:"Ziel-SoC für das Fahrzeug",icon:"fa-battery-half",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"evSoc",modelValue:i.value.limit.soc,"onUpdate:modelValue":u[7]||(u[7]=c=>i.value.limit.soc=c),min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])]),_:1})):Me("",!0),i.value.limit.selected==="amount"?(se(),De(pt,{key:1,title:"Ziel-Energie",icon:"fa-charging-station",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"energyAmount",modelValue:o.value,"onUpdate:modelValue":u[8]||(u[8]=c=>o.value=c),min:1,max:150,step:1,unit:"kWh"},null,8,["modelValue"])]),_:1})):Me("",!0),we(pt,{title:"Wiederholungen",icon:"fa-repeat",fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:i.value.frequency.selected,"onUpdate:modelValue":u[9]||(u[9]=c=>i.value.frequency.selected=c),options:[["Einmalig","once"],["Täglich","daily"],["Wöchentlich","weekly"]]},null,8,["modelValue"])]),_:1}),i.value.frequency.selected==="once"?(se(),De(pt,{key:2,title:"Gültig ab"},{"inline-item":Ae(()=>[we(Og,{modelValue:a.value,"onUpdate:modelValue":u[10]||(u[10]=c=>a.value=c),"input-id":"time-from-date-"+r.cpId.toString()+"-"+i.value.id},null,8,["modelValue","input-id"])]),_:1})):Me("",!0),i.value.frequency.selected==="once"?(se(),De(pt,{key:3,title:"Gültig bis"},{"inline-item":Ae(()=>[we(Og,{modelValue:s.value,"onUpdate:modelValue":u[11]||(u[11]=c=>s.value=c),"input-id":"time-to-date-"+r.cpId.toString()+"-"+i.value.id},null,8,["modelValue","input-id"])]),_:1})):Me("",!0),i.value.frequency.selected==="weekly"?(se(),De(pt,{key:4,title:"Tage"},{default:Ae(()=>[we(rT,{modelValue:i.value.frequency.weekly,"onUpdate:modelValue":u[12]||(u[12]=c=>i.value.frequency.weekly=c),options:["Mo","Di","Mi","Do","Fr","Sa","So"]},null,8,["modelValue"])]),_:1})):Me("",!0),we(pt,{title:"Anzahl Phasen",icon:"fa-plug",fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:i.value.phases_to_use,"onUpdate:modelValue":u[13]||(u[13]=c=>i.value.phases_to_use=c),options:[["1",1],["Maximum",3]]},null,8,["modelValue"])]),_:1}),U("button",{class:"btn delete_button align-self-center",type:"button",onClick:u[14]||(u[14]=c=>l.$emit("deletePlan",i.value))}," Plan löschen ")])]),_:1},8,["modal-id"]))}}),J4=Xe(Q4,[["__scopeId","data-v-93b96949"]]),Z4={class:"plantable"},eW={class:"planbuttons-left"},tW=["onClick"],rW={class:"targettime"},nW={class:"planbuttons-right"},iW=["onClick"],oW={key:0,class:"frequency mt-2"},sW={key:1,class:"frequency mt-2"},aW={class:"planname mt-2"},lW=We({__name:"ConfigTimed",props:{chargePoint:{}},setup(e){const t=e;var r=et(null);const n=et(0),i=t.chargePoint,o=_e(()=>t.chargePoint?.chargeTemplate?.time_charging.plans??[]);function a(v){switch(o.value[v].frequency.selected){case"once":return l(o.value[v].frequency.once);case"daily":return"täglich";case"weekly":return"";default:return""}}function s(v){return`${o.value[v].time[0]} -> ${o.value[v].time[1]}`}function l(v){const g=v[0].split("-"),m=v[1].split("-");return`${Number(g[2])}.${Number(g[1])}.-${Number(m[2])}.${Number(m[1])}`}function u(v){return{color:o.value[v].active?"var(--color-switchGreen)":"var(--color-switchRed)"}}function c(v){return{color:o.value[v].active?"var(--color-fg)":"var(--color-menu)"}}function f(v){t.chargePoint.chargeTemplate.time_charging.plans[v].active=!o.value[v].active,St(t.chargePoint.id)}function d(v){const g=`timePlanSettings-${t.chargePoint.id}-${o.value[v].id}`;n.value=v,r.value=new _i(document.getElementById(g)),r.value.toggle()}function h(){r.value.hide(),St(t.chargePoint.id)}function p(){No({command:"addChargeTemplateTimeChargingPlan",data:{template:t.chargePoint.chargeTemplate.id,chargepoint:t.chargePoint.id,changed_in_theme:!0}})}function y(){r.value.hide(),No({command:"removeChargeTemplateTimeChargingPlan",data:{template:t.chargePoint.chargeTemplate.id,plan:o.value[n.value].id,chargepoint:t.chargePoint.id,changed_in_theme:!0}})}return(v,g)=>(se(),Se(Ge,null,[we(ut,{title:"Zeitladen aktiv",icon:"fa-clock",fullwidth:!0},{"inline-item":Ae(()=>[we(pr,{modelValue:le(i).timedCharging,"onUpdate:modelValue":g[0]||(g[0]=m=>le(i).timedCharging=m)},null,8,["modelValue"])]),_:1}),g[2]||(g[2]=U("p",{class:"heading pt-2"},"Zeitpläne:",-1)),U("div",Z4,[(se(!0),Se(Ge,null,it(o.value,(m,b)=>(se(),Se("div",{key:b,class:"plandisplay",style:ot(c(b))},[U("span",eW,[U("i",{class:Qe(["planswitch fa fa-xl",m.active?"fa-toggle-on":"fa-toggle-off"]),style:ot(u(b)),type:"button",onClick:_=>f(b)},null,14,tW)]),U("span",rW,$e(s(b)),1),U("span",nW,[U("i",{class:"fa-solid fa-xl fa-gear",onClick:_=>d(b)},null,8,iW)]),m.frequency.selected!="weekly"?(se(),Se("span",oW,$e(a(b)),1)):(se(),Se("div",sW,[(se(!0),Se(Ge,null,it(m.frequency.weekly,(_,w)=>(se(),Se("i",{key:w,class:Qe("fa-solid fa-xs "+(_?"fa-charging-station":"fa-circle-xmark"))},null,2))),128))])),U("span",aW,$e(m.name),1),g[1]||(g[1]=U("hr",{class:"dividerline"},null,-1))],4))),128))]),U("button",{class:"createButton btn btn-sm",onClick:p},"Neuer Plan"),(se(!0),Se(Ge,null,it(o.value,m=>(se(),De(J4,{key:m.id,"model-value":m,"cp-id":e.chargePoint.id,"onUpdate:modelValue":h,onDeletePlan:y},null,8,["model-value","cp-id"]))),128))],64))}}),uW=Xe(lW,[["__scopeId","data-v-88f40880"]]),cW={id:"pricechart",class:"p-0 m-0"},fW={viewBox:"0 0 400 260"},dW=["transform"],hW=["id","origin"],pW=["id","transform"],gW=["id","transform"],mW=["d"],yW=["d"],vW=["d"],bW=["d"],es=400,Nd=250,$d=12,nT=We({__name:"PriceChart",props:{id:{},maxPrice:{}},setup(e){const t=e,r=et(!1),n={top:0,bottom:15,left:20,right:5},i=_e(()=>{const v=new Date;let g=[];return mt.etPriceList.size>0&&mt.etPriceList.forEach((m,b)=>{b>=v&&g.push([b,m])}),g}),o=_e(()=>i.value.length>1?(es-n.left-n.right)/i.value.length:0),a=_e(()=>{let v=pn(i.value,g=>g[0]);return v[1]&&(v[1]=new Date(v[1]),v[1].setTime(v[1].getTime()+9e5)),Hi().range([n.left,es-n.left-n.right]).domain(v)}),s=_e(()=>{let v=[0,0];return i.value.length>0?(v=pn(i.value,g=>g[1]),v[0]=Math.floor(v[0]-1),v[1]=Math.floor(v[1]+1)):v=[0,0],v}),l=_e(()=>gn().range([Nd-n.bottom,0]).domain(s.value)),u=_e(()=>{if(t.maxPrice!=null){const v=ri(),g=[[n.left,l.value(t.maxPrice)],[es-n.left-n.right,l.value(t.maxPrice)]];return v(g)}else return""}),c=_e(()=>{const v=ri(),g=[[n.left,l.value(Ce.lowerPriceBound)],[es-n.left-n.right,l.value(Ce.lowerPriceBound)]];return v(g)}),f=_e(()=>{const v=ri(),g=[[n.left,l.value(Ce.upperPriceBound)],[es-n.left-n.right,l.value(Ce.upperPriceBound)]];return v(g)}),d=_e(()=>{const v=ri(),g=[[n.left,l.value(0)],[es-n.left-n.right,l.value(0)]];return v(g)}),h=_e(()=>eu(a.value).ticks(i.value.length).tickSize(5).tickSizeInner(-Nd).tickFormat(v=>v.getHours()%6==0&&v.getMinutes()==0?Ro("%H:%M")(v):"")),p=_e(()=>Rc(l.value).ticks(s.value[1]-s.value[0]).tickSizeInner(-375).tickFormat(v=>v%5!=0?"":v.toString())),y=_e(()=>{if(r.value==!0,i.value.length==0)return"PriceChart.vue";const v=dt("g#pricechart-"+t.id);v.selectAll("*").remove(),v.selectAll("bar").data(i.value).enter().append("g").append("rect").attr("class","bar").attr("x",C=>a.value(C[0])).attr("y",C=>l.value(C[1])).attr("width",o.value).attr("height",C=>l.value(s.value[0])-l.value(C[1])).attr("fill",C=>t.maxPrice!=null?C[1]<=t.maxPrice?"var(--color-charging)":"var(--color-axis)":"var(--color-charging)");const m=dt("g#xaxis-"+t.id);m.selectAll("*").remove(),m.call(h.value),m.selectAll(".tick").attr("font-size",$d).attr("color","var(--color-bg)"),m.selectAll(".tick line").attr("stroke","var(--color-bg)").attr("stroke-width",C=>C.getMinutes()==0?C.getHours()%6==0?"2":"0.5":"0"),m.select(".domain").attr("stroke","var(--color-bg");const b=dt("g#yaxis-"+t.id);b.selectAll("*").remove(),b.call(p.value),b.selectAll(".tick").attr("font-size",$d).attr("color","var(--color-bg)"),b.selectAll(".tick line").attr("stroke","var(--color-bg)").attr("stroke-width",C=>C%5==0?"2":"0.5"),b.select(".domain").attr("stroke","var(--color-bg)");const _=dt("g#tooltips");_.selectAll("*").remove();const w=_.selectAll("ttip").data(i.value).enter().append("g").attr("class","ttarea");w.append("rect").attr("x",C=>a.value(C[0])).attr("y",C=>l.value(C[1])).attr("height",C=>l.value(s.value[0])-l.value(C[1])).attr("class","ttrect").attr("width",o.value).attr("opacity","1%").attr("fill","var(--color-charging)");const E=w.append("g").attr("class","ttmessage").attr("transform",C=>"translate("+(a.value(C[0])-30+o.value/2)+","+(l.value(C[1])-16)+")");E.append("rect").attr("rx",5).attr("width",60).attr("height",30).attr("fill","var(--color-menu)");const T=E.append("text").attr("text-anchor","middle").attr("x",30).attr("y",12).attr("font-size",$d).attr("fill","var(--color-bg)");return T.append("tspan").attr("x",30).attr("dy","0em").text(C=>Ro("%H:%M")(C[0])),T.append("tspan").attr("x",30).attr("dy","1.1em").text(C=>Math.round(C[1]*10)/10+" ct"),"PriceChart.vue"});return Hr(()=>{r.value=!r.value}),(v,g)=>(se(),Se("figure",cW,[(se(),Se("svg",fW,[U("g",{transform:"translate("+n.top+","+n.right+")"},[U("g",{id:"pricechart-"+e.id,origin:y.value},null,8,hW),U("g",{id:"xaxis-"+e.id,class:"axis",transform:`translate(0,${Nd-n.bottom})`},null,8,pW),U("g",{id:"yaxis-"+e.id,class:"axis",transform:`translate(${n.left},0)`},null,8,gW),s.value[0]<0?(se(),Se("path",{key:0,d:d.value,stroke:"var(--color-fg)","stroke-width":"1"},null,8,mW)):Me("",!0),U("path",{d:c.value,stroke:"green"},null,8,yW),U("path",{d:f.value,stroke:"red"},null,8,vW),U("path",{d:u.value,stroke:"yellow"},null,8,bW)],8,dW),g[0]||(g[0]=U("g",{id:"tooltips"},null,-1))]))]))}}),_W={class:"d-flex flex-column rangeinput"},wW={class:"d-flex flex-fill justify-content-between align-items-center"},SW={class:"d-flex flex-fill flex-column justify-content-center m-0 p-0"},EW=["id","min","max","step"],xW={class:"d-flex justify-content-between align-items-center"},TW={class:"minlabel ps-4"},AW={class:"valuelabel"},IW={class:"maxlabel pe-4"},CW=We({__name:"DateRangeInput",props:{id:{},min:{},max:{},step:{},unit:{},modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=t,i=_e({get(){return r.modelValue.getTime()},set(s){n("update:modelValue",new Date(s))}});function o(){i.value>r.min.getTime()&&(i.value=i.value-r.step)}function a(){i.value(se(),Se("span",_W,[U("span",wW,[U("span",{type:"button",class:"minusButton",onClick:o},[...l[1]||(l[1]=[U("i",{class:"fa fa-xl fa-minus-square me-2"},null,-1)])]),U("div",SW,[wi(U("input",{id:e.id,"onUpdate:modelValue":l[0]||(l[0]=u=>i.value=u),type:"range",class:"form-range flex-fill",min:e.min.getTime(),max:e.max.getTime(),step:e.step},null,8,EW),[[Pc,i.value,void 0,{number:!0}]])]),U("span",{type:"button",class:"plusButton",onClick:a},[...l[2]||(l[2]=[U("i",{class:"fa fa-xl fa-plus-square ms-2"},null,-1)])])]),U("span",xW,[U("span",TW,$e(le(ka)(e.min,!0)),1),U("span",AW,$e(le(ka)(new Date(i.value),!0)),1),U("span",IW,$e(le(ka)(e.max,!0)),1)])]))}}),MW=Xe(CW,[["__scopeId","data-v-b1b41e8b"]]),kW={class:"pricecalculator p-2"},PW=We({__name:"PriceCalculator",props:{modelValue:{},cpId:{}},emits:["update:modelValue","deletePlan"],setup(e,{emit:t}){const r=e,n=t,i=_e(()=>Ye[r.cpId]),o=et(i.value?.soc??0);var a=et(o.value<80?80:100);const s=et(30),l=_e(()=>UE[i.value?.evTemplate]),u=_e({get(){return r.modelValue},set(y){n("update:modelValue",y)}}),c=et(mt.maxDate()??new Date),f=_e(()=>{if(l.value!=null){const y=l.value.battery_capacity??0,v=l.value.efficiency??90,g=l.value.max_phases,m=l.value.max_current_multi_phases*g*v/100*230;return y*(a.value-o.value)/100/m*60}else return-1}),d=_e(()=>mt.maxPriceForDuration(f.value+s.value,c.value)),h=_e(()=>d.value>0?`${Math.round(d.value*100)/100} ${wt.country=="ch"?"Rp":"ct"}`:"Ziel nicht erreichbar"),p=_e(()=>d.value>u.value?"color: var(--color-charging);":"color: var(--color-evu);");return(y,v)=>(se(),De(gl,{"modal-id":"priceCalculator-"+e.cpId},{title:Ae(()=>[Ke(" Maximaler Strompreis für "+$e(i.value.vehicleName),1)]),footer:Ae(()=>[U("button",{class:"closebutton btn btn-secondary",onClick:v[0]||(v[0]=g=>y.$emit("update:modelValue",d.value))}," Preis bestätigen ")]),default:Ae(()=>[U("div",kW,[we(lt,{class:"infoitem",heading:"Aktueller SoC"},{default:Ae(()=>[Ke($e(o.value)+"% ",1)]),_:1}),we(lt,{class:"infoitem",heading:"Batterie-Kapazität"},{default:Ae(()=>[Ke($e((l.value?.battery_capacity??0)/1e3)+" kWh ",1)]),_:1}),we(lt,{class:"infoitem",heading:"Ladestrom"},{default:Ae(()=>[Ke($e(l.value?.max_current_multi_phases??0)+" A ",1)]),_:1}),we(pt,{title:"Ziel-SoC",icon:"fa-battery-full",class:"mt-4",fullwidth:!0,infotext:`Der gewünschte Ladezustand, der bis zur Zielzeit erreicht sein soll. Aktueller SoC: ${o.value}%`},{default:Ae(()=>[we(Ot,{id:"targetSoc",modelValue:le(a),"onUpdate:modelValue":v[1]||(v[1]=g=>tr(a)?a.value=g:a=g),min:o.value,max:100,step:1,unit:"%"},null,8,["modelValue","min"])]),_:1},8,["infotext"]),we(pt,{title:"Zielzeit",icon:"fa-clock",fullwidth:!0,infotext:"Die Uhrzeit, zu der das Fahrzeug auf dem angegebenen Ladestand sein soll."},{default:Ae(()=>[we(MW,{id:"targetTime",modelValue:c.value,"onUpdate:modelValue":v[2]||(v[2]=g=>c.value=g),min:new Date,max:le(mt).maxDate()??new Date,step:9e5,unit:"min"},null,8,["modelValue","min","max"])]),_:1}),we(pt,{title:"Ladezeit-Puffer",icon:"fa-clock",class:"mb-4",fullwidth:!0,infotext:"Der zeitliche Puffer, der zur berechneten Ladezeit hinzugerechnet wird. Dadurch wird sichergestellt, dass das Fahrzeug rechtzeitig fertig geladen ist."},{default:Ae(()=>[we(Ot,{id:"bufferMinutes",modelValue:s.value,"onUpdate:modelValue":v[3]||(v[3]=g=>s.value=g),min:0,max:60,step:1,unit:"min"},null,8,["modelValue"])]),_:1}),we(lt,{class:"infoitem",heading:"Ladezeit"},{default:Ae(()=>[Ke($e(Math.floor((f.value+s.value)/60))+"h "+$e(Math.round((f.value+s.value)%60))+"min ",1)]),_:1}),we(lt,{class:"infoitem",heading:"Höchstpreis"},{default:Ae(()=>[U("span",{class:"targetprice",style:ot(p.value)},$e(h.value),5)]),_:1})])]),_:1},8,["modal-id"]))}}),iT=Xe(PW,[["__scopeId","data-v-f66f0b29"]]),OW={class:"providername ms-1"},LW={class:"chargeDuration p-0 m-0"},RW={key:0,class:"p-3 pb-1 rangeInputContainer"},NW={key:1,class:"d-flex justify-content-between align-items-center mx-2 mb-4 mt-2"},$W=["disabled"],DW=We({__name:"PriceSelector",props:{chargepoint:{},globalview:{type:Boolean}},setup(e){const t=e,r=et(0);var n=et(null);let i=t.chargepoint?et(t.chargepoint.etMaxPrice):et(0);const o=et(!1),a=et(t.chargepoint),s=_e({get(){return i.value},set(g){i.value=g,o.value=!0}});function l(){a.value&&(Ye[a.value.id].etMaxPrice=s.value),o.value=!1}const u=et(!1),c=_e(()=>o.value?{background:"var(--color-charging)"}:{background:"var(--color-menu)"}),f=_e(()=>{let g=[];return mt.etPriceList.forEach(m=>{g.push(m)}),g.sort((m,b)=>m-b)}),d=_e(()=>{const m=f.value.filter(b=>b<=s.value).length;return`${Math.floor(m*15/60)}h ${m*15%60}min`});function h(){let g=f.value[0];for(let m of f.value){if(m>=s.value)break;g=m}s.value=g}function p(){let g=f.value[0];for(let m of f.value)if(m>s.value){g=m;break}else g=m;s.value=g}function y(){const g=`priceCalculator-${t.chargepoint.id}`;n.value=new _i(document.getElementById(g)),n.value.toggle()}function v(g){n.value.hide(),s.value=g,a.value&&(Ye[a.value.id].etMaxPrice=s.value),o.value=!1}return Hr(()=>{u.value=!u.value}),(g,m)=>(se(),Se(Ge,null,[U("p",OW,"Anbieter: "+$e(le(mt).etProvider),1),we(nT,{id:`cp-${t.chargepoint?.id}`,"max-price":s.value},null,8,["id","max-price"]),U("div",LW,"Ladezeit: "+$e(d.value),1),e.chargepoint!=null?(se(),Se("div",RW,[we(Ot,{id:"pricechart_local",modelValue:s.value,"onUpdate:modelValue":m[0]||(m[0]=b=>s.value=b),min:Math.floor(f.value[0]-1),max:Math.ceil(f.value[f.value.length-1]+1),step:.1,decimals:2,"show-subrange":!0,"subrange-min":f.value[0],"subrange-max":f.value[f.value.length-1],unit:le(wt).country=="ch"?"Rp":"ct"},null,8,["modelValue","min","max","subrange-min","subrange-max","unit"])])):Me("",!0),U("div",{class:"d-flex justify-content-between px-3 pb-2 pt-0 mt-0"},[U("button",{type:"button",class:"btn btn-sm jumpbutton",onClick:h},[...m[1]||(m[1]=[U("i",{class:"fa fa-sm fa-arrow-left"},null,-1)])]),U("button",{type:"button",class:"btn btn-sm jumpbutton",onClick:p},[...m[2]||(m[2]=[U("i",{class:"fa fa-sm fa-arrow-right"},null,-1)])])]),e.chargepoint!=null?(se(),Se("div",NW,[U("button",{class:"calculatorButton btn btn-secondary",type:"button",onClick:y}," Preis berechnen "),U("span",{class:"",onClick:l},[U("button",{type:"button",class:"btn btn-secondary confirmButton",style:ot(c.value),disabled:!o.value}," Bestätigen ",12,$W)])])):Me("",!0),we(iT,{"model-value":r.value,"cp-id":e.chargepoint.id,"onUpdate:modelValue":v},null,8,["model-value","cp-id"])],64))}}),oT=Xe(DW,[["__scopeId","data-v-40af4b3c"]]),BW={class:"pt-2 d-flex flex-column"},FW=We({__name:"ConfigEco",props:{chargepoint:{}},setup(e){const r=et(e.chargepoint);var n=0;const i=_e({get(){return r.value.ecoMaxEnergy/1e3},set(o){r.value.ecoMaxEnergy=o*1e3}});return(o,a)=>(se(),Se(Ge,null,[U("div",BW,[a[5]||(a[5]=U("div",{class:"heading ms-1"},"Eco-Laden:",-1)),le(mt).active&&le(mt).etPriceList.size>0?(se(),De(oT,{key:0,chargepoint:r.value},null,8,["chargepoint"])):Me("",!0),le(mt).active?(se(),De(ut,{key:1,title:"Ladestrom beim Preisladen",icon:"fa-bolt",infotext:le(xn).ecoMinCurrent,fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"minCurrent",modelValue:r.value.ecoMinCurrent,"onUpdate:modelValue":a[0]||(a[0]=s=>r.value.ecoMinCurrent=s),min:6,max:32,step:1,unit:"A"},null,8,["modelValue"])]),_:1},8,["infotext"])):Me("",!0),we(ut,{title:"Anzahl Phasen bei Überschuss",icon:"fa-plug",fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:r.value.ecoTargetPhases,"onUpdate:modelValue":a[1]||(a[1]=s=>r.value.ecoTargetPhases=s),options:[["1",1],["Maximum",3],["Auto",0]]},null,8,["modelValue"])]),_:1}),we(ut,{title:"Begrenzung",icon:"fa-hand",fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:r.value.ecoChargeLimitMode,"onUpdate:modelValue":a[2]||(a[2]=s=>r.value.ecoChargeLimitMode=s),options:le(qm).map(s=>[s.name,s.id])},null,8,["modelValue","options"])]),_:1}),r.value.ecoChargeLimitMode=="soc"?(se(),De(ut,{key:2,title:"Maximaler Ladestand",icon:"fa-sliders",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"maxSoc",modelValue:r.value.ecoTargetSoc,"onUpdate:modelValue":a[3]||(a[3]=s=>r.value.ecoTargetSoc=s),min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])]),_:1})):Me("",!0),r.value.ecoChargeLimitMode=="amount"?(se(),De(ut,{key:3,title:"Zu ladende Energie",icon:"fa-sliders",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"maxEnergy",modelValue:i.value,"onUpdate:modelValue":a[4]||(a[4]=s=>i.value=s),min:0,max:100,step:1,unit:"kWh"},null,8,["modelValue"])]),_:1})):Me("",!0)]),we(iT,{"model-value":le(n),"cp-id":e.chargepoint.id},null,8,["model-value","cp-id"])],64))}}),UW=Xe(FW,[["__scopeId","data-v-07a2ffff"]]),jW={class:"settingsheader mt-2 ms-1"},VW=We({__name:"ConfigGeneral",props:{chargepoint:{}},emits:["closeConfig"],setup(e){const r=e.chargepoint,n=_e({get(){return rt[r.connectedVehicle]?rt[r.connectedVehicle].chargeTemplateId:0},set(i){rt[r.connectedVehicle]&&(rt[r.connectedVehicle].chargeTemplateId=i),r.chargeTemplate=qa[i]}});return(i,o)=>(se(),Se(Ge,null,[U("p",jW," Ladeeinstellungen für "+$e(le(r).vehicleName)+": ",1),we(ut,{title:"Lademodus",icon:"fa-charging-station",infotext:le(xn).chargemode,fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:le(r).chargeMode,"onUpdate:modelValue":o[0]||(o[0]=a=>le(r).chargeMode=a),columns:3,options:Object.keys(le(zt)).map(a=>[le(zt)[a].name,a,le(zt)[a].color,le(zt)[a].icon])},null,8,["modelValue","options"])]),_:1},8,["infotext"]),Object.values(le(rt)).filter(a=>a.visible).length>1?(se(),De(ut,{key:0,title:"Fahrzeug wechseln",icon:"fa-car",infotext:le(xn).vehicle,fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:le(r).connectedVehicle,"onUpdate:modelValue":o[1]||(o[1]=a=>le(r).connectedVehicle=a),modelModifiers:{number:!0},options:Object.values(le(rt)).filter(a=>a.visible).map(a=>[a.name,a.id])},null,8,["modelValue","options"])]),_:1},8,["infotext"])):Me("",!0),we(ut,{title:"Ladeprofil",icon:"fa-settings",infotext:le(xn).chargeTemplate,fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:n.value,"onUpdate:modelValue":o[2]||(o[2]=a=>n.value=a),options:Object.values(le(qa)).map(a=>[a.name,a.id])},null,8,["modelValue","options"])]),_:1},8,["infotext"]),we(ut,{title:"Sperren",icon:"fa-lock",infotext:le(xn).locked,fullwidth:!0},{"inline-item":Ae(()=>[we(pr,{modelValue:le(r).isLocked,"onUpdate:modelValue":o[3]||(o[3]=a=>le(r).isLocked=a)},null,8,["modelValue"])]),_:1},8,["infotext"]),we(ut,{title:"Priorität",icon:"fa-star",infotext:le(xn).priority,fullwidth:!0},{"inline-item":Ae(()=>[we(pr,{modelValue:le(r).hasPriority,"onUpdate:modelValue":o[4]||(o[4]=a=>le(r).hasPriority=a)},null,8,["modelValue"])]),_:1},8,["infotext"]),we(ut,{title:"Zeitplan",icon:"fa-clock",infotext:le(xn).timeplan,fullwidth:!0},{"inline-item":Ae(()=>[we(pr,{modelValue:le(r).timedCharging,"onUpdate:modelValue":o[5]||(o[5]=a=>le(r).timedCharging=a)},null,8,["modelValue"])]),_:1},8,["infotext"]),le(wt).isBatteryConfigured?(se(),De(ut,{key:1,title:"PV-Priorität",icon:"fa-car-battery",infotext:le(xn).pvpriority,fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:le(wt).pvBatteryPriority,"onUpdate:modelValue":o[6]||(o[6]=a=>le(wt).pvBatteryPriority=a),options:le(Y2)},null,8,["modelValue","options"])]),_:1},8,["infotext"])):Me("",!0)],64))}}),WW=Xe(VW,[["__scopeId","data-v-8510b24f"]]),zW={class:"status-string shadow m-0 mb-1 p-3"},HW={style:{color:"red"}},qW=["id"],GW={class:"nav nav-tabs nav-justified mx-1 mt-1",role:"tablist"},YW=["id","data-bs-target"],KW=["id","data-bs-target"],XW=["id","data-bs-target"],QW=["id","data-bs-target"],JW=["id","data-bs-target"],ZW=["data-bs-target"],e6=["id"],t6=["id"],r6=["id"],n6=["id"],i6=["id"],o6=["id"],s6=["id"],a6=We({__name:"ChargeConfigPanel",props:{chargepoint:{}},emits:["closeConfig"],setup(e){const t=e,r=et(t.chargepoint),n=_e(()=>r.value.chargeTemplate?.id??0),i=_e(()=>r.value.id);function o(){let a="";switch(t.chargepoint.chargeMode){case"instant_charging":a="#inSettings"+t.chargepoint.id;break;case"pv_charging":a="#pvhSettings"+t.chargepoint.id;break;case"scheduled_charging":a="#scSettings"+t.chargepoint.id;break;case"eco_charging":a="#ecSettings"+t.chargepoint.id;break;default:a="#chSettings"+t.chargepoint.id}const s=document.querySelector(a);if(s){var l=new Bo(s);l.show()}else console.error("Could not find the Tab element to activate")}return Hr(()=>{o()}),(a,s)=>(se(),Se(Ge,null,[we(ut,{title:"Status",icon:"fa-info-circle",fullwidth:!0,class:"item"},{default:Ae(()=>[U("span",zW,$e(r.value.stateStr),1)]),_:1}),r.value.faultState!=0?(se(),De(ut,{key:0,title:"Fehler",class:"grid-col-12",icon:"fa-triangle-exclamation"},{default:Ae(()=>[U("span",HW,$e(r.value.faultStr),1)]),_:1})):Me("",!0),U("div",{id:`cptabarea-${i.value}`,class:"m-0 mt-4 p-0 grid-col-12 tabarea"},[U("nav",GW,[U("a",{id:`chSettings${i.value}`,class:"nav-link active","data-bs-toggle":"tab","data-bs-target":"#chargeSettings"+i.value},[...s[0]||(s[0]=[U("i",{class:"fa-solid fa-charging-station"},null,-1)])],8,YW),U("a",{id:`inSettings${i.value}`,class:"nav-link","data-bs-toggle":"tab","data-bs-target":"#instantSettings"+i.value},[...s[1]||(s[1]=[U("i",{class:"fa-solid fa-lg fa-bolt"},null,-1)])],8,KW),U("a",{id:`pvhSettings${i.value}`,class:"nav-link","data-bs-toggle":"tab","data-bs-target":"#pvSettings"+i.value},[...s[2]||(s[2]=[U("i",{class:"fa-solid fa-solar-panel me-1"},null,-1)])],8,XW),U("a",{id:`scSettings${i.value}`,class:"nav-link","data-bs-toggle":"tab","data-bs-target":"#scheduledSettings"+i.value},[...s[3]||(s[3]=[U("i",{class:"fa-solid fa-bullseye me-1"},null,-1)])],8,QW),U("a",{id:`ecSettings${i.value}`,class:"nav-link","data-bs-toggle":"tab","data-bs-target":"#ecoSettings"+i.value},[...s[4]||(s[4]=[U("i",{class:"fa-solid fa-coins"},null,-1)])],8,JW),U("a",{class:"nav-link","data-bs-toggle":"tab","data-bs-target":"#timedSettings"+i.value},[...s[5]||(s[5]=[U("i",{class:"fa-solid fa-clock"},null,-1)])],8,ZW)]),U("div",{id:`cpsettingsPanes-${i.value}`,class:"tab-content mx-1 p-1 pb-3"},[U("div",{id:"chargeSettings"+i.value,class:"tab-pane active",role:"tabpanel","aria-labelledby":"instant-tab"},[we(WW,{chargepoint:e.chargepoint},null,8,["chargepoint"])],8,t6),U("div",{id:"instantSettings"+i.value,class:"tab-pane",role:"tabpanel","aria-labelledby":"instant-tab"},[we(KV,{chargepoint:r.value,vehicles:le(rt),"charge-templates":le(qa)},null,8,["chargepoint","vehicles","charge-templates"])],8,r6),U("div",{id:"pvSettings"+i.value,class:"tab-pane",role:"tabpanel","aria-labelledby":"pv-tab"},[we(o4,{chargepoint:r.value,vehicles:le(rt),"charge-templates":le(qa)},null,8,["chargepoint","vehicles","charge-templates"])],8,n6),U("div",{id:"scheduledSettings"+i.value,class:"tab-pane",role:"tabpanel","aria-labelledby":"scheduled-tab"},[n.value!=null?(se(),De(Y4,{key:0,"charge-point":r.value},null,8,["charge-point"])):Me("",!0)],8,i6),U("div",{id:"ecoSettings"+i.value,class:"tab-pane",role:"tabpanel","aria-labelledby":"eco-tab"},[n.value!=null?(se(),De(UW,{key:0,chargepoint:r.value},null,8,["chargepoint"])):Me("",!0)],8,o6),U("div",{id:"timedSettings"+i.value,class:"tab-pane",role:"tabpanel","aria-labelledby":"scheduled-tab"},[n.value!=null?(se(),De(uW,{key:0,"charge-point":r.value},null,8,["charge-point"])):Me("",!0)],8,s6)],8,e6)],8,qW)],64))}}),Lg=Xe(a6,[["__scopeId","data-v-0bc35ef3"]]),$n=We({__name:"FormatWattH",props:{wattH:{}},setup(e){const t=e,r=_e(()=>qi(t.wattH,Ce.decimalPlaces));return(n,i)=>(se(),Se("span",null,$e(r.value),1))}}),l6={class:"wb-widget p-0 m-0 shadow widgetWidth"},u6={class:"py-4 px-3 d-flex justify-content-between align-items-center titlerow"},c6={class:"d-flex align-items-center widgetname p-0 m-0"},f6={class:"buttonrea d-flex float-right justify-content-end align-items-center"},d6={class:"grid12 pb-3 px-3"},h6=We({__name:"WbWidgetFlex",props:{variableWidth:{type:Boolean},fullWidth:{type:Boolean}},setup(e){const t=e,r=_e(()=>t.fullWidth?"col-12":t.variableWidth&&Ce.preferWideBoxes?"col-lg-6":"col-lg-4");return(n,i)=>(se(),Se("div",{class:Qe(["p-2 m-0",r.value])},[U("div",l6,[U("div",u6,[U("div",c6,[It(n.$slots,"title",{},()=>[i[0]||(i[0]=U("div",{class:"p-0"},"(title goes here)",-1))],!0),It(n.$slots,"subtitle",{},void 0,!0)]),U("div",f6,[It(n.$slots,"buttons",{},void 0,!0)])]),U("div",d6,[It(n.$slots,"default",{},void 0,!0)])])],2))}}),mn=Xe(h6,[["__scopeId","data-v-fb6ac7a4"]]),p6={class:"d-flex justify-content-center align-items-center"},g6=We({__name:"BatterySymbol",props:{soc:{},color:{}},setup(e){const t=e,r=_e(()=>t.soc<=12?"fa-battery-empty":t.soc<38?"fa-battery-quarter":t.soc<62?"fa-battery-half":t.soc<87?"fa-battery-three-quarters":"fa-battery-full"),n=_e(()=>({color:t.color??"var(--color-menu)"}));return(i,o)=>(se(),Se("span",p6,[U("i",{class:Qe(["fa me-1",r.value]),style:ot(n.value)},null,6),Ke(" "+$e(Math.round(e.soc)+"%"),1)]))}}),sf=Xe(g6,[["__scopeId","data-v-a68c844a"]]),m6=We({__name:"WbBadge",props:{color:{},bgcolor:{}},setup(e){const t=e,r=_e(()=>({color:t.color??"var(--color-bg)","background-color":t.bgcolor??"var(--color-menu)"}));return(n,i)=>(se(),Se("span",{class:"pillWbBadge rounded-pill ms-2 px-2",style:ot(r.value)},[It(n.$slots,"default",{},void 0,!0)],4))}}),yn=Xe(m6,[["__scopeId","data-v-36112fa3"]]),y6={style:{color:"var(--color-charging)"}},v6={style:{color:"var(--color-charging)"}},b6={style:{color:"var(--color-charging)"}},_6={class:"targetCurrent"},w6=We({__name:"ChargingState",props:{chargepoint:{},fullWidth:{type:Boolean}},setup(e){const t=e,r=_e(()=>(Math.round(t.chargepoint.current*10)/10).toLocaleString(void 0)+" A"),n=_e(()=>(Math.round(t.chargepoint.realCurrent*10)/10).toLocaleString(void 0)+" A");return(i,o)=>(se(),Se(Ge,null,[t.chargepoint.power>0?(se(),De(lt,{key:0,heading:"Leistung:",class:"grid-col-3 grid-left mb-3"},{default:Ae(()=>[U("span",y6,[we(ll,{watt:t.chargepoint.power},null,8,["watt"])])]),_:1})):Me("",!0),t.chargepoint.power>0?(se(),De(lt,{key:1,heading:"Strom:",class:"grid-col-3"},{default:Ae(()=>[U("span",v6,$e(n.value),1)]),_:1})):Me("",!0),t.chargepoint.power>0?(se(),De(lt,{key:2,heading:"Phasen:",class:"grid-col-3"},{default:Ae(()=>[U("span",b6,$e(t.chargepoint.phasesInUse),1)]),_:1})):Me("",!0),t.chargepoint.power>0?(se(),De(lt,{key:3,heading:"Sollstrom:",class:"grid-col-3 grid-right"},{default:Ae(()=>[U("span",_6,$e(r.value),1)]),_:1})):Me("",!0)],64))}}),S6=Xe(w6,[["__scopeId","data-v-2cc82367"]]),E6={class:"carTitleLine d-flex justify-content-between align-items-center"},x6={key:1,class:"me-1 fa-solid fa-xs fa-star ps-1"},T6={key:2,class:"me-0 fa-solid fa-xs fa-clock ps-1"},A6={key:0,class:"carSelector p-4 m-2"},I6={class:"grid12"},C6={key:2,class:"socEditor rounded mt-2 d-flex flex-column align-items-center grid-col-12 grid-left"},M6={class:"d-flex justify-content-stretch align-items-center"},k6={key:3,class:"divider grid-col-12"},P6={key:0,class:"fa-solid fa-sm fas fa-edit ms-2"},O6=["id"],L6=We({__name:"VehicleData",props:{chargepoint:{},fullWidth:{type:Boolean}},setup(e){const t=e,r=t.chargepoint,n=et(!1),i=et(!1),o=et(!1),a=_e({get(){return r.chargeMode},set(b){r.chargeMode=b}}),s=_e(()=>{const b=t.chargepoint.rangeCharged,_=t.chargepoint.chargedSincePlugged,w=t.chargepoint.dailyYield;return _>0?Math.round(b/_*w).toString()+" "+t.chargepoint.rangeUnit:"0 km"}),l=_e(()=>t.chargepoint.soc),u=et(0),c=_e(()=>{const[b]=mt.etPriceList.values();return(Math.round(b*10)/10).toFixed(1)}),f=_e(()=>t.chargepoint.etMaxPrice>=+c.value?{color:"var(--color-charging)"}:{color:"var(--color-menu)"}),d=_e(()=>Object.values(rt).filter(b=>b.visible)),h=_e(()=>t.chargepoint.soc<20?"var(--color-evu)":t.chargepoint.soc>=80?"var(--color-pv)":"var(--color-battery)"),p=_e(()=>t.chargepoint.chargeMode==="stop"?{color:"var(--fg)"}:{color:zt[t.chargepoint.chargeMode].color}),y=_e(()=>wt.country==="ch"?" Rp":" ct");function v(){Mr("socUpdate",1,t.chargepoint.connectedVehicle),Ye[t.chargepoint.id].waitingForSoc=!0}function g(){Mr("setSoc",u.value,t.chargepoint.connectedVehicle),n.value=!1}function m(){n.value?n.value=!1:(u.value=t.chargepoint.soc,n.value=!0)}return(b,_)=>(se(),Se(Ge,null,[U("div",E6,[U("h3",{onClick:_[0]||(_[0]=w=>o.value=!o.value)},[_[8]||(_[8]=U("i",{class:"fa-solid fa-sm fa-car me-2"},null,-1)),Ke(" "+$e(e.chargepoint.vehicleName)+" ",1),d.value.length>1?(se(),Se("span",{key:0,class:Qe(["fa-solid fa-xs me-2",o.value?"fa-caret-up":"fa-caret-down"])},null,2)):Me("",!0),e.chargepoint.hasPriority?(se(),Se("span",x6)):Me("",!0),e.chargepoint.timedCharging?(se(),Se("span",T6)):Me("",!0)]),e.chargepoint.isSocConfigured?(se(),De(yn,{key:0,bgcolor:h.value},{default:Ae(()=>[we(sf,{soc:l.value??0,color:"var(--color-bg)",class:"me-2"},null,8,["soc"]),e.chargepoint.isSocManual?(se(),Se("i",{key:0,class:"fa-solid fa-sm fas fa-edit",style:{color:"var(--color-bg)"},onClick:_[1]||(_[1]=w=>m())})):Me("",!0),e.chargepoint.isSocManual?Me("",!0):(se(),Se("i",{key:1,type:"button",class:Qe(["fa-solid fa-sm",e.chargepoint.waitingForSoc?"fa-spinner fa-spin":"fa-sync"]),onClick:v},null,2))]),_:1},8,["bgcolor"])):Me("",!0)]),o.value?(se(),Se("div",A6,[_[9]||(_[9]=U("span",{class:"changeCarTitle mb-2"},"Fahrzeug wechseln:",-1)),we(jt,{modelValue:le(r).connectedVehicle,"onUpdate:modelValue":[_[2]||(_[2]=w=>le(r).connectedVehicle=w),_[3]||(_[3]=w=>o.value=!1)],modelModifiers:{number:!0},options:d.value.map(w=>[w.name,w.id])},null,8,["modelValue","options"])])):Me("",!0),U("div",I6,[we(GE,{id:"chargemode-"+e.chargepoint.name,modelValue:a.value,"onUpdate:modelValue":_[4]||(_[4]=w=>a.value=w),class:"chargemodes mt-3 mb-3",options:Object.keys(le(zt)).map(w=>({text:le(zt)[w].name,value:w,color:le(zt)[w].color,icon:le(zt)[w].icon,active:le(zt)[w].mode==e.chargepoint.chargeMode}))},null,8,["id","modelValue","options"]),e.chargepoint.power>0?(se(),De(S6,{key:0,chargepoint:e.chargepoint,"full-width":t.fullWidth},null,8,["chargepoint","full-width"])):Me("",!0),we(lt,{heading:"letzte Ladung:",class:"grid-col-4 grid-left"},{default:Ae(()=>[we($n,{"watt-h":Math.max(e.chargepoint.chargedSincePlugged,0)},null,8,["watt-h"])]),_:1}),we(lt,{heading:"gel. Reichw.:",class:"grid-col-4"},{default:Ae(()=>[Ke($e(s.value),1)]),_:1}),e.chargepoint.isSocConfigured?(se(),De(lt,{key:1,heading:"Reichweite:",class:"grid-col-4 grid-right"},{default:Ae(()=>[Ke($e(le(rt)[t.chargepoint.connectedVehicle]?Math.round(le(rt)[t.chargepoint.connectedVehicle].range):0)+" km ",1)]),_:1})):Me("",!0),n.value?(se(),Se("div",C6,[_[10]||(_[10]=U("span",{class:"d-flex m-1 p-0 socEditTitle"},"Ladestand einstellen:",-1)),U("span",M6,[U("span",null,[we(Ot,{id:"manualSoc",modelValue:u.value,"onUpdate:modelValue":_[5]||(_[5]=w=>u.value=w),min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])])]),U("span",{type:"button",class:"fa-solid d-flex fa-lg me-2 mb-3 align-self-end fa-circle-check",onClick:g})])):Me("",!0),le(mt).active?(se(),Se("hr",k6)):Me("",!0),le(mt).active?(se(),De(lt,{key:4,heading:"Strompreis:",class:"grid-col-4 grid-left"},{default:Ae(()=>[U("span",{style:ot(f.value)},$e(le(mt).etCurrentPriceString),5)]),_:1})):Me("",!0),le(r).etActive?(se(),De(lt,{key:5,heading:"max. Preis:",class:"grid-col-4"},{default:Ae(()=>[U("span",{type:"button",onClick:_[6]||(_[6]=w=>i.value=!i.value)},[Ke($e(t.chargepoint.etActive?(Math.round(t.chargepoint.etMaxPrice*10)/10).toFixed(1)+y.value:"-")+" ",1),t.chargepoint.etActive?(se(),Se("i",P6)):Me("",!0)])]),_:1})):Me("",!0),i.value?(se(),Se("div",{key:6,id:"priceChartInline"+t.chargepoint.id,class:"d-flex flex-column rounded priceEditor grid-col-12"},[le(rt)[t.chargepoint.connectedVehicle]!=null?(se(),De(oT,{key:0,chargepoint:t.chargepoint},null,8,["chargepoint"])):Me("",!0),U("span",{class:"d-flex ms-2 my-4 pe-3 pt-1 d-flex align-self-end",style:ot(p.value),onClick:_[7]||(_[7]=w=>i.value=!1)},[..._[11]||(_[11]=[U("span",{type:"button",class:"d-flex fa-solid fa-lg ps-1 fa-circle-check"},null,-1)])],4)],8,O6)):Me("",!0)])],64))}}),R6=Xe(L6,[["__scopeId","data-v-9f39aae0"]]),N6={class:"d-flex justify-content-center align-items-center"},$6={key:0,class:"WbBadge rounded-pill errorWbBadge ms-3"},D6={key:0},B6={key:1,class:"row m-0 mt-0 p-0"},F6={class:"col m-0 p-0"},U6={class:"mb-3"},j6=We({__name:"CPChargePoint",props:{chargepoint:{},fullWidth:{type:Boolean}},setup(e){const t=e,r=et(t.chargepoint),n=et(!1),i=_e(()=>t.chargepoint.isLocked?"Gesperrt":t.chargepoint.isCharging?"Lädt":t.chargepoint.isPluggedIn?"Bereit":"Frei"),o=_e(()=>t.chargepoint.isLocked?"var(--color-evu)":t.chargepoint.isCharging?"var(--color-charging)":t.chargepoint.isPluggedIn?"var(--color-battery)":"var(--color-axis)"),a=_e(()=>{let u="";return t.chargepoint.isLocked?u="fa-lock":t.chargepoint.isCharging?u=" fa-bolt":t.chargepoint.isPluggedIn&&(u="fa-plug"),"fa "+u}),s=_e(()=>({color:t.chargepoint.color}));function l(){n.value=!n.value}return(u,c)=>n.value?(se(),De(mn,{key:1,"full-width":t.fullWidth},{title:Ae(()=>[U("span",{style:ot(s.value),onClick:c[3]||(c[3]=f=>n.value=!n.value)},[c[8]||(c[8]=U("span",{class:"fas fa-gear"}," ",-1)),Ke(" Einstellungen "+$e(t.chargepoint.name),1)],4)]),buttons:Ae(()=>[U("span",{class:"ms-2 pt-1",onClick:c[4]||(c[4]=f=>n.value=!n.value)},[...c[9]||(c[9]=[U("span",{class:"fa-solid fa-lg ps-1 fa-circle-check"},null,-1)])])]),default:Ae(()=>[e.chargepoint!=null?(se(),De(Lg,{key:0,chargepoint:e.chargepoint},null,8,["chargepoint"])):Me("",!0),U("button",{type:"button",class:"close-config-button btn ms-2 pt-1",onClick:c[5]||(c[5]=f=>n.value=!n.value)}," OK ")]),_:1},8,["full-width"])):(se(),De(ul,{key:0,"variable-width":!0,"full-width":t.fullWidth},{title:Ae(()=>[U("span",N6,[U("span",{style:ot(s.value),onClick:c[0]||(c[0]=f=>n.value=!n.value)},[c[6]||(c[6]=U("span",{class:"fa-solid fa-charging-station"}," ",-1)),Ke(" "+$e(t.chargepoint.name),1)],4),r.value.faultState==2?(se(),Se("span",$6,"Fehler")):Me("",!0)])]),buttons:Ae(()=>[U("span",{type:"button",class:"ms-2 ps-1 pt-1",onClick:c[1]||(c[1]=f=>l())},[...c[7]||(c[7]=[U("span",{class:"fa-solid fa-lg ps-1 fa-ellipsis-vertical"},null,-1)])])]),footer:Ae(()=>[U("div",U6,[n.value?Me("",!0):(se(),De(R6,{key:0,chargepoint:t.chargepoint,"full-width":t.fullWidth},null,8,["chargepoint","full-width"]))])]),default:Ae(()=>[n.value?Me("",!0):(se(),Se("div",D6,[U("div",{class:"grid12",onClick:c[2]||(c[2]=f=>n.value=!n.value)},[we(lt,{heading:"Status:",class:"grid-col-4 grid-left"},{default:Ae(()=>[U("span",{style:ot({color:o.value})},[U("i",{class:Qe(a.value)},null,2),Ke(" "+$e(i.value),1)],4)]),_:1}),we(lt,{heading:"Geladen:",class:"grid-col-4 grid-left"},{default:Ae(()=>[we($n,{"watt-h":e.chargepoint.dailyYield},null,8,["watt-h"])]),_:1})])])),n.value?(se(),Se("div",B6,[U("div",F6,[e.chargepoint!=null?(se(),De(Lg,{key:0,chargepoint:e.chargepoint},null,8,["chargepoint"])):Me("",!0)])])):Me("",!0)]),_:1},8,["full-width"]))}}),V6=Xe(j6,[["__scopeId","data-v-2020b9b7"]]);function $_(e){return e!==null&&typeof e=="object"&&"constructor"in e&&e.constructor===Object}function hy(e={},t={}){const r=["__proto__","constructor","prototype"];Object.keys(t).filter(n=>r.indexOf(n)<0).forEach(n=>{typeof e[n]>"u"?e[n]=t[n]:$_(t[n])&&$_(e[n])&&Object.keys(t[n]).length>0&&hy(e[n],t[n])})}const sT={body:{},addEventListener(){},removeEventListener(){},activeElement:{blur(){},nodeName:""},querySelector(){return null},querySelectorAll(){return[]},getElementById(){return null},createEvent(){return{initEvent(){}}},createElement(){return{children:[],childNodes:[],style:{},setAttribute(){},getElementsByTagName(){return[]}}},createElementNS(){return{}},importNode(){return null},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""}};function qt(){const e=typeof document<"u"?document:{};return hy(e,sT),e}const W6={document:sT,navigator:{userAgent:""},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""},history:{replaceState(){},pushState(){},go(){},back(){}},CustomEvent:function(){return this},addEventListener(){},removeEventListener(){},getComputedStyle(){return{getPropertyValue(){return""}}},Image(){},Date(){},screen:{},setTimeout(){},clearTimeout(){},matchMedia(){return{}},requestAnimationFrame(e){return typeof setTimeout>"u"?(e(),null):setTimeout(e,0)},cancelAnimationFrame(e){typeof setTimeout>"u"||clearTimeout(e)}};function Mt(){const e=typeof window<"u"?window:{};return hy(e,W6),e}function Fi(e=""){return e.trim().split(" ").filter(t=>!!t.trim())}function z6(e){const t=e;Object.keys(t).forEach(r=>{try{t[r]=null}catch{}try{delete t[r]}catch{}})}function Ds(e,t=0){return setTimeout(e,t)}function Qr(){return Date.now()}function H6(e){const t=Mt();let r;return t.getComputedStyle&&(r=t.getComputedStyle(e,null)),!r&&e.currentStyle&&(r=e.currentStyle),r||(r=e.style),r}function Rg(e,t="x"){const r=Mt();let n,i,o;const a=H6(e);return r.WebKitCSSMatrix?(i=a.transform||a.webkitTransform,i.split(",").length>6&&(i=i.split(", ").map(s=>s.replace(",",".")).join(", ")),o=new r.WebKitCSSMatrix(i==="none"?"":i)):(o=a.MozTransform||a.OTransform||a.MsTransform||a.msTransform||a.transform||a.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),n=o.toString().split(",")),t==="x"&&(r.WebKitCSSMatrix?i=o.m41:n.length===16?i=parseFloat(n[12]):i=parseFloat(n[4])),t==="y"&&(r.WebKitCSSMatrix?i=o.m42:n.length===16?i=parseFloat(n[13]):i=parseFloat(n[5])),i||0}function ba(e){return typeof e=="object"&&e!==null&&e.constructor&&Object.prototype.toString.call(e).slice(8,-1)==="Object"}function q6(e){return typeof window<"u"&&typeof window.HTMLElement<"u"?e instanceof HTMLElement:e&&(e.nodeType===1||e.nodeType===11)}function Nr(...e){const t=Object(e[0]);for(let r=1;ro!=="__proto__"&&o!=="constructor"&&o!=="prototype");for(let o=0,a=i.length;oi?"next":"prev",u=(f,d)=>l==="next"&&f>=d||l==="prev"&&f<=d,c=()=>{a=new Date().getTime(),o===null&&(o=a);const f=Math.max(Math.min((a-o)/s,1),0),d=.5-Math.cos(f*Math.PI)/2;let h=i+d*(t-i);if(u(h,t)&&(h=t),e.wrapperEl.scrollTo({[r]:h}),u(h,t)){e.wrapperEl.style.overflow="hidden",e.wrapperEl.style.scrollSnapType="",setTimeout(()=>{e.wrapperEl.style.overflow="",e.wrapperEl.scrollTo({[r]:h})}),n.cancelAnimationFrame(e.cssModeFrameID);return}e.cssModeFrameID=n.requestAnimationFrame(c)};c()}function Ko(e){return e.querySelector(".swiper-slide-transform")||e.shadowRoot&&e.shadowRoot.querySelector(".swiper-slide-transform")||e}function er(e,t=""){const r=Mt(),n=[...e.children];return r.HTMLSlotElement&&e instanceof HTMLSlotElement&&n.push(...e.assignedElements()),t?n.filter(i=>i.matches(t)):n}function G6(e,t){const r=[t];for(;r.length>0;){const n=r.shift();if(e===n)return!0;r.push(...n.children,...n.shadowRoot?n.shadowRoot.children:[],...n.assignedElements?n.assignedElements():[])}}function Y6(e,t){const r=Mt();let n=t.contains(e);return!n&&r.HTMLSlotElement&&t instanceof HTMLSlotElement&&(n=[...t.assignedElements()].includes(e),n||(n=G6(e,t))),n}function mc(e){try{console.warn(e);return}catch{}}function Br(e,t=[]){const r=document.createElement(e);return r.classList.add(...Array.isArray(t)?t:Fi(t)),r}function yc(e){const t=Mt(),r=qt(),n=e.getBoundingClientRect(),i=r.body,o=e.clientTop||i.clientTop||0,a=e.clientLeft||i.clientLeft||0,s=e===t?t.scrollY:e.scrollTop,l=e===t?t.scrollX:e.scrollLeft;return{top:n.top+s-o,left:n.left+l-a}}function K6(e,t){const r=[];for(;e.previousElementSibling;){const n=e.previousElementSibling;t?n.matches(t)&&r.push(n):r.push(n),e=n}return r}function X6(e,t){const r=[];for(;e.nextElementSibling;){const n=e.nextElementSibling;t?n.matches(t)&&r.push(n):r.push(n),e=n}return r}function Wi(e,t){return Mt().getComputedStyle(e,null).getPropertyValue(t)}function Ka(e){let t=e,r;if(t){for(r=0;(t=t.previousSibling)!==null;)t.nodeType===1&&(r+=1);return r}}function ko(e,t){const r=[];let n=e.parentElement;for(;n;)t?n.matches(t)&&r.push(n):r.push(n),n=n.parentElement;return r}function La(e,t){function r(n){n.target===e&&(t.call(e,n),e.removeEventListener("transitionend",r))}t&&e.addEventListener("transitionend",r)}function Ng(e,t,r){const n=Mt();return e[t==="width"?"offsetWidth":"offsetHeight"]+parseFloat(n.getComputedStyle(e,null).getPropertyValue(t==="width"?"margin-right":"margin-top"))+parseFloat(n.getComputedStyle(e,null).getPropertyValue(t==="width"?"margin-left":"margin-bottom"))}function st(e){return(Array.isArray(e)?e:[e]).filter(t=>!!t)}function af(e){return t=>Math.abs(t)>0&&e.browser&&e.browser.need3dFix&&Math.abs(t)%90===0?t+.001:t}function zr(e,t=""){typeof trustedTypes<"u"?e.innerHTML=trustedTypes.createPolicy("html",{createHTML:r=>r}).createHTML(t):e.innerHTML=t}let Dd;function Q6(){const e=Mt(),t=qt();return{smoothScroll:t.documentElement&&t.documentElement.style&&"scrollBehavior"in t.documentElement.style,touch:!!("ontouchstart"in e||e.DocumentTouch&&t instanceof e.DocumentTouch)}}function lT(){return Dd||(Dd=Q6()),Dd}let Bd;function J6({userAgent:e}={}){const t=lT(),r=Mt(),n=r.navigator.platform,i=e||r.navigator.userAgent,o={ios:!1,android:!1},a=r.screen.width,s=r.screen.height,l=i.match(/(Android);?[\s\/]+([\d.]+)?/);let u=i.match(/(iPad)(?!\1).*OS\s([\d_]+)/);const c=i.match(/(iPod)(.*OS\s([\d_]+))?/),f=!u&&i.match(/(iPhone\sOS|iOS)\s([\d_]+)/),d=n==="Win32";let h=n==="MacIntel";const p=["1024x1366","1366x1024","834x1194","1194x834","834x1112","1112x834","768x1024","1024x768","820x1180","1180x820","810x1080","1080x810"];return!u&&h&&t.touch&&p.indexOf(`${a}x${s}`)>=0&&(u=i.match(/(Version)\/([\d.]+)/),u||(u=[0,1,"13_0_0"]),h=!1),l&&!d&&(o.os="android",o.android=!0),(u||f||c)&&(o.os="ios",o.ios=!0),o}function uT(e={}){return Bd||(Bd=J6(e)),Bd}let Fd;function Z6(){const e=Mt(),t=uT();let r=!1;function n(){const s=e.navigator.userAgent.toLowerCase();return s.indexOf("safari")>=0&&s.indexOf("chrome")<0&&s.indexOf("android")<0}if(n()){const s=String(e.navigator.userAgent);if(s.includes("Version/")){const[l,u]=s.split("Version/")[1].split(" ")[0].split(".").map(c=>Number(c));r=l<16||l===16&&u<2}}const i=/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(e.navigator.userAgent),o=n(),a=o||i&&t.ios;return{isSafari:r||o,needPerspectiveFix:r,need3dFix:a,isWebView:i}}function cT(){return Fd||(Fd=Z6()),Fd}function ez({swiper:e,on:t,emit:r}){const n=Mt();let i=null,o=null;const a=()=>{!e||e.destroyed||!e.initialized||(r("beforeResize"),r("resize"))},s=()=>{!e||e.destroyed||!e.initialized||(i=new ResizeObserver(c=>{o=n.requestAnimationFrame(()=>{const{width:f,height:d}=e;let h=f,p=d;c.forEach(({contentBoxSize:y,contentRect:v,target:g})=>{g&&g!==e.el||(h=v?v.width:(y[0]||y).inlineSize,p=v?v.height:(y[0]||y).blockSize)}),(h!==f||p!==d)&&a()})}),i.observe(e.el))},l=()=>{o&&n.cancelAnimationFrame(o),i&&i.unobserve&&e.el&&(i.unobserve(e.el),i=null)},u=()=>{!e||e.destroyed||!e.initialized||r("orientationchange")};t("init",()=>{if(e.params.resizeObserver&&typeof n.ResizeObserver<"u"){s();return}n.addEventListener("resize",a),n.addEventListener("orientationchange",u)}),t("destroy",()=>{l(),n.removeEventListener("resize",a),n.removeEventListener("orientationchange",u)})}function tz({swiper:e,extendParams:t,on:r,emit:n}){const i=[],o=Mt(),a=(u,c={})=>{const f=o.MutationObserver||o.WebkitMutationObserver,d=new f(h=>{if(e.__preventObserver__)return;if(h.length===1){n("observerUpdate",h[0]);return}const p=function(){n("observerUpdate",h[0])};o.requestAnimationFrame?o.requestAnimationFrame(p):o.setTimeout(p,0)});d.observe(u,{attributes:typeof c.attributes>"u"?!0:c.attributes,childList:e.isElement||(typeof c.childList>"u"?!0:c).childList,characterData:typeof c.characterData>"u"?!0:c.characterData}),i.push(d)},s=()=>{if(e.params.observer){if(e.params.observeParents){const u=ko(e.hostEl);for(let c=0;c{i.forEach(u=>{u.disconnect()}),i.splice(0,i.length)};t({observer:!1,observeParents:!1,observeSlideChildren:!1}),r("init",s),r("destroy",l)}var rz={on(e,t,r){const n=this;if(!n.eventsListeners||n.destroyed||typeof t!="function")return n;const i=r?"unshift":"push";return e.split(" ").forEach(o=>{n.eventsListeners[o]||(n.eventsListeners[o]=[]),n.eventsListeners[o][i](t)}),n},once(e,t,r){const n=this;if(!n.eventsListeners||n.destroyed||typeof t!="function")return n;function i(...o){n.off(e,i),i.__emitterProxy&&delete i.__emitterProxy,t.apply(n,o)}return i.__emitterProxy=t,n.on(e,i,r)},onAny(e,t){const r=this;if(!r.eventsListeners||r.destroyed||typeof e!="function")return r;const n=t?"unshift":"push";return r.eventsAnyListeners.indexOf(e)<0&&r.eventsAnyListeners[n](e),r},offAny(e){const t=this;if(!t.eventsListeners||t.destroyed||!t.eventsAnyListeners)return t;const r=t.eventsAnyListeners.indexOf(e);return r>=0&&t.eventsAnyListeners.splice(r,1),t},off(e,t){const r=this;return!r.eventsListeners||r.destroyed||!r.eventsListeners||e.split(" ").forEach(n=>{typeof t>"u"?r.eventsListeners[n]=[]:r.eventsListeners[n]&&r.eventsListeners[n].forEach((i,o)=>{(i===t||i.__emitterProxy&&i.__emitterProxy===t)&&r.eventsListeners[n].splice(o,1)})}),r},emit(...e){const t=this;if(!t.eventsListeners||t.destroyed||!t.eventsListeners)return t;let r,n,i;return typeof e[0]=="string"||Array.isArray(e[0])?(r=e[0],n=e.slice(1,e.length),i=t):(r=e[0].events,n=e[0].data,i=e[0].context||t),n.unshift(i),(Array.isArray(r)?r:r.split(" ")).forEach(a=>{t.eventsAnyListeners&&t.eventsAnyListeners.length&&t.eventsAnyListeners.forEach(s=>{s.apply(i,[a,...n])}),t.eventsListeners&&t.eventsListeners[a]&&t.eventsListeners[a].forEach(s=>{s.apply(i,n)})}),t}};function nz(){const e=this;let t,r;const n=e.el;typeof e.params.width<"u"&&e.params.width!==null?t=e.params.width:t=n.clientWidth,typeof e.params.height<"u"&&e.params.height!==null?r=e.params.height:r=n.clientHeight,!(t===0&&e.isHorizontal()||r===0&&e.isVertical())&&(t=t-parseInt(Wi(n,"padding-left")||0,10)-parseInt(Wi(n,"padding-right")||0,10),r=r-parseInt(Wi(n,"padding-top")||0,10)-parseInt(Wi(n,"padding-bottom")||0,10),Number.isNaN(t)&&(t=0),Number.isNaN(r)&&(r=0),Object.assign(e,{width:t,height:r,size:e.isHorizontal()?t:r}))}function iz(){const e=this;function t(P,N){return parseFloat(P.getPropertyValue(e.getDirectionLabel(N))||0)}const r=e.params,{wrapperEl:n,slidesEl:i,rtlTranslate:o,wrongRTL:a}=e,s=e.virtual&&r.virtual.enabled,l=s?e.virtual.slides.length:e.slides.length,u=er(i,`.${e.params.slideClass}, swiper-slide`),c=s?e.virtual.slides.length:u.length;let f=[];const d=[],h=[];let p=r.slidesOffsetBefore;typeof p=="function"&&(p=r.slidesOffsetBefore.call(e));let y=r.slidesOffsetAfter;typeof y=="function"&&(y=r.slidesOffsetAfter.call(e));const v=e.snapGrid.length,g=e.slidesGrid.length,m=e.size-p-y;let b=r.spaceBetween,_=-p,w=0,E=0;if(typeof m>"u")return;typeof b=="string"&&b.indexOf("%")>=0?b=parseFloat(b.replace("%",""))/100*m:typeof b=="string"&&(b=parseFloat(b)),e.virtualSize=-b-p-y,u.forEach(P=>{o?P.style.marginLeft="":P.style.marginRight="",P.style.marginBottom="",P.style.marginTop=""}),r.centeredSlides&&r.cssMode&&(fo(n,"--swiper-centered-offset-before",""),fo(n,"--swiper-centered-offset-after","")),r.cssMode&&(fo(n,"--swiper-slides-offset-before",`${p}px`),fo(n,"--swiper-slides-offset-after",`${y}px`));const T=r.grid&&r.grid.rows>1&&e.grid;T?e.grid.initSlides(u):e.grid&&e.grid.unsetSlides();let C;const j=r.slidesPerView==="auto"&&r.breakpoints&&Object.keys(r.breakpoints).filter(P=>typeof r.breakpoints[P].slidesPerView<"u").length>0;for(let P=0;P=0&&(G+=h[q]+(q1&&(N||f.push(e.virtualSize-m))}if(s&&r.loop){const P=h[0]+b;if(r.slidesPerGroup>1){const N=Math.ceil((e.virtual.slidesBefore+e.virtual.slidesAfter)/r.slidesPerGroup),M=P*r.slidesPerGroup;for(let R=0;R!r.cssMode||r.loop?!0:M!==u.length-1).forEach(N=>{N.style[P]=`${b}px`})}if(r.centeredSlides&&r.centeredSlidesBounds){let P=0;h.forEach(M=>{P+=M+(b||0)}),P-=b;const N=P>m?P-m:0;f=f.map(M=>M<=0?-p:M>N?N+y:M)}if(r.centerInsufficientSlides){let P=0;if(h.forEach(N=>{P+=N+(b||0)}),P-=b,P{f[R]=M-N}),d.forEach((M,R)=>{d[R]=M+N})}}if(Object.assign(e,{slides:u,snapGrid:f,slidesGrid:d,slidesSizesGrid:h}),r.centeredSlides&&r.cssMode&&!r.centeredSlidesBounds){fo(n,"--swiper-centered-offset-before",`${-f[0]}px`),fo(n,"--swiper-centered-offset-after",`${e.size/2-h[h.length-1]/2}px`);const P=-e.snapGrid[0],N=-e.slidesGrid[0];e.snapGrid=e.snapGrid.map(M=>M+P),e.slidesGrid=e.slidesGrid.map(M=>M+N)}if(c!==l&&e.emit("slidesLengthChange"),f.length!==v&&(e.params.watchOverflow&&e.checkOverflow(),e.emit("snapGridLengthChange")),d.length!==g&&e.emit("slidesGridLengthChange"),r.watchSlidesProgress&&e.updateSlidesOffset(),e.emit("slidesUpdated"),!s&&!r.cssMode&&(r.effect==="slide"||r.effect==="fade")){const P=`${r.containerModifierClass}backface-hidden`,N=e.el.classList.contains(P);c<=r.maxBackfaceHiddenSlides?N||e.el.classList.add(P):N&&e.el.classList.remove(P)}}function oz(e){const t=this,r=[],n=t.virtual&&t.params.virtual.enabled;let i=0,o;typeof e=="number"?t.setTransition(e):e===!0&&t.setTransition(t.params.speed);const a=s=>n?t.slides[t.getSlideIndexByData(s)]:t.slides[s];if(t.params.slidesPerView!=="auto"&&t.params.slidesPerView>1)if(t.params.centeredSlides)(t.visibleSlides||[]).forEach(s=>{r.push(s)});else for(o=0;ot.slides.length&&!n)break;r.push(a(s))}else r.push(a(t.activeIndex));for(o=0;oi?s:i}(i||i===0)&&(t.wrapperEl.style.height=`${i}px`)}function sz(){const e=this,t=e.slides,r=e.isElement?e.isHorizontal()?e.wrapperEl.offsetLeft:e.wrapperEl.offsetTop:0;for(let n=0;n{t&&!e.classList.contains(r)?e.classList.add(r):!t&&e.classList.contains(r)&&e.classList.remove(r)};function az(e=this&&this.translate||0){const t=this,r=t.params,{slides:n,rtlTranslate:i,snapGrid:o}=t;if(n.length===0)return;typeof n[0].swiperSlideOffset>"u"&&t.updateSlidesOffset();let a=-e;i&&(a=e),t.visibleSlidesIndexes=[],t.visibleSlides=[];let s=r.spaceBetween;typeof s=="string"&&s.indexOf("%")>=0?s=parseFloat(s.replace("%",""))/100*t.size:typeof s=="string"&&(s=parseFloat(s));for(let l=0;l=0&&h<=t.size-t.slidesSizesGrid[l],v=h>=0&&h1&&p<=t.size||h<=0&&p>=t.size;v&&(t.visibleSlides.push(u),t.visibleSlidesIndexes.push(l)),D_(u,v,r.slideVisibleClass),D_(u,y,r.slideFullyVisibleClass),u.progress=i?-f:f,u.originalProgress=i?-d:d}}function lz(e){const t=this;if(typeof e>"u"){const c=t.rtlTranslate?-1:1;e=t&&t.translate&&t.translate*c||0}const r=t.params,n=t.maxTranslate()-t.minTranslate();let{progress:i,isBeginning:o,isEnd:a,progressLoop:s}=t;const l=o,u=a;if(n===0)i=0,o=!0,a=!0;else{i=(e-t.minTranslate())/n;const c=Math.abs(e-t.minTranslate())<1,f=Math.abs(e-t.maxTranslate())<1;o=c||i<=0,a=f||i>=1,c&&(i=0),f&&(i=1)}if(r.loop){const c=t.getSlideIndexByData(0),f=t.getSlideIndexByData(t.slides.length-1),d=t.slidesGrid[c],h=t.slidesGrid[f],p=t.slidesGrid[t.slidesGrid.length-1],y=Math.abs(e);y>=d?s=(y-d)/p:s=(y+p-h)/p,s>1&&(s-=1)}Object.assign(t,{progress:i,progressLoop:s,isBeginning:o,isEnd:a}),(r.watchSlidesProgress||r.centeredSlides&&r.autoHeight)&&t.updateSlidesProgress(e),o&&!l&&t.emit("reachBeginning toEdge"),a&&!u&&t.emit("reachEnd toEdge"),(l&&!o||u&&!a)&&t.emit("fromEdge"),t.emit("progress",i)}const Ud=(e,t,r)=>{t&&!e.classList.contains(r)?e.classList.add(r):!t&&e.classList.contains(r)&&e.classList.remove(r)};function uz(){const e=this,{slides:t,params:r,slidesEl:n,activeIndex:i}=e,o=e.virtual&&r.virtual.enabled,a=e.grid&&r.grid&&r.grid.rows>1,s=f=>er(n,`.${r.slideClass}${f}, swiper-slide${f}`)[0];let l,u,c;if(o)if(r.loop){let f=i-e.virtual.slidesBefore;f<0&&(f=e.virtual.slides.length+f),f>=e.virtual.slides.length&&(f-=e.virtual.slides.length),l=s(`[data-swiper-slide-index="${f}"]`)}else l=s(`[data-swiper-slide-index="${i}"]`);else a?(l=t.find(f=>f.column===i),c=t.find(f=>f.column===i+1),u=t.find(f=>f.column===i-1)):l=t[i];l&&(a||(c=X6(l,`.${r.slideClass}, swiper-slide`)[0],r.loop&&!c&&(c=t[0]),u=K6(l,`.${r.slideClass}, swiper-slide`)[0],r.loop&&!u===0&&(u=t[t.length-1]))),t.forEach(f=>{Ud(f,f===l,r.slideActiveClass),Ud(f,f===c,r.slideNextClass),Ud(f,f===u,r.slidePrevClass)}),e.emitSlidesClasses()}const Nu=(e,t)=>{if(!e||e.destroyed||!e.params)return;const r=()=>e.isElement?"swiper-slide":`.${e.params.slideClass}`,n=t.closest(r());if(n){let i=n.querySelector(`.${e.params.lazyPreloaderClass}`);!i&&e.isElement&&(n.shadowRoot?i=n.shadowRoot.querySelector(`.${e.params.lazyPreloaderClass}`):requestAnimationFrame(()=>{n.shadowRoot&&(i=n.shadowRoot.querySelector(`.${e.params.lazyPreloaderClass}`),i&&!i.lazyPreloaderManaged&&i.remove())})),i&&!i.lazyPreloaderManaged&&i.remove()}},jd=(e,t)=>{if(!e.slides[t])return;const r=e.slides[t].querySelector('[loading="lazy"]');r&&r.removeAttribute("loading")},$g=e=>{if(!e||e.destroyed||!e.params)return;let t=e.params.lazyPreloadPrevNext;const r=e.slides.length;if(!r||!t||t<0)return;t=Math.min(t,r);const n=e.params.slidesPerView==="auto"?e.slidesPerViewDynamic():Math.ceil(e.params.slidesPerView),i=e.activeIndex;if(e.params.grid&&e.params.grid.rows>1){const a=i,s=[a-t];s.push(...Array.from({length:t}).map((l,u)=>a+n+u)),e.slides.forEach((l,u)=>{s.includes(l.column)&&jd(e,u)});return}const o=i+n-1;if(e.params.rewind||e.params.loop)for(let a=i-t;a<=o+t;a+=1){const s=(a%r+r)%r;(so)&&jd(e,s)}else for(let a=Math.max(i-t,0);a<=Math.min(o+t,r-1);a+=1)a!==i&&(a>o||a=t[o]&&n=t[o]&&n=t[o]&&(i=o);return r.normalizeSlideIndex&&(i<0||typeof i>"u")&&(i=0),i}function fz(e){const t=this,r=t.rtlTranslate?t.translate:-t.translate,{snapGrid:n,params:i,activeIndex:o,realIndex:a,snapIndex:s}=t;let l=e,u;const c=h=>{let p=h-t.virtual.slidesBefore;return p<0&&(p=t.virtual.slides.length+p),p>=t.virtual.slides.length&&(p-=t.virtual.slides.length),p};if(typeof l>"u"&&(l=cz(t)),n.indexOf(r)>=0)u=n.indexOf(r);else{const h=Math.min(i.slidesPerGroupSkip,l);u=h+Math.floor((l-h)/i.slidesPerGroup)}if(u>=n.length&&(u=n.length-1),l===o&&!t.params.loop){u!==s&&(t.snapIndex=u,t.emit("snapIndexChange"));return}if(l===o&&t.params.loop&&t.virtual&&t.params.virtual.enabled){t.realIndex=c(l);return}const f=t.grid&&i.grid&&i.grid.rows>1;let d;if(t.virtual&&i.virtual.enabled)i.loop?d=c(l):d=l;else if(f){const h=t.slides.find(y=>y.column===l);let p=parseInt(h.getAttribute("data-swiper-slide-index"),10);Number.isNaN(p)&&(p=Math.max(t.slides.indexOf(h),0)),d=Math.floor(p/i.grid.rows)}else if(t.slides[l]){const h=t.slides[l].getAttribute("data-swiper-slide-index");h?d=parseInt(h,10):d=l}else d=l;Object.assign(t,{previousSnapIndex:s,snapIndex:u,previousRealIndex:a,realIndex:d,previousIndex:o,activeIndex:l}),t.initialized&&$g(t),t.emit("activeIndexChange"),t.emit("snapIndexChange"),(t.initialized||t.params.runCallbacksOnInit)&&(a!==d&&t.emit("realIndexChange"),t.emit("slideChange"))}function dz(e,t){const r=this,n=r.params;let i=e.closest(`.${n.slideClass}, swiper-slide`);!i&&r.isElement&&t&&t.length>1&&t.includes(e)&&[...t.slice(t.indexOf(e)+1,t.length)].forEach(s=>{!i&&s.matches&&s.matches(`.${n.slideClass}, swiper-slide`)&&(i=s)});let o=!1,a;if(i){for(let s=0;sl?c=l:n&&eo?a="next":i"u"&&(t=o.params.speed);const y=Math.min(o.params.slidesPerGroupSkip,a);let v=y+Math.floor((a-y)/o.params.slidesPerGroup);v>=l.length&&(v=l.length-1);const g=-l[v];if(s.normalizeSlideIndex)for(let T=0;T=j&&C=j&&C=j&&(a=T)}if(o.initialized&&a!==f&&(!o.allowSlideNext&&(d?g>o.translate&&g>o.minTranslate():go.translate&&g>o.maxTranslate()&&(f||0)!==a))return!1;a!==(c||0)&&r&&o.emit("beforeSlideChangeStart"),o.updateProgress(g);let m;a>f?m="next":a0?(o._cssModeVirtualInitialSet=!0,requestAnimationFrame(()=>{h[T?"scrollLeft":"scrollTop"]=C})):h[T?"scrollLeft":"scrollTop"]=C,b&&requestAnimationFrame(()=>{o.wrapperEl.style.scrollSnapType="",o._immediateVirtual=!1});else{if(!o.support.smoothScroll)return aT({swiper:o,targetPosition:C,side:T?"left":"top"}),!0;h.scrollTo({[T?"left":"top"]:C,behavior:"smooth"})}return!0}const E=cT().isSafari;return b&&!i&&E&&o.isElement&&o.virtual.update(!1,!1,a),o.setTransition(t),o.setTranslate(g),o.updateActiveIndex(a),o.updateSlidesClasses(),o.emit("beforeTransitionStart",t,n),o.transitionStart(r,m),t===0?o.transitionEnd(r,m):o.animating||(o.animating=!0,o.onSlideToWrapperTransitionEnd||(o.onSlideToWrapperTransitionEnd=function(C){!o||o.destroyed||C.target===this&&(o.wrapperEl.removeEventListener("transitionend",o.onSlideToWrapperTransitionEnd),o.onSlideToWrapperTransitionEnd=null,delete o.onSlideToWrapperTransitionEnd,o.transitionEnd(r,m))}),o.wrapperEl.addEventListener("transitionend",o.onSlideToWrapperTransitionEnd)),!0}function Tz(e=0,t,r=!0,n){typeof e=="string"&&(e=parseInt(e,10));const i=this;if(i.destroyed)return;typeof t>"u"&&(t=i.params.speed);const o=i.grid&&i.params.grid&&i.params.grid.rows>1;let a=e;if(i.params.loop)if(i.virtual&&i.params.virtual.enabled)a=a+i.virtual.slidesBefore;else{let s;if(o){const y=a*i.params.grid.rows;s=i.slides.find(v=>v.getAttribute("data-swiper-slide-index")*1===y).column}else s=i.getSlideIndexByData(a);const l=o?Math.ceil(i.slides.length/i.params.grid.rows):i.slides.length,{centeredSlides:u,slidesOffsetBefore:c,slidesOffsetAfter:f}=i.params,d=u||!!c||!!f;let h=i.params.slidesPerView;h==="auto"?h=i.slidesPerViewDynamic():(h=Math.ceil(parseFloat(i.params.slidesPerView,10)),d&&h%2===0&&(h=h+1));let p=l-sv.getAttribute("data-swiper-slide-index")*1===y).column}else a=i.getSlideIndexByData(a)}return requestAnimationFrame(()=>{i.slideTo(a,t,r,n)}),i}function Az(e,t=!0,r){const n=this,{enabled:i,params:o,animating:a}=n;if(!i||n.destroyed)return n;typeof e>"u"&&(e=n.params.speed);let s=o.slidesPerGroup;o.slidesPerView==="auto"&&o.slidesPerGroup===1&&o.slidesPerGroupAuto&&(s=Math.max(n.slidesPerViewDynamic("current",!0),1));const l=n.activeIndex{n.slideTo(n.activeIndex+l,e,t,r)}),!0}return o.rewind&&n.isEnd?n.slideTo(0,e,t,r):n.slideTo(n.activeIndex+l,e,t,r)}function Iz(e,t=!0,r){const n=this,{params:i,snapGrid:o,slidesGrid:a,rtlTranslate:s,enabled:l,animating:u}=n;if(!l||n.destroyed)return n;typeof e>"u"&&(e=n.params.speed);const c=n.virtual&&i.virtual.enabled;if(i.loop){if(u&&!c&&i.loopPreventsSliding)return!1;n.loopFix({direction:"prev"}),n._clientLeft=n.wrapperEl.clientLeft}const f=s?n.translate:-n.translate;function d(m){return m<0?-Math.floor(Math.abs(m)):Math.floor(m)}const h=d(f),p=o.map(m=>d(m)),y=i.freeMode&&i.freeMode.enabled;let v=o[p.indexOf(h)-1];if(typeof v>"u"&&(i.cssMode||y)){let m;o.forEach((b,_)=>{h>=b&&(m=_)}),typeof m<"u"&&(v=y?o[m]:o[m>0?m-1:m])}let g=0;if(typeof v<"u"&&(g=a.indexOf(v),g<0&&(g=n.activeIndex-1),i.slidesPerView==="auto"&&i.slidesPerGroup===1&&i.slidesPerGroupAuto&&(g=g-n.slidesPerViewDynamic("previous",!0)+1,g=Math.max(g,0))),i.rewind&&n.isBeginning){const m=n.params.virtual&&n.params.virtual.enabled&&n.virtual?n.virtual.slides.length-1:n.slides.length-1;return n.slideTo(m,e,t,r)}else if(i.loop&&n.activeIndex===0&&i.cssMode)return requestAnimationFrame(()=>{n.slideTo(g,e,t,r)}),!0;return n.slideTo(g,e,t,r)}function Cz(e,t=!0,r){const n=this;if(!n.destroyed)return typeof e>"u"&&(e=n.params.speed),n.slideTo(n.activeIndex,e,t,r)}function Mz(e,t=!0,r,n=.5){const i=this;if(i.destroyed)return;typeof e>"u"&&(e=i.params.speed);let o=i.activeIndex;const a=Math.min(i.params.slidesPerGroupSkip,o),s=a+Math.floor((o-a)/i.params.slidesPerGroup),l=i.rtlTranslate?i.translate:-i.translate;if(l>=i.snapGrid[s]){const u=i.snapGrid[s],c=i.snapGrid[s+1];l-u>(c-u)*n&&(o+=i.params.slidesPerGroup)}else{const u=i.snapGrid[s-1],c=i.snapGrid[s];l-u<=(c-u)*n&&(o-=i.params.slidesPerGroup)}return o=Math.max(o,0),o=Math.min(o,i.slidesGrid.length-1),i.slideTo(o,e,t,r)}function kz(){const e=this;if(e.destroyed)return;const{params:t,slidesEl:r}=e,n=t.slidesPerView==="auto"?e.slidesPerViewDynamic():t.slidesPerView;let i=e.getSlideIndexWhenGrid(e.clickedIndex),o;const a=e.isElement?"swiper-slide":`.${t.slideClass}`,s=e.grid&&e.params.grid&&e.params.grid.rows>1;if(t.loop){if(e.animating)return;o=parseInt(e.clickedSlide.getAttribute("data-swiper-slide-index"),10),t.centeredSlides?e.slideToLoop(o):i>(s?(e.slides.length-n)/2-(e.params.grid.rows-1):e.slides.length-n)?(e.loopFix(),i=e.getSlideIndex(er(r,`${a}[data-swiper-slide-index="${o}"]`)[0]),Ds(()=>{e.slideTo(i)})):e.slideTo(i)}else e.slideTo(i)}var Pz={slideTo:xz,slideToLoop:Tz,slideNext:Az,slidePrev:Iz,slideReset:Cz,slideToClosest:Mz,slideToClickedSlide:kz};function Oz(e,t){const r=this,{params:n,slidesEl:i}=r;if(!n.loop||r.virtual&&r.params.virtual.enabled)return;const o=()=>{er(i,`.${n.slideClass}, swiper-slide`).forEach((p,y)=>{p.setAttribute("data-swiper-slide-index",y)})},a=()=>{const h=er(i,`.${n.slideBlankClass}`);h.forEach(p=>{p.remove()}),h.length>0&&(r.recalcSlides(),r.updateSlides())},s=r.grid&&n.grid&&n.grid.rows>1;n.loopAddBlankSlides&&(n.slidesPerGroup>1||s)&&a();const l=n.slidesPerGroup*(s?n.grid.rows:1),u=r.slides.length%l!==0,c=s&&r.slides.length%n.grid.rows!==0,f=h=>{for(let p=0;p1;u.length"u"?i=l.getSlideIndex(u.find(B=>B.classList.contains(h.slideActiveClass))):N=i;const M=r==="next"||!r,R=r==="prev"||!r;let O=0,G=0;const z=(E?u[i].column:i)+(m&&typeof n>"u"?-b/2+.5:0);if(z=0;ie-=1)u[ie].column===$&&T.push(ie)}else T.push(j-ae-1)}}else if(z+b>j-w){G=Math.max(z-(j-w*2),_),P&&(G=Math.max(G,b-j+g+1));for(let B=0;B{$.column===ae&&C.push(ie)}):C.push(ae)}}if(l.__preventObserver__=!0,requestAnimationFrame(()=>{l.__preventObserver__=!1}),l.params.effect==="cards"&&u.length{u[B].swiperLoopMoveDOM=!0,d.prepend(u[B]),u[B].swiperLoopMoveDOM=!1}),M&&C.forEach(B=>{u[B].swiperLoopMoveDOM=!0,d.append(u[B]),u[B].swiperLoopMoveDOM=!1}),l.recalcSlides(),h.slidesPerView==="auto"?l.updateSlides():E&&(T.length>0&&R||C.length>0&&M)&&l.slides.forEach((B,ae)=>{l.grid.updateSlide(ae,B,l.slides)}),h.watchSlidesProgress&&l.updateSlidesOffset(),t){if(T.length>0&&R){if(typeof e>"u"){const B=l.slidesGrid[N],$=l.slidesGrid[N+O]-B;s?l.setTranslate(l.translate-$):(l.slideTo(N+Math.ceil(O),0,!1,!0),n&&(l.touchEventsData.startTranslate=l.touchEventsData.startTranslate-$,l.touchEventsData.currentTranslate=l.touchEventsData.currentTranslate-$))}else if(n){const B=E?T.length/h.grid.rows:T.length;l.slideTo(l.activeIndex+B,0,!1,!0),l.touchEventsData.currentTranslate=l.translate}}else if(C.length>0&&M)if(typeof e>"u"){const B=l.slidesGrid[N],$=l.slidesGrid[N-G]-B;s?l.setTranslate(l.translate-$):(l.slideTo(N-G,0,!1,!0),n&&(l.touchEventsData.startTranslate=l.touchEventsData.startTranslate-$,l.touchEventsData.currentTranslate=l.touchEventsData.currentTranslate-$))}else{const B=E?C.length/h.grid.rows:C.length;l.slideTo(l.activeIndex-B,0,!1,!0)}}if(l.allowSlidePrev=c,l.allowSlideNext=f,l.controller&&l.controller.control&&!a){const B={slideRealIndex:e,direction:r,setTranslate:n,activeSlideIndex:i,byController:!0};Array.isArray(l.controller.control)?l.controller.control.forEach(ae=>{!ae.destroyed&&ae.params.loop&&ae.loopFix({...B,slideTo:ae.params.slidesPerView===h.slidesPerView?t:!1})}):l.controller.control instanceof l.constructor&&l.controller.control.params.loop&&l.controller.control.loopFix({...B,slideTo:l.controller.control.params.slidesPerView===h.slidesPerView?t:!1})}l.emit("loopFix")}function Rz(){const e=this,{params:t,slidesEl:r}=e;if(!t.loop||!r||e.virtual&&e.params.virtual.enabled)return;e.recalcSlides();const n=[];e.slides.forEach(i=>{const o=typeof i.swiperSlideIndex>"u"?i.getAttribute("data-swiper-slide-index")*1:i.swiperSlideIndex;n[o]=i}),e.slides.forEach(i=>{i.removeAttribute("data-swiper-slide-index")}),n.forEach(i=>{r.append(i)}),e.recalcSlides(),e.slideTo(e.realIndex,0)}var Nz={loopCreate:Oz,loopFix:Lz,loopDestroy:Rz};function $z(e){const t=this;if(!t.params.simulateTouch||t.params.watchOverflow&&t.isLocked||t.params.cssMode)return;const r=t.params.touchEventsTarget==="container"?t.el:t.wrapperEl;t.isElement&&(t.__preventObserver__=!0),r.style.cursor="move",r.style.cursor=e?"grabbing":"grab",t.isElement&&requestAnimationFrame(()=>{t.__preventObserver__=!1})}function Dz(){const e=this;e.params.watchOverflow&&e.isLocked||e.params.cssMode||(e.isElement&&(e.__preventObserver__=!0),e[e.params.touchEventsTarget==="container"?"el":"wrapperEl"].style.cursor="",e.isElement&&requestAnimationFrame(()=>{e.__preventObserver__=!1}))}var Bz={setGrabCursor:$z,unsetGrabCursor:Dz};function Fz(e,t=this){function r(n){if(!n||n===qt()||n===Mt())return null;n.assignedSlot&&(n=n.assignedSlot);const i=n.closest(e);return!i&&!n.getRootNode?null:i||r(n.getRootNode().host)}return r(t)}function B_(e,t,r){const n=Mt(),{params:i}=e,o=i.edgeSwipeDetection,a=i.edgeSwipeThreshold;return o&&(r<=a||r>=n.innerWidth-a)?o==="prevent"?(t.preventDefault(),!0):!1:!0}function Uz(e){const t=this,r=qt();let n=e;n.originalEvent&&(n=n.originalEvent);const i=t.touchEventsData;if(n.type==="pointerdown"){if(i.pointerId!==null&&i.pointerId!==n.pointerId)return;i.pointerId=n.pointerId}else n.type==="touchstart"&&n.targetTouches.length===1&&(i.touchId=n.targetTouches[0].identifier);if(n.type==="touchstart"){B_(t,n,n.targetTouches[0].pageX);return}const{params:o,touches:a,enabled:s}=t;if(!s||!o.simulateTouch&&n.pointerType==="mouse"||t.animating&&o.preventInteractionOnTransition)return;!t.animating&&o.cssMode&&o.loop&&t.loopFix();let l=n.target;if(o.touchEventsTarget==="wrapper"&&!Y6(l,t.wrapperEl)||"which"in n&&n.which===3||"button"in n&&n.button>0||i.isTouched&&i.isMoved)return;const u=!!o.noSwipingClass&&o.noSwipingClass!=="",c=n.composedPath?n.composedPath():n.path;u&&n.target&&n.target.shadowRoot&&c&&(l=c[0]);const f=o.noSwipingSelector?o.noSwipingSelector:`.${o.noSwipingClass}`,d=!!(n.target&&n.target.shadowRoot);if(o.noSwiping&&(d?Fz(f,l):l.closest(f))){t.allowClick=!0;return}if(o.swipeHandler&&!l.closest(o.swipeHandler))return;a.currentX=n.pageX,a.currentY=n.pageY;const h=a.currentX,p=a.currentY;if(!B_(t,n,h))return;Object.assign(i,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),a.startX=h,a.startY=p,i.touchStartTime=Qr(),t.allowClick=!0,t.updateSize(),t.swipeDirection=void 0,o.threshold>0&&(i.allowThresholdMove=!1);let y=!0;l.matches(i.focusableElements)&&(y=!1,l.nodeName==="SELECT"&&(i.isTouched=!1)),r.activeElement&&r.activeElement.matches(i.focusableElements)&&r.activeElement!==l&&(n.pointerType==="mouse"||n.pointerType!=="mouse"&&!l.matches(i.focusableElements))&&r.activeElement.blur();const v=y&&t.allowTouchMove&&o.touchStartPreventDefault;(o.touchStartForcePreventDefault||v)&&!l.isContentEditable&&n.preventDefault(),o.freeMode&&o.freeMode.enabled&&t.freeMode&&t.animating&&!o.cssMode&&t.freeMode.onTouchStart(),t.emit("touchStart",n)}function jz(e){const t=qt(),r=this,n=r.touchEventsData,{params:i,touches:o,rtlTranslate:a,enabled:s}=r;if(!s||!i.simulateTouch&&e.pointerType==="mouse")return;let l=e;if(l.originalEvent&&(l=l.originalEvent),l.type==="pointermove"&&(n.touchId!==null||l.pointerId!==n.pointerId))return;let u;if(l.type==="touchmove"){if(u=[...l.changedTouches].find(w=>w.identifier===n.touchId),!u||u.identifier!==n.touchId)return}else u=l;if(!n.isTouched){n.startMoving&&n.isScrolling&&r.emit("touchMoveOpposite",l);return}const c=u.pageX,f=u.pageY;if(l.preventedByNestedSwiper){o.startX=c,o.startY=f;return}if(!r.allowTouchMove){l.target.matches(n.focusableElements)||(r.allowClick=!1),n.isTouched&&(Object.assign(o,{startX:c,startY:f,currentX:c,currentY:f}),n.touchStartTime=Qr());return}if(i.touchReleaseOnEdges&&!i.loop)if(r.isVertical()){if(fo.startY&&r.translate>=r.minTranslate()){n.isTouched=!1,n.isMoved=!1;return}}else{if(a&&(c>o.startX&&-r.translate<=r.maxTranslate()||c=r.minTranslate()))return;if(!a&&(co.startX&&r.translate>=r.minTranslate()))return}if(t.activeElement&&t.activeElement.matches(n.focusableElements)&&t.activeElement!==l.target&&l.pointerType!=="mouse"&&t.activeElement.blur(),t.activeElement&&l.target===t.activeElement&&l.target.matches(n.focusableElements)){n.isMoved=!0,r.allowClick=!1;return}n.allowTouchCallbacks&&r.emit("touchMove",l),o.previousX=o.currentX,o.previousY=o.currentY,o.currentX=c,o.currentY=f;const d=o.currentX-o.startX,h=o.currentY-o.startY;if(r.params.threshold&&Math.sqrt(d**2+h**2)"u"){let w;r.isHorizontal()&&o.currentY===o.startY||r.isVertical()&&o.currentX===o.startX?n.isScrolling=!1:d*d+h*h>=25&&(w=Math.atan2(Math.abs(h),Math.abs(d))*180/Math.PI,n.isScrolling=r.isHorizontal()?w>i.touchAngle:90-w>i.touchAngle)}if(n.isScrolling&&r.emit("touchMoveOpposite",l),typeof n.startMoving>"u"&&(o.currentX!==o.startX||o.currentY!==o.startY)&&(n.startMoving=!0),n.isScrolling||l.type==="touchmove"&&n.preventTouchMoveFromPointerMove){n.isTouched=!1;return}if(!n.startMoving)return;r.allowClick=!1,!i.cssMode&&l.cancelable&&l.preventDefault(),i.touchMoveStopPropagation&&!i.nested&&l.stopPropagation();let p=r.isHorizontal()?d:h,y=r.isHorizontal()?o.currentX-o.previousX:o.currentY-o.previousY;i.oneWayMovement&&(p=Math.abs(p)*(a?1:-1),y=Math.abs(y)*(a?1:-1)),o.diff=p,p*=i.touchRatio,a&&(p=-p,y=-y);const v=r.touchesDirection;r.swipeDirection=p>0?"prev":"next",r.touchesDirection=y>0?"prev":"next";const g=r.params.loop&&!i.cssMode,m=r.touchesDirection==="next"&&r.allowSlideNext||r.touchesDirection==="prev"&&r.allowSlidePrev;if(!n.isMoved){if(g&&m&&r.loopFix({direction:r.swipeDirection}),n.startTranslate=r.getTranslate(),r.setTransition(0),r.animating){const w=new window.CustomEvent("transitionend",{bubbles:!0,cancelable:!0,detail:{bySwiperTouchMove:!0}});r.wrapperEl.dispatchEvent(w)}n.allowMomentumBounce=!1,i.grabCursor&&(r.allowSlideNext===!0||r.allowSlidePrev===!0)&&r.setGrabCursor(!0),r.emit("sliderFirstMove",l)}if(new Date().getTime(),i._loopSwapReset!==!1&&n.isMoved&&n.allowThresholdMove&&v!==r.touchesDirection&&g&&m&&Math.abs(p)>=1){Object.assign(o,{startX:c,startY:f,currentX:c,currentY:f,startTranslate:n.currentTranslate}),n.loopSwapReset=!0,n.startTranslate=n.currentTranslate;return}r.emit("sliderMove",l),n.isMoved=!0,n.currentTranslate=p+n.startTranslate;let b=!0,_=i.resistanceRatio;if(i.touchReleaseOnEdges&&(_=0),p>0?(g&&m&&n.allowThresholdMove&&n.currentTranslate>(i.centeredSlides?r.minTranslate()-r.slidesSizesGrid[r.activeIndex+1]-(i.slidesPerView!=="auto"&&r.slides.length-i.slidesPerView>=2?r.slidesSizesGrid[r.activeIndex+1]+r.params.spaceBetween:0)-r.params.spaceBetween:r.minTranslate())&&r.loopFix({direction:"prev",setTranslate:!0,activeSlideIndex:0}),n.currentTranslate>r.minTranslate()&&(b=!1,i.resistance&&(n.currentTranslate=r.minTranslate()-1+(-r.minTranslate()+n.startTranslate+p)**_))):p<0&&(g&&m&&n.allowThresholdMove&&n.currentTranslate<(i.centeredSlides?r.maxTranslate()+r.slidesSizesGrid[r.slidesSizesGrid.length-1]+r.params.spaceBetween+(i.slidesPerView!=="auto"&&r.slides.length-i.slidesPerView>=2?r.slidesSizesGrid[r.slidesSizesGrid.length-1]+r.params.spaceBetween:0):r.maxTranslate())&&r.loopFix({direction:"next",setTranslate:!0,activeSlideIndex:r.slides.length-(i.slidesPerView==="auto"?r.slidesPerViewDynamic():Math.ceil(parseFloat(i.slidesPerView,10)))}),n.currentTranslaten.startTranslate&&(n.currentTranslate=n.startTranslate),!r.allowSlidePrev&&!r.allowSlideNext&&(n.currentTranslate=n.startTranslate),i.threshold>0)if(Math.abs(p)>i.threshold||n.allowThresholdMove){if(!n.allowThresholdMove){n.allowThresholdMove=!0,o.startX=o.currentX,o.startY=o.currentY,n.currentTranslate=n.startTranslate,o.diff=r.isHorizontal()?o.currentX-o.startX:o.currentY-o.startY;return}}else{n.currentTranslate=n.startTranslate;return}!i.followFinger||i.cssMode||((i.freeMode&&i.freeMode.enabled&&r.freeMode||i.watchSlidesProgress)&&(r.updateActiveIndex(),r.updateSlidesClasses()),i.freeMode&&i.freeMode.enabled&&r.freeMode&&r.freeMode.onTouchMove(),r.updateProgress(n.currentTranslate),r.setTranslate(n.currentTranslate))}function Vz(e){const t=this,r=t.touchEventsData;let n=e;n.originalEvent&&(n=n.originalEvent);let i;if(n.type==="touchend"||n.type==="touchcancel"){if(i=[...n.changedTouches].find(w=>w.identifier===r.touchId),!i||i.identifier!==r.touchId)return}else{if(r.touchId!==null||n.pointerId!==r.pointerId)return;i=n}if(["pointercancel","pointerout","pointerleave","contextmenu"].includes(n.type)&&!(["pointercancel","contextmenu"].includes(n.type)&&(t.browser.isSafari||t.browser.isWebView)))return;r.pointerId=null,r.touchId=null;const{params:a,touches:s,rtlTranslate:l,slidesGrid:u,enabled:c}=t;if(!c||!a.simulateTouch&&n.pointerType==="mouse")return;if(r.allowTouchCallbacks&&t.emit("touchEnd",n),r.allowTouchCallbacks=!1,!r.isTouched){r.isMoved&&a.grabCursor&&t.setGrabCursor(!1),r.isMoved=!1,r.startMoving=!1;return}a.grabCursor&&r.isMoved&&r.isTouched&&(t.allowSlideNext===!0||t.allowSlidePrev===!0)&&t.setGrabCursor(!1);const f=Qr(),d=f-r.touchStartTime;if(t.allowClick){const w=n.path||n.composedPath&&n.composedPath();t.updateClickedSlide(w&&w[0]||n.target,w),t.emit("tap click",n),d<300&&f-r.lastClickTime<300&&t.emit("doubleTap doubleClick",n)}if(r.lastClickTime=Qr(),Ds(()=>{t.destroyed||(t.allowClick=!0)}),!r.isTouched||!r.isMoved||!t.swipeDirection||s.diff===0&&!r.loopSwapReset||r.currentTranslate===r.startTranslate&&!r.loopSwapReset){r.isTouched=!1,r.isMoved=!1,r.startMoving=!1;return}r.isTouched=!1,r.isMoved=!1,r.startMoving=!1;let h;if(a.followFinger?h=l?t.translate:-t.translate:h=-r.currentTranslate,a.cssMode)return;if(a.freeMode&&a.freeMode.enabled){t.freeMode.onTouchEnd({currentPos:h});return}const p=h>=-t.maxTranslate()&&!t.params.loop;let y=0,v=t.slidesSizesGrid[0];for(let w=0;w=u[w]&&h=u[w])&&(y=w,v=u[u.length-1]-u[u.length-2])}let g=null,m=null;a.rewind&&(t.isBeginning?m=a.virtual&&a.virtual.enabled&&t.virtual?t.virtual.slides.length-1:t.slides.length-1:t.isEnd&&(g=0));const b=(h-u[y])/v,_=ya.longSwipesMs){if(!a.longSwipes){t.slideTo(t.activeIndex);return}t.swipeDirection==="next"&&(b>=a.longSwipesRatio?t.slideTo(a.rewind&&t.isEnd?g:y+_):t.slideTo(y)),t.swipeDirection==="prev"&&(b>1-a.longSwipesRatio?t.slideTo(y+_):m!==null&&b<0&&Math.abs(b)>a.longSwipesRatio?t.slideTo(m):t.slideTo(y))}else{if(!a.shortSwipes){t.slideTo(t.activeIndex);return}t.navigation&&(n.target===t.navigation.nextEl||n.target===t.navigation.prevEl)?n.target===t.navigation.nextEl?t.slideTo(y+_):t.slideTo(y):(t.swipeDirection==="next"&&t.slideTo(g!==null?g:y+_),t.swipeDirection==="prev"&&t.slideTo(m!==null?m:y))}}function F_(){const e=this,{params:t,el:r}=e;if(r&&r.offsetWidth===0)return;t.breakpoints&&e.setBreakpoint();const{allowSlideNext:n,allowSlidePrev:i,snapGrid:o}=e,a=e.virtual&&e.params.virtual.enabled;e.allowSlideNext=!0,e.allowSlidePrev=!0,e.updateSize(),e.updateSlides(),e.updateSlidesClasses();const s=a&&t.loop;(t.slidesPerView==="auto"||t.slidesPerView>1)&&e.isEnd&&!e.isBeginning&&!e.params.centeredSlides&&!s?e.slideTo(e.slides.length-1,0,!1,!0):e.params.loop&&!a?e.slideToLoop(e.realIndex,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0),e.autoplay&&e.autoplay.running&&e.autoplay.paused&&(clearTimeout(e.autoplay.resizeTimeout),e.autoplay.resizeTimeout=setTimeout(()=>{e.autoplay&&e.autoplay.running&&e.autoplay.paused&&e.autoplay.resume()},500)),e.allowSlidePrev=i,e.allowSlideNext=n,e.params.watchOverflow&&o!==e.snapGrid&&e.checkOverflow()}function Wz(e){const t=this;t.enabled&&(t.allowClick||(t.params.preventClicks&&e.preventDefault(),t.params.preventClicksPropagation&&t.animating&&(e.stopPropagation(),e.stopImmediatePropagation())))}function zz(){const e=this,{wrapperEl:t,rtlTranslate:r,enabled:n}=e;if(!n)return;e.previousTranslate=e.translate,e.isHorizontal()?e.translate=-t.scrollLeft:e.translate=-t.scrollTop,e.translate===0&&(e.translate=0),e.updateActiveIndex(),e.updateSlidesClasses();let i;const o=e.maxTranslate()-e.minTranslate();o===0?i=0:i=(e.translate-e.minTranslate())/o,i!==e.progress&&e.updateProgress(r?-e.translate:e.translate),e.emit("setTranslate",e.translate,!1)}function Hz(e){const t=this;Nu(t,e.target),!(t.params.cssMode||t.params.slidesPerView!=="auto"&&!t.params.autoHeight)&&t.update()}function qz(){const e=this;e.documentTouchHandlerProceeded||(e.documentTouchHandlerProceeded=!0,e.params.touchReleaseOnEdges&&(e.el.style.touchAction="auto"))}const dT=(e,t)=>{const r=qt(),{params:n,el:i,wrapperEl:o,device:a}=e,s=!!n.nested,l=t==="on"?"addEventListener":"removeEventListener",u=t;!i||typeof i=="string"||(r[l]("touchstart",e.onDocumentTouchStart,{passive:!1,capture:s}),i[l]("touchstart",e.onTouchStart,{passive:!1}),i[l]("pointerdown",e.onTouchStart,{passive:!1}),r[l]("touchmove",e.onTouchMove,{passive:!1,capture:s}),r[l]("pointermove",e.onTouchMove,{passive:!1,capture:s}),r[l]("touchend",e.onTouchEnd,{passive:!0}),r[l]("pointerup",e.onTouchEnd,{passive:!0}),r[l]("pointercancel",e.onTouchEnd,{passive:!0}),r[l]("touchcancel",e.onTouchEnd,{passive:!0}),r[l]("pointerout",e.onTouchEnd,{passive:!0}),r[l]("pointerleave",e.onTouchEnd,{passive:!0}),r[l]("contextmenu",e.onTouchEnd,{passive:!0}),(n.preventClicks||n.preventClicksPropagation)&&i[l]("click",e.onClick,!0),n.cssMode&&o[l]("scroll",e.onScroll),n.updateOnWindowResize?e[u](a.ios||a.android?"resize orientationchange observerUpdate":"resize observerUpdate",F_,!0):e[u]("observerUpdate",F_,!0),i[l]("load",e.onLoad,{capture:!0}))};function Gz(){const e=this,{params:t}=e;e.onTouchStart=Uz.bind(e),e.onTouchMove=jz.bind(e),e.onTouchEnd=Vz.bind(e),e.onDocumentTouchStart=qz.bind(e),t.cssMode&&(e.onScroll=zz.bind(e)),e.onClick=Wz.bind(e),e.onLoad=Hz.bind(e),dT(e,"on")}function Yz(){dT(this,"off")}var Kz={attachEvents:Gz,detachEvents:Yz};const U_=(e,t)=>e.grid&&t.grid&&t.grid.rows>1;function Xz(){const e=this,{realIndex:t,initialized:r,params:n,el:i}=e,o=n.breakpoints;if(!o||o&&Object.keys(o).length===0)return;const a=qt(),s=n.breakpointsBase==="window"||!n.breakpointsBase?n.breakpointsBase:"container",l=["window","container"].includes(n.breakpointsBase)||!n.breakpointsBase?e.el:a.querySelector(n.breakpointsBase),u=e.getBreakpoint(o,s,l);if(!u||e.currentBreakpoint===u)return;const f=(u in o?o[u]:void 0)||e.originalParams,d=U_(e,n),h=U_(e,f),p=e.params.grabCursor,y=f.grabCursor,v=n.enabled;d&&!h?(i.classList.remove(`${n.containerModifierClass}grid`,`${n.containerModifierClass}grid-column`),e.emitContainerClasses()):!d&&h&&(i.classList.add(`${n.containerModifierClass}grid`),(f.grid.fill&&f.grid.fill==="column"||!f.grid.fill&&n.grid.fill==="column")&&i.classList.add(`${n.containerModifierClass}grid-column`),e.emitContainerClasses()),p&&!y?e.unsetGrabCursor():!p&&y&&e.setGrabCursor(),["navigation","pagination","scrollbar"].forEach(E=>{if(typeof f[E]>"u")return;const T=n[E]&&n[E].enabled,C=f[E]&&f[E].enabled;T&&!C&&e[E].disable(),!T&&C&&e[E].enable()});const g=f.direction&&f.direction!==n.direction,m=n.loop&&(f.slidesPerView!==n.slidesPerView||g),b=n.loop;g&&r&&e.changeDirection(),Nr(e.params,f);const _=e.params.enabled,w=e.params.loop;Object.assign(e,{allowTouchMove:e.params.allowTouchMove,allowSlideNext:e.params.allowSlideNext,allowSlidePrev:e.params.allowSlidePrev}),v&&!_?e.disable():!v&&_&&e.enable(),e.currentBreakpoint=u,e.emit("_beforeBreakpoint",f),r&&(m?(e.loopDestroy(),e.loopCreate(t),e.updateSlides()):!b&&w?(e.loopCreate(t),e.updateSlides()):b&&!w&&e.loopDestroy()),e.emit("breakpoint",f)}function Qz(e,t="window",r){if(!e||t==="container"&&!r)return;let n=!1;const i=Mt(),o=t==="window"?i.innerHeight:r.clientHeight,a=Object.keys(e).map(s=>{if(typeof s=="string"&&s.indexOf("@")===0){const l=parseFloat(s.substr(1));return{value:o*l,point:s}}return{value:s,point:s}});a.sort((s,l)=>parseInt(s.value,10)-parseInt(l.value,10));for(let s=0;s{typeof n=="object"?Object.keys(n).forEach(i=>{n[i]&&r.push(t+i)}):typeof n=="string"&&r.push(t+n)}),r}function e5(){const e=this,{classNames:t,params:r,rtl:n,el:i,device:o}=e,a=Zz(["initialized",r.direction,{"free-mode":e.params.freeMode&&r.freeMode.enabled},{autoheight:r.autoHeight},{rtl:n},{grid:r.grid&&r.grid.rows>1},{"grid-column":r.grid&&r.grid.rows>1&&r.grid.fill==="column"},{android:o.android},{ios:o.ios},{"css-mode":r.cssMode},{centered:r.cssMode&&r.centeredSlides},{"watch-progress":r.watchSlidesProgress}],r.containerModifierClass);t.push(...a),i.classList.add(...t),e.emitContainerClasses()}function t5(){const e=this,{el:t,classNames:r}=e;!t||typeof t=="string"||(t.classList.remove(...r),e.emitContainerClasses())}var r5={addClasses:e5,removeClasses:t5};function n5(){const e=this,{isLocked:t,params:r}=e,{slidesOffsetBefore:n}=r;if(n){const i=e.slides.length-1,o=e.slidesGrid[i]+e.slidesSizesGrid[i]+n*2;e.isLocked=e.size>o}else e.isLocked=e.snapGrid.length===1;r.allowSlideNext===!0&&(e.allowSlideNext=!e.isLocked),r.allowSlidePrev===!0&&(e.allowSlidePrev=!e.isLocked),t&&t!==e.isLocked&&(e.isEnd=!1),t!==e.isLocked&&e.emit(e.isLocked?"lock":"unlock")}var i5={checkOverflow:n5},Dg={init:!0,direction:"horizontal",oneWayMovement:!1,swiperElementNodeName:"SWIPER-CONTAINER",touchEventsTarget:"wrapper",initialSlide:0,speed:300,cssMode:!1,updateOnWindowResize:!0,resizeObserver:!0,nested:!1,createElements:!1,eventsPrefix:"swiper",enabled:!0,focusableElements:"input, select, option, textarea, button, video, label",width:null,height:null,preventInteractionOnTransition:!1,userAgent:null,url:null,edgeSwipeDetection:!1,edgeSwipeThreshold:20,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",breakpoints:void 0,breakpointsBase:"window",spaceBetween:0,slidesPerView:1,slidesPerGroup:1,slidesPerGroupSkip:0,slidesPerGroupAuto:!1,centeredSlides:!1,centeredSlidesBounds:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,centerInsufficientSlides:!1,snapToSlideEdge:!1,watchOverflow:!0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:5,touchMoveStopPropagation:!1,touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,loop:!1,loopAddBlankSlides:!0,loopAdditionalSlides:0,loopPreventsSliding:!0,rewind:!1,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:null,passiveListeners:!0,maxBackfaceHiddenSlides:10,containerModifierClass:"swiper-",slideClass:"swiper-slide",slideBlankClass:"swiper-slide-blank",slideActiveClass:"swiper-slide-active",slideVisibleClass:"swiper-slide-visible",slideFullyVisibleClass:"swiper-slide-fully-visible",slideNextClass:"swiper-slide-next",slidePrevClass:"swiper-slide-prev",wrapperClass:"swiper-wrapper",lazyPreloaderClass:"swiper-lazy-preloader",lazyPreloadPrevNext:0,runCallbacksOnInit:!0,_emitClasses:!1};function o5(e,t){return function(n={}){const i=Object.keys(n)[0],o=n[i];if(typeof o!="object"||o===null){Nr(t,n);return}if(e[i]===!0&&(e[i]={enabled:!0}),i==="navigation"&&e[i]&&e[i].enabled&&!e[i].prevEl&&!e[i].nextEl&&(e[i].auto=!0),["pagination","scrollbar"].indexOf(i)>=0&&e[i]&&e[i].enabled&&!e[i].el&&(e[i].auto=!0),!(i in e&&"enabled"in o)){Nr(t,n);return}typeof e[i]=="object"&&!("enabled"in e[i])&&(e[i].enabled=!0),e[i]||(e[i]={enabled:!1}),Nr(t,n)}}const Vd={eventsEmitter:rz,update:hz,translate:bz,transition:Ez,slide:Pz,loop:Nz,grabCursor:Bz,events:Kz,breakpoints:Jz,checkOverflow:i5,classes:r5},Wd={};class Rr{constructor(...t){let r,n;t.length===1&&t[0].constructor&&Object.prototype.toString.call(t[0]).slice(8,-1)==="Object"?n=t[0]:[r,n]=t,n||(n={}),n=Nr({},n),r&&!n.el&&(n.el=r);const i=qt();if(n.el&&typeof n.el=="string"&&i.querySelectorAll(n.el).length>1){const l=[];return i.querySelectorAll(n.el).forEach(u=>{const c=Nr({},n,{el:u});l.push(new Rr(c))}),l}const o=this;o.__swiper__=!0,o.support=lT(),o.device=uT({userAgent:n.userAgent}),o.browser=cT(),o.eventsListeners={},o.eventsAnyListeners=[],o.modules=[...o.__modules__],n.modules&&Array.isArray(n.modules)&&n.modules.forEach(l=>{typeof l=="function"&&o.modules.indexOf(l)<0&&o.modules.push(l)});const a={};o.modules.forEach(l=>{l({params:n,swiper:o,extendParams:o5(n,a),on:o.on.bind(o),once:o.once.bind(o),off:o.off.bind(o),emit:o.emit.bind(o)})});const s=Nr({},Dg,a);return o.params=Nr({},s,Wd,n),o.originalParams=Nr({},o.params),o.passedParams=Nr({},n),o.params&&o.params.on&&Object.keys(o.params.on).forEach(l=>{o.on(l,o.params.on[l])}),o.params&&o.params.onAny&&o.onAny(o.params.onAny),Object.assign(o,{enabled:o.params.enabled,el:r,classNames:[],slides:[],slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal(){return o.params.direction==="horizontal"},isVertical(){return o.params.direction==="vertical"},activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,cssOverflowAdjustment(){return Math.trunc(this.translate/2**23)*2**23},allowSlideNext:o.params.allowSlideNext,allowSlidePrev:o.params.allowSlidePrev,touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,focusableElements:o.params.focusableElements,lastClickTime:0,clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,startMoving:void 0,pointerId:null,touchId:null},allowClick:!0,allowTouchMove:o.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),o.emit("_swiper"),o.params.init&&o.init(),o}getDirectionLabel(t){return this.isHorizontal()?t:{width:"height","margin-top":"margin-left","margin-bottom ":"margin-right","margin-left":"margin-top","margin-right":"margin-bottom","padding-left":"padding-top","padding-right":"padding-bottom",marginRight:"marginBottom"}[t]}getSlideIndex(t){const{slidesEl:r,params:n}=this,i=er(r,`.${n.slideClass}, swiper-slide`),o=Ka(i[0]);return Ka(t)-o}getSlideIndexByData(t){return this.getSlideIndex(this.slides.find(r=>r.getAttribute("data-swiper-slide-index")*1===t))}getSlideIndexWhenGrid(t){return this.grid&&this.params.grid&&this.params.grid.rows>1&&(this.params.grid.fill==="column"?t=Math.floor(t/this.params.grid.rows):this.params.grid.fill==="row"&&(t=t%Math.ceil(this.slides.length/this.params.grid.rows))),t}recalcSlides(){const t=this,{slidesEl:r,params:n}=t;t.slides=er(r,`.${n.slideClass}, swiper-slide`)}enable(){const t=this;t.enabled||(t.enabled=!0,t.params.grabCursor&&t.setGrabCursor(),t.emit("enable"))}disable(){const t=this;t.enabled&&(t.enabled=!1,t.params.grabCursor&&t.unsetGrabCursor(),t.emit("disable"))}setProgress(t,r){const n=this;t=Math.min(Math.max(t,0),1);const i=n.minTranslate(),a=(n.maxTranslate()-i)*t+i;n.translateTo(a,typeof r>"u"?0:r),n.updateActiveIndex(),n.updateSlidesClasses()}emitContainerClasses(){const t=this;if(!t.params._emitClasses||!t.el)return;const r=t.el.className.split(" ").filter(n=>n.indexOf("swiper")===0||n.indexOf(t.params.containerModifierClass)===0);t.emit("_containerClasses",r.join(" "))}getSlideClasses(t){const r=this;return r.destroyed?"":t.className.split(" ").filter(n=>n.indexOf("swiper-slide")===0||n.indexOf(r.params.slideClass)===0).join(" ")}emitSlidesClasses(){const t=this;if(!t.params._emitClasses||!t.el)return;const r=[];t.slides.forEach(n=>{const i=t.getSlideClasses(n);r.push({slideEl:n,classNames:i}),t.emit("_slideClass",n,i)}),t.emit("_slideClasses",r)}slidesPerViewDynamic(t="current",r=!1){const n=this,{params:i,slides:o,slidesGrid:a,slidesSizesGrid:s,size:l,activeIndex:u}=n;let c=1;if(typeof i.slidesPerView=="number")return i.slidesPerView;if(i.centeredSlides){let f=o[u]?Math.ceil(o[u].swiperSlideSize):0,d;for(let h=u+1;hl&&(d=!0));for(let h=u-1;h>=0;h-=1)o[h]&&!d&&(f+=o[h].swiperSlideSize,c+=1,f>l&&(d=!0))}else if(t==="current")for(let f=u+1;f=0;f-=1)a[u]-a[f]{a.complete&&Nu(t,a)}),t.updateSize(),t.updateSlides(),t.updateProgress(),t.updateSlidesClasses();function i(){const a=t.rtlTranslate?t.translate*-1:t.translate,s=Math.min(Math.max(a,t.maxTranslate()),t.minTranslate());t.setTranslate(s),t.updateActiveIndex(),t.updateSlidesClasses()}let o;if(n.freeMode&&n.freeMode.enabled&&!n.cssMode)i(),n.autoHeight&&t.updateAutoHeight();else{if((n.slidesPerView==="auto"||n.slidesPerView>1)&&t.isEnd&&!n.centeredSlides){const a=t.virtual&&n.virtual.enabled?t.virtual.slides:t.slides;o=t.slideTo(a.length-1,0,!1,!0)}else o=t.slideTo(t.activeIndex,0,!1,!0);o||i()}n.watchOverflow&&r!==t.snapGrid&&t.checkOverflow(),t.emit("update")}changeDirection(t,r=!0){const n=this,i=n.params.direction;return t||(t=i==="horizontal"?"vertical":"horizontal"),t===i||t!=="horizontal"&&t!=="vertical"||(n.el.classList.remove(`${n.params.containerModifierClass}${i}`),n.el.classList.add(`${n.params.containerModifierClass}${t}`),n.emitContainerClasses(),n.params.direction=t,n.slides.forEach(o=>{t==="vertical"?o.style.width="":o.style.height=""}),n.emit("changeDirection"),r&&n.update()),n}changeLanguageDirection(t){const r=this;r.rtl&&t==="rtl"||!r.rtl&&t==="ltr"||(r.rtl=t==="rtl",r.rtlTranslate=r.params.direction==="horizontal"&&r.rtl,r.rtl?(r.el.classList.add(`${r.params.containerModifierClass}rtl`),r.el.dir="rtl"):(r.el.classList.remove(`${r.params.containerModifierClass}rtl`),r.el.dir="ltr"),r.update())}mount(t){const r=this;if(r.mounted)return!0;let n=t||r.params.el;if(typeof n=="string"&&(n=document.querySelector(n)),!n)return!1;n.swiper=r,n.parentNode&&n.parentNode.host&&n.parentNode.host.nodeName===r.params.swiperElementNodeName.toUpperCase()&&(r.isElement=!0);const i=()=>`.${(r.params.wrapperClass||"").trim().split(" ").join(".")}`;let a=n&&n.shadowRoot&&n.shadowRoot.querySelector?n.shadowRoot.querySelector(i()):er(n,i())[0];return!a&&r.params.createElements&&(a=Br("div",r.params.wrapperClass),n.append(a),er(n,`.${r.params.slideClass}`).forEach(s=>{a.append(s)})),Object.assign(r,{el:n,wrapperEl:a,slidesEl:r.isElement&&!n.parentNode.host.slideSlots?n.parentNode.host:a,hostEl:r.isElement?n.parentNode.host:n,mounted:!0,rtl:n.dir.toLowerCase()==="rtl"||Wi(n,"direction")==="rtl",rtlTranslate:r.params.direction==="horizontal"&&(n.dir.toLowerCase()==="rtl"||Wi(n,"direction")==="rtl"),wrongRTL:Wi(a,"display")==="-webkit-box"}),!0}init(t){const r=this;if(r.initialized||r.mount(t)===!1)return r;r.emit("beforeInit"),r.params.breakpoints&&r.setBreakpoint(),r.addClasses(),r.updateSize(),r.updateSlides(),r.params.watchOverflow&&r.checkOverflow(),r.params.grabCursor&&r.enabled&&r.setGrabCursor(),r.params.loop&&r.virtual&&r.params.virtual.enabled?r.slideTo(r.params.initialSlide+r.virtual.slidesBefore,0,r.params.runCallbacksOnInit,!1,!0):r.slideTo(r.params.initialSlide,0,r.params.runCallbacksOnInit,!1,!0),r.params.loop&&r.loopCreate(void 0,!0),r.attachEvents();const i=[...r.el.querySelectorAll('[loading="lazy"]')];return r.isElement&&i.push(...r.hostEl.querySelectorAll('[loading="lazy"]')),i.forEach(o=>{o.complete?Nu(r,o):o.addEventListener("load",a=>{Nu(r,a.target)})}),$g(r),r.initialized=!0,$g(r),r.emit("init"),r.emit("afterInit"),r}destroy(t=!0,r=!0){const n=this,{params:i,el:o,wrapperEl:a,slides:s}=n;return typeof n.params>"u"||n.destroyed||(n.emit("beforeDestroy"),n.initialized=!1,n.detachEvents(),i.loop&&n.loopDestroy(),r&&(n.removeClasses(),o&&typeof o!="string"&&o.removeAttribute("style"),a&&a.removeAttribute("style"),s&&s.length&&s.forEach(l=>{l.classList.remove(i.slideVisibleClass,i.slideFullyVisibleClass,i.slideActiveClass,i.slideNextClass,i.slidePrevClass),l.removeAttribute("style"),l.removeAttribute("data-swiper-slide-index")})),n.emit("destroy"),Object.keys(n.eventsListeners).forEach(l=>{n.off(l)}),t!==!1&&(n.el&&typeof n.el!="string"&&(n.el.swiper=null),z6(n)),n.destroyed=!0),null}static extendDefaults(t){Nr(Wd,t)}static get extendedDefaults(){return Wd}static get defaults(){return Dg}static installModule(t){Rr.prototype.__modules__||(Rr.prototype.__modules__=[]);const r=Rr.prototype.__modules__;typeof t=="function"&&r.indexOf(t)<0&&r.push(t)}static use(t){return Array.isArray(t)?(t.forEach(r=>Rr.installModule(r)),Rr):(Rr.installModule(t),Rr)}}Object.keys(Vd).forEach(e=>{Object.keys(Vd[e]).forEach(t=>{Rr.prototype[t]=Vd[e][t]})});Rr.use([ez,tz]);const s5={class:"d-flex align-items-center"},a5={key:0,class:"me-2 fa-solid fa-xs fa-star"},l5={class:"cpname"},u5={class:"d-flex float-right justify-content-end align-items-center"},c5=["data-bs-target"],f5=["data-bs-target"],d5={class:"subgrid"},h5={key:0,class:"d-flex justify-content-center align-items-center vehiclestatus"},p5={class:"d-flex flex-column align-items-center px-0"},g5={class:"d-flex justify-content-center flex-wrap"},m5={class:"d-flex align-items-center"},y5={class:"badge phasesInUse rounded-pill"},v5={class:"d-flex flex-wrap justify-content-center chargeinfo"},b5={class:"me-1"},_5={key:0,class:"subgrid socEditRow m-0 p-0"},w5={class:"socEditor rounded mt-2 d-flex flex-column align-items-center grid-col-12"},S5={class:"d-flex justify-content-stretch align-items-center"},E5=We({__name:"CompactListItem",props:{chargepoint:{}},setup(e){const t=e,r=et(!1),n=_e(()=>zt[t.chargepoint.chargeMode].icon),i=_e(()=>{let b="";return t.chargepoint.isLocked?b="fa-lock":t.chargepoint.isCharging?b=" fa-bolt":t.chargepoint.isPluggedIn&&(b="fa-plug"),"fa "+b}),o=_e(()=>{let b="var(--color-axis)";return t.chargepoint.isLocked?b="var(--color-evu)":t.chargepoint.isCharging?b="var(--color-charging)":t.chargepoint.isPluggedIn&&(b="var(--color-battery)"),{color:b,border:`0.5px solid ${b} `}}),a=_e(()=>t.chargepoint.chargeMode==="stop"?{"background-color":"var(--color-input)"}:{"background-color":zt[t.chargepoint.chargeMode].color}),s=_e(()=>Fr(t.chargepoint.power,Ce.decimalPlaces)),l=_e(()=>t.chargepoint.current+" A"),u=_e(()=>t.chargepoint.phasesInUse),c=_e(()=>t.chargepoint.dailyYield>0?qi(t.chargepoint.dailyYield,Ce.decimalPlaces):"0 Wh"),f=_e(()=>"("+Math.round(t.chargepoint.rangeCharged).toString()+" "+t.chargepoint.rangeUnit+")"),d=_e(()=>zt[t.chargepoint.chargeMode].name);function h(){Mr("socUpdate",1,t.chargepoint.connectedVehicle),Ye[t.chargepoint.id].waitingForSoc=!0}function p(){Mr("setSoc",y.value,t.chargepoint.connectedVehicle),r.value=!1}const y=_e({get(){return t.chargepoint.soc},set(b){Ye[t.chargepoint.id].soc=b}}),v=_e(()=>t.chargepoint.isLocked?"Gesperrt":t.chargepoint.isCharging?"Lädt":t.chargepoint.isPluggedIn?"Bereit":"Frei");function g(b){switch(b.selected){case"none":return"";case"soc":return`Limit: ${b.soc} %`;case"amount":return"Limit: "+qi(b.amount)}}const m=_e(()=>{let b=t.chargepoint.chargeTemplate;if(b!=null)switch(b.chargemode.selected){case"pv_charging":return g(b.chargemode.pv_charging.limit);case"eco_charging":return g(b.chargemode.eco_charging.limit);case"instant_charging":return g(b.chargemode.instant_charging.limit);default:return""}else return""});return(b,_)=>(se(),Se(Ge,null,[we(ro,{titlecolor:e.chargepoint.color,fullwidth:!0,small:!0},{title:Ae(()=>[U("div",s5,[e.chargepoint.hasPriority?(se(),Se("span",a5)):Me("",!0),U("span",l5,$e(e.chargepoint.name),1),U("span",{class:"badge rounded-pill statusbadge mx-2",style:ot(o.value)},[U("i",{class:Qe([i.value,"me-1"])},null,2),Ke(" "+$e(v.value),1)],4)])]),buttons:Ae(()=>[U("div",u5,[U("span",{class:"badge rounded-pill modebadge mx-2",type:"button",style:ot(a.value),"data-bs-toggle":"modal","data-bs-target":"#cpsconfig-"+e.chargepoint.id},[U("i",{class:Qe(["fa me-1",n.value])},null,2),Ke(" "+$e(d.value),1)],12,c5),U("span",{class:"fa-solid ms-2 fa-lg fa-edit ps-1",type:"button","data-bs-toggle":"modal","data-bs-target":"#cpsconfig-"+e.chargepoint.id},null,8,f5)])]),default:Ae(()=>[U("div",d5,[we(lt,{heading:e.chargepoint.vehicleName,small:!0,class:"grid-left grid-col-4"},{default:Ae(()=>[e.chargepoint.isSocConfigured?(se(),Se("span",h5,[e.chargepoint.soc?(se(),De(sf,{key:0,class:"me-1",soc:e.chargepoint.soc},null,8,["soc"])):Me("",!0),e.chargepoint.isSocConfigured&&e.chargepoint.isSocManual?(se(),Se("i",{key:1,type:"button",class:"fa-solid fa-sm fas fa-edit",style:{color:"var(--color-menu)"},onClick:_[0]||(_[0]=w=>r.value=!r.value)})):Me("",!0),e.chargepoint.isSocConfigured&&!e.chargepoint.isSocManual?(se(),Se("i",{key:2,type:"button",class:Qe(["fa-solid fa-sm me-2",e.chargepoint.waitingForSoc?"fa-spinner fa-spin":"fa-sync"]),style:{color:"var(--color-menu)"},onClick:h},null,2)):Me("",!0)])):Me("",!0)]),_:1},8,["heading"]),we(lt,{heading:"Parameter:",small:!0,class:"grid-col-4"},{default:Ae(()=>[U("div",p5,[U("span",g5,[U("span",null,$e(s.value),1),U("span",m5,[U("span",y5,$e(u.value),1),U("span",null,$e(l.value),1)])]),U("span",null,$e(m.value),1)])]),_:1}),we(lt,{heading:"Geladen:",small:!0,class:"grid-right grid-col-4"},{default:Ae(()=>[U("div",v5,[U("span",b5,$e(c.value),1),U("span",null,$e(f.value),1)])]),_:1})]),r.value?(se(),Se("div",_5,[U("div",w5,[_[2]||(_[2]=U("span",{class:"d-flex m-1 p-0 socEditTitle"},"Ladestand einstellen:",-1)),U("span",S5,[U("span",null,[we(Ot,{id:"manualSoc",modelValue:y.value,"onUpdate:modelValue":_[1]||(_[1]=w=>y.value=w),min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])])]),U("span",{type:"button",class:"fa-solid d-flex fa-lg me-2 mb-3 align-self-end fa-circle-check",onClick:p})])])):Me("",!0)]),_:1},8,["titlecolor"]),(se(),De(Ew,{to:"body"},[(se(),De(gl,{key:e.chargepoint.id,"modal-id":"cpsconfig-"+e.chargepoint.id},{title:Ae(()=>[Ke(" Konfiguration: "+$e(e.chargepoint.name),1)]),default:Ae(()=>[e.chargepoint!=null?(se(),De(Lg,{key:0,chargepoint:e.chargepoint},null,8,["chargepoint"])):Me("",!0)]),_:1},8,["modal-id"]))]))],64))}}),x5=Xe(E5,[["__scopeId","data-v-b5eb106f"]]),T5=We({__name:"CompactList",setup(e){const t=_e(()=>Object.values(Ye));return(r,n)=>(se(),De(mn,{"variable-width":!0},{title:Ae(()=>[...n[0]||(n[0]=[U("span",{class:"fa-solid fa-charging-station"}," ",-1),Ke(" Ladepunkte ",-1)])]),buttons:Ae(()=>[le(mt).active?(se(),De(yn,{key:0,bgcolor:"var(--color-menu)"},{default:Ae(()=>[Ke("Strompreis: "+$e(le(mt).etCurrentPriceString),1)]),_:1})):Me("",!0)]),default:Ae(()=>[(se(!0),Se(Ge,null,it(t.value,(i,o)=>(se(),Se("div",{key:o,class:"subgrid pb-2"},[we(x5,{chargepoint:i},null,8,["chargepoint"])]))),128))]),_:1}))}}),A5=Xe(T5,[["__scopeId","data-v-99d6026a"]]),zd=We({__name:"ChargePointList",props:{id:{},compact:{type:Boolean}},setup(e){let t,r;const n=e,i=_e(()=>{let u=Object.values(Ye);return l(),u}),o=_e(()=>a.value+" "+s.value),a=_e(()=>{switch(Object.values(Ye).length){case 0:return Ce.preferWideBoxes?"col-lg-6":"col-lg-4";case 1:return Ce.preferWideBoxes?"col-lg-6":"col-lg-4";case 2:return Ce.preferWideBoxes?"col-lg-12":"col-lg-8 ";default:return"col-lg-12"}}),s=_e(()=>"swiper-chargepoints-"+n.id);function l(){let u=document.querySelector("."+s.value);if(u&&(r=u,t=r.swiper),t){let c="1";if(Ln.value)switch(Object.values(Ye).length){case 0:case 1:c="1";break;case 2:c="2";break;default:c="3"}r.setAttribute("slides-per-view",c),t.update()}}return Hr(()=>{let u=document.querySelector("."+s.value);u&&(r=u,t=r.swiper),window.addEventListener("resize",l),window.document.addEventListener("visibilitychange",l)}),(u,c)=>(se(),Se(Ge,null,[n.compact?Me("",!0):(se(),Se("swiper-container",{key:0,"space-between":0,"slides-per-view":1,pagination:{clickable:!0},class:Qe(["cplist m-0 p-0 d-flex align-items-stretch",o.value])},[(se(!0),Se(Ge,null,it(i.value,f=>(se(),Se("swiper-slide",{key:f.id},[U("div",{class:Qe([le(Ln)?"mb-0":"mb-5","d-flex align-items-stretch flex-fill"])},[we(V6,{chargepoint:f,"full-width":!0},null,8,["chargepoint"])],2)]))),128))],2)),n.compact?(se(),De(A5,{key:1})):Me("",!0)],64))}}),I5={class:"container-fluid p-0 m-0"},C5={class:"row p-0 m-0"},M5={class:"d-grid gap-2"},k5=["onClick"],P5={class:"col-md-4 p-1"},O5={class:"d-grid gap-2"},L5={key:0},R5={class:"row justify-content-center m-1 p-0"},N5={class:"col-lg-4 p-1 m-0"},$5={class:"d-grid gap-2"},D5={class:"col-lg-4 p-1 m-0"},B5={class:"d-grid gap-2"},F5={class:"col-lg-4 p-1 m-0"},U5={class:"d-grid gap-2"},j5=We({__name:"BBSelect",props:{cpId:{}},setup(e){const t=e,r=[{mode:"instant_charging",name:"Sofort",color:"var(--color-charging)"},{mode:"pv_charging",name:"PV",color:"var(--color-pv)"},{mode:"scheduled_charging",name:"Zielladen",color:"var(--color-battery)"},{mode:"eco_charging",name:"Eco",color:"var(--color-eco)"},{mode:"stop",name:"Stop",color:"var(--color-axis)"}],n=_e(()=>Ye[t.cpId]);function i(u){return u==n.value.chargeMode?"btn btn-success buttonTextSize":"btn btn-secondary buttonTextSize"}function o(u){return wt.pvBatteryPriority==u?"btn-success":"btn-secondary"}function a(u){n.value.chargeMode=u}function s(u){n.value.isLocked=u}function l(u){wt.pvBatteryPriority=u}return(u,c)=>(se(),Se("div",I5,[U("div",C5,[(se(),Se(Ge,null,it(r,(f,d)=>U("div",{key:d,class:"col-md-4 p-1"},[U("div",M5,[U("button",{type:"button",class:Qe(i(f.mode)),style:{},onClick:h=>a(f.mode)},$e(f.name),11,k5)])])),64)),U("div",P5,[U("div",O5,[n.value.isLocked?(se(),Se("button",{key:0,type:"button",class:"btn btn-outline-success buttonTextSize","data-bs-dismiss":"modal",onClick:c[0]||(c[0]=f=>s(!1))}," Entsperren ")):Me("",!0),n.value.isLocked?Me("",!0):(se(),Se("button",{key:1,type:"button",class:"btn btn-outline-danger buttonTextSize","data-bs-dismiss":"modal",onClick:c[1]||(c[1]=f=>s(!0))}," Sperren "))])])]),le(wt).isBatteryConfigured?(se(),Se("div",L5,[c[8]||(c[8]=U("hr",null,null,-1)),c[9]||(c[9]=U("div",{class:"row"},[U("div",{class:"col text-center"},"Vorrang im Lademodus PV-Laden:")],-1)),U("div",R5,[U("div",N5,[U("div",$5,[U("button",{id:"evPriorityBtn",type:"button",class:Qe(["priorityModeBtn btn btn-secondary buttonTextSize",o("ev_mode")]),"data-dismiss":"modal",priority:"1",onClick:c[2]||(c[2]=f=>l("ev_mode"))},[...c[5]||(c[5]=[Ke(" EV ",-1),U("span",{class:"fas fa-car ms-2"}," ",-1)])],2)])]),U("div",D5,[U("div",B5,[U("button",{id:"batteryPriorityBtn",type:"button",class:Qe(["priorityModeBtn btn btn-secondary buttonTextSize",o("bat_mode")]),"data-dismiss":"modal",priority:"0",onClick:c[3]||(c[3]=f=>l("bat_mode"))},[...c[6]||(c[6]=[Ke(" Speicher ",-1),U("span",{class:"fas fa-car-battery ms-2"}," ",-1)])],2)])]),U("div",F5,[U("div",U5,[U("button",{id:"minsocPriorityBtn",type:"button",class:Qe(["priorityModeBtn btn btn-secondary buttonTextSize",o("min_soc_bat_mode")]),"data-dismiss":"modal",priority:"0",onClick:c[4]||(c[4]=f=>l("min_soc_bat_mode"))},[...c[7]||(c[7]=[Ke(" MinSoc ",-1),U("span",{class:"fas fa-battery-half"}," ",-1)])],2)])])])])):Me("",!0)]))}}),V5=Xe(j5,[["__scopeId","data-v-aff76f76"]]),W5={class:"col-lg-4 p-0 m-0 mt-1"},z5={class:"d-grid gap-2"},H5=["data-bs-target"],q5={class:"m-0 p-0 d-flex justify-content-between align-items-center"},G5={class:"mx-1 badge rounded-pill smallTextSize plugIndicator"},Y5={key:0,class:"ms-2"},K5={class:"m-0 p-0"},X5={key:0,class:"ps-1"},Q5=We({__name:"BbChargeButton",props:{chargepoint:{}},setup(e){const t=e,r="chargeSelectModal"+t.chargepoint.id,n=_e(()=>zt[t.chargepoint.chargeMode].name),i=_e(()=>{let c={background:"var(--color-menu)"};return t.chargepoint.isLocked?c.background="var(--color-evu)":t.chargepoint.isCharging?c.background="var(--color-charging)":t.chargepoint.isPluggedIn&&(c.background="var(--color-battery)"),c}),o=_e(()=>{if(zt){let c={background:zt[t.chargepoint.chargeMode].color,color:"white"};switch(t.chargepoint.chargeMode){case $r.instant_charging:t.chargepoint.isCharging&&!t.chargepoint.isLocked&&(c=u(c));break;case $r.stop:c.background="darkgrey",c.color="black";break;case $r.scheduled_charging:t.chargepoint.isPluggedIn&&!t.chargepoint.isCharging&&!t.chargepoint.isLocked&&(c=u(c));break}return c}else return{background:"var(--color-bg)",color:"var(--color-bg)"}}),a=_e(()=>zt?zt[t.chargepoint.chargeMode].icon:""),s=_e(()=>{switch(wt.pvBatteryPriority){case"ev_mode":return"fa-car";case"bat_mode":return"fa-car-battery";case"min_soc_bat_mode":return"fa-battery-half";default:return console.log("default"),""}}),l=_e(()=>{let c="fa-ellipsis";return t.chargepoint.isLocked?c="fa-lock":t.chargepoint.isCharging?c=" fa-bolt":t.chargepoint.isPluggedIn&&(c="fa-plug"),"fa "+c});function u(c){let f=c.color;return c.color=c.background,c.background=f,c}return(c,f)=>(se(),Se("div",W5,[U("div",z5,[U("button",{type:"button",class:"btn mx-1 mb-0 p-1 mediumTextSize chargeButton shadow",style:ot(i.value),"data-bs-toggle":"modal","data-bs-target":"#"+r},[U("div",q5,[U("span",G5,[U("i",{class:Qe(l.value)},null,2),e.chargepoint.isCharging?(se(),Se("span",Y5,$e(le(Fr)(e.chargepoint.power)),1)):Me("",!0)]),U("span",K5,$e(e.chargepoint.name),1),U("span",{class:"mx-2 m-0 badge rounded-pill smallTextSize modeIndicator",style:ot(o.value)},[U("i",{class:Qe(["fa me-1",a.value])},null,2),Ke(" "+$e(n.value)+" ",1),e.chargepoint.chargeMode==le($r).pv_charging&&le(wt).isBatteryConfigured?(se(),Se("span",X5,[f[0]||(f[0]=Ke(" ( ",-1)),U("i",{class:Qe(["fa m-0",s.value])},null,2),f[1]||(f[1]=Ke(") ",-1))])):Me("",!0)],4)])],12,H5)]),we(gl,{"modal-id":r},{title:Ae(()=>[Ke(" Lademodus für "+$e(e.chargepoint.vehicleName),1)]),default:Ae(()=>[we(V5,{"cp-id":e.chargepoint.id},null,8,["cp-id"])]),_:1})]))}}),J5=Xe(Q5,[["__scopeId","data-v-71bb7e5f"]]),Z5={class:"row p-0 mt-0 mb-1 m-0"},eH={class:"col p-0 m-0"},tH={class:"container-fluid p-0 m-0"},rH={class:"row p-0 m-0 d-flex justify-content-center align-items-center"},nH={key:0,class:"col time-display"},iH=We({__name:"ButtonBar",setup(e){return(t,r)=>(se(),Se("div",Z5,[U("div",eH,[U("div",tH,[U("div",rH,[le(Ce).showClock=="buttonbar"?(se(),Se("span",nH,$e(le(ka)(le(Eg))),1)):Me("",!0),(se(!0),Se(Ge,null,it(le(Ye),(n,i)=>(se(),De(J5,{key:i,chargepoint:n,"charge-point-count":Object.values(le(Ye)).length},null,8,["chargepoint","charge-point-count"]))),128))])])])]))}}),oH=Xe(iH,[["__scopeId","data-v-791e4be0"]]),sH={class:"battery-title"},aH={class:"subgrid pt-1"},lH=We({__name:"BLBattery",props:{bat:{}},setup(e){const t=e,r=_e(()=>t.bat.power<0?`Liefert (${Fr(-t.bat.power)})`:t.bat.power>0?`Lädt (${Fr(t.bat.power)})`:"Bereit"),n=_e(()=>t.bat.power<0?"var(--color-pv)":t.bat.power>0?"var(--color-battery)":"var(--color-menu)");return(i,o)=>(se(),De(ro,{titlecolor:"var(--color-title)",fullwidth:!0},{title:Ae(()=>[U("span",sH,$e(e.bat.name),1)]),buttons:Ae(()=>[we(yn,{bgcolor:n.value},{default:Ae(()=>[Ke($e(r.value),1)]),_:1},8,["bgcolor"])]),default:Ae(()=>[U("div",aH,[we(lt,{heading:"Ladestand:",small:!0,class:"grid-left grid-col-4"},{default:Ae(()=>[we(sf,{soc:t.bat.soc},null,8,["soc"])]),_:1}),we(lt,{heading:"Geladen:",small:!0,class:"grid-col-4"},{default:Ae(()=>[we($n,{"watt-h":t.bat.dailyYieldImport},null,8,["watt-h"])]),_:1}),we(lt,{heading:"Geliefert:",small:!0,class:"grid-right grid-col-4"},{default:Ae(()=>[we($n,{"watt-h":t.bat.dailyYieldExport},null,8,["watt-h"])]),_:1})])]),_:1}))}}),uH=Xe(lH,[["__scopeId","data-v-f7f825f7"]]),cH={class:"subgrid grid-12"},fH={key:0,class:"subgrid"},dH=We({__name:"BatteryList",setup(e){const t=_e(()=>Pe.getPower("batOut")>0?`Liefert (${Fr(Pe.getPower("batOut"))})`:Pe.getPower("batIn")>0?`Lädt (${Fr(Pe.getPower("batIn"))})`:"Bereit:"),r=_e(()=>Pe.getPower("batOut")>0?"var(--color-pv)":Pe.getPower("batIn")>0?"var(--color-battery)":"var(--color-menu)"),n=_e(()=>{let i=0;return Pt.value.forEach(o=>{i+=o.dailyYieldImport}),i});return(i,o)=>le(wt).isBatteryConfigured?(se(),De(mn,{key:0,"variable-width":!0,"full-width":!1},{title:Ae(()=>[...o[0]||(o[0]=[U("span",{class:"fas fa-car-battery me-2",style:{color:"var(--color-battery)"}}," ",-1),U("span",null,"Speicher",-1)])]),buttons:Ae(()=>[we(yn,{bgcolor:r.value},{default:Ae(()=>[Ke($e(t.value),1)]),_:1},8,["bgcolor"])]),default:Ae(()=>[U("div",cH,[we(lt,{heading:"Ladestand:",class:"grid-left grid-col-4"},{default:Ae(()=>[we(sf,{color:"var(--color-battery)",soc:le(wt).batterySoc},null,8,["soc"])]),_:1}),we(lt,{heading:"Geladen:",class:"grid-col-4"},{default:Ae(()=>[U("span",null,$e(le(qi)(n.value)),1)]),_:1}),we(lt,{heading:"Geliefert",class:"grid-right grid-col-4"},{default:Ae(()=>[U("span",null,$e(le(qi)(le(Pe).getEnergy("batOut"))),1)]),_:1})]),le(Pt).size>1?(se(),Se("div",fH,[(se(!0),Se(Ge,null,it(le(Pt),([a,s])=>(se(),De(uH,{key:a,bat:s,class:"px-0"},null,8,["bat"]))),128))])):Me("",!0)]),_:1})):Me("",!0)}}),Hd=Xe(dH,[["__scopeId","data-v-7ce7529e"]]),hH={class:"devicename"},pH={class:"subgrid"},gH=We({__name:"SHListItem",props:{device:{}},setup(e){const t=e,r=_e(()=>t.device.status=="on"?"fa-toggle-on fa-xl":t.device.status=="waiting"?"fa-spinner fa-spin":"fa-toggle-off fa-xl"),n=_e(()=>{let s="var(--color-switchRed)";switch(t.device.status){case"on":s="var(--color-switchGreen)";break;case"detection":s="var(--color-switchBlue)";break;case"timeout":s="var(--color-switchWhite)";break;case"waiting":s="var(--color-menu)";break;default:s="var(--color-switchRed)"}return{color:s}});function i(){t.device.isAutomatic||(t.device.status=="on"?Mr("shSwitchOn",0,+t.device.id.slice(2)):Mr("shSwitchOn",1,+t.device.id.slice(2)),Ct.get(t.device.id).status="waiting")}function o(){t.device.isAutomatic?Mr("shSetManual",1,+t.device.id.slice(2)):Mr("shSetManual",0,+t.device.id.slice(2))}const a=_e(()=>t.device.isAutomatic?"Auto":"Man");return(s,l)=>(se(),De(ro,{titlecolor:e.device.color,fullwidth:!0},{title:Ae(()=>[U("span",hH,$e(e.device.name),1)]),buttons:Ae(()=>[(se(!0),Se(Ge,null,it(e.device.temp,(u,c)=>(se(),Se("span",{key:c},[u<300?(se(),De(yn,{key:0,bgcolor:"var(--color-battery)"},{default:Ae(()=>[U("span",null,$e(le(k$)(u)),1)]),_:2},1024)):Me("",!0)]))),128)),t.device.canSwitch?(se(),Se("span",{key:0,class:Qe([r.value,"fa-solid statusbutton mr-2 ms-2"]),style:ot(n.value),onClick:i},null,6)):Me("",!0),t.device.canSwitch?(se(),De(yn,{key:1,type:"button",onClick:o},{default:Ae(()=>[Ke($e(a.value),1)]),_:1})):Me("",!0)]),default:Ae(()=>[U("div",pH,[we(lt,{heading:"Leistung:",small:!0,class:"grid-col-4 grid-left"},{default:Ae(()=>[we(ll,{watt:e.device.power},null,8,["watt"])]),_:1}),we(lt,{heading:"Energie:",small:!0,class:"grid-col-4"},{default:Ae(()=>[we($n,{"watt-h":e.device.now.energy},null,8,["watt-h"])]),_:1}),we(lt,{heading:"Laufzeit:",small:!0,class:"grid-col-4 grid-right"},{default:Ae(()=>[Ke($e(le(C$)(e.device.runningTime)),1)]),_:1})])]),_:1},8,["titlecolor"]))}}),mH=Xe(gH,[["__scopeId","data-v-607c2d1c"]]),yH={class:"sh-title py-4"},vH=["id","onUpdate:modelValue","value"],bH=["for"],_H=3,wH=We({__name:"SmartHomeList",setup(e){const t=_e(()=>Ln.value?r.value.reduce((a,s)=>{const l=a;let u=a[a.length-1];return u.length>=_H?a.push([s]):u.push(s),l},[[]]):[r.value]),r=_e(()=>[...Ct.values()].filter(a=>a.configured));function n(a){return"Geräte"+(Ln.value&&t.value.length>1?"("+(a+1)+")":"")}function i(){o.value=!o.value}const o=et(!1);return(a,s)=>(se(),Se(Ge,null,[(se(!0),Se(Ge,null,it(t.value,(l,u)=>(se(),De(mn,{key:u,"variable-width":!0},{title:Ae(()=>[U("span",{onClick:i},[s[0]||(s[0]=U("span",{class:"fas fa-plug me-2",style:{color:"var(--color-devices)"}}," ",-1)),U("span",yH,$e(n(u)),1)])]),buttons:Ae(()=>[U("span",{class:"ms-2 pt-1",onClick:i},[...s[1]||(s[1]=[U("span",{class:"fa-solid fa-lg ps-1 fa-ellipsis-vertical"},null,-1)])])]),default:Ae(()=>[(se(!0),Se(Ge,null,it(l,c=>(se(),De(mH,{key:c.id,device:c,class:"subgrid pb-2"},null,8,["device"]))),128))]),_:2},1024))),128)),o.value?(se(),De(mn,{key:0},{title:Ae(()=>[U("span",{class:"smarthome",onClick:i},[...s[2]||(s[2]=[U("span",{class:"fas fa-gear"}," ",-1),Ke(" Einstellungen",-1)])])]),buttons:Ae(()=>[U("span",{class:"ms-2 pt-1",onClick:i},[...s[3]||(s[3]=[U("span",{class:"fa-solid fa-lg ps-1 fa-circle-check"},null,-1)])])]),default:Ae(()=>[we(ut,{title:"Im Energie-Graph anzeigen:",icon:"fa-chart-column",fullwidth:!0},{default:Ae(()=>[(se(!0),Se(Ge,null,it(r.value,(l,u)=>(se(),Se("div",{key:u},[wi(U("input",{id:"check"+u,"onUpdate:modelValue":c=>l.showInGraph=c,class:"form-check-input",type:"checkbox",value:l},null,8,vH),[[Oc,l.showInGraph]]),U("label",{class:"form-check-label px-2",for:"check"+u},$e(l.name),9,bH)]))),128))]),_:1}),U("div",{class:"row p-0 m-0",onClick:i},[...s[4]||(s[4]=[U("div",{class:"col-12 mb-3 pe-3 mt-0"},[U("button",{class:"btn btn-sm btn-secondary float-end"},"Schließen")],-1)])])]),_:1})):Me("",!0)],64))}}),qd=Xe(wH,[["__scopeId","data-v-5b5cf6b3"]]),SH={class:"subgrid pt-1"},EH=We({__name:"ClCounter",props:{counter:{}},setup(e){const t=e,r=_e(()=>t.counter.power>0?"Bezug":"Export"),n=_e(()=>t.counter.power>0?"var(--color-evu)":"var(--color-pv)"),i=_e(()=>({color:t.counter.color||"var(--color-evu)"}));return(o,a)=>(se(),De(ro,{titlecolor:"var(--color-title)",fullwidth:!0},{title:Ae(()=>[U("span",{class:"countername",style:ot(i.value)},$e(e.counter.name),5)]),buttons:Ae(()=>[t.counter.power!=0?(se(),De(yn,{key:0,bgcolor:n.value},{default:Ae(()=>[Ke($e(r.value),1)]),_:1},8,["bgcolor"])):Me("",!0),we(yn,{color:"var(--color-bg)"},{default:Ae(()=>[Ke(" ID: "+$e(t.counter.id),1)]),_:1})]),default:Ae(()=>[U("div",SH,[we(lt,{heading:"Leistung:",small:!0,class:"grid-left grid-col-4"},{default:Ae(()=>[we(ll,{watt:Math.abs(t.counter.power)},null,8,["watt"])]),_:1}),we(lt,{heading:"Bezogen:",small:!0,class:"grid-col-4"},{default:Ae(()=>[we($n,{"watt-h":t.counter.energy_imported},null,8,["watt-h"])]),_:1}),we(lt,{heading:"Exportiert:",small:!0,class:"grid-right grid-col-4"},{default:Ae(()=>[we($n,{"watt-h":t.counter.energy_exported},null,8,["watt-h"])]),_:1})])]),_:1}))}}),xH=Xe(EH,[["__scopeId","data-v-a966bcfc"]]),TH={class:"d-flex flex-column"},AH=["id","onUpdate:modelValue","value"],IH=["for"],CH=We({__name:"CounterSettings",setup(e){return(t,r)=>(se(),Se("div",TH,[r[0]||(r[0]=U("span",{class:"settingstitle mb-3"},"Zähler in den Diagrammen anzeigen:",-1)),(se(!0),Se(Ge,null,it(le(ct).values(),(n,i)=>(se(),Se("div",{key:i},[n.grid?Me("",!0):wi((se(),Se("input",{key:0,id:"check"+i,"onUpdate:modelValue":o=>n.showInGraph=o,class:"form-check-input mb-3",type:"checkbox",value:n},null,8,AH)),[[Oc,n.showInGraph]]),n.grid?Me("",!0):(se(),Se("label",{key:1,class:"form-check-label px-2",for:"check"+i},$e(n.name),9,IH))]))),128))]))}}),MH=Xe(CH,[["__scopeId","data-v-70fd4ed2"]]),kH=We({__name:"CounterList",setup(e){const t=et(!1);return(r,n)=>t.value?(se(),De(mn,{key:1,"variable-width":!0},{title:Ae(()=>[...n[4]||(n[4]=[Ke(" Anzeige der Zähler ",-1)])]),buttons:Ae(()=>[U("span",{class:"ms-2 pt-1",onClick:n[1]||(n[1]=i=>t.value=!t.value)},[...n[5]||(n[5]=[U("span",{class:"fa-solid fa-lg ps-1 fa-circle-check"},null,-1)])])]),default:Ae(()=>[we(MH)]),_:1})):(se(),De(mn,{key:0,"variable-width":!0},{title:Ae(()=>[...n[2]||(n[2]=[U("span",{class:"fas fa-bolt me-2",style:{color:"var(--color-evu)"}}," ",-1),U("span",null,"Zähler",-1)])]),buttons:Ae(()=>[U("span",{type:"button",class:"ms-2 ps-1 pt-1",onClick:n[0]||(n[0]=i=>t.value=!t.value)},[...n[3]||(n[3]=[U("span",{class:"fa-solid fa-lg ps-1 fa-ellipsis-vertical"},null,-1)])])]),default:Ae(()=>[(se(!0),Se(Ge,null,it([...le(ct).values()],(i,o)=>(se(),Se("div",{key:o,class:"subgrid pb-2"},[we(xH,{counter:i},null,8,["counter"])]))),128))]),_:1}))}}),Gd=Xe(kH,[["__scopeId","data-v-d42657ec"]]),PH={class:"vehiclename"},OH={class:"subgrid"},LH=We({__name:"VlVehicle",props:{vehicle:{}},setup(e){const t=e,r=_e(()=>{let i="Unterwegs",o=t.vehicle.chargepoint;return o!=null&&(o.isCharging?i="Lädt ("+o.name+")":o.isPluggedIn&&(i="Bereit ("+o.name+")")),i}),n=_e(()=>{let i=t.vehicle.chargepoint;return i!=null?i.isLocked?"var(--color-evu)":i.isCharging?"var(--color-charging)":i.isPluggedIn?"var(--color-battery)":"var(--color-axis)":"var(--color-axis)"});return(i,o)=>(se(),De(ro,{titlecolor:"var(--color-title)",fullwidth:!0},{title:Ae(()=>[U("span",PH,$e(t.vehicle.name),1)]),default:Ae(()=>[U("div",OH,[we(lt,{heading:"Status:",small:!0,class:"grid-left grid-col-4"},{default:Ae(()=>[U("span",{style:ot({color:n.value}),class:"d-flex justify-content-center align-items-center status-string"},$e(r.value),5)]),_:1}),we(lt,{heading:"Ladestand:",small:!0,class:"grid-col-4"},{default:Ae(()=>[Ke($e(Math.round(t.vehicle.soc))+" % ",1)]),_:1}),we(lt,{heading:"Reichweite:",small:!0,class:"grid-right grid-col-4"},{default:Ae(()=>[Ke($e(Math.round(t.vehicle.range))+" km ",1)]),_:1})])]),_:1}))}}),RH=Xe(LH,[["__scopeId","data-v-9e2cb63e"]]),NH=We({__name:"VehicleList",setup(e){return(t,r)=>(se(),De(mn,{"variable-width":!0},{title:Ae(()=>[...r[0]||(r[0]=[U("span",{class:"fas fa-car me-2",style:{color:"var(--color-charging)"}}," ",-1),U("span",null,"Fahrzeuge",-1)])]),default:Ae(()=>[(se(!0),Se(Ge,null,it(Object.values(le(rt)).filter(n=>n.visible),(n,i)=>(se(),Se("div",{key:i,class:"subgrid px-4"},[we(RH,{vehicle:n},null,8,["vehicle"])]))),128))]),_:1}))}}),Yd=Xe(NH,[["__scopeId","data-v-f87a53b0"]]),$H={class:"subtitle"},DH={class:"grapharea"},BH=We({__name:"GlobalPriceChart",props:{id:{}},setup(e){const t=e;return(r,n)=>(se(),De(mn,{"variable-width":!0},{title:Ae(()=>[...n[0]||(n[0]=[U("span",{class:"fas fa-coins me-2",style:{color:"var(--color-battery)"}}," ",-1),U("span",null,"Strompreis",-1)])]),buttons:Ae(()=>[le(mt).active?(se(),De(yn,{key:0,bgcolor:"var(--color-charging)"},{default:Ae(()=>[Ke($e(le(mt).etCurrentPriceString),1)]),_:1})):Me("",!0)]),default:Ae(()=>[U("div",$H,$e(le(mt).etProvider),1),U("div",DH,[we(nT,{id:t.id},null,8,["id"])])]),_:1}))}}),Kd=Xe(BH,[["__scopeId","data-v-02681f2f"]]),FH={class:"subgrid pt-1"},UH=We({__name:"IlInverter",props:{inverter:{}},setup(e){const t=e,r=_e(()=>({color:t.inverter.color}));return(n,i)=>(se(),De(ro,{titlecolor:"var(--color-title)",fullwidth:!0},{title:Ae(()=>[U("span",{class:"invertername",style:ot(r.value)},$e(e.inverter.name),5)]),buttons:Ae(()=>[t.inverter.power<0?(se(),De(yn,{key:0,bgcolor:"var(--color-pv)"},{default:Ae(()=>[Ke($e(le(Fr)(-t.inverter.power)),1)]),_:1})):Me("",!0)]),default:Ae(()=>[U("div",FH,[we(lt,{heading:"Heute:",small:!0,class:"grid-col-4 grid-left"},{default:Ae(()=>[we($n,{"watt-h":t.inverter.now.energy},null,8,["watt-h"])]),_:1}),we(lt,{heading:"Monat:",small:!0,class:"grid-col-4"},{default:Ae(()=>[we($n,{"watt-h":t.inverter.energy_month},null,8,["watt-h"])]),_:1}),we(lt,{heading:"Jahr:",small:!0,class:"grid-right grid-col-4"},{default:Ae(()=>[we($n,{"watt-h":t.inverter.energy_year},null,8,["watt-h"])]),_:1})])]),_:1}))}}),jH=Xe(UH,[["__scopeId","data-v-0bfd46ca"]]),VH=We({__name:"InverterList",setup(e){const t=_e(()=>[...Jt.value.values()].sort((r,n)=>r.id-n.id));return(r,n)=>(se(),De(mn,{"variable-width":!0},{title:Ae(()=>[...n[0]||(n[0]=[U("span",{class:"fas fa-solar-panel me-2",style:{color:"var(--color-pv)"}}," ",-1),U("span",null,"Wechselrichter",-1)])]),buttons:Ae(()=>[le(Pe).getPower("pv")>0?(se(),De(yn,{key:0,bgcolor:"var(--color-pv)"},{default:Ae(()=>[Ke($e(le(Fr)(le(Pe).getPower("pv"))),1)]),_:1})):Me("",!0)]),default:Ae(()=>[(se(!0),Se(Ge,null,it(t.value,i=>(se(),Se("div",{key:i.id,class:"subgrid pb-2"},[we(jH,{inverter:i},null,8,["inverter"])]))),128))]),_:1}))}}),Xd=Xe(VH,[["__scopeId","data-v-d9fe13e6"]]),WH={class:"row py-0 px-0 m-0"},zH=["breakpoints"],HH=We({__name:"CarouselFix",setup(e){let t,r;const n=et(!1),i=_e(()=>n.value?{992:{slidesPerView:1,spaceBetween:0}}:{992:{slidesPerView:3,spaceBetween:0}});return ql(()=>Ce.zoomGraph,o=>{if(t){let a=o?"1":"3";r.setAttribute("slides-per-view",a),t.activeIndex=Ce.zoomedWidget,t.update()}}),Hr(()=>{let o=document.querySelector(".swiper-carousel");o&&(r=o,t=r.swiper)}),(o,a)=>(se(),Se("div",WH,[U("swiper-container",{"space-between":0,pagination:{clickable:!0},"slides-per-view":"1",class:"p-0 m-0 swiper-carousel",breakpoints:i.value},[U("swiper-slide",null,[U("div",{class:Qe([le(Ln)?"mb-0":"mb-5","flex-fill d-flex align-items-stretch"])},[It(o.$slots,"item1",{},void 0,!0)],2)]),U("swiper-slide",null,[U("div",{class:Qe([le(Ln)?"mb-0":"mb-5","flex-fill d-flex align-items-stretch"])},[It(o.$slots,"item2",{},void 0,!0)],2)]),U("swiper-slide",null,[U("div",{class:Qe([le(Ln)?"mb-0":"mb-5","flex-fill d-flex align-items-stretch"])},[It(o.$slots,"item3",{},void 0,!0)],2)])],8,zH)]))}}),qH=Xe(HH,[["__scopeId","data-v-17424929"]]);function GH(e,t){e=="openWB/graph/boolDisplayLiveGraph"?wt.displayLiveGraph=+t==1:e.match(/^openwb\/graph\/alllivevaluesJson[1-9][0-9]*$/i)?YH(e,t):e=="openWB/graph/lastlivevaluesJson"?KH(e,t):e=="openWB/graph/config/duration"&&(Wt.duration=JSON.parse(t))}function YH(e,t){if(!Wt.initialized){let r=[];const n=t.toString().split(` -`);n.length>1?r=n.map(a=>JSON.parse(a)):r=[];const i=e.match(/(\d+)$/g),o=i?i[0]:"";o!=""&&typeof Wt.rawDataPacks[+o-1]>"u"&&(Wt.rawDataPacks[+o-1]=r,Wt.initCounter++)}if(Wt.initCounter==16){const r=[];Wt.unsubscribeRefresh(),Wt.initialized=!0,Wt.rawDataPacks.forEach(n=>{n.forEach(i=>{const o=hT(i);r.push(o)})}),al(r),Wt.subscribeUpdates()}}function KH(e,t){const r=JSON.parse(t),n=hT(r);Wt.graphRefreshCounter++,al(Te.data.concat(n)),Wt.graphRefreshCounter>60&&Wt.activate()}function hT(e){const t=Object.values(Ye).length>0?Object.values(Ye)[0].connectedVehicle:0,r=Object.values(Ye).length>1?Object.values(Ye)[1].connectedVehicle:1,n="ev"+t+"-soc",i="ev"+r+"-soc",o=/cp(\d+)-power/,a=/counter(\d+)-power/,s={};return s.date=+e.timestamp*1e3,+e.grid>0?(s.evuIn=+e.grid,s.evuOut=0):+e.grid<=0?(s.evuIn=0,s.evuOut=-e.grid):(s.evuIn=0,s.evuOut=0),+e["pv-all"]>=0?(s.pv=+e["pv-all"],s.inverter=0):(s.pv=0,s.inverter=-e["pv-all"]),s.house=+e["house-power"],+e["bat-all-power"]>0?(s.batOut=0,s.batIn=+e["bat-all-power"]):+e["bat-all-power"]<0?(s.batOut=-e["bat-all-power"],s.batIn=0):(s.batOut=0,s.batIn=0),e["bat-all-soc"]?s.batSoc=+e["bat-all-soc"]:s.batSoc=0,e[n]&&(s["soc"+t]=+e[n]),e[i]&&(s["soc"+r]=+e[i]),s.charging=+e["charging-all"],Object.keys(e).filter(l=>o.test(l)).forEach(l=>{const u=l.match(o);u&&u[1]&&(s["cp"+u[1]]=+(e[l]??0))}),s.counters=0,Object.keys(e).filter(l=>a.test(l)).forEach(l=>{const u=l.match(a);if(u&&u[1]){const c="ctr"+u[1];ct.get(+u[1])?.showInGraph&&(s[c]=+(e[l]??0),s.counters+=+(e[l]??0))}}),s.selfUsage=s.pv-s.evuOut,s.selfUsage<0&&(s.selfUsage=0),s.devices=0,s}let vc=[];function XH(e,t){const{entries:r,names:n,totals:i}=JSON.parse(t);sn.value=new Map(Object.entries(n)),Qm(),vc=[],Pe.keys().forEach(a=>{Pe.setEnergyPv(a,0),Pe.setEnergyBat(a,0)});const o=QH(r);al(o),Gm(i,vc),Ce.debug&&ZH(r,i,o),Te.graphMode=="today"&&setTimeout(()=>$t.activate(),3e5)}function QH(e){const t=[];let r={};return e.forEach(n=>{r=JH(n);const i=r;t.push(i)}),t}function JH(e){const t={};t.date=e.timestamp*1e3,t.evuOut=0,t.evuIn=0,t.counters=0,Object.entries(e.counter).forEach(([i,o])=>{o.grid?(t.evuOut+=o.power_exported,t.evuIn+=o.power_imported,vc.includes(i)||vc.push(i)):(Pe.keys().includes(i)||Pe.duplicateItem(i,ct.get(+i.slice(7))),Pe.items.get(i)._showInGraph&&(t.counters+=o.power_imported??0,t[i]=o.power_imported??0))}),t.evuOut==0&&t.evuIn==0&&Object.entries(e.counter).forEach(i=>{t.evuOut+=i[1].power_exported,t.evuIn+=i[1].power_imported}),Object.entries(e.pv).forEach(([i,o])=>{i!="all"?t[i]=o.power_exported:t.pv=o.power_exported}),Object.entries(e.bat).length>0?(t.batIn=e.bat.all.power_imported,t.batOut=e.bat.all.power_exported,t.batSoc=e.bat.all.soc??0):(t.batIn=0,t.batOut=0,t.batSoc=0),Object.entries(e.cp).forEach(([i,o])=>{i!="all"?(t[i]=o.power_imported,Pe.keys().includes(i)||Pe.duplicateItem(i,Ye[+i.slice(2)])):t.charging=o.power_imported}),Object.entries(e.ev).forEach(([i,o])=>{i!="all"&&(t["soc"+i.substring(2)]=o.soc)}),t.devices=0;let r=0;const n=1e3/12*(t.pv-t.evuOut)/(t.pv-t.evuOut+t.evuIn+t.batOut);return Object.entries(e.sh).forEach(([i,o])=>{i!="all"&&(t[i]=o.power_imported??0,Pe.keys().includes(i)||Pe.duplicateItem(i,Ct.get(i)),Ct.get(i)?.countAsHouse?r+=o.power_imported:t.devices+=o.power_imported??0),o.power_imported>0&&(Pe.items.get(i)[Te.graphScope].energyPv+=o.power_imported*n,Pe.items.get(i)[Te.graphScope].energyBat+=1e3/12*(o.power_imported*t.batOut)/(t.pv-t.evuOut+t.evuIn+t.batOut)),e.prices.grid>0&&(t.price=e.prices.grid*1e5)}),t.selfUsage=Math.max(0,t.pv-t.evuOut),e.hc&&e.hc.all?t.house=e.hc.all.power_imported-r:t.house=t.evuIn+t.batOut+t.pv-t.evuOut-t.charging-t.devices-t.counters-t.batOut,t}function ZH(e,t,r){console.debug("---------------------------------------- Graph Data -"),console.debug(["--- Incoming graph data:",e]),console.debug(["--- Incoming energy data:",t]),console.debug(["--- Data to be displayed:",r]),console.debug("-----------------------------------------------------")}let Wl={};const pT=["charging","house","batIn","devices"];let Po=[];function eq(e,t){const{entries:r,names:n,totals:i}=JSON.parse(t);sn.value=new Map(Object.entries(n)),Qm(),Po=[],pT.forEach(o=>{Pe.items.get(o).past.energyPv=0,Pe.items.get(o).past.energyBat=0}),r.length>0&&al(gT(r)),Gm(i,Po)}function tq(e,t){const{entries:r,names:n,totals:i}=JSON.parse(t);sn.value=new Map(Object.entries(n)),Qm(),Po=[],pT.forEach(o=>{Pe.items.get(o).past.energyPv=0,Pe.items.get(o).past.energyBat=0}),r.length>0&&al(gT(r)),Gm(i,Po)}function gT(e){const t=[];let r={};return Wl={},e.forEach(n=>{r=rq(n),t.push(r),Object.keys(r).forEach(i=>{i!="date"&&(r[i]<0&&(console.warn(`Negative energy value for ${i} in row ${r.date}. Ignoring the value.`),r[i]=0),Wl[i]?Wl[i]+=r[i]:Wl[i]=r[i])})}),t}function rq(e){const t={},r=B1("%Y%m%d")(e.date);r&&(t.date=Te.graphMode=="month"?r.getDate():r.getMonth()+1),t.evuOut=0,t.evuIn=0;let n=0,i=0;return Object.entries(e.counter).forEach(([o,a])=>{n+=a.energy_exported,i+=a.energy_imported,a.grid&&(t.evuOut+=a.energy_exported,t.evuIn+=a.energy_imported,Po.includes(o)||Po.push(o))}),Po.length==0&&(t.evuOut=n,t.evuIn=i),t.pv=e.pv.all.energy_exported,Object.entries(e.bat).length>0?(e.bat.all.energy_imported>=0?t.batIn=e.bat.all.energy_imported:(console.warn("ignoring negative value for batIn on day "+t.date),t.batIn=0),e.bat.all.energy_exported>=0?t.batOut=e.bat.all.energy_exported:(console.warn("ignoring negative value for batOut on day "+t.date),t.batOut=0)):(t.batIn=0,t.batOut=0),Object.entries(e.cp).forEach(([o,a])=>{if(o!="all"){if(!Pe.keys().includes(o)){const s=Ye[+o.slice(2)]??Co(o,yt.chargepoint,"var(--color-charging)");Pe.duplicateItem(o,s)}t[o]=a.energy_imported}else t.charging=a.energy_imported}),Object.entries(e.ev).forEach(([o,a])=>{o!="all"&&(t["soc-"+o]=a.soc)}),t.devices=Object.entries(e.sh).reduce((o,a)=>(Pe.keys().includes(a[0])||Pe.duplicateItem(a[0],Ct.get(a[0])),a[1].energy_imported>=0?o+=a[1].energy_imported:console.warn(`Negative energy value for device ${a[0]} in row ${t.date}. Ignoring this value`),o),0),t.counters=0,Object.entries(e.counter).forEach(([o,a])=>{a.grid||(t.counters+=a.power_imported??0,t[o]=a.power_imported??0,Pe.keys().includes(o)||(Pe.duplicateItem(o,ct.get(+o.slice(7))),Pe.items.get(o).showInGraph=!0))}),e.hc&&e.hc.all?t.house=e.hc.all.energy_imported:t.house=t.pv+t.evuIn+t.batOut-t.evuOut-t.batIn-t.charging,t.selfUsage=t.pv-t.evuOut,t}function nq(e,t){const r=iq(e);if(r&&!Pt.value.has(r)){console.warn("Invalid battery index: ",r);return}e=="openWB/bat/config/configured"?wt.isBatteryConfigured=t=="true":e=="openWB/bat/get/power"?+t>0?(Pe.setPower("batIn",+t),Pe.setPower("batOut",0)):(Pe.setPower("batIn",0),Pe.setPower("batOut",-t)):e=="openWB/bat/get/soc"?wt.batterySoc=+t:e=="openWB/bat/get/daily_exported"?Pe.setEnergy("batOut",+t):e=="openWB/bat/get/daily_imported"?Pe.setEnergy("batIn",+t):r&&Pt.value.has(r)&&(e.match(/^openwb\/bat\/[0-9]+\/get\/daily_exported$/i)?Pt.value.get(r).dailyYieldExport=+t:e.match(/^openwb\/bat\/[0-9]+\/get\/daily_imported$/i)?Pt.value.get(r).dailyYieldImport=+t:e.match(/^openwb\/bat\/[0-9]+\/get\/exported$/i)?Pt.value.get(r).exported=+t:e.match(/^openwb\/bat\/[0-9]+\/get\/fault_state$/i)?Pt.value.get(r).faultState=+t:e.match(/^openwb\/bat\/[0-9]+\/get\/fault_str$/i)?Pt.value.get(r).faultStr=t:e.match(/^openwb\/bat\/[0-9]+\/get\/imported$/i)?Pt.value.get(r).imported=+t:e.match(/^openwb\/bat\/[0-9]+\/get\/power$/i)?Pt.value.get(r).power=+t:e.match(/^openwb\/bat\/[0-9]+\/get\/soc$/i)&&(Pt.value.get(r).soc=+t))}function iq(e){let t=0;try{const r=e.match(/(?:\/)([0-9]+)(?=\/)/g);return r?(t=+r[0].replace(/[^0-9]+/g,""),t):void 0}catch(r){console.warn("Parser error in getIndex for topic "+e+": "+r)}}function oq(e,t){if(e=="openWB/optional/ep/configured")mt.active=t=="true";else if(e=="openWB/optional/ep/flexible_tariff/provider"){const r=JSON.parse(t);mt.etProvider=r.name,r.configuration&&(r.configuration.country!=null&&(wt.country=r.configuration.country,mt.country=r.configuration.country),r.configuration.unit!=null&&(mt.unit=r.configuration.unit))}else if(e=="openWB/optional/ep/get/prices"){const r=JSON.parse(t),n=new Map;Object.keys(r).forEach(i=>{n.set(new Date(+i*1e3),r[i]*1e5)}),n.size>0&&(mt.etPriceList=n)}}function sq(e,t){const r=mT(e);if(r!=null&&!(r in Ye)){console.warn("Invalid chargepoint id received: "+r);return}if(e=="openWB/chargepoint/get/power"?Pe.setPower("charging",+t):e=="openWB/chargepoint/get/daily_imported"&&Pe.setEnergy("charging",+t),e=="openWB/chargepoint/get/daily_exported")wt.cpDailyExported=+t;else if(r)if(e.match(/^openwb\/chargepoint\/[0-9]+\/config$/i))if(Ye[r]){const n=JSON.parse(t);Ye[r].name=n.name,Ye[r].icon=n.name}else console.warn("invalid chargepoint index: "+r);else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/state_str$/i))Ye[r].stateStr=JSON.parse(t);else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/fault_str$/i))Ye[r].faultStr=JSON.parse(t);else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/fault_state$/i))Ye[r].faultState=+t;else if(e.match(/^openWB\/chargepoint\/[0-9]+\/get\/power$/i))Ye[r].power=+t;else if(e.match(/^openWB\/chargepoint\/[0-9]+\/get\/daily_imported$/i))Ye[r].dailyYield=+t;else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/plug_state$/i))Ye[r].isPluggedIn=t=="true";else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/charge_state$/i))Ye[r].isCharging=t=="true";else if(e.match(/^openwb\/chargepoint\/[0-9]+\/set\/manual_lock$/i))Ye[r].updateIsLocked(t=="true");else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/enabled$/i))Ye[r].isEnabled=t=="1";else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/phases_in_use/i))Ye[r].phasesInUse=+t;else if(e.match(/^openwb\/chargepoint\/[0-9]+\/set\/current/i))Ye[r].current=+t;else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/currents/i))Ye[r].currents=JSON.parse(t);else if(e.match(/^openwb\/chargepoint\/[0-9]+\/set\/log/i)){const n=JSON.parse(t);Ye[r].chargedSincePlugged=n.imported_since_plugged}else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/connected_vehicle\/soc$/i)){const n=JSON.parse(t);Ye[r].soc=n.soc,Ye[r].waitingForSoc=!1,Ye[r].rangeCharged=n.range_charged,Ye[r].rangeUnit=n.range_unit}else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/connected_vehicle\/info$/i)){const n=JSON.parse(t);Ye[r].vehicleName=String(n.name),Ye[r].updateConnectedVehicle(+n.id)}else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/connected_vehicle\/config$/i)){const n=JSON.parse(t);Ye[r].averageConsumption=n.average_consumption}else e.match(/^openwb\/chargepoint\/[0-9]+\/set\/charge_template$/i)&&(Ye[r].chargeTemplate=JSON.parse(t))}function aq(e,t){const r=mT(e);if(r!=null){if(!(r in rt)){const n=new n$(r);rt[r]=n}if(e.match(/^openwb\/vehicle\/[0-9]+\/name$/i))Object.values(Ye).forEach(n=>{n.connectedVehicle==r&&(n.vehicleName=JSON.parse(t))}),rt[r].name=JSON.parse(t);else if(e.match(/^openwb\/vehicle\/[0-9]+\/get\/soc$/i))rt[r].soc=JSON.parse(t);else if(e.match(/^openwb\/vehicle\/[0-9]+\/get\/range$/i))isNaN(+t)?rt[r].range=0:rt[r].range=+t;else if(e.match(/^openwb\/vehicle\/[0-9]+\/charge_template$/i))rt[r].updateChargeTemplateId(+t);else if(e.match(/^openwb\/vehicle\/[0-9]+\/ev_template$/i))rt[r].updateEvTemplateId(+t);else if(e.match(/^openwb\/vehicle\/[0-9]+\/soc_module\/config$/i)){const n=JSON.parse(t);Object.values(Ye).forEach(i=>{i.connectedVehicle==r&&(i.isSocConfigured=n.type!==null,i.isSocManual=n.type=="manual")}),rt[r].isSocConfigured=n.type!==null,rt[r].isSocManual=n.type=="manual"}}}function lq(e,t){if(e.match(/^openwb\/vehicle\/template\/charge_template\/[0-9]+$/i)){const r=e.match(/[0-9]+$/i);if(r){const n=+r[0];qa[n]=JSON.parse(t)}}else if(e.match(/^openwb\/vehicle\/template\/ev_template\/[0-9]+$/i)){const r=e.match(/[0-9]+$/i);if(r){const n=+r[0],i=JSON.parse(t);UE[n]=i}}}function mT(e){let t=0;try{const r=e.match(/(?:\/)([0-9]+)(?=\/)/g);return r?(t=+r[0].replace(/[^0-9]+/g,""),t):void 0}catch(r){console.warn("Parser error in getIndex for topic "+e+": "+r)}}function uq(e,t){e.match(/^openWB\/LegacySmarthome\/config\//i)?cq(e,t):e.match(/^openWB\/LegacySmarthome\/Devices\//i)&&fq(e,t)}function cq(e,t){const r=yT(e);if(r==null)return;Ct.has("sh"+r)||Im("sh"+r);const n=Ct.get("sh"+r);e.match(/^openWB\/LegacySmarthome\/config\/get\/Devices\/[0-9]+\/device_configured$/i)?(n.configured=t!="0",Bg("power"),Bg("energy")):e.match(/^openWB\/LegacySmarthome\/config\/get\/Devices\/[0-9]+\/device_name$/i)?(n.name=t.toString(),n.icon=t.toString()):e.match(/^openWB\/LegacySmarthome\/config\/set\/Devices\/[0-9]+\/mode$/i)?n.isAutomatic=t=="0":e.match(/^openWB\/LegacySmarthome\/config\/get\/Devices\/[0-9]+\/device_canSwitch$/i)?n.canSwitch=t=="1":e.match(/^openWB\/LegacySmarthome\/config\/get\/Devices\/[0-9]+\/device_homeConsumtion$/i)?n.countAsHouse=t=="1":e.match(/^openWB\/LegacySmarthome\/config\/get\/Devices\/[0-9]+\/device_temperatur_configured$/i)&&(n.tempConfigured=+t)}function fq(e,t){const r=yT(e);if(r==null){console.warn("Smarthome: Missing index in "+e);return}Ct.has("sh"+r)||Im("sh"+r);const n=Ct.get("sh"+r);if(e.match(/^openWB\/LegacySmarthome\/Devices\/[0-9]+\/Watt$/i))n.power=+t,Bg("power");else if(!e.match(/^openWB\/LegacySmarthome\/Devices\/[0-9]+\/Wh$/i)){if(e.match(/^openWB\/LegacySmarthome\/Devices\/[0-9]+\/RunningTimeToday$/i))n.runningTime=+t;else if(e.match(/^openWB\/LegacySmarthome\/Devices\/[0-9]+\/TemperatureSensor0$/i))n.temp[0]=+t;else if(e.match(/^openWB\/LegacySmarthome\/Devices\/[0-9]+\/TemperatureSensor1$/i))n.temp[1]=+t;else if(e.match(/^openWB\/LegacySmarthome\/Devices\/[0-9]+\/TemperatureSensor2$/i))n.temp[2]=+t;else if(e.match(/^openWB\/LegacySmartHome\/Devices\/[0-9]+\/Status$/i))switch(+t){case 10:n.status="off";break;case 11:n.status="on";break;case 20:n.status="detection";break;case 30:n.status="timeout";break;default:n.status="off"}}}function Bg(e){switch(e){case"power":Pe.setPower("devices",[...Ct.values()].filter(t=>t.configured&&!t.countAsHouse).reduce((t,r)=>t+r.power,0));break;case"energy":Pe.setEnergy("devices",[...Ct.values()].filter(t=>t.configured&&!t.countAsHouse).reduce((t,r)=>t+r.now.energy,0));break;default:console.error("Unknown category")}}function yT(e){let t=0;try{const r=e.match(/(?:\/)([0-9]+)(?=\/)/g);return r?(t=+r[0].replace(/[^0-9]+/g,""),t):void 0}catch(r){console.warn("Parser error in getIndex for topic "+e+": "+r)}}const bc=Dt([]);let dq=class vT{name;children;count;lastValue;constructor(t,r,n,i){this.name=t,this.children=r,this.count=n,this.lastValue=i}insert(t,r){if(t.length){const n=t.splice(1);if(t[0]==this.name)if(n.length){let i=!1;if(this.children.forEach(o=>{o.name==n[0]&&(o.insert(n,r),i=!0)}),!i){const o=new vT(n[0],[],0,"");o.insert(n,r),this.children.push(o)}}else this.count=this.count+1,this.lastValue=r}}};function hq(e,t){const r=e.split("/");if(r.length){let n=!1;if(bc.forEach(i=>{i.name==r[0]&&(i.insert(r,t),n=!0)}),!n){const i=new dq(r[0],[],0,"");bc.push(i),i.insert(r,t)}}}const pq=["openWB/counter/#","openWB/bat/#","openWB/pv/#","openWB/chargepoint/#","openWB/vehicle/#","openWB/general/chargemode_config/pv_charging/#","openWB/general/web_theme","openWB/optional/ep/#","openWB/system/#","openWB/LegacySmartHome/#","openWB/command/"+Hm()+"/#"];function gq(){e$(mq),pq.forEach(e=>{Io(e)}),Ht()}function mq(e,t){hq(e,t.toString());const r=t.toString();e.match(/^openwb\/counter\/[0-9]+\//i)?yq(e,r):e.match(/^openwb\/counter\//i)?vq(e,r):e.match(/^openwb\/bat\//i)?nq(e,r):e.match(/^openwb\/pv\//i)?bq(e,r):e.match(/^openwb\/chargepoint\//i)?sq(e,r):e.match(/^openwb\/vehicle\/template\//i)?lq(e,r):e.match(/^openwb\/vehicle\//i)?aq(e,r):e.match(/^openwb\/general\/chargemode_config\/pv_charging\//i)?_q(e,r):e.match(/^openwb\/general\/web_theme/i)?wq(e,r):e.match(/^openwb\/graph\//i)?GH(e,r):e.match(/^openwb\/log\/daily\//i)?XH(e,r):e.match(/^openwb\/log\/monthly\//i)?eq(e,r):e.match(/^openwb\/log\/yearly\//i)?tq(e,r):e.match(/^openwb\/optional\/ep\//i)?oq(e,r):e.match(/^openwb\/system\//i)?Eq(e,r):e.match(/^openwb\/LegacySmartHome\//i)?uq(e,r):e.match(/^openwb\/command\//i)&&xq(e,r)}function yq(e,t){const r=_T(e);r!=null&&(r==wt.evuId&&Sq(e,t),ct.has(r)?e.match(/^openWB\/counter\/[0-9]+\/get\/power$/i)?(ct.get(r).power=+t,l$("power")):e.match(/^openWB\/counter\/[0-9]+\/get\/daily_imported$/i)?(ct.get(r).energy_imported=+t,ct.get(r).now.energy=+t):e.match(/^openWB\/counter\/[0-9]+\/get\/daily_exported$/i)&&(ct.get(r).energy_exported=+t):console.warn("Invalid counter index: "+r))}function vq(e,t){if(e.match(/^openwb\/counter\/get\/hierarchy$/i)){const r=JSON.parse(t);r.length&&(o$(),A$(),wt.evuId=r[0].id,bT(r[0]))}else e.match(/^openwb\/counter\/set\/home_consumption$/i)?Pe.setPower("house",+t):e.match(/^openwb\/counter\/set\/daily_yield_home_consumption$/i)&&Pe.setEnergy("house",+t)}function bT(e){switch(e.type){case"counter":a$(e.id,e.type,e.id==wt.evuId),Ce.countersToShow.includes(e.id)&&(ct.get(e.id).showInGraph=!0);break;case"cp":i$(e.id);break;case"bat":HE(e.id);break;case"inverter":E$(e.id);break}e.children.forEach(t=>bT(t))}function bq(e,t){const r=_T(e);r&&!Jt.value.has(r)?console.warn("Invalid PV system index: "+r):e=="openWB/pv/get/power"?Pe.setPower("pv",-t):e=="openWB/pv/get/daily_exported"?Pe.setEnergy("pv",+t):e.match(/^openWB\/pv\/[0-9]+\/get\/power$/i)?Jt.value.get(r).power=+t:e.match(/^openWB\/pv\/[0-9]+\/get\/daily_exported$/i)?Jt.value.get(r).now.energy=+t:e.match(/^openWB\/pv\/[0-9]+\/get\/monthly_exported$/i)?Jt.value.get(r).energy_month=+t:e.match(/^openWB\/pv\/[0-9]+\/get\/yearly_exported$/i)?Jt.value.get(r).energy_year=+t:e.match(/^openWB\/pv\/[0-9]+\/get\/exported$/i)&&(Jt.value.get(r).energy_total=+t)}function _q(e,t){const r=e.split("/");r.length>0&&r[4]==="bat_mode"&&wt.updatePvBatteryPriority(JSON.parse(t))}function wq(e,t){const r=JSON.parse(t).configuration;Ce.setShowRelativeArcs(r.showRelativeArcs),Ce.setDisplayMode(r.displayMode),Ce.setLiveGraphDuration(r.liveGraphDuration),Ce.setShowGrid(r.showGrid),Ce.setSmartHomeColors(r.smartHomeColors),Ce.setDecimalPlaces(r.decimalPlaces),Ce.setShowCounters(r.showCounters),Ce.setShowVehicles(r.showVehicles),Ce.setShowStandardVehicle(r.showStandardVehicle),Ce.setShowPrices(r.showPrices),Ce.setLowerPriceBound(r.lowerPriceBound),Ce.setUpperPriceBound(r.upperPriceBound),Ce.setShowInverters(r.showInverters),Ce.setAlternativeEnergy(r.alternativeEnergy)}function Sq(e,t){switch(e.split("/")[4]){case"power":+t>0?(Pe.setPower("evuIn",+t),Pe.setPower("evuOut",0)):(Pe.setPower("evuIn",0),Pe.setPower("evuOut",-t));break;case"daily_imported":Pe.setEnergy("evuIn",+t);break;case"daily_exported":Pe.setEnergy("evuOut",+t);break}}function Eq(e,t){if(e.match(/^openWB\/system\/device\/[0-9]+\/component\/[0-9]+\/config$/i)){const r=JSON.parse(t);switch(r.type){case"counter":case"consumption_counter":ct.get(r.id)&&(ct.get(r.id).name=r.name,ct.get(r.id).icon=r.name);break;case"inverter":case"inverter_secondary":Jt.value.has(r.id)||Jt.value.set(r.id,new H1(r.id)),Jt.value.get(r.id).name=r.name;break;case"bat":Pt.value.has(r.id)||HE(r.id),Pt.value.get(r.id).name=r.name}}}function xq(e,t){const r=e.split("/");if(e.match(/^openWB\/command\/[a-z]+\/error$/i)&&r[2]==Hm()){const n=JSON.parse(t);console.error(`Error message from openWB: +`;super(n),this.name="AggregateError",this.errors=r}}return Rf={AggregateError:e,ArrayIsArray(t){return Array.isArray(t)},ArrayPrototypeIncludes(t,r){return t.includes(r)},ArrayPrototypeIndexOf(t,r){return t.indexOf(r)},ArrayPrototypeJoin(t,r){return t.join(r)},ArrayPrototypeMap(t,r){return t.map(r)},ArrayPrototypePop(t,r){return t.pop(r)},ArrayPrototypePush(t,r){return t.push(r)},ArrayPrototypeSlice(t,r,n){return t.slice(r,n)},Error,FunctionPrototypeCall(t,r,...n){return t.call(r,...n)},FunctionPrototypeSymbolHasInstance(t,r){return Function.prototype[Symbol.hasInstance].call(t,r)},MathFloor:Math.floor,Number,NumberIsInteger:Number.isInteger,NumberIsNaN:Number.isNaN,NumberMAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER,NumberMIN_SAFE_INTEGER:Number.MIN_SAFE_INTEGER,NumberParseInt:Number.parseInt,ObjectDefineProperties(t,r){return Object.defineProperties(t,r)},ObjectDefineProperty(t,r,n){return Object.defineProperty(t,r,n)},ObjectGetOwnPropertyDescriptor(t,r){return Object.getOwnPropertyDescriptor(t,r)},ObjectKeys(t){return Object.keys(t)},ObjectSetPrototypeOf(t,r){return Object.setPrototypeOf(t,r)},Promise,PromisePrototypeCatch(t,r){return t.catch(r)},PromisePrototypeThen(t,r,n){return t.then(r,n)},PromiseReject(t){return Promise.reject(t)},PromiseResolve(t){return Promise.resolve(t)},ReflectApply:Reflect.apply,RegExpPrototypeTest(t,r){return t.test(r)},SafeSet:Set,String,StringPrototypeSlice(t,r,n){return t.slice(r,n)},StringPrototypeToLowerCase(t){return t.toLowerCase()},StringPrototypeToUpperCase(t){return t.toUpperCase()},StringPrototypeTrim(t){return t.trim()},Symbol,SymbolFor:Symbol.for,SymbolAsyncIterator:Symbol.asyncIterator,SymbolHasInstance:Symbol.hasInstance,SymbolIterator:Symbol.iterator,SymbolDispose:Symbol.dispose||Symbol("Symbol.dispose"),SymbolAsyncDispose:Symbol.asyncDispose||Symbol("Symbol.asyncDispose"),TypedArrayPrototypeSet(t,r,n){return t.set(r,n)},Boolean,Uint8Array},Rf}var Nf={exports:{}},$f,e0;function EE(){return e0||(e0=1,$f={format(e,...t){return e.replace(/%([sdifj])/g,function(...[r,n]){const i=t.shift();return n==="f"?i.toFixed(6):n==="j"?JSON.stringify(i):n==="s"&&typeof i=="object"?`${i.constructor!==Object?i.constructor.name:""} {}`.trim():i.toString()})},inspect(e){switch(typeof e){case"string":if(e.includes("'"))if(e.includes('"')){if(!e.includes("`")&&!e.includes("${"))return`\`${e}\``}else return`"${e}"`;return`'${e}'`;case"number":return isNaN(e)?"NaN":Object.is(e,-0)?String(e):e;case"bigint":return`${String(e)}n`;case"boolean":case"undefined":return String(e);case"object":return"{}"}}}),$f}var Df,t0;function br(){if(t0)return Df;t0=1;const{format:e,inspect:t}=EE(),{AggregateError:r}=Rt(),n=globalThis.AggregateError||r,i=Symbol("kIsNodeError"),o=["string","function","number","object","Function","Object","boolean","bigint","symbol"],a=/^([A-Z][a-z0-9]*)+$/,s="__node_internal_",l={};function u(v,g){if(!v)throw new l.ERR_INTERNAL_ASSERTION(g)}function c(v){let g="",m=v.length;const b=v[0]==="-"?1:0;for(;m>=b+4;m-=3)g=`_${v.slice(m-3,m)}${g}`;return`${v.slice(0,m)}${g}`}function f(v,g,m){if(typeof g=="function")return u(g.length<=m.length,`Code: ${v}; The provided arguments length (${m.length}) does not match the required ones (${g.length}).`),g(...m);const b=(g.match(/%[dfijoOs]/g)||[]).length;return u(b===m.length,`Code: ${v}; The provided arguments length (${m.length}) does not match the required ones (${b}).`),m.length===0?g:e(g,...m)}function d(v,g,m){m||(m=Error);class b extends m{constructor(...w){super(f(v,g,w))}toString(){return`${this.name} [${v}]: ${this.message}`}}Object.defineProperties(b.prototype,{name:{value:m.name,writable:!0,enumerable:!1,configurable:!0},toString:{value(){return`${this.name} [${v}]: ${this.message}`},writable:!0,enumerable:!1,configurable:!0}}),b.prototype.code=v,b.prototype[i]=!0,l[v]=b}function h(v){const g=s+v.name;return Object.defineProperty(v,"name",{value:g}),v}function p(v,g){if(v&&g&&v!==g){if(Array.isArray(g.errors))return g.errors.push(v),g;const m=new n([g,v],g.message);return m.code=g.code,m}return v||g}class y extends Error{constructor(g="The operation was aborted",m=void 0){if(m!==void 0&&typeof m!="object")throw new l.ERR_INVALID_ARG_TYPE("options","Object",m);super(g,m),this.code="ABORT_ERR",this.name="AbortError"}}return d("ERR_ASSERTION","%s",Error),d("ERR_INVALID_ARG_TYPE",(v,g,m)=>{u(typeof v=="string","'name' must be a string"),Array.isArray(g)||(g=[g]);let b="The ";v.endsWith(" argument")?b+=`${v} `:b+=`"${v}" ${v.includes(".")?"property":"argument"} `,b+="must be ";const _=[],w=[],E=[];for(const C of g)u(typeof C=="string","All expected entries have to be of type string"),o.includes(C)?_.push(C.toLowerCase()):a.test(C)?w.push(C):(u(C!=="object",'The value "object" should be written as "Object"'),E.push(C));if(w.length>0){const C=_.indexOf("object");C!==-1&&(_.splice(_,C,1),w.push("Object"))}if(_.length>0){switch(_.length){case 1:b+=`of type ${_[0]}`;break;case 2:b+=`one of type ${_[0]} or ${_[1]}`;break;default:{const C=_.pop();b+=`one of type ${_.join(", ")}, or ${C}`}}(w.length>0||E.length>0)&&(b+=" or ")}if(w.length>0){switch(w.length){case 1:b+=`an instance of ${w[0]}`;break;case 2:b+=`an instance of ${w[0]} or ${w[1]}`;break;default:{const C=w.pop();b+=`an instance of ${w.join(", ")}, or ${C}`}}E.length>0&&(b+=" or ")}switch(E.length){case 0:break;case 1:E[0].toLowerCase()!==E[0]&&(b+="an "),b+=`${E[0]}`;break;case 2:b+=`one of ${E[0]} or ${E[1]}`;break;default:{const C=E.pop();b+=`one of ${E.join(", ")}, or ${C}`}}if(m==null)b+=`. Received ${m}`;else if(typeof m=="function"&&m.name)b+=`. Received function ${m.name}`;else if(typeof m=="object"){var T;if((T=m.constructor)!==null&&T!==void 0&&T.name)b+=`. Received an instance of ${m.constructor.name}`;else{const C=t(m,{depth:-1});b+=`. Received ${C}`}}else{let C=t(m,{colors:!1});C.length>25&&(C=`${C.slice(0,25)}...`),b+=`. Received type ${typeof m} (${C})`}return b},TypeError),d("ERR_INVALID_ARG_VALUE",(v,g,m="is invalid")=>{let b=t(g);return b.length>128&&(b=b.slice(0,128)+"..."),`The ${v.includes(".")?"property":"argument"} '${v}' ${m}. Received ${b}`},TypeError),d("ERR_INVALID_RETURN_VALUE",(v,g,m)=>{var b;const _=m!=null&&(b=m.constructor)!==null&&b!==void 0&&b.name?`instance of ${m.constructor.name}`:`type ${typeof m}`;return`Expected ${v} to be returned from the "${g}" function but got ${_}.`},TypeError),d("ERR_MISSING_ARGS",(...v)=>{u(v.length>0,"At least one arg needs to be specified");let g;const m=v.length;switch(v=(Array.isArray(v)?v:[v]).map(b=>`"${b}"`).join(" or "),m){case 1:g+=`The ${v[0]} argument`;break;case 2:g+=`The ${v[0]} and ${v[1]} arguments`;break;default:{const b=v.pop();g+=`The ${v.join(", ")}, and ${b} arguments`}break}return`${g} must be specified`},TypeError),d("ERR_OUT_OF_RANGE",(v,g,m)=>{u(g,'Missing "range" argument');let b;if(Number.isInteger(m)&&Math.abs(m)>2**32)b=c(String(m));else if(typeof m=="bigint"){b=String(m);const _=BigInt(2)**BigInt(32);(m>_||m<-_)&&(b=c(b)),b+="n"}else b=t(m);return`The value of "${v}" is out of range. It must be ${g}. Received ${b}`},RangeError),d("ERR_MULTIPLE_CALLBACK","Callback called multiple times",Error),d("ERR_METHOD_NOT_IMPLEMENTED","The %s method is not implemented",Error),d("ERR_STREAM_ALREADY_FINISHED","Cannot call %s after a stream was finished",Error),d("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable",Error),d("ERR_STREAM_DESTROYED","Cannot call %s after a stream was destroyed",Error),d("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),d("ERR_STREAM_PREMATURE_CLOSE","Premature close",Error),d("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF",Error),d("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event",Error),d("ERR_STREAM_WRITE_AFTER_END","write after end",Error),d("ERR_UNKNOWN_ENCODING","Unknown encoding: %s",TypeError),Df={AbortError:y,aggregateTwoErrors:h(p),hideStackFrames:h,codes:l},Df}var la={exports:{}},r0;function Ha(){if(r0)return la.exports;r0=1;const{AbortController:e,AbortSignal:t}=typeof self<"u"?self:typeof window<"u"?window:void 0;return la.exports=e,la.exports.AbortSignal=t,la.exports.default=e,la.exports}var kl={exports:{}},n0;function zs(){if(n0)return kl.exports;n0=1;var e=typeof Reflect=="object"?Reflect:null,t=e&&typeof e.apply=="function"?e.apply:function(w,E,T){return Function.prototype.apply.call(w,E,T)},r;e&&typeof e.ownKeys=="function"?r=e.ownKeys:Object.getOwnPropertySymbols?r=function(w){return Object.getOwnPropertyNames(w).concat(Object.getOwnPropertySymbols(w))}:r=function(w){return Object.getOwnPropertyNames(w)};function n(_){console&&console.warn&&console.warn(_)}var i=Number.isNaN||function(w){return w!==w};function o(){o.init.call(this)}kl.exports=o,kl.exports.once=g,o.EventEmitter=o,o.prototype._events=void 0,o.prototype._eventsCount=0,o.prototype._maxListeners=void 0;var a=10;function s(_){if(typeof _!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof _)}Object.defineProperty(o,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(_){if(typeof _!="number"||_<0||i(_))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+_+".");a=_}}),o.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},o.prototype.setMaxListeners=function(w){if(typeof w!="number"||w<0||i(w))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+w+".");return this._maxListeners=w,this};function l(_){return _._maxListeners===void 0?o.defaultMaxListeners:_._maxListeners}o.prototype.getMaxListeners=function(){return l(this)},o.prototype.emit=function(w){for(var E=[],T=1;T0&&(P=E[0]),P instanceof Error)throw P;var N=new Error("Unhandled error."+(P?" ("+P.message+")":""));throw N.context=P,N}var M=j[w];if(M===void 0)return!1;if(typeof M=="function")t(M,this,E);else for(var R=M.length,O=p(M,R),T=0;T0&&P.length>C&&!P.warned){P.warned=!0;var N=new Error("Possible EventEmitter memory leak detected. "+P.length+" "+String(w)+" listeners added. Use emitter.setMaxListeners() to increase limit");N.name="MaxListenersExceededWarning",N.emitter=_,N.type=w,N.count=P.length,n(N)}return _}o.prototype.addListener=function(w,E){return u(this,w,E,!1)},o.prototype.on=o.prototype.addListener,o.prototype.prependListener=function(w,E){return u(this,w,E,!0)};function c(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function f(_,w,E){var T={fired:!1,wrapFn:void 0,target:_,type:w,listener:E},C=c.bind(T);return C.listener=E,T.wrapFn=C,C}o.prototype.once=function(w,E){return s(E),this.on(w,f(this,w,E)),this},o.prototype.prependOnceListener=function(w,E){return s(E),this.prependListener(w,f(this,w,E)),this},o.prototype.removeListener=function(w,E){var T,C,j,P,N;if(s(E),C=this._events,C===void 0)return this;if(T=C[w],T===void 0)return this;if(T===E||T.listener===E)--this._eventsCount===0?this._events=Object.create(null):(delete C[w],C.removeListener&&this.emit("removeListener",w,T.listener||E));else if(typeof T!="function"){for(j=-1,P=T.length-1;P>=0;P--)if(T[P]===E||T[P].listener===E){N=T[P].listener,j=P;break}if(j<0)return this;j===0?T.shift():y(T,j),T.length===1&&(C[w]=T[0]),C.removeListener!==void 0&&this.emit("removeListener",w,N||E)}return this},o.prototype.off=o.prototype.removeListener,o.prototype.removeAllListeners=function(w){var E,T,C;if(T=this._events,T===void 0)return this;if(T.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):T[w]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete T[w]),this;if(arguments.length===0){var j=Object.keys(T),P;for(C=0;C=0;C--)this.removeListener(w,E[C]);return this};function d(_,w,E){var T=_._events;if(T===void 0)return[];var C=T[w];return C===void 0?[]:typeof C=="function"?E?[C.listener||C]:[C]:E?v(C):p(C,C.length)}o.prototype.listeners=function(w){return d(this,w,!0)},o.prototype.rawListeners=function(w){return d(this,w,!1)},o.listenerCount=function(_,w){return typeof _.listenerCount=="function"?_.listenerCount(w):h.call(_,w)},o.prototype.listenerCount=h;function h(_){var w=this._events;if(w!==void 0){var E=w[_];if(typeof E=="function")return 1;if(E!==void 0)return E.length}return 0}o.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]};function p(_,w){for(var E=new Array(w),T=0;T{if(y!==void 0&&(y===null||typeof y!="object"||!("aborted"in y)))throw new i(v,"AbortSignal",y)},p=(y,v)=>{if(typeof y!="function")throw new i(v,"Function",y)};e.exports={AggregateError:a,kEmptyObject:Object.freeze({}),once(y){let v=!1;return function(...g){v||(v=!0,y.apply(this,g))}},createDeferredPromise:function(){let y,v;return{promise:new Promise((m,b)=>{y=m,v=b}),resolve:y,reject:v}},promisify(y){return new Promise((v,g)=>{y((m,...b)=>m?g(m):v(...b))})},debuglog(){return function(){}},format:r,inspect:n,types:{isAsyncFunction(y){return y instanceof c},isArrayBufferView(y){return ArrayBuffer.isView(y)}},isBlob:d,deprecate(y,v){return y},addAbortListener:zs().addAbortListener||function(v,g){if(v===void 0)throw new i("signal","AbortSignal",v);h(v,"signal"),p(g,"listener");let m;return v.aborted?queueMicrotask(()=>g()):(v.addEventListener("abort",g,{__proto__:null,once:!0,[o]:!0}),m=()=>{v.removeEventListener("abort",g)}),{__proto__:null,[s](){var b;(b=m)===null||b===void 0||b()}}},AbortSignalAny:l.any||function(v){if(v.length===1)return v[0];const g=new u,m=()=>g.abort();return v.forEach(b=>{h(b,"signals"),b.addEventListener("abort",m,{once:!0})}),g.signal.addEventListener("abort",()=>{v.forEach(b=>b.removeEventListener("abort",m))},{once:!0}),g.signal}},e.exports.promisify.custom=Symbol.for("nodejs.util.promisify.custom")})(Nf)),Nf.exports}var Pl={},Bf,o0;function sl(){if(o0)return Bf;o0=1;const{ArrayIsArray:e,ArrayPrototypeIncludes:t,ArrayPrototypeJoin:r,ArrayPrototypeMap:n,NumberIsInteger:i,NumberIsNaN:o,NumberMAX_SAFE_INTEGER:a,NumberMIN_SAFE_INTEGER:s,NumberParseInt:l,ObjectPrototypeHasOwnProperty:u,RegExpPrototypeExec:c,String:f,StringPrototypeToUpperCase:d,StringPrototypeTrim:h}=Rt(),{hideStackFrames:p,codes:{ERR_SOCKET_BAD_PORT:y,ERR_INVALID_ARG_TYPE:v,ERR_INVALID_ARG_VALUE:g,ERR_OUT_OF_RANGE:m,ERR_UNKNOWN_SIGNAL:b}}=br(),{normalizeEncoding:_}=Pr(),{isAsyncFunction:w,isArrayBufferView:E}=Pr().types,T={};function C(J){return J===(J|0)}function j(J){return J===J>>>0}const P=/^[0-7]+$/,N="must be a 32-bit unsigned integer or an octal string";function M(J,fe,te){if(typeof J>"u"&&(J=te),typeof J=="string"){if(c(P,J)===null)throw new g(fe,J,N);J=l(J,8)}return G(J,fe),J}const R=p((J,fe,te=s,me=a)=>{if(typeof J!="number")throw new v(fe,"number",J);if(!i(J))throw new m(fe,"an integer",J);if(Jme)throw new m(fe,`>= ${te} && <= ${me}`,J)}),O=p((J,fe,te=-2147483648,me=2147483647)=>{if(typeof J!="number")throw new v(fe,"number",J);if(!i(J))throw new m(fe,"an integer",J);if(Jme)throw new m(fe,`>= ${te} && <= ${me}`,J)}),G=p((J,fe,te=!1)=>{if(typeof J!="number")throw new v(fe,"number",J);if(!i(J))throw new m(fe,"an integer",J);const me=te?1:0,Ee=4294967295;if(JEe)throw new m(fe,`>= ${me} && <= ${Ee}`,J)});function q(J,fe){if(typeof J!="string")throw new v(fe,"string",J)}function z(J,fe,te=void 0,me){if(typeof J!="number")throw new v(fe,"number",J);if(te!=null&&Jme||(te!=null||me!=null)&&o(J))throw new m(fe,`${te!=null?`>= ${te}`:""}${te!=null&&me!=null?" && ":""}${me!=null?`<= ${me}`:""}`,J)}const B=p((J,fe,te)=>{if(!t(te,J)){const Ee="must be one of: "+r(n(te,xe=>typeof xe=="string"?`'${xe}'`:f(xe)),", ");throw new g(fe,J,Ee)}});function ae(J,fe){if(typeof J!="boolean")throw new v(fe,"boolean",J)}function $(J,fe,te){return J==null||!u(J,fe)?te:J[fe]}const ie=p((J,fe,te=null)=>{const me=$(te,"allowArray",!1),Ee=$(te,"allowFunction",!1);if(!$(te,"nullable",!1)&&J===null||!me&&e(J)||typeof J!="object"&&(!Ee||typeof J!="function"))throw new v(fe,"Object",J)}),Z=p((J,fe)=>{if(J!=null&&typeof J!="object"&&typeof J!="function")throw new v(fe,"a dictionary",J)}),ue=p((J,fe,te=0)=>{if(!e(J))throw new v(fe,"Array",J);if(J.length{if(!E(J))throw new v(fe,["Buffer","TypedArray","DataView"],J)});function Y(J,fe){const te=_(fe),me=J.length;if(te==="hex"&&me%2!==0)throw new g("encoding",fe,`is invalid for data of length ${me}`)}function re(J,fe="Port",te=!0){if(typeof J!="number"&&typeof J!="string"||typeof J=="string"&&h(J).length===0||+J!==+J>>>0||J>65535||J===0&&!te)throw new y(fe,J,te);return J|0}const ne=p((J,fe)=>{if(J!==void 0&&(J===null||typeof J!="object"||!("aborted"in J)))throw new v(fe,"AbortSignal",J)}),k=p((J,fe)=>{if(typeof J!="function")throw new v(fe,"Function",J)}),L=p((J,fe)=>{if(typeof J!="function"||w(J))throw new v(fe,"Function",J)}),F=p((J,fe)=>{if(J!==void 0)throw new v(fe,"undefined",J)});function D(J,fe,te){if(!t(te,J))throw new v(fe,`('${r(te,"|")}')`,J)}const H=/^(?:<[^>]*>)(?:\s*;\s*[^;"\s]+(?:=(")?[^;"\s]*\1)?)*$/;function Q(J,fe){if(typeof J>"u"||!c(H,J))throw new g(fe,J,'must be an array or string of format "; rel=preload; as=style"')}function de(J){if(typeof J=="string")return Q(J,"hints"),J;if(e(J)){const fe=J.length;let te="";if(fe===0)return te;for(let me=0;me; rel=preload; as=style"')}return Bf={isInt32:C,isUint32:j,parseFileMode:M,validateArray:ue,validateStringArray:ge,validateBooleanArray:K,validateAbortSignalArray:ee,validateBoolean:ae,validateBuffer:V,validateDictionary:Z,validateEncoding:Y,validateFunction:k,validateInt32:O,validateInteger:R,validateNumber:z,validateObject:ie,validateOneOf:B,validatePlainFunction:L,validatePort:re,validateSignalName:X,validateString:q,validateUint32:G,validateUndefined:F,validateUnion:D,validateAbortSignal:ne,validateLinkHeaderValue:de},Bf}var Ol={exports:{}},Ff={exports:{}},s0;function Ho(){if(s0)return Ff.exports;s0=1;var e=Ff.exports={},t,r;function n(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}(function(){try{typeof setTimeout=="function"?t=setTimeout:t=n}catch{t=n}try{typeof clearTimeout=="function"?r=clearTimeout:r=i}catch{r=i}})();function o(y){if(t===setTimeout)return setTimeout(y,0);if((t===n||!t)&&setTimeout)return t=setTimeout,setTimeout(y,0);try{return t(y,0)}catch{try{return t.call(null,y,0)}catch{return t.call(this,y,0)}}}function a(y){if(r===clearTimeout)return clearTimeout(y);if((r===i||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(y);try{return r(y)}catch{try{return r.call(null,y)}catch{return r.call(this,y)}}}var s=[],l=!1,u,c=-1;function f(){!l||!u||(l=!1,u.length?s=u.concat(s):c=-1,s.length&&d())}function d(){if(!l){var y=o(f);l=!0;for(var v=s.length;v;){for(u=s,s=[];++c1)for(var g=1;g{};function G(B,ae,$){var ie,Z;if(arguments.length===2?($=ae,ae=o):ae==null?ae=o:u(ae,"options"),l($,"callback"),s(ae.signal,"options.signal"),$=a($),g(B)||E(B))return q(B,ae,$);if(!j(B))throw new n("stream",["ReadableStream","WritableStream","Stream"],B);const ue=(ie=ae.readable)!==null&&ie!==void 0?ie:v(B),ge=(Z=ae.writable)!==null&&Z!==void 0?Z:w(B),K=B._writableState,ee=B._readableState,X=()=>{B.writable||re()};let V=P(B)&&v(B)===ue&&w(B)===ge,Y=T(B,!1);const re=()=>{Y=!0,B.destroyed&&(V=!1),!(V&&(!B.readable||ue))&&(!ue||ne)&&$.call(B)};let ne=m(B,!1);const k=()=>{ne=!0,B.destroyed&&(V=!1),!(V&&(!B.writable||ge))&&(!ge||Y)&&$.call(B)},L=J=>{$.call(B,J)};let F=p(B);const D=()=>{F=!0;const J=C(B)||b(B);if(J&&typeof J!="boolean")return $.call(B,J);if(ue&&!ne&&v(B,!0)&&!m(B,!1))return $.call(B,new i);if(ge&&!Y&&!T(B,!1))return $.call(B,new i);$.call(B)},H=()=>{F=!0;const J=C(B)||b(B);if(J&&typeof J!="boolean")return $.call(B,J);$.call(B)},Q=()=>{B.req.on("finish",re)};R(B)?(B.on("complete",re),V||B.on("abort",D),B.req?Q():B.on("request",Q)):ge&&!K&&(B.on("end",X),B.on("close",X)),!V&&typeof B.aborted=="boolean"&&B.on("aborted",D),B.on("end",k),B.on("finish",re),ae.error!==!1&&B.on("error",L),B.on("close",D),F?e.nextTick(D):K!=null&&K.errorEmitted||ee!=null&&ee.errorEmitted?V||e.nextTick(H):(!ue&&(!V||y(B))&&(Y||_(B)===!1)||!ge&&(!V||_(B))&&(ne||y(B)===!1)||ee&&B.req&&B.aborted)&&e.nextTick(H);const de=()=>{$=O,B.removeListener("aborted",D),B.removeListener("complete",re),B.removeListener("abort",D),B.removeListener("request",Q),B.req&&B.req.removeListener("finish",re),B.removeListener("end",X),B.removeListener("close",X),B.removeListener("finish",re),B.removeListener("end",k),B.removeListener("error",L),B.removeListener("close",D)};if(ae.signal&&!F){const J=()=>{const fe=$;de(),fe.call(B,new t(void 0,{cause:ae.signal.reason}))};if(ae.signal.aborted)e.nextTick(J);else{M=M||Pr().addAbortListener;const fe=M(ae.signal,J),te=$;$=a((...me)=>{fe[h](),te.apply(B,me)})}}return de}function q(B,ae,$){let ie=!1,Z=O;if(ae.signal)if(Z=()=>{ie=!0,$.call(B,new t(void 0,{cause:ae.signal.reason}))},ae.signal.aborted)e.nextTick(Z);else{M=M||Pr().addAbortListener;const ge=M(ae.signal,Z),K=$;$=a((...ee)=>{ge[h](),K.apply(B,ee)})}const ue=(...ge)=>{ie||e.nextTick(()=>$.apply(B,ge))};return d(B[N].promise,ue,ue),O}function z(B,ae){var $;let ie=!1;return ae===null&&(ae=o),($=ae)!==null&&$!==void 0&&$.cleanup&&(c(ae.cleanup,"cleanup"),ie=ae.cleanup),new f((Z,ue)=>{const ge=G(B,ae,K=>{ie&&ge(),K?ue(K):Z()})})}return Ol.exports=G,Ol.exports.finished=z,Ol.exports}var jf,u0;function Hs(){if(u0)return jf;u0=1;const e=Ho(),{aggregateTwoErrors:t,codes:{ERR_MULTIPLE_CALLBACK:r},AbortError:n}=br(),{Symbol:i}=Rt(),{kIsDestroyed:o,isDestroyed:a,isFinished:s,isServerRequest:l}=Ai(),u=i("kDestroy"),c=i("kConstruct");function f(P,N,M){P&&(P.stack,N&&!N.errored&&(N.errored=P),M&&!M.errored&&(M.errored=P))}function d(P,N){const M=this._readableState,R=this._writableState,O=R||M;return R!=null&&R.destroyed||M!=null&&M.destroyed?(typeof N=="function"&&N(),this):(f(P,R,M),R&&(R.destroyed=!0),M&&(M.destroyed=!0),O.constructed?h(this,P,N):this.once(u,function(G){h(this,t(G,P),N)}),this)}function h(P,N,M){let R=!1;function O(G){if(R)return;R=!0;const q=P._readableState,z=P._writableState;f(G,z,q),z&&(z.closed=!0),q&&(q.closed=!0),typeof M=="function"&&M(G),G?e.nextTick(p,P,G):e.nextTick(y,P)}try{P._destroy(N||null,O)}catch(G){O(G)}}function p(P,N){v(P,N),y(P)}function y(P){const N=P._readableState,M=P._writableState;M&&(M.closeEmitted=!0),N&&(N.closeEmitted=!0),(M!=null&&M.emitClose||N!=null&&N.emitClose)&&P.emit("close")}function v(P,N){const M=P._readableState,R=P._writableState;R!=null&&R.errorEmitted||M!=null&&M.errorEmitted||(R&&(R.errorEmitted=!0),M&&(M.errorEmitted=!0),P.emit("error",N))}function g(){const P=this._readableState,N=this._writableState;P&&(P.constructed=!0,P.closed=!1,P.closeEmitted=!1,P.destroyed=!1,P.errored=null,P.errorEmitted=!1,P.reading=!1,P.ended=P.readable===!1,P.endEmitted=P.readable===!1),N&&(N.constructed=!0,N.destroyed=!1,N.closed=!1,N.closeEmitted=!1,N.errored=null,N.errorEmitted=!1,N.finalCalled=!1,N.prefinished=!1,N.ended=N.writable===!1,N.ending=N.writable===!1,N.finished=N.writable===!1)}function m(P,N,M){const R=P._readableState,O=P._writableState;if(O!=null&&O.destroyed||R!=null&&R.destroyed)return this;R!=null&&R.autoDestroy||O!=null&&O.autoDestroy?P.destroy(N):N&&(N.stack,O&&!O.errored&&(O.errored=N),R&&!R.errored&&(R.errored=N),M?e.nextTick(v,P,N):v(P,N))}function b(P,N){if(typeof P._construct!="function")return;const M=P._readableState,R=P._writableState;M&&(M.constructed=!1),R&&(R.constructed=!1),P.once(c,N),!(P.listenerCount(c)>1)&&e.nextTick(_,P)}function _(P){let N=!1;function M(R){if(N){m(P,R??new r);return}N=!0;const O=P._readableState,G=P._writableState,q=G||O;O&&(O.constructed=!0),G&&(G.constructed=!0),q.destroyed?P.emit(u,R):R?m(P,R,!0):e.nextTick(w,P)}try{P._construct(R=>{e.nextTick(M,R)})}catch(R){e.nextTick(M,R)}}function w(P){P.emit(c)}function E(P){return P?.setHeader&&typeof P.abort=="function"}function T(P){P.emit("close")}function C(P,N){P.emit("error",N),e.nextTick(T,P)}function j(P,N){!P||a(P)||(!N&&!s(P)&&(N=new n),l(P)?(P.socket=null,P.destroy(N)):E(P)?P.abort():E(P.req)?P.req.abort():typeof P.destroy=="function"?P.destroy(N):typeof P.close=="function"?P.close():N?e.nextTick(C,P,N):e.nextTick(T,P),P.destroyed||(P[o]=!0))}return jf={construct:b,destroyer:j,destroy:d,undestroy:g,errorOrDestroy:m},jf}var Vf,c0;function Vm(){if(c0)return Vf;c0=1;const{ArrayIsArray:e,ObjectSetPrototypeOf:t}=Rt(),{EventEmitter:r}=zs();function n(o){r.call(this,o)}t(n.prototype,r.prototype),t(n,r),n.prototype.pipe=function(o,a){const s=this;function l(y){o.writable&&o.write(y)===!1&&s.pause&&s.pause()}s.on("data",l);function u(){s.readable&&s.resume&&s.resume()}o.on("drain",u),!o._isStdio&&(!a||a.end!==!1)&&(s.on("end",f),s.on("close",d));let c=!1;function f(){c||(c=!0,o.end())}function d(){c||(c=!0,typeof o.destroy=="function"&&o.destroy())}function h(y){p(),r.listenerCount(this,"error")===0&&this.emit("error",y)}i(s,"error",h),i(o,"error",h);function p(){s.removeListener("data",l),o.removeListener("drain",u),s.removeListener("end",f),s.removeListener("close",d),s.removeListener("error",h),o.removeListener("error",h),s.removeListener("end",p),s.removeListener("close",p),o.removeListener("close",p)}return s.on("end",p),s.on("close",p),o.on("close",p),o.emit("pipe",s),o};function i(o,a,s){if(typeof o.prependListener=="function")return o.prependListener(a,s);!o._events||!o._events[a]?o.on(a,s):e(o._events[a])?o._events[a].unshift(s):o._events[a]=[s,o._events[a]]}return Vf={Stream:n,prependListener:i},Vf}var Wf={exports:{}},f0;function Yc(){return f0||(f0=1,(function(e){const{SymbolDispose:t}=Rt(),{AbortError:r,codes:n}=br(),{isNodeStream:i,isWebStream:o,kControllerErrorFunction:a}=Ai(),s=Ji(),{ERR_INVALID_ARG_TYPE:l}=n;let u;const c=(f,d)=>{if(typeof f!="object"||!("aborted"in f))throw new l(d,"AbortSignal",f)};e.exports.addAbortSignal=function(d,h){if(c(d,"signal"),!i(h)&&!o(h))throw new l("stream",["ReadableStream","WritableStream","Stream"],h);return e.exports.addAbortSignalNoValidate(d,h)},e.exports.addAbortSignalNoValidate=function(f,d){if(typeof f!="object"||!("aborted"in f))return d;const h=i(d)?()=>{d.destroy(new r(void 0,{cause:f.reason}))}:()=>{d[a](new r(void 0,{cause:f.reason}))};if(f.aborted)h();else{u=u||Pr().addAbortListener;const p=u(f,h);s(d,p[t])}return d}})(Wf)),Wf.exports}var zf,d0;function sN(){if(d0)return zf;d0=1;const{StringPrototypeSlice:e,SymbolIterator:t,TypedArrayPrototypeSet:r,Uint8Array:n}=Rt(),{Buffer:i}=qr(),{inspect:o}=Pr();return zf=class{constructor(){this.head=null,this.tail=null,this.length=0}push(s){const l={data:s,next:null};this.length>0?this.tail.next=l:this.head=l,this.tail=l,++this.length}unshift(s){const l={data:s,next:this.head};this.length===0&&(this.tail=l),this.head=l,++this.length}shift(){if(this.length===0)return;const s=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,s}clear(){this.head=this.tail=null,this.length=0}join(s){if(this.length===0)return"";let l=this.head,u=""+l.data;for(;(l=l.next)!==null;)u+=s+l.data;return u}concat(s){if(this.length===0)return i.alloc(0);const l=i.allocUnsafe(s>>>0);let u=this.head,c=0;for(;u;)r(l,u.data,c),c+=u.data.length,u=u.next;return l}consume(s,l){const u=this.head.data;if(sf.length)l+=f,s-=f.length;else{s===f.length?(l+=f,++c,u.next?this.head=u.next:this.head=this.tail=null):(l+=e(f,0,s),this.head=u,u.data=e(f,s));break}++c}while((u=u.next)!==null);return this.length-=c,l}_getBuffer(s){const l=i.allocUnsafe(s),u=s;let c=this.head,f=0;do{const d=c.data;if(s>d.length)r(l,d,u-s),s-=d.length;else{s===d.length?(r(l,d,u-s),++f,c.next?this.head=c.next:this.head=this.tail=null):(r(l,new n(d.buffer,d.byteOffset,s),u-s),this.head=c,c.data=d.slice(s));break}++f}while((c=c.next)!==null);return this.length-=f,l}[Symbol.for("nodejs.util.inspect.custom")](s,l){return o(this,{...l,depth:0,customInspect:!1})}},zf}var Hf,h0;function Kc(){if(h0)return Hf;h0=1;const{MathFloor:e,NumberIsInteger:t}=Rt(),{validateInteger:r}=sl(),{ERR_INVALID_ARG_VALUE:n}=br().codes;let i=16*1024,o=16;function a(c,f,d){return c.highWaterMark!=null?c.highWaterMark:f?c[d]:null}function s(c){return c?o:i}function l(c,f){r(f,"value",0),c?o=f:i=f}function u(c,f,d,h){const p=a(f,h,d);if(p!=null){if(!t(p)||p<0){const y=h?`options.${d}`:"options.highWaterMark";throw new n(y,p)}return e(p)}return s(c.objectMode)}return Hf={getHighWaterMark:u,getDefaultHighWaterMark:s,setDefaultHighWaterMark:l},Hf}var qf={},Ll={exports:{}};var p0;function aN(){return p0||(p0=1,(function(e,t){var r=qr(),n=r.Buffer;function i(a,s){for(var l in a)s[l]=a[l]}n.from&&n.alloc&&n.allocUnsafe&&n.allocUnsafeSlow?e.exports=r:(i(r,t),t.Buffer=o);function o(a,s,l){return n(a,s,l)}o.prototype=Object.create(n.prototype),i(n,o),o.from=function(a,s,l){if(typeof a=="number")throw new TypeError("Argument must not be a number");return n(a,s,l)},o.alloc=function(a,s,l){if(typeof a!="number")throw new TypeError("Argument must be a number");var u=n(a);return s!==void 0?typeof l=="string"?u.fill(s,l):u.fill(s):u.fill(0),u},o.allocUnsafe=function(a){if(typeof a!="number")throw new TypeError("Argument must be a number");return n(a)},o.allocUnsafeSlow=function(a){if(typeof a!="number")throw new TypeError("Argument must be a number");return r.SlowBuffer(a)}})(Ll,Ll.exports)),Ll.exports}var g0;function lN(){if(g0)return qf;g0=1;var e=aN().Buffer,t=e.isEncoding||function(g){switch(g=""+g,g&&g.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function r(g){if(!g)return"utf8";for(var m;;)switch(g){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return g;default:if(m)return;g=(""+g).toLowerCase(),m=!0}}function n(g){var m=r(g);if(typeof m!="string"&&(e.isEncoding===t||!t(g)))throw new Error("Unknown encoding: "+g);return m||g}qf.StringDecoder=i;function i(g){this.encoding=n(g);var m;switch(this.encoding){case"utf16le":this.text=f,this.end=d,m=4;break;case"utf8":this.fillLast=l,m=4;break;case"base64":this.text=h,this.end=p,m=3;break;default:this.write=y,this.end=v;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=e.allocUnsafe(m)}i.prototype.write=function(g){if(g.length===0)return"";var m,b;if(this.lastNeed){if(m=this.fillLast(g),m===void 0)return"";b=this.lastNeed,this.lastNeed=0}else b=0;return b>5===6?2:g>>4===14?3:g>>3===30?4:g>>6===2?-1:-2}function a(g,m,b){var _=m.length-1;if(_=0?(w>0&&(g.lastNeed=w-1),w):--_=0?(w>0&&(g.lastNeed=w-2),w):--_=0?(w>0&&(w===2?w=0:g.lastNeed=w-3),w):0))}function s(g,m,b){if((m[0]&192)!==128)return g.lastNeed=0,"�";if(g.lastNeed>1&&m.length>1){if((m[1]&192)!==128)return g.lastNeed=1,"�";if(g.lastNeed>2&&m.length>2&&(m[2]&192)!==128)return g.lastNeed=2,"�"}}function l(g){var m=this.lastTotal-this.lastNeed,b=s(this,g);if(b!==void 0)return b;if(this.lastNeed<=g.length)return g.copy(this.lastChar,m,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);g.copy(this.lastChar,m,0,g.length),this.lastNeed-=g.length}function u(g,m){var b=a(this,g,m);if(!this.lastNeed)return g.toString("utf8",m);this.lastTotal=b;var _=g.length-(b-this.lastNeed);return g.copy(this.lastChar,0,_),g.toString("utf8",m,_)}function c(g){var m=g&&g.length?this.write(g):"";return this.lastNeed?m+"�":m}function f(g,m){if((g.length-m)%2===0){var b=g.toString("utf16le",m);if(b){var _=b.charCodeAt(b.length-1);if(_>=55296&&_<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=g[g.length-2],this.lastChar[1]=g[g.length-1],b.slice(0,-1)}return b}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=g[g.length-1],g.toString("utf16le",m,g.length-1)}function d(g){var m=g&&g.length?this.write(g):"";if(this.lastNeed){var b=this.lastTotal-this.lastNeed;return m+this.lastChar.toString("utf16le",0,b)}return m}function h(g,m){var b=(g.length-m)%3;return b===0?g.toString("base64",m):(this.lastNeed=3-b,this.lastTotal=3,b===1?this.lastChar[0]=g[g.length-1]:(this.lastChar[0]=g[g.length-2],this.lastChar[1]=g[g.length-1]),g.toString("base64",m,g.length-b))}function p(g){var m=g&&g.length?this.write(g):"";return this.lastNeed?m+this.lastChar.toString("base64",0,3-this.lastNeed):m}function y(g){return g.toString(this.encoding)}function v(g){return g&&g.length?this.write(g):""}return qf}var Gf,m0;function xE(){if(m0)return Gf;m0=1;const e=Ho(),{PromisePrototypeThen:t,SymbolAsyncIterator:r,SymbolIterator:n}=Rt(),{Buffer:i}=qr(),{ERR_INVALID_ARG_TYPE:o,ERR_STREAM_NULL_VALUES:a}=br().codes;function s(l,u,c){let f;if(typeof u=="string"||u instanceof i)return new l({objectMode:!0,...c,read(){this.push(u),this.push(null)}});let d;if(u&&u[r])d=!0,f=u[r]();else if(u&&u[n])d=!1,f=u[n]();else throw new o("iterable",["Iterable"],u);const h=new l({objectMode:!0,highWaterMark:1,...c});let p=!1;h._read=function(){p||(p=!0,v())},h._destroy=function(g,m){t(y(g),()=>e.nextTick(m,g),b=>e.nextTick(m,b||g))};async function y(g){const m=g!=null,b=typeof f.throw=="function";if(m&&b){const{value:_,done:w}=await f.throw(g);if(await _,w)return}if(typeof f.return=="function"){const{value:_}=await f.return();await _}}async function v(){for(;;){try{const{value:g,done:m}=d?await f.next():f.next();if(m)h.push(null);else{const b=g&&typeof g.then=="function"?await g:g;if(b===null)throw p=!1,new a;if(h.push(b))continue;p=!1}}catch(g){h.destroy(g)}break}}return h}return Gf=s,Gf}var Yf,y0;function Xc(){if(y0)return Yf;y0=1;const e=Ho(),{ArrayPrototypeIndexOf:t,NumberIsInteger:r,NumberIsNaN:n,NumberParseInt:i,ObjectDefineProperties:o,ObjectKeys:a,ObjectSetPrototypeOf:s,Promise:l,SafeSet:u,SymbolAsyncDispose:c,SymbolAsyncIterator:f,Symbol:d}=Rt();Yf=me,me.ReadableState=te;const{EventEmitter:h}=zs(),{Stream:p,prependListener:y}=Vm(),{Buffer:v}=qr(),{addAbortSignal:g}=Yc(),m=Ji();let b=Pr().debuglog("stream",ye=>{b=ye});const _=sN(),w=Hs(),{getHighWaterMark:E,getDefaultHighWaterMark:T}=Kc(),{aggregateTwoErrors:C,codes:{ERR_INVALID_ARG_TYPE:j,ERR_METHOD_NOT_IMPLEMENTED:P,ERR_OUT_OF_RANGE:N,ERR_STREAM_PUSH_AFTER_EOF:M,ERR_STREAM_UNSHIFT_AFTER_END_EVENT:R},AbortError:O}=br(),{validateObject:G}=sl(),q=d("kPaused"),{StringDecoder:z}=lN(),B=xE();s(me.prototype,p.prototype),s(me,p);const ae=()=>{},{errorOrDestroy:$}=w,ie=1,Z=2,ue=4,ge=8,K=16,ee=32,X=64,V=128,Y=256,re=512,ne=1024,k=2048,L=4096,F=8192,D=16384,H=32768,Q=65536,de=1<<17,J=1<<18;function fe(ye){return{enumerable:!1,get(){return(this.state&ye)!==0},set(be){be?this.state|=ye:this.state&=~ye}}}o(te.prototype,{objectMode:fe(ie),ended:fe(Z),endEmitted:fe(ue),reading:fe(ge),constructed:fe(K),sync:fe(ee),needReadable:fe(X),emittedReadable:fe(V),readableListening:fe(Y),resumeScheduled:fe(re),errorEmitted:fe(ne),emitClose:fe(k),autoDestroy:fe(L),destroyed:fe(F),closed:fe(D),closeEmitted:fe(H),multiAwaitDrain:fe(Q),readingMore:fe(de),dataEmitted:fe(J)});function te(ye,be,oe){typeof oe!="boolean"&&(oe=be instanceof vi()),this.state=k|L|K|ee,ye&&ye.objectMode&&(this.state|=ie),oe&&ye&&ye.readableObjectMode&&(this.state|=ie),this.highWaterMark=ye?E(this,ye,"readableHighWaterMark",oe):T(!1),this.buffer=new _,this.length=0,this.pipes=[],this.flowing=null,this[q]=null,ye&&ye.emitClose===!1&&(this.state&=~k),ye&&ye.autoDestroy===!1&&(this.state&=~L),this.errored=null,this.defaultEncoding=ye&&ye.defaultEncoding||"utf8",this.awaitDrainWriters=null,this.decoder=null,this.encoding=null,ye&&ye.encoding&&(this.decoder=new z(ye.encoding),this.encoding=ye.encoding)}function me(ye){if(!(this instanceof me))return new me(ye);const be=this instanceof vi();this._readableState=new te(ye,this,be),ye&&(typeof ye.read=="function"&&(this._read=ye.read),typeof ye.destroy=="function"&&(this._destroy=ye.destroy),typeof ye.construct=="function"&&(this._construct=ye.construct),ye.signal&&!be&&g(ye.signal,this)),p.call(this,ye),w.construct(this,()=>{this._readableState.needReadable&&ce(this,this._readableState)})}me.prototype.destroy=w.destroy,me.prototype._undestroy=w.undestroy,me.prototype._destroy=function(ye,be){be(ye)},me.prototype[h.captureRejectionSymbol]=function(ye){this.destroy(ye)},me.prototype[c]=function(){let ye;return this.destroyed||(ye=this.readableEnded?null:new O,this.destroy(ye)),new l((be,oe)=>m(this,he=>he&&he!==ye?oe(he):be(null)))},me.prototype.push=function(ye,be){return Ee(this,ye,be,!1)},me.prototype.unshift=function(ye,be){return Ee(this,ye,be,!0)};function Ee(ye,be,oe,he){b("readableAddChunk",be);const ke=ye._readableState;let Ve;if((ke.state&ie)===0&&(typeof be=="string"?(oe=oe||ke.defaultEncoding,ke.encoding!==oe&&(he&&ke.encoding?be=v.from(be,oe).toString(ke.encoding):(be=v.from(be,oe),oe=""))):be instanceof v?oe="":p._isUint8Array(be)?(be=p._uint8ArrayToBuffer(be),oe=""):be!=null&&(Ve=new j("chunk",["string","Buffer","Uint8Array"],be))),Ve)$(ye,Ve);else if(be===null)ke.state&=~ge,S(ye,ke);else if((ke.state&ie)!==0||be&&be.length>0)if(he)if((ke.state&ue)!==0)$(ye,new R);else{if(ke.destroyed||ke.errored)return!1;xe(ye,ke,be,!0)}else if(ke.ended)$(ye,new M);else{if(ke.destroyed||ke.errored)return!1;ke.state&=~ge,ke.decoder&&!oe?(be=ke.decoder.write(be),ke.objectMode||be.length!==0?xe(ye,ke,be,!1):ce(ye,ke)):xe(ye,ke,be,!1)}else he||(ke.state&=~ge,ce(ye,ke));return!ke.ended&&(ke.length0?((be.state&Q)!==0?be.awaitDrainWriters.clear():be.awaitDrainWriters=null,be.dataEmitted=!0,ye.emit("data",oe)):(be.length+=be.objectMode?1:oe.length,he?be.buffer.unshift(oe):be.buffer.push(oe),(be.state&X)!==0&&A(ye)),ce(ye,be)}me.prototype.isPaused=function(){const ye=this._readableState;return ye[q]===!0||ye.flowing===!1},me.prototype.setEncoding=function(ye){const be=new z(ye);this._readableState.decoder=be,this._readableState.encoding=this._readableState.decoder.encoding;const oe=this._readableState.buffer;let he="";for(const ke of oe)he+=be.write(ke);return oe.clear(),he!==""&&oe.push(he),this._readableState.length=he.length,this};const Ne=1073741824;function I(ye){if(ye>Ne)throw new N("size","<= 1GiB",ye);return ye--,ye|=ye>>>1,ye|=ye>>>2,ye|=ye>>>4,ye|=ye>>>8,ye|=ye>>>16,ye++,ye}function x(ye,be){return ye<=0||be.length===0&&be.ended?0:(be.state&ie)!==0?1:n(ye)?be.flowing&&be.length?be.buffer.first().length:be.length:ye<=be.length?ye:be.ended?be.length:0}me.prototype.read=function(ye){b("read",ye),ye===void 0?ye=NaN:r(ye)||(ye=i(ye,10));const be=this._readableState,oe=ye;if(ye>be.highWaterMark&&(be.highWaterMark=I(ye)),ye!==0&&(be.state&=~V),ye===0&&be.needReadable&&((be.highWaterMark!==0?be.length>=be.highWaterMark:be.length>0)||be.ended))return b("read: emitReadable",be.length,be.ended),be.length===0&&be.ended?_r(this):A(this),null;if(ye=x(ye,be),ye===0&&be.ended)return be.length===0&&_r(this),null;let he=(be.state&X)!==0;if(b("need readable",he),(be.length===0||be.length-ye0?ke=Ut(ye,be):ke=null,ke===null?(be.needReadable=be.length<=be.highWaterMark,ye=0):(be.length-=ye,be.multiAwaitDrain?be.awaitDrainWriters.clear():be.awaitDrainWriters=null),be.length===0&&(be.ended||(be.needReadable=!0),oe!==ye&&be.ended&&_r(this)),ke!==null&&!be.errorEmitted&&!be.closeEmitted&&(be.dataEmitted=!0,this.emit("data",ke)),ke};function S(ye,be){if(b("onEofChunk"),!be.ended){if(be.decoder){const oe=be.decoder.end();oe&&oe.length&&(be.buffer.push(oe),be.length+=be.objectMode?1:oe.length)}be.ended=!0,be.sync?A(ye):(be.needReadable=!1,be.emittedReadable=!0,W(ye))}}function A(ye){const be=ye._readableState;b("emitReadable",be.needReadable,be.emittedReadable),be.needReadable=!1,be.emittedReadable||(b("emitReadable",be.flowing),be.emittedReadable=!0,e.nextTick(W,ye))}function W(ye){const be=ye._readableState;b("emitReadable_",be.destroyed,be.length,be.ended),!be.destroyed&&!be.errored&&(be.length||be.ended)&&(ye.emit("readable"),be.emittedReadable=!1),be.needReadable=!be.flowing&&!be.ended&&be.length<=be.highWaterMark,He(ye)}function ce(ye,be){!be.readingMore&&be.constructed&&(be.readingMore=!0,e.nextTick(ve,ye,be))}function ve(ye,be){for(;!be.reading&&!be.ended&&(be.length1&&he.pipes.includes(ye)&&(b("false write response, pause",he.awaitDrainWriters.size),he.awaitDrainWriters.add(ye)),oe.pause()),kt||(kt=pe(oe,ye),ye.on("drain",kt))}oe.on("data",ki);function ki(cr){b("ondata");const Ft=ye.write(cr);b("dest.write",Ft),Ft===!1&&Mi()}function Pi(cr){if(b("onerror",cr),Er(),ye.removeListener("error",Pi),ye.listenerCount("error")===0){const Ft=ye._writableState||ye._readableState;Ft&&!Ft.errorEmitted?$(ye,cr):ye.emit("error",cr)}}y(ye,"error",Pi);function on(){ye.removeListener("finish",Sr),Er()}ye.once("close",on);function Sr(){b("onfinish"),ye.removeListener("close",on),Er()}ye.once("finish",Sr);function Er(){b("unpipe"),oe.unpipe(ye)}return ye.emit("pipe",oe),ye.writableNeedDrain===!0?Mi():he.flowing||(b("pipe resume"),oe.resume()),ye};function pe(ye,be){return function(){const he=ye._readableState;he.awaitDrainWriters===be?(b("pipeOnDrain",1),he.awaitDrainWriters=null):he.multiAwaitDrain&&(b("pipeOnDrain",he.awaitDrainWriters.size),he.awaitDrainWriters.delete(be)),(!he.awaitDrainWriters||he.awaitDrainWriters.size===0)&&ye.listenerCount("data")&&ye.resume()}}me.prototype.unpipe=function(ye){const be=this._readableState,oe={hasUnpiped:!1};if(be.pipes.length===0)return this;if(!ye){const ke=be.pipes;be.pipes=[],this.pause();for(let Ve=0;Ve0,he.flowing!==!1&&this.resume()):ye==="readable"&&!he.endEmitted&&!he.readableListening&&(he.readableListening=he.needReadable=!0,he.flowing=!1,he.emittedReadable=!1,b("on readable",he.length,he.reading),he.length?A(this):he.reading||e.nextTick(Ue,this)),oe},me.prototype.addListener=me.prototype.on,me.prototype.removeListener=function(ye,be){const oe=p.prototype.removeListener.call(this,ye,be);return ye==="readable"&&e.nextTick(Ie,this),oe},me.prototype.off=me.prototype.removeListener,me.prototype.removeAllListeners=function(ye){const be=p.prototype.removeAllListeners.apply(this,arguments);return(ye==="readable"||ye===void 0)&&e.nextTick(Ie,this),be};function Ie(ye){const be=ye._readableState;be.readableListening=ye.listenerCount("readable")>0,be.resumeScheduled&&be[q]===!1?be.flowing=!0:ye.listenerCount("data")>0?ye.resume():be.readableListening||(be.flowing=null)}function Ue(ye){b("readable nexttick read 0"),ye.read(0)}me.prototype.resume=function(){const ye=this._readableState;return ye.flowing||(b("resume"),ye.flowing=!ye.readableListening,je(this,ye)),ye[q]=!1,this};function je(ye,be){be.resumeScheduled||(be.resumeScheduled=!0,e.nextTick(qe,ye,be))}function qe(ye,be){b("resume",be.reading),be.reading||ye.read(0),be.resumeScheduled=!1,ye.emit("resume"),He(ye),be.flowing&&!be.reading&&ye.read(0)}me.prototype.pause=function(){return b("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(b("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState[q]=!0,this};function He(ye){const be=ye._readableState;for(b("flow",be.flowing);be.flowing&&ye.read()!==null;);}me.prototype.wrap=function(ye){let be=!1;ye.on("data",he=>{!this.push(he)&&ye.pause&&(be=!0,ye.pause())}),ye.on("end",()=>{this.push(null)}),ye.on("error",he=>{$(this,he)}),ye.on("close",()=>{this.destroy()}),ye.on("destroy",()=>{this.destroy()}),this._read=()=>{be&&ye.resume&&(be=!1,ye.resume())};const oe=a(ye);for(let he=1;he{ke=ze?C(ke,ze):null,oe(),oe=ae});try{for(;;){const ze=ye.destroyed?null:ye.read();if(ze!==null)yield ze;else{if(ke)throw ke;if(ke===null)return;await new l(he)}}}catch(ze){throw ke=C(ke,ze),ke}finally{(ke||be?.destroyOnReturn!==!1)&&(ke===void 0||ye._readableState.autoDestroy)?w.destroyer(ye,null):(ye.off("readable",he),Ve())}}o(me.prototype,{readable:{__proto__:null,get(){const ye=this._readableState;return!!ye&&ye.readable!==!1&&!ye.destroyed&&!ye.errorEmitted&&!ye.endEmitted},set(ye){this._readableState&&(this._readableState.readable=!!ye)}},readableDidRead:{__proto__:null,enumerable:!1,get:function(){return this._readableState.dataEmitted}},readableAborted:{__proto__:null,enumerable:!1,get:function(){return!!(this._readableState.readable!==!1&&(this._readableState.destroyed||this._readableState.errored)&&!this._readableState.endEmitted)}},readableHighWaterMark:{__proto__:null,enumerable:!1,get:function(){return this._readableState.highWaterMark}},readableBuffer:{__proto__:null,enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}},readableFlowing:{__proto__:null,enumerable:!1,get:function(){return this._readableState.flowing},set:function(ye){this._readableState&&(this._readableState.flowing=ye)}},readableLength:{__proto__:null,enumerable:!1,get(){return this._readableState.length}},readableObjectMode:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.objectMode:!1}},readableEncoding:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.encoding:null}},errored:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.errored:null}},closed:{__proto__:null,get(){return this._readableState?this._readableState.closed:!1}},destroyed:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.destroyed:!1},set(ye){this._readableState&&(this._readableState.destroyed=ye)}},readableEnded:{__proto__:null,enumerable:!1,get(){return this._readableState?this._readableState.endEmitted:!1}}}),o(te.prototype,{pipesCount:{__proto__:null,get(){return this.pipes.length}},paused:{__proto__:null,get(){return this[q]!==!1},set(ye){this[q]=!!ye}}}),me._fromList=Ut;function Ut(ye,be){if(be.length===0)return null;let oe;return be.objectMode?oe=be.buffer.shift():!ye||ye>=be.length?(be.decoder?oe=be.buffer.join(""):be.buffer.length===1?oe=be.buffer.first():oe=be.buffer.concat(be.length),be.buffer.clear()):oe=be.buffer.consume(ye,be.decoder),oe}function _r(ye){const be=ye._readableState;b("endReadable",be.endEmitted),be.endEmitted||(be.ended=!0,e.nextTick(Ci,be,ye))}function Ci(ye,be){if(b("endReadableNT",ye.endEmitted,ye.length),!ye.errored&&!ye.closeEmitted&&!ye.endEmitted&&ye.length===0){if(ye.endEmitted=!0,be.emit("end"),be.writable&&be.allowHalfOpen===!1)e.nextTick(Yr,be);else if(ye.autoDestroy){const oe=be._writableState;(!oe||oe.autoDestroy&&(oe.finished||oe.writable===!1))&&be.destroy()}}}function Yr(ye){ye.writable&&!ye.writableEnded&&!ye.destroyed&&ye.end()}me.from=function(ye,be){return B(me,ye,be)};let Xt;function no(){return Xt===void 0&&(Xt={}),Xt}return me.fromWeb=function(ye,be){return no().newStreamReadableFromReadableStream(ye,be)},me.toWeb=function(ye,be){return no().newReadableStreamFromStreamReadable(ye,be)},me.wrap=function(ye,be){var oe,he;return new me({objectMode:(oe=(he=ye.readableObjectMode)!==null&&he!==void 0?he:ye.objectMode)!==null&&oe!==void 0?oe:!0,...be,destroy(ke,Ve){w.destroyer(ye,ke),Ve(ke)}}).wrap(ye)},Yf}var Kf,v0;function Wm(){if(v0)return Kf;v0=1;const e=Ho(),{ArrayPrototypeSlice:t,Error:r,FunctionPrototypeSymbolHasInstance:n,ObjectDefineProperty:i,ObjectDefineProperties:o,ObjectSetPrototypeOf:a,StringPrototypeToLowerCase:s,Symbol:l,SymbolHasInstance:u}=Rt();Kf=G,G.WritableState=R;const{EventEmitter:c}=zs(),f=Vm().Stream,{Buffer:d}=qr(),h=Hs(),{addAbortSignal:p}=Yc(),{getHighWaterMark:y,getDefaultHighWaterMark:v}=Kc(),{ERR_INVALID_ARG_TYPE:g,ERR_METHOD_NOT_IMPLEMENTED:m,ERR_MULTIPLE_CALLBACK:b,ERR_STREAM_CANNOT_PIPE:_,ERR_STREAM_DESTROYED:w,ERR_STREAM_ALREADY_FINISHED:E,ERR_STREAM_NULL_VALUES:T,ERR_STREAM_WRITE_AFTER_END:C,ERR_UNKNOWN_ENCODING:j}=br().codes,{errorOrDestroy:P}=h;a(G.prototype,f.prototype),a(G,f);function N(){}const M=l("kOnFinished");function R(L,F,D){typeof D!="boolean"&&(D=F instanceof vi()),this.objectMode=!!(L&&L.objectMode),D&&(this.objectMode=this.objectMode||!!(L&&L.writableObjectMode)),this.highWaterMark=L?y(this,L,"writableHighWaterMark",D):v(!1),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;const H=!!(L&&L.decodeStrings===!1);this.decodeStrings=!H,this.defaultEncoding=L&&L.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=$.bind(void 0,F),this.writecb=null,this.writelen=0,this.afterWriteTickInfo=null,O(this),this.pendingcb=0,this.constructed=!0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!L||L.emitClose!==!1,this.autoDestroy=!L||L.autoDestroy!==!1,this.errored=null,this.closed=!1,this.closeEmitted=!1,this[M]=[]}function O(L){L.buffered=[],L.bufferedIndex=0,L.allBuffers=!0,L.allNoop=!0}R.prototype.getBuffer=function(){return t(this.buffered,this.bufferedIndex)},i(R.prototype,"bufferedRequestCount",{__proto__:null,get(){return this.buffered.length-this.bufferedIndex}});function G(L){const F=this instanceof vi();if(!F&&!n(G,this))return new G(L);this._writableState=new R(L,this,F),L&&(typeof L.write=="function"&&(this._write=L.write),typeof L.writev=="function"&&(this._writev=L.writev),typeof L.destroy=="function"&&(this._destroy=L.destroy),typeof L.final=="function"&&(this._final=L.final),typeof L.construct=="function"&&(this._construct=L.construct),L.signal&&p(L.signal,this)),f.call(this,L),h.construct(this,()=>{const D=this._writableState;D.writing||ge(this,D),V(this,D)})}i(G,u,{__proto__:null,value:function(L){return n(this,L)?!0:this!==G?!1:L&&L._writableState instanceof R}}),G.prototype.pipe=function(){P(this,new _)};function q(L,F,D,H){const Q=L._writableState;if(typeof D=="function")H=D,D=Q.defaultEncoding;else{if(!D)D=Q.defaultEncoding;else if(D!=="buffer"&&!d.isEncoding(D))throw new j(D);typeof H!="function"&&(H=N)}if(F===null)throw new T;if(!Q.objectMode)if(typeof F=="string")Q.decodeStrings!==!1&&(F=d.from(F,D),D="buffer");else if(F instanceof d)D="buffer";else if(f._isUint8Array(F))F=f._uint8ArrayToBuffer(F),D="buffer";else throw new g("chunk",["string","Buffer","Uint8Array"],F);let de;return Q.ending?de=new C:Q.destroyed&&(de=new w("write")),de?(e.nextTick(H,de),P(L,de,!0),de):(Q.pendingcb++,z(L,Q,F,D,H))}G.prototype.write=function(L,F,D){return q(this,L,F,D)===!0},G.prototype.cork=function(){this._writableState.corked++},G.prototype.uncork=function(){const L=this._writableState;L.corked&&(L.corked--,L.writing||ge(this,L))},G.prototype.setDefaultEncoding=function(F){if(typeof F=="string"&&(F=s(F)),!d.isEncoding(F))throw new j(F);return this._writableState.defaultEncoding=F,this};function z(L,F,D,H,Q){const de=F.objectMode?1:D.length;F.length+=de;const J=F.lengthD.bufferedIndex&&ge(L,D),H?D.afterWriteTickInfo!==null&&D.afterWriteTickInfo.cb===Q?D.afterWriteTickInfo.count++:(D.afterWriteTickInfo={count:1,cb:Q,stream:L,state:D},e.nextTick(ie,D.afterWriteTickInfo)):Z(L,D,1,Q))}function ie({stream:L,state:F,count:D,cb:H}){return F.afterWriteTickInfo=null,Z(L,F,D,H)}function Z(L,F,D,H){for(!F.ending&&!L.destroyed&&F.length===0&&F.needDrain&&(F.needDrain=!1,L.emit("drain"));D-- >0;)F.pendingcb--,H();F.destroyed&&ue(F),V(L,F)}function ue(L){if(L.writing)return;for(let Q=L.bufferedIndex;Q1&&L._writev){F.pendingcb-=de-1;const fe=F.allNoop?N:me=>{for(let Ee=J;Ee256?(D.splice(0,J),F.bufferedIndex=0):F.bufferedIndex=J}F.bufferProcessing=!1}G.prototype._write=function(L,F,D){if(this._writev)this._writev([{chunk:L,encoding:F}],D);else throw new m("_write()")},G.prototype._writev=null,G.prototype.end=function(L,F,D){const H=this._writableState;typeof L=="function"?(D=L,L=null,F=null):typeof F=="function"&&(D=F,F=null);let Q;if(L!=null){const de=q(this,L,F);de instanceof r&&(Q=de)}return H.corked&&(H.corked=1,this.uncork()),Q||(!H.errored&&!H.ending?(H.ending=!0,V(this,H,!0),H.ended=!0):H.finished?Q=new E("end"):H.destroyed&&(Q=new w("end"))),typeof D=="function"&&(Q||H.finished?e.nextTick(D,Q):H[M].push(D)),this};function K(L){return L.ending&&!L.destroyed&&L.constructed&&L.length===0&&!L.errored&&L.buffered.length===0&&!L.finished&&!L.writing&&!L.errorEmitted&&!L.closeEmitted}function ee(L,F){let D=!1;function H(Q){if(D){P(L,Q??b());return}if(D=!0,F.pendingcb--,Q){const de=F[M].splice(0);for(let J=0;J{K(Q)?Y(H,Q):Q.pendingcb--},L,F)):K(F)&&(F.pendingcb++,Y(L,F))))}function Y(L,F){F.pendingcb--,F.finished=!0;const D=F[M].splice(0);for(let H=0;H{if(ue!=null)throw new p("nully","body",ue)},ue=>{y(ie,ue)});return ie=new j({objectMode:!0,readable:!1,write:z,final(ue){B(async()=>{try{await Z,e.nextTick(ue,null)}catch(ge){e.nextTick(ue,ge)}})},destroy:ae})}throw new p("Iterable, AsyncIterable or AsyncFunction",O,q)}if(E(R))return M(R.arrayBuffer());if(i(R))return _(j,R,{objectMode:!0,writable:!1});if(u(R?.readable)&&c(R?.writable))return j.fromWeb(R);if(typeof R?.writable=="object"||typeof R?.readable=="object"){const q=R!=null&&R.readable?a(R?.readable)?R?.readable:M(R.readable):void 0,z=R!=null&&R.writable?s(R?.writable)?R?.writable:M(R.writable):void 0;return N({readable:q,writable:z})}const G=R?.then;if(typeof G=="function"){let q;return C(G,R,z=>{z!=null&&q.push(z),q.push(null)},z=>{y(q,z)}),q=new j({objectMode:!0,writable:!1,read(){}})}throw new h(O,["Blob","ReadableStream","WritableStream","Stream","Iterable","AsyncIterable","Function","{ readable, writable } pair","Promise"],R)};function P(M){let{promise:R,resolve:O}=b();const G=new T,q=G.signal;return{value:M((async function*(){for(;;){const B=R;R=null;const{chunk:ae,done:$,cb:ie}=await B;if(e.nextTick(ie),$)return;if(q.aborted)throw new d(void 0,{cause:q.reason});({promise:R,resolve:O}=b()),yield ae}})(),{signal:q}),write(B,ae,$){const ie=O;O=null,ie({chunk:B,done:!1,cb:$})},final(B){const ae=O;O=null,ae({done:!0,cb:B})},destroy(B,ae){G.abort(),ae(B)}}}function N(M){const R=M.readable&&typeof M.readable.read!="function"?g.wrap(M.readable):M.readable,O=M.writable;let G=!!r(R),q=!!n(O),z,B,ae,$,ie;function Z(ue){const ge=$;$=null,ge?ge(ue):ue&&ie.destroy(ue)}return ie=new j({readableObjectMode:!!(R!=null&&R.readableObjectMode),writableObjectMode:!!(O!=null&&O.writableObjectMode),readable:G,writable:q}),q&&(f(O,ue=>{q=!1,ue&&y(R,ue),Z(ue)}),ie._write=function(ue,ge,K){O.write(ue,ge)?K():z=K},ie._final=function(ue){O.end(),B=ue},O.on("drain",function(){if(z){const ue=z;z=null,ue()}}),O.on("finish",function(){if(B){const ue=B;B=null,ue()}})),G&&(f(R,ue=>{G=!1,ue&&y(R,ue),Z(ue)}),R.on("readable",function(){if(ae){const ue=ae;ae=null,ue()}}),R.on("end",function(){ie.push(null)}),ie._read=function(){for(;;){const ue=R.read();if(ue===null){ae=ie._read;return}if(!ie.push(ue))return}}),ie._destroy=function(ue,ge){!ue&&$!==null&&(ue=new d),ae=null,z=null,B=null,$===null?ge(ue):($=ge,y(O,ue),y(R,ue))},ie}return Xf}var Qf,_0;function vi(){if(_0)return Qf;_0=1;const{ObjectDefineProperties:e,ObjectGetOwnPropertyDescriptor:t,ObjectKeys:r,ObjectSetPrototypeOf:n}=Rt();Qf=a;const i=Xc(),o=Wm();n(a.prototype,i.prototype),n(a,i);{const c=r(o.prototype);for(let f=0;f{if(c){u?u(c):this.destroy(c);return}f!=null&&this.push(f),this.push(null),u&&u()}):(this.push(null),u&&u())}function l(){this._final!==s&&s.call(this)}return a.prototype._final=s,a.prototype._transform=function(u,c,f){throw new r("_transform()")},a.prototype._write=function(u,c,f){const d=this._readableState,h=this._writableState,p=d.length;this._transform(u,c,(y,v)=>{if(y){f(y);return}v!=null&&this.push(v),h.ended||p===d.length||d.length{ee=!0});const X=o(ue,{readable:ge,writable:K},V=>{ee=!V});return{destroy:V=>{ee||(ee=!0,s.destroyer(ue,V||new h("pipe")))},cleanup:X}}function G(ue){return v(ue[ue.length-1],"streams[stream.length - 1]"),ue.pop()}function q(ue){if(m(ue))return ue;if(_(ue))return z(ue);throw new c("val",["Readable","Iterable","AsyncIterable"],ue)}async function*z(ue){M||(M=Xc()),yield*M.prototype[n].call(ue)}async function B(ue,ge,K,{end:ee}){let X,V=null;const Y=k=>{if(k&&(X=k),V){const L=V;V=null,L()}},re=()=>new r((k,L)=>{X?L(X):V=()=>{X?L(X):k()}});ge.on("drain",Y);const ne=o(ge,{readable:!1},Y);try{ge.writableNeedDrain&&await re();for await(const k of ue)ge.write(k)||await re();ee&&(ge.end(),await re()),K()}catch(k){K(X!==k?u(X,k):k)}finally{ne(),ge.off("drain",Y)}}async function ae(ue,ge,K,{end:ee}){E(ge)&&(ge=ge.writable);const X=ge.getWriter();try{for await(const V of ue)await X.ready,X.write(V).catch(()=>{});await X.ready,ee&&await X.close(),K()}catch(V){try{await X.abort(V),K(V)}catch(Y){K(Y)}}}function $(...ue){return ie(ue,a(G(ue)))}function ie(ue,ge,K){if(ue.length===1&&t(ue[0])&&(ue=ue[0]),ue.length<2)throw new d("streams");const ee=new P,X=ee.signal,V=K?.signal,Y=[];g(V,"options.signal");function re(){Q(new y)}R=R||Pr().addAbortListener;let ne;V&&(ne=R(V,re));let k,L;const F=[];let D=0;function H(me){Q(me,--D===0)}function Q(me,Ee){var xe;if(me&&(!k||k.code==="ERR_STREAM_PREMATURE_CLOSE")&&(k=me),!(!k&&!Ee)){for(;F.length;)F.shift()(k);(xe=ne)===null||xe===void 0||xe[i](),ee.abort(),Ee&&(k||Y.forEach(Ne=>Ne()),e.nextTick(ge,k,L))}}let de;for(let me=0;me0,I=xe||K?.end!==!1,x=me===ue.length-1;if(w(Ee)){let S=function(A){A&&A.name!=="AbortError"&&A.code!=="ERR_STREAM_PREMATURE_CLOSE"&&H(A)};var te=S;if(I){const{destroy:A,cleanup:W}=O(Ee,xe,Ne);F.push(A),b(Ee)&&x&&Y.push(W)}Ee.on("error",S),b(Ee)&&x&&Y.push(()=>{Ee.removeListener("error",S)})}if(me===0)if(typeof Ee=="function"){if(de=Ee({signal:X}),!m(de))throw new f("Iterable, AsyncIterable or Stream","source",de)}else m(Ee)||_(Ee)||E(Ee)?de=Ee:de=l.from(Ee);else if(typeof Ee=="function"){if(E(de)){var J;de=q((J=de)===null||J===void 0?void 0:J.readable)}else de=q(de);if(de=Ee(de,{signal:X}),xe){if(!m(de,!0))throw new f("AsyncIterable",`transform[${me-1}]`,de)}else{var fe;N||(N=AE());const S=new N({objectMode:!0}),A=(fe=de)===null||fe===void 0?void 0:fe.then;if(typeof A=="function")D++,A.call(de,ve=>{L=ve,ve!=null&&S.write(ve),I&&S.end(),e.nextTick(H)},ve=>{S.destroy(ve),e.nextTick(H,ve)});else if(m(de,!0))D++,B(de,S,H,{end:I});else if(C(de)||E(de)){const ve=de.readable||de;D++,B(ve,S,H,{end:I})}else throw new f("AsyncIterable or Promise","destination",de);de=S;const{destroy:W,cleanup:ce}=O(de,!1,!0);F.push(W),x&&Y.push(ce)}}else if(w(Ee)){if(_(de)){D+=2;const S=Z(de,Ee,H,{end:I});b(Ee)&&x&&Y.push(S)}else if(E(de)||C(de)){const S=de.readable||de;D++,B(S,Ee,H,{end:I})}else if(m(de))D++,B(de,Ee,H,{end:I});else throw new c("val",["Readable","Iterable","AsyncIterable","ReadableStream","TransformStream"],de);de=Ee}else if(T(Ee)){if(_(de))D++,ae(q(de),Ee,H,{end:I});else if(C(de)||m(de))D++,ae(de,Ee,H,{end:I});else if(E(de))D++,ae(de.readable,Ee,H,{end:I});else throw new c("val",["Readable","Iterable","AsyncIterable","ReadableStream","TransformStream"],de);de=Ee}else de=l.from(Ee)}return(X!=null&&X.aborted||V!=null&&V.aborted)&&e.nextTick(re),de}function Z(ue,ge,K,{end:ee}){let X=!1;if(ge.on("close",()=>{X||K(new p)}),ue.pipe(ge,{end:!1}),ee){let Y=function(){X=!0,ge.end()};var V=Y;j(ue)?e.nextTick(Y):ue.once("end",Y)}else K();return o(ue,{readable:!0,writable:!1},Y=>{const re=ue._readableState;Y&&Y.code==="ERR_STREAM_PREMATURE_CLOSE"&&re&&re.ended&&!re.errored&&!re.errorEmitted?ue.once("end",K).once("error",K):K(Y)}),o(ge,{readable:!1,writable:!0},K)}return ed={pipelineImpl:ie,pipeline:$},ed}var td,x0;function IE(){if(x0)return td;x0=1;const{pipeline:e}=zm(),t=vi(),{destroyer:r}=Hs(),{isNodeStream:n,isReadable:i,isWritable:o,isWebStream:a,isTransformStream:s,isWritableStream:l,isReadableStream:u}=Ai(),{AbortError:c,codes:{ERR_INVALID_ARG_VALUE:f,ERR_MISSING_ARGS:d}}=br(),h=Ji();return td=function(...y){if(y.length===0)throw new d("streams");if(y.length===1)return t.from(y[0]);const v=[...y];if(typeof y[0]=="function"&&(y[0]=t.from(y[0])),typeof y[y.length-1]=="function"){const N=y.length-1;y[N]=t.from(y[N])}for(let N=0;N0&&!(o(y[N])||l(y[N])||s(y[N])))throw new f(`streams[${N}]`,v[N],"must be writable")}let g,m,b,_,w;function E(N){const M=_;_=null,M?M(N):N?w.destroy(N):!P&&!j&&w.destroy()}const T=y[0],C=e(y,E),j=!!(o(T)||l(T)||s(T)),P=!!(i(C)||u(C)||s(C));if(w=new t({writableObjectMode:!!(T!=null&&T.writableObjectMode),readableObjectMode:!!(C!=null&&C.readableObjectMode),writable:j,readable:P}),j){if(n(T))w._write=function(M,R,O){T.write(M,R)?O():g=O},w._final=function(M){T.end(),m=M},T.on("drain",function(){if(g){const M=g;g=null,M()}});else if(a(T)){const R=(s(T)?T.writable:T).getWriter();w._write=async function(O,G,q){try{await R.ready,R.write(O).catch(()=>{}),q()}catch(z){q(z)}},w._final=async function(O){try{await R.ready,R.close().catch(()=>{}),m=O}catch(G){O(G)}}}const N=s(C)?C.readable:C;h(N,()=>{if(m){const M=m;m=null,M()}})}if(P){if(n(C))C.on("readable",function(){if(b){const N=b;b=null,N()}}),C.on("end",function(){w.push(null)}),w._read=function(){for(;;){const N=C.read();if(N===null){b=w._read;return}if(!w.push(N))return}};else if(a(C)){const M=(s(C)?C.readable:C).getReader();w._read=async function(){for(;;)try{const{value:R,done:O}=await M.read();if(!w.push(R))return;if(O){w.push(null);return}}catch{return}}}}return w._destroy=function(N,M){!N&&_!==null&&(N=new c),b=null,g=null,m=null,_===null?M(N):(_=M,n(C)&&r(C,N))},w},td}var T0;function cN(){if(T0)return Pl;T0=1;const e=globalThis.AbortController||Ha().AbortController,{codes:{ERR_INVALID_ARG_VALUE:t,ERR_INVALID_ARG_TYPE:r,ERR_MISSING_ARGS:n,ERR_OUT_OF_RANGE:i},AbortError:o}=br(),{validateAbortSignal:a,validateInteger:s,validateObject:l}=sl(),u=Rt().Symbol("kWeak"),c=Rt().Symbol("kResistStopPropagation"),{finished:f}=Ji(),d=IE(),{addAbortSignalNoValidate:h}=Yc(),{isWritable:p,isNodeStream:y}=Ai(),{deprecate:v}=Pr(),{ArrayPrototypePush:g,Boolean:m,MathFloor:b,Number:_,NumberIsNaN:w,Promise:E,PromiseReject:T,PromiseResolve:C,PromisePrototypeThen:j,Symbol:P}=Rt(),N=P("kEmpty"),M=P("kEof");function R(V,Y){if(Y!=null&&l(Y,"options"),Y?.signal!=null&&a(Y.signal,"options.signal"),y(V)&&!p(V))throw new t("stream",V,"must be writable");const re=d(this,V);return Y!=null&&Y.signal&&h(Y.signal,re),re}function O(V,Y){if(typeof V!="function")throw new r("fn",["Function","AsyncFunction"],V);Y!=null&&l(Y,"options"),Y?.signal!=null&&a(Y.signal,"options.signal");let re=1;Y?.concurrency!=null&&(re=b(Y.concurrency));let ne=re-1;return Y?.highWaterMark!=null&&(ne=b(Y.highWaterMark)),s(re,"options.concurrency",1),s(ne,"options.highWaterMark",0),ne+=re,(async function*(){const L=Pr().AbortSignalAny([Y?.signal].filter(m)),F=this,D=[],H={signal:L};let Q,de,J=!1,fe=0;function te(){J=!0,me()}function me(){fe-=1,Ee()}function Ee(){de&&!J&&fe=ne||fe>=re)&&await new E(I=>{de=I})}D.push(M)}catch(Ne){const I=T(Ne);j(I,me,te),D.push(I)}finally{J=!0,Q&&(Q(),Q=null)}}xe();try{for(;;){for(;D.length>0;){const Ne=await D[0];if(Ne===M)return;if(L.aborted)throw new o;Ne!==N&&(yield Ne),D.shift(),Ee()}await new E(Ne=>{Q=Ne})}}finally{J=!0,de&&(de(),de=null)}}).call(this)}function G(V=void 0){return V!=null&&l(V,"options"),V?.signal!=null&&a(V.signal,"options.signal"),(async function*(){let re=0;for await(const k of this){var ne;if(V!=null&&(ne=V.signal)!==null&&ne!==void 0&&ne.aborted)throw new o({cause:V.signal.reason});yield[re++,k]}}).call(this)}async function q(V,Y=void 0){for await(const re of $.call(this,V,Y))return!0;return!1}async function z(V,Y=void 0){if(typeof V!="function")throw new r("fn",["Function","AsyncFunction"],V);return!await q.call(this,async(...re)=>!await V(...re),Y)}async function B(V,Y){for await(const re of $.call(this,V,Y))return re}async function ae(V,Y){if(typeof V!="function")throw new r("fn",["Function","AsyncFunction"],V);async function re(ne,k){return await V(ne,k),N}for await(const ne of O.call(this,re,Y));}function $(V,Y){if(typeof V!="function")throw new r("fn",["Function","AsyncFunction"],V);async function re(ne,k){return await V(ne,k)?ne:N}return O.call(this,re,Y)}class ie extends n{constructor(){super("reduce"),this.message="Reduce of an empty stream requires an initial value"}}async function Z(V,Y,re){var ne;if(typeof V!="function")throw new r("reducer",["Function","AsyncFunction"],V);re!=null&&l(re,"options"),re?.signal!=null&&a(re.signal,"options.signal");let k=arguments.length>1;if(re!=null&&(ne=re.signal)!==null&&ne!==void 0&&ne.aborted){const Q=new o(void 0,{cause:re.signal.reason});throw this.once("error",()=>{}),await f(this.destroy(Q)),Q}const L=new e,F=L.signal;if(re!=null&&re.signal){const Q={once:!0,[u]:this,[c]:!0};re.signal.addEventListener("abort",()=>L.abort(),Q)}let D=!1;try{for await(const Q of this){var H;if(D=!0,re!=null&&(H=re.signal)!==null&&H!==void 0&&H.aborted)throw new o;k?Y=await V(Y,Q,{signal:F}):(Y=Q,k=!0)}if(!D&&!k)throw new ie}finally{L.abort()}return Y}async function ue(V){V!=null&&l(V,"options"),V?.signal!=null&&a(V.signal,"options.signal");const Y=[];for await(const ne of this){var re;if(V!=null&&(re=V.signal)!==null&&re!==void 0&&re.aborted)throw new o(void 0,{cause:V.signal.reason});g(Y,ne)}return Y}function ge(V,Y){const re=O.call(this,V,Y);return(async function*(){for await(const k of re)yield*k}).call(this)}function K(V){if(V=_(V),w(V))return 0;if(V<0)throw new i("number",">= 0",V);return V}function ee(V,Y=void 0){return Y!=null&&l(Y,"options"),Y?.signal!=null&&a(Y.signal,"options.signal"),V=K(V),(async function*(){var ne;if(Y!=null&&(ne=Y.signal)!==null&&ne!==void 0&&ne.aborted)throw new o;for await(const L of this){var k;if(Y!=null&&(k=Y.signal)!==null&&k!==void 0&&k.aborted)throw new o;V--<=0&&(yield L)}}).call(this)}function X(V,Y=void 0){return Y!=null&&l(Y,"options"),Y?.signal!=null&&a(Y.signal,"options.signal"),V=K(V),(async function*(){var ne;if(Y!=null&&(ne=Y.signal)!==null&&ne!==void 0&&ne.aborted)throw new o;for await(const L of this){var k;if(Y!=null&&(k=Y.signal)!==null&&k!==void 0&&k.aborted)throw new o;if(V-- >0&&(yield L),V<=0)return}}).call(this)}return Pl.streamReturningOperators={asIndexedPairs:v(G,"readable.asIndexedPairs will be removed in a future version."),drop:ee,filter:$,flatMap:ge,map:O,take:X,compose:R},Pl.promiseReturningOperators={every:z,forEach:ae,reduce:Z,toArray:ue,some:q,find:B},Pl}var rd,A0;function CE(){if(A0)return rd;A0=1;const{ArrayPrototypePop:e,Promise:t}=Rt(),{isIterable:r,isNodeStream:n,isWebStream:i}=Ai(),{pipelineImpl:o}=zm(),{finished:a}=Ji();ME();function s(...l){return new t((u,c)=>{let f,d;const h=l[l.length-1];if(h&&typeof h=="object"&&!n(h)&&!r(h)&&!i(h)){const p=e(l);f=p.signal,d=p.end}o(l,(p,y)=>{p?c(p):u(y)},{signal:f,end:d})})}return rd={finished:a,pipeline:s},rd}var I0;function ME(){if(I0)return Of.exports;I0=1;const{Buffer:e}=qr(),{ObjectDefineProperty:t,ObjectKeys:r,ReflectApply:n}=Rt(),{promisify:{custom:i}}=Pr(),{streamReturningOperators:o,promiseReturningOperators:a}=cN(),{codes:{ERR_ILLEGAL_CONSTRUCTOR:s}}=br(),l=IE(),{setDefaultHighWaterMark:u,getDefaultHighWaterMark:c}=Kc(),{pipeline:f}=zm(),{destroyer:d}=Hs(),h=Ji(),p=CE(),y=Ai(),v=Of.exports=Vm().Stream;v.isDestroyed=y.isDestroyed,v.isDisturbed=y.isDisturbed,v.isErrored=y.isErrored,v.isReadable=y.isReadable,v.isWritable=y.isWritable,v.Readable=Xc();for(const b of r(o)){let w=function(...E){if(new.target)throw s();return v.Readable.from(n(_,this,E))};var m=w;const _=o[b];t(w,"name",{__proto__:null,value:_.name}),t(w,"length",{__proto__:null,value:_.length}),t(v.Readable.prototype,b,{__proto__:null,value:w,enumerable:!1,configurable:!0,writable:!0})}for(const b of r(a)){let w=function(...T){if(new.target)throw s();return n(_,this,T)};var m=w;const _=a[b];t(w,"name",{__proto__:null,value:_.name}),t(w,"length",{__proto__:null,value:_.length}),t(v.Readable.prototype,b,{__proto__:null,value:w,enumerable:!1,configurable:!0,writable:!0})}v.Writable=Wm(),v.Duplex=vi(),v.Transform=TE(),v.PassThrough=AE(),v.pipeline=f;const{addAbortSignal:g}=Yc();return v.addAbortSignal=g,v.finished=h,v.destroy=d,v.compose=l,v.setDefaultHighWaterMark=u,v.getDefaultHighWaterMark=c,t(v,"promises",{__proto__:null,configurable:!0,enumerable:!0,get(){return p}}),t(f,i,{__proto__:null,enumerable:!0,get(){return p.pipeline}}),t(h,i,{__proto__:null,enumerable:!0,get(){return p.finished}}),v.Stream=v,v._isUint8Array=function(_){return _ instanceof Uint8Array},v._uint8ArrayToBuffer=function(_){return e.from(_.buffer,_.byteOffset,_.byteLength)},Of.exports}var C0;function fN(){return C0||(C0=1,(function(e){const t=ME(),r=CE(),n=t.Readable.destroy;e.exports=t.Readable,e.exports._uint8ArrayToBuffer=t._uint8ArrayToBuffer,e.exports._isUint8Array=t._isUint8Array,e.exports.isDisturbed=t.isDisturbed,e.exports.isErrored=t.isErrored,e.exports.isReadable=t.isReadable,e.exports.Readable=t.Readable,e.exports.Writable=t.Writable,e.exports.Duplex=t.Duplex,e.exports.Transform=t.Transform,e.exports.PassThrough=t.PassThrough,e.exports.addAbortSignal=t.addAbortSignal,e.exports.finished=t.finished,e.exports.destroy=t.destroy,e.exports.destroy=n,e.exports.pipeline=t.pipeline,e.exports.compose=t.compose,Object.defineProperty(t,"promises",{configurable:!0,enumerable:!0,get(){return r}}),e.exports.Stream=t.Stream,e.exports.default=e.exports})(Pf)),Pf.exports}var Rl={exports:{}},M0;function dN(){return M0||(M0=1,typeof Object.create=="function"?Rl.exports=function(t,r){r&&(t.super_=r,t.prototype=Object.create(r.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:Rl.exports=function(t,r){if(r){t.super_=r;var n=function(){};n.prototype=r.prototype,t.prototype=new n,t.prototype.constructor=t}}),Rl.exports}var nd,k0;function hN(){if(k0)return nd;k0=1;const{Buffer:e}=qr(),t=Symbol.for("BufferList");function r(n){if(!(this instanceof r))return new r(n);r._init.call(this,n)}return r._init=function(i){Object.defineProperty(this,t,{value:!0}),this._bufs=[],this.length=0,i&&this.append(i)},r.prototype._new=function(i){return new r(i)},r.prototype._offset=function(i){if(i===0)return[0,0];let o=0;for(let a=0;athis.length||i<0)return;const o=this._offset(i);return this._bufs[o[0]][o[1]]},r.prototype.slice=function(i,o){return typeof i=="number"&&i<0&&(i+=this.length),typeof o=="number"&&o<0&&(o+=this.length),this.copy(null,0,i,o)},r.prototype.copy=function(i,o,a,s){if((typeof a!="number"||a<0)&&(a=0),(typeof s!="number"||s>this.length)&&(s=this.length),a>=this.length||s<=0)return i||e.alloc(0);const l=!!i,u=this._offset(a),c=s-a;let f=c,d=l&&o||0,h=u[1];if(a===0&&s===this.length){if(!l)return this._bufs.length===1?this._bufs[0]:e.concat(this._bufs,this.length);for(let p=0;py)this._bufs[p].copy(i,d,h),d+=y;else{this._bufs[p].copy(i,d,h,h+f),d+=y;break}f-=y,h&&(h=0)}return i.length>d?i.slice(0,d):i},r.prototype.shallowSlice=function(i,o){if(i=i||0,o=typeof o!="number"?this.length:o,i<0&&(i+=this.length),o<0&&(o+=this.length),i===o)return this._new();const a=this._offset(i),s=this._offset(o),l=this._bufs.slice(a[0],s[0]+1);return s[1]===0?l.pop():l[l.length-1]=l[l.length-1].slice(0,s[1]),a[1]!==0&&(l[0]=l[0].slice(a[1])),this._new(l)},r.prototype.toString=function(i,o,a){return this.slice(o,a).toString(i)},r.prototype.consume=function(i){if(i=Math.trunc(i),Number.isNaN(i)||i<=0)return this;for(;this._bufs.length;)if(i>=this._bufs[0].length)i-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(i),this.length-=i;break}return this},r.prototype.duplicate=function(){const i=this._new();for(let o=0;o=0&&u=0&&uthis.length?this.length:i;const a=this._offset(i);let s=a[0],l=a[1];for(;s=n.length){const f=u.indexOf(n,l);if(f!==-1)return this._reverseOffset([s,f]);l=u.length-n.length+1}else{const f=this._reverseOffset([s,l]);if(this._match(f,n))return f;l++}l=0}return-1},r.prototype._match=function(n,i){if(this.length-n[0,1].map(a=>[0,1].map(s=>{const l=r.alloc(1);return l.writeUInt8(t.codes[i]<r.from([i])),t.EMPTY={pingreq:r.from([t.codes.pingreq<<4,0]),pingresp:r.from([t.codes.pingresp<<4,0]),disconnect:r.from([t.codes.disconnect<<4,0])},t.MQTT5_PUBACK_PUBREC_CODES={0:"Success",16:"No matching subscribers",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",144:"Topic Name invalid",145:"Packet identifier in use",151:"Quota exceeded",153:"Payload format invalid"},t.MQTT5_PUBREL_PUBCOMP_CODES={0:"Success",146:"Packet Identifier not found"},t.MQTT5_SUBACK_CODES={0:"Granted QoS 0",1:"Granted QoS 1",2:"Granted QoS 2",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",143:"Topic Filter invalid",145:"Packet Identifier in use",151:"Quota exceeded",158:"Shared Subscriptions not supported",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"},t.MQTT5_UNSUBACK_CODES={0:"Success",17:"No subscription existed",128:"Unspecified error",131:"Implementation specific error",135:"Not authorized",143:"Topic Filter invalid",145:"Packet Identifier in use"},t.MQTT5_DISCONNECT_CODES={0:"Normal disconnection",4:"Disconnect with Will Message",128:"Unspecified error",129:"Malformed Packet",130:"Protocol Error",131:"Implementation specific error",135:"Not authorized",137:"Server busy",139:"Server shutting down",141:"Keep Alive timeout",142:"Session taken over",143:"Topic Filter invalid",144:"Topic Name invalid",147:"Receive Maximum exceeded",148:"Topic Alias invalid",149:"Packet too large",150:"Message rate too high",151:"Quota exceeded",152:"Administrative action",153:"Payload format invalid",154:"Retain not supported",155:"QoS not supported",156:"Use another server",157:"Server moved",158:"Shared Subscriptions not supported",159:"Connection rate exceeded",160:"Maximum connect time",161:"Subscription Identifiers not supported",162:"Wildcard Subscriptions not supported"},t.MQTT5_AUTH_CODES={0:"Success",24:"Continue authentication",25:"Re-authenticate"}})(od)),od.exports}function PE(){throw new Error("setTimeout has not been defined")}function OE(){throw new Error("clearTimeout has not been defined")}var Di=PE,Bi=OE;typeof Es.setTimeout=="function"&&(Di=setTimeout);typeof Es.clearTimeout=="function"&&(Bi=clearTimeout);function LE(e){if(Di===setTimeout)return setTimeout(e,0);if((Di===PE||!Di)&&setTimeout)return Di=setTimeout,setTimeout(e,0);try{return Di(e,0)}catch{try{return Di.call(null,e,0)}catch{return Di.call(this,e,0)}}}function mN(e){if(Bi===clearTimeout)return clearTimeout(e);if((Bi===OE||!Bi)&&clearTimeout)return Bi=clearTimeout,clearTimeout(e);try{return Bi(e)}catch{try{return Bi.call(null,e)}catch{return Bi.call(this,e)}}}var ii=[],ws=!1,bo,Pu=-1;function yN(){!ws||!bo||(ws=!1,bo.length?ii=bo.concat(ii):Pu=-1,ii.length&&RE())}function RE(){if(!ws){var e=LE(yN);ws=!0;for(var t=ii.length;t;){for(bo=ii,ii=[];++Pu1)for(var r=1;r0)return a(c);if(d==="number"&&isFinite(c))return f.long?l(c):s(c);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(c))};function a(c){if(c=String(c),!(c.length>100)){var f=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(c);if(f){var d=parseFloat(f[1]),h=(f[2]||"ms").toLowerCase();switch(h){case"years":case"year":case"yrs":case"yr":case"y":return d*o;case"weeks":case"week":case"w":return d*i;case"days":case"day":case"d":return d*n;case"hours":case"hour":case"hrs":case"hr":case"h":return d*r;case"minutes":case"minute":case"mins":case"min":case"m":return d*t;case"seconds":case"second":case"secs":case"sec":case"s":return d*e;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return d;default:return}}}}function s(c){var f=Math.abs(c);return f>=n?Math.round(c/n)+"d":f>=r?Math.round(c/r)+"h":f>=t?Math.round(c/t)+"m":f>=e?Math.round(c/e)+"s":c+"ms"}function l(c){var f=Math.abs(c);return f>=n?u(c,f,n,"day"):f>=r?u(c,f,r,"hour"):f>=t?u(c,f,t,"minute"):f>=e?u(c,f,e,"second"):c+" ms"}function u(c,f,d,h){var p=f>=d*1.5;return Math.round(c/d)+" "+h+(p?"s":"")}return sd}var ad,N0;function zN(){if(N0)return ad;N0=1;function e(t){n.debug=n,n.default=n,n.coerce=u,n.disable=s,n.enable=o,n.enabled=l,n.humanize=WN(),n.destroy=c,Object.keys(t).forEach(f=>{n[f]=t[f]}),n.names=[],n.skips=[],n.formatters={};function r(f){let d=0;for(let h=0;h{if(T==="%%")return"%";w++;const j=n.formatters[C];if(typeof j=="function"){const P=g[w];T=j.call(m,P),g.splice(w,1),w--}return T}),n.formatArgs.call(m,g),(m.log||n.log).apply(m,g)}return v.namespace=f,v.useColors=n.useColors(),v.color=n.selectColor(f),v.extend=i,v.destroy=n.destroy,Object.defineProperty(v,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(p!==n.namespaces&&(p=n.namespaces,y=n.enabled(f)),y),set:g=>{h=g}}),typeof n.init=="function"&&n.init(v),v}function i(f,d){const h=n(this.namespace+(typeof d>"u"?":":d)+f);return h.log=this.log,h}function o(f){n.save(f),n.namespaces=f,n.names=[],n.skips=[];const d=(typeof f=="string"?f:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(const h of d)h[0]==="-"?n.skips.push(h.slice(1)):n.names.push(h)}function a(f,d){let h=0,p=0,y=-1,v=0;for(;h"-"+d)].join(",");return n.enable(""),f}function l(f){for(const d of n.skips)if(a(f,d))return!1;for(const d of n.names)if(a(f,d))return!0;return!1}function u(f){return f instanceof Error?f.stack||f.message:f}function c(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return n.enable(n.load()),n}return ad=e,ad}var $0;function $E(){return $0||($0=1,(function(e,t){var r={};t.formatArgs=i,t.save=o,t.load=a,t.useColors=n,t.storage=s(),t.destroy=(()=>{let u=!1;return()=>{u||(u=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function n(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let u;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(u=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(u[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function i(u){if(u[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+u[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const c="color: "+this.color;u.splice(1,0,c,"color: inherit");let f=0,d=0;u[0].replace(/%[a-zA-Z%]/g,h=>{h!=="%%"&&(f++,h==="%c"&&(d=f))}),u.splice(d,0,c)}t.log=console.debug||console.log||(()=>{});function o(u){try{u?t.storage.setItem("debug",u):t.storage.removeItem("debug")}catch{}}function a(){let u;try{u=t.storage.getItem("debug")||t.storage.getItem("DEBUG")}catch{}return!u&&typeof po<"u"&&"env"in po&&(u=r.DEBUG),u}function s(){try{return localStorage}catch{}}e.exports=zN()(t);const{formatters:l}=e.exports;l.j=function(u){try{return JSON.stringify(u)}catch(c){return"[UnexpectedJSONParseError]: "+c.message}}})(Nl,Nl.exports)),Nl.exports}var ld,D0;function HN(){if(D0)return ld;D0=1;const e=pN(),{EventEmitter:t}=zs(),r=gN(),n=kE(),i=$E()("mqtt-packet:parser");class o extends t{constructor(){super(),this.parser=this.constructor.parser}static parser(s){return this instanceof o?(this.settings=s||{},this._states=["_parseHeader","_parseLength","_parsePayload","_newPacket"],this._resetState(),this):new o().parser(s)}_resetState(){i("_resetState: resetting packet, error, _list, and _stateCounter"),this.packet=new r,this.error=null,this._list=e(),this._stateCounter=0}parse(s){for(this.error&&this._resetState(),this._list.append(s),i("parse: current state: %s",this._states[this._stateCounter]);(this.packet.length!==-1||this._list.length>0)&&this[this._states[this._stateCounter]]()&&!this.error;)this._stateCounter++,i("parse: state complete. _stateCounter is now: %d",this._stateCounter),i("parse: packet.length: %d, buffer list length: %d",this.packet.length,this._list.length),this._stateCounter>=this._states.length&&(this._stateCounter=0);return i("parse: exited while loop. packet: %d, buffer list length: %d",this.packet.length,this._list.length),this._list.length}_parseHeader(){const s=this._list.readUInt8(0),l=s>>n.CMD_SHIFT;this.packet.cmd=n.types[l];const u=s&15,c=n.requiredHeaderFlags[l];return c!=null&&u!==c?this._emitError(new Error(n.requiredHeaderFlagsErrors[l])):(this.packet.retain=(s&n.RETAIN_MASK)!==0,this.packet.qos=s>>n.QOS_SHIFT&n.QOS_MASK,this.packet.qos>2?this._emitError(new Error("Packet must not have both QoS bits set to 1")):(this.packet.dup=(s&n.DUP_MASK)!==0,i("_parseHeader: packet: %o",this.packet),this._list.consume(1),!0))}_parseLength(){const s=this._parseVarByteNum(!0);return s&&(this.packet.length=s.value,this._list.consume(s.bytes)),i("_parseLength %d",s.value),!!s}_parsePayload(){i("_parsePayload: payload %O",this._list);let s=!1;if(this.packet.length===0||this._list.length>=this.packet.length){switch(this._pos=0,this.packet.cmd){case"connect":this._parseConnect();break;case"connack":this._parseConnack();break;case"publish":this._parsePublish();break;case"puback":case"pubrec":case"pubrel":case"pubcomp":this._parseConfirmation();break;case"subscribe":this._parseSubscribe();break;case"suback":this._parseSuback();break;case"unsubscribe":this._parseUnsubscribe();break;case"unsuback":this._parseUnsuback();break;case"pingreq":case"pingresp":break;case"disconnect":this._parseDisconnect();break;case"auth":this._parseAuth();break;default:this._emitError(new Error("Not supported"))}s=!0}return i("_parsePayload complete result: %s",s),s}_parseConnect(){i("_parseConnect");let s,l,u,c;const f={},d=this.packet,h=this._parseString();if(h===null)return this._emitError(new Error("Cannot parse protocolId"));if(h!=="MQTT"&&h!=="MQIsdp")return this._emitError(new Error("Invalid protocolId"));if(d.protocolId=h,this._pos>=this._list.length)return this._emitError(new Error("Packet too short"));if(d.protocolVersion=this._list.readUInt8(this._pos),d.protocolVersion>=128&&(d.bridgeMode=!0,d.protocolVersion=d.protocolVersion-128),d.protocolVersion!==3&&d.protocolVersion!==4&&d.protocolVersion!==5)return this._emitError(new Error("Invalid protocol version"));if(this._pos++,this._pos>=this._list.length)return this._emitError(new Error("Packet too short"));if(this._list.readUInt8(this._pos)&1)return this._emitError(new Error("Connect flag bit 0 must be 0, but got 1"));f.username=this._list.readUInt8(this._pos)&n.USERNAME_MASK,f.password=this._list.readUInt8(this._pos)&n.PASSWORD_MASK,f.will=this._list.readUInt8(this._pos)&n.WILL_FLAG_MASK;const p=!!(this._list.readUInt8(this._pos)&n.WILL_RETAIN_MASK),y=(this._list.readUInt8(this._pos)&n.WILL_QOS_MASK)>>n.WILL_QOS_SHIFT;if(f.will)d.will={},d.will.retain=p,d.will.qos=y;else{if(p)return this._emitError(new Error("Will Retain Flag must be set to zero when Will Flag is set to 0"));if(y)return this._emitError(new Error("Will QoS must be set to zero when Will Flag is set to 0"))}if(d.clean=(this._list.readUInt8(this._pos)&n.CLEAN_SESSION_MASK)!==0,this._pos++,d.keepalive=this._parseNum(),d.keepalive===-1)return this._emitError(new Error("Packet too short"));if(d.protocolVersion===5){const g=this._parseProperties();Object.getOwnPropertyNames(g).length&&(d.properties=g)}const v=this._parseString();if(v===null)return this._emitError(new Error("Packet too short"));if(d.clientId=v,i("_parseConnect: packet.clientId: %s",d.clientId),f.will){if(d.protocolVersion===5){const g=this._parseProperties();Object.getOwnPropertyNames(g).length&&(d.will.properties=g)}if(s=this._parseString(),s===null)return this._emitError(new Error("Cannot parse will topic"));if(d.will.topic=s,i("_parseConnect: packet.will.topic: %s",d.will.topic),l=this._parseBuffer(),l===null)return this._emitError(new Error("Cannot parse will payload"));d.will.payload=l,i("_parseConnect: packet.will.paylaod: %s",d.will.payload)}if(f.username){if(c=this._parseString(),c===null)return this._emitError(new Error("Cannot parse username"));d.username=c,i("_parseConnect: packet.username: %s",d.username)}if(f.password){if(u=this._parseBuffer(),u===null)return this._emitError(new Error("Cannot parse password"));d.password=u}return this.settings=d,i("_parseConnect: complete"),d}_parseConnack(){i("_parseConnack");const s=this.packet;if(this._list.length<1)return null;const l=this._list.readUInt8(this._pos++);if(l>1)return this._emitError(new Error("Invalid connack flags, bits 7-1 must be set to 0"));if(s.sessionPresent=!!(l&n.SESSIONPRESENT_MASK),this.settings.protocolVersion===5)this._list.length>=2?s.reasonCode=this._list.readUInt8(this._pos++):s.reasonCode=0;else{if(this._list.length<2)return null;s.returnCode=this._list.readUInt8(this._pos++)}if(s.returnCode===-1||s.reasonCode===-1)return this._emitError(new Error("Cannot parse return code"));if(this.settings.protocolVersion===5){const u=this._parseProperties();Object.getOwnPropertyNames(u).length&&(s.properties=u)}i("_parseConnack: complete")}_parsePublish(){i("_parsePublish");const s=this.packet;if(s.topic=this._parseString(),s.topic===null)return this._emitError(new Error("Cannot parse topic"));if(!(s.qos>0&&!this._parseMessageId())){if(this.settings.protocolVersion===5){const l=this._parseProperties();Object.getOwnPropertyNames(l).length&&(s.properties=l)}s.payload=this._list.slice(this._pos,s.length),i("_parsePublish: payload from buffer list: %o",s.payload)}}_parseSubscribe(){i("_parseSubscribe");const s=this.packet;let l,u,c,f,d,h,p;if(s.subscriptions=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){const y=this._parseProperties();Object.getOwnPropertyNames(y).length&&(s.properties=y)}if(s.length<=0)return this._emitError(new Error("Malformed subscribe, no payload specified"));for(;this._pos=s.length)return this._emitError(new Error("Malformed Subscribe Payload"));if(u=this._parseByte(),this.settings.protocolVersion===5){if(u&192)return this._emitError(new Error("Invalid subscribe topic flag bits, bits 7-6 must be 0"))}else if(u&252)return this._emitError(new Error("Invalid subscribe topic flag bits, bits 7-2 must be 0"));if(c=u&n.SUBSCRIBE_OPTIONS_QOS_MASK,c>2)return this._emitError(new Error("Invalid subscribe QoS, must be <= 2"));if(h=(u>>n.SUBSCRIBE_OPTIONS_NL_SHIFT&n.SUBSCRIBE_OPTIONS_NL_MASK)!==0,d=(u>>n.SUBSCRIBE_OPTIONS_RAP_SHIFT&n.SUBSCRIBE_OPTIONS_RAP_MASK)!==0,f=u>>n.SUBSCRIBE_OPTIONS_RH_SHIFT&n.SUBSCRIBE_OPTIONS_RH_MASK,f>2)return this._emitError(new Error("Invalid retain handling, must be <= 2"));p={topic:l,qos:c},this.settings.protocolVersion===5?(p.nl=h,p.rap=d,p.rh=f):this.settings.bridgeMode&&(p.rh=0,p.rap=!0,p.nl=!0),i("_parseSubscribe: push subscription `%s` to subscription",p),s.subscriptions.push(p)}}}_parseSuback(){i("_parseSuback");const s=this.packet;if(this.packet.granted=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){const l=this._parseProperties();Object.getOwnPropertyNames(l).length&&(s.properties=l)}if(s.length<=0)return this._emitError(new Error("Malformed suback, no payload specified"));for(;this._pos2&&l!==128)return this._emitError(new Error("Invalid suback QoS, must be 0, 1, 2 or 128"));this.packet.granted.push(l)}}}_parseUnsubscribe(){i("_parseUnsubscribe");const s=this.packet;if(s.unsubscriptions=[],!!this._parseMessageId()){if(this.settings.protocolVersion===5){const l=this._parseProperties();Object.getOwnPropertyNames(l).length&&(s.properties=l)}if(s.length<=0)return this._emitError(new Error("Malformed unsubscribe, no payload specified"));for(;this._pos2){switch(s.reasonCode=this._parseByte(),this.packet.cmd){case"puback":case"pubrec":if(!n.MQTT5_PUBACK_PUBREC_CODES[s.reasonCode])return this._emitError(new Error("Invalid "+this.packet.cmd+" reason code"));break;case"pubrel":case"pubcomp":if(!n.MQTT5_PUBREL_PUBCOMP_CODES[s.reasonCode])return this._emitError(new Error("Invalid "+this.packet.cmd+" reason code"));break}i("_parseConfirmation: packet.reasonCode `%d`",s.reasonCode)}else s.reasonCode=0;if(s.length>3){const l=this._parseProperties();Object.getOwnPropertyNames(l).length&&(s.properties=l)}}return!0}_parseDisconnect(){const s=this.packet;if(i("_parseDisconnect"),this.settings.protocolVersion===5){this._list.length>0?(s.reasonCode=this._parseByte(),n.MQTT5_DISCONNECT_CODES[s.reasonCode]||this._emitError(new Error("Invalid disconnect reason code"))):s.reasonCode=0;const l=this._parseProperties();Object.getOwnPropertyNames(l).length&&(s.properties=l)}return i("_parseDisconnect result: true"),!0}_parseAuth(){i("_parseAuth");const s=this.packet;if(this.settings.protocolVersion!==5)return this._emitError(new Error("Not supported auth packet for this version MQTT"));if(s.reasonCode=this._parseByte(),!n.MQTT5_AUTH_CODES[s.reasonCode])return this._emitError(new Error("Invalid auth reason code"));const l=this._parseProperties();return Object.getOwnPropertyNames(l).length&&(s.properties=l),i("_parseAuth: result: true"),!0}_parseMessageId(){const s=this.packet;return s.messageId=this._parseNum(),s.messageId===null?(this._emitError(new Error("Cannot parse messageId")),!1):(i("_parseMessageId: packet.messageId %d",s.messageId),!0)}_parseString(s){const l=this._parseNum(),u=l+this._pos;if(l===-1||u>this._list.length||u>this.packet.length)return null;const c=this._list.toString("utf8",this._pos,u);return this._pos+=l,i("_parseString: result: %s",c),c}_parseStringPair(){return i("_parseStringPair"),{name:this._parseString(),value:this._parseString()}}_parseBuffer(){const s=this._parseNum(),l=s+this._pos;if(s===-1||l>this._list.length||l>this.packet.length)return null;const u=this._list.slice(this._pos,l);return this._pos+=s,i("_parseBuffer: result: %o",u),u}_parseNum(){if(this._list.length-this._pos<2)return-1;const s=this._list.readUInt16BE(this._pos);return this._pos+=2,i("_parseNum: result: %s",s),s}_parse4ByteNum(){if(this._list.length-this._pos<4)return-1;const s=this._list.readUInt32BE(this._pos);return this._pos+=4,i("_parse4ByteNum: result: %s",s),s}_parseVarByteNum(s){i("_parseVarByteNum");const l=4;let u=0,c=1,f=0,d=!1,h;const p=this._pos?this._pos:0;for(;u=u&&this._emitError(new Error("Invalid variable byte integer")),p&&(this._pos+=u),d?s?d={bytes:u,value:f}:d=f:d=!1,i("_parseVarByteNum: result: %o",d),d}_parseByte(){let s;return this._pos>8,0),u.writeUInt8(l&255,1),u}function o(){for(let l=0;l0&&(c=c|128),d.writeUInt8(c,f++);while(l>0&&f<4);return l>0&&(f=0),n?d.subarray(0,f):d.slice(0,f)}function s(l){const u=e.allocUnsafe(4);return u.writeUInt32BE(l,0),u}return ud={cache:r,generateCache:o,generateNumber:i,genBufVariableByteInt:a,generate4ByteBuffer:s},ud}var cd={exports:{}},F0;function GN(){if(F0)return cd.exports;F0=1,cd.exports={nextTick:e};function e(t,r,n,i){if(typeof t!="function")throw new TypeError('"callback" argument must be a function');var o=arguments.length,a,s;switch(o){case 0:case 1:return po.nextTick(t);case 2:return po.nextTick(function(){t.call(null,r)});case 3:return po.nextTick(function(){t.call(null,r,n)});case 4:return po.nextTick(function(){t.call(null,r,n,i)});default:for(a=new Array(o-1),s=0;s=4)&&(F||k))de+=t.byteLength(F)+2;else{if(re<4)return ee.destroy(new Error("clientId must be supplied before 3.1.1")),!1;if(k*1===0)return ee.destroy(new Error("clientId must be given if cleanSession set to 0")),!1}if(typeof L!="number"||L<0||L>65535||L%1!==0)return ee.destroy(new Error("Invalid keepalive")),!1;de+=2,de+=1;let J,fe;if(re===5){if(J=ae(ee,Q),!J)return!1;de+=J.length}if(ne){if(typeof ne!="object")return ee.destroy(new Error("Invalid will")),!1;if(!ne.topic||typeof ne.topic!="string")return ee.destroy(new Error("Invalid will topic")),!1;if(de+=t.byteLength(ne.topic)+2,de+=2,ne.payload)if(ne.payload.length>=0)typeof ne.payload=="string"?de+=t.byteLength(ne.payload):de+=ne.payload.length;else return ee.destroy(new Error("Invalid will payload")),!1;if(fe={},re===5){if(fe=ae(ee,ne.properties),!fe)return!1;de+=fe.length}}let te=!1;if(D!=null)if(ge(D))te=!0,de+=t.byteLength(D)+2;else return ee.destroy(new Error("Invalid username")),!1;if(H!=null){if(!te)return ee.destroy(new Error("Username is required to use password")),!1;if(ge(H))de+=ue(H)+2;else return ee.destroy(new Error("Invalid password")),!1}ee.write(e.CONNECT_HEADER),M(ee,de),B(ee,Y),V.bridgeMode&&(re+=128),ee.write(re===131?e.VERSION131:re===132?e.VERSION132:re===4?e.VERSION4:re===5?e.VERSION5:e.VERSION3);let me=0;return me|=D!=null?e.USERNAME_MASK:0,me|=H!=null?e.PASSWORD_MASK:0,me|=ne&&ne.retain?e.WILL_RETAIN_MASK:0,me|=ne&&ne.qos?ne.qos<0&&d(ee,F),Q?.write(),a("publish: payload: %o",L),ee.write(L)}function b(K,ee,X){const V=X?X.protocolVersion:4,Y=K||{},re=Y.cmd||"puback",ne=Y.messageId,k=Y.dup&&re==="pubrel"?e.DUP_MASK:0;let L=0;const F=Y.reasonCode,D=Y.properties;let H=V===5?3:2;if(re==="pubrel"&&(L=1),typeof ne!="number")return ee.destroy(new Error("Invalid messageId")),!1;let Q=null;if(V===5&&typeof D=="object"){if(Q=$(ee,D,X,H),!Q)return!1;H+=Q.length}return ee.write(e.ACKS[re][L][k][0]),H===3&&(H+=F!==0?1:-1),M(ee,H),d(ee,ne),V===5&&H!==2&&ee.write(t.from([F])),Q!==null?Q.write():H===4&&ee.write(t.from([0])),!0}function _(K,ee,X){a("subscribe: packet: ");const V=X?X.protocolVersion:4,Y=K||{},re=Y.dup?e.DUP_MASK:0,ne=Y.messageId,k=Y.subscriptions,L=Y.properties;let F=0;if(typeof ne!="number")return ee.destroy(new Error("Invalid messageId")),!1;F+=2;let D=null;if(V===5){if(D=ae(ee,L),!D)return!1;F+=D.length}if(typeof k=="object"&&k.length)for(let Q=0;Q2)return ee.destroy(new Error("Invalid subscriptions - invalid Retain Handling")),!1}F+=t.byteLength(de)+2+1}else return ee.destroy(new Error("Invalid subscriptions")),!1;a("subscribe: writing to stream: %o",e.SUBSCRIBE_HEADER),ee.write(e.SUBSCRIBE_HEADER[1][re?1:0][0]),M(ee,F),d(ee,ne),D!==null&&D.write();let H=!0;for(const Q of k){const de=Q.topic,J=Q.qos,fe=+Q.nl,te=+Q.rap,me=Q.rh;let Ee;R(ee,de),Ee=e.SUBSCRIBE_OPTIONS_QOS[J],V===5&&(Ee|=fe?e.SUBSCRIBE_OPTIONS_NL:0,Ee|=te?e.SUBSCRIBE_OPTIONS_RAP:0,Ee|=me?e.SUBSCRIBE_OPTIONS_RH[me]:0),H=ee.write(t.from([Ee]))}return H}function w(K,ee,X){const V=X?X.protocolVersion:4,Y=K||{},re=Y.messageId,ne=Y.granted,k=Y.properties;let L=0;if(typeof re!="number")return ee.destroy(new Error("Invalid messageId")),!1;if(L+=2,typeof ne=="object"&&ne.length)for(let D=0;De.VARBYTEINT_MAX)return K.destroy(new Error(`Invalid variable byte integer: ${ee}`)),!1;let X=N[ee];return X||(X=c(ee),ee<16384&&(N[ee]=X)),a("writeVarByteInt: writing to stream: %o",X),K.write(X)}function R(K,ee){const X=t.byteLength(ee);return d(K,X),a("writeString: %s",ee),K.write(ee,"utf8")}function O(K,ee,X){R(K,ee),R(K,X)}function G(K,ee){return a("writeNumberCached: number: %d",ee),a("writeNumberCached: %o",s[ee]),K.write(s[ee])}function q(K,ee){const X=l(ee);return a("writeNumberGenerated: %o",X),K.write(X)}function z(K,ee){const X=f(ee);return a("write4ByteNumber: %o",X),K.write(X)}function B(K,ee){typeof ee=="string"?R(K,ee):ee?(d(K,ee.length),K.write(ee)):d(K,0)}function ae(K,ee){if(typeof ee!="object"||ee.length!=null)return{length:1,write(){Z(K,{},0)}};let X=0;function V(re,ne){const k=e.propertiesTypes[re];let L=0;switch(k){case"byte":{if(typeof ne!="boolean")return K.destroy(new Error(`Invalid ${re}: ${ne}`)),!1;L+=2;break}case"int8":{if(typeof ne!="number"||ne<0||ne>255)return K.destroy(new Error(`Invalid ${re}: ${ne}`)),!1;L+=2;break}case"binary":{if(ne&&ne===null)return K.destroy(new Error(`Invalid ${re}: ${ne}`)),!1;L+=1+t.byteLength(ne)+2;break}case"int16":{if(typeof ne!="number"||ne<0||ne>65535)return K.destroy(new Error(`Invalid ${re}: ${ne}`)),!1;L+=3;break}case"int32":{if(typeof ne!="number"||ne<0||ne>4294967295)return K.destroy(new Error(`Invalid ${re}: ${ne}`)),!1;L+=5;break}case"var":{if(typeof ne!="number"||ne<0||ne>268435455)return K.destroy(new Error(`Invalid ${re}: ${ne}`)),!1;L+=1+t.byteLength(c(ne));break}case"string":{if(typeof ne!="string")return K.destroy(new Error(`Invalid ${re}: ${ne}`)),!1;L+=3+t.byteLength(ne.toString());break}case"pair":{if(typeof ne!="object")return K.destroy(new Error(`Invalid ${re}: ${ne}`)),!1;L+=Object.getOwnPropertyNames(ne).reduce((F,D)=>{const H=ne[D];return Array.isArray(H)?F+=H.reduce((Q,de)=>(Q+=3+t.byteLength(D.toString())+2+t.byteLength(de.toString()),Q),0):F+=3+t.byteLength(D.toString())+2+t.byteLength(ne[D].toString()),F},0);break}default:return K.destroy(new Error(`Invalid property ${re}: ${ne}`)),!1}return L}if(ee)for(const re in ee){let ne=0,k=0;const L=ee[re];if(L!==void 0){if(Array.isArray(L))for(let F=0;Fre;){const k=Y.shift();if(k&&ee[k])delete ee[k],ne=ae(K,ee);else return!1}return ne}function ie(K,ee,X){switch(e.propertiesTypes[ee]){case"byte":{K.write(t.from([e.properties[ee]])),K.write(t.from([+X]));break}case"int8":{K.write(t.from([e.properties[ee]])),K.write(t.from([X]));break}case"binary":{K.write(t.from([e.properties[ee]])),B(K,X);break}case"int16":{K.write(t.from([e.properties[ee]])),d(K,X);break}case"int32":{K.write(t.from([e.properties[ee]])),z(K,X);break}case"var":{K.write(t.from([e.properties[ee]])),M(K,X);break}case"string":{K.write(t.from([e.properties[ee]])),R(K,X);break}case"pair":{Object.getOwnPropertyNames(X).forEach(Y=>{const re=X[Y];Array.isArray(re)?re.forEach(ne=>{K.write(t.from([e.properties[ee]])),O(K,Y.toString(),ne.toString())}):(K.write(t.from([e.properties[ee]])),O(K,Y.toString(),re.toString()))});break}default:return K.destroy(new Error(`Invalid property ${ee} value: ${X}`)),!1}}function Z(K,ee,X){M(K,X);for(const V in ee)if(Object.prototype.hasOwnProperty.call(ee,V)&&ee[V]!=null){const Y=ee[V];if(Array.isArray(Y))for(let re=0;re{console.info("MQTT connection successful")}),un.on("disconnect",()=>{console.info("MQTT disconnected")}),un.on("error",e=>{console.error("MQTT connection failed: ",e)})}catch(e){console.error("MQTT connect error: ",e)}function e$(e){un?un.on("message",e):console.error("MqttRegister: MQTT client not available")}function Io(e){lc.topic=e;const{topic:t,qos:r}=lc;un.subscribe(t,{qos:r},n=>{if(n){console.error("MQTT Subscription error: "+n);return}})}function Ss(e){lc.topic=e;const{topic:t}=lc;un.unsubscribe(t,r=>{if(r){console.error("MQTT Unsubscribe from "+e+" failed: "+r);return}})}async function uc(e,t){let n=un.connected,i=0;for(;!n&&i<20;)console.warn("MQTT publish: Not connected. Waiting 0.1 seconds"),await t$(100),n=un.connected,i+=1;if(i<20)try{un.publish(e,t,{qos:0},o=>{o&&console.warn("MQTT publish error: ",o),console.info("MQTT publish: Message sent: ["+e+"]("+t+")")})}catch(o){console.warn("MQTT publish: caught error: "+o)}else console.error("MQTT publish: Lost connection to MQTT server. Please reload the page")}function Hm(){return BE.clientId}function t$(e){return new Promise(t=>setTimeout(t,e))}class r${id;name="Ladepunkt";icon="Ladepunkt";type=yt.chargepoint;ev=0;template=0;connectedPhases=0;phase_1=0;autoPhaseSwitchHw=!1;controlPilotInterruptionHw=!1;isEnabled=!0;isPluggedIn=!1;isCharging=!1;_isLocked=!1;_connectedVehicle=0;chargeTemplate=null;evTemplate=0;_chargeMode=$r.pv_charging;_hasPriority=!1;currentPlan="";averageConsumption=0;_vehicleName="";rangeCharged=0;rangeUnit="";counter=0;dailyYield=0;now={energy:0,energyPv:0,energyBat:0,pvPercentage:0};past={energy:0,energyPv:0,energyBat:0,pvPercentage:0};energyPv=0;energyBat=0;pvPercentage=0;faultState=0;faultStr="";phasesInUse=0;power=0;chargedSincePlugged=0;stateStr="";current=0;currents=[0,0,0];phasesToUse=0;isSocConfigured=!0;isSocManual=!1;waitingForSoc=!1;color="white";showInGraph=!0;_timedCharging=!1;_instantChargeLimitMode="";_instantTargetCurrent=0;_instantTargetSoc=0;_instantMaxEnergy=0;_instantTargetPhases=0;_pvMinCurrent=0;_pvMaxSoc=0;_pvMinSoc=0;_pvMinSocCurrent=0;_pvMinSocPhases=1;_pvChargeLimitMode="";_pvTargetSoc=0;_pvMaxEnergy=0;_pvTargetPhases=0;_ecoMinCurrent=0;_ecoTargetPhases=0;_ecoChargeLimitMode="";_ecoTargetSoc=0;_ecoMaxEnergy=0;_etActive=!1;_etMaxPrice=20;constructor(t){this.id=t}get vehicleName(){return rt[this.connectedVehicle]?.name??""}set vehicleName(t){this._vehicleName=t}get isLocked(){return this._isLocked}set isLocked(t){this._isLocked=t,Mr("cpLock",t,this.id)}updateIsLocked(t){this._isLocked=t}get connectedVehicle(){return this._connectedVehicle}set connectedVehicle(t){this._connectedVehicle=t,Mr("cpVehicle",t,this.id)}updateConnectedVehicle(t){this._connectedVehicle=t}get soc(){return rt[this.connectedVehicle]?rt[this.connectedVehicle].soc:0}set soc(t){rt[this.connectedVehicle]&&(rt[this.connectedVehicle].soc=t)}get chargeMode(){return this.chargeTemplate?.chargemode.selected??$r.stop}set chargeMode(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.selected=t,St(this.id))}get hasPriority(){return this.chargeTemplate?.prio??!1}set hasPriority(t){this.chargeTemplate&&(this.chargeTemplate.prio=t,St(this.id))}get timedCharging(){return this.chargeTemplate?this.chargeTemplate.time_charging.active:!1}set timedCharging(t){this.chargeTemplate.time_charging.active=t,St(this.id)}get instantTargetCurrent(){return this.chargeTemplate?.chargemode.instant_charging.current??0}set instantTargetCurrent(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.instant_charging.current=t,St(this.id))}get instantChargeLimitMode(){return this.chargeTemplate?.chargemode.instant_charging.limit.selected??"none"}set instantChargeLimitMode(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.instant_charging.limit.selected=t,St(this.id))}get instantTargetSoc(){return this.chargeTemplate?.chargemode.instant_charging.limit.soc??0}set instantTargetSoc(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.instant_charging.limit.soc=t,St(this.id))}get instantMaxEnergy(){return this.chargeTemplate?.chargemode.instant_charging.limit.amount??0}set instantMaxEnergy(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.instant_charging.limit.amount=t,St(this.id))}get instantTargetPhases(){return this.chargeTemplate?.chargemode.instant_charging.phases_to_use??0}set instantTargetPhases(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.instant_charging.phases_to_use=t,St(this.id))}get pvMinCurrent(){return this.chargeTemplate?.chargemode.pv_charging.min_current??0}set pvMinCurrent(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.min_current=t,St(this.id))}get pvMaxSoc(){return this._pvMaxSoc}set pvMaxSoc(t){this._pvMaxSoc=t,Mr("cpPvMaxSoc",t,this.id)}updatePvMaxSoc(t){this._pvMaxSoc=t}get pvMinSoc(){return this.chargeTemplate?.chargemode.pv_charging.min_soc??0}set pvMinSoc(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.min_soc=t,St(this.id))}get pvMinSocCurrent(){return this.chargeTemplate?.chargemode.pv_charging.min_soc_current??0}set pvMinSocCurrent(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.min_soc_current=t,St(this.id))}set pvMinSocPhases(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.phases_to_use_min_soc=t,St(this.id))}get pvMinSocPhases(){return this.chargeTemplate?.chargemode.pv_charging.phases_to_use_min_soc??0}get pvChargeLimitMode(){return this.chargeTemplate?.chargemode.pv_charging.limit.selected??"none"}set pvChargeLimitMode(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.limit.selected=t,St(this.id))}get pvTargetSoc(){return this.chargeTemplate?.chargemode.pv_charging.limit.soc??0}set pvTargetSoc(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.limit.soc=t,St(this.id))}get pvMaxEnergy(){return this.chargeTemplate?.chargemode.pv_charging.limit.amount??0}set pvMaxEnergy(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.limit.amount=t,St(this.id))}get pvTargetPhases(){return this.chargeTemplate?.chargemode.pv_charging.phases_to_use??0}set pvTargetPhases(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.pv_charging.phases_to_use=t,St(this.id))}get ecoMinCurrent(){return this.chargeTemplate?.chargemode.eco_charging.current??0}set ecoMinCurrent(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.eco_charging.current=t,St(this.id))}get ecoTargetPhases(){return this.chargeTemplate?.chargemode.eco_charging.phases_to_use??0}set ecoTargetPhases(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.eco_charging.phases_to_use=t,St(this.id))}get ecoChargeLimitMode(){return this.chargeTemplate?.chargemode.eco_charging.limit.selected??"none"}set ecoChargeLimitMode(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.eco_charging.limit.selected=t,St(this.id))}get ecoTargetSoc(){return this.chargeTemplate?.chargemode.eco_charging.limit.soc??0}set ecoTargetSoc(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.eco_charging.limit.soc=t,St(this.id))}get ecoMaxEnergy(){return this.chargeTemplate?.chargemode.eco_charging.limit.amount??0}set ecoMaxEnergy(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.eco_charging.limit.amount=t,St(this.id))}get etMaxPrice(){return(this.chargeTemplate?.chargemode.eco_charging.max_price??0)*1e5}set etMaxPrice(t){this.chargeTemplate&&(this.chargeTemplate.chargemode.eco_charging.max_price=Math.ceil(t*1e3)/1e8,St(this.id))}get etActive(){return this.chargeTemplate&&this.chargeTemplate.chargemode.selected==$r.eco_charging}get realCurrent(){switch(this.phasesInUse){case 0:return 0;case 1:return this.currents[0];case 2:return(this.currents[0]+this.currents[1])/2;case 3:return(this.currents[0]+this.currents[1]+this.currents[2])/3;default:return 0}}}class n${id;name="__invalid";tags=[];config={};soc=0;range=0;constructor(t){this.id=t}_chargeTemplateId=0;isSocConfigured=!1;isSocManual=!1;get chargeTemplateId(){return this._chargeTemplateId}set chargeTemplateId(t){this._chargeTemplateId=t,Mr("vhChargeTemplateId",t,this.id)}updateChargeTemplateId(t){this._chargeTemplateId=t}_evTemplateId=0;get evTemplateId(){return this._evTemplateId}set evTemplateId(t){this._evTemplateId=t,Mr("vhEvTemplateId",t,this.id)}updateEvTemplateId(t){this._evTemplateId=t}get chargepoint(){for(const t of Object.values(Ye))if(t.connectedVehicle==this.id)return t}get visible(){return this.name!="__invalid"&&(this.id!=0||Ce.showStandardVehicle)}}const Ye=Dt({}),rt=Dt({}),qa=Dt({}),UE=Dt({});function i$(e){if(!(e in Ye)){Ye[e]=new r$(e);const t=zE("cp",Object.values(Ye).length-1);Ye[e].color=t}}function o$(){Object.keys(Ye).forEach(e=>{delete Ye[parseInt(e)]})}const At=_e(()=>{let e=[];const t=Object.values(Ye).filter(n=>rt[n.connectedVehicle]&&rt[n.connectedVehicle].isSocConfigured).map(n=>n.connectedVehicle),r=Object.values(rt).filter(n=>n.visible&&n.isSocConfigured&&!t.includes(n.id));return e=t.concat(r.map(n=>n.id)).slice(0,2),e.length==0?e=[-1,-1]:e.length==1&&e.push(-1),e}),qm=[{name:"keine",id:"none"},{name:"Ladestand",id:"soc"},{name:"Energie",id:"amount"}],jE={cpLock:"openWB/set/chargepoint/%/set/manual_lock",chargeMode:"openWB/set/vehicle/template/charge_template/%/chargemode/selected",cpPriority:"openWB/set/vehicle/template/charge_template/%/prio",pvBatteryPriority:"openWB/set/general/chargemode_config/bat/mode",cpVehicle:"openWB/set/chargepoint/%/config/ev",cpInstantChargeLimitMode:"openWB/set/vehicle/template/charge_template/%/chargemode/instant_charging/limit/selected",cpInstantTargetCurrent:"openWB/set/vehicle/template/charge_template/%/chargemode/instant_charging/current",cpInstantTargetSoc:"openWB/set/vehicle/template/charge_template/%/chargemode/instant_charging/limit/soc",cpInstantMaxEnergy:"openWB/set/vehicle/template/charge_template/%/chargemode/instant_charging/limit/amount",cpPvFeedInLimit:"openWB/set/vehicle/template/charge_template/%/chargemode/pv_charging/feed_in_limit",cpPvMinCurrent:"openWB/set/vehicle/template/charge_template/%/chargemode/pv_charging/min_current",cpPvMaxSoc:"openWB/set/vehicle/template/charge_template/%/chargemode/pv_charging/max_soc",cpPvMinSoc:"openWB/set/vehicle/template/charge_template/%/chargemode/pv_charging/min_soc",cpPvMinSocCurrent:"openWB/set/vehicle/template/charge_template/%/chargemode/pv_charging/min_soc_current",cpEtMaxPrice:"openWB/set/vehicle/template/charge_template/%/et/max_price",vhChargeTemplateId:"openWB/set/vehicle/%/charge_template",vhEvTemplateId:"openWB/set/vehicle/%/ev_template",shSetManual:"openWB/set/LegacySmartHome/config/set/Devices/%/mode",shSwitchOn:"openWB/set/LegacySmartHome/config/set/Devices/%/device_manual_control",socUpdate:"openWB/set/vehicle/%/get/force_soc_update",setSoc:"openWB/set/vehicle/%/soc_module/calculated_soc_state/manual_soc",priceCharging:"openWB/set/vehicle/template/charge_template/%/et/active",chargeTemplate:"openWB/set/chargepoint/%/set/charge_template"};function Mr(e,t,r=0){if(isNaN(r)){console.warn("Invalid index");return}let n=jE[e];if(!n){console.warn("No topic for update type "+e);return}n=n.replace("%",String(r)),typeof t==="number"?uc(n,JSON.stringify(+t)):uc(n,JSON.stringify(t))}function No(e){uc("openWB/set/command/"+Hm()+"/todo",JSON.stringify(e))}function St(e){uc(jE.chargeTemplate.replace("%",String(e)),JSON.stringify(Ye[e].chargeTemplate))}class s${id;name="Zähler";power=0;now={energy:0,energyPv:0,energyBat:0,pvPercentage:0};past={energy:0,energyPv:0,energyBat:0,pvPercentage:0};energy_imported=0;energy_exported=0;grid=!1;counterType="counter";type=yt.counter;color="var(--color-ctr7)";icon="Zähler";_showInGraph=!1;constructor(t){this.id=t}get showInGraph(){return this._showInGraph}set showInGraph(t){this._showInGraph=t,Qt()}}const ct=Dt(new Map);function a$(e,t,r=!1){if(ct.has(e))console.info("Duplicate counter message: "+e);else switch(ct.set(e,new s$(e)),ct.get(e).counterType=t,ct.get(e).grid=r,t){case"counter":ct.get(e).color=r?"var(--color-evu)":"var(--color-ctr"+(ct.size-1)+")";break;case"inverter":ct.get(e).color="var(--color-pv)";break;case"cp":ct.get(e).color="var(--color-charging)";break;case"bat":ct.get(e).color="var(--color-bat)";break}}function l$(e){switch(e){case"power":Pe.setPower("counters",[...ct.values()].filter(t=>t.showInGraph).reduce((t,r)=>t+r.power,0));break;case"energy":Pe.setEnergy("counters",[...ct.values()].filter(t=>!t.showInGraph).reduce((t,r)=>t+r.now.energy,0));break;default:console.error("Unknown category")}}let u$=class{_showRelativeArcs=!1;showTodayGraph=!0;_graphPreference="today";_usageStackOrder=0;_displayMode="dark";_liveGraphDuration=7200;_showGrid=!1;_smartHomeColors="normal";_decimalPlaces=1;_showQuickAccess=!0;_simpleCpList=!1;_shortCpList="no";_showAnimations=!0;_preferWideBoxes=!1;_maxPower=4e3;_fluidDisplay=!1;_showClock="off";_showButtonBar=!0;_showCounters=!1;_showVehicles=!1;_showStandardVehicle=!0;_showPrices=!1;_showInverters=!1;_alternativeEnergy=!1;_debug=!1;_lowerPriceBound=0;_upperPriceBound=0;_showPmLabels=!0;showRightButton=!0;showLeftButton=!0;animationDuration=300;animationDelay=100;zoomGraph=!1;zoomedWidget=1;countersToShow=[];constructor(){}get showRelativeArcs(){return this._showRelativeArcs}setShowRelativeArcs(t){this._showRelativeArcs=t}get graphPreference(){return this._graphPreference}set graphPreference(t){this._graphPreference=t,Qt()}setGraphPreference(t){this._graphPreference=t}get usageStackOrder(){return this._usageStackOrder}set usageStackOrder(t){this._usageStackOrder=t,Qt()}setUsageStackOrder(t){this._usageStackOrder=t}get displayMode(){return this._displayMode}setDisplayMode(t){this._displayMode=t,h$(t)}get liveGraphDuration(){return this._liveGraphDuration}setLiveGraphDuration(t){this._liveGraphDuration=t}get showGrid(){return this._showGrid}setShowGrid(t){this._showGrid=t}get decimalPlaces(){return this._decimalPlaces}setDecimalPlaces(t){this._decimalPlaces=t}get smartHomeColors(){return this._smartHomeColors}setSmartHomeColors(t){this._smartHomeColors=t,g$(t)}get showQuickAccess(){return this._showQuickAccess}set showQuickAccess(t){this._showQuickAccess=t,Qt()}setShowQuickAccess(t){this._showQuickAccess=t}get simpleCpList(){return this._simpleCpList}set simpleCpList(t){this._simpleCpList=t,Qt()}setSimpleCpList(t){this._simpleCpList=t}get shortCpList(){return this._shortCpList}set shortCpList(t){this._shortCpList=t,Qt()}setShortCpList(t){this._shortCpList=t}get showAnimations(){return this._showAnimations}set showAnimations(t){this._showAnimations=t,Qt()}setShowAnimations(t){this._showAnimations=t}get preferWideBoxes(){return this._preferWideBoxes}set preferWideBoxes(t){this._preferWideBoxes=t,Qt()}setPreferWideBoxes(t){this._preferWideBoxes=t}get maxPower(){return this._maxPower}set maxPower(t){this._maxPower=t,Qt()}setMaxPower(t){this._maxPower=t}get fluidDisplay(){return this._fluidDisplay}set fluidDisplay(t){this._fluidDisplay=t,Qt()}setFluidDisplay(t){this._fluidDisplay=t}get showClock(){return this._showClock}set showClock(t){this._showClock=t,Qt()}setShowClock(t){this._showClock=t}get debug(){return this._debug}set debug(t){this._debug=t,Qt()}setDebug(t){this._debug=t}get showButtonBar(){return this._showButtonBar}set showButtonBar(t){this._showButtonBar=t,Qt()}setShowButtonBar(t){this._showButtonBar=t}get showCounters(){return this._showCounters}setShowCounters(t){this._showCounters=t}get showVehicles(){return this._showVehicles}setShowVehicles(t){this._showVehicles=t}get showStandardVehicle(){return this._showStandardVehicle}setShowStandardVehicle(t){this._showStandardVehicle=t}get showPrices(){return this._showPrices}setShowPrices(t){this._showPrices=t}get showInverters(){return this._showInverters}setShowInverters(t){this._showInverters=t}get alternativeEnergy(){return this._alternativeEnergy}setAlternativeEnergy(t){this._alternativeEnergy=t}get lowerPriceBound(){return this._lowerPriceBound}setLowerPriceBound(t){this._lowerPriceBound=t}get upperPriceBound(){return this._upperPriceBound}setUpperPriceBound(t){this._upperPriceBound=t}get showPmLabels(){return this._showPmLabels}set showPmLabels(t){this._showPmLabels=t,Qt()}setShowPmLabels(t){this._showPmLabels=t}};const Ce=Dt(new u$);function VE(){y$();const e=dt("html");e.classed("theme-dark",Ce.displayMode=="dark"),e.classed("theme-light",Ce.displayMode=="light"),e.classed("theme-blue",Ce.displayMode=="blue"),e.classed("shcolors-standard",Ce.smartHomeColors=="standard"),e.classed("shcolors-advanced",Ce.smartHomeColors=="advanced"),e.classed("shcolors-normal",Ce.smartHomeColors=="normal")}const c$=992,cc=Dt({x:document.documentElement.clientWidth,y:document.documentElement.clientHeight});function f$(){cc.x=document.documentElement.clientWidth,cc.y=document.documentElement.clientHeight,VE()}const Ln=_e(()=>cc.x>=c$),zt={instant_charging:{mode:$r.instant_charging,name:"Sofort",color:"var(--color-charging)",icon:"fa-bolt"},pv_charging:{mode:$r.pv_charging,name:"PV",color:"var(--color-pv)",icon:"fa-solar-panel"},scheduled_charging:{mode:$r.scheduled_charging,name:"Zielladen",color:"var(--color-battery)",icon:"fa-bullseye"},eco_charging:{mode:$r.eco_charging,name:"Eco",color:"var(--color-eco)",icon:"fa-coins"},stop:{mode:$r.stop,name:"Stop",color:"var(--color-fg)",icon:"fa-power-off"}};class d${batterySoc=0;isBatteryConfigured=!0;chargeMode="0";_pvBatteryPriority="ev_mode";displayLiveGraph=!0;isEtEnabled=!0;etMaxPrice=0;etCurrentPrice=0;cpDailyExported=0;evuId=0;etProvider="";country="de";get pvBatteryPriority(){return this._pvBatteryPriority}set pvBatteryPriority(t){this._pvBatteryPriority=t,Mr("pvBatteryPriority",t)}updatePvBatteryPriority(t){this._pvBatteryPriority=t}}function Qt(){m$()}function h$(e){const t=dt("html");t.classed("theme-dark",e=="dark"),t.classed("theme-light",e=="light"),t.classed("theme-blue",e=="blue"),Qt()}function p$(){Ce.maxPower=Pe.getPower("evuIn")+Pe.getPower("pv")+Pe.getPower("batOut"),Qt()}function g$(e){const t=dt("html");t.classed("shcolors-normal",e=="normal"),t.classed("shcolors-standard",e=="standard"),t.classed("shcolors-advanced",e=="advanced")}const xn={chargemode:"Der Lademodus für das Fahrzeug an diesem Ladepunkt",vehicle:"Das Fahrzeug, das an diesem Ladepounkt geladen wird",locked:"Für das Laden sperren",priority:"Fahrzeuge mit Priorität werden bevorzugt mit mehr Leistung geladen, falls verfügbar",timeplan:"Das Laden nach Zeitplan für dieses Fahrzeug aktivieren",minsoc:"Immer mindestens bis zum eingestellten Ladestand laden. Wenn notwendig mit Netzstrom.",minpv:"Durchgehend mit mindestens dem eingestellten Strom laden. Wenn notwendig mit Netzstrom.",pricebased:"Laden bei dynamischem Stromtarif, wenn eingestellter Maximalpreis unterboten wird.",pvpriority:"Ladepriorität bei PV-Produktion. Bevorzung von Fahzeugen, Speicher, oder Fahrzeugen bis zum eingestellten Mindest-Ladestand. Die Einstellung ist für alle Ladepunkte gleich.",chargeTemplate:"Ladeprofil für dieses Fahrzeug.",ecoMinCurrent:"Minimaler Ladestrom beim Preisladen. Bei PV-Überschuss kann der Strom höher sein."};function m$(){const e={};e.hideSH=[...Ct.values()].filter(t=>!t.showInGraph).map(t=>t.id),e.showCtr=[...ct.values()].filter(t=>t.showInGraph).map(t=>t.id.toString()),e.showLG=Ce.graphPreference=="live",e.stackO=Ce.usageStackOrder,e.maxPow=Ce.maxPower,e.showQA=Ce.showQuickAccess,e.simpleCP=Ce.simpleCpList,e.shortCP=Ce.shortCpList,e.animation=Ce.showAnimations,e.wideB=Ce.preferWideBoxes,e.fluidD=Ce.fluidDisplay,e.clock=Ce.showClock,e.showButtonBar=Ce.showButtonBar,e.lowerP=Ce.lowerPriceBound,e.upperP=Ce.upperPriceBound,e.pmLabels=Ce.showPmLabels,e.debug=Ce.debug,document.cookie="openWBColorTheme="+JSON.stringify(e)+";max-age=16000000;"}function y$(){const t=document.cookie.split(";").filter(r=>r.split("=")[0]==="openWBColorTheme");if(t.length>0){const r=JSON.parse(t[0].split("=")[1]);r.hideSH!==void 0&&r.hideSH.forEach(n=>{Ct.get(n)==null&&Im(n),Ct.get(n).setShowInGraph(!1)}),r.showCtr!==void 0&&(Ce.countersToShow=r.showCtr.map(n=>+n)),r.showLG!==void 0&&Ce.setGraphPreference(r.showLG?"live":"today"),r.maxPow!==void 0&&Ce.setMaxPower(+r.maxPow),r.stackO!==void 0&&Ce.setUsageStackOrder(r.stackO),r.showQA!==void 0&&Ce.setShowQuickAccess(r.showQA),r.simpleCP!==void 0&&Ce.setSimpleCpList(r.simpleCP),r.shortCP!==void 0&&Ce.setShortCpList(r.shortCP),r.animation!=null&&Ce.setShowAnimations(r.animation),r.wideB!=null&&Ce.setPreferWideBoxes(r.wideB),r.fluidD!=null&&Ce.setFluidDisplay(r.fluidD),r.clock!=null&&Ce.setShowClock(r.clock),r.showButtonBar!==void 0&&Ce.setShowButtonBar(r.showButtonBar),r.lowerP!==void 0&&Ce.setLowerPriceBound(r.lowerP),r.upperP!==void 0&&Ce.setUpperPriceBound(r.upperP),r.pmLabels!==void 0&&Ce.setShowPmLabels(r.pmLabels),r.debug!==void 0&&Ce.setDebug(r.debug)}}const dr=500,Kr=500,Ze={top:15,right:20,bottom:10,left:25};class v${data=[];_graphMode="";waitForData=!0;get graphMode(){return this._graphMode}set graphMode(t){this._graphMode=t}get usePastData(){return this.graphMode!="live"&&this.graphMode!="today"}get graphScope(){return this.usePastData?"past":"now"}}const Te=Dt(new v$),WE=et(Am),oi=_e(()=>[0,dr-Ze.left-2*Ze.right].map(e=>WE.value.applyX(e)));let fc=!0,Ga=!0;function z0(){fc=!1}function H0(){Ga=!1}function b$(e){Ga=e}function al(e){if(Te.graphMode=="live"&&e.length>0){const t=new Date().getTime()-Ce.liveGraphDuration*1e3;Te.data=e.filter(r=>r.date>t),Te.waitForData=!1}else Te.data=e,Te.waitForData=!1}const Wt=Dt({refreshTopicPrefix:"openWB/graph/alllivevaluesJson",updateTopic:"openWB/graph/lastlivevaluesJson",configTopic:"openWB/graph/config/#",initialized:!1,initCounter:0,graphRefreshCounter:0,rawDataPacks:[],duration:0,activate(e){this.unsubscribeUpdates(),this.subscribeRefresh(),e&&(Te.data=[]),Te.waitForData=!0,Io(this.configTopic),this.initialized=!1,this.initCounter=0,this.graphRefreshCounter=0,this.rawDataPacks=[],w$(),Ps.value=!0},deactivate(){this.unsubscribeRefresh(),this.unsubscribeUpdates(),Ss(this.configTopic)},subscribeRefresh(){for(let e=1;e<17;e++)Io(this.refreshTopicPrefix+e)},unsubscribeRefresh(){for(let e=1;e<17;e++)Ss(this.refreshTopicPrefix+e)},subscribeUpdates(){Io(this.updateTopic)},unsubscribeUpdates(){Ss(this.updateTopic)}}),$t=Dt({topic:"openWB/log/daily/#",date:new Date,activate(e){if(Te.graphMode=="day"||Te.graphMode=="today"){Te.graphMode=="today"&&(this.date=new Date);const t=this.date.getFullYear().toString()+(this.date.getMonth()+1).toString().padStart(2,"0")+this.date.getDate().toString().padStart(2,"0");this.topic="openWB/log/daily/"+t,Io(this.topic),e&&(Te.data=[]),Te.waitForData=!0,No({command:"getDailyLog",data:{date:t}})}},deactivate(){Ss(this.topic)},back(){this.date=new Date(this.date.setTime(this.date.getTime()-864e5))},forward(){this.date=new Date(this.date.setTime(this.date.getTime()+864e5))},setDate(e){this.date=e},getDate(){return this.date}}),Cn=Dt({topic:"openWB/log/monthly/#",month:new Date().getMonth()+1,year:new Date().getFullYear(),activate(e){const t=this.year.toString()+this.month.toString().padStart(2,"0");Te.data=[],Io(this.topic),e&&(Te.data=[]),Te.waitForData=!0,No({command:"getMonthlyLog",data:{date:t}})},deactivate(){Ss(this.topic)},back(){this.month-=1,this.month<1&&(this.month=12,this.year-=1),this.activate()},forward(){const e=new Date;e.getFullYear()==this.year?this.month-112&&(this.month=1,this.year+=1)),this.activate()},getDate(){return new Date(this.year,this.month)}}),ji=Dt({topic:"openWB/log/yearly/#",month:new Date().getMonth()+1,year:new Date().getFullYear(),activate(e){const t=this.year.toString();Io(this.topic),e&&(Te.data=[]),Te.waitForData=!0,No({command:"getYearlyLog",data:{date:t}})},deactivate(){Ss(this.topic)},back(){this.year-=1,this.activate()},forward(){this.year{(t.length==0||t.includes(s))&&(Pe.setEnergy("evuIn",l.energy_imported),Pe.setEnergy("evuOut",l.energy_exported))}),Pe.setEnergy("pv",e.pv.all.energy_exported),e.bat.all&&(Pe.setEnergy("batIn",e.bat.all.energy_imported),Pe.setEnergy("batOut",e.bat.all.energy_exported)),Object.entries(e.cp).forEach(([s,l])=>{s=="all"?hd(l,"charging"):hd(l,s)}),Pe.setEnergy("devices",0);let r=0,n=0;Object.entries(e.sh).forEach(([s,l])=>{Pe.setEnergy(s,l.energy_imported),Pe.calculatePvPercentage(s),Ct.get(s).countAsHouse||(Pe.setEnergy("devices",Pe.getEnergy("devices")+l.energy_imported),r+=Pe.getItem(s)[Te.graphScope].energyPv,n+=Pe.getItem(s)[Te.graphScope].energyBat)}),Pe.setEnergyPv("devices",r),Pe.setEnergyBat("devices",n),Pe.calculatePvPercentage("devices"),Pe.setEnergy("counters",0);let i=0,o=0,a=0;Object.entries(e.counter).forEach(([s,l])=>{!l.grid&&ct.get(+s.slice(7))&&ct.get(+s.slice(7)).showInGraph&&(hd(l,s),i+=l.energy_imported,o+=l.energy_imported_pv,a+=l.energy_imported_bat)}),Pe.setEnergy("counters",i),Pe.setEnergyPv("counters",o),Pe.setEnergyBat("counters",a),Pe.calculatePvPercentage("counters"),Pe.setEnergy("house",0),e.hc&&e.hc.all?(Pe.setEnergy("house",e.hc.all.energy_imported),e.hc.all.energy_imported_pv!=null&&(Pe.setEnergyPv("house",e.hc.all.energy_imported_pv),Pe.setEnergyBat("house",e.hc.all.energy_imported_bat))):Pe.calculateHouseEnergy()}Ps.value=!0}const cn=_e(()=>{const e=pn(Te.data,t=>new Date(t.date));return e[0]&&e[1]?Th().domain(e).range([0,dr-Ze.left-2*Ze.right]):Hi().range([0,0])});function hd(e,t){Pe.setEnergy(t,e.energy_imported),Pe.setEnergyPv(t,e.energy_imported_pv),Pe.setEnergyBat(t,e.energy_imported_bat),Pe.calculatePvPercentage(t)}function w$(){Pe.items.forEach(e=>{e.now.energyPv=0,e.now.energyBat=0,e.now.pvPercentage=0})}const Vi=_e(()=>{const e=pn(Te.data,t=>t.date);return e[1]?Va().domain(Array.from({length:e[1]},(t,r)=>r+1)).paddingInner(.4).range([0,dr-Ze.left-20]):Va().range([0,0])});function Qc(){switch(Te.graphMode){case"live":Te.graphMode="today",Ce.showRightButton=!0,Ht();break;case"today":Te.graphMode="day",$t.deactivate(),$t.back(),$t.activate(),Ht();break;case"day":$t.back(),Ht();break;case"month":Cn.back();break;case"year":ji.back();break}}function Ym(){const e=new Date;switch(Te.graphMode){case"live":break;case"today":Te.graphMode="live",Ce.showRightButton=!1,Ht();break;case"day":$t.forward(),$t.date.getDate()==e.getDate()&&$t.date.getMonth()==e.getMonth()&&$t.date.getFullYear()==e.getFullYear()&&(Te.graphMode="today"),Ht();break;case"month":Cn.forward();break;case"year":ji.forward();break}}function Km(){switch(Te.graphMode){case"live":Qc();break;case"day":case"today":Te.graphMode="month",Ht();break;case"month":Te.graphMode="year",Ht();break}}function Xm(){switch(Te.graphMode){case"year":Te.graphMode="month",Ht();break;case"month":Te.graphMode="today",Ht();break;case"today":case"day":Te.graphMode="live",Ht();break}}function q0(e){if(Te.graphMode=="day"||Te.graphMode=="today"){$t.setDate(e);const t=new Date;$t.date.getDate()==t.getDate()&&$t.date.getMonth()==t.getMonth()&&$t.date.getFullYear()==t.getFullYear()?Te.graphMode="today":Te.graphMode="day",Ht()}}const sn=et(new Map),Xr=Dt({evuIn:{name:"Netz",color:"var(--color-evu)",icon:""},pv:{name:"PV",color:"var(--color-pv",icon:""},batOut:{name:"Bat >",color:"var(--color-battery)",icon:""},evuOut:{name:"Export",color:"var(--color-export)",icon:""},charging:{name:"Laden",color:"var(--color-charging)",icon:""},devices:{name:"Geräte",color:"var(--color-devices)",icon:""},counters:{name:"Zähler",color:"var(--color-counters)",icon:""},batIn:{name:"> Bat",color:"var(--color-battery)",icon:""},house:{name:"Haus",color:"var(--color-house)",icon:""},price:{name:"Strompreis",color:"crimson",icon:""}}),G0=new Map([["pv",["var(--color-pv1)","var(--color-pv2)","var(--color-pv3)","var(--color-pv4)","var(--color-pv5)","var(--color-pv6)","var(--color-pv7)","var(--color-pv8)","var(--color-pv9) "]],["bat",["var(--color-bat1)","var(--color-bat2)","var(--color-bat3)","var(--color-bat4)","var(--color-bat5)","var(--color-bat6)","var(--color-bat7)","var(--color-bat8)","var(--color-bat9) "]],["cp",["var(--color-cp1)","var(--color-cp2)","var(--color-cp3)","var(--color-cp4)","var(--color-cp5)","var(--color-cp6)","var(--color-cp7)","var(--color-cp8) "]],["counter",["var(--color-ctr1)","var(--color-ctr2)","var(--color-ctr3)","var(--color-ctr4)","var(--color-ctr5)","var(--color-ctr6)","var(--color-ctr7)","var(--color-ctr8)","var(--color-ctr9)","var(--color-ctr10) "]],["sh",["var(--color-sh1)","var(--color-sh2)","var(--color-sh3)","var(--color-sh4)","var(--color-sh5)","var(--color-sh6)","var(--color-sh7)","var(--color-sh8)","var(--color-sh9) "]]]);function zE(e,t){if(G0.has(e)){const r=G0.get(e);return r[t%r.length]}return"var(--color-charging)"}class S${_items=new Map;constructor(){this.addItem("evuIn"),this.addItem("pv"),this.addItem("batOut"),this.addItem("evuOut"),this.addItem("charging"),this.addItem("devices"),this.addItem("counters"),this.addItem("batIn"),this.addItem("house")}get items(){return this._items}get usageSummary(){return[this._items.get("evuOut"),this._items.get("charging"),this._items.get("devices"),this._items.get("counters"),this._items.get("batIn"),this._items.get("house")]}get sourceSummary(){return[this._items.get("evuIn"),this._items.get("pv"),this._items.get("batOut")]}keys(){return Array.from(this._items.keys())}values(){return Array.from(this._items.values())}getItem(t){return this._items.get(t)}addItem(t,r,n,i){let o;if(r)o=r;else switch(t){case"evuIn":o=yt.counter;break;case"pv":o=yt.inverter;break;case"batOut":o=yt.battery;break;case"evuOut":o=yt.counter;break;case"charging":o=yt.chargepoint;break;case"devices":o=yt.device;break;case"counters":o=yt.counter;break;case"batIn":o=yt.battery;break;case"house":o=yt.house;break;default:o=yt.counter}this._items.set(t,i?Co(t,o,i):Co(t,o)),n&&(this._items.get(t).name=n.name,this._items.get(t).icon=n.icon,this._items.get(t).color=n.color)}duplicateItem(t,r){let n=Co(t,r.type);n={...r},this._items.set(t,n)}getPower(t){return this._items.get(t).power}setPower(t,r){this.items.has(t)||console.error(`item ${t} not found in item list`),this._items.get(t).power=r}getEnergy(t){return this.items.has(t)||this.addItem(t),Te.usePastData?this._items.get(t).past.energy:this._items.get(t).now.energy}setEnergy(t,r){this.items.has(t)||console.error(`item ${t} not found in item list`),Te.usePastData?this._items.get(t).past.energy=r:this._items.get(t).now.energy=r}setEnergyPv(t,r){this.items.has(t)||this.addItem(t),Te.usePastData?this._items.get(t).past.energyPv=r:this._items.get(t).now.energyPv=r}setEnergyBat(t,r){this.items.has(t)||this.addItem(t),Te.usePastData?this._items.get(t).past.energyBat=r:this._items.get(t).now.energyBat=r}setPvPercentage(t,r){this.items.has(t)||console.error(`item ${t} not found in item list`),Te.usePastData?this._items.get(t).past.pvPercentage=r<=100?r:100:this._items.get(t).now.pvPercentage=r<=100?r:100}calculatePvPercentage(t){this.items.has(t)||console.error(`item ${t} not found in item list`),this._items.get(t)[Te.graphScope].pvPercentage=Math.round((this.items.get(t)[Te.graphScope].energyPv+this.items.get(t)[Te.graphScope].energyBat)/this.items.get(t)[Te.graphScope].energy*100)}calculateHouseEnergy(t=!1){t?this._items.get("house").past.energy=this._items.get("evuIn").past.energy+this._items.get("pv").past.energy+this._items.get("batOut").past.energy-this._items.get("evuOut").past.energy-this._items.get("batIn").past.energy-this._items.get("charging").past.energy-this._items.get("devices").past.energy-this._items.get("counters").past.energy:this._items.get("house").now.energy=this._items.get("evuIn").now.energy+this._items.get("pv").now.energy+this._items.get("batOut").now.energy-this._items.get("evuOut").now.energy-this._items.get("batIn").now.energy-this._items.get("charging").now.energy-this._items.get("devices").now.energy-this._items.get("counters").now.energy}}const Pe=Dt(new S$);function Qm(){Pe.values().forEach(e=>{e.past.energy=0,e.past.energyPv=0,e.past.energyBat=0,e.past.pvPercentage=0})}Co("evuIn",yt.counter),Co("pv",yt.pvSummary),Co("batOut",yt.batterySummary);const wt=Dt(new d$),Ps=et(!1);function Co(e,t,r){return{name:Xr[e]?Xr[e].name:"item",type:t,power:0,now:{energy:0,energyPv:0,energyBat:0,pvPercentage:0},past:{energy:0,energyPv:0,energyBat:0,pvPercentage:0},color:r||(Xr[e]?Xr[e].color:"var(--color-charging)"),icon:Xr[e]?Xr[e].icon:"",showInGraph:!0}}const Eg=et(new Date),Jt=et(new Map),E$=e=>{Jt.value.set(e,new H1(e)),x$()};function x$(){[...Jt.value.values()].sort((t,r)=>t.id-r.id).forEach((t,r)=>{t.color=zE("pv",r)})}class T${id;name="Speicher";type=yt.battery;color="var(--color-battery)";dailyYieldExport=0;dailyYieldImport=0;monthlyYieldExport=0;monthlyYieldImport=0;yearlyYieldExport=0;yearlyYieldImport=0;exported=0;faultState=0;faultStr="";imported=0;power=0;soc=0;now={energy:0,energyPv:0,energyBat:0,pvPercentage:0};past={energy:0,energyPv:0,energyBat:0,pvPercentage:0};showInGraph=!0;icon="Speicher";constructor(t){this.id=t}}const Pt=et(new Map),HE=e=>{Pt.value.set(e,new T$(e))};function A$(){Pt.value=new Map}class I${active=!1;etPriceList=new Map;etProvider="";etMaxPrice=0;country="de";unit="ct";get etCurrentPriceString(){if(this.etPriceList.size>0){const[t]=this.etPriceList.values();return(Math.round(t*10)/10).toFixed(1)+(wt.country==="ch"?" Rp":" ct")}else return"---"}maxPriceForDuration(t,r){if(this.etPriceList.size>0){const n=r?[...this.etPriceList.entries()].filter(o=>o[0]<=r).sort((o,a)=>o[1]-a[1]):[...this.etPriceList.entries()].sort((o,a)=>o[1]-a[1]);let i=0;for(let o=0;o=t)return n[o][1];return-1}else return-1}maxDate(){return this.etPriceList.size>0?Array.from(this.etPriceList.keys()).reduce((t,r)=>t>r?t:r):null}}const mt=Dt(new I$);function Fr(e,t=1){let r;if(e>=1e3&&t<4){switch(t){case 0:r=Math.round(e/1e3);break;case 1:r=Math.round(e/100)/10;break;case 2:r=Math.round(e/10)/100;break;case 3:r=Math.round(e)/1e3;break;default:r=Math.round(e/100)/10;break}return r?.toLocaleString(void 0,{minimumFractionDigits:t})+" kW"}else return Math.round(e).toLocaleString()+" W"}function qi(e,t=1,r=!1){let n;if(e>1e6&&(r=!0,e=e/1e3),e>=1e3&&t<4){switch(t){case 0:n=Math.round(e/1e3);break;case 1:n=Math.round(e/100)/10;break;case 2:n=Math.round(e/10)/100;break;case 3:n=Math.round(e)/1e3;break;default:n=Math.round(e/100)/10;break}return n.toLocaleString(void 0,{minimumFractionDigits:t})+(r?" MWh":" kWh")}else return Math.round(e).toLocaleString()+(r?" kWh":" Wh")}function C$(e){const t=Math.floor(e/3600),r=(e%3600/60).toFixed(0);return t>0?t+"h "+r+" min":r+" min"}function ka(e,t=!1){return t?e.toLocaleTimeString(["de-DE"],{weekday:"short",hour:"2-digit",minute:"2-digit"}):e.toLocaleTimeString(["de-DE"],{hour:"2-digit",minute:"2-digit"})}function M$(e,t){return["Jan","Feb","März","April","Mai","Juni","Juli","Aug","Sep","Okt","Nov","Dez"][e]+" "+t}function k$(e){return e!=999?(Math.round(e*10)/10).toLocaleString(void 0,{minimumFractionDigits:1})+"°":"-"}function P$(e){return`${e.toFixed(2)} ${mt.unit}`}function O$(e){const t=document.documentElement,r=getComputedStyle(t);e=e.slice(4,-1);const n=r.getPropertyValue(e).trim(),i=parseInt(n.slice(1,3),16),o=parseInt(n.slice(3,5),16),a=parseInt(n.slice(5,7),16);return(i*299+o*587+a*114)/1e3>125?"black":"white"}const L$={y:"0",class:"popup-title"},R$={dy:"1em",x:"0",class:"popup-content"},N$=We({__name:"PMPopup",props:{consumer:{}},setup(e){const t=e;function r(n){return n.length>8?n.substring(0,8)+".":n}return(n,i)=>(se(),Se("g",null,[U("rect",{x:"-40",y:"-17",rx:"10",ry:"10",width:"80",height:"40","corner-radius":"20",filter:"url(#f1)",class:"popup",style:ot({fill:t.consumer.color})},null,4),U("text",{dy:"0",x:"0",y:"0",class:"popup-textbox",style:ot({fill:le(O$)(t.consumer.color)})},[U("tspan",L$,$e(r(t.consumer.name)),1),U("tspan",R$,$e(le(Fr)(Math.abs(t.consumer.power))),1)],4)]))}}),Xe=(e,t)=>{const r=e.__vccOpts||e;for(const[n,i]of t)r[n]=i;return r},$$=Xe(N$,[["__scopeId","data-v-a154651e"]]),D$={key:0},B$=["d"],F$=["id","d","fill","stroke"],U$={key:1},j$=["transform"],qE=We({__name:"PMArc",props:{upperArc:{type:Boolean},plotdata:{},radius:{},categoriesToShow:{}},setup(e){const t=e,r=_e(()=>Ce.showRelativeArcs?0:4),n=Math.PI/40,i=_e(()=>t.upperArc?Dv().value(u=>Math.abs(u.power)).startAngle(-Math.PI/2+n).endAngle(Math.PI/2-n).sort(null):Dv().value(u=>u.power).startAngle(Math.PI*1.5-n).endAngle(Math.PI/2+n).sort(null)),o=_e(()=>$v().innerRadius(t.radius*.87).outerRadius(t.radius).cornerRadius(r.value));var a=$v().startAngle(t.upperArc?-Math.PI/2+n:Math.PI*1.5-n).endAngle(t.upperArc?Math.PI/2-n:Math.PI/2+n).innerRadius(t.radius*.87).outerRadius(t.radius).cornerRadius(0);function s(u){return u.data.name=="empty"?u.data.power>0?"var(--color-scale)":"null":"var(--color-bg)"}const l=_e(()=>t.plotdata.reduce((u,c)=>u+Math.abs(c.power),0));return(u,c)=>(se(),Se(Ge,null,[c[0]||(c[0]=U("g",null,[U("defs",null,[U("filter",{id:"f1"},[U("feDropShadow",{dx:"1",dy:"1",rx:"10",ry:"10",stdDeviation:"1","flood-opacity":"0.7","flood-color":"var(--color-axis)"})])])],-1)),le(Ce).showRelativeArcs?(se(),Se("g",D$,[U("path",{d:le(a)(0),fill:"var(--color-bg)",stroke:"var(--color-menu)"},null,8,B$)])):Me("",!0),(se(!0),Se(Ge,null,it(i.value(t.plotdata.filter(f=>f.power!=0)),f=>(se(),Se("g",{id:"test",key:f.data.name},[f.data.name!="empty"?(se(),Se("path",{key:0,id:`segment-${f.data.name}`,class:"segment",d:o.value(f),fill:f.data.color,stroke:s(f)},null,8,F$)):Me("",!0)]))),128)),le(Ce).showPmLabels?(se(),Se("g",U$,[(se(!0),Se(Ge,null,it(i.value(e.plotdata.filter(f=>f.power!=0)),f=>(se(),Se("g",{key:f.data.name,transform:"translate("+o.value.centroid(f)+")"},[e.categoriesToShow.includes(f.data.type)&&Math.abs(f.data.power)/l.value>.06&&f.data.name!="empty"?(se(),De($$,{key:0,consumer:f.data},null,8,["consumer"])):Me("",!0)],8,j$))),128))])):Me("",!0)],64))}}),V$=We({__name:"PMSourceArc",props:{radius:{},cornerRadius:{},circleGapSize:{},emptyPower:{}},setup(e){const t=e,r=[yt.inverter,yt.battery],n=_e(()=>({name:"empty",type:yt.counter,power:t.emptyPower,now:{energy:0,energyPv:0,energyBat:0,pvPercentage:0},past:{energy:0,energyPv:0,energyBat:0,pvPercentage:0},energy:0,energyPv:0,energyBat:0,pvPercentage:0,color:"var(--color-bg)",icon:"",showInGraph:!0})),i=_e(()=>[Pe.getItem("evuIn")].concat(o.value,a.value,n.value)),o=_e(()=>Jt.value.size>1?[...Jt.value.values()].filter(s=>s.power<0).sort((s,l)=>s.power-l.power):Pe.getItem("pv").power>0?[Pe.getItem("pv")]:[]),a=_e(()=>Pt.value.size>1?[...Pt.value.values()].filter(s=>s.power<0).sort((s,l)=>s.power-l.power):[Pe.getItem("batOut")]);return yA(()=>{let s=Pe.getPower("pv")+Pe.getPower("evuIn")+Pe.getPower("batOut");s>Ce.maxPower&&(Ce.maxPower=s)}),(s,l)=>(se(),De(qE,{"upper-arc":!0,plotdata:i.value,radius:t.radius,"categories-to-show":r},null,8,["plotdata","radius"]))}}),W$=We({__name:"PMUsageArc",props:{radius:{},cornerRadius:{},circleGapSize:{},emptyPower:{}},setup(e){const t=e,r=[yt.chargepoint,yt.battery,yt.device,yt.counter],n=_e(()=>({name:"empty",type:yt.counter,power:t.emptyPower,now:{energy:0,energyPv:0,energyBat:0,pvPercentage:0},past:{energy:0,energyPv:0,energyBat:0,pvPercentage:0},color:"var(--color-bg)",icon:"",showInGraph:!0})),i=_e(()=>[Pe.getItem("evuOut")].concat(o.value,a.value,l.value,s.value,u.value,Pe.getItem("house"),n.value)),o=_e(()=>Object.values(Ye).length>1?Object.values(Ye).sort((c,f)=>f.power-c.power):[Pe.getItem("charging")]),a=_e(()=>{let c=0;for(const h of Ct.values())h.configured&&!h.countAsHouse&&!h.showInGraph&&(c+=h.power);const f={name:"Geräte",type:yt.device,power:c,now:{energy:0,energyPv:0,energyBat:0,pvPercentage:0},past:{energy:0,energyPv:0,energyBat:0,pvPercentage:0},color:"var(--color-devices)",icon:"",showInGraph:!0};let d=[...Ct.values()].filter(h=>h.configured);return d.length>1?[f].concat(d.filter(h=>!h.countAsHouse&&h.showInGraph).sort((h,p)=>p.power-h.power)):[Pe.getItem("devices")]}),s=_e(()=>Pt.value.size>1?[...Pt.value.values()].filter(c=>c.power>0).sort((c,f)=>f.power-c.power):Pt.value.size>0?[Pe.getItem("batIn")]:[]),l=_e(()=>ct.size>0?[...ct.values()].filter(c=>c.showInGraph&&c.power>0).sort((c,f)=>f.power-c.power):[]),u=_e(()=>Jt.value.size>1?[...Jt.value.values()].filter(c=>c.power>0).sort((c,f)=>c.power-f.power):Pe.getItem("pv").power<0?[Pe.getItem("pv")]:[]);return(c,f)=>(se(),De(qE,{"upper-arc":!1,plotdata:i.value,radius:t.radius,"categories-to-show":r},null,8,["plotdata","radius"]))}}),ll=We({__name:"FormatWatt",props:{watt:{}},setup(e){const t=e,r=_e(()=>Fr(t.watt,Ce.decimalPlaces));return(n,i)=>$e(r.value)}}),z$={key:0,id:"pmLabel"},H$=["x","y","fill","text-anchor"],q$=22,Sn=We({__name:"PMLabel",props:{x:{},y:{},data:{},props:{},anchor:{},labeltext:{},labelicon:{},labelcolor:{}},setup(e){const t=e,r=_e(()=>t.labeltext?t.labeltext:t.props?t.props.icon+" ":t.labelicon?t.labelicon+" ":""),n=_e(()=>t.labelcolor?t.labelcolor:t.props?t.props.color:""),i=_e(()=>!t.data||t.data.power>0),o=_e(()=>t.labeltext?"":"fas");return(a,s)=>i.value?(se(),Se("g",z$,[U("text",{x:e.x,y:e.y,fill:n.value,"text-anchor":e.anchor,"font-size":q$,class:"pmLabel"},[U("tspan",{class:Qe(o.value)},$e(r.value),3),U("tspan",null,[e.data!==void 0?(se(),De(ll,{key:0,watt:e.data.power},null,8,["watt"])):Me("",!0)])],8,H$)])):Me("",!0)}}),G$={class:"wb-widget p-0 m-0 shadow"},Y$={class:"d-flex justify-content-between"},K$={class:"m-4 me-0 mb-0"},X$={class:"p-4 pb-0 ps-0 m-0",style:{"text-align":"right"}},Q$={class:"px-4 pt-4 pb-2 wb-subwidget"},J$={class:"row"},Z$={class:"col m-0 p-0"},eD={class:"container-fluid m-0 p-0"},tD={key:0},rD={class:"px-4 py-2 wb-subwidget"},nD={class:"row"},iD={class:"col"},oD={class:"container-fluid m-0 p-0"},ul=We({__name:"WBWidget",props:{variableWidth:{type:Boolean},fullWidth:{type:Boolean}},setup(e){const t=e,r=_e(()=>t.fullWidth?"col-12":t.variableWidth&&Ce.preferWideBoxes?"col-lg-6":"col-lg-4");return(n,i)=>(se(),Se("div",{class:Qe(["p-2 m-0 d-flex",r.value])},[U("div",G$,[U("div",Y$,[U("h3",K$,[It(n.$slots,"title",{},()=>[i[0]||(i[0]=U("div",{class:"p-0"},"(title goes here)",-1))]),It(n.$slots,"subtitle")]),U("div",X$,[It(n.$slots,"buttons")])]),U("div",Q$,[U("div",J$,[U("div",Z$,[U("div",eD,[It(n.$slots,"default")])])])]),n.$slots.footer!=null?(se(),Se("div",tD,[i[1]||(i[1]=U("hr",null,null,-1)),U("div",rD,[U("div",nD,[U("div",iD,[U("div",oD,[It(n.$slots,"footer")])])])])])):Me("",!0)])],2))}}),sD={id:"powermeter",class:"p-0 m-0"},aD=["viewBox"],lD=["transform"],uD=["x"],cD=["y"],Wn=500,zn=20,Y0=20,fD=We({__name:"PowerMeter",setup(e){const t=Wn,r=Math.PI/40,n=[[4],[4,6],[1,4,6],[0,2,4,6],[0,2,3,5,6]],i=[{x:-85,y:t/2*1/5},{x:0,y:t/2*1/5},{x:85,y:t/2*1/5},{x:-85,y:t/2*2/5},{x:0,y:t/2*2/5},{x:85,y:t/2*2/5},{x:0,y:t/2*3/5}],o=_e(()=>Wn/2-zn),a=_e(()=>{let v="",g=Pe.sourceSummary.filter(m=>m.power>0);return g.length==1&&g[0].name=="PV"?v="Aktueller Verbrauch: ":v="Bezug/Verbrauch: ",v+Fr(Pe.getPower("house")+Pe.getPower("charging")+Pe.getPower("devices")+Pe.getPower("batIn")+Pe.getPower("counters"),Ce.decimalPlaces)}),s=_e(()=>{let v=Pe.getPower("pv")+Pe.getPower("evuIn")+Pe.getPower("batOut");return Ce.maxPower>v?Fr(Ce.maxPower,Ce.decimalPlaces):Fr(v,Ce.decimalPlaces)}),l=_e(()=>Object.values(Ye)),u=_e(()=>{let v=0;return Ce.showRelativeArcs&&(v=Ce.maxPower-(Pe.getPower("pv")+Pe.getPower("evuIn")+Pe.getPower("batOut"))),v<0?0:v}),c=_e(()=>[Pe.getItem("evuOut"),Pe.getItem("charging"),Pe.getItem("devices"),Pe.getItem("batIn"),Pe.getItem("house"),Pe.getItem("counters")].filter(v=>v.power>0).slice(0,5)),f=_e(()=>n[c.value.length-1]);function d(v){return i[f.value[v]]}function h(v){return v.length>12?v.slice(0,11)+".":v}const p=_e(()=>{const[v]=mt.etPriceList.values();return Math.round(v*10)/10});function y(){Ce.showPmLabels=!Ce.showPmLabels}return(v,g)=>(se(),De(ul,{"full-width":!0},{title:Ae(()=>[...g[0]||(g[0]=[Ke(" Aktuell ",-1)])]),default:Ae(()=>[U("figure",sD,[(se(),Se("svg",{viewBox:"0 0 "+Wn+" "+le(t)},[U("g",{transform:"translate("+Wn/2+","+le(t)/2+")"},[U("g",null,[we(V$,{radius:o.value,"corner-radius":Y0,"circle-gap-size":r,"empty-power":u.value},null,8,["radius","empty-power"]),we(W$,{radius:o.value,"corner-radius":Y0,"circle-gap-size":r,"empty-power":u.value},null,8,["radius","empty-power"]),we(Sn,{x:0,y:-le(t)/10*2,data:le(Pe).getItem("pv"),props:le(Xr).pv,anchor:"middle",config:le(Ce)},null,8,["y","data","props","config"]),we(Sn,{x:0,y:-le(t)/10*3,data:le(Pe).getItem("evuIn"),props:le(Xr).evuIn,anchor:"middle",config:le(Ce)},null,8,["y","data","props","config"]),we(Sn,{x:0,y:-le(t)/10,data:le(Pe).getItem("batOut"),props:le(Xr).batOut,anchor:"middle",config:le(Ce)},null,8,["y","data","props","config"]),le(mt).active?(se(),De(Sn,{key:0,x:0,y:-le(t)/10,data:le(Pe).getItem("batOut"),props:le(Xr).batOut,anchor:"middle",config:le(Ce)},null,8,["y","data","props","config"])):Me("",!0),(se(!0),Se(Ge,null,it(c.value,(m,b)=>(se(),De(Sn,{key:b,x:d(b).x,y:d(b).y,data:m,labelicon:m.icon,labelcolor:m.color,anchor:"middle",config:le(Ce)},null,8,["x","y","data","labelicon","labelcolor","config"]))),128)),le(At)[0]!=null&&le(rt)[le(At)[0]]!=null&&le(rt)[le(At)[0]].isSocConfigured?(se(),De(Sn,{key:1,x:-Wn/2-zn/4+10,y:-le(t)/2+zn+5,labeltext:h(le(rt)[le(At)[0]].name)+": "+Math.round(le(rt)[le(At)[0]].soc)+"%",labelcolor:l.value[0]?l.value[0].color:"var(--color-charging)",anchor:"start",config:le(Ce)},null,8,["x","y","labeltext","labelcolor","config"])):Me("",!0),le(At)[1]!=null&&le(rt)[le(At)[1]]!=null&&le(rt)[le(At)[1]].isSocConfigured?(se(),De(Sn,{key:2,x:Wn/2+zn/4-10,y:-le(t)/2+zn+5,labeltext:h(le(rt)[le(At)[1]].name)+": "+Math.round(le(rt)[le(At)[1]].soc)+"%",labelcolor:l.value[1]?l.value[1].color:"var(--color-charging)",anchor:"end",config:le(Ce)},null,8,["x","y","labeltext","labelcolor","config"])):Me("",!0),le(wt).batterySoc>0?(se(),De(Sn,{key:3,x:-Wn/2-zn/4+10,y:le(t)/2-zn+15,labeltext:"Speicher: "+le(wt).batterySoc+"%",labelcolor:le(Pe).getItem("batIn").color,anchor:"start",config:le(Ce)},null,8,["x","y","labeltext","labelcolor","config"])):Me("",!0),le(mt).active?(se(),De(Sn,{key:4,x:Wn/2+zn/4-10,y:le(t)/2-zn+15,value:p.value,labeltext:le(mt).etCurrentPriceString,labelcolor:"var(--color-charging)",anchor:"end",config:le(Ce)},null,8,["x","y","value","labeltext","config"])):Me("",!0),we(Sn,{x:0,y:0,labeltext:a.value,labelcolor:"var(--color-fg)",anchor:"middle",config:le(Ce)},null,8,["labeltext","config"]),le(Ce).showRelativeArcs?(se(),Se("text",{key:5,x:Wn/2-44,y:"2","text-anchor":"middle",fill:"var(--color-axis)","font-size":"12"}," Peak: "+$e(s.value),9,uD)):Me("",!0),U("text",{x:0,y:le(t)/2*3.8/5,"text-anchor":"middle",fill:"var(--color-menu)","font-size":"28",class:"fas",type:"button",onClick:y},$e(""),8,cD)])],8,lD)],8,aD))])]),_:1}))}}),dD=["origin","origin2","transform"],hD=We({__name:"PgSourceGraph",props:{width:{},height:{},margin:{}},setup(e){const t=e,r={house:"var(--color-house)",batIn:"var(--color-battery)",inverter:"var(--color-pv)",batOut:"var(--color-battery)",selfUsage:"var(--color-pv)",pv:"var(--color-pv)",evuOut:"var(--color-export)",evuIn:"var(--color-evu)"};var n,i;const o=Ce.showAnimations?Ce.animationDuration:0,a=Ce.showAnimations?Ce.animationDelay:0,s=_e(()=>{const _=dt("g#pgSourceGraph");if(Te.data.length>0){Te.graphMode=="month"||Te.graphMode=="year"?m(_,Vi.value):g(_,cn.value),_.selectAll(".axis").remove();const w=_.append("g").attr("class","axis");w.call(p.value),w.selectAll(".tick").attr("font-size",12),w.selectAll(".tick line").attr("stroke",v.value).attr("stroke-width",y.value),w.select(".domain").attr("stroke","var(--color-bg)")}return"pgSourceGraph.vue"}),l=_e(()=>z1().value((_,w)=>_[w]??0).keys(f.value)),u=_e(()=>l.value(Te.data)),c=_e(()=>gn().range([t.height-10,0]).domain(Te.graphMode=="year"?[0,Math.ceil(d.value[1]*10)/10]:[0,Math.ceil(d.value[1])])),f=_e(()=>{let _=[];const w=["batOut","evuIn"];if(Ce.showInverters){const E=/pv\d+/;Te.data.length>0&&(_=Object.keys(Te.data[0]).reduce((T,C)=>(C.match(E)&&T.push(C),T),[]))}switch(Te.graphMode){case"live":return Ce.showInverters?["pv","batOut","evuIn"]:["selfUsage","evuOut","batOut","evuIn"];case"today":case"day":return _.forEach(E=>{r[E]=Jt.value.get(+E.slice(2))?.color??"var(--color-pv)"}),Ce.showInverters?[..._,...w]:["selfUsage","evuOut","batOut","evuIn"];default:return Ce.showInverters?["evuIn","batOut","selfUsage"]:["evuIn","batOut","selfUsage","evuOut"]}}),d=_e(()=>{let _=pn(Te.data,w=>Math.max(w.pv+w.evuIn+w.batOut,w.selfUsage+w.evuOut));return _[0]!=null&&_[1]!=null?(Te.graphMode=="year"&&(_[0]=_[0]/1e3,_[1]=_[1]/1e3),_):[0,0]}),h=_e(()=>Te.graphMode=="month"||Te.graphMode=="year"?-t.width-t.margin.right-22:-t.width),p=_e(()=>Rc(c.value).tickSizeInner(h.value).ticks(4).tickFormat(_=>(_==0?"":Math.round(_*10)/10).toLocaleString(void 0))),y=_e(()=>Ce.showGrid?"0.5":"1"),v=_e(()=>Ce.showGrid?"var(--color-grid)":"var(--color-bg)");function g(_,w){const E=bs().x((C,j)=>w(Te.data[j].date)).y(c.value(0)).curve(_s),T=bs().x((C,j)=>w(Te.data[j].date)).y0(C=>c.value(Te.graphMode=="year"?C[0]/1e3:C[0])).y1(C=>c.value(Te.graphMode=="year"?C[1]/1e3:C[1])).curve(_s);fc?(_.selectAll("*").remove(),n=_.append("svg").attr("x",0).attr("width",t.width).selectAll(".sourceareas").data(u.value).enter().append("path").attr("fill",(j,P)=>r[f.value[P]]).attr("d",j=>E(j)),n.transition().duration(o).delay(a).ease(Ia).attr("d",j=>T(j)),z0()):n.data(u.value).transition().duration(0).ease(Ia).attr("d",C=>T(C))}function m(_,w){Te.data.length>0&&(fc?(_.selectAll("*").remove(),i=_.selectAll(".sourcebar").data(u.value).enter().append("g").attr("fill",(E,T)=>r[f.value[T]]).selectAll("rect").data(E=>E).enter().append("rect").attr("x",(E,T)=>w(Te.data[T].date)??0).attr("y",()=>c.value(0)).attr("height",0).attr("width",w.bandwidth()),i.transition().duration(o).delay(a).ease(Ia).attr("height",E=>Te.graphMode=="year"?c.value(E[0]/1e3)-c.value(E[1]/1e3):c.value(E[0])-c.value(E[1])).attr("y",E=>Te.graphMode=="year"?c.value(E[1]/1e3):c.value(E[1])),z0()):(_.selectAll("*").remove(),i=_.selectAll(".sourcebar").data(u.value).enter().append("g").attr("fill",(E,T)=>r[f.value[T]]).selectAll("rect").data(E=>E).enter().append("rect").attr("x",(E,T)=>w(Te.data[T].date)??0).attr("y",E=>Te.graphMode=="year"?c.value(E[1]/1e3):c.value(E[1])).attr("width",w.bandwidth()).attr("height",E=>Te.graphMode=="year"?c.value(E[0]/1e3)-c.value(E[1]/1e3):c.value(E[0])-c.value(E[1]))))}const b=_e(()=>{const _=dt("g#pgSourceGraph");if(Te.graphMode!="month"&&Te.graphMode!="year"&&Te.data.length>0){cn.value.range(oi.value);const w=bs().x((E,T)=>cn.value(Te.data[T].date)).y0(E=>c.value(E[0])).y1(E=>c.value(E[1])).curve(_s);_.selectAll("path").attr("d",E=>E?w(E):""),_.selectAll("g#sourceToolTips").select("rect").attr("x",E=>cn.value(E.date)).attr("width",t.width/Te.data.length)}return"zoomed"});return(_,w)=>(se(),Se("g",{id:"pgSourceGraph",origin:s.value,origin2:b.value,transform:"translate("+e.margin.left+","+e.margin.top+")"},null,8,dD))}}),pD=["origin","origin2","transform"],gD=We({__name:"PgUsageGraph",props:{width:{},height:{},margin:{},stackOrder:{}},setup(e){const t=e,r=_e(()=>Ce.showInverters?[["house","charging","devices","counters","batIn","evuOut"],["charging","devices","counters","batIn","house","evuOut"],["devices","counters","batIn","charging","house","evuOut"],["batIn","charging","house","devices","counters","evuOut"]]:[["house","charging","devices","counters","batIn"],["charging","devices","counters","batIn","house"],["devices","counters","batIn","charging","house"],["batIn","charging","house","devices","counters"]]),n={house:"var(--color-house)",charging:"var(--color-charging)",batIn:"var(--color-battery)",batOut:"var(--color-battery)",selfUsage:"var(--color-pv)",evuOut:"var(--color-export)",evuIn:"var(--color-evu)",cp0:"var(--color-cp0)",cp1:"var(--color-cp1)",cp2:"var(--color-cp2)",cp3:"var(--color-cp3)",sh1:"var(--color-sh1)",sh2:"var(--color-sh2)",sh3:"var(--color-sh3)",sh4:"var(--color-sh4)",devices:"var(--color-devices)",counters:"var(--color-counters)"};var i,o;const a=Ce.showAnimations?Ce.animationDuration:0,s=Ce.showAnimations?Ce.animationDelay:0,l=_e(()=>{const b=dt("g#pgUsageGraph");Te.graphMode=="month"||Te.graphMode=="year"?g(b):v(b),b.selectAll(".axis").remove();const _=b.append("g").attr("class","axis");return _.call(y.value),_.selectAll(".tick").attr("font-size",12).attr("color","var(--color-axis)"),Ce.showGrid?_.selectAll(".tick line").attr("stroke","var(--color-grid)").attr("stroke-width","0.5"):_.selectAll(".tick line").attr("stroke","var(--color-bg)"),_.select(".domain").attr("stroke","var(--color-bg)"),"pgUsageGraph.vue"}),u=_e(()=>z1().value((b,_)=>b[_]??0).keys(d.value)),c=_e(()=>u.value(Te.data)),f=_e(()=>gn().range([t.height+10,2*t.height]).domain(Te.graphMode=="year"?[0,Math.ceil(h.value[1]*10)/10]:[0,Math.ceil(h.value[1])])),d=_e(()=>{if(Te.graphMode!="today"&&Te.graphMode!="day")return r.value[t.stackOrder];{const b=r.value[t.stackOrder].slice(),_=b.indexOf("charging");b.splice(_,1);const w=/cp\d+/;let E=[];return Te.data.length>0&&(E=Object.keys(Te.data[0]).reduce((T,C)=>(C.match(w)&&T.push(C),T),[])),E.forEach((T,C)=>{b.splice(_+C,0,T),n[T]=Ye[+T.slice(2)]?.color??"black"}),b}}),h=_e(()=>{let b=pn(Te.data,_=>_.house+_.charging+_.batIn+_.devices+_.counters+_.evuOut);return b[0]!=null&&b[1]!=null?(Te.graphMode=="year"&&(b[0]=b[0]/1e3,b[1]=b[1]/1e3),b):[0,0]}),p=_e(()=>Te.graphMode=="month"||Te.graphMode=="year"?-t.width-t.margin.right-22:-t.width),y=_e(()=>Rc(f.value).tickSizeInner(p.value).ticks(4).tickFormat(b=>(b==0?"":Math.round(b*10)/10).toLocaleString(void 0)));function v(b){const _=bs().x((E,T)=>cn.value(Te.data[T].date)).y(f.value(0)).curve(_s),w=bs().x((E,T)=>cn.value(Te.data[T].date)).y0(E=>f.value(E[0])).y1(E=>f.value(E[1])).curve(_s);Ce.showAnimations?Ga?(b.selectAll("*").remove(),i=b.append("svg").attr("x",0).attr("width",t.width).selectAll(".usageareas").data(c.value).enter().append("path").attr("d",T=>_(T)).attr("fill",(T,C)=>n[d.value[C]]),i.transition().duration(300).delay(100).ease(Ia).attr("d",T=>w(T)),H0()):(b.selectAll("*").remove(),b.append("svg").attr("x",0).attr("width",t.width).selectAll(".usageareas").data(c.value).enter().append("path").attr("d",T=>w(T)).attr("fill",(T,C)=>n[d.value[C]])):(b.selectAll("*").remove(),b.append("svg").attr("x",0).attr("width",t.width).selectAll(".usageareas").data(c.value).enter().append("path").attr("d",T=>w(T)).attr("fill",(T,C)=>n[d.value[C]]))}function g(b){Ga?(b.selectAll("*").remove(),o=b.selectAll(".usagebar").data(c.value).enter().append("g").attr("fill",(_,w)=>n[r.value[t.stackOrder][w]]).selectAll("rect").data(_=>_).enter().append("rect").attr("x",(_,w)=>Vi.value(Te.data[w].date)??0).attr("y",()=>f.value(0)).attr("height",0).attr("width",Vi.value.bandwidth()),o.transition().duration(a).delay(s).ease(Ia).attr("y",_=>Te.graphMode=="year"?f.value(_[0]/1e3):f.value(_[0])).attr("height",_=>Te.graphMode=="year"?f.value(_[1]/1e3)-f.value(_[0]/1e3):f.value(_[1])-f.value(_[0])),H0()):(b.selectAll("*").remove(),o=b.selectAll(".usagebar").data(c.value).enter().append("g").attr("fill",(_,w)=>n[r.value[t.stackOrder][w]]).selectAll("rect").data(_=>_).enter().append("rect").attr("x",(_,w)=>Vi.value(Te.data[w].date)??0).attr("y",_=>Te.graphMode=="year"?f.value(_[0]/1e3):f.value(_[0])).attr("height",_=>Te.graphMode=="year"?f.value(_[1]/1e3)-f.value(_[0]/1e3):f.value(_[1])-f.value(_[0])).attr("width",Vi.value.bandwidth()))}const m=_e(()=>{const b=dt("g#pgUsageGraph");if(Te.graphMode!="month"&&Te.graphMode!="year"){cn.value.range(oi.value);const _=bs().x((w,E)=>cn.value(Te.data[E].date)).y0(w=>f.value(w[0])).y1(w=>f.value(w[1])).curve(_s);b.selectAll("path").attr("d",w=>w?_(w):"")}return"zoomed"});return(b,_)=>(se(),Se("g",{id:"pgUsageGraph",origin:l.value,origin2:m.value,transform:"translate("+e.margin.left+","+e.margin.top+")"},null,8,pD))}}),mD=["width"],yD=["transform"],vD=["width"],bD=["transform"],_D=["origin","origin2","transform"],wD=["origin","transform"],SD={key:0},ED=["width","height"],xD={key:1},TD=["y","width","height"],pd=12,AD=We({__name:"PgXAxis",props:{width:{},height:{},margin:{}},setup(e){const t=e,r=_e(()=>eu(cn.value).ticks(6).tickSizeInner(a.value).tickFormat(Ro("%H:%M"))),n=_e(()=>mC(cn.value).ticks(6).tickSizeInner(a.value+3).tickFormat(Ro(""))),i=_e(()=>eu(Vi.value).ticks(4).tickSizeInner(a.value).tickFormat(c=>c.toString())),o=_e(()=>eu(Vi.value).ticks(4).tickSizeInner(a.value).tickFormat(()=>"")),a=_e(()=>Te.graphMode!=="month"&&Te.graphMode!=="year"?Ce.showGrid?-(t.height/2-7):-10:0),s=_e(()=>{let c=dt("g#PGXAxis"),f=dt("g#PgUnit");return c.selectAll("*").remove(),f.selectAll("*").remove(),Te.graphMode=="month"||Te.graphMode=="year"?c.call(i.value):c.call(r.value),c.selectAll(".tick > text").attr("fill",(d,h)=>h>=0||Te.graphMode=="month"||Te.graphMode=="year"?"var(--color-axis)":"var(--color-bg)").attr("font-size",pd),Ce.showGrid?c.selectAll(".tick line").attr("stroke","var(--color-grid)").attr("stroke-width","0.5"):c.selectAll(".tick line").attr("stroke","var(--color-bg)"),c.select(".domain").attr("stroke","var(--color-bg)"),f.append("text").attr("x",0).attr("y",12).attr("fill","var(--color-axis)").attr("font-size",pd).text(Te.graphMode=="year"?"MWh":Te.graphMode=="month"?"kWh":"kW").attr("text-anchor","start"),"PGXAxis.vue"}),l=_e(()=>{let c=dt("g#PGXAxis2");return c.selectAll("*").remove(),Te.graphMode=="month"||Te.graphMode=="year"?c.call(o.value):c.call(n.value),c.selectAll(".tick > text").attr("fill",(f,d)=>d>=0||Te.graphMode=="month"||Te.graphMode=="year"?"var(--color-axis)":"var(--color-bg)").attr("font-size",pd),Ce.showGrid?(c.selectAll(".tick line").attr("stroke","var(--color-grid)").attr("stroke-width","0.5"),c.select(".domain").attr("stroke","var(--color-bg)")):c.selectAll(".tick line").attr("stroke","var(--color-bg)"),c.select(".domain").attr("stroke","var(--color-bg)"),"PGXAxis2.vue"}),u=_e(()=>{if(Te.graphMode!="month"&&Te.graphMode!="year"){const c=dt("g#PGXAxis"),f=dt("g#PGXAxis2");Te.graphMode=="month"||Te.graphMode=="year"?(Vi.value.range(oi.value),c.call(i.value),f.call(o.value)):(cn.value.range(oi.value),c.call(r.value),f.call(n.value))}return"zoomed"});return(c,f)=>(se(),Se(Ge,null,[(se(),Se("svg",{x:"0",width:t.width},[U("g",{id:"PgUnit",transform:"translate(0,"+(e.height/2+9)+")"},null,8,yD)],8,mD)),(se(),Se("svg",{x:0,width:t.width},[U("g",{transform:"translate("+e.margin.left+","+e.margin.top+")"},[U("g",{id:"PGXAxis",class:"axis",origin:s.value,origin2:u.value,transform:"translate(0,"+(e.height/2-6)+")"},null,8,_D),U("g",{id:"PGXAxis2",class:"axis",origin:l.value,transform:"translate(0,"+(e.height/2+-6)+")"},null,8,wD),le(Ce).showGrid?(se(),Se("g",SD,[U("rect",{x:"0",y:"0",width:e.width,height:e.height/2-10,fill:"none",stroke:"var(--color-grid)","stroke-width":"0.5"},null,8,ED)])):Me("",!0),le(Ce).showGrid?(se(),Se("g",xD,[U("rect",{x:"0",y:e.height/2+10,width:e.width,height:e.height/2-10,fill:"none",stroke:"var(--color-grid)","stroke-width":"0.5"},null,8,TD)])):Me("",!0)],8,bD)],8,vD))],64))}}),ID=["width"],CD=["id",".origin","d"],MD=["id","d","stroke"],kD=["x","y","text-anchor"],gd=We({__name:"PgSoc",props:{width:{},height:{},margin:{},order:{}},setup(e){const t=e,r=_e(()=>{let d=pn(Te.data,h=>h.date);return d[0]&&d[1]?Hi().domain(d).range([0,t.width]):Hi().range([0,0])}),n=_e(()=>gn().range([t.height-10,5]).domain([0,100])),i=_e(()=>{let h=ri().x(p=>r.value(p.date)).y(p=>n.value(t.order==2?p.batSoc:t.order==0?p["soc"+At.value[0]]:p["soc"+At.value[1]])??n.value(0))(Te.data);return h||""}),o=_e(()=>t.order),a=_e(()=>{switch(t.order){case 2:return"Speicher";case 1:return rt[At.value[1]]!=null?rt[At.value[1]].name:"???";default:return rt[At.value[0]]!=null?rt[At.value[0]].name:"???"}}),s=_e(()=>{switch(t.order){case 0:return"var(--color-cp1)";case 1:return"var(--color-cp2)";case 2:return"var(--color-battery)";default:return"red"}}),l=_e(()=>{switch(t.order){case 0:return 3;case 1:return t.width-3;case 2:return t.width/2;default:return 0}}),u=_e(()=>{if(Te.data.length>0){let d;switch(t.order){case 0:return d=0,n.value(Te.data[d]["soc"+At.value[0]]+2);case 1:return d=Te.data.length-1,Math.max(12,n.value(Te.data[d]["soc"+At.value[1]]+2));case 2:return d=Math.round(Te.data.length/2),n.value(Te.data[d].batSoc+2);default:return 0}}else return 0}),c=_e(()=>{switch(t.order){case 0:return"start";case 1:return"end";case 2:return"middle";default:return"middle"}}),f=_e(()=>{if(Te.graphMode!="month"&&Te.graphMode!="year"){const d=dt("path#soc-"+o.value),h=dt("path#socdashes-"+o.value);r.value.range(oi.value);const p=ri().x(y=>r.value(y.date)).y(y=>n.value(t.order==2?y.batSoc:t.order==0?y["soc"+At.value[0]]:y["soc"+At.value[1]])??n.value(0));d.attr("d",p(Te.data)),h.attr("d",p(Te.data))}return"zoomed"});return(d,h)=>(se(),Se("svg",{x:"0",width:t.width,class:"PGSoc"},[U("g",null,[U("path",{id:"soc-"+o.value,".origin":f.value,class:"soc-baseline",d:i.value,stroke:"var(--color-bg)","stroke-width":"1",fill:"none"},null,40,CD),U("path",{id:"socdashes-"+o.value,class:"soc-dashes",d:i.value,stroke:s.value,"stroke-width":"1",style:{strokeDasharray:"3,1"},fill:"none"},null,8,MD),U("text",{class:"cpname",x:l.value,y:u.value,style:ot({fill:s.value,fontSize:10}),"text-anchor":c.value},$e(a.value),13,kD)])],8,ID))}}),PD=["transform"],OD=We({__name:"PgSocAxis",props:{width:{},height:{},margin:{}},setup(e){const t=e,r=_e(()=>gn().range([t.height-10,5]).domain([0,100])),n=_e(()=>yC(r.value).ticks(5).tickFormat(o=>o.toString()+"%"));function i(){let o=dt("g#PGSocAxis");o.call(n.value),o.selectAll(".tick").attr("font-size",12),o.selectAll(".tick line").attr("stroke","var(--color-bg)"),o.select(".domain").attr("stroke","var(--color-bg)")}return Hr(()=>{i()}),(o,a)=>(se(),Se("g",{id:"PGSocAxis",class:"axis",transform:"translate("+(e.width-20)+",0)"},null,8,PD))}}),LD={class:"d-flex align-self-top justify-content-center align-items-center"},RD={class:"input-group input-group-xs"},ND={key:0,class:"btn dropdown-toggle",type:"button","data-bs-toggle":"dropdown"},$D={class:"dropdown-menu"},DD={class:"table optiontable"},BD=["onClick"],FD={key:1,class:"btn dropdown-toggle",type:"button","data-bs-toggle":"dropdown"},UD={class:"dropdown-menu"},jD={class:"table optiontable"},VD=["onClick"],WD={key:2,class:"btn dropdown-toggle",type:"button","data-bs-toggle":"dropdown"},zD={class:"dropdown-menu"},HD={class:"table optiontable"},qD=["onClick"],GD=We({__name:"DateInput",props:{modelValue:{type:Date,required:!0},mode:{type:String,default:"day"}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=new Date().getFullYear();let i=Array.from({length:10},(h,p)=>n-p);const o=et(!0),a=t,s=[[0,1,2,3],[4,5,6,7],[8,9,10,11]],l=et(r.modelValue.getDate()),u=et(r.modelValue.getMonth()),c=et(r.modelValue.getFullYear()),f=_e(()=>{const p=new Date(c.value,u.value,1).getDay();let y=0;switch(console.log(u.value),u.value){case 0:case 2:case 4:case 6:case 7:case 9:case 11:y=31;break;case 3:case 5:case 8:case 10:y=30;break;case 1:c.value%4==0&&c.value%100!=0||c.value%400==0?y=29:y=28}let v=[],g=[0,0,0,0,0,0,0],m=p;for(let b=0;b(se(),Se("span",LD,[U("div",RD,[r.mode=="day"||r.mode=="today"?(se(),Se("button",ND,$e(l.value),1)):Me("",!0),U("div",$D,[U("table",DD,[(se(!0),Se(Ge,null,it(f.value,(y,v)=>(se(),Se("tr",{key:v,class:""},[(se(!0),Se(Ge,null,it(y,(g,m)=>(se(),Se("td",{key:m},[g!=0?(se(),Se("span",{key:0,type:"button",class:"btn optionbutton",onClick:b=>l.value=g},$e(g),9,BD)):Me("",!0)]))),128))]))),128))])]),r.mode!="year"&&r.mode!="live"?(se(),Se("button",FD,$e(u.value+1),1)):Me("",!0),U("div",UD,[U("table",jD,[(se(),Se(Ge,null,it(s,(y,v)=>U("tr",{key:v,class:""},[(se(!0),Se(Ge,null,it(y,(g,m)=>(se(),Se("td",{key:m,class:"p-0 m-0"},[U("span",{type:"button",class:"btn btn-sm optionbutton",onClick:b=>u.value=g},$e(g+1),9,VD)]))),128))])),64))])]),r.mode!="live"?(se(),Se("button",WD,$e(c.value),1)):Me("",!0),U("div",zD,[U("table",HD,[(se(!0),Se(Ge,null,it(le(i),(y,v)=>(se(),Se("tr",{key:v,class:""},[U("td",null,[U("span",{type:"button",class:"btn optionbutton",onClick:g=>c.value=y},$e(y),9,qD)])]))),128))])]),r.mode!="live"?(se(),Se("button",{key:3,class:"button-outline-secondary",type:"button",onClick:d},[...p[0]||(p[0]=[U("span",{class:"fa-solid fa-circle-check"},null,-1)])])):Me("",!0)])]))}}),YD=Xe(GD,[["__scopeId","data-v-279434b9"]]),KD={class:"btn-group m-0",role:"group","aria-label":"radiobar"},XD=["id","value"],QD=We({__name:"RadioBarInput",props:{options:{},modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=t,i=_e({get(){return r.modelValue},set(s){n("update:modelValue",s)}});function o(s){let l=r.options[s].color?r.options[s].color:"var(--color-fg)";return r.options[s].active?{color:"var(--color-bg)",background:l}:{color:l}}function a(s){let l=s.target;for(;l&&!l.value&&l.parentElement;)l=l.parentElement;l.value&&(i.value=l.value)}return(s,l)=>(se(),Se("div",null,[U("div",KD,[(se(!0),Se(Ge,null,it(e.options,(u,c)=>(se(),Se("button",{id:"radio-"+u.value,key:c,class:Qe(["btn btn-outline-secondary btn-sm radiobutton mx-0 mb-0 px-2",u.value==i.value?"active":""]),value:u.value,style:ot(o(c)),onClick:a},[U("span",{style:ot(o(c))},[u.icon?(se(),Se("i",{key:0,class:Qe(["fa-solid",u.icon])},null,2)):Me("",!0),Ke(" "+$e(u.text),1)],4)],14,XD))),128))])]))}}),GE=Xe(QD,[["__scopeId","data-v-82ab6829"]]),JD=We({__name:"PgSelector",props:{widgetid:{},showLeftButton:{type:Boolean},showRightButton:{type:Boolean},ignoreLive:{type:Boolean}},emits:["shiftLeft","shiftRight","shiftUp","shiftDown"],setup(e){const t=e,r=et(0),n=_e(()=>{if(Te.waitForData)return"Lädt";switch(Te.graphMode){case"live":return t.ignoreLive?"heute":`${Math.floor(Ce.liveGraphDuration/60)} min`;case"today":return"heute";case"day":return $t.date.getDate()+"."+($t.date.getMonth()+1)+".";case"month":return M$(Cn.month-1,Cn.year);case"year":return ji.year.toString();default:return"???"}}),i=["live","today","day","month","year"],o=["Live","Heute","Tag","Monat","Jahr"],a=_e({get(){return Te.graphMode},set(m){switch(m){case"day":f();break;case"today":d();break;case"live":c();break;case"month":h();break;case"year":p()}}}),s=_e(()=>{switch(Te.graphMode){case"live":case"today":return $t.getDate();case"month":return Cn.getDate();default:return $t.getDate()}});function l(m){q0(m)}function u(){r.value+=1,r.value>2&&(r.value=0)}function c(){Te.graphMode!="live"&&(Te.graphMode="live",Ht())}function f(){Te.graphMode!="day"&&Te.graphMode!="today"&&(Te.graphMode="day",Ht())}function d(){Te.graphMode!="today"&&(Te.graphMode="today",q0(new Date),Ht())}function h(){Te.graphMode!="month"&&(Te.graphMode="month",Ht())}function p(){Te.graphMode!="year"&&(Te.graphMode="year",Ht())}const y=_e(()=>r.value>0?{border:"1px solid var(--color-frame)"}:""),v=_e(()=>r.value==1?"justify-content-between":"justify-content-end"),g=_e(()=>r.value==1?"justify-content-between":"justify-content-center");return(m,b)=>(se(),Se("div",{class:"d-flex flex-column justify-content-center pgselector rounded",style:ot(y.value)},[r.value==2?(se(),De(GE,{key:0,id:"pgm2",modelValue:a.value,"onUpdate:modelValue":b[0]||(b[0]=_=>a.value=_),class:"m-2",options:i.map((_,w)=>({text:o[w],value:_,color:"var(--color-menu)",active:_==le(Te).graphMode}))},null,8,["modelValue","options"])):Me("",!0),r.value==1?(se(),Se("span",{key:1,type:"button",class:Qe(["arrowButton d-flex align-self-center mb-3 mt-3",{disabled:!t.showLeftButton}]),onClick:b[1]||(b[1]=_=>m.$emit("shiftUp"))},[...b[6]||(b[6]=[U("i",{class:"fa-solid fa-xl fa-chevron-circle-up"},null,-1)])],2)):Me("",!0),U("div",{class:Qe(["d-flex align-items-center",g.value])},[r.value==1?(se(),Se("span",{key:0,type:"button",class:Qe(["p-1",{disabled:!t.showLeftButton}]),onClick:b[2]||(b[2]=_=>m.$emit("shiftLeft"))},[...b[7]||(b[7]=[U("span",{class:"fa-solid fa-xl fa-chevron-circle-left arrowButton"},null,-1)])],2)):Me("",!0),r.value<2?(se(),Se("span",{key:1,type:"button",class:"btn-outline-secondary p-2 px-3 badge rounded-pill datebadge",onClick:u},$e(n.value),1)):Me("",!0),r.value==2?(se(),De(YD,{key:2,"model-value":s.value,mode:le(Te).graphMode,"onUpdate:modelValue":l},null,8,["model-value","mode"])):Me("",!0),r.value==1?(se(),Se("span",{key:3,id:"graphRightButton",type:"button",class:Qe(["arrowButton fa-solid fa-xl fa-chevron-circle-right p-1",{disabled:!t.showRightButton}]),onClick:b[3]||(b[3]=_=>m.$emit("shiftRight"))},null,2)):Me("",!0)],2),U("div",{class:Qe(["d-flex align-items-center",v.value])},[r.value==1?(se(),Se("span",{key:0,type:"button",class:"p-1",onClick:u},[...b[8]||(b[8]=[U("span",{class:"fa-solid fa-xl fa-gear"},null,-1)])])):Me("",!0),r.value==1?(se(),Se("span",{key:1,id:"graphLeftButton",type:"button",class:Qe(["arrowButton fa-solid fa-xl fa-chevron-circle-down p-1",{disabled:!t.showLeftButton}]),onClick:b[4]||(b[4]=_=>m.$emit("shiftDown"))},null,2)):Me("",!0),r.value>0?(se(),Se("span",{key:2,type:"button",class:"p-1",onClick:b[5]||(b[5]=_=>r.value=0)},[...b[9]||(b[9]=[U("span",{class:"fa-solid fa-xl fa-circle-check"},null,-1)])])):Me("",!0)],2)],4))}}),Jm=Xe(JD,[["__scopeId","data-v-758b95f3"]]),ZD=["x","fill"],eB=["x"],tB={key:1},xr=We({__name:"PgToolTipLine",props:{cat:{},name:{},indent:{},power:{},width:{}},setup(e){const t=e;return(r,n)=>(se(),Se(Ge,null,[e.power>0?(se(),Se("tspan",{key:0,x:e.indent,dy:"1.3em",class:Qe(e.name?"":"fas"),fill:le(Xr)[e.cat].color},$e(e.name?e.name:le(Xr)[e.cat].icon)+"   ",11,ZD)):Me("",!0),U("tspan",{"text-anchor":"end",x:e.width-5},[e.cat!="price"&&t.power>0?(se(),De(ll,{key:0,watt:e.power*1e3},null,8,["watt"])):Me("",!0),e.cat==="price"?(se(),Se("tspan",tB,$e(le(P$)(t.power)),1)):Me("",!0)],8,eB)],64))}}),rB=["transform"],nB=["width","height"],iB={"text-anchor":"start",x:"5",y:"20","font-size":"16",fill:"var(--color-fg)"},oB=["x"],sB=We({__name:"PgToolTipItem",props:{entry:{},boxwidth:{},xScale:{type:[Function,Object]}},setup(e){const t=e;function r(){return Object.entries(t.entry).filter(([l,u])=>l!="selfUsage"&&!l.startsWith("soc")&&u!=null&&u>0).length*20+2}function n(){return Object.entries(t.entry).filter(([l,u])=>l.startsWith("pv")&&l.length>2&&u>0).map(([l,u])=>({power:u,name:sn.value.get(l)?s(sn.value.get(l)):"Wechselr.",id:l}))}function i(){return Object.entries(t.entry).filter(([l,u])=>l.startsWith("cp")&&l.length>2&&u>0).map(([l,u])=>({power:u,name:sn.value.get(l)?s(sn.value.get(l)):"Ladep.",id:l}))}function o(){return Object.entries(t.entry).filter(([l,u])=>l.startsWith("sh")&&l.length>2&&u>0).map(([l,u])=>({power:u,name:sn.value.get(l)?s(sn.value.get(l)):"Gerät",id:l}))}function a(){return Object.entries(t.entry).filter(([l,u])=>l.startsWith("counter")&&l!="counters"&&l.length>2&&u>0).map(([l,u])=>({power:u,name:sn.value.get(l)?s(sn.value.get(l)):"Zähler",id:l}))}function s(l){return l.length>6?l.slice(0,6)+"...":l}return(l,u)=>(se(),Se("g",{class:"ttmessage",transform:"translate("+e.xScale(e.entry.date)+",0)"},[U("rect",{rx:"5",width:e.boxwidth,height:r(),fill:"var(--color-bg)",opacity:"90%",stroke:"var(--color-menu)","stroke-width":"1"},null,8,nB),U("text",iB,[U("tspan",{"text-anchor":"middle",x:e.boxwidth/2,dy:"0em"},$e(le(Ro)("%H:%M")(new Date(e.entry.date))),9,oB),u[0]||(u[0]=U("line",{y:"120",x1:"5",x2:"100",stroke:"var(--color-fg)","stroke-width":"1"},null,-1)),we(xr,{cat:"evuIn",indent:5,power:e.entry.evuIn,width:e.boxwidth},null,8,["power","width"]),we(xr,{cat:"batOut",indent:5,power:e.entry.batOut,width:e.boxwidth},null,8,["power","width"]),we(xr,{cat:"pv",indent:5,power:e.entry.pv,width:e.boxwidth},null,8,["power","width"]),(se(!0),Se(Ge,null,it(n(),c=>(se(),De(xr,{key:c.id,cat:"pv",name:c.name,power:c.power,indent:10,width:e.boxwidth},null,8,["name","power","width"]))),128)),we(xr,{cat:"house",indent:5,power:e.entry.house,width:e.boxwidth},null,8,["power","width"]),we(xr,{cat:"charging",indent:5,power:e.entry.charging,width:e.boxwidth},null,8,["power","width"]),(se(!0),Se(Ge,null,it(i(),c=>(se(),De(xr,{key:c.id,cat:"charging",name:c.name,power:c.power,indent:10,width:e.boxwidth},null,8,["name","power","width"]))),128)),we(xr,{cat:"devices",indent:5,power:e.entry.devices,width:e.boxwidth},null,8,["power","width"]),(se(!0),Se(Ge,null,it(o(),c=>(se(),De(xr,{key:c.id,cat:"devices",name:c.name,power:c.power,indent:10,width:e.boxwidth},null,8,["name","power","width"]))),128)),we(xr,{cat:"counters",indent:5,power:e.entry.counters,width:e.boxwidth},null,8,["power","width"]),(se(!0),Se(Ge,null,it(a(),c=>(se(),De(xr,{key:c.id,cat:"counters",name:c.name,power:c.power,indent:10,width:e.boxwidth},null,8,["name","power","width"]))),128)),we(xr,{cat:"batIn",indent:5,power:e.entry.batIn,width:e.boxwidth},null,8,["power","width"]),we(xr,{cat:"evuOut",indent:5,power:e.entry.evuOut,width:e.boxwidth},null,8,["power","width"]),le(mt).active?(se(),De(xr,{key:0,cat:"price",indent:5,power:e.entry.price,name:"Preis",width:e.boxwidth},null,8,["power","width"])):Me("",!0)])],8,rB))}}),aB=["origin","transform"],lB=["x","height","width","onMouseover"],K0=140,uB=We({__name:"PgToolTips",props:{width:{},height:{},margin:{},data:{}},setup(e){const t=e,r=et(0),n=_e(()=>{const s=pn(t.data,l=>new Date(l.date));return s[0]&&s[1]?Th().domain(s).range([0,t.width-t.margin.right]):Hi().range([0,0])}),i=_e(()=>{const s=pn(t.data,l=>new Date(l.date));return s[0]&&s[1]?Th().domain(s).range([0,t.width-t.margin.right-K0]):Hi().range([0,0])}),o=_e(()=>((Te.graphMode=="day"||Te.graphMode=="today")&&(n.value.range(oi.value),dt("g#pgToolTips").selectAll("g.ttarea").select("rect").attr("x",(s,l)=>t.data.length>l?n.value(t.data[l].date):0).attr("width",t.data.length>0?(oi.value[1]-oi.value[0])/t.data.length:0)),"PgToolTips.vue:autozoom"));function a(s){r.value=s}return(s,l)=>(se(),Se("g",{id:"pgToolTips",origin:o.value,transform:"translate("+e.margin.left+","+e.margin.top+")"},[(se(!0),Se(Ge,null,it(e.data,u=>(se(),Se("g",{key:u.date,class:"ttitems"},[r.value==u.date?(se(),De(sB,{key:0,entry:u,boxwidth:K0,"x-scale":i.value},null,8,["entry","x-scale"])):Me("",!0)]))),128)),(se(!0),Se(Ge,null,it(e.data,u=>(se(),Se("g",{key:u.date,class:"ttarea",onMouseleave:l[0]||(l[0]=c=>r.value=0)},[U("rect",{x:n.value(u.date),y:"0",height:e.height,class:"ttrect",width:le(Te).data.length>0?e.width/le(Te).data.length:0,opacity:"1%",fill:"var(--color-charging)",onMouseover:c=>a(u.date)},null,40,lB)],32))),128))],8,aB))}}),cB=["width"],fB=[".origin","d"],dB=["d"],hB=["x","y"],pB=We({__name:"PriceLine",props:{width:{},height:{},margin:{}},setup(e){const t=e,r=_e(()=>{let s=pn(Te.data,l=>l.date);return s[0]&&s[1]?Hi().domain(s).range([0,t.width]):Hi().range([0,0])}),n=_e(()=>{let s=pn(Te.data,l=>l.price);return s[0]&&s[1]?(s[0]=0,gn().range([t.height-10,5]).domain(s)):gn().range([t.height-10,0]).domain([0,0])}),i=_e(()=>{let l=ri().x(u=>r.value(u.date)).y(u=>n.value(u.price)??n.value(0))(Te.data);return l||""}),o=_e(()=>{if(Te.data.length>0){let s;return s=Math.round(Te.data.length/2),n.value(Te.data[s].price)+2}else return 0}),a=_e(()=>{if(Te.graphMode!="month"&&Te.graphMode!="year"){const s=dt("path#price"),l=dt("path#pricedashes");r.value.range(oi.value);const u=ri().x(c=>r.value(c.date)).y(c=>n.value(c.price)??n.value(0));s.attr("d",u(Te.data)),l.attr("d",u(Te.data))}return"zoomed"});return(s,l)=>(se(),Se("svg",{x:"0",width:t.width,class:"Prices"},[U("g",null,[U("path",{id:"price",".origin":a.value,class:"price-baseline",d:i.value,stroke:"var(--color-bg)","stroke-width":"1",fill:"none"},null,40,fB),U("path",{id:"pricedashes",class:"price-dashes",d:i.value,stroke:"crimson","stroke-width":"1",style:{strokeDasharray:"3,1"},fill:"none"},null,8,dB),U("text",{class:"pricename",x:t.width/2,y:o.value,style:{fill:"crimson",fontSize:10},"text-anchor":"middle"}," Strompreis ",8,hB)])],8,cB))}}),gB={class:"d-flex justify-content-end"},mB={id:"powergraphFigure",class:"p-0 m-0"},yB=["viewBox"],vB=["transform"],bB=2,_B=We({__name:"PowerGraph",setup(e){const t=_e(()=>{switch(Te.graphMode){case"year":return"Jahresübersicht";case"month":return"Monatsübersicht";default:return"Verlauf"}});function r(){let l=Ce.usageStackOrder+1;l>bB&&(l=0),Ce.usageStackOrder=l,b$(!0)}function n(l){const u=[[0,Ze.top],[dr,Kr-Ze.top]];l.call(G2().scaleExtent([1,8]).translateExtent([[0,0],[dr,Kr]]).extent(u).filter(o).on("zoom",i))}function i(l){WE.value=l.transform}function o(l){return l.preventDefault(),(!l.ctrlKey||l.type==="wheel")&&!l.button}function a(){Ce.zoomedWidget=1,Ce.zoomGraph=!Ce.zoomGraph}function s(){return Ce.zoomGraph?"fa-minimize":"fa-maximize"}return Hr(()=>{const l=dt("svg#powergraph");n(l)}),(l,u)=>(se(),De(ul,{"full-width":!0},{title:Ae(()=>[Ke($e(t.value),1)]),buttons:Ae(()=>[U("div",gB,[we(Jm,{widgetid:"graphsettings","show-left-button":!0,"show-right-button":!0,"ignore-live":!1,onShiftLeft:le(Qc),onShiftRight:le(Ym),onShiftUp:le(Km),onShiftDown:le(Xm)},null,8,["onShiftLeft","onShiftRight","onShiftUp","onShiftDown"]),U("span",{type:"button",class:"ms-1 p-0 pt-1",onClick:r},[...u[0]||(u[0]=[U("span",{class:"fa-solid fa-lg ps-1 fa-sort"},null,-1)])]),le(Ln)?(se(),Se("span",{key:0,type:"button",class:"ms-1 p-0 pt-1",onClick:a},[U("span",{class:Qe(["fa-solid fa-lg ps-1",s()])},null,2)])):Me("",!0)])]),default:Ae(()=>[wi(U("figure",mB,[(se(),Se("svg",{id:"powergraph",class:"powergraphSvg",viewBox:"0 0 "+le(dr)+" "+le(Kr)},[we(hD,{width:le(dr)-le(Ze).left-2*le(Ze).right,height:(le(Kr)-le(Ze).top-le(Ze).bottom)/2,margin:le(Ze)},null,8,["width","height","margin"]),we(gD,{width:le(dr)-le(Ze).left-2*le(Ze).right,height:(le(Kr)-le(Ze).top-le(Ze).bottom)/2,margin:le(Ze),"stack-order":le(Ce).usageStackOrder},null,8,["width","height","margin","stack-order"]),we(AD,{width:le(dr),height:le(Kr)-le(Ze).top-le(Ze).bottom,margin:le(Ze)},null,8,["width","height","margin"]),U("g",{transform:"translate("+le(Ze).left+","+le(Ze).top+")"},[(le(Te).graphMode=="day"||le(Te).graphMode=="today"||le(Te).graphMode=="live")&&le(rt)[le(At)[0]]!=null&&le(rt)[le(At)[0]].isSocConfigured?(se(),De(gd,{key:0,width:le(dr)-le(Ze).left-2*le(Ze).right,height:(le(Kr)-le(Ze).top-le(Ze).bottom)/2,margin:le(Ze),order:0},null,8,["width","height","margin"])):Me("",!0),(le(Te).graphMode=="day"||le(Te).graphMode=="today"||le(Te).graphMode=="live")&&le(rt)[le(At)[1]]!=null&&le(rt)[le(At)[1]].isSocConfigured?(se(),De(gd,{key:1,width:le(dr)-le(Ze).left-2*le(Ze).right,height:(le(Kr)-le(Ze).top-le(Ze).bottom)/2,margin:le(Ze),order:1},null,8,["width","height","margin"])):Me("",!0),(le(Te).graphMode=="day"||le(Te).graphMode=="today"||le(Te).graphMode=="live")&&le(wt).isBatteryConfigured?(se(),De(gd,{key:2,width:le(dr)-le(Ze).left-2*le(Ze).right,height:(le(Kr)-le(Ze).top-le(Ze).bottom)/2,margin:le(Ze),order:2},null,8,["width","height","margin"])):Me("",!0),le(Ce).showPrices&&(le(Te).graphMode=="day"||le(Te).graphMode=="today")?(se(),De(pB,{key:3,width:le(dr)-le(Ze).left-2*le(Ze).right,height:(le(Kr)-le(Ze).top-le(Ze).bottom)/2,margin:le(Ze)},null,8,["width","height","margin"])):Me("",!0),le(Te).graphMode=="day"||le(Te).graphMode=="today"||le(Te).graphMode=="live"?(se(),De(OD,{key:4,width:le(dr)-le(Ze).left-le(Ze).right,height:(le(Kr)-le(Ze).top-le(Ze).bottom)/2,margin:le(Ze)},null,8,["width","height","margin"])):Me("",!0)],8,vB),le(Te).graphMode=="day"||le(Te).graphMode=="today"?(se(),De(uB,{key:0,width:le(dr)-le(Ze).left-le(Ze).right,height:le(Kr)-le(Ze).top-le(Ze).bottom,margin:le(Ze),data:le(Te).data},null,8,["width","height","margin","data"])):Me("",!0)],8,yB))],512),[[MI,le(Te).data.length>0]])]),_:1}))}}),wB=Xe(_B,[["__scopeId","data-v-58fdbe01"]]),SB=["id"],EB=["x","width","height","fill"],xB=["id","to"],TB=["x","width","height"],AB=["to"],IB=["x","y","width","height"],CB=["to"],MB=We({__name:"EmBar",props:{item:{},id:{},xScale:{},yScale:{},margin:{},height:{}},setup(e){const t=e;let r=0;const n=_e(()=>t.height-t.yScale(t.item[a.value].energy)-t.margin.top-t.margin.bottom),i=_e(()=>{let s=0;return t.item[a.value].energyPv>0&&(s=t.height-t.yScale(t.item[a.value].energyPv)-t.margin.top-t.margin.bottom),s>n.value&&(s=n.value),s}),o=_e(()=>{let s=0;return t.item[a.value].energyBat>0&&(s=t.height-t.yScale(t.item[a.value].energyBat)-t.margin.top-t.margin.bottom),s>n.value&&(s=n.value),s}),a=_e(()=>Te.usePastData?"past":"now");return Iw(()=>{if(Ce.showAnimations&&n.value!=r){const s=document.getElementById("bar-animate-"+t.id);s&&s.beginElement(),r=n.value}}),(s,l)=>(se(),Se("g",{id:"bar-"+t.id,transform:"scale(1,-1) translate (0,-445)"},[U("rect",{class:"bar",x:t.xScale(t.id),y:"0",width:t.xScale.bandwidth(),height:n.value,fill:e.item.color,rx:3,ry:3},[U("animate",{id:"bar-animate-"+t.id,attributeName:"height",from:0,to:n.value,dur:"0.5s"},null,8,xB)],8,EB),U("rect",{class:"bar",x:t.xScale(t.id)+t.xScale.bandwidth()/6,y:"0",width:t.xScale.bandwidth()*2/3,height:i.value,fill:"var(--color-pv)","fill-opacity":"66%"},[U("animate",{attributeName:"height",from:0,to:i.value,dur:"0.5s"},null,8,AB)],8,TB),U("rect",{class:"bar",x:t.xScale(t.id)+t.xScale.bandwidth()/6,y:i.value,width:t.xScale.bandwidth()*2/3,height:o.value,fill:"var(--color-battery)","fill-opacity":"66%"},[U("animate",{attributeName:"height",from:0,to:o.value,dur:"0.5s"},null,8,CB)],8,IB)],8,SB))}}),kB={id:"emBargraph"},PB=We({__name:"EMBarGraph",props:{plotdata:{},xScale:{},yScale:{},margin:{},height:{}},setup(e){const t=e;return(r,n)=>(se(),Se("g",kB,[(se(!0),Se(Ge,null,it(t.plotdata,(i,o)=>(se(),Se("g",{key:o},[we(MB,{id:o.toString(),item:i,"x-scale":t.xScale,"y-scale":t.yScale,margin:t.margin,height:t.height},null,8,["id","item","x-scale","y-scale","margin","height"])]))),128)),n[0]||(n[0]=U("animateTransform",{"attribute-name":"transform",type:"scale",from:"1 0",to:"1 1",begin:"0s",dur:"2s"},null,-1))]))}}),OB=["origin"],LB=We({__name:"EMYAxis",props:{yScale:{type:[Function,Object]},width:{},fontsize:{}},setup(e){const t=e,r=_e(()=>Rc(t.yScale).tickFormat(o=>i(o)).ticks(6).tickSizeInner(-t.width)),n=_e(()=>{const o=dt("g#emYAxis");return o.attr("class","axis").call(r.value),o.append("text").attr("y",6).attr("dy","0.71em").attr("text-anchor","end").text("energy"),o.selectAll(".tick").attr("font-size",t.fontsize),Ce.showGrid?o.selectAll(".tick line").attr("stroke","var(--color-grid)").attr("stroke-width","0.5"):o.selectAll(".tick line").attr("stroke","var(--color-bg)"),o.select(".domain").attr("stroke","var(--color-bg)"),"emYAxis.vue"});function i(o){return o>0?Te.graphMode=="year"?(o/1e6).toString():(o/1e3).toString():""}return(o,a)=>(se(),Se("g",{id:"emYAxis",class:"axis",origin:n.value},null,8,OB))}}),RB=["id"],NB=["x","y","font-size"],$B=["x","y","font-size","fill"],DB=["x","y","font-size","fill"],BB=We({__name:"EmLabel",props:{id:{},item:{},xScale:{},yScale:{},margin:{},height:{},barcount:{},autarchy:{},autText:{}},setup(e){const t=e,r=_e(()=>t.autarchy?t.yScale(t.item[o.value].energy)-25:t.yScale(t.item[o.value].energy)-10),n=_e(()=>{let u=16,c=t.barcount;return c<=5?u=16:c==6?u=14:c>6&&c<=8?u=13:c==9?u=11:c==10?u=10:u=9,u}),i=_e(()=>{let u=12,c=t.barcount;return c<=5?u=12:c==6?u=11:c>6&&c<=8||c==9?u=8:c==10?u=7:u=6,u}),o=_e(()=>Te.usePastData?"past":"now");function a(u,c){return c.length>i.value?c.substring(0,i.value)+".":c}function s(){return t.autarchy?t.autText+": "+t.autarchy.toLocaleString(void 0)+" %":""}function l(){return"var(--color-pv)"}return(u,c)=>(se(),Se("g",{id:"barlabel-"+t.item.name},[U("text",{x:t.xScale(t.id)+t.xScale.bandwidth()/2,y:r.value,"font-size":n.value,"text-anchor":"middle",fill:"var(--color-menu)"},$e(le(qi)(e.item[o.value].energy,le(Ce).decimalPlaces,!1)),9,NB),U("text",{x:t.xScale(t.id)+t.xScale.bandwidth()/2,y:t.yScale(e.item[o.value].energy)-10,"font-size":n.value-2,"text-anchor":"middle",fill:l()},$e(s()),9,$B),U("text",{x:t.xScale(t.id)+t.xScale.bandwidth()/2,y:t.height-t.margin.bottom-5,"font-size":n.value,"text-anchor":"middle",fill:e.item.color,class:Qe(e.item.icon.length<=2?"fas":"")},$e(a(e.item.name,e.item.icon)),11,DB)],8,RB))}});function YE(e){if(e.name=="PV"){const t=Pe.getEnergy("evuOut"),r=Pe.getEnergy("pv");return Math.round((r-t)/r*100)}else if(e.name=="Netz"){const t=Pe.getEnergy("evuOut"),r=Pe.getEnergy("evuIn"),n=Pe.getEnergy("pv"),i=Pe.getEnergy("batOut"),o=Pe.getEnergy("batIn");return Math.round((n+i-t-o)/(n+i+r-t-o)*100)}else return e[Te.graphScope].pvPercentage}const FB={id:"emBarLabels"},UB=We({__name:"EMLabels",props:{plotdata:{},xScale:{},yScale:{},height:{},margin:{}},setup(e){const t=e;function r(n){return n.name=="PV"?"Eigen":"Aut"}return(n,i)=>(se(),Se("g",FB,[(se(!0),Se(Ge,null,it(t.plotdata,(o,a)=>(se(),Se("g",{key:a},[we(BB,{id:a.toString(),item:o,"x-scale":t.xScale,"y-scale":t.yScale,margin:t.margin,height:t.height,barcount:t.plotdata.length,"aut-text":r(o),autarchy:le(YE)(o)},null,8,["id","item","x-scale","y-scale","margin","height","barcount","aut-text","autarchy"])]))),128))]))}}),jB={class:"d-flex justify-content-end"},VB={id:"energymeter",class:"p-0 m-0"},WB={viewBox:"0 0 500 500"},zB=["transform"],HB=["x"],qB={key:0},X0=500,md=500,Q0=12,GB="Energie",YB=We({__name:"EnergyMeter",setup(e){const t={top:25,bottom:30,left:25,right:0},r=_e(()=>{let u=[];return Ce.debug&&a(),Ps.value==!0&&(Ps.value=!1),Pe.items.size==0?zi.value=!0:(zi.value=!1,u=[Pe.getItem("evuIn"),Pe.getItem("pv"),Pe.getItem("evuOut"),Pe.getItem("batOut"),Pe.getItem("charging")],Object.values(Ye).length>1&&Object.values(Ye).forEach(c=>{u.push(c)})),u.push(Pe.getItem("devices")),Ct.forEach(c=>{c.showInGraph&&u.push(c)}),ct.forEach(c=>{c.showInGraph&&u.push(c)}),u=u.concat([Pe.getItem("batIn"),Pe.getItem("house")]),u.filter(c=>c[o.value].energy&&c[o.value].energy>0)}),n=_e(()=>Va().range([0,X0-t.left-t.right]).domain(r.value.map((u,c)=>c.toString())).padding(.4)),i=_e(()=>gn().range([md-t.bottom-t.top,15]).domain([0,e1(r.value,u=>u[o.value].energy)??0])),o=_e(()=>Te.usePastData?"past":"now");function a(){console.debug(["all items:",Pe])}function s(){Ce.zoomedWidget=2,Ce.zoomGraph=!Ce.zoomGraph}function l(){return Ce.zoomGraph?"fa-minimize":"fa-maximize"}return(u,c)=>(se(),De(ul,{"full-width":!0},{title:Ae(()=>[Ke($e(GB))]),buttons:Ae(()=>[U("div",jB,[we(Jm,{widgetid:"graphsettings","show-left-button":!0,"show-right-button":!0,"ignore-live":!0,onShiftLeft:le(Qc),onShiftRight:le(Ym),onShiftUp:le(Km),onShiftDown:le(Xm)},null,8,["onShiftLeft","onShiftRight","onShiftUp","onShiftDown"]),le(Ln)?(se(),Se("span",{key:0,type:"button",class:"ms-1 p-0 pt-1",onClick:s},[U("span",{class:Qe(["fa-solid fa-lg ps-1",l()])},null,2)])):Me("",!0)])]),default:Ae(()=>[U("figure",VB,[(se(),Se("svg",WB,[U("g",{transform:"translate("+t.left+","+t.top+")"},[we(PB,{plotdata:r.value,"x-scale":n.value,"y-scale":i.value,height:md,margin:t},null,8,["plotdata","x-scale","y-scale"]),we(LB,{"y-scale":i.value,width:X0,fontsize:Q0,config:le(Ce)},null,8,["y-scale","config"]),U("text",{x:-t.left,y:"-15",fill:"var(--color-axis)","font-size":Q0},$e(le(Te).graphMode=="year"?"MWh":"kWh"),9,HB),we(UB,{plotdata:r.value,"x-scale":n.value,"y-scale":i.value,height:md,margin:t},null,8,["plotdata","x-scale","y-scale"])],8,zB)]))]),le(zi)?(se(),Se("p",qB,"No data")):Me("",!0)]),_:1}))}}),KB=Xe(YB,[["__scopeId","data-v-5d0b5b46"]]),XB=["id"],QB=["y","width","fill"],JB=["y","width"],ZB=["y","x","width"],e3=We({__name:"EnergyBar",props:{id:{},item:{},yScale:{},xScale:{},itemHeight:{}},setup(e){const t=e,r=_e(()=>t.xScale(t.item[Te.graphScope].energy)),n=_e(()=>{let o=0;return t.item[Te.graphScope].energyPv>0&&(o=t.xScale(t.item[Te.graphScope].energyPv)),o>r.value&&(o=r.value),o}),i=_e(()=>{let o=0;return t.item[Te.graphScope].energyBat>0&&(o=t.xScale(t.item[Te.graphScope].energyBat)),o>r.value&&(o=r.value),o});return(o,a)=>(se(),Se("g",{id:`bar-${t.item.name}`},[U("rect",{class:"bar",y:t.yScale(t.id)+t.itemHeight/2-4,x:"0",rx:"6",ry:"6",height:"12",width:r.value,fill:e.item.color},null,8,QB),U("rect",{class:"bar",y:t.yScale(t.id)+t.itemHeight/2+10,x:"0",rx:"3",ry:"3",height:"7",width:n.value,fill:"var(--color-pv)","fill-opacity":"100%"},null,8,JB),U("rect",{class:"bar",y:t.yScale(t.id)+t.itemHeight/2+10,x:n.value,rx:"3",ry:"3",height:"7",width:i.value,fill:"var(--color-battery)","fill-opacity":"100%"},null,8,ZB)],8,XB))}}),t3={id:"emBargraph"},r3=We({__name:"BarGraph",props:{plotdata:{},yscale:{},xscale:{},itemHeight:{}},setup(e){const t=e;return(r,n)=>(se(),Se("g",t3,[(se(!0),Se(Ge,null,it(t.plotdata,(i,o)=>(se(),Se("g",{key:o},[we(e3,{id:o.toString(),item:i,"x-scale":t.xscale,"y-scale":t.yscale,"item-height":e.itemHeight},null,8,["id","item","x-scale","y-scale","item-height"])]))),128))]))}}),n3=["id"],i3=["y","x","fill"],o3=["y","x"],s3=["y","x","font-size"],yd=24,a3=We({__name:"EnergyLabel",props:{id:{},item:{},yscale:{},margin:{},width:{},itemHeight:{},autarchy:{},autText:{}},setup(e){const t=e,r=_e(()=>t.yscale(t.id)+t.itemHeight/3);function n(){return t.autarchy?t.autText+": "+t.autarchy.toLocaleString(void 0)+" %":""}function i(o){return o.length>14?o.slice(0,13)+"...":o}return(o,a)=>(se(),Se("g",{id:"barlabel-"+t.id},[U("text",{y:r.value,x:t.margin.left,"font-size":yd,"text-anchor":"start",fill:e.item.color,class:Qe(e.item.icon.length<=2?"fas":"")},$e(i(t.item.icon)),11,i3),U("text",{y:r.value,x:t.width/2+t.margin.left,"font-size":yd,"text-anchor":"middle",fill:"var(--color-menu)"},$e(le(qi)(e.item[le(Te).graphScope].energy,le(Ce).decimalPlaces,!1)),9,o3),U("text",{y:r.value,x:t.width-t.margin.right,"font-size":yd-2,"text-anchor":"end",fill:"var(--color-pv)"},$e(n()),9,s3)],8,n3))}}),l3={id:"emBarLabels"},u3=We({__name:"EnergyLabels",props:{plotdata:{},yscale:{},width:{},itemHeight:{},margin:{}},setup(e){const t=e;function r(n){return n.name=="PV"?"Eigen":"Aut"}return(n,i)=>(se(),Se("g",l3,[(se(!0),Se(Ge,null,it(t.plotdata,(o,a)=>(se(),Se("g",{key:a},[we(a3,{id:a.toString(),item:o,yscale:t.yscale,margin:t.margin,width:t.width,"item-height":e.itemHeight,"aut-text":r(o),autarchy:le(YE)(o)},null,8,["id","item","yscale","margin","width","item-height","aut-text","autarchy"])]))),128))]))}}),c3={class:"d-flex justify-content-end"},f3={id:"energymeter",class:"p-0 m-0"},d3=["viewBox"],h3=["transform"],p3=["x"],g3={key:0},J0=500,vd=60,m3=12,y3="Energie",v3=We({__name:"EnergyMeter2",setup(e){const t={top:0,bottom:30,left:0,right:0},r=_e(()=>n.value.length*vd+t.top+t.bottom),n=_e(()=>{let l=[];return Ce.debug&&a(),Ps.value==!0&&(Ps.value=!1),Pe.items.size==0?zi.value=!0:(zi.value=!1,l=[Pe.getItem("evuIn"),Pe.getItem("pv"),Pe.getItem("evuOut"),Pe.getItem("batOut"),Pe.getItem("charging")],Object.values(Ye).length>1&&Object.values(Ye).forEach(u=>{l.push(u)})),l.push(Pe.getItem("devices")),Ct.forEach(u=>{u.showInGraph&&l.push(u)}),ct.forEach(u=>{u.showInGraph&&l.push(u)}),l=l.concat([Pe.getItem("batIn"),Pe.getItem("house")]),l.filter(u=>u[Te.graphScope].energy&&u[Te.graphScope].energy>0)}),i=_e(()=>gn().range([0,J0-t.left-t.right]).domain([0,e1(n.value,l=>(Te.graphMode=="live"||Te.graphMode=="today",l[Te.graphScope].energy))??0])),o=_e(()=>Va().range([t.top,r.value-t.bottom]).domain(n.value.map((l,u)=>u.toString())).padding(.1));function a(){console.debug(["all items:",Pe])}function s(){Ce.zoomedWidget=2,Ce.zoomGraph=!Ce.zoomGraph}return(l,u)=>(se(),De(ul,{"full-width":!0},{title:Ae(()=>[Ke($e(y3))]),buttons:Ae(()=>[U("div",c3,[we(Jm,{widgetid:"graphsettings","show-left-button":!0,"show-right-button":!0,"ignore-live":!0,onShiftLeft:le(Qc),onShiftRight:le(Ym),onShiftUp:le(Km),onShiftDown:le(Xm)},null,8,["onShiftLeft","onShiftRight","onShiftUp","onShiftDown"]),le(Ln)?(se(),Se("span",{key:0,type:"button",class:"ms-1 p-0 pt-1",onClick:s},[...u[0]||(u[0]=[U("span",{class:"fa-solid fa-lg ps-1 fa-magnifying-glass"},null,-1)])])):Me("",!0)])]),default:Ae(()=>[U("figure",f3,[(se(),Se("svg",{viewBox:"0 0 500 "+r.value},[U("g",{transform:"translate("+t.left+","+t.top+")"},[we(r3,{plotdata:n.value,xscale:i.value,yscale:o.value,"item-height":vd},null,8,["plotdata","xscale","yscale"]),U("text",{x:-t.left,y:"-15",fill:"var(--color-axis)","font-size":m3},$e(le(Te).graphMode=="year"?"MWh":"kWh"),9,p3),we(u3,{plotdata:n.value,yscale:o.value,width:J0,"item-height":vd,margin:t},null,8,["plotdata","yscale"])],8,h3)],8,d3))]),le(zi)?(se(),Se("p",g3,"No data")):Me("",!0)]),_:1}))}}),b3=Xe(v3,[["__scopeId","data-v-c71dc5a3"]]),_3={class:"d-flex flex-column align-items-center justify-content-start infoitem"},w3=We({__name:"InfoItem",props:{heading:{},small:{type:Boolean}},setup(e){const t=e,r=_e(()=>t.small?{"font-size":"var(--font-small)"}:{"font-size":"var(--font-small)"}),n=_e(()=>t.small?{"font-size":"var(--font-small)"}:{"font-size":"var(--font-normal)"}),i=_e(()=>t.small?"mt-0":"mt-1");return(o,a)=>(se(),Se("span",_3,[U("span",{class:Qe(["d-flex heading",i.value]),style:ot(r.value)},$e(t.heading),7),U("span",{class:"d-flex my-0 me-0 align-items-center content",style:ot(n.value)},[It(o.$slots,"default",{},void 0,!0)],4)]))}}),lt=Xe(w3,[["__scopeId","data-v-f6af00e8"]]);var mr="top",jr="bottom",Vr="right",yr="left",Jc="auto",qs=[mr,jr,Vr,yr],$o="start",Os="end",KE="clippingParents",Zm="viewport",ss="popper",XE="reference",xg=qs.reduce(function(e,t){return e.concat([t+"-"+$o,t+"-"+Os])},[]),ey=[].concat(qs,[Jc]).reduce(function(e,t){return e.concat([t,t+"-"+$o,t+"-"+Os])},[]),QE="beforeRead",JE="read",ZE="afterRead",ex="beforeMain",tx="main",rx="afterMain",nx="beforeWrite",ix="write",ox="afterWrite",sx=[QE,JE,ZE,ex,tx,rx,nx,ix,ox];function Bn(e){return e?(e.nodeName||"").toLowerCase():null}function Wr(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function Do(e){var t=Wr(e).Element;return e instanceof t||e instanceof Element}function en(e){var t=Wr(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function ty(e){if(typeof ShadowRoot>"u")return!1;var t=Wr(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}function S3(e){var t=e.state;Object.keys(t.elements).forEach(function(r){var n=t.styles[r]||{},i=t.attributes[r]||{},o=t.elements[r];!en(o)||!Bn(o)||(Object.assign(o.style,n),Object.keys(i).forEach(function(a){var s=i[a];s===!1?o.removeAttribute(a):o.setAttribute(a,s===!0?"":s)}))})}function E3(e){var t=e.state,r={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,r.popper),t.styles=r,t.elements.arrow&&Object.assign(t.elements.arrow.style,r.arrow),function(){Object.keys(t.elements).forEach(function(n){var i=t.elements[n],o=t.attributes[n]||{},a=Object.keys(t.styles.hasOwnProperty(n)?t.styles[n]:r[n]),s=a.reduce(function(l,u){return l[u]="",l},{});!en(i)||!Bn(i)||(Object.assign(i.style,s),Object.keys(o).forEach(function(l){i.removeAttribute(l)}))})}}const ax={name:"applyStyles",enabled:!0,phase:"write",fn:S3,effect:E3,requires:["computeStyles"]};function Rn(e){return e.split("-")[0]}var Mo=Math.max,dc=Math.min,Ls=Math.round;function Tg(){var e=navigator.userAgentData;return e!=null&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function lx(){return!/^((?!chrome|android).)*safari/i.test(Tg())}function Rs(e,t,r){t===void 0&&(t=!1),r===void 0&&(r=!1);var n=e.getBoundingClientRect(),i=1,o=1;t&&en(e)&&(i=e.offsetWidth>0&&Ls(n.width)/e.offsetWidth||1,o=e.offsetHeight>0&&Ls(n.height)/e.offsetHeight||1);var a=Do(e)?Wr(e):window,s=a.visualViewport,l=!lx()&&r,u=(n.left+(l&&s?s.offsetLeft:0))/i,c=(n.top+(l&&s?s.offsetTop:0))/o,f=n.width/i,d=n.height/o;return{width:f,height:d,top:c,right:u+f,bottom:c+d,left:u,x:u,y:c}}function ry(e){var t=Rs(e),r=e.offsetWidth,n=e.offsetHeight;return Math.abs(t.width-r)<=1&&(r=t.width),Math.abs(t.height-n)<=1&&(n=t.height),{x:e.offsetLeft,y:e.offsetTop,width:r,height:n}}function ux(e,t){var r=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(r&&ty(r)){var n=t;do{if(n&&e.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function bi(e){return Wr(e).getComputedStyle(e)}function x3(e){return["table","td","th"].indexOf(Bn(e))>=0}function Zi(e){return((Do(e)?e.ownerDocument:e.document)||window.document).documentElement}function Zc(e){return Bn(e)==="html"?e:e.assignedSlot||e.parentNode||(ty(e)?e.host:null)||Zi(e)}function Z0(e){return!en(e)||bi(e).position==="fixed"?null:e.offsetParent}function T3(e){var t=/firefox/i.test(Tg()),r=/Trident/i.test(Tg());if(r&&en(e)){var n=bi(e);if(n.position==="fixed")return null}var i=Zc(e);for(ty(i)&&(i=i.host);en(i)&&["html","body"].indexOf(Bn(i))<0;){var o=bi(i);if(o.transform!=="none"||o.perspective!=="none"||o.contain==="paint"||["transform","perspective"].indexOf(o.willChange)!==-1||t&&o.willChange==="filter"||t&&o.filter&&o.filter!=="none")return i;i=i.parentNode}return null}function cl(e){for(var t=Wr(e),r=Z0(e);r&&x3(r)&&bi(r).position==="static";)r=Z0(r);return r&&(Bn(r)==="html"||Bn(r)==="body"&&bi(r).position==="static")?t:r||T3(e)||t}function ny(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function Pa(e,t,r){return Mo(e,dc(t,r))}function A3(e,t,r){var n=Pa(e,t,r);return n>r?r:n}function cx(){return{top:0,right:0,bottom:0,left:0}}function fx(e){return Object.assign({},cx(),e)}function dx(e,t){return t.reduce(function(r,n){return r[n]=e,r},{})}var I3=function(t,r){return t=typeof t=="function"?t(Object.assign({},r.rects,{placement:r.placement})):t,fx(typeof t!="number"?t:dx(t,qs))};function C3(e){var t,r=e.state,n=e.name,i=e.options,o=r.elements.arrow,a=r.modifiersData.popperOffsets,s=Rn(r.placement),l=ny(s),u=[yr,Vr].indexOf(s)>=0,c=u?"height":"width";if(!(!o||!a)){var f=I3(i.padding,r),d=ry(o),h=l==="y"?mr:yr,p=l==="y"?jr:Vr,y=r.rects.reference[c]+r.rects.reference[l]-a[l]-r.rects.popper[c],v=a[l]-r.rects.reference[l],g=cl(o),m=g?l==="y"?g.clientHeight||0:g.clientWidth||0:0,b=y/2-v/2,_=f[h],w=m-d[c]-f[p],E=m/2-d[c]/2+b,T=Pa(_,E,w),C=l;r.modifiersData[n]=(t={},t[C]=T,t.centerOffset=T-E,t)}}function M3(e){var t=e.state,r=e.options,n=r.element,i=n===void 0?"[data-popper-arrow]":n;i!=null&&(typeof i=="string"&&(i=t.elements.popper.querySelector(i),!i)||ux(t.elements.popper,i)&&(t.elements.arrow=i))}const hx={name:"arrow",enabled:!0,phase:"main",fn:C3,effect:M3,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Ns(e){return e.split("-")[1]}var k3={top:"auto",right:"auto",bottom:"auto",left:"auto"};function P3(e,t){var r=e.x,n=e.y,i=t.devicePixelRatio||1;return{x:Ls(r*i)/i||0,y:Ls(n*i)/i||0}}function e_(e){var t,r=e.popper,n=e.popperRect,i=e.placement,o=e.variation,a=e.offsets,s=e.position,l=e.gpuAcceleration,u=e.adaptive,c=e.roundOffsets,f=e.isFixed,d=a.x,h=d===void 0?0:d,p=a.y,y=p===void 0?0:p,v=typeof c=="function"?c({x:h,y}):{x:h,y};h=v.x,y=v.y;var g=a.hasOwnProperty("x"),m=a.hasOwnProperty("y"),b=yr,_=mr,w=window;if(u){var E=cl(r),T="clientHeight",C="clientWidth";if(E===Wr(r)&&(E=Zi(r),bi(E).position!=="static"&&s==="absolute"&&(T="scrollHeight",C="scrollWidth")),E=E,i===mr||(i===yr||i===Vr)&&o===Os){_=jr;var j=f&&E===w&&w.visualViewport?w.visualViewport.height:E[T];y-=j-n.height,y*=l?1:-1}if(i===yr||(i===mr||i===jr)&&o===Os){b=Vr;var P=f&&E===w&&w.visualViewport?w.visualViewport.width:E[C];h-=P-n.width,h*=l?1:-1}}var N=Object.assign({position:s},u&&k3),M=c===!0?P3({x:h,y},Wr(r)):{x:h,y};if(h=M.x,y=M.y,l){var R;return Object.assign({},N,(R={},R[_]=m?"0":"",R[b]=g?"0":"",R.transform=(w.devicePixelRatio||1)<=1?"translate("+h+"px, "+y+"px)":"translate3d("+h+"px, "+y+"px, 0)",R))}return Object.assign({},N,(t={},t[_]=m?y+"px":"",t[b]=g?h+"px":"",t.transform="",t))}function O3(e){var t=e.state,r=e.options,n=r.gpuAcceleration,i=n===void 0?!0:n,o=r.adaptive,a=o===void 0?!0:o,s=r.roundOffsets,l=s===void 0?!0:s,u={placement:Rn(t.placement),variation:Ns(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:i,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,e_(Object.assign({},u,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:a,roundOffsets:l})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,e_(Object.assign({},u,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}const px={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:O3,data:{}};var $l={passive:!0};function L3(e){var t=e.state,r=e.instance,n=e.options,i=n.scroll,o=i===void 0?!0:i,a=n.resize,s=a===void 0?!0:a,l=Wr(t.elements.popper),u=[].concat(t.scrollParents.reference,t.scrollParents.popper);return o&&u.forEach(function(c){c.addEventListener("scroll",r.update,$l)}),s&&l.addEventListener("resize",r.update,$l),function(){o&&u.forEach(function(c){c.removeEventListener("scroll",r.update,$l)}),s&&l.removeEventListener("resize",r.update,$l)}}const gx={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:L3,data:{}};var R3={left:"right",right:"left",bottom:"top",top:"bottom"};function Ou(e){return e.replace(/left|right|bottom|top/g,function(t){return R3[t]})}var N3={start:"end",end:"start"};function t_(e){return e.replace(/start|end/g,function(t){return N3[t]})}function iy(e){var t=Wr(e),r=t.pageXOffset,n=t.pageYOffset;return{scrollLeft:r,scrollTop:n}}function oy(e){return Rs(Zi(e)).left+iy(e).scrollLeft}function $3(e,t){var r=Wr(e),n=Zi(e),i=r.visualViewport,o=n.clientWidth,a=n.clientHeight,s=0,l=0;if(i){o=i.width,a=i.height;var u=lx();(u||!u&&t==="fixed")&&(s=i.offsetLeft,l=i.offsetTop)}return{width:o,height:a,x:s+oy(e),y:l}}function D3(e){var t,r=Zi(e),n=iy(e),i=(t=e.ownerDocument)==null?void 0:t.body,o=Mo(r.scrollWidth,r.clientWidth,i?i.scrollWidth:0,i?i.clientWidth:0),a=Mo(r.scrollHeight,r.clientHeight,i?i.scrollHeight:0,i?i.clientHeight:0),s=-n.scrollLeft+oy(e),l=-n.scrollTop;return bi(i||r).direction==="rtl"&&(s+=Mo(r.clientWidth,i?i.clientWidth:0)-o),{width:o,height:a,x:s,y:l}}function sy(e){var t=bi(e),r=t.overflow,n=t.overflowX,i=t.overflowY;return/auto|scroll|overlay|hidden/.test(r+i+n)}function mx(e){return["html","body","#document"].indexOf(Bn(e))>=0?e.ownerDocument.body:en(e)&&sy(e)?e:mx(Zc(e))}function Oa(e,t){var r;t===void 0&&(t=[]);var n=mx(e),i=n===((r=e.ownerDocument)==null?void 0:r.body),o=Wr(n),a=i?[o].concat(o.visualViewport||[],sy(n)?n:[]):n,s=t.concat(a);return i?s:s.concat(Oa(Zc(a)))}function Ag(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function B3(e,t){var r=Rs(e,!1,t==="fixed");return r.top=r.top+e.clientTop,r.left=r.left+e.clientLeft,r.bottom=r.top+e.clientHeight,r.right=r.left+e.clientWidth,r.width=e.clientWidth,r.height=e.clientHeight,r.x=r.left,r.y=r.top,r}function r_(e,t,r){return t===Zm?Ag($3(e,r)):Do(t)?B3(t,r):Ag(D3(Zi(e)))}function F3(e){var t=Oa(Zc(e)),r=["absolute","fixed"].indexOf(bi(e).position)>=0,n=r&&en(e)?cl(e):e;return Do(n)?t.filter(function(i){return Do(i)&&ux(i,n)&&Bn(i)!=="body"}):[]}function U3(e,t,r,n){var i=t==="clippingParents"?F3(e):[].concat(t),o=[].concat(i,[r]),a=o[0],s=o.reduce(function(l,u){var c=r_(e,u,n);return l.top=Mo(c.top,l.top),l.right=dc(c.right,l.right),l.bottom=dc(c.bottom,l.bottom),l.left=Mo(c.left,l.left),l},r_(e,a,n));return s.width=s.right-s.left,s.height=s.bottom-s.top,s.x=s.left,s.y=s.top,s}function yx(e){var t=e.reference,r=e.element,n=e.placement,i=n?Rn(n):null,o=n?Ns(n):null,a=t.x+t.width/2-r.width/2,s=t.y+t.height/2-r.height/2,l;switch(i){case mr:l={x:a,y:t.y-r.height};break;case jr:l={x:a,y:t.y+t.height};break;case Vr:l={x:t.x+t.width,y:s};break;case yr:l={x:t.x-r.width,y:s};break;default:l={x:t.x,y:t.y}}var u=i?ny(i):null;if(u!=null){var c=u==="y"?"height":"width";switch(o){case $o:l[u]=l[u]-(t[c]/2-r[c]/2);break;case Os:l[u]=l[u]+(t[c]/2-r[c]/2);break}}return l}function $s(e,t){t===void 0&&(t={});var r=t,n=r.placement,i=n===void 0?e.placement:n,o=r.strategy,a=o===void 0?e.strategy:o,s=r.boundary,l=s===void 0?KE:s,u=r.rootBoundary,c=u===void 0?Zm:u,f=r.elementContext,d=f===void 0?ss:f,h=r.altBoundary,p=h===void 0?!1:h,y=r.padding,v=y===void 0?0:y,g=fx(typeof v!="number"?v:dx(v,qs)),m=d===ss?XE:ss,b=e.rects.popper,_=e.elements[p?m:d],w=U3(Do(_)?_:_.contextElement||Zi(e.elements.popper),l,c,a),E=Rs(e.elements.reference),T=yx({reference:E,element:b,placement:i}),C=Ag(Object.assign({},b,T)),j=d===ss?C:E,P={top:w.top-j.top+g.top,bottom:j.bottom-w.bottom+g.bottom,left:w.left-j.left+g.left,right:j.right-w.right+g.right},N=e.modifiersData.offset;if(d===ss&&N){var M=N[i];Object.keys(P).forEach(function(R){var O=[Vr,jr].indexOf(R)>=0?1:-1,G=[mr,jr].indexOf(R)>=0?"y":"x";P[R]+=M[G]*O})}return P}function j3(e,t){t===void 0&&(t={});var r=t,n=r.placement,i=r.boundary,o=r.rootBoundary,a=r.padding,s=r.flipVariations,l=r.allowedAutoPlacements,u=l===void 0?ey:l,c=Ns(n),f=c?s?xg:xg.filter(function(p){return Ns(p)===c}):qs,d=f.filter(function(p){return u.indexOf(p)>=0});d.length===0&&(d=f);var h=d.reduce(function(p,y){return p[y]=$s(e,{placement:y,boundary:i,rootBoundary:o,padding:a})[Rn(y)],p},{});return Object.keys(h).sort(function(p,y){return h[p]-h[y]})}function V3(e){if(Rn(e)===Jc)return[];var t=Ou(e);return[t_(e),t,t_(t)]}function W3(e){var t=e.state,r=e.options,n=e.name;if(!t.modifiersData[n]._skip){for(var i=r.mainAxis,o=i===void 0?!0:i,a=r.altAxis,s=a===void 0?!0:a,l=r.fallbackPlacements,u=r.padding,c=r.boundary,f=r.rootBoundary,d=r.altBoundary,h=r.flipVariations,p=h===void 0?!0:h,y=r.allowedAutoPlacements,v=t.options.placement,g=Rn(v),m=g===v,b=l||(m||!p?[Ou(v)]:V3(v)),_=[v].concat(b).reduce(function(ge,K){return ge.concat(Rn(K)===Jc?j3(t,{placement:K,boundary:c,rootBoundary:f,padding:u,flipVariations:p,allowedAutoPlacements:y}):K)},[]),w=t.rects.reference,E=t.rects.popper,T=new Map,C=!0,j=_[0],P=0;P<_.length;P++){var N=_[P],M=Rn(N),R=Ns(N)===$o,O=[mr,jr].indexOf(M)>=0,G=O?"width":"height",q=$s(t,{placement:N,boundary:c,rootBoundary:f,altBoundary:d,padding:u}),z=O?R?Vr:yr:R?jr:mr;w[G]>E[G]&&(z=Ou(z));var B=Ou(z),ae=[];if(o&&ae.push(q[M]<=0),s&&ae.push(q[z]<=0,q[B]<=0),ae.every(function(ge){return ge})){j=N,C=!1;break}T.set(N,ae)}if(C)for(var $=p?3:1,ie=function(K){var ee=_.find(function(X){var V=T.get(X);if(V)return V.slice(0,K).every(function(Y){return Y})});if(ee)return j=ee,"break"},Z=$;Z>0;Z--){var ue=ie(Z);if(ue==="break")break}t.placement!==j&&(t.modifiersData[n]._skip=!0,t.placement=j,t.reset=!0)}}const vx={name:"flip",enabled:!0,phase:"main",fn:W3,requiresIfExists:["offset"],data:{_skip:!1}};function n_(e,t,r){return r===void 0&&(r={x:0,y:0}),{top:e.top-t.height-r.y,right:e.right-t.width+r.x,bottom:e.bottom-t.height+r.y,left:e.left-t.width-r.x}}function i_(e){return[mr,Vr,jr,yr].some(function(t){return e[t]>=0})}function z3(e){var t=e.state,r=e.name,n=t.rects.reference,i=t.rects.popper,o=t.modifiersData.preventOverflow,a=$s(t,{elementContext:"reference"}),s=$s(t,{altBoundary:!0}),l=n_(a,n),u=n_(s,i,o),c=i_(l),f=i_(u);t.modifiersData[r]={referenceClippingOffsets:l,popperEscapeOffsets:u,isReferenceHidden:c,hasPopperEscaped:f},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":c,"data-popper-escaped":f})}const bx={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:z3};function H3(e,t,r){var n=Rn(e),i=[yr,mr].indexOf(n)>=0?-1:1,o=typeof r=="function"?r(Object.assign({},t,{placement:e})):r,a=o[0],s=o[1];return a=a||0,s=(s||0)*i,[yr,Vr].indexOf(n)>=0?{x:s,y:a}:{x:a,y:s}}function q3(e){var t=e.state,r=e.options,n=e.name,i=r.offset,o=i===void 0?[0,0]:i,a=ey.reduce(function(c,f){return c[f]=H3(f,t.rects,o),c},{}),s=a[t.placement],l=s.x,u=s.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=l,t.modifiersData.popperOffsets.y+=u),t.modifiersData[n]=a}const _x={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:q3};function G3(e){var t=e.state,r=e.name;t.modifiersData[r]=yx({reference:t.rects.reference,element:t.rects.popper,placement:t.placement})}const Sx={name:"popperOffsets",enabled:!0,phase:"read",fn:G3,data:{}};function Y3(e){return e==="x"?"y":"x"}function K3(e){var t=e.state,r=e.options,n=e.name,i=r.mainAxis,o=i===void 0?!0:i,a=r.altAxis,s=a===void 0?!1:a,l=r.boundary,u=r.rootBoundary,c=r.altBoundary,f=r.padding,d=r.tether,h=d===void 0?!0:d,p=r.tetherOffset,y=p===void 0?0:p,v=$s(t,{boundary:l,rootBoundary:u,padding:f,altBoundary:c}),g=Rn(t.placement),m=Ns(t.placement),b=!m,_=ny(g),w=Y3(_),E=t.modifiersData.popperOffsets,T=t.rects.reference,C=t.rects.popper,j=typeof y=="function"?y(Object.assign({},t.rects,{placement:t.placement})):y,P=typeof j=="number"?{mainAxis:j,altAxis:j}:Object.assign({mainAxis:0,altAxis:0},j),N=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,M={x:0,y:0};if(E){if(o){var R,O=_==="y"?mr:yr,G=_==="y"?jr:Vr,q=_==="y"?"height":"width",z=E[_],B=z+v[O],ae=z-v[G],$=h?-C[q]/2:0,ie=m===$o?T[q]:C[q],Z=m===$o?-C[q]:-T[q],ue=t.elements.arrow,ge=h&&ue?ry(ue):{width:0,height:0},K=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:cx(),ee=K[O],X=K[G],V=Pa(0,T[q],ge[q]),Y=b?T[q]/2-$-V-ee-P.mainAxis:ie-V-ee-P.mainAxis,re=b?-T[q]/2+$+V+X+P.mainAxis:Z+V+X+P.mainAxis,ne=t.elements.arrow&&cl(t.elements.arrow),k=ne?_==="y"?ne.clientTop||0:ne.clientLeft||0:0,L=(R=N?.[_])!=null?R:0,F=z+Y-L-k,D=z+re-L,H=Pa(h?dc(B,F):B,z,h?Mo(ae,D):ae);E[_]=H,M[_]=H-z}if(s){var Q,de=_==="x"?mr:yr,J=_==="x"?jr:Vr,fe=E[w],te=w==="y"?"height":"width",me=fe+v[de],Ee=fe-v[J],xe=[mr,yr].indexOf(g)!==-1,Ne=(Q=N?.[w])!=null?Q:0,I=xe?me:fe-T[te]-C[te]-Ne+P.altAxis,x=xe?fe+T[te]+C[te]-Ne-P.altAxis:Ee,S=h&&xe?A3(I,fe,x):Pa(h?I:me,fe,h?x:Ee);E[w]=S,M[w]=S-fe}t.modifiersData[n]=M}}const Ex={name:"preventOverflow",enabled:!0,phase:"main",fn:K3,requiresIfExists:["offset"]};function X3(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function Q3(e){return e===Wr(e)||!en(e)?iy(e):X3(e)}function J3(e){var t=e.getBoundingClientRect(),r=Ls(t.width)/e.offsetWidth||1,n=Ls(t.height)/e.offsetHeight||1;return r!==1||n!==1}function Z3(e,t,r){r===void 0&&(r=!1);var n=en(t),i=en(t)&&J3(t),o=Zi(t),a=Rs(e,i,r),s={scrollLeft:0,scrollTop:0},l={x:0,y:0};return(n||!n&&!r)&&((Bn(t)!=="body"||sy(o))&&(s=Q3(t)),en(t)?(l=Rs(t,!0),l.x+=t.clientLeft,l.y+=t.clientTop):o&&(l.x=oy(o))),{x:a.left+s.scrollLeft-l.x,y:a.top+s.scrollTop-l.y,width:a.width,height:a.height}}function eF(e){var t=new Map,r=new Set,n=[];e.forEach(function(o){t.set(o.name,o)});function i(o){r.add(o.name);var a=[].concat(o.requires||[],o.requiresIfExists||[]);a.forEach(function(s){if(!r.has(s)){var l=t.get(s);l&&i(l)}}),n.push(o)}return e.forEach(function(o){r.has(o.name)||i(o)}),n}function tF(e){var t=eF(e);return sx.reduce(function(r,n){return r.concat(t.filter(function(i){return i.phase===n}))},[])}function rF(e){var t;return function(){return t||(t=new Promise(function(r){Promise.resolve().then(function(){t=void 0,r(e())})})),t}}function nF(e){var t=e.reduce(function(r,n){var i=r[n.name];return r[n.name]=i?Object.assign({},i,n,{options:Object.assign({},i.options,n.options),data:Object.assign({},i.data,n.data)}):n,r},{});return Object.keys(t).map(function(r){return t[r]})}var o_={placement:"bottom",modifiers:[],strategy:"absolute"};function s_(){for(var e=arguments.length,t=new Array(e),r=0;r(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,(t,r)=>`#${CSS.escape(r)}`)),e),aF=e=>e==null?`${e}`:Object.prototype.toString.call(e).match(/\s([a-z]+)/i)[1].toLowerCase(),lF=e=>{do e+=Math.floor(Math.random()*oF);while(document.getElementById(e));return e},uF=e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:r}=window.getComputedStyle(e);const n=Number.parseFloat(t),i=Number.parseFloat(r);return!n&&!i?0:(t=t.split(",")[0],r=r.split(",")[0],(Number.parseFloat(t)+Number.parseFloat(r))*sF)},Ix=e=>{e.dispatchEvent(new Event(Ig))},si=e=>!e||typeof e!="object"?!1:(typeof e.jquery<"u"&&(e=e[0]),typeof e.nodeType<"u"),Gi=e=>si(e)?e.jquery?e[0]:e:typeof e=="string"&&e.length>0?document.querySelector(Ax(e)):null,Gs=e=>{if(!si(e)||e.getClientRects().length===0)return!1;const t=getComputedStyle(e).getPropertyValue("visibility")==="visible",r=e.closest("details:not([open])");if(!r)return t;if(r!==e){const n=e.closest("summary");if(n&&n.parentNode!==r||n===null)return!1}return t},Yi=e=>!e||e.nodeType!==Node.ELEMENT_NODE||e.classList.contains("disabled")?!0:typeof e.disabled<"u"?e.disabled:e.hasAttribute("disabled")&&e.getAttribute("disabled")!=="false",Cx=e=>{if(!document.documentElement.attachShadow)return null;if(typeof e.getRootNode=="function"){const t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?Cx(e.parentNode):null},hc=()=>{},fl=e=>{e.offsetHeight},Mx=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,_d=[],cF=e=>{document.readyState==="loading"?(_d.length||document.addEventListener("DOMContentLoaded",()=>{for(const t of _d)t()}),_d.push(e)):e()},tn=()=>document.documentElement.dir==="rtl",nn=e=>{cF(()=>{const t=Mx();if(t){const r=e.NAME,n=t.fn[r];t.fn[r]=e.jQueryInterface,t.fn[r].Constructor=e,t.fn[r].noConflict=()=>(t.fn[r]=n,e.jQueryInterface)}})},Ir=(e,t=[],r=e)=>typeof e=="function"?e.call(...t):r,kx=(e,t,r=!0)=>{if(!r){Ir(e);return}const i=uF(t)+5;let o=!1;const a=({target:s})=>{s===t&&(o=!0,t.removeEventListener(Ig,a),Ir(e))};t.addEventListener(Ig,a),setTimeout(()=>{o||Ix(t)},i)},ly=(e,t,r,n)=>{const i=e.length;let o=e.indexOf(t);return o===-1?!r&&n?e[i-1]:e[0]:(o+=r?1:-1,n&&(o=(o+i)%i),e[Math.max(0,Math.min(o,i-1))])},fF=/[^.]*(?=\..*)\.|.*/,dF=/\..*/,hF=/::\d+$/,wd={};let a_=1;const Px={mouseenter:"mouseover",mouseleave:"mouseout"},pF=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function Ox(e,t){return t&&`${t}::${a_++}`||e.uidEvent||a_++}function Lx(e){const t=Ox(e);return e.uidEvent=t,wd[t]=wd[t]||{},wd[t]}function gF(e,t){return function r(n){return uy(n,{delegateTarget:e}),r.oneOff&&Fe.off(e,n.type,t),t.apply(e,[n])}}function mF(e,t,r){return function n(i){const o=e.querySelectorAll(t);for(let{target:a}=i;a&&a!==this;a=a.parentNode)for(const s of o)if(s===a)return uy(i,{delegateTarget:a}),n.oneOff&&Fe.off(e,i.type,t,r),r.apply(a,[i])}}function Rx(e,t,r=null){return Object.values(e).find(n=>n.callable===t&&n.delegationSelector===r)}function Nx(e,t,r){const n=typeof t=="string",i=n?r:t||r;let o=$x(e);return pF.has(o)||(o=e),[n,i,o]}function l_(e,t,r,n,i){if(typeof t!="string"||!e)return;let[o,a,s]=Nx(t,r,n);t in Px&&(a=(p=>function(y){if(!y.relatedTarget||y.relatedTarget!==y.delegateTarget&&!y.delegateTarget.contains(y.relatedTarget))return p.call(this,y)})(a));const l=Lx(e),u=l[s]||(l[s]={}),c=Rx(u,a,o?r:null);if(c){c.oneOff=c.oneOff&&i;return}const f=Ox(a,t.replace(fF,"")),d=o?mF(e,r,a):gF(e,a);d.delegationSelector=o?r:null,d.callable=a,d.oneOff=i,d.uidEvent=f,u[f]=d,e.addEventListener(s,d,o)}function Cg(e,t,r,n,i){const o=Rx(t[r],n,i);o&&(e.removeEventListener(r,o,!!i),delete t[r][o.uidEvent])}function yF(e,t,r,n){const i=t[r]||{};for(const[o,a]of Object.entries(i))o.includes(n)&&Cg(e,t,r,a.callable,a.delegationSelector)}function $x(e){return e=e.replace(dF,""),Px[e]||e}const Fe={on(e,t,r,n){l_(e,t,r,n,!1)},one(e,t,r,n){l_(e,t,r,n,!0)},off(e,t,r,n){if(typeof t!="string"||!e)return;const[i,o,a]=Nx(t,r,n),s=a!==t,l=Lx(e),u=l[a]||{},c=t.startsWith(".");if(typeof o<"u"){if(!Object.keys(u).length)return;Cg(e,l,a,o,i?r:null);return}if(c)for(const f of Object.keys(l))yF(e,l,f,t.slice(1));for(const[f,d]of Object.entries(u)){const h=f.replace(hF,"");(!s||t.includes(h))&&Cg(e,l,a,d.callable,d.delegationSelector)}},trigger(e,t,r){if(typeof t!="string"||!e)return null;const n=Mx(),i=$x(t),o=t!==i;let a=null,s=!0,l=!0,u=!1;o&&n&&(a=n.Event(t,r),n(e).trigger(a),s=!a.isPropagationStopped(),l=!a.isImmediatePropagationStopped(),u=a.isDefaultPrevented());const c=uy(new Event(t,{bubbles:s,cancelable:!0}),r);return u&&c.preventDefault(),l&&e.dispatchEvent(c),c.defaultPrevented&&a&&a.preventDefault(),c}};function uy(e,t={}){for(const[r,n]of Object.entries(t))try{e[r]=n}catch{Object.defineProperty(e,r,{configurable:!0,get(){return n}})}return e}function u_(e){if(e==="true")return!0;if(e==="false")return!1;if(e===Number(e).toString())return Number(e);if(e===""||e==="null")return null;if(typeof e!="string")return e;try{return JSON.parse(decodeURIComponent(e))}catch{return e}}function Sd(e){return e.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}const ai={setDataAttribute(e,t,r){e.setAttribute(`data-bs-${Sd(t)}`,r)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${Sd(t)}`)},getDataAttributes(e){if(!e)return{};const t={},r=Object.keys(e.dataset).filter(n=>n.startsWith("bs")&&!n.startsWith("bsConfig"));for(const n of r){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1),t[i]=u_(e.dataset[n])}return t},getDataAttribute(e,t){return u_(e.getAttribute(`data-bs-${Sd(t)}`))}};class dl{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,r){const n=si(r)?ai.getDataAttribute(r,"config"):{};return{...this.constructor.Default,...typeof n=="object"?n:{},...si(r)?ai.getDataAttributes(r):{},...typeof t=="object"?t:{}}}_typeCheckConfig(t,r=this.constructor.DefaultType){for(const[n,i]of Object.entries(r)){const o=t[n],a=si(o)?"element":aF(o);if(!new RegExp(i).test(a))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${i}".`)}}}const vF="5.3.8";class bn extends dl{constructor(t,r){super(),t=Gi(t),t&&(this._element=t,this._config=this._getConfig(r),bd.set(this._element,this.constructor.DATA_KEY,this))}dispose(){bd.remove(this._element,this.constructor.DATA_KEY),Fe.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,r,n=!0){kx(t,r,n)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return bd.get(Gi(t),this.DATA_KEY)}static getOrCreateInstance(t,r={}){return this.getInstance(t)||new this(t,typeof r=="object"?r:null)}static get VERSION(){return vF}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const Ed=e=>{let t=e.getAttribute("data-bs-target");if(!t||t==="#"){let r=e.getAttribute("href");if(!r||!r.includes("#")&&!r.startsWith("."))return null;r.includes("#")&&!r.startsWith("#")&&(r=`#${r.split("#")[1]}`),t=r&&r!=="#"?r.trim():null}return t?t.split(",").map(r=>Ax(r)).join(","):null},Je={find(e,t=document.documentElement){return[].concat(...Element.prototype.querySelectorAll.call(t,e))},findOne(e,t=document.documentElement){return Element.prototype.querySelector.call(t,e)},children(e,t){return[].concat(...e.children).filter(r=>r.matches(t))},parents(e,t){const r=[];let n=e.parentNode.closest(t);for(;n;)r.push(n),n=n.parentNode.closest(t);return r},prev(e,t){let r=e.previousElementSibling;for(;r;){if(r.matches(t))return[r];r=r.previousElementSibling}return[]},next(e,t){let r=e.nextElementSibling;for(;r;){if(r.matches(t))return[r];r=r.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(r=>`${r}:not([tabindex^="-"])`).join(",");return this.find(t,e).filter(r=>!Yi(r)&&Gs(r))},getSelectorFromElement(e){const t=Ed(e);return t&&Je.findOne(t)?t:null},getElementFromSelector(e){const t=Ed(e);return t?Je.findOne(t):null},getMultipleElementsFromSelector(e){const t=Ed(e);return t?Je.find(t):[]}},ef=(e,t="hide")=>{const r=`click.dismiss${e.EVENT_KEY}`,n=e.NAME;Fe.on(document,r,`[data-bs-dismiss="${n}"]`,function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),Yi(this))return;const o=Je.getElementFromSelector(this)||this.closest(`.${n}`);e.getOrCreateInstance(o)[t]()})},bF="alert",_F="bs.alert",Dx=`.${_F}`,wF=`close${Dx}`,SF=`closed${Dx}`,EF="fade",xF="show";class tf extends bn{static get NAME(){return bF}close(){if(Fe.trigger(this._element,wF).defaultPrevented)return;this._element.classList.remove(xF);const r=this._element.classList.contains(EF);this._queueCallback(()=>this._destroyElement(),this._element,r)}_destroyElement(){this._element.remove(),Fe.trigger(this._element,SF),this.dispose()}static jQueryInterface(t){return this.each(function(){const r=tf.getOrCreateInstance(this);if(typeof t=="string"){if(r[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);r[t](this)}})}}ef(tf,"close");nn(tf);const TF="button",AF="bs.button",IF=`.${AF}`,CF=".data-api",MF="active",c_='[data-bs-toggle="button"]',kF=`click${IF}${CF}`;class rf extends bn{static get NAME(){return TF}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle(MF))}static jQueryInterface(t){return this.each(function(){const r=rf.getOrCreateInstance(this);t==="toggle"&&r[t]()})}}Fe.on(document,kF,c_,e=>{e.preventDefault();const t=e.target.closest(c_);rf.getOrCreateInstance(t).toggle()});nn(rf);const PF="swipe",Ys=".bs.swipe",OF=`touchstart${Ys}`,LF=`touchmove${Ys}`,RF=`touchend${Ys}`,NF=`pointerdown${Ys}`,$F=`pointerup${Ys}`,DF="touch",BF="pen",FF="pointer-event",UF=40,jF={endCallback:null,leftCallback:null,rightCallback:null},VF={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class pc extends dl{constructor(t,r){super(),this._element=t,!(!t||!pc.isSupported())&&(this._config=this._getConfig(r),this._deltaX=0,this._supportPointerEvents=!!window.PointerEvent,this._initEvents())}static get Default(){return jF}static get DefaultType(){return VF}static get NAME(){return PF}dispose(){Fe.off(this._element,Ys)}_start(t){if(!this._supportPointerEvents){this._deltaX=t.touches[0].clientX;return}this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX)}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),Ir(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=UF)return;const r=t/this._deltaX;this._deltaX=0,r&&Ir(r>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(Fe.on(this._element,NF,t=>this._start(t)),Fe.on(this._element,$F,t=>this._end(t)),this._element.classList.add(FF)):(Fe.on(this._element,OF,t=>this._start(t)),Fe.on(this._element,LF,t=>this._move(t)),Fe.on(this._element,RF,t=>this._end(t)))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&(t.pointerType===BF||t.pointerType===DF)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const WF="carousel",zF="bs.carousel",eo=`.${zF}`,Bx=".data-api",HF="ArrowLeft",qF="ArrowRight",GF=500,ua="next",Jo="prev",as="left",Lu="right",YF=`slide${eo}`,xd=`slid${eo}`,KF=`keydown${eo}`,XF=`mouseenter${eo}`,QF=`mouseleave${eo}`,JF=`dragstart${eo}`,ZF=`load${eo}${Bx}`,e8=`click${eo}${Bx}`,Fx="carousel",Dl="active",t8="slide",r8="carousel-item-end",n8="carousel-item-start",i8="carousel-item-next",o8="carousel-item-prev",Ux=".active",jx=".carousel-item",s8=Ux+jx,a8=".carousel-item img",l8=".carousel-indicators",u8="[data-bs-slide], [data-bs-slide-to]",c8='[data-bs-ride="carousel"]',f8={[HF]:Lu,[qF]:as},d8={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},h8={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class hl extends bn{constructor(t,r){super(t,r),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=Je.findOne(l8,this._element),this._addEventListeners(),this._config.ride===Fx&&this.cycle()}static get Default(){return d8}static get DefaultType(){return h8}static get NAME(){return WF}next(){this._slide(ua)}nextWhenVisible(){!document.hidden&&Gs(this._element)&&this.next()}prev(){this._slide(Jo)}pause(){this._isSliding&&Ix(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval(()=>this.nextWhenVisible(),this._config.interval)}_maybeEnableCycle(){if(this._config.ride){if(this._isSliding){Fe.one(this._element,xd,()=>this.cycle());return}this.cycle()}}to(t){const r=this._getItems();if(t>r.length-1||t<0)return;if(this._isSliding){Fe.one(this._element,xd,()=>this.to(t));return}const n=this._getItemIndex(this._getActive());if(n===t)return;const i=t>n?ua:Jo;this._slide(i,r[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&Fe.on(this._element,KF,t=>this._keydown(t)),this._config.pause==="hover"&&(Fe.on(this._element,XF,()=>this.pause()),Fe.on(this._element,QF,()=>this._maybeEnableCycle())),this._config.touch&&pc.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const n of Je.find(a8,this._element))Fe.on(n,JF,i=>i.preventDefault());const r={leftCallback:()=>this._slide(this._directionToOrder(as)),rightCallback:()=>this._slide(this._directionToOrder(Lu)),endCallback:()=>{this._config.pause==="hover"&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(()=>this._maybeEnableCycle(),GF+this._config.interval))}};this._swipeHelper=new pc(this._element,r)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const r=f8[t.key];r&&(t.preventDefault(),this._slide(this._directionToOrder(r)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const r=Je.findOne(Ux,this._indicatorsElement);r.classList.remove(Dl),r.removeAttribute("aria-current");const n=Je.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);n&&(n.classList.add(Dl),n.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const r=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=r||this._config.defaultInterval}_slide(t,r=null){if(this._isSliding)return;const n=this._getActive(),i=t===ua,o=r||ly(this._getItems(),n,i,this._config.wrap);if(o===n)return;const a=this._getItemIndex(o),s=h=>Fe.trigger(this._element,h,{relatedTarget:o,direction:this._orderToDirection(t),from:this._getItemIndex(n),to:a});if(s(YF).defaultPrevented||!n||!o)return;const u=!!this._interval;this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(a),this._activeElement=o;const c=i?n8:r8,f=i?i8:o8;o.classList.add(f),fl(o),n.classList.add(c),o.classList.add(c);const d=()=>{o.classList.remove(c,f),o.classList.add(Dl),n.classList.remove(Dl,f,c),this._isSliding=!1,s(xd)};this._queueCallback(d,n,this._isAnimated()),u&&this.cycle()}_isAnimated(){return this._element.classList.contains(t8)}_getActive(){return Je.findOne(s8,this._element)}_getItems(){return Je.find(jx,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return tn()?t===as?Jo:ua:t===as?ua:Jo}_orderToDirection(t){return tn()?t===Jo?as:Lu:t===Jo?Lu:as}static jQueryInterface(t){return this.each(function(){const r=hl.getOrCreateInstance(this,t);if(typeof t=="number"){r.to(t);return}if(typeof t=="string"){if(r[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);r[t]()}})}}Fe.on(document,e8,u8,function(e){const t=Je.getElementFromSelector(this);if(!t||!t.classList.contains(Fx))return;e.preventDefault();const r=hl.getOrCreateInstance(t),n=this.getAttribute("data-bs-slide-to");if(n){r.to(n),r._maybeEnableCycle();return}if(ai.getDataAttribute(this,"slide")==="next"){r.next(),r._maybeEnableCycle();return}r.prev(),r._maybeEnableCycle()});Fe.on(window,ZF,()=>{const e=Je.find(c8);for(const t of e)hl.getOrCreateInstance(t)});nn(hl);const p8="collapse",g8="bs.collapse",pl=`.${g8}`,m8=".data-api",y8=`show${pl}`,v8=`shown${pl}`,b8=`hide${pl}`,_8=`hidden${pl}`,w8=`click${pl}${m8}`,Td="show",fs="collapse",Bl="collapsing",S8="collapsed",E8=`:scope .${fs} .${fs}`,x8="collapse-horizontal",T8="width",A8="height",I8=".collapse.show, .collapse.collapsing",Mg='[data-bs-toggle="collapse"]',C8={parent:null,toggle:!0},M8={parent:"(null|element)",toggle:"boolean"};class Ya extends bn{constructor(t,r){super(t,r),this._isTransitioning=!1,this._triggerArray=[];const n=Je.find(Mg);for(const i of n){const o=Je.getSelectorFromElement(i),a=Je.find(o).filter(s=>s===this._element);o!==null&&a.length&&this._triggerArray.push(i)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return C8}static get DefaultType(){return M8}static get NAME(){return p8}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(I8).filter(s=>s!==this._element).map(s=>Ya.getOrCreateInstance(s,{toggle:!1}))),t.length&&t[0]._isTransitioning||Fe.trigger(this._element,y8).defaultPrevented)return;for(const s of t)s.hide();const n=this._getDimension();this._element.classList.remove(fs),this._element.classList.add(Bl),this._element.style[n]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=()=>{this._isTransitioning=!1,this._element.classList.remove(Bl),this._element.classList.add(fs,Td),this._element.style[n]="",Fe.trigger(this._element,v8)},a=`scroll${n[0].toUpperCase()+n.slice(1)}`;this._queueCallback(i,this._element,!0),this._element.style[n]=`${this._element[a]}px`}hide(){if(this._isTransitioning||!this._isShown()||Fe.trigger(this._element,b8).defaultPrevented)return;const r=this._getDimension();this._element.style[r]=`${this._element.getBoundingClientRect()[r]}px`,fl(this._element),this._element.classList.add(Bl),this._element.classList.remove(fs,Td);for(const i of this._triggerArray){const o=Je.getElementFromSelector(i);o&&!this._isShown(o)&&this._addAriaAndCollapsedClass([i],!1)}this._isTransitioning=!0;const n=()=>{this._isTransitioning=!1,this._element.classList.remove(Bl),this._element.classList.add(fs),Fe.trigger(this._element,_8)};this._element.style[r]="",this._queueCallback(n,this._element,!0)}_isShown(t=this._element){return t.classList.contains(Td)}_configAfterMerge(t){return t.toggle=!!t.toggle,t.parent=Gi(t.parent),t}_getDimension(){return this._element.classList.contains(x8)?T8:A8}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Mg);for(const r of t){const n=Je.getElementFromSelector(r);n&&this._addAriaAndCollapsedClass([r],this._isShown(n))}}_getFirstLevelChildren(t){const r=Je.find(E8,this._config.parent);return Je.find(t,this._config.parent).filter(n=>!r.includes(n))}_addAriaAndCollapsedClass(t,r){if(t.length)for(const n of t)n.classList.toggle(S8,!r),n.setAttribute("aria-expanded",r)}static jQueryInterface(t){const r={};return typeof t=="string"&&/show|hide/.test(t)&&(r.toggle=!1),this.each(function(){const n=Ya.getOrCreateInstance(this,r);if(typeof t=="string"){if(typeof n[t]>"u")throw new TypeError(`No method named "${t}"`);n[t]()}})}}Fe.on(document,w8,Mg,function(e){(e.target.tagName==="A"||e.delegateTarget&&e.delegateTarget.tagName==="A")&&e.preventDefault();for(const t of Je.getMultipleElementsFromSelector(this))Ya.getOrCreateInstance(t,{toggle:!1}).toggle()});nn(Ya);const f_="dropdown",k8="bs.dropdown",Go=`.${k8}`,cy=".data-api",P8="Escape",d_="Tab",O8="ArrowUp",h_="ArrowDown",L8=2,R8=`hide${Go}`,N8=`hidden${Go}`,$8=`show${Go}`,D8=`shown${Go}`,Vx=`click${Go}${cy}`,Wx=`keydown${Go}${cy}`,B8=`keyup${Go}${cy}`,ls="show",F8="dropup",U8="dropend",j8="dropstart",V8="dropup-center",W8="dropdown-center",_o='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',z8=`${_o}.${ls}`,Ru=".dropdown-menu",H8=".navbar",q8=".navbar-nav",G8=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",Y8=tn()?"top-end":"top-start",K8=tn()?"top-start":"top-end",X8=tn()?"bottom-end":"bottom-start",Q8=tn()?"bottom-start":"bottom-end",J8=tn()?"left-start":"right-start",Z8=tn()?"right-start":"left-start",eU="top",tU="bottom",rU={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},nU={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class Nn extends bn{constructor(t,r){super(t,r),this._popper=null,this._parent=this._element.parentNode,this._menu=Je.next(this._element,Ru)[0]||Je.prev(this._element,Ru)[0]||Je.findOne(Ru,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return rU}static get DefaultType(){return nU}static get NAME(){return f_}toggle(){return this._isShown()?this.hide():this.show()}show(){if(Yi(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!Fe.trigger(this._element,$8,t).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(q8))for(const n of[].concat(...document.body.children))Fe.on(n,"mouseover",hc);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(ls),this._element.classList.add(ls),Fe.trigger(this._element,D8,t)}}hide(){if(Yi(this._element)||!this._isShown())return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!Fe.trigger(this._element,R8,t).defaultPrevented){if("ontouchstart"in document.documentElement)for(const n of[].concat(...document.body.children))Fe.off(n,"mouseover",hc);this._popper&&this._popper.destroy(),this._menu.classList.remove(ls),this._element.classList.remove(ls),this._element.setAttribute("aria-expanded","false"),ai.removeDataAttribute(this._menu,"popper"),Fe.trigger(this._element,N8,t)}}_getConfig(t){if(t=super._getConfig(t),typeof t.reference=="object"&&!si(t.reference)&&typeof t.reference.getBoundingClientRect!="function")throw new TypeError(`${f_.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(){if(typeof Tx>"u")throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org/docs/v2/)");let t=this._element;this._config.reference==="parent"?t=this._parent:si(this._config.reference)?t=Gi(this._config.reference):typeof this._config.reference=="object"&&(t=this._config.reference);const r=this._getPopperConfig();this._popper=ay(t,this._menu,r)}_isShown(){return this._menu.classList.contains(ls)}_getPlacement(){const t=this._parent;if(t.classList.contains(U8))return J8;if(t.classList.contains(j8))return Z8;if(t.classList.contains(V8))return eU;if(t.classList.contains(W8))return tU;const r=getComputedStyle(this._menu).getPropertyValue("--bs-position").trim()==="end";return t.classList.contains(F8)?r?K8:Y8:r?Q8:X8}_detectNavbar(){return this._element.closest(H8)!==null}_getOffset(){const{offset:t}=this._config;return typeof t=="string"?t.split(",").map(r=>Number.parseInt(r,10)):typeof t=="function"?r=>t(r,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||this._config.display==="static")&&(ai.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...Ir(this._config.popperConfig,[void 0,t])}}_selectMenuItem({key:t,target:r}){const n=Je.find(G8,this._menu).filter(i=>Gs(i));n.length&&ly(n,r,t===h_,!n.includes(r)).focus()}static jQueryInterface(t){return this.each(function(){const r=Nn.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof r[t]>"u")throw new TypeError(`No method named "${t}"`);r[t]()}})}static clearMenus(t){if(t.button===L8||t.type==="keyup"&&t.key!==d_)return;const r=Je.find(z8);for(const n of r){const i=Nn.getInstance(n);if(!i||i._config.autoClose===!1)continue;const o=t.composedPath(),a=o.includes(i._menu);if(o.includes(i._element)||i._config.autoClose==="inside"&&!a||i._config.autoClose==="outside"&&a||i._menu.contains(t.target)&&(t.type==="keyup"&&t.key===d_||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const s={relatedTarget:i._element};t.type==="click"&&(s.clickEvent=t),i._completeHide(s)}}static dataApiKeydownHandler(t){const r=/input|textarea/i.test(t.target.tagName),n=t.key===P8,i=[O8,h_].includes(t.key);if(!i&&!n||r&&!n)return;t.preventDefault();const o=this.matches(_o)?this:Je.prev(this,_o)[0]||Je.next(this,_o)[0]||Je.findOne(_o,t.delegateTarget.parentNode),a=Nn.getOrCreateInstance(o);if(i){t.stopPropagation(),a.show(),a._selectMenuItem(t);return}a._isShown()&&(t.stopPropagation(),a.hide(),o.focus())}}Fe.on(document,Wx,_o,Nn.dataApiKeydownHandler);Fe.on(document,Wx,Ru,Nn.dataApiKeydownHandler);Fe.on(document,Vx,Nn.clearMenus);Fe.on(document,B8,Nn.clearMenus);Fe.on(document,Vx,_o,function(e){e.preventDefault(),Nn.getOrCreateInstance(this).toggle()});nn(Nn);const zx="backdrop",iU="fade",p_="show",g_=`mousedown.bs.${zx}`,oU={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},sU={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Hx extends dl{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return oU}static get DefaultType(){return sU}static get NAME(){return zx}show(t){if(!this._config.isVisible){Ir(t);return}this._append();const r=this._getElement();this._config.isAnimated&&fl(r),r.classList.add(p_),this._emulateAnimation(()=>{Ir(t)})}hide(t){if(!this._config.isVisible){Ir(t);return}this._getElement().classList.remove(p_),this._emulateAnimation(()=>{this.dispose(),Ir(t)})}dispose(){this._isAppended&&(Fe.off(this._element,g_),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add(iU),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=Gi(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),Fe.on(t,g_,()=>{Ir(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(t){kx(t,this._getElement(),this._config.isAnimated)}}const aU="focustrap",lU="bs.focustrap",gc=`.${lU}`,uU=`focusin${gc}`,cU=`keydown.tab${gc}`,fU="Tab",dU="forward",m_="backward",hU={autofocus:!0,trapElement:null},pU={autofocus:"boolean",trapElement:"element"};class qx extends dl{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return hU}static get DefaultType(){return pU}static get NAME(){return aU}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),Fe.off(document,gc),Fe.on(document,uU,t=>this._handleFocusin(t)),Fe.on(document,cU,t=>this._handleKeydown(t)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,Fe.off(document,gc))}_handleFocusin(t){const{trapElement:r}=this._config;if(t.target===document||t.target===r||r.contains(t.target))return;const n=Je.focusableChildren(r);n.length===0?r.focus():this._lastTabNavDirection===m_?n[n.length-1].focus():n[0].focus()}_handleKeydown(t){t.key===fU&&(this._lastTabNavDirection=t.shiftKey?m_:dU)}}const y_=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",v_=".sticky-top",Fl="padding-right",b_="margin-right";class kg{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,Fl,r=>r+t),this._setElementAttributes(y_,Fl,r=>r+t),this._setElementAttributes(v_,b_,r=>r-t)}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,Fl),this._resetElementAttributes(y_,Fl),this._resetElementAttributes(v_,b_)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,r,n){const i=this.getWidth(),o=a=>{if(a!==this._element&&window.innerWidth>a.clientWidth+i)return;this._saveInitialAttribute(a,r);const s=window.getComputedStyle(a).getPropertyValue(r);a.style.setProperty(r,`${n(Number.parseFloat(s))}px`)};this._applyManipulationCallback(t,o)}_saveInitialAttribute(t,r){const n=t.style.getPropertyValue(r);n&&ai.setDataAttribute(t,r,n)}_resetElementAttributes(t,r){const n=i=>{const o=ai.getDataAttribute(i,r);if(o===null){i.style.removeProperty(r);return}ai.removeDataAttribute(i,r),i.style.setProperty(r,o)};this._applyManipulationCallback(t,n)}_applyManipulationCallback(t,r){if(si(t)){r(t);return}for(const n of Je.find(t,this._element))r(n)}}const gU="modal",mU="bs.modal",rn=`.${mU}`,yU=".data-api",vU="Escape",bU=`hide${rn}`,_U=`hidePrevented${rn}`,Gx=`hidden${rn}`,Yx=`show${rn}`,wU=`shown${rn}`,SU=`resize${rn}`,EU=`click.dismiss${rn}`,xU=`mousedown.dismiss${rn}`,TU=`keydown.dismiss${rn}`,AU=`click${rn}${yU}`,__="modal-open",IU="fade",w_="show",Ad="modal-static",CU=".modal.show",MU=".modal-dialog",kU=".modal-body",PU='[data-bs-toggle="modal"]',OU={backdrop:!0,focus:!0,keyboard:!0},LU={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class _i extends bn{constructor(t,r){super(t,r),this._dialog=Je.findOne(MU,this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new kg,this._addEventListeners()}static get Default(){return OU}static get DefaultType(){return LU}static get NAME(){return gU}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||Fe.trigger(this._element,Yx,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(__),this._adjustDialog(),this._backdrop.show(()=>this._showElement(t)))}hide(){!this._isShown||this._isTransitioning||Fe.trigger(this._element,bU).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(w_),this._queueCallback(()=>this._hideModal(),this._element,this._isAnimated()))}dispose(){Fe.off(window,rn),Fe.off(this._dialog,rn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Hx({isVisible:!!this._config.backdrop,isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new qx({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const r=Je.findOne(kU,this._dialog);r&&(r.scrollTop=0),fl(this._element),this._element.classList.add(w_);const n=()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,Fe.trigger(this._element,wU,{relatedTarget:t})};this._queueCallback(n,this._dialog,this._isAnimated())}_addEventListeners(){Fe.on(this._element,TU,t=>{if(t.key===vU){if(this._config.keyboard){this.hide();return}this._triggerBackdropTransition()}}),Fe.on(window,SU,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),Fe.on(this._element,xU,t=>{Fe.one(this._element,EU,r=>{if(!(this._element!==t.target||this._element!==r.target)){if(this._config.backdrop==="static"){this._triggerBackdropTransition();return}this._config.backdrop&&this.hide()}})})}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(__),this._resetAdjustments(),this._scrollBar.reset(),Fe.trigger(this._element,Gx)})}_isAnimated(){return this._element.classList.contains(IU)}_triggerBackdropTransition(){if(Fe.trigger(this._element,_U).defaultPrevented)return;const r=this._element.scrollHeight>document.documentElement.clientHeight,n=this._element.style.overflowY;n==="hidden"||this._element.classList.contains(Ad)||(r||(this._element.style.overflowY="hidden"),this._element.classList.add(Ad),this._queueCallback(()=>{this._element.classList.remove(Ad),this._queueCallback(()=>{this._element.style.overflowY=n},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,r=this._scrollBar.getWidth(),n=r>0;if(n&&!t){const i=tn()?"paddingLeft":"paddingRight";this._element.style[i]=`${r}px`}if(!n&&t){const i=tn()?"paddingRight":"paddingLeft";this._element.style[i]=`${r}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,r){return this.each(function(){const n=_i.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof n[t]>"u")throw new TypeError(`No method named "${t}"`);n[t](r)}})}}Fe.on(document,AU,PU,function(e){const t=Je.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&e.preventDefault(),Fe.one(t,Yx,i=>{i.defaultPrevented||Fe.one(t,Gx,()=>{Gs(this)&&this.focus()})});const r=Je.findOne(CU);r&&_i.getInstance(r).hide(),_i.getOrCreateInstance(t).toggle(this)});ef(_i);nn(_i);const RU="offcanvas",NU="bs.offcanvas",Ii=`.${NU}`,Kx=".data-api",$U=`load${Ii}${Kx}`,DU="Escape",S_="show",E_="showing",x_="hiding",BU="offcanvas-backdrop",Xx=".offcanvas.show",FU=`show${Ii}`,UU=`shown${Ii}`,jU=`hide${Ii}`,T_=`hidePrevented${Ii}`,Qx=`hidden${Ii}`,VU=`resize${Ii}`,WU=`click${Ii}${Kx}`,zU=`keydown.dismiss${Ii}`,HU='[data-bs-toggle="offcanvas"]',qU={backdrop:!0,keyboard:!0,scroll:!1},GU={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Ki extends bn{constructor(t,r){super(t,r),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return qU}static get DefaultType(){return GU}static get NAME(){return RU}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){if(this._isShown||Fe.trigger(this._element,FU,{relatedTarget:t}).defaultPrevented)return;this._isShown=!0,this._backdrop.show(),this._config.scroll||new kg().hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(E_);const n=()=>{(!this._config.scroll||this._config.backdrop)&&this._focustrap.activate(),this._element.classList.add(S_),this._element.classList.remove(E_),Fe.trigger(this._element,UU,{relatedTarget:t})};this._queueCallback(n,this._element,!0)}hide(){if(!this._isShown||Fe.trigger(this._element,jU).defaultPrevented)return;this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(x_),this._backdrop.hide();const r=()=>{this._element.classList.remove(S_,x_),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||new kg().reset(),Fe.trigger(this._element,Qx)};this._queueCallback(r,this._element,!0)}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=()=>{if(this._config.backdrop==="static"){Fe.trigger(this._element,T_);return}this.hide()},r=!!this._config.backdrop;return new Hx({className:BU,isVisible:r,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:r?t:null})}_initializeFocusTrap(){return new qx({trapElement:this._element})}_addEventListeners(){Fe.on(this._element,zU,t=>{if(t.key===DU){if(this._config.keyboard){this.hide();return}Fe.trigger(this._element,T_)}})}static jQueryInterface(t){return this.each(function(){const r=Ki.getOrCreateInstance(this,t);if(typeof t=="string"){if(r[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);r[t](this)}})}}Fe.on(document,WU,HU,function(e){const t=Je.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&e.preventDefault(),Yi(this))return;Fe.one(t,Qx,()=>{Gs(this)&&this.focus()});const r=Je.findOne(Xx);r&&r!==t&&Ki.getInstance(r).hide(),Ki.getOrCreateInstance(t).toggle(this)});Fe.on(window,$U,()=>{for(const e of Je.find(Xx))Ki.getOrCreateInstance(e).show()});Fe.on(window,VU,()=>{for(const e of Je.find("[aria-modal][class*=show][class*=offcanvas-]"))getComputedStyle(e).position!=="fixed"&&Ki.getOrCreateInstance(e).hide()});ef(Ki);nn(Ki);const YU=/^aria-[\w-]*$/i,Jx={"*":["class","dir","id","lang","role",YU],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},KU=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),XU=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,QU=(e,t)=>{const r=e.nodeName.toLowerCase();return t.includes(r)?KU.has(r)?!!XU.test(e.nodeValue):!0:t.filter(n=>n instanceof RegExp).some(n=>n.test(r))};function JU(e,t,r){if(!e.length)return e;if(r&&typeof r=="function")return r(e);const i=new window.DOMParser().parseFromString(e,"text/html"),o=[].concat(...i.body.querySelectorAll("*"));for(const a of o){const s=a.nodeName.toLowerCase();if(!Object.keys(t).includes(s)){a.remove();continue}const l=[].concat(...a.attributes),u=[].concat(t["*"]||[],t[s]||[]);for(const c of l)QU(c,u)||a.removeAttribute(c.nodeName)}return i.body.innerHTML}const ZU="TemplateFactory",ej={allowList:Jx,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},tj={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},rj={entry:"(string|element|function|null)",selector:"(string|element)"};class nj extends dl{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return ej}static get DefaultType(){return tj}static get NAME(){return ZU}getContent(){return Object.values(this._config.content).map(t=>this._resolvePossibleFunction(t)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[i,o]of Object.entries(this._config.content))this._setContent(t,o,i);const r=t.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&r.classList.add(...n.split(" ")),r}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[r,n]of Object.entries(t))super._typeCheckConfig({selector:r,entry:n},rj)}_setContent(t,r,n){const i=Je.findOne(n,t);if(i){if(r=this._resolvePossibleFunction(r),!r){i.remove();return}if(si(r)){this._putElementInTemplate(Gi(r),i);return}if(this._config.html){i.innerHTML=this._maybeSanitize(r);return}i.textContent=r}}_maybeSanitize(t){return this._config.sanitize?JU(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return Ir(t,[void 0,this])}_putElementInTemplate(t,r){if(this._config.html){r.innerHTML="",r.append(t);return}r.textContent=t.textContent}}const ij="tooltip",oj=new Set(["sanitize","allowList","sanitizeFn"]),Id="fade",sj="modal",Ul="show",aj=".tooltip-inner",A_=`.${sj}`,I_="hide.bs.modal",ca="hover",Cd="focus",Md="click",lj="manual",uj="hide",cj="hidden",fj="show",dj="shown",hj="inserted",pj="click",gj="focusin",mj="focusout",yj="mouseenter",vj="mouseleave",bj={AUTO:"auto",TOP:"top",RIGHT:tn()?"left":"right",BOTTOM:"bottom",LEFT:tn()?"right":"left"},_j={allowList:Jx,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},wj={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Ks extends bn{constructor(t,r){if(typeof Tx>"u")throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/)");super(t,r),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return _j}static get DefaultType(){return wj}static get NAME(){return ij}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){if(this._isEnabled){if(this._isShown()){this._leave();return}this._enter()}}dispose(){clearTimeout(this._timeout),Fe.off(this._element.closest(A_),I_,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if(this._element.style.display==="none")throw new Error("Please use show on visible elements");if(!(this._isWithContent()&&this._isEnabled))return;const t=Fe.trigger(this._element,this.constructor.eventName(fj)),n=(Cx(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!n)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:o}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(o.append(i),Fe.trigger(this._element,this.constructor.eventName(hj))),this._popper=this._createPopper(i),i.classList.add(Ul),"ontouchstart"in document.documentElement)for(const s of[].concat(...document.body.children))Fe.on(s,"mouseover",hc);const a=()=>{Fe.trigger(this._element,this.constructor.eventName(dj)),this._isHovered===!1&&this._leave(),this._isHovered=!1};this._queueCallback(a,this.tip,this._isAnimated())}hide(){if(!this._isShown()||Fe.trigger(this._element,this.constructor.eventName(uj)).defaultPrevented)return;if(this._getTipElement().classList.remove(Ul),"ontouchstart"in document.documentElement)for(const i of[].concat(...document.body.children))Fe.off(i,"mouseover",hc);this._activeTrigger[Md]=!1,this._activeTrigger[Cd]=!1,this._activeTrigger[ca]=!1,this._isHovered=null;const n=()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),Fe.trigger(this._element,this.constructor.eventName(cj)))};this._queueCallback(n,this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return!!this._getTitle()}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const r=this._getTemplateFactory(t).toHtml();if(!r)return null;r.classList.remove(Id,Ul),r.classList.add(`bs-${this.constructor.NAME}-auto`);const n=lF(this.constructor.NAME).toString();return r.setAttribute("id",n),this._isAnimated()&&r.classList.add(Id),r}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new nj({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[aj]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(Id)}_isShown(){return this.tip&&this.tip.classList.contains(Ul)}_createPopper(t){const r=Ir(this._config.placement,[this,t,this._element]),n=bj[r.toUpperCase()];return ay(this._element,t,this._getPopperConfig(n))}_getOffset(){const{offset:t}=this._config;return typeof t=="string"?t.split(",").map(r=>Number.parseInt(r,10)):typeof t=="function"?r=>t(r,this._element):t}_resolvePossibleFunction(t){return Ir(t,[this._element,this._element])}_getPopperConfig(t){const r={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:n=>{this._getTipElement().setAttribute("data-popper-placement",n.state.placement)}}]};return{...r,...Ir(this._config.popperConfig,[void 0,r])}}_setListeners(){const t=this._config.trigger.split(" ");for(const r of t)if(r==="click")Fe.on(this._element,this.constructor.eventName(pj),this._config.selector,n=>{const i=this._initializeOnDelegatedTarget(n);i._activeTrigger[Md]=!(i._isShown()&&i._activeTrigger[Md]),i.toggle()});else if(r!==lj){const n=r===ca?this.constructor.eventName(yj):this.constructor.eventName(gj),i=r===ca?this.constructor.eventName(vj):this.constructor.eventName(mj);Fe.on(this._element,n,this._config.selector,o=>{const a=this._initializeOnDelegatedTarget(o);a._activeTrigger[o.type==="focusin"?Cd:ca]=!0,a._enter()}),Fe.on(this._element,i,this._config.selector,o=>{const a=this._initializeOnDelegatedTarget(o);a._activeTrigger[o.type==="focusout"?Cd:ca]=a._element.contains(o.relatedTarget),a._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},Fe.on(this._element.closest(A_),I_,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(!this._element.getAttribute("aria-label")&&!this._element.textContent.trim()&&this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){if(this._isShown()||this._isHovered){this._isHovered=!0;return}this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show)}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(t,r){clearTimeout(this._timeout),this._timeout=setTimeout(t,r)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const r=ai.getDataAttributes(this._element);for(const n of Object.keys(r))oj.has(n)&&delete r[n];return t={...r,...typeof t=="object"&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=t.container===!1?document.body:Gi(t.container),typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),typeof t.title=="number"&&(t.title=t.title.toString()),typeof t.content=="number"&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[r,n]of Object.entries(this._config))this.constructor.Default[r]!==n&&(t[r]=n);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each(function(){const r=Ks.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof r[t]>"u")throw new TypeError(`No method named "${t}"`);r[t]()}})}}nn(Ks);const Sj="popover",Ej=".popover-header",xj=".popover-body",Tj={...Ks.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},Aj={...Ks.DefaultType,content:"(null|string|element|function)"};class fy extends Ks{static get Default(){return Tj}static get DefaultType(){return Aj}static get NAME(){return Sj}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[Ej]:this._getTitle(),[xj]:this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each(function(){const r=fy.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof r[t]>"u")throw new TypeError(`No method named "${t}"`);r[t]()}})}}nn(fy);const Ij="scrollspy",Cj="bs.scrollspy",dy=`.${Cj}`,Mj=".data-api",kj=`activate${dy}`,C_=`click${dy}`,Pj=`load${dy}${Mj}`,Oj="dropdown-item",Zo="active",Lj='[data-bs-spy="scroll"]',kd="[href]",Rj=".nav, .list-group",M_=".nav-link",Nj=".nav-item",$j=".list-group-item",Dj=`${M_}, ${Nj} > ${M_}, ${$j}`,Bj=".dropdown",Fj=".dropdown-toggle",Uj={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},jj={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class nf extends bn{constructor(t,r){super(t,r),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement=getComputedStyle(this._element).overflowY==="visible"?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return Uj}static get DefaultType(){return jj}static get NAME(){return Ij}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=Gi(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,typeof t.threshold=="string"&&(t.threshold=t.threshold.split(",").map(r=>Number.parseFloat(r))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(Fe.off(this._config.target,C_),Fe.on(this._config.target,C_,kd,t=>{const r=this._observableSections.get(t.target.hash);if(r){t.preventDefault();const n=this._rootElement||window,i=r.offsetTop-this._element.offsetTop;if(n.scrollTo){n.scrollTo({top:i,behavior:"smooth"});return}n.scrollTop=i}}))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver(r=>this._observerCallback(r),t)}_observerCallback(t){const r=a=>this._targetLinks.get(`#${a.target.id}`),n=a=>{this._previousScrollData.visibleEntryTop=a.target.offsetTop,this._process(r(a))},i=(this._rootElement||document.documentElement).scrollTop,o=i>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=i;for(const a of t){if(!a.isIntersecting){this._activeTarget=null,this._clearActiveClass(r(a));continue}const s=a.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(o&&s){if(n(a),!i)return;continue}!o&&!s&&n(a)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=Je.find(kd,this._config.target);for(const r of t){if(!r.hash||Yi(r))continue;const n=Je.findOne(decodeURI(r.hash),this._element);Gs(n)&&(this._targetLinks.set(decodeURI(r.hash),r),this._observableSections.set(r.hash,n))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(Zo),this._activateParents(t),Fe.trigger(this._element,kj,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains(Oj)){Je.findOne(Fj,t.closest(Bj)).classList.add(Zo);return}for(const r of Je.parents(t,Rj))for(const n of Je.prev(r,Dj))n.classList.add(Zo)}_clearActiveClass(t){t.classList.remove(Zo);const r=Je.find(`${kd}.${Zo}`,t);for(const n of r)n.classList.remove(Zo)}static jQueryInterface(t){return this.each(function(){const r=nf.getOrCreateInstance(this,t);if(typeof t=="string"){if(r[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);r[t]()}})}}Fe.on(window,Pj,()=>{for(const e of Je.find(Lj))nf.getOrCreateInstance(e)});nn(nf);const Vj="tab",Wj="bs.tab",Yo=`.${Wj}`,zj=`hide${Yo}`,Hj=`hidden${Yo}`,qj=`show${Yo}`,Gj=`shown${Yo}`,Yj=`click${Yo}`,Kj=`keydown${Yo}`,Xj=`load${Yo}`,Qj="ArrowLeft",k_="ArrowRight",Jj="ArrowUp",P_="ArrowDown",Pd="Home",O_="End",wo="active",L_="fade",Od="show",Zj="dropdown",Zx=".dropdown-toggle",eV=".dropdown-menu",Ld=`:not(${Zx})`,tV='.list-group, .nav, [role="tablist"]',rV=".nav-item, .list-group-item",nV=`.nav-link${Ld}, .list-group-item${Ld}, [role="tab"]${Ld}`,eT='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Rd=`${nV}, ${eT}`,iV=`.${wo}[data-bs-toggle="tab"], .${wo}[data-bs-toggle="pill"], .${wo}[data-bs-toggle="list"]`;class Bo extends bn{constructor(t){super(t),this._parent=this._element.closest(tV),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),Fe.on(this._element,Kj,r=>this._keydown(r)))}static get NAME(){return Vj}show(){const t=this._element;if(this._elemIsActive(t))return;const r=this._getActiveElem(),n=r?Fe.trigger(r,zj,{relatedTarget:t}):null;Fe.trigger(t,qj,{relatedTarget:r}).defaultPrevented||n&&n.defaultPrevented||(this._deactivate(r,t),this._activate(t,r))}_activate(t,r){if(!t)return;t.classList.add(wo),this._activate(Je.getElementFromSelector(t));const n=()=>{if(t.getAttribute("role")!=="tab"){t.classList.add(Od);return}t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),Fe.trigger(t,Gj,{relatedTarget:r})};this._queueCallback(n,t,t.classList.contains(L_))}_deactivate(t,r){if(!t)return;t.classList.remove(wo),t.blur(),this._deactivate(Je.getElementFromSelector(t));const n=()=>{if(t.getAttribute("role")!=="tab"){t.classList.remove(Od);return}t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),Fe.trigger(t,Hj,{relatedTarget:r})};this._queueCallback(n,t,t.classList.contains(L_))}_keydown(t){if(![Qj,k_,Jj,P_,Pd,O_].includes(t.key))return;t.stopPropagation(),t.preventDefault();const r=this._getChildren().filter(i=>!Yi(i));let n;if([Pd,O_].includes(t.key))n=r[t.key===Pd?0:r.length-1];else{const i=[k_,P_].includes(t.key);n=ly(r,t.target,i,!0)}n&&(n.focus({preventScroll:!0}),Bo.getOrCreateInstance(n).show())}_getChildren(){return Je.find(Rd,this._parent)}_getActiveElem(){return this._getChildren().find(t=>this._elemIsActive(t))||null}_setInitialAttributes(t,r){this._setAttributeIfNotExists(t,"role","tablist");for(const n of r)this._setInitialAttributesOnChild(n)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const r=this._elemIsActive(t),n=this._getOuterElement(t);t.setAttribute("aria-selected",r),n!==t&&this._setAttributeIfNotExists(n,"role","presentation"),r||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const r=Je.getElementFromSelector(t);r&&(this._setAttributeIfNotExists(r,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(r,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,r){const n=this._getOuterElement(t);if(!n.classList.contains(Zj))return;const i=(o,a)=>{const s=Je.findOne(o,n);s&&s.classList.toggle(a,r)};i(Zx,wo),i(eV,Od),n.setAttribute("aria-expanded",r)}_setAttributeIfNotExists(t,r,n){t.hasAttribute(r)||t.setAttribute(r,n)}_elemIsActive(t){return t.classList.contains(wo)}_getInnerElement(t){return t.matches(Rd)?t:Je.findOne(Rd,t)}_getOuterElement(t){return t.closest(rV)||t}static jQueryInterface(t){return this.each(function(){const r=Bo.getOrCreateInstance(this);if(typeof t=="string"){if(r[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);r[t]()}})}}Fe.on(document,Yj,eT,function(e){["A","AREA"].includes(this.tagName)&&e.preventDefault(),!Yi(this)&&Bo.getOrCreateInstance(this).show()});Fe.on(window,Xj,()=>{for(const e of Je.find(iV))Bo.getOrCreateInstance(e)});nn(Bo);const oV="toast",sV="bs.toast",to=`.${sV}`,aV=`mouseover${to}`,lV=`mouseout${to}`,uV=`focusin${to}`,cV=`focusout${to}`,fV=`hide${to}`,dV=`hidden${to}`,hV=`show${to}`,pV=`shown${to}`,gV="fade",R_="hide",jl="show",Vl="showing",mV={animation:"boolean",autohide:"boolean",delay:"number"},yV={animation:!0,autohide:!0,delay:5e3};class of extends bn{constructor(t,r){super(t,r),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return yV}static get DefaultType(){return mV}static get NAME(){return oV}show(){if(Fe.trigger(this._element,hV).defaultPrevented)return;this._clearTimeout(),this._config.animation&&this._element.classList.add(gV);const r=()=>{this._element.classList.remove(Vl),Fe.trigger(this._element,pV),this._maybeScheduleHide()};this._element.classList.remove(R_),fl(this._element),this._element.classList.add(jl,Vl),this._queueCallback(r,this._element,this._config.animation)}hide(){if(!this.isShown()||Fe.trigger(this._element,fV).defaultPrevented)return;const r=()=>{this._element.classList.add(R_),this._element.classList.remove(Vl,jl),Fe.trigger(this._element,dV)};this._element.classList.add(Vl),this._queueCallback(r,this._element,this._config.animation)}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(jl),super.dispose()}isShown(){return this._element.classList.contains(jl)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(t,r){switch(t.type){case"mouseover":case"mouseout":{this._hasMouseInteraction=r;break}case"focusin":case"focusout":{this._hasKeyboardInteraction=r;break}}if(r){this._clearTimeout();return}const n=t.relatedTarget;this._element===n||this._element.contains(n)||this._maybeScheduleHide()}_setListeners(){Fe.on(this._element,aV,t=>this._onInteraction(t,!0)),Fe.on(this._element,lV,t=>this._onInteraction(t,!1)),Fe.on(this._element,uV,t=>this._onInteraction(t,!0)),Fe.on(this._element,cV,t=>this._onInteraction(t,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each(function(){const r=of.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof r[t]>"u")throw new TypeError(`No method named "${t}"`);r[t](this)}})}}ef(of);nn(of);const vV={class:"d-flex justify-content-between align-items-center titlerow"},bV={class:"buttonarea d-flex float-right justify-content-end align-items-center"},_V={class:"contentrow grid-col-12"},wV=We({__name:"WbSubwidget",props:{titlecolor:{},fullwidth:{type:Boolean},small:{type:Boolean}},setup(e){const t=e,r=_e(()=>{let i={"font-weight":"bold",color:"var(--color-fg)","font-size":"var(--font-normal)"};return t.titlecolor&&(i.color=t.titlecolor),t.small&&(i["font-size"]="var(--font-verysmall)"),i}),n=_e(()=>t.fullwidth?"grid-col-12":"grid-col-4");return(i,o)=>(se(),Se("div",{class:Qe(["wb-subwidget-noborder px-0 pe-1 my-0 pb-2",n.value])},[U("div",vV,[U("div",{class:"d-flex widgetname p-0 m-0",style:ot(r.value)},[It(i.$slots,"title",{},void 0,!0)],4),U("div",bV,[It(i.$slots,"buttons",{},void 0,!0)])]),U("div",_V,[It(i.$slots,"default",{},void 0,!0)])],2))}}),ro=Xe(wV,[["__scopeId","data-v-2aa2b95f"]]),SV={class:"configitem grid-col-12 mt-0 mb-0 px-0 py-0"},EV={class:"titlerow m-0 p-0 d-flex justify-content-between align-items-center"},xV={class:"lefttitle d-flex justify-content-end align-items-baseline"},TV={class:"d-flex"},AV={class:"righttitle d-flex align-items-center"},IV={class:"inlinecontent"},CV={class:"ms-1 mb-2 p-0 pt-2 d-flex justify-content-stretch align-items-center contentrow"},MV=We({__name:"ConfigItem",props:{title:{},infotext:{},icon:{},fullwidth:{type:Boolean}},setup(e){const t=e,r=et(!1);function n(){r.value=!r.value}const i=_e(()=>{let o={color:"var(--color-charging)"};return r.value&&(o.color="var(--color-battery)"),o});return(o,a)=>(se(),De(ro,{fullwidth:!!e.fullwidth},{default:Ae(()=>[U("div",SV,[U("div",EV,[U("span",xV,[U("span",{class:"d-flex align-items-center m-0 p-0",onClick:n},[t.icon?(se(),Se("i",{key:0,class:Qe(["fa-solid fa-sm m-0 p-0 me-2 item-icon",t.icon])},null,2)):Me("",!0),Ke(" "+$e(e.title),1)]),U("span",TV,[t.infotext?(se(),Se("i",{key:0,class:"fa-solid fa-sm fa-circle-question ms-3 me-2",style:ot(i.value),onClick:n},null,4)):Me("",!0)])]),U("span",AV,[U("span",IV,[It(o.$slots,"inline-item",{},void 0,!0)])])]),r.value?(se(),Se("p",{key:0,class:"infotext shadow m-0 ps-2 mb-1 p-3",onClick:n},[a[0]||(a[0]=U("i",{class:"me-1 fa-solid fa-sm fa-circle-info"},null,-1)),Ke(" "+$e(e.infotext),1)])):Me("",!0),U("div",CV,[It(o.$slots,"default",{},void 0,!0)])])]),_:3},8,["fullwidth"]))}}),ut=Xe(MV,[["__scopeId","data-v-a0a18b4a"]]),kV={class:"d-flex flex-column rangeinput"},PV={class:"d-flex flex-fill justify-content-between align-items-center"},OV={class:"d-flex flex-fill flex-column justify-content-center m-0 p-0"},LV={key:0,id:"rangeIndicator",class:"rangeIndicator"},RV={viewBox:"0 0 100 2"},NV=["width"],$V=["x","width"],DV=["x","width"],BV=["id","min","max","step"],FV={class:"d-flex justify-content-between align-items-center"},UV={class:"minlabel ps-4"},jV={class:"valuelabel"},VV={class:"maxlabel pe-4"},WV=We({__name:"RangeInput",props:{id:{},min:{},max:{},step:{},unit:{},decimals:{},showSubrange:{type:Boolean},subrangeMin:{},subrangeMax:{},modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=r.decimals??0,i=t,o=_e({get(){return Math.round(r.modelValue*Math.pow(10,n))/Math.pow(10,n)},set(f){i("update:modelValue",f)}});function a(){o.value>r.min&&(o.value=Math.round((o.value-r.step)*Math.pow(10,n))/Math.pow(10,n))}function s(){o.valuegn().domain([r.min,r.max]).range([0,100])),u=_e(()=>l.value(r.subrangeMin?r.subrangeMin:0)),c=_e(()=>r.subrangeMin&&r.subrangeMax?l.value(r.subrangeMax)-l.value(r.subrangeMin):0);return(f,d)=>(se(),Se("span",kV,[U("span",PV,[U("span",{type:"button",class:"minusButton",onClick:a},[...d[1]||(d[1]=[U("i",{class:"fa fa-xl fa-minus-square me-2"},null,-1)])]),U("div",OV,[r.showSubrange?(se(),Se("figure",LV,[(se(),Se("svg",RV,[U("g",null,[U("rect",{class:"below",x:0,y:"0",width:u.value,height:"2",rx:"1",ry:"1",fill:"var(--color-evu)"},null,8,NV),U("rect",{class:"bar",x:u.value,y:"0",width:c.value,height:"2",rx:"1",ry:"1",fill:"var(--color-charging)"},null,8,$V),U("rect",{class:"above",x:u.value+c.value,y:"0",width:u.value,height:"2",rx:"1",ry:"1",fill:"var(--color-pv)"},null,8,DV)])]))])):Me("",!0),wi(U("input",{id:e.id,"onUpdate:modelValue":d[0]||(d[0]=h=>o.value=h),type:"range",class:"form-range flex-fill",min:e.min,max:e.max,step:e.step},null,8,BV),[[Pc,o.value,void 0,{number:!0}]])]),U("span",{type:"button",class:"plusButton",onClick:s},[...d[2]||(d[2]=[U("i",{class:"fa fa-xl fa-plus-square ms-2"},null,-1)])])]),U("span",FV,[U("span",UV,$e(e.min),1),U("span",jV,$e(o.value)+" "+$e(e.unit),1),U("span",VV,$e(e.max),1)])]))}}),Ot=Xe(WV,[["__scopeId","data-v-af945965"]]),zV=["id","value"],HV=We({__name:"RadioInput2",props:{options:{},modelValue:{},columns:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=t,i=_e({get(){return r.modelValue},set(s){n("update:modelValue",s)}});function o(s){const l=r.options[s][2]||"var(--color-fg)",u="var(--color-bg)";let c=l,f=u,d=["0","0","0","0"],h=["0","0","0","0"];r.options[s][1]==i.value&&(c=u,f=r.options[s][2]||"var(--color-menu)");const p=r.options.length,y=s%3,v=Math.floor(s/3),g=Math.floor((p-1)/3);return y==0&&(v==0&&(d[0]="0.45rem"),v==g&&(d[3]="0.45rem"),h[1]="0.1px"),y==1&&(h[1]="0.1px",h[3]="0.1px"),y==2&&(v==0&&(d[1]="0.45rem"),v==g&&(d[2]="0.45rem"),h[3]="0.1px"),v!=0&&(h[0]="0.1px"),v!=g&&(h[2]="0.1px"),{color:c,background:f,"border-radius":`${d[0]} ${d[1]} ${d[2]} ${d[3]}`,"border-width":`${h[0]} ${h[1]} ${h[2]} ${h[3]}`}}function a(s){let l=s.target;for(;l&&!l.value&&l.parentElement;)l=l.parentElement;l.value&&(typeof r.options[0][1]=="number"?i.value=Number(l.value):i.value=l.value)}return(s,l)=>(se(),Se("div",{class:"buttongrid",style:ot({"grid-template-columns":"repeat("+(r.columns||3)+", 1fr)"})},[(se(!0),Se(Ge,null,it(r.options,(u,c)=>(se(),Se("button",{id:"radio-"+u[1],key:c,class:Qe(["btn btn-outline-secondary radiobutton me-0 mb-0 px-2",u[1]==i.value?"active":""]),value:u[1],style:ot(o(c)),onClick:a},[U("span",null,[u[3]?(se(),Se("i",{key:0,class:Qe(["fa-solid",u[3]])},null,2)):Me("",!0),Ke(" "+$e(u[0]),1)])],14,zV))),128))],4))}}),jt=Xe(HV,[["__scopeId","data-v-cbeb6176"]]),qV={class:"mt-2"},GV={key:0},YV=We({__name:"ConfigInstant",props:{chargepoint:{}},setup(e){const r=et(e.chargepoint),n=_e({get(){return r.value.instantMaxEnergy/1e3},set(i){r.value.instantMaxEnergy=i*1e3}});return(i,o)=>(se(),Se("div",qV,[o[5]||(o[5]=U("p",{class:"heading ms-1"},"Sofortladen:",-1)),we(ut,{title:"Stromstärke",icon:"fa-bolt",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"targetCurrent",modelValue:r.value.instantTargetCurrent,"onUpdate:modelValue":o[0]||(o[0]=a=>r.value.instantTargetCurrent=a),min:6,max:32,step:1,unit:"A"},null,8,["modelValue"])]),_:1}),we(ut,{title:"Anzahl Phasen",icon:"fa-plug",fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:r.value.instantTargetPhases,"onUpdate:modelValue":o[1]||(o[1]=a=>r.value.instantTargetPhases=a),options:[["1",1],["Maximum",3],["Auto",0]]},null,8,["modelValue"])]),_:1}),r.value.instantChargeLimitMode!="none"?(se(),Se("hr",GV)):Me("",!0),we(ut,{title:"Begrenzung",icon:"fa-hand",fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:r.value.instantChargeLimitMode,"onUpdate:modelValue":o[2]||(o[2]=a=>r.value.instantChargeLimitMode=a),options:le(qm).map(a=>[a.name,a.id])},null,8,["modelValue","options"])]),_:1}),r.value.instantChargeLimitMode=="soc"?(se(),De(ut,{key:1,title:"Maximaler Ladestand",icon:"fa-sliders",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"maxSoc",modelValue:r.value.instantTargetSoc,"onUpdate:modelValue":o[3]||(o[3]=a=>r.value.instantTargetSoc=a),min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])]),_:1})):Me("",!0),r.value.instantChargeLimitMode=="amount"?(se(),De(ut,{key:2,title:"Zu ladende Energie",icon:"fa-sliders",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"maxEnergy",modelValue:n.value,"onUpdate:modelValue":o[4]||(o[4]=a=>n.value=a),min:0,max:100,step:1,unit:"kWh"},null,8,["modelValue"])]),_:1})):Me("",!0)]))}}),KV=Xe(YV,[["__scopeId","data-v-de6b86dd"]]),XV={class:"form-check form-switch"},pr=We({__name:"SwitchInput",props:{modelValue:{type:Boolean},onColor:{},offColor:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=t,i=_e({get(){return r.modelValue},set(a){n("update:modelValue",a)}}),o=_e(()=>i.value?{"background-color":"green"}:{"background-color":"white"});return(a,s)=>(se(),Se("div",XV,[wi(U("input",{"onUpdate:modelValue":s[0]||(s[0]=l=>i.value=l),class:"form-check-input",type:"checkbox",role:"switch",style:ot(o.value)},null,4),[[Oc,i.value]])]))}}),QV={class:"pt-2 d-flex flex-column"},JV={key:0,class:"subconfigstack grid-col-12 mt-4"},ZV={class:"subconfig subgrid"},e4={key:0,class:"subconfigstack mt-4"},t4={class:"subconfig subgrid"},r4={class:"subconfig subgrid"},n4={class:"subconfig subgrid"},i4=We({__name:"ConfigPv",props:{chargepoint:{}},setup(e){const r=et(e.chargepoint),n=_e({get(){return r.value.pvMaxEnergy/1e3},set(a){r.value.pvMaxEnergy=a*1e3}}),i=_e({get(){return r.value.pvMinCurrent>5},set(a){a?r.value.pvMinCurrent=6:r.value.pvMinCurrent=0}}),o=_e({get(){return r.value.pvMinSoc>0},set(a){a?r.value.pvMinSoc=50:r.value.pvMinSoc=0}});return(a,s)=>(se(),Se("div",QV,[s[15]||(s[15]=U("div",{class:"heading ms-1"},"PV-Laden:",-1)),we(ut,{title:"Minimaler Ladestrom",icon:"fa-bolt",infotext:le(xn).minpv,fullwidth:!0},{"inline-item":Ae(()=>[we(pr,{modelValue:i.value,"onUpdate:modelValue":s[0]||(s[0]=l=>i.value=l)},null,8,["modelValue"])]),default:Ae(()=>[i.value?(se(),Se("div",JV,[U("div",ZV,[s[10]||(s[10]=U("span",{class:"subconfigtitle grid-col-1"},"Stärke:",-1)),we(Ot,{id:"minCurrent",modelValue:r.value.pvMinCurrent,"onUpdate:modelValue":s[1]||(s[1]=l=>r.value.pvMinCurrent=l),min:6,max:32,step:1,unit:"A"},null,8,["modelValue"])])])):Me("",!0)]),_:1},8,["infotext"]),we(ut,{title:"Anzahl Phasen",icon:"fa-plug",fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:r.value.pvTargetPhases,"onUpdate:modelValue":s[2]||(s[2]=l=>r.value.pvTargetPhases=l),options:[["1",1],["Maximum",3],["Auto",0]]},null,8,["modelValue"])]),_:1}),we(ut,{title:"Mindest-Ladestand",icon:"fa-battery-half",infotext:le(xn).minsoc,fullwidth:!0},{"inline-item":Ae(()=>[we(pr,{modelValue:o.value,"onUpdate:modelValue":s[3]||(s[3]=l=>o.value=l),class:"grid-col-3"},null,8,["modelValue"])]),default:Ae(()=>[o.value?(se(),Se("div",e4,[U("div",t4,[s[11]||(s[11]=U("span",{class:"subconfigtitle grid-col-1"},"SoC:",-1)),we(Ot,{id:"minSoc",modelValue:r.value.pvMinSoc,"onUpdate:modelValue":s[4]||(s[4]=l=>r.value.pvMinSoc=l),class:"grid-col-2",min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])]),U("div",r4,[s[12]||(s[12]=U("span",{class:"subconfigtitle grid-col-1"},"Ladestrom:",-1)),we(Ot,{id:"minSocCurrent",modelValue:r.value.pvMinSocCurrent,"onUpdate:modelValue":s[5]||(s[5]=l=>r.value.pvMinSocCurrent=l),class:"grid-col-2",min:6,max:32,step:1,unit:"A"},null,8,["modelValue"])]),U("div",n4,[s[13]||(s[13]=U("span",{class:"subconfigtitle grid-col-1"},"Phasen:",-1)),we(jt,{modelValue:r.value.pvMinSocPhases,"onUpdate:modelValue":s[6]||(s[6]=l=>r.value.pvMinSocPhases=l),class:"grid-col-1",columns:2,options:[["1",1],["Maximum",3]]},null,8,["modelValue"])]),s[14]||(s[14]=U("hr",{class:"grid-col-3"},null,-1))])):Me("",!0)]),_:1},8,["infotext"]),we(ut,{title:"Begrenzung",icon:"fa-hand",fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:r.value.pvChargeLimitMode,"onUpdate:modelValue":s[7]||(s[7]=l=>r.value.pvChargeLimitMode=l),options:le(qm).map(l=>[l.name,l.id])},null,8,["modelValue","options"])]),_:1}),r.value.pvChargeLimitMode=="soc"?(se(),De(ut,{key:0,title:"Maximaler Ladestand",icon:"fa-sliders",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"maxSoc",modelValue:r.value.pvTargetSoc,"onUpdate:modelValue":s[8]||(s[8]=l=>r.value.pvTargetSoc=l),min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])]),_:1})):Me("",!0),r.value.pvChargeLimitMode=="amount"?(se(),De(ut,{key:1,title:"Zu ladende Energie",icon:"fa-sliders",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"maxEnergy",modelValue:n.value,"onUpdate:modelValue":s[9]||(s[9]=l=>n.value=l),min:0,max:100,step:1,unit:"kWh"},null,8,["modelValue"])]),_:1})):Me("",!0)]))}}),o4=Xe(i4,[["__scopeId","data-v-0e3a3e4d"]]),s4=["id"],a4={class:"modal-dialog modal-lg modal-fullscreen-lg-down shadow"},l4={class:"modal-content"},u4={class:"modal-header"},c4={class:"modal-title"},f4={class:"modal-body"},d4={class:"modal-footer d-flex justify-content-center"},h4=We({__name:"ModalComponent",props:{modalId:{}},setup(e){const t=e;return Hr(()=>{}),(r,n)=>(se(),De(Ew,{to:"body"},[U("div",{id:t.modalId,class:"modal fade"},[U("div",a4,[U("div",l4,[U("div",u4,[U("h3",c4,[It(r.$slots,"title",{},void 0,!0)]),n[0]||(n[0]=U("button",{type:"button",class:"btn-close d-flex justify-content-center pt-3 pb-0","data-bs-dismiss":"modal"},[U("span",{class:"fa-solid fa-xl fa-circle-check"})],-1))]),U("div",f4,[It(r.$slots,"default",{},void 0,!0)]),U("div",d4,[It(r.$slots,"footer",{},void 0,!0),n[1]||(n[1]=U("button",{class:"close-button-bottom btn btn-secondary","data-bs-dismiss":"modal"}," Schließen ",-1))])])])],8,s4)]))}}),gl=Xe(h4,[["__scopeId","data-v-f2a98bb6"]]),p4={class:"configitem grid-col-12 mt-0 mb-0 px-0 py-0"},g4={class:"titlerow m-0 p-0 subgrid justify-content-between align-items-center"},m4={class:"lefttitle d-flex justify-content-start align-items-baseline"},y4={class:"d-flex"},v4={class:"righttitle d-flex align-items-center"},b4={class:"inlinecontent"},_4={class:"contentrow ms-1 mb-2 p-0 pt-2 d-flex justify-content-stretch align-items-center"},w4=We({__name:"ConfigItem2",props:{title:{},infotext:{},icon:{},fullwidth:{type:Boolean}},setup(e){const t=e,r=et(!1);function n(){r.value=!r.value}const i=_e(()=>{let o={color:"var(--color-charging)"};return r.value&&(o.color="var(--color-battery)"),o});return(o,a)=>(se(),De(ro,{fullwidth:!!e.fullwidth},{default:Ae(()=>[U("div",p4,[U("div",g4,[U("span",m4,[U("span",{class:"d-flex align-items-center m-0 p-0",onClick:n},[t.icon?(se(),Se("i",{key:0,class:Qe(["fa-solid fa-sm m-0 p-0 me-2 item-icon",t.icon])},null,2)):Me("",!0),Ke(" "+$e(e.title),1)]),U("span",y4,[t.infotext?(se(),Se("i",{key:0,class:"fa-solid fa-sm fa-circle-question ms-3 me-2",style:ot(i.value),onClick:n},null,4)):Me("",!0)])]),U("span",v4,[U("span",b4,[It(o.$slots,"inline-item",{},void 0,!0)])])]),r.value?(se(),Se("p",{key:0,class:"infotext shadow m-0 ps-2 mb-1 p-3",onClick:n},[a[0]||(a[0]=U("i",{class:"me-1 fa-solid fa-sm fa-circle-info"},null,-1)),Ke(" "+$e(e.infotext),1)])):Me("",!0),U("div",_4,[It(o.$slots,"default",{},void 0,!0)])])]),_:3},8,["fullwidth"]))}}),pt=Xe(w4,[["__scopeId","data-v-e6631c96"]]),S4={class:"form-group"},E4=We({__name:"TextInput",props:{modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=t,i=_e({get(){return r.modelValue},set(o){n("update:modelValue",o)}});return(o,a)=>(se(),Se("div",S4,[wi(U("input",{id:"name","onUpdate:modelValue":a[0]||(a[0]=s=>i.value=s),type:"text",class:"form-control"},null,512),[[Pc,i.value]])]))}}),Pg=Xe(E4,[["__scopeId","data-v-109e379b"]]),x4=["id","value"],T4=We({__name:"RadioInput",props:{options:{},modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=t,i=_e({get(){return r.modelValue},set(s){n("update:modelValue",s)}});function o(s){return r.options[s][2]?{color:r.options[s][2]}:{color:"var(--color-fg)"}}function a(s){let l=s.target;for(;l&&!l.value&&l.parentElement;)l=l.parentElement;l.value&&(i.value=l.value)}return(s,l)=>(se(),Se("div",null,[(se(!0),Se(Ge,null,it(e.options,(u,c)=>(se(),Se("button",{id:"radio-"+u[1],key:c,class:Qe(["btn btn-outline-secondary radiobutton me-2 mb-0 px-2",u[1]==i.value?"active":""]),value:u[1],style:ot(o(c)),onClick:a},[U("span",{style:ot(o(c))},[u[3]?(se(),Se("i",{key:0,class:Qe(["fa-solid",u[3]])},null,2)):Me("",!0),Ke(" "+$e(u[0]),1)],4)],14,x4))),128))]))}}),tT=Xe(T4,[["__scopeId","data-v-df222cbe"]]),A4={class:"p-1 m-1"},I4={class:"input-group"},C4=["id"],M4=We({__name:"DateInput2",props:{inputId:{type:String,required:!0},modelValue:{type:Date,required:!0}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e;var n=document.getElementById("inputDate");const i=t;function o(s){i("update:modelValue",s)}Hr(()=>{n=document.getElementById(r.inputId),n.value=r.modelValue.toISOString().substring(0,10),n.addEventListener("change",a)});function a(s){const u=s.target.value.split("-"),c=parseInt(u[0]),f=parseInt(u[1])-1,d=parseInt(u[2]);o(new Date(c,f,d))}return(s,l)=>(se(),Se("span",A4,[U("div",I4,[U("input",{id:e.inputId,class:"form-control",type:"date",pattern:"\\d{2}.\\d{2}.\\d{4}",placeholder:"DD.MM.YYYY"},null,8,C4)])]))}}),Og=Xe(M4,[["__scopeId","data-v-5d153a32"]]),k4={class:"d-flex"},P4=["id","onUpdate:modelValue","value"],O4=["for"],L4=We({__name:"CheckBoxInput",props:{options:{},modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=t,i=_e({get(){return r.modelValue},set(a){console.log("SET CHECKBOX"),n("update:modelValue",a)}});function o(a){return i.value[a]?{color:"var(--color-pv)"}:{color:"var(--color-menu)"}}return(a,s)=>(se(),Se("div",k4,[(se(!0),Se(Ge,null,it(e.options,(l,u)=>(se(),Se("div",{key:u},[wi(U("input",{id:"check"+u,"onUpdate:modelValue":c=>i.value[u]=c,class:"form-check-input",type:"checkbox",value:l},null,8,P4),[[Oc,i.value[u]]]),U("label",{class:"form-check-label px-2",for:"check"+u,style:ot(o(u))},$e(e.options[u]),13,O4)]))),128))]))}}),rT=Xe(L4,[["__scopeId","data-v-24da8da3"]]),R4={class:"planeditor p-2"},N4=We({__name:"EditSchedule",props:{modelValue:{},cpId:{}},emits:["update:modelValue","deletePlan"],setup(e,{emit:t}){const r=e,n=t,i=_e({get(){return r.modelValue},set(s){n("update:modelValue",s)}}),o=_e({get(){return i.value.limit.amount/1e3},set(s){i.value.limit.amount=s*1e3}}),a=_e({get(){return new Date(i.value.frequency.once)},set(s){i.value.frequency.once=`${s.getFullYear()}-${s.getMonth()+1}-${s.getDate()}`}});return(s,l)=>(se(),De(gl,{"modal-id":"schedulePlanSettings-"+e.cpId+"-"+e.modelValue.id},{title:Ae(()=>[Ke($e(r.modelValue.name),1)]),footer:Ae(()=>[U("button",{class:"closebutton btn btn-secondary",onClick:l[0]||(l[0]=u=>s.$emit("update:modelValue",i.value))}," Speichern ")]),default:Ae(()=>[U("div",R4,[we(pt,{title:"Name",icon:"fa-calendar-check",fullwidth:!0},{"inline-item":Ae(()=>[we(Pg,{modelValue:i.value.name,"onUpdate:modelValue":l[1]||(l[1]=u=>i.value.name=u),text:"Name des Plans"},null,8,["modelValue"])]),_:1}),we(pt,{title:"Aktiv",icon:"fa-power-off",fullwidth:!0},{"inline-item":Ae(()=>[we(pr,{modelValue:i.value.active,"onUpdate:modelValue":l[2]||(l[2]=u=>i.value.active=u)},null,8,["modelValue"])]),_:1}),we(pt,{title:"Zielzeit",icon:"fa-clock",fullwidth:!0},{"inline-item":Ae(()=>[we(Pg,{modelValue:i.value.time,"onUpdate:modelValue":l[3]||(l[3]=u=>i.value.time=u),text:"Zielzeit (HH:MM)"},null,8,["modelValue"])]),_:1}),we(pt,{title:"Ladestrom (A)",icon:"fa-bolt",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"chargeCurrent",modelValue:i.value.current,"onUpdate:modelValue":l[4]||(l[4]=u=>i.value.current=u),min:6,max:32,step:1,unit:"A"},null,8,["modelValue"])]),_:1}),we(pt,{title:"Ziel",icon:"fa-bullseye",fullwidth:!0},{"inline-item":Ae(()=>[we(tT,{modelValue:i.value.limit.selected,"onUpdate:modelValue":l[5]||(l[5]=u=>i.value.limit.selected=u),options:[["Soc","soc"],["Energie","amount"]]},null,8,["modelValue"])]),_:1}),i.value.limit.selected==="soc"?(se(),De(pt,{key:0,title:"Ziel-SoC",icon:"fa-battery-half",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"evSoc",modelValue:i.value.limit.soc_scheduled,"onUpdate:modelValue":l[6]||(l[6]=u=>i.value.limit.soc_scheduled=u),min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])]),_:1})):Me("",!0),i.value.limit.selected==="soc"?(se(),De(pt,{key:1,title:"Maximaler SoC bei Überschuss",icon:"fa-battery-half",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"evSoc",modelValue:i.value.limit.soc_limit,"onUpdate:modelValue":l[7]||(l[7]=u=>i.value.limit.soc_limit=u),min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])]),_:1})):Me("",!0),i.value.limit.selected==="amount"?(se(),De(pt,{key:2,title:"Energiemenge (kWh)",icon:"fa-charging-station",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"energyAmount",modelValue:o.value,"onUpdate:modelValue":l[8]||(l[8]=u=>o.value=u),min:1,max:150,step:1,unit:"kWh"},null,8,["modelValue"])]),_:1})):Me("",!0),we(pt,{title:"Wiederholungen",icon:"fa-repeat",fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:i.value.frequency.selected,"onUpdate:modelValue":l[9]||(l[9]=u=>i.value.frequency.selected=u),options:[["Einmalig","once"],["Täglich","daily"],["Wöchentlich","weekly"]]},null,8,["modelValue"])]),_:1}),i.value.frequency.selected==="once"?(se(),De(pt,{key:3,title:"Datum"},{"inline-item":Ae(()=>[we(Og,{modelValue:a.value,"onUpdate:modelValue":l[10]||(l[10]=u=>a.value=u),"input-id":"schedule-date-"+r.cpId.toString()+"-"+i.value.id},null,8,["modelValue","input-id"])]),_:1})):Me("",!0),i.value.frequency.selected==="weekly"?(se(),De(pt,{key:4,title:"Tage"},{default:Ae(()=>[we(rT,{modelValue:i.value.frequency.weekly,"onUpdate:modelValue":l[11]||(l[11]=u=>i.value.frequency.weekly=u),options:["Mo","Di","Mi","Do","Fr","Sa","So"]},null,8,["modelValue"])]),_:1})):Me("",!0),we(pt,{title:"Strompreisbasiert Laden",icon:"fa-coins",fullwidth:!0},{"inline-item":Ae(()=>[we(pr,{modelValue:i.value.et_active,"onUpdate:modelValue":l[12]||(l[12]=u=>i.value.et_active=u)},null,8,["modelValue"])]),_:1}),we(pt,{title:"Anzahl Phasen Zielladen",icon:"fa-plug",fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:i.value.phases_to_use,"onUpdate:modelValue":l[13]||(l[13]=u=>i.value.phases_to_use=u),options:[["1",1],["Maximum",3],["Automatik",0]]},null,8,["modelValue"])]),_:1}),we(pt,{title:"Anzahl Phasen bei PV-Überschuss",icon:"fa-plug",fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:i.value.phases_to_use_pv,"onUpdate:modelValue":l[14]||(l[14]=u=>i.value.phases_to_use_pv=u),options:[["1",1],["Maximum",3],["Automatik",0]]},null,8,["modelValue"])]),_:1}),U("button",{class:"btn delete_button align-self-center",type:"button",onClick:l[15]||(l[15]=u=>s.$emit("deletePlan",i.value))}," Plan löschen ")])]),_:1},8,["modal-id"]))}}),$4=Xe(N4,[["__scopeId","data-v-885c7d27"]]),D4={class:"plantable"},B4={class:"planbuttons-left"},F4=["onClick"],U4={class:"targettime"},j4={class:"limit"},V4={class:"planbuttons-right"},W4=["onClick"],z4={key:0,class:"frequency mt-2"},H4={key:1,class:"frequency mt-2"},q4={class:"planname mt-2"},G4=We({__name:"ConfigScheduled",props:{chargePoint:{}},setup(e){const t=e,r=et(0),n=_e(()=>t.chargePoint?.chargeTemplate?.chargemode.scheduled_charging.plans??[]);var i=et(null);function o(g){switch(n.value[g].frequency.selected){case"once":return l(n.value[g].frequency.once);case"daily":return"täglich";case"weekly":return"";default:return""}}function a(g){switch(n.value[g].limit.selected){case"amount":return qi(n.value[g].limit.amount);case"soc":return n.value[g].limit.soc_scheduled+"%"}}function s(g){return n.value[g].time}function l(g){const m=g.split("-");return`${Number(m[2])}.${Number(m[1])}.`}function u(g){return{color:n.value[g].active?"var(--color-switchGreen)":"var(--color-switchRed)"}}function c(g){return{color:n.value[g].active?"var(--color-fg)":"var(--color-menu)"}}function f(g){return n.value[g].limit.selected=="soc"?"fa-arrow-right":"fa-bolt"}function d(g){t.chargePoint.chargeTemplate.chargemode.scheduled_charging.plans[g].active=!n.value[g].active,St(t.chargePoint.id)}function h(g){const m=`schedulePlanSettings-${t.chargePoint.id}-${n.value[g].id}`;r.value=g,i.value=new _i(document.getElementById(m)),i.value.toggle()}function p(){i.value.hide(),St(t.chargePoint.id)}function y(){No({command:"addChargeTemplateSchedulePlan",data:{template:t.chargePoint.chargeTemplate.id,chargepoint:t.chargePoint.id,changed_in_theme:!0}})}function v(){i.value.hide(),No({command:"removeChargeTemplateSchedulePlan",data:{template:t.chargePoint.chargeTemplate.id,plan:n.value[r.value].id,chargepoint:t.chargePoint.id,changed_in_theme:!0}})}return(g,m)=>(se(),Se(Ge,null,[m[1]||(m[1]=U("p",{class:"heading pt-2"},"Zielladen - Pläne:",-1)),U("div",D4,[(se(!0),Se(Ge,null,it(n.value,(b,_)=>(se(),Se("div",{key:_,class:"plandisplay",style:ot(c(_))},[U("span",B4,[U("i",{class:Qe(["planswitch fa fa-xl",b.active?"fa-toggle-on":"fa-toggle-off"]),style:ot(u(_)),type:"button",onClick:w=>d(_)},null,14,F4)]),U("span",U4,$e(s(_)),1),U("span",j4,[U("i",{class:Qe(["fa fa-sm me-1",f(_)])},null,2),Ke($e(a(_)),1)]),U("span",V4,[U("i",{class:"fa-solid fa-lg fa-gear",type:"button",onClick:w=>h(_)},null,8,W4)]),b.frequency.selected!="weekly"?(se(),Se("span",z4,$e(o(_)),1)):(se(),Se("div",H4,[(se(!0),Se(Ge,null,it(b.frequency.weekly,(w,E)=>(se(),Se("i",{key:E,class:Qe("fa-solid fa-xs "+(w?"fa-charging-station":"fa-circle-xmark"))},null,2))),128))])),U("span",q4,$e(b.name),1),m[0]||(m[0]=U("hr",{class:"dividerline"},null,-1))],4))),128))]),U("button",{class:"createButton btn btn-sm",onClick:y},"Neuer Plan"),(se(!0),Se(Ge,null,it(n.value,b=>(se(),De($4,{key:b.id,"model-value":b,"cp-id":e.chargePoint.id,"onUpdate:modelValue":p,onDeletePlan:v},null,8,["model-value","cp-id"]))),128))],64))}}),Y4=Xe(G4,[["__scopeId","data-v-bffeae93"]]),K4=We({__name:"TimeInput",props:{modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=t,i=_e({get(){return r.modelValue},set(o){n("update:modelValue",o)}});return(o,a)=>wi((se(),Se("input",{"onUpdate:modelValue":a[0]||(a[0]=s=>i.value=s),type:"time",class:"form-control",name:"t"},null,512)),[[Pc,i.value]])}}),N_=Xe(K4,[["__scopeId","data-v-51c81cc3"]]),X4={class:"planeditor p-2"},Q4=We({__name:"EditTimeplan",props:{modelValue:{},cpId:{}},emits:["update:modelValue","deletePlan"],setup(e,{emit:t}){const r=e,n=t,i=_e({get(){return r.modelValue},set(l){n("update:modelValue",l)}}),o=_e({get(){return i.value.limit.amount/1e3},set(l){i.value.limit.amount=l*1e3}}),a=_e({get(){return new Date(i.value.frequency.once[0])},set(l){i.value.frequency.once[0]=`${l.getFullYear()}-${l.getMonth()+1}-${l.getDate()}`}}),s=_e({get(){return new Date(i.value.frequency.once[1])},set(l){i.value.frequency.once[1]=`${l.getFullYear()}-${l.getMonth()+1}-${l.getDate()}`}});return(l,u)=>(se(),De(gl,{"modal-id":"timePlanSettings-"+e.cpId+"-"+e.modelValue.id},{title:Ae(()=>[Ke(" Einstellungen Zeitladen: "+$e(e.modelValue.name),1)]),footer:Ae(()=>[U("button",{class:"closebutton btn btn-secondary",onClick:u[0]||(u[0]=c=>l.$emit("update:modelValue",i.value))}," Speichern ")]),default:Ae(()=>[U("div",X4,[we(pt,{title:"Name",icon:"fa-calendar-check",fullwidth:!0},{"inline-item":Ae(()=>[we(Pg,{modelValue:i.value.name,"onUpdate:modelValue":u[1]||(u[1]=c=>i.value.name=c),text:"Name des Plans"},null,8,["modelValue"])]),_:1}),we(pt,{title:"Aktiv",icon:"fa-power-off",fullwidth:!0},{"inline-item":Ae(()=>[we(pr,{modelValue:i.value.active,"onUpdate:modelValue":u[2]||(u[2]=c=>i.value.active=c)},null,8,["modelValue"])]),_:1}),we(pt,{title:"Ladebeginn",icon:"fa-clock",fullwidth:!0},{"inline-item":Ae(()=>[we(N_,{modelValue:i.value.time[0],"onUpdate:modelValue":u[3]||(u[3]=c=>i.value.time[0]=c),text:"Startzeit (HH:MM)"},null,8,["modelValue"])]),_:1}),we(pt,{title:"Ladeende",icon:"fa-clock",fullwidth:!0},{"inline-item":Ae(()=>[we(N_,{modelValue:i.value.time[1],"onUpdate:modelValue":u[4]||(u[4]=c=>i.value.time[1]=c),text:"Zielzeit (HH:MM)"},null,8,["modelValue"])]),_:1}),we(pt,{title:"Ladestrom",icon:"fa-bolt",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"chargeCurrent",modelValue:i.value.current,"onUpdate:modelValue":u[5]||(u[5]=c=>i.value.current=c),min:6,max:32,step:1,unit:"A"},null,8,["modelValue"])]),_:1}),we(pt,{title:"Begrenzung",icon:"fa-bullseye",fullwidth:!0},{"inline-item":Ae(()=>[we(tT,{modelValue:i.value.limit.selected,"onUpdate:modelValue":u[6]||(u[6]=c=>i.value.limit.selected=c),options:[["Aus","none"],["Soc","soc"],["Energie","amount"]]},null,8,["modelValue"])]),_:1}),i.value.limit.selected==="soc"?(se(),De(pt,{key:0,title:"Ziel-SoC für das Fahrzeug",icon:"fa-battery-half",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"evSoc",modelValue:i.value.limit.soc,"onUpdate:modelValue":u[7]||(u[7]=c=>i.value.limit.soc=c),min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])]),_:1})):Me("",!0),i.value.limit.selected==="amount"?(se(),De(pt,{key:1,title:"Ziel-Energie",icon:"fa-charging-station",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"energyAmount",modelValue:o.value,"onUpdate:modelValue":u[8]||(u[8]=c=>o.value=c),min:1,max:150,step:1,unit:"kWh"},null,8,["modelValue"])]),_:1})):Me("",!0),we(pt,{title:"Wiederholungen",icon:"fa-repeat",fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:i.value.frequency.selected,"onUpdate:modelValue":u[9]||(u[9]=c=>i.value.frequency.selected=c),options:[["Einmalig","once"],["Täglich","daily"],["Wöchentlich","weekly"]]},null,8,["modelValue"])]),_:1}),i.value.frequency.selected==="once"?(se(),De(pt,{key:2,title:"Gültig ab"},{"inline-item":Ae(()=>[we(Og,{modelValue:a.value,"onUpdate:modelValue":u[10]||(u[10]=c=>a.value=c),"input-id":"time-from-date-"+r.cpId.toString()+"-"+i.value.id},null,8,["modelValue","input-id"])]),_:1})):Me("",!0),i.value.frequency.selected==="once"?(se(),De(pt,{key:3,title:"Gültig bis"},{"inline-item":Ae(()=>[we(Og,{modelValue:s.value,"onUpdate:modelValue":u[11]||(u[11]=c=>s.value=c),"input-id":"time-to-date-"+r.cpId.toString()+"-"+i.value.id},null,8,["modelValue","input-id"])]),_:1})):Me("",!0),i.value.frequency.selected==="weekly"?(se(),De(pt,{key:4,title:"Tage"},{default:Ae(()=>[we(rT,{modelValue:i.value.frequency.weekly,"onUpdate:modelValue":u[12]||(u[12]=c=>i.value.frequency.weekly=c),options:["Mo","Di","Mi","Do","Fr","Sa","So"]},null,8,["modelValue"])]),_:1})):Me("",!0),we(pt,{title:"Anzahl Phasen",icon:"fa-plug",fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:i.value.phases_to_use,"onUpdate:modelValue":u[13]||(u[13]=c=>i.value.phases_to_use=c),options:[["1",1],["Maximum",3]]},null,8,["modelValue"])]),_:1}),U("button",{class:"btn delete_button align-self-center",type:"button",onClick:u[14]||(u[14]=c=>l.$emit("deletePlan",i.value))}," Plan löschen ")])]),_:1},8,["modal-id"]))}}),J4=Xe(Q4,[["__scopeId","data-v-93b96949"]]),Z4={class:"plantable"},eW={class:"planbuttons-left"},tW=["onClick"],rW={class:"targettime"},nW={class:"planbuttons-right"},iW=["onClick"],oW={key:0,class:"frequency mt-2"},sW={key:1,class:"frequency mt-2"},aW={class:"planname mt-2"},lW=We({__name:"ConfigTimed",props:{chargePoint:{}},setup(e){const t=e;var r=et(null);const n=et(0),i=t.chargePoint,o=_e(()=>t.chargePoint?.chargeTemplate?.time_charging.plans??[]);function a(v){switch(o.value[v].frequency.selected){case"once":return l(o.value[v].frequency.once);case"daily":return"täglich";case"weekly":return"";default:return""}}function s(v){return`${o.value[v].time[0]} -> ${o.value[v].time[1]}`}function l(v){const g=v[0].split("-"),m=v[1].split("-");return`${Number(g[2])}.${Number(g[1])}.-${Number(m[2])}.${Number(m[1])}`}function u(v){return{color:o.value[v].active?"var(--color-switchGreen)":"var(--color-switchRed)"}}function c(v){return{color:o.value[v].active?"var(--color-fg)":"var(--color-menu)"}}function f(v){t.chargePoint.chargeTemplate.time_charging.plans[v].active=!o.value[v].active,St(t.chargePoint.id)}function d(v){const g=`timePlanSettings-${t.chargePoint.id}-${o.value[v].id}`;n.value=v,r.value=new _i(document.getElementById(g)),r.value.toggle()}function h(){r.value.hide(),St(t.chargePoint.id)}function p(){No({command:"addChargeTemplateTimeChargingPlan",data:{template:t.chargePoint.chargeTemplate.id,chargepoint:t.chargePoint.id,changed_in_theme:!0}})}function y(){r.value.hide(),No({command:"removeChargeTemplateTimeChargingPlan",data:{template:t.chargePoint.chargeTemplate.id,plan:o.value[n.value].id,chargepoint:t.chargePoint.id,changed_in_theme:!0}})}return(v,g)=>(se(),Se(Ge,null,[we(ut,{title:"Zeitladen aktiv",icon:"fa-clock",fullwidth:!0},{"inline-item":Ae(()=>[we(pr,{modelValue:le(i).timedCharging,"onUpdate:modelValue":g[0]||(g[0]=m=>le(i).timedCharging=m)},null,8,["modelValue"])]),_:1}),g[2]||(g[2]=U("p",{class:"heading pt-2"},"Zeitpläne:",-1)),U("div",Z4,[(se(!0),Se(Ge,null,it(o.value,(m,b)=>(se(),Se("div",{key:b,class:"plandisplay",style:ot(c(b))},[U("span",eW,[U("i",{class:Qe(["planswitch fa fa-xl",m.active?"fa-toggle-on":"fa-toggle-off"]),style:ot(u(b)),type:"button",onClick:_=>f(b)},null,14,tW)]),U("span",rW,$e(s(b)),1),U("span",nW,[U("i",{class:"fa-solid fa-xl fa-gear",onClick:_=>d(b)},null,8,iW)]),m.frequency.selected!="weekly"?(se(),Se("span",oW,$e(a(b)),1)):(se(),Se("div",sW,[(se(!0),Se(Ge,null,it(m.frequency.weekly,(_,w)=>(se(),Se("i",{key:w,class:Qe("fa-solid fa-xs "+(_?"fa-charging-station":"fa-circle-xmark"))},null,2))),128))])),U("span",aW,$e(m.name),1),g[1]||(g[1]=U("hr",{class:"dividerline"},null,-1))],4))),128))]),U("button",{class:"createButton btn btn-sm",onClick:p},"Neuer Plan"),(se(!0),Se(Ge,null,it(o.value,m=>(se(),De(J4,{key:m.id,"model-value":m,"cp-id":e.chargePoint.id,"onUpdate:modelValue":h,onDeletePlan:y},null,8,["model-value","cp-id"]))),128))],64))}}),uW=Xe(lW,[["__scopeId","data-v-88f40880"]]),cW={id:"pricechart",class:"p-0 m-0"},fW={viewBox:"0 0 400 260"},dW=["transform"],hW=["id","origin"],pW=["id","transform"],gW=["id","transform"],mW=["d"],yW=["d"],vW=["d"],bW=["d"],es=400,Nd=250,$d=12,nT=We({__name:"PriceChart",props:{id:{},maxPrice:{}},setup(e){const t=e,r=et(!1),n={top:0,bottom:15,left:20,right:5},i=_e(()=>{const v=new Date;let g=[];return mt.etPriceList.size>0&&mt.etPriceList.forEach((m,b)=>{b>=v&&g.push([b,m])}),g}),o=_e(()=>i.value.length>1?(es-n.left-n.right)/i.value.length:0),a=_e(()=>{let v=pn(i.value,g=>g[0]);return v[1]&&(v[1]=new Date(v[1]),v[1].setTime(v[1].getTime()+9e5)),Hi().range([n.left,es-n.left-n.right]).domain(v)}),s=_e(()=>{let v=[0,0];return i.value.length>0?(v=pn(i.value,g=>g[1]),v[0]=Math.floor(v[0]-1),v[1]=Math.floor(v[1]+1)):v=[0,0],v}),l=_e(()=>gn().range([Nd-n.bottom,0]).domain(s.value)),u=_e(()=>{if(t.maxPrice!=null){const v=ri(),g=[[n.left,l.value(t.maxPrice)],[es-n.left-n.right,l.value(t.maxPrice)]];return v(g)}else return""}),c=_e(()=>{const v=ri(),g=[[n.left,l.value(Ce.lowerPriceBound)],[es-n.left-n.right,l.value(Ce.lowerPriceBound)]];return v(g)}),f=_e(()=>{const v=ri(),g=[[n.left,l.value(Ce.upperPriceBound)],[es-n.left-n.right,l.value(Ce.upperPriceBound)]];return v(g)}),d=_e(()=>{const v=ri(),g=[[n.left,l.value(0)],[es-n.left-n.right,l.value(0)]];return v(g)}),h=_e(()=>eu(a.value).ticks(i.value.length).tickSize(5).tickSizeInner(-Nd).tickFormat(v=>v.getHours()%6==0&&v.getMinutes()==0?Ro("%H:%M")(v):"")),p=_e(()=>Rc(l.value).ticks(s.value[1]-s.value[0]).tickSizeInner(-375).tickFormat(v=>v%5!=0?"":v.toString())),y=_e(()=>{if(r.value==!0,i.value.length==0)return"PriceChart.vue";const v=dt("g#pricechart-"+t.id);v.selectAll("*").remove(),v.selectAll("bar").data(i.value).enter().append("g").append("rect").attr("class","bar").attr("x",C=>a.value(C[0])).attr("y",C=>l.value(C[1])).attr("width",o.value).attr("height",C=>l.value(s.value[0])-l.value(C[1])).attr("fill",C=>t.maxPrice!=null?C[1]<=t.maxPrice?"var(--color-charging)":"var(--color-axis)":"var(--color-charging)");const m=dt("g#xaxis-"+t.id);m.selectAll("*").remove(),m.call(h.value),m.selectAll(".tick").attr("font-size",$d).attr("color","var(--color-bg)"),m.selectAll(".tick line").attr("stroke","var(--color-bg)").attr("stroke-width",C=>C.getMinutes()==0?C.getHours()%6==0?"2":"0.5":"0"),m.select(".domain").attr("stroke","var(--color-bg");const b=dt("g#yaxis-"+t.id);b.selectAll("*").remove(),b.call(p.value),b.selectAll(".tick").attr("font-size",$d).attr("color","var(--color-bg)"),b.selectAll(".tick line").attr("stroke","var(--color-bg)").attr("stroke-width",C=>C%5==0?"2":"0.5"),b.select(".domain").attr("stroke","var(--color-bg)");const _=dt("g#tooltips");_.selectAll("*").remove();const w=_.selectAll("ttip").data(i.value).enter().append("g").attr("class","ttarea");w.append("rect").attr("x",C=>a.value(C[0])).attr("y",C=>l.value(C[1])).attr("height",C=>l.value(s.value[0])-l.value(C[1])).attr("class","ttrect").attr("width",o.value).attr("opacity","1%").attr("fill","var(--color-charging)");const E=w.append("g").attr("class","ttmessage").attr("transform",C=>"translate("+(a.value(C[0])-30+o.value/2)+","+(l.value(C[1])-16)+")");E.append("rect").attr("rx",5).attr("width",60).attr("height",30).attr("fill","var(--color-menu)");const T=E.append("text").attr("text-anchor","middle").attr("x",30).attr("y",12).attr("font-size",$d).attr("fill","var(--color-bg)");return T.append("tspan").attr("x",30).attr("dy","0em").text(C=>Ro("%H:%M")(C[0])),T.append("tspan").attr("x",30).attr("dy","1.1em").text(C=>Math.round(C[1]*10)/10+" ct"),"PriceChart.vue"});return Hr(()=>{r.value=!r.value}),(v,g)=>(se(),Se("figure",cW,[(se(),Se("svg",fW,[U("g",{transform:"translate("+n.top+","+n.right+")"},[U("g",{id:"pricechart-"+e.id,origin:y.value},null,8,hW),U("g",{id:"xaxis-"+e.id,class:"axis",transform:`translate(0,${Nd-n.bottom})`},null,8,pW),U("g",{id:"yaxis-"+e.id,class:"axis",transform:`translate(${n.left},0)`},null,8,gW),s.value[0]<0?(se(),Se("path",{key:0,d:d.value,stroke:"var(--color-fg)","stroke-width":"1"},null,8,mW)):Me("",!0),U("path",{d:c.value,stroke:"green"},null,8,yW),U("path",{d:f.value,stroke:"red"},null,8,vW),U("path",{d:u.value,stroke:"yellow"},null,8,bW)],8,dW),g[0]||(g[0]=U("g",{id:"tooltips"},null,-1))]))]))}}),_W={class:"d-flex flex-column rangeinput"},wW={class:"d-flex flex-fill justify-content-between align-items-center"},SW={class:"d-flex flex-fill flex-column justify-content-center m-0 p-0"},EW=["id","min","max","step"],xW={class:"d-flex justify-content-between align-items-center"},TW={class:"minlabel ps-4"},AW={class:"valuelabel"},IW={class:"maxlabel pe-4"},CW=We({__name:"DateRangeInput",props:{id:{},min:{},max:{},step:{},unit:{},modelValue:{}},emits:["update:modelValue"],setup(e,{emit:t}){const r=e,n=t,i=_e({get(){return r.modelValue.getTime()},set(s){n("update:modelValue",new Date(s))}});function o(){i.value>r.min.getTime()&&(i.value=i.value-r.step)}function a(){i.value(se(),Se("span",_W,[U("span",wW,[U("span",{type:"button",class:"minusButton",onClick:o},[...l[1]||(l[1]=[U("i",{class:"fa fa-xl fa-minus-square me-2"},null,-1)])]),U("div",SW,[wi(U("input",{id:e.id,"onUpdate:modelValue":l[0]||(l[0]=u=>i.value=u),type:"range",class:"form-range flex-fill",min:e.min.getTime(),max:e.max.getTime(),step:e.step},null,8,EW),[[Pc,i.value,void 0,{number:!0}]])]),U("span",{type:"button",class:"plusButton",onClick:a},[...l[2]||(l[2]=[U("i",{class:"fa fa-xl fa-plus-square ms-2"},null,-1)])])]),U("span",xW,[U("span",TW,$e(le(ka)(e.min,!0)),1),U("span",AW,$e(le(ka)(new Date(i.value),!0)),1),U("span",IW,$e(le(ka)(e.max,!0)),1)])]))}}),MW=Xe(CW,[["__scopeId","data-v-b1b41e8b"]]),kW={class:"pricecalculator p-2"},PW=We({__name:"PriceCalculator",props:{modelValue:{},cpId:{}},emits:["update:modelValue","deletePlan"],setup(e,{emit:t}){const r=e,n=t,i=_e(()=>Ye[r.cpId]),o=et(i.value?.soc??0);var a=et(o.value<80?80:100);const s=et(30),l=_e(()=>UE[i.value?.evTemplate]),u=_e({get(){return r.modelValue},set(y){n("update:modelValue",y)}}),c=et(mt.maxDate()??new Date),f=_e(()=>{if(l.value!=null){const y=l.value.battery_capacity??0,v=l.value.efficiency??90,g=l.value.max_phases,m=l.value.max_current_multi_phases*g*v/100*230;return y*(a.value-o.value)/100/m*60}else return-1}),d=_e(()=>mt.maxPriceForDuration(f.value+s.value,c.value)),h=_e(()=>d.value>0?`${Math.round(d.value*100)/100} ${wt.country=="ch"?"Rp":"ct"}`:"Ziel nicht erreichbar"),p=_e(()=>d.value>u.value?"color: var(--color-charging);":"color: var(--color-evu);");return(y,v)=>(se(),De(gl,{"modal-id":"priceCalculator-"+e.cpId},{title:Ae(()=>[Ke(" Maximaler Strompreis für "+$e(i.value.vehicleName),1)]),footer:Ae(()=>[U("button",{class:"closebutton btn btn-secondary",onClick:v[0]||(v[0]=g=>y.$emit("update:modelValue",d.value))}," Preis bestätigen ")]),default:Ae(()=>[U("div",kW,[we(lt,{class:"infoitem",heading:"Aktueller SoC"},{default:Ae(()=>[Ke($e(o.value)+"% ",1)]),_:1}),we(lt,{class:"infoitem",heading:"Batterie-Kapazität"},{default:Ae(()=>[Ke($e((l.value?.battery_capacity??0)/1e3)+" kWh ",1)]),_:1}),we(lt,{class:"infoitem",heading:"Ladestrom"},{default:Ae(()=>[Ke($e(l.value?.max_current_multi_phases??0)+" A ",1)]),_:1}),we(pt,{title:"Ziel-SoC",icon:"fa-battery-full",class:"mt-4",fullwidth:!0,infotext:`Der gewünschte Ladezustand, der bis zur Zielzeit erreicht sein soll. Aktueller SoC: ${o.value}%`},{default:Ae(()=>[we(Ot,{id:"targetSoc",modelValue:le(a),"onUpdate:modelValue":v[1]||(v[1]=g=>tr(a)?a.value=g:a=g),min:o.value,max:100,step:1,unit:"%"},null,8,["modelValue","min"])]),_:1},8,["infotext"]),we(pt,{title:"Zielzeit",icon:"fa-clock",fullwidth:!0,infotext:"Die Uhrzeit, zu der das Fahrzeug auf dem angegebenen Ladestand sein soll."},{default:Ae(()=>[we(MW,{id:"targetTime",modelValue:c.value,"onUpdate:modelValue":v[2]||(v[2]=g=>c.value=g),min:new Date,max:le(mt).maxDate()??new Date,step:9e5,unit:"min"},null,8,["modelValue","min","max"])]),_:1}),we(pt,{title:"Ladezeit-Puffer",icon:"fa-clock",class:"mb-4",fullwidth:!0,infotext:"Der zeitliche Puffer, der zur berechneten Ladezeit hinzugerechnet wird. Dadurch wird sichergestellt, dass das Fahrzeug rechtzeitig fertig geladen ist."},{default:Ae(()=>[we(Ot,{id:"bufferMinutes",modelValue:s.value,"onUpdate:modelValue":v[3]||(v[3]=g=>s.value=g),min:0,max:60,step:1,unit:"min"},null,8,["modelValue"])]),_:1}),we(lt,{class:"infoitem",heading:"Ladezeit"},{default:Ae(()=>[Ke($e(Math.floor((f.value+s.value)/60))+"h "+$e(Math.round((f.value+s.value)%60))+"min ",1)]),_:1}),we(lt,{class:"infoitem",heading:"Höchstpreis"},{default:Ae(()=>[U("span",{class:"targetprice",style:ot(p.value)},$e(h.value),5)]),_:1})])]),_:1},8,["modal-id"]))}}),iT=Xe(PW,[["__scopeId","data-v-f66f0b29"]]),OW={class:"providername ms-1"},LW={class:"chargeDuration p-0 m-0"},RW={key:0,class:"p-3 pb-1 rangeInputContainer"},NW={key:1,class:"d-flex justify-content-between align-items-center mx-2 mb-4 mt-2"},$W=["disabled"],DW=We({__name:"PriceSelector",props:{chargepoint:{},globalview:{type:Boolean}},setup(e){const t=e,r=et(0);var n=et(null);let i=t.chargepoint?et(t.chargepoint.etMaxPrice):et(0);const o=et(!1),a=et(t.chargepoint),s=_e({get(){return i.value},set(g){i.value=g,o.value=!0}});function l(){a.value&&(Ye[a.value.id].etMaxPrice=s.value),o.value=!1}const u=et(!1),c=_e(()=>o.value?{background:"var(--color-charging)"}:{background:"var(--color-menu)"}),f=_e(()=>{let g=[];return mt.etPriceList.forEach(m=>{g.push(m)}),g.sort((m,b)=>m-b)}),d=_e(()=>{const m=f.value.filter(b=>b<=s.value).length;return`${Math.floor(m*15/60)}h ${m*15%60}min`});function h(){let g=f.value[0];for(let m of f.value){if(m>=s.value)break;g=m}s.value=g}function p(){let g=f.value[0];for(let m of f.value)if(m>s.value){g=m;break}else g=m;s.value=g}function y(){const g=`priceCalculator-${t.chargepoint.id}`;n.value=new _i(document.getElementById(g)),n.value.toggle()}function v(g){n.value.hide(),s.value=g,a.value&&(Ye[a.value.id].etMaxPrice=s.value),o.value=!1}return Hr(()=>{u.value=!u.value}),(g,m)=>(se(),Se(Ge,null,[U("p",OW,"Anbieter: "+$e(le(mt).etProvider),1),we(nT,{id:`cp-${t.chargepoint?.id}`,"max-price":s.value},null,8,["id","max-price"]),U("div",LW,"Ladezeit: "+$e(d.value),1),e.chargepoint!=null?(se(),Se("div",RW,[we(Ot,{id:"pricechart_local",modelValue:s.value,"onUpdate:modelValue":m[0]||(m[0]=b=>s.value=b),min:Math.floor(f.value[0]-1),max:Math.ceil(f.value[f.value.length-1]+1),step:.1,decimals:2,"show-subrange":!0,"subrange-min":f.value[0],"subrange-max":f.value[f.value.length-1],unit:le(wt).country=="ch"?"Rp":"ct"},null,8,["modelValue","min","max","subrange-min","subrange-max","unit"])])):Me("",!0),U("div",{class:"d-flex justify-content-between px-3 pb-2 pt-0 mt-0"},[U("button",{type:"button",class:"btn btn-sm jumpbutton",onClick:h},[...m[1]||(m[1]=[U("i",{class:"fa fa-sm fa-arrow-left"},null,-1)])]),U("button",{type:"button",class:"btn btn-sm jumpbutton",onClick:p},[...m[2]||(m[2]=[U("i",{class:"fa fa-sm fa-arrow-right"},null,-1)])])]),e.chargepoint!=null?(se(),Se("div",NW,[U("button",{class:"calculatorButton btn btn-secondary",type:"button",onClick:y}," Preis berechnen "),U("span",{class:"",onClick:l},[U("button",{type:"button",class:"btn btn-secondary confirmButton",style:ot(c.value),disabled:!o.value}," Bestätigen ",12,$W)])])):Me("",!0),we(iT,{"model-value":r.value,"cp-id":e.chargepoint.id,"onUpdate:modelValue":v},null,8,["model-value","cp-id"])],64))}}),oT=Xe(DW,[["__scopeId","data-v-40af4b3c"]]),BW={class:"pt-2 d-flex flex-column"},FW=We({__name:"ConfigEco",props:{chargepoint:{}},setup(e){const r=et(e.chargepoint);var n=0;const i=_e({get(){return r.value.ecoMaxEnergy/1e3},set(o){r.value.ecoMaxEnergy=o*1e3}});return(o,a)=>(se(),Se(Ge,null,[U("div",BW,[a[5]||(a[5]=U("div",{class:"heading ms-1"},"Eco-Laden:",-1)),le(mt).active&&le(mt).etPriceList.size>0?(se(),De(oT,{key:0,chargepoint:r.value},null,8,["chargepoint"])):Me("",!0),le(mt).active?(se(),De(ut,{key:1,title:"Ladestrom beim Preisladen",icon:"fa-bolt",infotext:le(xn).ecoMinCurrent,fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"minCurrent",modelValue:r.value.ecoMinCurrent,"onUpdate:modelValue":a[0]||(a[0]=s=>r.value.ecoMinCurrent=s),min:6,max:32,step:1,unit:"A"},null,8,["modelValue"])]),_:1},8,["infotext"])):Me("",!0),we(ut,{title:"Anzahl Phasen bei Überschuss",icon:"fa-plug",fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:r.value.ecoTargetPhases,"onUpdate:modelValue":a[1]||(a[1]=s=>r.value.ecoTargetPhases=s),options:[["1",1],["Maximum",3],["Auto",0]]},null,8,["modelValue"])]),_:1}),we(ut,{title:"Begrenzung",icon:"fa-hand",fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:r.value.ecoChargeLimitMode,"onUpdate:modelValue":a[2]||(a[2]=s=>r.value.ecoChargeLimitMode=s),options:le(qm).map(s=>[s.name,s.id])},null,8,["modelValue","options"])]),_:1}),r.value.ecoChargeLimitMode=="soc"?(se(),De(ut,{key:2,title:"Maximaler Ladestand",icon:"fa-sliders",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"maxSoc",modelValue:r.value.ecoTargetSoc,"onUpdate:modelValue":a[3]||(a[3]=s=>r.value.ecoTargetSoc=s),min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])]),_:1})):Me("",!0),r.value.ecoChargeLimitMode=="amount"?(se(),De(ut,{key:3,title:"Zu ladende Energie",icon:"fa-sliders",fullwidth:!0},{default:Ae(()=>[we(Ot,{id:"maxEnergy",modelValue:i.value,"onUpdate:modelValue":a[4]||(a[4]=s=>i.value=s),min:0,max:100,step:1,unit:"kWh"},null,8,["modelValue"])]),_:1})):Me("",!0)]),we(iT,{"model-value":le(n),"cp-id":e.chargepoint.id},null,8,["model-value","cp-id"])],64))}}),UW=Xe(FW,[["__scopeId","data-v-07a2ffff"]]),jW={class:"settingsheader mt-2 ms-1"},VW=We({__name:"ConfigGeneral",props:{chargepoint:{}},emits:["closeConfig"],setup(e){const r=e.chargepoint,n=_e({get(){return rt[r.connectedVehicle]?rt[r.connectedVehicle].chargeTemplateId:0},set(i){rt[r.connectedVehicle]&&(rt[r.connectedVehicle].chargeTemplateId=i),r.chargeTemplate=qa[i]}});return(i,o)=>(se(),Se(Ge,null,[U("p",jW," Ladeeinstellungen für "+$e(le(r).vehicleName)+": ",1),we(ut,{title:"Lademodus",icon:"fa-charging-station",infotext:le(xn).chargemode,fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:le(r).chargeMode,"onUpdate:modelValue":o[0]||(o[0]=a=>le(r).chargeMode=a),columns:3,options:Object.keys(le(zt)).map(a=>[le(zt)[a].name,a,le(zt)[a].color,le(zt)[a].icon])},null,8,["modelValue","options"])]),_:1},8,["infotext"]),Object.values(le(rt)).filter(a=>a.visible).length>1?(se(),De(ut,{key:0,title:"Fahrzeug wechseln",icon:"fa-car",infotext:le(xn).vehicle,fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:le(r).connectedVehicle,"onUpdate:modelValue":o[1]||(o[1]=a=>le(r).connectedVehicle=a),modelModifiers:{number:!0},options:Object.values(le(rt)).filter(a=>a.visible).map(a=>[a.name,a.id])},null,8,["modelValue","options"])]),_:1},8,["infotext"])):Me("",!0),we(ut,{title:"Ladeprofil",icon:"fa-settings",infotext:le(xn).chargeTemplate,fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:n.value,"onUpdate:modelValue":o[2]||(o[2]=a=>n.value=a),options:Object.values(le(qa)).map(a=>[a.name,a.id])},null,8,["modelValue","options"])]),_:1},8,["infotext"]),we(ut,{title:"Sperren",icon:"fa-lock",infotext:le(xn).locked,fullwidth:!0},{"inline-item":Ae(()=>[we(pr,{modelValue:le(r).isLocked,"onUpdate:modelValue":o[3]||(o[3]=a=>le(r).isLocked=a)},null,8,["modelValue"])]),_:1},8,["infotext"]),we(ut,{title:"Priorität",icon:"fa-star",infotext:le(xn).priority,fullwidth:!0},{"inline-item":Ae(()=>[we(pr,{modelValue:le(r).hasPriority,"onUpdate:modelValue":o[4]||(o[4]=a=>le(r).hasPriority=a)},null,8,["modelValue"])]),_:1},8,["infotext"]),we(ut,{title:"Zeitplan",icon:"fa-clock",infotext:le(xn).timeplan,fullwidth:!0},{"inline-item":Ae(()=>[we(pr,{modelValue:le(r).timedCharging,"onUpdate:modelValue":o[5]||(o[5]=a=>le(r).timedCharging=a)},null,8,["modelValue"])]),_:1},8,["infotext"]),le(wt).isBatteryConfigured?(se(),De(ut,{key:1,title:"PV-Priorität",icon:"fa-car-battery",infotext:le(xn).pvpriority,fullwidth:!0},{default:Ae(()=>[we(jt,{modelValue:le(wt).pvBatteryPriority,"onUpdate:modelValue":o[6]||(o[6]=a=>le(wt).pvBatteryPriority=a),options:le(Y2)},null,8,["modelValue","options"])]),_:1},8,["infotext"])):Me("",!0)],64))}}),WW=Xe(VW,[["__scopeId","data-v-8510b24f"]]),zW={class:"status-string shadow m-0 mb-1 p-3"},HW={style:{color:"red"}},qW=["id"],GW={class:"nav nav-tabs nav-justified mx-1 mt-1",role:"tablist"},YW=["id","data-bs-target"],KW=["id","data-bs-target"],XW=["id","data-bs-target"],QW=["id","data-bs-target"],JW=["id","data-bs-target"],ZW=["data-bs-target"],e6=["id"],t6=["id"],r6=["id"],n6=["id"],i6=["id"],o6=["id"],s6=["id"],a6=We({__name:"ChargeConfigPanel",props:{chargepoint:{}},emits:["closeConfig"],setup(e){const t=e,r=et(t.chargepoint),n=_e(()=>r.value.chargeTemplate?.id??0),i=_e(()=>r.value.id);function o(){let a="";switch(t.chargepoint.chargeMode){case"instant_charging":a="#inSettings"+t.chargepoint.id;break;case"pv_charging":a="#pvhSettings"+t.chargepoint.id;break;case"scheduled_charging":a="#scSettings"+t.chargepoint.id;break;case"eco_charging":a="#ecSettings"+t.chargepoint.id;break;default:a="#chSettings"+t.chargepoint.id}const s=document.querySelector(a);if(s){var l=new Bo(s);l.show()}else console.error("Could not find the Tab element to activate")}return Hr(()=>{o()}),(a,s)=>(se(),Se(Ge,null,[we(ut,{title:"Status",icon:"fa-info-circle",fullwidth:!0,class:"item"},{default:Ae(()=>[U("span",zW,$e(r.value.stateStr),1)]),_:1}),r.value.faultState!=0?(se(),De(ut,{key:0,title:"Fehler",class:"grid-col-12",icon:"fa-triangle-exclamation"},{default:Ae(()=>[U("span",HW,$e(r.value.faultStr),1)]),_:1})):Me("",!0),U("div",{id:`cptabarea-${i.value}`,class:"m-0 mt-4 p-0 grid-col-12 tabarea"},[U("nav",GW,[U("a",{id:`chSettings${i.value}`,class:"nav-link active","data-bs-toggle":"tab","data-bs-target":"#chargeSettings"+i.value},[...s[0]||(s[0]=[U("i",{class:"fa-solid fa-charging-station"},null,-1)])],8,YW),U("a",{id:`inSettings${i.value}`,class:"nav-link","data-bs-toggle":"tab","data-bs-target":"#instantSettings"+i.value},[...s[1]||(s[1]=[U("i",{class:"fa-solid fa-lg fa-bolt"},null,-1)])],8,KW),U("a",{id:`pvhSettings${i.value}`,class:"nav-link","data-bs-toggle":"tab","data-bs-target":"#pvSettings"+i.value},[...s[2]||(s[2]=[U("i",{class:"fa-solid fa-solar-panel me-1"},null,-1)])],8,XW),U("a",{id:`scSettings${i.value}`,class:"nav-link","data-bs-toggle":"tab","data-bs-target":"#scheduledSettings"+i.value},[...s[3]||(s[3]=[U("i",{class:"fa-solid fa-bullseye me-1"},null,-1)])],8,QW),U("a",{id:`ecSettings${i.value}`,class:"nav-link","data-bs-toggle":"tab","data-bs-target":"#ecoSettings"+i.value},[...s[4]||(s[4]=[U("i",{class:"fa-solid fa-coins"},null,-1)])],8,JW),U("a",{class:"nav-link","data-bs-toggle":"tab","data-bs-target":"#timedSettings"+i.value},[...s[5]||(s[5]=[U("i",{class:"fa-solid fa-clock"},null,-1)])],8,ZW)]),U("div",{id:`cpsettingsPanes-${i.value}`,class:"tab-content mx-1 p-1 pb-3"},[U("div",{id:"chargeSettings"+i.value,class:"tab-pane active",role:"tabpanel","aria-labelledby":"instant-tab"},[we(WW,{chargepoint:e.chargepoint},null,8,["chargepoint"])],8,t6),U("div",{id:"instantSettings"+i.value,class:"tab-pane",role:"tabpanel","aria-labelledby":"instant-tab"},[we(KV,{chargepoint:r.value,vehicles:le(rt),"charge-templates":le(qa)},null,8,["chargepoint","vehicles","charge-templates"])],8,r6),U("div",{id:"pvSettings"+i.value,class:"tab-pane",role:"tabpanel","aria-labelledby":"pv-tab"},[we(o4,{chargepoint:r.value,vehicles:le(rt),"charge-templates":le(qa)},null,8,["chargepoint","vehicles","charge-templates"])],8,n6),U("div",{id:"scheduledSettings"+i.value,class:"tab-pane",role:"tabpanel","aria-labelledby":"scheduled-tab"},[n.value!=null?(se(),De(Y4,{key:0,"charge-point":r.value},null,8,["charge-point"])):Me("",!0)],8,i6),U("div",{id:"ecoSettings"+i.value,class:"tab-pane",role:"tabpanel","aria-labelledby":"eco-tab"},[n.value!=null?(se(),De(UW,{key:0,chargepoint:r.value},null,8,["chargepoint"])):Me("",!0)],8,o6),U("div",{id:"timedSettings"+i.value,class:"tab-pane",role:"tabpanel","aria-labelledby":"scheduled-tab"},[n.value!=null?(se(),De(uW,{key:0,"charge-point":r.value},null,8,["charge-point"])):Me("",!0)],8,s6)],8,e6)],8,qW)],64))}}),Lg=Xe(a6,[["__scopeId","data-v-0bc35ef3"]]),$n=We({__name:"FormatWattH",props:{wattH:{}},setup(e){const t=e,r=_e(()=>qi(t.wattH,Ce.decimalPlaces));return(n,i)=>(se(),Se("span",null,$e(r.value),1))}}),l6={class:"wb-widget p-0 m-0 shadow widgetWidth"},u6={class:"py-4 px-3 d-flex justify-content-between align-items-center titlerow"},c6={class:"d-flex align-items-center widgetname p-0 m-0"},f6={class:"buttonrea d-flex float-right justify-content-end align-items-center"},d6={class:"grid12 pb-3 px-3"},h6=We({__name:"WbWidgetFlex",props:{variableWidth:{type:Boolean},fullWidth:{type:Boolean}},setup(e){const t=e,r=_e(()=>t.fullWidth?"col-12":t.variableWidth&&Ce.preferWideBoxes?"col-lg-6":"col-lg-4");return(n,i)=>(se(),Se("div",{class:Qe(["p-2 m-0",r.value])},[U("div",l6,[U("div",u6,[U("div",c6,[It(n.$slots,"title",{},()=>[i[0]||(i[0]=U("div",{class:"p-0"},"(title goes here)",-1))],!0),It(n.$slots,"subtitle",{},void 0,!0)]),U("div",f6,[It(n.$slots,"buttons",{},void 0,!0)])]),U("div",d6,[It(n.$slots,"default",{},void 0,!0)])])],2))}}),mn=Xe(h6,[["__scopeId","data-v-fb6ac7a4"]]),p6={class:"d-flex justify-content-center align-items-center"},g6=We({__name:"BatterySymbol",props:{soc:{},color:{}},setup(e){const t=e,r=_e(()=>t.soc<=12?"fa-battery-empty":t.soc<38?"fa-battery-quarter":t.soc<62?"fa-battery-half":t.soc<87?"fa-battery-three-quarters":"fa-battery-full"),n=_e(()=>({color:t.color??"var(--color-menu)"}));return(i,o)=>(se(),Se("span",p6,[U("i",{class:Qe(["fa me-1",r.value]),style:ot(n.value)},null,6),Ke(" "+$e(Math.round(e.soc)+"%"),1)]))}}),sf=Xe(g6,[["__scopeId","data-v-a68c844a"]]),m6=We({__name:"WbBadge",props:{color:{},bgcolor:{}},setup(e){const t=e,r=_e(()=>({color:t.color??"var(--color-bg)","background-color":t.bgcolor??"var(--color-menu)"}));return(n,i)=>(se(),Se("span",{class:"pillWbBadge rounded-pill ms-2 px-2",style:ot(r.value)},[It(n.$slots,"default",{},void 0,!0)],4))}}),yn=Xe(m6,[["__scopeId","data-v-36112fa3"]]),y6={style:{color:"var(--color-charging)"}},v6={style:{color:"var(--color-charging)"}},b6={style:{color:"var(--color-charging)"}},_6={class:"targetCurrent"},w6=We({__name:"ChargingState",props:{chargepoint:{},fullWidth:{type:Boolean}},setup(e){const t=e,r=_e(()=>(Math.round(t.chargepoint.current*10)/10).toLocaleString(void 0)+" A"),n=_e(()=>(Math.round(t.chargepoint.realCurrent*10)/10).toLocaleString(void 0)+" A");return(i,o)=>(se(),Se(Ge,null,[t.chargepoint.power>0?(se(),De(lt,{key:0,heading:"Leistung:",class:"grid-col-3 grid-left mb-3"},{default:Ae(()=>[U("span",y6,[we(ll,{watt:t.chargepoint.power},null,8,["watt"])])]),_:1})):Me("",!0),t.chargepoint.power>0?(se(),De(lt,{key:1,heading:"Strom:",class:"grid-col-3"},{default:Ae(()=>[U("span",v6,$e(n.value),1)]),_:1})):Me("",!0),t.chargepoint.power>0?(se(),De(lt,{key:2,heading:"Phasen:",class:"grid-col-3"},{default:Ae(()=>[U("span",b6,$e(t.chargepoint.phasesInUse),1)]),_:1})):Me("",!0),t.chargepoint.power>0?(se(),De(lt,{key:3,heading:"Sollstrom:",class:"grid-col-3 grid-right"},{default:Ae(()=>[U("span",_6,$e(r.value),1)]),_:1})):Me("",!0)],64))}}),S6=Xe(w6,[["__scopeId","data-v-2cc82367"]]),E6={class:"carTitleLine d-flex justify-content-between align-items-center"},x6={key:1,class:"me-1 fa-solid fa-xs fa-star ps-1"},T6={key:2,class:"me-0 fa-solid fa-xs fa-clock ps-1"},A6={key:0,class:"carSelector p-4 m-2"},I6={class:"grid12"},C6={key:2,class:"socEditor rounded mt-2 d-flex flex-column align-items-center grid-col-12 grid-left"},M6={class:"d-flex justify-content-stretch align-items-center"},k6={key:3,class:"divider grid-col-12"},P6={key:0,class:"fa-solid fa-sm fas fa-edit ms-2"},O6=["id"],L6=We({__name:"VehicleData",props:{chargepoint:{},fullWidth:{type:Boolean}},setup(e){const t=e,r=t.chargepoint,n=et(!1),i=et(!1),o=et(!1),a=_e({get(){return r.chargeMode},set(b){r.chargeMode=b}}),s=_e(()=>{const b=t.chargepoint.rangeCharged,_=t.chargepoint.chargedSincePlugged,w=t.chargepoint.dailyYield;return _>0?Math.round(b/_*w).toString()+" "+t.chargepoint.rangeUnit:"0 km"}),l=_e(()=>t.chargepoint.soc),u=et(0),c=_e(()=>{const[b]=mt.etPriceList.values();return(Math.round(b*10)/10).toFixed(1)}),f=_e(()=>t.chargepoint.etMaxPrice>=+c.value?{color:"var(--color-charging)"}:{color:"var(--color-menu)"}),d=_e(()=>Object.values(rt).filter(b=>b.visible)),h=_e(()=>t.chargepoint.soc<20?"var(--color-evu)":t.chargepoint.soc>=80?"var(--color-pv)":"var(--color-battery)"),p=_e(()=>t.chargepoint.chargeMode==="stop"?{color:"var(--fg)"}:{color:zt[t.chargepoint.chargeMode].color}),y=_e(()=>wt.country==="ch"?" Rp":" ct");function v(){Mr("socUpdate",1,t.chargepoint.connectedVehicle),Ye[t.chargepoint.id].waitingForSoc=!0}function g(){Mr("setSoc",u.value,t.chargepoint.connectedVehicle),n.value=!1}function m(){n.value?n.value=!1:(u.value=t.chargepoint.soc,n.value=!0)}return(b,_)=>(se(),Se(Ge,null,[U("div",E6,[U("h3",{onClick:_[0]||(_[0]=w=>o.value=!o.value)},[_[8]||(_[8]=U("i",{class:"fa-solid fa-sm fa-car me-2"},null,-1)),Ke(" "+$e(e.chargepoint.vehicleName)+" ",1),d.value.length>1?(se(),Se("span",{key:0,class:Qe(["fa-solid fa-xs me-2",o.value?"fa-caret-up":"fa-caret-down"])},null,2)):Me("",!0),e.chargepoint.hasPriority?(se(),Se("span",x6)):Me("",!0),e.chargepoint.timedCharging?(se(),Se("span",T6)):Me("",!0)]),e.chargepoint.isSocConfigured?(se(),De(yn,{key:0,bgcolor:h.value},{default:Ae(()=>[we(sf,{soc:l.value??0,color:"var(--color-bg)",class:"me-2"},null,8,["soc"]),e.chargepoint.isSocManual?(se(),Se("i",{key:0,class:"fa-solid fa-sm fas fa-edit",style:{color:"var(--color-bg)"},onClick:_[1]||(_[1]=w=>m())})):Me("",!0),e.chargepoint.isSocManual?Me("",!0):(se(),Se("i",{key:1,type:"button",class:Qe(["fa-solid fa-sm",e.chargepoint.waitingForSoc?"fa-spinner fa-spin":"fa-sync"]),onClick:v},null,2))]),_:1},8,["bgcolor"])):Me("",!0)]),o.value?(se(),Se("div",A6,[_[9]||(_[9]=U("span",{class:"changeCarTitle mb-2"},"Fahrzeug wechseln:",-1)),we(jt,{modelValue:le(r).connectedVehicle,"onUpdate:modelValue":[_[2]||(_[2]=w=>le(r).connectedVehicle=w),_[3]||(_[3]=w=>o.value=!1)],modelModifiers:{number:!0},options:d.value.map(w=>[w.name,w.id])},null,8,["modelValue","options"])])):Me("",!0),U("div",I6,[we(GE,{id:"chargemode-"+e.chargepoint.name,modelValue:a.value,"onUpdate:modelValue":_[4]||(_[4]=w=>a.value=w),class:"chargemodes mt-3 mb-3",options:Object.keys(le(zt)).map(w=>({text:le(zt)[w].name,value:w,color:le(zt)[w].color,icon:le(zt)[w].icon,active:le(zt)[w].mode==e.chargepoint.chargeMode}))},null,8,["id","modelValue","options"]),e.chargepoint.power>0?(se(),De(S6,{key:0,chargepoint:e.chargepoint,"full-width":t.fullWidth},null,8,["chargepoint","full-width"])):Me("",!0),we(lt,{heading:"letzte Ladung:",class:"grid-col-4 grid-left"},{default:Ae(()=>[we($n,{"watt-h":Math.max(e.chargepoint.chargedSincePlugged,0)},null,8,["watt-h"])]),_:1}),we(lt,{heading:"gel. Reichw.:",class:"grid-col-4"},{default:Ae(()=>[Ke($e(s.value),1)]),_:1}),e.chargepoint.isSocConfigured?(se(),De(lt,{key:1,heading:"Reichweite:",class:"grid-col-4 grid-right"},{default:Ae(()=>[Ke($e(le(rt)[t.chargepoint.connectedVehicle]?Math.round(le(rt)[t.chargepoint.connectedVehicle].range):0)+" km ",1)]),_:1})):Me("",!0),n.value?(se(),Se("div",C6,[_[10]||(_[10]=U("span",{class:"d-flex m-1 p-0 socEditTitle"},"Ladestand einstellen:",-1)),U("span",M6,[U("span",null,[we(Ot,{id:"manualSoc",modelValue:u.value,"onUpdate:modelValue":_[5]||(_[5]=w=>u.value=w),min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])])]),U("span",{type:"button",class:"fa-solid d-flex fa-lg me-2 mb-3 align-self-end fa-circle-check",onClick:g})])):Me("",!0),le(mt).active?(se(),Se("hr",k6)):Me("",!0),le(mt).active?(se(),De(lt,{key:4,heading:"Strompreis:",class:"grid-col-4 grid-left"},{default:Ae(()=>[U("span",{style:ot(f.value)},$e(le(mt).etCurrentPriceString),5)]),_:1})):Me("",!0),le(r).etActive?(se(),De(lt,{key:5,heading:"max. Preis:",class:"grid-col-4"},{default:Ae(()=>[U("span",{type:"button",onClick:_[6]||(_[6]=w=>i.value=!i.value)},[Ke($e(t.chargepoint.etActive?(Math.round(t.chargepoint.etMaxPrice*10)/10).toFixed(1)+y.value:"-")+" ",1),t.chargepoint.etActive?(se(),Se("i",P6)):Me("",!0)])]),_:1})):Me("",!0),i.value?(se(),Se("div",{key:6,id:"priceChartInline"+t.chargepoint.id,class:"d-flex flex-column rounded priceEditor grid-col-12"},[le(rt)[t.chargepoint.connectedVehicle]!=null?(se(),De(oT,{key:0,chargepoint:t.chargepoint},null,8,["chargepoint"])):Me("",!0),U("span",{class:"d-flex ms-2 my-4 pe-3 pt-1 d-flex align-self-end",style:ot(p.value),onClick:_[7]||(_[7]=w=>i.value=!1)},[..._[11]||(_[11]=[U("span",{type:"button",class:"d-flex fa-solid fa-lg ps-1 fa-circle-check"},null,-1)])],4)],8,O6)):Me("",!0)])],64))}}),R6=Xe(L6,[["__scopeId","data-v-9f39aae0"]]),N6={class:"d-flex justify-content-center align-items-center"},$6={key:0,class:"WbBadge rounded-pill errorWbBadge ms-3"},D6={key:0},B6={key:1,class:"row m-0 mt-0 p-0"},F6={class:"col m-0 p-0"},U6={class:"mb-3"},j6=We({__name:"CPChargePoint",props:{chargepoint:{},fullWidth:{type:Boolean}},setup(e){const t=e,r=et(t.chargepoint),n=et(!1),i=_e(()=>t.chargepoint.isLocked?"Gesperrt":t.chargepoint.isCharging?"Lädt":t.chargepoint.isPluggedIn?"Bereit":"Frei"),o=_e(()=>t.chargepoint.isLocked?"var(--color-evu)":t.chargepoint.isCharging?"var(--color-charging)":t.chargepoint.isPluggedIn?"var(--color-battery)":"var(--color-axis)"),a=_e(()=>{let u="";return t.chargepoint.isLocked?u="fa-lock":t.chargepoint.isCharging?u=" fa-bolt":t.chargepoint.isPluggedIn&&(u="fa-plug"),"fa "+u}),s=_e(()=>({color:t.chargepoint.color}));function l(){n.value=!n.value}return(u,c)=>n.value?(se(),De(mn,{key:1,"full-width":t.fullWidth},{title:Ae(()=>[U("span",{style:ot(s.value),onClick:c[3]||(c[3]=f=>n.value=!n.value)},[c[8]||(c[8]=U("span",{class:"fas fa-gear"}," ",-1)),Ke(" Einstellungen "+$e(t.chargepoint.name),1)],4)]),buttons:Ae(()=>[U("span",{class:"ms-2 pt-1",onClick:c[4]||(c[4]=f=>n.value=!n.value)},[...c[9]||(c[9]=[U("span",{class:"fa-solid fa-lg ps-1 fa-circle-check"},null,-1)])])]),default:Ae(()=>[e.chargepoint!=null?(se(),De(Lg,{key:0,chargepoint:e.chargepoint},null,8,["chargepoint"])):Me("",!0),U("button",{type:"button",class:"close-config-button btn ms-2 pt-1",onClick:c[5]||(c[5]=f=>n.value=!n.value)}," OK ")]),_:1},8,["full-width"])):(se(),De(ul,{key:0,"variable-width":!0,"full-width":t.fullWidth},{title:Ae(()=>[U("span",N6,[U("span",{style:ot(s.value),onClick:c[0]||(c[0]=f=>n.value=!n.value)},[c[6]||(c[6]=U("span",{class:"fa-solid fa-charging-station"}," ",-1)),Ke(" "+$e(t.chargepoint.name),1)],4),r.value.faultState==2?(se(),Se("span",$6,"Fehler")):Me("",!0)])]),buttons:Ae(()=>[U("span",{type:"button",class:"ms-2 ps-1 pt-1",onClick:c[1]||(c[1]=f=>l())},[...c[7]||(c[7]=[U("span",{class:"fa-solid fa-lg ps-1 fa-ellipsis-vertical"},null,-1)])])]),footer:Ae(()=>[U("div",U6,[n.value?Me("",!0):(se(),De(R6,{key:0,chargepoint:t.chargepoint,"full-width":t.fullWidth},null,8,["chargepoint","full-width"]))])]),default:Ae(()=>[n.value?Me("",!0):(se(),Se("div",D6,[U("div",{class:"grid12",onClick:c[2]||(c[2]=f=>n.value=!n.value)},[we(lt,{heading:"Status:",class:"grid-col-4 grid-left"},{default:Ae(()=>[U("span",{style:ot({color:o.value})},[U("i",{class:Qe(a.value)},null,2),Ke(" "+$e(i.value),1)],4)]),_:1}),we(lt,{heading:"Geladen:",class:"grid-col-4 grid-left"},{default:Ae(()=>[we($n,{"watt-h":e.chargepoint.dailyYield},null,8,["watt-h"])]),_:1})])])),n.value?(se(),Se("div",B6,[U("div",F6,[e.chargepoint!=null?(se(),De(Lg,{key:0,chargepoint:e.chargepoint},null,8,["chargepoint"])):Me("",!0)])])):Me("",!0)]),_:1},8,["full-width"]))}}),V6=Xe(j6,[["__scopeId","data-v-2020b9b7"]]);function $_(e){return e!==null&&typeof e=="object"&&"constructor"in e&&e.constructor===Object}function hy(e={},t={}){const r=["__proto__","constructor","prototype"];Object.keys(t).filter(n=>r.indexOf(n)<0).forEach(n=>{typeof e[n]>"u"?e[n]=t[n]:$_(t[n])&&$_(e[n])&&Object.keys(t[n]).length>0&&hy(e[n],t[n])})}const sT={body:{},addEventListener(){},removeEventListener(){},activeElement:{blur(){},nodeName:""},querySelector(){return null},querySelectorAll(){return[]},getElementById(){return null},createEvent(){return{initEvent(){}}},createElement(){return{children:[],childNodes:[],style:{},setAttribute(){},getElementsByTagName(){return[]}}},createElementNS(){return{}},importNode(){return null},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""}};function qt(){const e=typeof document<"u"?document:{};return hy(e,sT),e}const W6={document:sT,navigator:{userAgent:""},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""},history:{replaceState(){},pushState(){},go(){},back(){}},CustomEvent:function(){return this},addEventListener(){},removeEventListener(){},getComputedStyle(){return{getPropertyValue(){return""}}},Image(){},Date(){},screen:{},setTimeout(){},clearTimeout(){},matchMedia(){return{}},requestAnimationFrame(e){return typeof setTimeout>"u"?(e(),null):setTimeout(e,0)},cancelAnimationFrame(e){typeof setTimeout>"u"||clearTimeout(e)}};function Mt(){const e=typeof window<"u"?window:{};return hy(e,W6),e}function Fi(e=""){return e.trim().split(" ").filter(t=>!!t.trim())}function z6(e){const t=e;Object.keys(t).forEach(r=>{try{t[r]=null}catch{}try{delete t[r]}catch{}})}function Ds(e,t=0){return setTimeout(e,t)}function Qr(){return Date.now()}function H6(e){const t=Mt();let r;return t.getComputedStyle&&(r=t.getComputedStyle(e,null)),!r&&e.currentStyle&&(r=e.currentStyle),r||(r=e.style),r}function Rg(e,t="x"){const r=Mt();let n,i,o;const a=H6(e);return r.WebKitCSSMatrix?(i=a.transform||a.webkitTransform,i.split(",").length>6&&(i=i.split(", ").map(s=>s.replace(",",".")).join(", ")),o=new r.WebKitCSSMatrix(i==="none"?"":i)):(o=a.MozTransform||a.OTransform||a.MsTransform||a.msTransform||a.transform||a.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),n=o.toString().split(",")),t==="x"&&(r.WebKitCSSMatrix?i=o.m41:n.length===16?i=parseFloat(n[12]):i=parseFloat(n[4])),t==="y"&&(r.WebKitCSSMatrix?i=o.m42:n.length===16?i=parseFloat(n[13]):i=parseFloat(n[5])),i||0}function ba(e){return typeof e=="object"&&e!==null&&e.constructor&&Object.prototype.toString.call(e).slice(8,-1)==="Object"}function q6(e){return typeof window<"u"&&typeof window.HTMLElement<"u"?e instanceof HTMLElement:e&&(e.nodeType===1||e.nodeType===11)}function Nr(...e){const t=Object(e[0]);for(let r=1;ro!=="__proto__"&&o!=="constructor"&&o!=="prototype");for(let o=0,a=i.length;oi?"next":"prev",u=(f,d)=>l==="next"&&f>=d||l==="prev"&&f<=d,c=()=>{a=new Date().getTime(),o===null&&(o=a);const f=Math.max(Math.min((a-o)/s,1),0),d=.5-Math.cos(f*Math.PI)/2;let h=i+d*(t-i);if(u(h,t)&&(h=t),e.wrapperEl.scrollTo({[r]:h}),u(h,t)){e.wrapperEl.style.overflow="hidden",e.wrapperEl.style.scrollSnapType="",setTimeout(()=>{e.wrapperEl.style.overflow="",e.wrapperEl.scrollTo({[r]:h})}),n.cancelAnimationFrame(e.cssModeFrameID);return}e.cssModeFrameID=n.requestAnimationFrame(c)};c()}function Ko(e){return e.querySelector(".swiper-slide-transform")||e.shadowRoot&&e.shadowRoot.querySelector(".swiper-slide-transform")||e}function er(e,t=""){const r=Mt(),n=[...e.children];return r.HTMLSlotElement&&e instanceof HTMLSlotElement&&n.push(...e.assignedElements()),t?n.filter(i=>i.matches(t)):n}function G6(e,t){const r=[t];for(;r.length>0;){const n=r.shift();if(e===n)return!0;r.push(...n.children,...n.shadowRoot?n.shadowRoot.children:[],...n.assignedElements?n.assignedElements():[])}}function Y6(e,t){const r=Mt();let n=t.contains(e);return!n&&r.HTMLSlotElement&&t instanceof HTMLSlotElement&&(n=[...t.assignedElements()].includes(e),n||(n=G6(e,t))),n}function mc(e){try{console.warn(e);return}catch{}}function Br(e,t=[]){const r=document.createElement(e);return r.classList.add(...Array.isArray(t)?t:Fi(t)),r}function yc(e){const t=Mt(),r=qt(),n=e.getBoundingClientRect(),i=r.body,o=e.clientTop||i.clientTop||0,a=e.clientLeft||i.clientLeft||0,s=e===t?t.scrollY:e.scrollTop,l=e===t?t.scrollX:e.scrollLeft;return{top:n.top+s-o,left:n.left+l-a}}function K6(e,t){const r=[];for(;e.previousElementSibling;){const n=e.previousElementSibling;t?n.matches(t)&&r.push(n):r.push(n),e=n}return r}function X6(e,t){const r=[];for(;e.nextElementSibling;){const n=e.nextElementSibling;t?n.matches(t)&&r.push(n):r.push(n),e=n}return r}function Wi(e,t){return Mt().getComputedStyle(e,null).getPropertyValue(t)}function Ka(e){let t=e,r;if(t){for(r=0;(t=t.previousSibling)!==null;)t.nodeType===1&&(r+=1);return r}}function ko(e,t){const r=[];let n=e.parentElement;for(;n;)t?n.matches(t)&&r.push(n):r.push(n),n=n.parentElement;return r}function La(e,t){function r(n){n.target===e&&(t.call(e,n),e.removeEventListener("transitionend",r))}t&&e.addEventListener("transitionend",r)}function Ng(e,t,r){const n=Mt();return e[t==="width"?"offsetWidth":"offsetHeight"]+parseFloat(n.getComputedStyle(e,null).getPropertyValue(t==="width"?"margin-right":"margin-top"))+parseFloat(n.getComputedStyle(e,null).getPropertyValue(t==="width"?"margin-left":"margin-bottom"))}function st(e){return(Array.isArray(e)?e:[e]).filter(t=>!!t)}function af(e){return t=>Math.abs(t)>0&&e.browser&&e.browser.need3dFix&&Math.abs(t)%90===0?t+.001:t}function zr(e,t=""){typeof trustedTypes<"u"?e.innerHTML=trustedTypes.createPolicy("html",{createHTML:r=>r}).createHTML(t):e.innerHTML=t}let Dd;function Q6(){const e=Mt(),t=qt();return{smoothScroll:t.documentElement&&t.documentElement.style&&"scrollBehavior"in t.documentElement.style,touch:!!("ontouchstart"in e||e.DocumentTouch&&t instanceof e.DocumentTouch)}}function lT(){return Dd||(Dd=Q6()),Dd}let Bd;function J6({userAgent:e}={}){const t=lT(),r=Mt(),n=r.navigator.platform,i=e||r.navigator.userAgent,o={ios:!1,android:!1},a=r.screen.width,s=r.screen.height,l=i.match(/(Android);?[\s\/]+([\d.]+)?/);let u=i.match(/(iPad)(?!\1).*OS\s([\d_]+)/);const c=i.match(/(iPod)(.*OS\s([\d_]+))?/),f=!u&&i.match(/(iPhone\sOS|iOS)\s([\d_]+)/),d=n==="Win32";let h=n==="MacIntel";const p=["1024x1366","1366x1024","834x1194","1194x834","834x1112","1112x834","768x1024","1024x768","820x1180","1180x820","810x1080","1080x810"];return!u&&h&&t.touch&&p.indexOf(`${a}x${s}`)>=0&&(u=i.match(/(Version)\/([\d.]+)/),u||(u=[0,1,"13_0_0"]),h=!1),l&&!d&&(o.os="android",o.android=!0),(u||f||c)&&(o.os="ios",o.ios=!0),o}function uT(e={}){return Bd||(Bd=J6(e)),Bd}let Fd;function Z6(){const e=Mt(),t=uT();let r=!1;function n(){const s=e.navigator.userAgent.toLowerCase();return s.indexOf("safari")>=0&&s.indexOf("chrome")<0&&s.indexOf("android")<0}if(n()){const s=String(e.navigator.userAgent);if(s.includes("Version/")){const[l,u]=s.split("Version/")[1].split(" ")[0].split(".").map(c=>Number(c));r=l<16||l===16&&u<2}}const i=/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(e.navigator.userAgent),o=n(),a=o||i&&t.ios;return{isSafari:r||o,needPerspectiveFix:r,need3dFix:a,isWebView:i}}function cT(){return Fd||(Fd=Z6()),Fd}function ez({swiper:e,on:t,emit:r}){const n=Mt();let i=null,o=null;const a=()=>{!e||e.destroyed||!e.initialized||(r("beforeResize"),r("resize"))},s=()=>{!e||e.destroyed||!e.initialized||(i=new ResizeObserver(c=>{o=n.requestAnimationFrame(()=>{const{width:f,height:d}=e;let h=f,p=d;c.forEach(({contentBoxSize:y,contentRect:v,target:g})=>{g&&g!==e.el||(h=v?v.width:(y[0]||y).inlineSize,p=v?v.height:(y[0]||y).blockSize)}),(h!==f||p!==d)&&a()})}),i.observe(e.el))},l=()=>{o&&n.cancelAnimationFrame(o),i&&i.unobserve&&e.el&&(i.unobserve(e.el),i=null)},u=()=>{!e||e.destroyed||!e.initialized||r("orientationchange")};t("init",()=>{if(e.params.resizeObserver&&typeof n.ResizeObserver<"u"){s();return}n.addEventListener("resize",a),n.addEventListener("orientationchange",u)}),t("destroy",()=>{l(),n.removeEventListener("resize",a),n.removeEventListener("orientationchange",u)})}function tz({swiper:e,extendParams:t,on:r,emit:n}){const i=[],o=Mt(),a=(u,c={})=>{const f=o.MutationObserver||o.WebkitMutationObserver,d=new f(h=>{if(e.__preventObserver__)return;if(h.length===1){n("observerUpdate",h[0]);return}const p=function(){n("observerUpdate",h[0])};o.requestAnimationFrame?o.requestAnimationFrame(p):o.setTimeout(p,0)});d.observe(u,{attributes:typeof c.attributes>"u"?!0:c.attributes,childList:e.isElement||(typeof c.childList>"u"?!0:c).childList,characterData:typeof c.characterData>"u"?!0:c.characterData}),i.push(d)},s=()=>{if(e.params.observer){if(e.params.observeParents){const u=ko(e.hostEl);for(let c=0;c{i.forEach(u=>{u.disconnect()}),i.splice(0,i.length)};t({observer:!1,observeParents:!1,observeSlideChildren:!1}),r("init",s),r("destroy",l)}var rz={on(e,t,r){const n=this;if(!n.eventsListeners||n.destroyed||typeof t!="function")return n;const i=r?"unshift":"push";return e.split(" ").forEach(o=>{n.eventsListeners[o]||(n.eventsListeners[o]=[]),n.eventsListeners[o][i](t)}),n},once(e,t,r){const n=this;if(!n.eventsListeners||n.destroyed||typeof t!="function")return n;function i(...o){n.off(e,i),i.__emitterProxy&&delete i.__emitterProxy,t.apply(n,o)}return i.__emitterProxy=t,n.on(e,i,r)},onAny(e,t){const r=this;if(!r.eventsListeners||r.destroyed||typeof e!="function")return r;const n=t?"unshift":"push";return r.eventsAnyListeners.indexOf(e)<0&&r.eventsAnyListeners[n](e),r},offAny(e){const t=this;if(!t.eventsListeners||t.destroyed||!t.eventsAnyListeners)return t;const r=t.eventsAnyListeners.indexOf(e);return r>=0&&t.eventsAnyListeners.splice(r,1),t},off(e,t){const r=this;return!r.eventsListeners||r.destroyed||!r.eventsListeners||e.split(" ").forEach(n=>{typeof t>"u"?r.eventsListeners[n]=[]:r.eventsListeners[n]&&r.eventsListeners[n].forEach((i,o)=>{(i===t||i.__emitterProxy&&i.__emitterProxy===t)&&r.eventsListeners[n].splice(o,1)})}),r},emit(...e){const t=this;if(!t.eventsListeners||t.destroyed||!t.eventsListeners)return t;let r,n,i;return typeof e[0]=="string"||Array.isArray(e[0])?(r=e[0],n=e.slice(1,e.length),i=t):(r=e[0].events,n=e[0].data,i=e[0].context||t),n.unshift(i),(Array.isArray(r)?r:r.split(" ")).forEach(a=>{t.eventsAnyListeners&&t.eventsAnyListeners.length&&t.eventsAnyListeners.forEach(s=>{s.apply(i,[a,...n])}),t.eventsListeners&&t.eventsListeners[a]&&t.eventsListeners[a].forEach(s=>{s.apply(i,n)})}),t}};function nz(){const e=this;let t,r;const n=e.el;typeof e.params.width<"u"&&e.params.width!==null?t=e.params.width:t=n.clientWidth,typeof e.params.height<"u"&&e.params.height!==null?r=e.params.height:r=n.clientHeight,!(t===0&&e.isHorizontal()||r===0&&e.isVertical())&&(t=t-parseInt(Wi(n,"padding-left")||0,10)-parseInt(Wi(n,"padding-right")||0,10),r=r-parseInt(Wi(n,"padding-top")||0,10)-parseInt(Wi(n,"padding-bottom")||0,10),Number.isNaN(t)&&(t=0),Number.isNaN(r)&&(r=0),Object.assign(e,{width:t,height:r,size:e.isHorizontal()?t:r}))}function iz(){const e=this;function t(P,N){return parseFloat(P.getPropertyValue(e.getDirectionLabel(N))||0)}const r=e.params,{wrapperEl:n,slidesEl:i,rtlTranslate:o,wrongRTL:a}=e,s=e.virtual&&r.virtual.enabled,l=s?e.virtual.slides.length:e.slides.length,u=er(i,`.${e.params.slideClass}, swiper-slide`),c=s?e.virtual.slides.length:u.length;let f=[];const d=[],h=[];let p=r.slidesOffsetBefore;typeof p=="function"&&(p=r.slidesOffsetBefore.call(e));let y=r.slidesOffsetAfter;typeof y=="function"&&(y=r.slidesOffsetAfter.call(e));const v=e.snapGrid.length,g=e.slidesGrid.length,m=e.size-p-y;let b=r.spaceBetween,_=-p,w=0,E=0;if(typeof m>"u")return;typeof b=="string"&&b.indexOf("%")>=0?b=parseFloat(b.replace("%",""))/100*m:typeof b=="string"&&(b=parseFloat(b)),e.virtualSize=-b-p-y,u.forEach(P=>{o?P.style.marginLeft="":P.style.marginRight="",P.style.marginBottom="",P.style.marginTop=""}),r.centeredSlides&&r.cssMode&&(fo(n,"--swiper-centered-offset-before",""),fo(n,"--swiper-centered-offset-after","")),r.cssMode&&(fo(n,"--swiper-slides-offset-before",`${p}px`),fo(n,"--swiper-slides-offset-after",`${y}px`));const T=r.grid&&r.grid.rows>1&&e.grid;T?e.grid.initSlides(u):e.grid&&e.grid.unsetSlides();let C;const j=r.slidesPerView==="auto"&&r.breakpoints&&Object.keys(r.breakpoints).filter(P=>typeof r.breakpoints[P].slidesPerView<"u").length>0;for(let P=0;P=0&&(G+=h[q]+(q1&&(N||f.push(e.virtualSize-m))}if(s&&r.loop){const P=h[0]+b;if(r.slidesPerGroup>1){const N=Math.ceil((e.virtual.slidesBefore+e.virtual.slidesAfter)/r.slidesPerGroup),M=P*r.slidesPerGroup;for(let R=0;R!r.cssMode||r.loop?!0:M!==u.length-1).forEach(N=>{N.style[P]=`${b}px`})}if(r.centeredSlides&&r.centeredSlidesBounds){let P=0;h.forEach(M=>{P+=M+(b||0)}),P-=b;const N=P>m?P-m:0;f=f.map(M=>M<=0?-p:M>N?N+y:M)}if(r.centerInsufficientSlides){let P=0;if(h.forEach(N=>{P+=N+(b||0)}),P-=b,P{f[R]=M-N}),d.forEach((M,R)=>{d[R]=M+N})}}if(Object.assign(e,{slides:u,snapGrid:f,slidesGrid:d,slidesSizesGrid:h}),r.centeredSlides&&r.cssMode&&!r.centeredSlidesBounds){fo(n,"--swiper-centered-offset-before",`${-f[0]}px`),fo(n,"--swiper-centered-offset-after",`${e.size/2-h[h.length-1]/2}px`);const P=-e.snapGrid[0],N=-e.slidesGrid[0];e.snapGrid=e.snapGrid.map(M=>M+P),e.slidesGrid=e.slidesGrid.map(M=>M+N)}if(c!==l&&e.emit("slidesLengthChange"),f.length!==v&&(e.params.watchOverflow&&e.checkOverflow(),e.emit("snapGridLengthChange")),d.length!==g&&e.emit("slidesGridLengthChange"),r.watchSlidesProgress&&e.updateSlidesOffset(),e.emit("slidesUpdated"),!s&&!r.cssMode&&(r.effect==="slide"||r.effect==="fade")){const P=`${r.containerModifierClass}backface-hidden`,N=e.el.classList.contains(P);c<=r.maxBackfaceHiddenSlides?N||e.el.classList.add(P):N&&e.el.classList.remove(P)}}function oz(e){const t=this,r=[],n=t.virtual&&t.params.virtual.enabled;let i=0,o;typeof e=="number"?t.setTransition(e):e===!0&&t.setTransition(t.params.speed);const a=s=>n?t.slides[t.getSlideIndexByData(s)]:t.slides[s];if(t.params.slidesPerView!=="auto"&&t.params.slidesPerView>1)if(t.params.centeredSlides)(t.visibleSlides||[]).forEach(s=>{r.push(s)});else for(o=0;ot.slides.length&&!n)break;r.push(a(s))}else r.push(a(t.activeIndex));for(o=0;oi?s:i}(i||i===0)&&(t.wrapperEl.style.height=`${i}px`)}function sz(){const e=this,t=e.slides,r=e.isElement?e.isHorizontal()?e.wrapperEl.offsetLeft:e.wrapperEl.offsetTop:0;for(let n=0;n{t&&!e.classList.contains(r)?e.classList.add(r):!t&&e.classList.contains(r)&&e.classList.remove(r)};function az(e=this&&this.translate||0){const t=this,r=t.params,{slides:n,rtlTranslate:i,snapGrid:o}=t;if(n.length===0)return;typeof n[0].swiperSlideOffset>"u"&&t.updateSlidesOffset();let a=-e;i&&(a=e),t.visibleSlidesIndexes=[],t.visibleSlides=[];let s=r.spaceBetween;typeof s=="string"&&s.indexOf("%")>=0?s=parseFloat(s.replace("%",""))/100*t.size:typeof s=="string"&&(s=parseFloat(s));for(let l=0;l=0&&h<=t.size-t.slidesSizesGrid[l],v=h>=0&&h1&&p<=t.size||h<=0&&p>=t.size;v&&(t.visibleSlides.push(u),t.visibleSlidesIndexes.push(l)),D_(u,v,r.slideVisibleClass),D_(u,y,r.slideFullyVisibleClass),u.progress=i?-f:f,u.originalProgress=i?-d:d}}function lz(e){const t=this;if(typeof e>"u"){const c=t.rtlTranslate?-1:1;e=t&&t.translate&&t.translate*c||0}const r=t.params,n=t.maxTranslate()-t.minTranslate();let{progress:i,isBeginning:o,isEnd:a,progressLoop:s}=t;const l=o,u=a;if(n===0)i=0,o=!0,a=!0;else{i=(e-t.minTranslate())/n;const c=Math.abs(e-t.minTranslate())<1,f=Math.abs(e-t.maxTranslate())<1;o=c||i<=0,a=f||i>=1,c&&(i=0),f&&(i=1)}if(r.loop){const c=t.getSlideIndexByData(0),f=t.getSlideIndexByData(t.slides.length-1),d=t.slidesGrid[c],h=t.slidesGrid[f],p=t.slidesGrid[t.slidesGrid.length-1],y=Math.abs(e);y>=d?s=(y-d)/p:s=(y+p-h)/p,s>1&&(s-=1)}Object.assign(t,{progress:i,progressLoop:s,isBeginning:o,isEnd:a}),(r.watchSlidesProgress||r.centeredSlides&&r.autoHeight)&&t.updateSlidesProgress(e),o&&!l&&t.emit("reachBeginning toEdge"),a&&!u&&t.emit("reachEnd toEdge"),(l&&!o||u&&!a)&&t.emit("fromEdge"),t.emit("progress",i)}const Ud=(e,t,r)=>{t&&!e.classList.contains(r)?e.classList.add(r):!t&&e.classList.contains(r)&&e.classList.remove(r)};function uz(){const e=this,{slides:t,params:r,slidesEl:n,activeIndex:i}=e,o=e.virtual&&r.virtual.enabled,a=e.grid&&r.grid&&r.grid.rows>1,s=f=>er(n,`.${r.slideClass}${f}, swiper-slide${f}`)[0];let l,u,c;if(o)if(r.loop){let f=i-e.virtual.slidesBefore;f<0&&(f=e.virtual.slides.length+f),f>=e.virtual.slides.length&&(f-=e.virtual.slides.length),l=s(`[data-swiper-slide-index="${f}"]`)}else l=s(`[data-swiper-slide-index="${i}"]`);else a?(l=t.find(f=>f.column===i),c=t.find(f=>f.column===i+1),u=t.find(f=>f.column===i-1)):l=t[i];l&&(a||(c=X6(l,`.${r.slideClass}, swiper-slide`)[0],r.loop&&!c&&(c=t[0]),u=K6(l,`.${r.slideClass}, swiper-slide`)[0],r.loop&&!u===0&&(u=t[t.length-1]))),t.forEach(f=>{Ud(f,f===l,r.slideActiveClass),Ud(f,f===c,r.slideNextClass),Ud(f,f===u,r.slidePrevClass)}),e.emitSlidesClasses()}const Nu=(e,t)=>{if(!e||e.destroyed||!e.params)return;const r=()=>e.isElement?"swiper-slide":`.${e.params.slideClass}`,n=t.closest(r());if(n){let i=n.querySelector(`.${e.params.lazyPreloaderClass}`);!i&&e.isElement&&(n.shadowRoot?i=n.shadowRoot.querySelector(`.${e.params.lazyPreloaderClass}`):requestAnimationFrame(()=>{n.shadowRoot&&(i=n.shadowRoot.querySelector(`.${e.params.lazyPreloaderClass}`),i&&!i.lazyPreloaderManaged&&i.remove())})),i&&!i.lazyPreloaderManaged&&i.remove()}},jd=(e,t)=>{if(!e.slides[t])return;const r=e.slides[t].querySelector('[loading="lazy"]');r&&r.removeAttribute("loading")},$g=e=>{if(!e||e.destroyed||!e.params)return;let t=e.params.lazyPreloadPrevNext;const r=e.slides.length;if(!r||!t||t<0)return;t=Math.min(t,r);const n=e.params.slidesPerView==="auto"?e.slidesPerViewDynamic():Math.ceil(e.params.slidesPerView),i=e.activeIndex;if(e.params.grid&&e.params.grid.rows>1){const a=i,s=[a-t];s.push(...Array.from({length:t}).map((l,u)=>a+n+u)),e.slides.forEach((l,u)=>{s.includes(l.column)&&jd(e,u)});return}const o=i+n-1;if(e.params.rewind||e.params.loop)for(let a=i-t;a<=o+t;a+=1){const s=(a%r+r)%r;(so)&&jd(e,s)}else for(let a=Math.max(i-t,0);a<=Math.min(o+t,r-1);a+=1)a!==i&&(a>o||a=t[o]&&n=t[o]&&n=t[o]&&(i=o);return r.normalizeSlideIndex&&(i<0||typeof i>"u")&&(i=0),i}function fz(e){const t=this,r=t.rtlTranslate?t.translate:-t.translate,{snapGrid:n,params:i,activeIndex:o,realIndex:a,snapIndex:s}=t;let l=e,u;const c=h=>{let p=h-t.virtual.slidesBefore;return p<0&&(p=t.virtual.slides.length+p),p>=t.virtual.slides.length&&(p-=t.virtual.slides.length),p};if(typeof l>"u"&&(l=cz(t)),n.indexOf(r)>=0)u=n.indexOf(r);else{const h=Math.min(i.slidesPerGroupSkip,l);u=h+Math.floor((l-h)/i.slidesPerGroup)}if(u>=n.length&&(u=n.length-1),l===o&&!t.params.loop){u!==s&&(t.snapIndex=u,t.emit("snapIndexChange"));return}if(l===o&&t.params.loop&&t.virtual&&t.params.virtual.enabled){t.realIndex=c(l);return}const f=t.grid&&i.grid&&i.grid.rows>1;let d;if(t.virtual&&i.virtual.enabled)i.loop?d=c(l):d=l;else if(f){const h=t.slides.find(y=>y.column===l);let p=parseInt(h.getAttribute("data-swiper-slide-index"),10);Number.isNaN(p)&&(p=Math.max(t.slides.indexOf(h),0)),d=Math.floor(p/i.grid.rows)}else if(t.slides[l]){const h=t.slides[l].getAttribute("data-swiper-slide-index");h?d=parseInt(h,10):d=l}else d=l;Object.assign(t,{previousSnapIndex:s,snapIndex:u,previousRealIndex:a,realIndex:d,previousIndex:o,activeIndex:l}),t.initialized&&$g(t),t.emit("activeIndexChange"),t.emit("snapIndexChange"),(t.initialized||t.params.runCallbacksOnInit)&&(a!==d&&t.emit("realIndexChange"),t.emit("slideChange"))}function dz(e,t){const r=this,n=r.params;let i=e.closest(`.${n.slideClass}, swiper-slide`);!i&&r.isElement&&t&&t.length>1&&t.includes(e)&&[...t.slice(t.indexOf(e)+1,t.length)].forEach(s=>{!i&&s.matches&&s.matches(`.${n.slideClass}, swiper-slide`)&&(i=s)});let o=!1,a;if(i){for(let s=0;sl?c=l:n&&eo?a="next":i"u"&&(t=o.params.speed);const y=Math.min(o.params.slidesPerGroupSkip,a);let v=y+Math.floor((a-y)/o.params.slidesPerGroup);v>=l.length&&(v=l.length-1);const g=-l[v];if(s.normalizeSlideIndex)for(let T=0;T=j&&C=j&&C=j&&(a=T)}if(o.initialized&&a!==f&&(!o.allowSlideNext&&(d?g>o.translate&&g>o.minTranslate():go.translate&&g>o.maxTranslate()&&(f||0)!==a))return!1;a!==(c||0)&&r&&o.emit("beforeSlideChangeStart"),o.updateProgress(g);let m;a>f?m="next":a0?(o._cssModeVirtualInitialSet=!0,requestAnimationFrame(()=>{h[T?"scrollLeft":"scrollTop"]=C})):h[T?"scrollLeft":"scrollTop"]=C,b&&requestAnimationFrame(()=>{o.wrapperEl.style.scrollSnapType="",o._immediateVirtual=!1});else{if(!o.support.smoothScroll)return aT({swiper:o,targetPosition:C,side:T?"left":"top"}),!0;h.scrollTo({[T?"left":"top"]:C,behavior:"smooth"})}return!0}const E=cT().isSafari;return b&&!i&&E&&o.isElement&&o.virtual.update(!1,!1,a),o.setTransition(t),o.setTranslate(g),o.updateActiveIndex(a),o.updateSlidesClasses(),o.emit("beforeTransitionStart",t,n),o.transitionStart(r,m),t===0?o.transitionEnd(r,m):o.animating||(o.animating=!0,o.onSlideToWrapperTransitionEnd||(o.onSlideToWrapperTransitionEnd=function(C){!o||o.destroyed||C.target===this&&(o.wrapperEl.removeEventListener("transitionend",o.onSlideToWrapperTransitionEnd),o.onSlideToWrapperTransitionEnd=null,delete o.onSlideToWrapperTransitionEnd,o.transitionEnd(r,m))}),o.wrapperEl.addEventListener("transitionend",o.onSlideToWrapperTransitionEnd)),!0}function Tz(e=0,t,r=!0,n){typeof e=="string"&&(e=parseInt(e,10));const i=this;if(i.destroyed)return;typeof t>"u"&&(t=i.params.speed);const o=i.grid&&i.params.grid&&i.params.grid.rows>1;let a=e;if(i.params.loop)if(i.virtual&&i.params.virtual.enabled)a=a+i.virtual.slidesBefore;else{let s;if(o){const y=a*i.params.grid.rows;s=i.slides.find(v=>v.getAttribute("data-swiper-slide-index")*1===y).column}else s=i.getSlideIndexByData(a);const l=o?Math.ceil(i.slides.length/i.params.grid.rows):i.slides.length,{centeredSlides:u,slidesOffsetBefore:c,slidesOffsetAfter:f}=i.params,d=u||!!c||!!f;let h=i.params.slidesPerView;h==="auto"?h=i.slidesPerViewDynamic():(h=Math.ceil(parseFloat(i.params.slidesPerView,10)),d&&h%2===0&&(h=h+1));let p=l-sv.getAttribute("data-swiper-slide-index")*1===y).column}else a=i.getSlideIndexByData(a)}return requestAnimationFrame(()=>{i.slideTo(a,t,r,n)}),i}function Az(e,t=!0,r){const n=this,{enabled:i,params:o,animating:a}=n;if(!i||n.destroyed)return n;typeof e>"u"&&(e=n.params.speed);let s=o.slidesPerGroup;o.slidesPerView==="auto"&&o.slidesPerGroup===1&&o.slidesPerGroupAuto&&(s=Math.max(n.slidesPerViewDynamic("current",!0),1));const l=n.activeIndex{n.slideTo(n.activeIndex+l,e,t,r)}),!0}return o.rewind&&n.isEnd?n.slideTo(0,e,t,r):n.slideTo(n.activeIndex+l,e,t,r)}function Iz(e,t=!0,r){const n=this,{params:i,snapGrid:o,slidesGrid:a,rtlTranslate:s,enabled:l,animating:u}=n;if(!l||n.destroyed)return n;typeof e>"u"&&(e=n.params.speed);const c=n.virtual&&i.virtual.enabled;if(i.loop){if(u&&!c&&i.loopPreventsSliding)return!1;n.loopFix({direction:"prev"}),n._clientLeft=n.wrapperEl.clientLeft}const f=s?n.translate:-n.translate;function d(m){return m<0?-Math.floor(Math.abs(m)):Math.floor(m)}const h=d(f),p=o.map(m=>d(m)),y=i.freeMode&&i.freeMode.enabled;let v=o[p.indexOf(h)-1];if(typeof v>"u"&&(i.cssMode||y)){let m;o.forEach((b,_)=>{h>=b&&(m=_)}),typeof m<"u"&&(v=y?o[m]:o[m>0?m-1:m])}let g=0;if(typeof v<"u"&&(g=a.indexOf(v),g<0&&(g=n.activeIndex-1),i.slidesPerView==="auto"&&i.slidesPerGroup===1&&i.slidesPerGroupAuto&&(g=g-n.slidesPerViewDynamic("previous",!0)+1,g=Math.max(g,0))),i.rewind&&n.isBeginning){const m=n.params.virtual&&n.params.virtual.enabled&&n.virtual?n.virtual.slides.length-1:n.slides.length-1;return n.slideTo(m,e,t,r)}else if(i.loop&&n.activeIndex===0&&i.cssMode)return requestAnimationFrame(()=>{n.slideTo(g,e,t,r)}),!0;return n.slideTo(g,e,t,r)}function Cz(e,t=!0,r){const n=this;if(!n.destroyed)return typeof e>"u"&&(e=n.params.speed),n.slideTo(n.activeIndex,e,t,r)}function Mz(e,t=!0,r,n=.5){const i=this;if(i.destroyed)return;typeof e>"u"&&(e=i.params.speed);let o=i.activeIndex;const a=Math.min(i.params.slidesPerGroupSkip,o),s=a+Math.floor((o-a)/i.params.slidesPerGroup),l=i.rtlTranslate?i.translate:-i.translate;if(l>=i.snapGrid[s]){const u=i.snapGrid[s],c=i.snapGrid[s+1];l-u>(c-u)*n&&(o+=i.params.slidesPerGroup)}else{const u=i.snapGrid[s-1],c=i.snapGrid[s];l-u<=(c-u)*n&&(o-=i.params.slidesPerGroup)}return o=Math.max(o,0),o=Math.min(o,i.slidesGrid.length-1),i.slideTo(o,e,t,r)}function kz(){const e=this;if(e.destroyed)return;const{params:t,slidesEl:r}=e,n=t.slidesPerView==="auto"?e.slidesPerViewDynamic():t.slidesPerView;let i=e.getSlideIndexWhenGrid(e.clickedIndex),o;const a=e.isElement?"swiper-slide":`.${t.slideClass}`,s=e.grid&&e.params.grid&&e.params.grid.rows>1;if(t.loop){if(e.animating)return;o=parseInt(e.clickedSlide.getAttribute("data-swiper-slide-index"),10),t.centeredSlides?e.slideToLoop(o):i>(s?(e.slides.length-n)/2-(e.params.grid.rows-1):e.slides.length-n)?(e.loopFix(),i=e.getSlideIndex(er(r,`${a}[data-swiper-slide-index="${o}"]`)[0]),Ds(()=>{e.slideTo(i)})):e.slideTo(i)}else e.slideTo(i)}var Pz={slideTo:xz,slideToLoop:Tz,slideNext:Az,slidePrev:Iz,slideReset:Cz,slideToClosest:Mz,slideToClickedSlide:kz};function Oz(e,t){const r=this,{params:n,slidesEl:i}=r;if(!n.loop||r.virtual&&r.params.virtual.enabled)return;const o=()=>{er(i,`.${n.slideClass}, swiper-slide`).forEach((p,y)=>{p.setAttribute("data-swiper-slide-index",y)})},a=()=>{const h=er(i,`.${n.slideBlankClass}`);h.forEach(p=>{p.remove()}),h.length>0&&(r.recalcSlides(),r.updateSlides())},s=r.grid&&n.grid&&n.grid.rows>1;n.loopAddBlankSlides&&(n.slidesPerGroup>1||s)&&a();const l=n.slidesPerGroup*(s?n.grid.rows:1),u=r.slides.length%l!==0,c=s&&r.slides.length%n.grid.rows!==0,f=h=>{for(let p=0;p1;u.length"u"?i=l.getSlideIndex(u.find(B=>B.classList.contains(h.slideActiveClass))):N=i;const M=r==="next"||!r,R=r==="prev"||!r;let O=0,G=0;const z=(E?u[i].column:i)+(m&&typeof n>"u"?-b/2+.5:0);if(z=0;ie-=1)u[ie].column===$&&T.push(ie)}else T.push(j-ae-1)}}else if(z+b>j-w){G=Math.max(z-(j-w*2),_),P&&(G=Math.max(G,b-j+g+1));for(let B=0;B{$.column===ae&&C.push(ie)}):C.push(ae)}}if(l.__preventObserver__=!0,requestAnimationFrame(()=>{l.__preventObserver__=!1}),l.params.effect==="cards"&&u.length{u[B].swiperLoopMoveDOM=!0,d.prepend(u[B]),u[B].swiperLoopMoveDOM=!1}),M&&C.forEach(B=>{u[B].swiperLoopMoveDOM=!0,d.append(u[B]),u[B].swiperLoopMoveDOM=!1}),l.recalcSlides(),h.slidesPerView==="auto"?l.updateSlides():E&&(T.length>0&&R||C.length>0&&M)&&l.slides.forEach((B,ae)=>{l.grid.updateSlide(ae,B,l.slides)}),h.watchSlidesProgress&&l.updateSlidesOffset(),t){if(T.length>0&&R){if(typeof e>"u"){const B=l.slidesGrid[N],$=l.slidesGrid[N+O]-B;s?l.setTranslate(l.translate-$):(l.slideTo(N+Math.ceil(O),0,!1,!0),n&&(l.touchEventsData.startTranslate=l.touchEventsData.startTranslate-$,l.touchEventsData.currentTranslate=l.touchEventsData.currentTranslate-$))}else if(n){const B=E?T.length/h.grid.rows:T.length;l.slideTo(l.activeIndex+B,0,!1,!0),l.touchEventsData.currentTranslate=l.translate}}else if(C.length>0&&M)if(typeof e>"u"){const B=l.slidesGrid[N],$=l.slidesGrid[N-G]-B;s?l.setTranslate(l.translate-$):(l.slideTo(N-G,0,!1,!0),n&&(l.touchEventsData.startTranslate=l.touchEventsData.startTranslate-$,l.touchEventsData.currentTranslate=l.touchEventsData.currentTranslate-$))}else{const B=E?C.length/h.grid.rows:C.length;l.slideTo(l.activeIndex-B,0,!1,!0)}}if(l.allowSlidePrev=c,l.allowSlideNext=f,l.controller&&l.controller.control&&!a){const B={slideRealIndex:e,direction:r,setTranslate:n,activeSlideIndex:i,byController:!0};Array.isArray(l.controller.control)?l.controller.control.forEach(ae=>{!ae.destroyed&&ae.params.loop&&ae.loopFix({...B,slideTo:ae.params.slidesPerView===h.slidesPerView?t:!1})}):l.controller.control instanceof l.constructor&&l.controller.control.params.loop&&l.controller.control.loopFix({...B,slideTo:l.controller.control.params.slidesPerView===h.slidesPerView?t:!1})}l.emit("loopFix")}function Rz(){const e=this,{params:t,slidesEl:r}=e;if(!t.loop||!r||e.virtual&&e.params.virtual.enabled)return;e.recalcSlides();const n=[];e.slides.forEach(i=>{const o=typeof i.swiperSlideIndex>"u"?i.getAttribute("data-swiper-slide-index")*1:i.swiperSlideIndex;n[o]=i}),e.slides.forEach(i=>{i.removeAttribute("data-swiper-slide-index")}),n.forEach(i=>{r.append(i)}),e.recalcSlides(),e.slideTo(e.realIndex,0)}var Nz={loopCreate:Oz,loopFix:Lz,loopDestroy:Rz};function $z(e){const t=this;if(!t.params.simulateTouch||t.params.watchOverflow&&t.isLocked||t.params.cssMode)return;const r=t.params.touchEventsTarget==="container"?t.el:t.wrapperEl;t.isElement&&(t.__preventObserver__=!0),r.style.cursor="move",r.style.cursor=e?"grabbing":"grab",t.isElement&&requestAnimationFrame(()=>{t.__preventObserver__=!1})}function Dz(){const e=this;e.params.watchOverflow&&e.isLocked||e.params.cssMode||(e.isElement&&(e.__preventObserver__=!0),e[e.params.touchEventsTarget==="container"?"el":"wrapperEl"].style.cursor="",e.isElement&&requestAnimationFrame(()=>{e.__preventObserver__=!1}))}var Bz={setGrabCursor:$z,unsetGrabCursor:Dz};function Fz(e,t=this){function r(n){if(!n||n===qt()||n===Mt())return null;n.assignedSlot&&(n=n.assignedSlot);const i=n.closest(e);return!i&&!n.getRootNode?null:i||r(n.getRootNode().host)}return r(t)}function B_(e,t,r){const n=Mt(),{params:i}=e,o=i.edgeSwipeDetection,a=i.edgeSwipeThreshold;return o&&(r<=a||r>=n.innerWidth-a)?o==="prevent"?(t.preventDefault(),!0):!1:!0}function Uz(e){const t=this,r=qt();let n=e;n.originalEvent&&(n=n.originalEvent);const i=t.touchEventsData;if(n.type==="pointerdown"){if(i.pointerId!==null&&i.pointerId!==n.pointerId)return;i.pointerId=n.pointerId}else n.type==="touchstart"&&n.targetTouches.length===1&&(i.touchId=n.targetTouches[0].identifier);if(n.type==="touchstart"){B_(t,n,n.targetTouches[0].pageX);return}const{params:o,touches:a,enabled:s}=t;if(!s||!o.simulateTouch&&n.pointerType==="mouse"||t.animating&&o.preventInteractionOnTransition)return;!t.animating&&o.cssMode&&o.loop&&t.loopFix();let l=n.target;if(o.touchEventsTarget==="wrapper"&&!Y6(l,t.wrapperEl)||"which"in n&&n.which===3||"button"in n&&n.button>0||i.isTouched&&i.isMoved)return;const u=!!o.noSwipingClass&&o.noSwipingClass!=="",c=n.composedPath?n.composedPath():n.path;u&&n.target&&n.target.shadowRoot&&c&&(l=c[0]);const f=o.noSwipingSelector?o.noSwipingSelector:`.${o.noSwipingClass}`,d=!!(n.target&&n.target.shadowRoot);if(o.noSwiping&&(d?Fz(f,l):l.closest(f))){t.allowClick=!0;return}if(o.swipeHandler&&!l.closest(o.swipeHandler))return;a.currentX=n.pageX,a.currentY=n.pageY;const h=a.currentX,p=a.currentY;if(!B_(t,n,h))return;Object.assign(i,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),a.startX=h,a.startY=p,i.touchStartTime=Qr(),t.allowClick=!0,t.updateSize(),t.swipeDirection=void 0,o.threshold>0&&(i.allowThresholdMove=!1);let y=!0;l.matches(i.focusableElements)&&(y=!1,l.nodeName==="SELECT"&&(i.isTouched=!1)),r.activeElement&&r.activeElement.matches(i.focusableElements)&&r.activeElement!==l&&(n.pointerType==="mouse"||n.pointerType!=="mouse"&&!l.matches(i.focusableElements))&&r.activeElement.blur();const v=y&&t.allowTouchMove&&o.touchStartPreventDefault;(o.touchStartForcePreventDefault||v)&&!l.isContentEditable&&n.preventDefault(),o.freeMode&&o.freeMode.enabled&&t.freeMode&&t.animating&&!o.cssMode&&t.freeMode.onTouchStart(),t.emit("touchStart",n)}function jz(e){const t=qt(),r=this,n=r.touchEventsData,{params:i,touches:o,rtlTranslate:a,enabled:s}=r;if(!s||!i.simulateTouch&&e.pointerType==="mouse")return;let l=e;if(l.originalEvent&&(l=l.originalEvent),l.type==="pointermove"&&(n.touchId!==null||l.pointerId!==n.pointerId))return;let u;if(l.type==="touchmove"){if(u=[...l.changedTouches].find(w=>w.identifier===n.touchId),!u||u.identifier!==n.touchId)return}else u=l;if(!n.isTouched){n.startMoving&&n.isScrolling&&r.emit("touchMoveOpposite",l);return}const c=u.pageX,f=u.pageY;if(l.preventedByNestedSwiper){o.startX=c,o.startY=f;return}if(!r.allowTouchMove){l.target.matches(n.focusableElements)||(r.allowClick=!1),n.isTouched&&(Object.assign(o,{startX:c,startY:f,currentX:c,currentY:f}),n.touchStartTime=Qr());return}if(i.touchReleaseOnEdges&&!i.loop)if(r.isVertical()){if(fo.startY&&r.translate>=r.minTranslate()){n.isTouched=!1,n.isMoved=!1;return}}else{if(a&&(c>o.startX&&-r.translate<=r.maxTranslate()||c=r.minTranslate()))return;if(!a&&(co.startX&&r.translate>=r.minTranslate()))return}if(t.activeElement&&t.activeElement.matches(n.focusableElements)&&t.activeElement!==l.target&&l.pointerType!=="mouse"&&t.activeElement.blur(),t.activeElement&&l.target===t.activeElement&&l.target.matches(n.focusableElements)){n.isMoved=!0,r.allowClick=!1;return}n.allowTouchCallbacks&&r.emit("touchMove",l),o.previousX=o.currentX,o.previousY=o.currentY,o.currentX=c,o.currentY=f;const d=o.currentX-o.startX,h=o.currentY-o.startY;if(r.params.threshold&&Math.sqrt(d**2+h**2)"u"){let w;r.isHorizontal()&&o.currentY===o.startY||r.isVertical()&&o.currentX===o.startX?n.isScrolling=!1:d*d+h*h>=25&&(w=Math.atan2(Math.abs(h),Math.abs(d))*180/Math.PI,n.isScrolling=r.isHorizontal()?w>i.touchAngle:90-w>i.touchAngle)}if(n.isScrolling&&r.emit("touchMoveOpposite",l),typeof n.startMoving>"u"&&(o.currentX!==o.startX||o.currentY!==o.startY)&&(n.startMoving=!0),n.isScrolling||l.type==="touchmove"&&n.preventTouchMoveFromPointerMove){n.isTouched=!1;return}if(!n.startMoving)return;r.allowClick=!1,!i.cssMode&&l.cancelable&&l.preventDefault(),i.touchMoveStopPropagation&&!i.nested&&l.stopPropagation();let p=r.isHorizontal()?d:h,y=r.isHorizontal()?o.currentX-o.previousX:o.currentY-o.previousY;i.oneWayMovement&&(p=Math.abs(p)*(a?1:-1),y=Math.abs(y)*(a?1:-1)),o.diff=p,p*=i.touchRatio,a&&(p=-p,y=-y);const v=r.touchesDirection;r.swipeDirection=p>0?"prev":"next",r.touchesDirection=y>0?"prev":"next";const g=r.params.loop&&!i.cssMode,m=r.touchesDirection==="next"&&r.allowSlideNext||r.touchesDirection==="prev"&&r.allowSlidePrev;if(!n.isMoved){if(g&&m&&r.loopFix({direction:r.swipeDirection}),n.startTranslate=r.getTranslate(),r.setTransition(0),r.animating){const w=new window.CustomEvent("transitionend",{bubbles:!0,cancelable:!0,detail:{bySwiperTouchMove:!0}});r.wrapperEl.dispatchEvent(w)}n.allowMomentumBounce=!1,i.grabCursor&&(r.allowSlideNext===!0||r.allowSlidePrev===!0)&&r.setGrabCursor(!0),r.emit("sliderFirstMove",l)}if(new Date().getTime(),i._loopSwapReset!==!1&&n.isMoved&&n.allowThresholdMove&&v!==r.touchesDirection&&g&&m&&Math.abs(p)>=1){Object.assign(o,{startX:c,startY:f,currentX:c,currentY:f,startTranslate:n.currentTranslate}),n.loopSwapReset=!0,n.startTranslate=n.currentTranslate;return}r.emit("sliderMove",l),n.isMoved=!0,n.currentTranslate=p+n.startTranslate;let b=!0,_=i.resistanceRatio;if(i.touchReleaseOnEdges&&(_=0),p>0?(g&&m&&n.allowThresholdMove&&n.currentTranslate>(i.centeredSlides?r.minTranslate()-r.slidesSizesGrid[r.activeIndex+1]-(i.slidesPerView!=="auto"&&r.slides.length-i.slidesPerView>=2?r.slidesSizesGrid[r.activeIndex+1]+r.params.spaceBetween:0)-r.params.spaceBetween:r.minTranslate())&&r.loopFix({direction:"prev",setTranslate:!0,activeSlideIndex:0}),n.currentTranslate>r.minTranslate()&&(b=!1,i.resistance&&(n.currentTranslate=r.minTranslate()-1+(-r.minTranslate()+n.startTranslate+p)**_))):p<0&&(g&&m&&n.allowThresholdMove&&n.currentTranslate<(i.centeredSlides?r.maxTranslate()+r.slidesSizesGrid[r.slidesSizesGrid.length-1]+r.params.spaceBetween+(i.slidesPerView!=="auto"&&r.slides.length-i.slidesPerView>=2?r.slidesSizesGrid[r.slidesSizesGrid.length-1]+r.params.spaceBetween:0):r.maxTranslate())&&r.loopFix({direction:"next",setTranslate:!0,activeSlideIndex:r.slides.length-(i.slidesPerView==="auto"?r.slidesPerViewDynamic():Math.ceil(parseFloat(i.slidesPerView,10)))}),n.currentTranslaten.startTranslate&&(n.currentTranslate=n.startTranslate),!r.allowSlidePrev&&!r.allowSlideNext&&(n.currentTranslate=n.startTranslate),i.threshold>0)if(Math.abs(p)>i.threshold||n.allowThresholdMove){if(!n.allowThresholdMove){n.allowThresholdMove=!0,o.startX=o.currentX,o.startY=o.currentY,n.currentTranslate=n.startTranslate,o.diff=r.isHorizontal()?o.currentX-o.startX:o.currentY-o.startY;return}}else{n.currentTranslate=n.startTranslate;return}!i.followFinger||i.cssMode||((i.freeMode&&i.freeMode.enabled&&r.freeMode||i.watchSlidesProgress)&&(r.updateActiveIndex(),r.updateSlidesClasses()),i.freeMode&&i.freeMode.enabled&&r.freeMode&&r.freeMode.onTouchMove(),r.updateProgress(n.currentTranslate),r.setTranslate(n.currentTranslate))}function Vz(e){const t=this,r=t.touchEventsData;let n=e;n.originalEvent&&(n=n.originalEvent);let i;if(n.type==="touchend"||n.type==="touchcancel"){if(i=[...n.changedTouches].find(w=>w.identifier===r.touchId),!i||i.identifier!==r.touchId)return}else{if(r.touchId!==null||n.pointerId!==r.pointerId)return;i=n}if(["pointercancel","pointerout","pointerleave","contextmenu"].includes(n.type)&&!(["pointercancel","contextmenu"].includes(n.type)&&(t.browser.isSafari||t.browser.isWebView)))return;r.pointerId=null,r.touchId=null;const{params:a,touches:s,rtlTranslate:l,slidesGrid:u,enabled:c}=t;if(!c||!a.simulateTouch&&n.pointerType==="mouse")return;if(r.allowTouchCallbacks&&t.emit("touchEnd",n),r.allowTouchCallbacks=!1,!r.isTouched){r.isMoved&&a.grabCursor&&t.setGrabCursor(!1),r.isMoved=!1,r.startMoving=!1;return}a.grabCursor&&r.isMoved&&r.isTouched&&(t.allowSlideNext===!0||t.allowSlidePrev===!0)&&t.setGrabCursor(!1);const f=Qr(),d=f-r.touchStartTime;if(t.allowClick){const w=n.path||n.composedPath&&n.composedPath();t.updateClickedSlide(w&&w[0]||n.target,w),t.emit("tap click",n),d<300&&f-r.lastClickTime<300&&t.emit("doubleTap doubleClick",n)}if(r.lastClickTime=Qr(),Ds(()=>{t.destroyed||(t.allowClick=!0)}),!r.isTouched||!r.isMoved||!t.swipeDirection||s.diff===0&&!r.loopSwapReset||r.currentTranslate===r.startTranslate&&!r.loopSwapReset){r.isTouched=!1,r.isMoved=!1,r.startMoving=!1;return}r.isTouched=!1,r.isMoved=!1,r.startMoving=!1;let h;if(a.followFinger?h=l?t.translate:-t.translate:h=-r.currentTranslate,a.cssMode)return;if(a.freeMode&&a.freeMode.enabled){t.freeMode.onTouchEnd({currentPos:h});return}const p=h>=-t.maxTranslate()&&!t.params.loop;let y=0,v=t.slidesSizesGrid[0];for(let w=0;w=u[w]&&h=u[w])&&(y=w,v=u[u.length-1]-u[u.length-2])}let g=null,m=null;a.rewind&&(t.isBeginning?m=a.virtual&&a.virtual.enabled&&t.virtual?t.virtual.slides.length-1:t.slides.length-1:t.isEnd&&(g=0));const b=(h-u[y])/v,_=ya.longSwipesMs){if(!a.longSwipes){t.slideTo(t.activeIndex);return}t.swipeDirection==="next"&&(b>=a.longSwipesRatio?t.slideTo(a.rewind&&t.isEnd?g:y+_):t.slideTo(y)),t.swipeDirection==="prev"&&(b>1-a.longSwipesRatio?t.slideTo(y+_):m!==null&&b<0&&Math.abs(b)>a.longSwipesRatio?t.slideTo(m):t.slideTo(y))}else{if(!a.shortSwipes){t.slideTo(t.activeIndex);return}t.navigation&&(n.target===t.navigation.nextEl||n.target===t.navigation.prevEl)?n.target===t.navigation.nextEl?t.slideTo(y+_):t.slideTo(y):(t.swipeDirection==="next"&&t.slideTo(g!==null?g:y+_),t.swipeDirection==="prev"&&t.slideTo(m!==null?m:y))}}function F_(){const e=this,{params:t,el:r}=e;if(r&&r.offsetWidth===0)return;t.breakpoints&&e.setBreakpoint();const{allowSlideNext:n,allowSlidePrev:i,snapGrid:o}=e,a=e.virtual&&e.params.virtual.enabled;e.allowSlideNext=!0,e.allowSlidePrev=!0,e.updateSize(),e.updateSlides(),e.updateSlidesClasses();const s=a&&t.loop;(t.slidesPerView==="auto"||t.slidesPerView>1)&&e.isEnd&&!e.isBeginning&&!e.params.centeredSlides&&!s?e.slideTo(e.slides.length-1,0,!1,!0):e.params.loop&&!a?e.slideToLoop(e.realIndex,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0),e.autoplay&&e.autoplay.running&&e.autoplay.paused&&(clearTimeout(e.autoplay.resizeTimeout),e.autoplay.resizeTimeout=setTimeout(()=>{e.autoplay&&e.autoplay.running&&e.autoplay.paused&&e.autoplay.resume()},500)),e.allowSlidePrev=i,e.allowSlideNext=n,e.params.watchOverflow&&o!==e.snapGrid&&e.checkOverflow()}function Wz(e){const t=this;t.enabled&&(t.allowClick||(t.params.preventClicks&&e.preventDefault(),t.params.preventClicksPropagation&&t.animating&&(e.stopPropagation(),e.stopImmediatePropagation())))}function zz(){const e=this,{wrapperEl:t,rtlTranslate:r,enabled:n}=e;if(!n)return;e.previousTranslate=e.translate,e.isHorizontal()?e.translate=-t.scrollLeft:e.translate=-t.scrollTop,e.translate===0&&(e.translate=0),e.updateActiveIndex(),e.updateSlidesClasses();let i;const o=e.maxTranslate()-e.minTranslate();o===0?i=0:i=(e.translate-e.minTranslate())/o,i!==e.progress&&e.updateProgress(r?-e.translate:e.translate),e.emit("setTranslate",e.translate,!1)}function Hz(e){const t=this;Nu(t,e.target),!(t.params.cssMode||t.params.slidesPerView!=="auto"&&!t.params.autoHeight)&&t.update()}function qz(){const e=this;e.documentTouchHandlerProceeded||(e.documentTouchHandlerProceeded=!0,e.params.touchReleaseOnEdges&&(e.el.style.touchAction="auto"))}const dT=(e,t)=>{const r=qt(),{params:n,el:i,wrapperEl:o,device:a}=e,s=!!n.nested,l=t==="on"?"addEventListener":"removeEventListener",u=t;!i||typeof i=="string"||(r[l]("touchstart",e.onDocumentTouchStart,{passive:!1,capture:s}),i[l]("touchstart",e.onTouchStart,{passive:!1}),i[l]("pointerdown",e.onTouchStart,{passive:!1}),r[l]("touchmove",e.onTouchMove,{passive:!1,capture:s}),r[l]("pointermove",e.onTouchMove,{passive:!1,capture:s}),r[l]("touchend",e.onTouchEnd,{passive:!0}),r[l]("pointerup",e.onTouchEnd,{passive:!0}),r[l]("pointercancel",e.onTouchEnd,{passive:!0}),r[l]("touchcancel",e.onTouchEnd,{passive:!0}),r[l]("pointerout",e.onTouchEnd,{passive:!0}),r[l]("pointerleave",e.onTouchEnd,{passive:!0}),r[l]("contextmenu",e.onTouchEnd,{passive:!0}),(n.preventClicks||n.preventClicksPropagation)&&i[l]("click",e.onClick,!0),n.cssMode&&o[l]("scroll",e.onScroll),n.updateOnWindowResize?e[u](a.ios||a.android?"resize orientationchange observerUpdate":"resize observerUpdate",F_,!0):e[u]("observerUpdate",F_,!0),i[l]("load",e.onLoad,{capture:!0}))};function Gz(){const e=this,{params:t}=e;e.onTouchStart=Uz.bind(e),e.onTouchMove=jz.bind(e),e.onTouchEnd=Vz.bind(e),e.onDocumentTouchStart=qz.bind(e),t.cssMode&&(e.onScroll=zz.bind(e)),e.onClick=Wz.bind(e),e.onLoad=Hz.bind(e),dT(e,"on")}function Yz(){dT(this,"off")}var Kz={attachEvents:Gz,detachEvents:Yz};const U_=(e,t)=>e.grid&&t.grid&&t.grid.rows>1;function Xz(){const e=this,{realIndex:t,initialized:r,params:n,el:i}=e,o=n.breakpoints;if(!o||o&&Object.keys(o).length===0)return;const a=qt(),s=n.breakpointsBase==="window"||!n.breakpointsBase?n.breakpointsBase:"container",l=["window","container"].includes(n.breakpointsBase)||!n.breakpointsBase?e.el:a.querySelector(n.breakpointsBase),u=e.getBreakpoint(o,s,l);if(!u||e.currentBreakpoint===u)return;const f=(u in o?o[u]:void 0)||e.originalParams,d=U_(e,n),h=U_(e,f),p=e.params.grabCursor,y=f.grabCursor,v=n.enabled;d&&!h?(i.classList.remove(`${n.containerModifierClass}grid`,`${n.containerModifierClass}grid-column`),e.emitContainerClasses()):!d&&h&&(i.classList.add(`${n.containerModifierClass}grid`),(f.grid.fill&&f.grid.fill==="column"||!f.grid.fill&&n.grid.fill==="column")&&i.classList.add(`${n.containerModifierClass}grid-column`),e.emitContainerClasses()),p&&!y?e.unsetGrabCursor():!p&&y&&e.setGrabCursor(),["navigation","pagination","scrollbar"].forEach(E=>{if(typeof f[E]>"u")return;const T=n[E]&&n[E].enabled,C=f[E]&&f[E].enabled;T&&!C&&e[E].disable(),!T&&C&&e[E].enable()});const g=f.direction&&f.direction!==n.direction,m=n.loop&&(f.slidesPerView!==n.slidesPerView||g),b=n.loop;g&&r&&e.changeDirection(),Nr(e.params,f);const _=e.params.enabled,w=e.params.loop;Object.assign(e,{allowTouchMove:e.params.allowTouchMove,allowSlideNext:e.params.allowSlideNext,allowSlidePrev:e.params.allowSlidePrev}),v&&!_?e.disable():!v&&_&&e.enable(),e.currentBreakpoint=u,e.emit("_beforeBreakpoint",f),r&&(m?(e.loopDestroy(),e.loopCreate(t),e.updateSlides()):!b&&w?(e.loopCreate(t),e.updateSlides()):b&&!w&&e.loopDestroy()),e.emit("breakpoint",f)}function Qz(e,t="window",r){if(!e||t==="container"&&!r)return;let n=!1;const i=Mt(),o=t==="window"?i.innerHeight:r.clientHeight,a=Object.keys(e).map(s=>{if(typeof s=="string"&&s.indexOf("@")===0){const l=parseFloat(s.substr(1));return{value:o*l,point:s}}return{value:s,point:s}});a.sort((s,l)=>parseInt(s.value,10)-parseInt(l.value,10));for(let s=0;s{typeof n=="object"?Object.keys(n).forEach(i=>{n[i]&&r.push(t+i)}):typeof n=="string"&&r.push(t+n)}),r}function e5(){const e=this,{classNames:t,params:r,rtl:n,el:i,device:o}=e,a=Zz(["initialized",r.direction,{"free-mode":e.params.freeMode&&r.freeMode.enabled},{autoheight:r.autoHeight},{rtl:n},{grid:r.grid&&r.grid.rows>1},{"grid-column":r.grid&&r.grid.rows>1&&r.grid.fill==="column"},{android:o.android},{ios:o.ios},{"css-mode":r.cssMode},{centered:r.cssMode&&r.centeredSlides},{"watch-progress":r.watchSlidesProgress}],r.containerModifierClass);t.push(...a),i.classList.add(...t),e.emitContainerClasses()}function t5(){const e=this,{el:t,classNames:r}=e;!t||typeof t=="string"||(t.classList.remove(...r),e.emitContainerClasses())}var r5={addClasses:e5,removeClasses:t5};function n5(){const e=this,{isLocked:t,params:r}=e,{slidesOffsetBefore:n}=r;if(n){const i=e.slides.length-1,o=e.slidesGrid[i]+e.slidesSizesGrid[i]+n*2;e.isLocked=e.size>o}else e.isLocked=e.snapGrid.length===1;r.allowSlideNext===!0&&(e.allowSlideNext=!e.isLocked),r.allowSlidePrev===!0&&(e.allowSlidePrev=!e.isLocked),t&&t!==e.isLocked&&(e.isEnd=!1),t!==e.isLocked&&e.emit(e.isLocked?"lock":"unlock")}var i5={checkOverflow:n5},Dg={init:!0,direction:"horizontal",oneWayMovement:!1,swiperElementNodeName:"SWIPER-CONTAINER",touchEventsTarget:"wrapper",initialSlide:0,speed:300,cssMode:!1,updateOnWindowResize:!0,resizeObserver:!0,nested:!1,createElements:!1,eventsPrefix:"swiper",enabled:!0,focusableElements:"input, select, option, textarea, button, video, label",width:null,height:null,preventInteractionOnTransition:!1,userAgent:null,url:null,edgeSwipeDetection:!1,edgeSwipeThreshold:20,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",breakpoints:void 0,breakpointsBase:"window",spaceBetween:0,slidesPerView:1,slidesPerGroup:1,slidesPerGroupSkip:0,slidesPerGroupAuto:!1,centeredSlides:!1,centeredSlidesBounds:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,centerInsufficientSlides:!1,snapToSlideEdge:!1,watchOverflow:!0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:5,touchMoveStopPropagation:!1,touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,loop:!1,loopAddBlankSlides:!0,loopAdditionalSlides:0,loopPreventsSliding:!0,rewind:!1,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:null,passiveListeners:!0,maxBackfaceHiddenSlides:10,containerModifierClass:"swiper-",slideClass:"swiper-slide",slideBlankClass:"swiper-slide-blank",slideActiveClass:"swiper-slide-active",slideVisibleClass:"swiper-slide-visible",slideFullyVisibleClass:"swiper-slide-fully-visible",slideNextClass:"swiper-slide-next",slidePrevClass:"swiper-slide-prev",wrapperClass:"swiper-wrapper",lazyPreloaderClass:"swiper-lazy-preloader",lazyPreloadPrevNext:0,runCallbacksOnInit:!0,_emitClasses:!1};function o5(e,t){return function(n={}){const i=Object.keys(n)[0],o=n[i];if(typeof o!="object"||o===null){Nr(t,n);return}if(e[i]===!0&&(e[i]={enabled:!0}),i==="navigation"&&e[i]&&e[i].enabled&&!e[i].prevEl&&!e[i].nextEl&&(e[i].auto=!0),["pagination","scrollbar"].indexOf(i)>=0&&e[i]&&e[i].enabled&&!e[i].el&&(e[i].auto=!0),!(i in e&&"enabled"in o)){Nr(t,n);return}typeof e[i]=="object"&&!("enabled"in e[i])&&(e[i].enabled=!0),e[i]||(e[i]={enabled:!1}),Nr(t,n)}}const Vd={eventsEmitter:rz,update:hz,translate:bz,transition:Ez,slide:Pz,loop:Nz,grabCursor:Bz,events:Kz,breakpoints:Jz,checkOverflow:i5,classes:r5},Wd={};class Rr{constructor(...t){let r,n;t.length===1&&t[0].constructor&&Object.prototype.toString.call(t[0]).slice(8,-1)==="Object"?n=t[0]:[r,n]=t,n||(n={}),n=Nr({},n),r&&!n.el&&(n.el=r);const i=qt();if(n.el&&typeof n.el=="string"&&i.querySelectorAll(n.el).length>1){const l=[];return i.querySelectorAll(n.el).forEach(u=>{const c=Nr({},n,{el:u});l.push(new Rr(c))}),l}const o=this;o.__swiper__=!0,o.support=lT(),o.device=uT({userAgent:n.userAgent}),o.browser=cT(),o.eventsListeners={},o.eventsAnyListeners=[],o.modules=[...o.__modules__],n.modules&&Array.isArray(n.modules)&&n.modules.forEach(l=>{typeof l=="function"&&o.modules.indexOf(l)<0&&o.modules.push(l)});const a={};o.modules.forEach(l=>{l({params:n,swiper:o,extendParams:o5(n,a),on:o.on.bind(o),once:o.once.bind(o),off:o.off.bind(o),emit:o.emit.bind(o)})});const s=Nr({},Dg,a);return o.params=Nr({},s,Wd,n),o.originalParams=Nr({},o.params),o.passedParams=Nr({},n),o.params&&o.params.on&&Object.keys(o.params.on).forEach(l=>{o.on(l,o.params.on[l])}),o.params&&o.params.onAny&&o.onAny(o.params.onAny),Object.assign(o,{enabled:o.params.enabled,el:r,classNames:[],slides:[],slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal(){return o.params.direction==="horizontal"},isVertical(){return o.params.direction==="vertical"},activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,cssOverflowAdjustment(){return Math.trunc(this.translate/2**23)*2**23},allowSlideNext:o.params.allowSlideNext,allowSlidePrev:o.params.allowSlidePrev,touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,focusableElements:o.params.focusableElements,lastClickTime:0,clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,startMoving:void 0,pointerId:null,touchId:null},allowClick:!0,allowTouchMove:o.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),o.emit("_swiper"),o.params.init&&o.init(),o}getDirectionLabel(t){return this.isHorizontal()?t:{width:"height","margin-top":"margin-left","margin-bottom ":"margin-right","margin-left":"margin-top","margin-right":"margin-bottom","padding-left":"padding-top","padding-right":"padding-bottom",marginRight:"marginBottom"}[t]}getSlideIndex(t){const{slidesEl:r,params:n}=this,i=er(r,`.${n.slideClass}, swiper-slide`),o=Ka(i[0]);return Ka(t)-o}getSlideIndexByData(t){return this.getSlideIndex(this.slides.find(r=>r.getAttribute("data-swiper-slide-index")*1===t))}getSlideIndexWhenGrid(t){return this.grid&&this.params.grid&&this.params.grid.rows>1&&(this.params.grid.fill==="column"?t=Math.floor(t/this.params.grid.rows):this.params.grid.fill==="row"&&(t=t%Math.ceil(this.slides.length/this.params.grid.rows))),t}recalcSlides(){const t=this,{slidesEl:r,params:n}=t;t.slides=er(r,`.${n.slideClass}, swiper-slide`)}enable(){const t=this;t.enabled||(t.enabled=!0,t.params.grabCursor&&t.setGrabCursor(),t.emit("enable"))}disable(){const t=this;t.enabled&&(t.enabled=!1,t.params.grabCursor&&t.unsetGrabCursor(),t.emit("disable"))}setProgress(t,r){const n=this;t=Math.min(Math.max(t,0),1);const i=n.minTranslate(),a=(n.maxTranslate()-i)*t+i;n.translateTo(a,typeof r>"u"?0:r),n.updateActiveIndex(),n.updateSlidesClasses()}emitContainerClasses(){const t=this;if(!t.params._emitClasses||!t.el)return;const r=t.el.className.split(" ").filter(n=>n.indexOf("swiper")===0||n.indexOf(t.params.containerModifierClass)===0);t.emit("_containerClasses",r.join(" "))}getSlideClasses(t){const r=this;return r.destroyed?"":t.className.split(" ").filter(n=>n.indexOf("swiper-slide")===0||n.indexOf(r.params.slideClass)===0).join(" ")}emitSlidesClasses(){const t=this;if(!t.params._emitClasses||!t.el)return;const r=[];t.slides.forEach(n=>{const i=t.getSlideClasses(n);r.push({slideEl:n,classNames:i}),t.emit("_slideClass",n,i)}),t.emit("_slideClasses",r)}slidesPerViewDynamic(t="current",r=!1){const n=this,{params:i,slides:o,slidesGrid:a,slidesSizesGrid:s,size:l,activeIndex:u}=n;let c=1;if(typeof i.slidesPerView=="number")return i.slidesPerView;if(i.centeredSlides){let f=o[u]?Math.ceil(o[u].swiperSlideSize):0,d;for(let h=u+1;hl&&(d=!0));for(let h=u-1;h>=0;h-=1)o[h]&&!d&&(f+=o[h].swiperSlideSize,c+=1,f>l&&(d=!0))}else if(t==="current")for(let f=u+1;f=0;f-=1)a[u]-a[f]{a.complete&&Nu(t,a)}),t.updateSize(),t.updateSlides(),t.updateProgress(),t.updateSlidesClasses();function i(){const a=t.rtlTranslate?t.translate*-1:t.translate,s=Math.min(Math.max(a,t.maxTranslate()),t.minTranslate());t.setTranslate(s),t.updateActiveIndex(),t.updateSlidesClasses()}let o;if(n.freeMode&&n.freeMode.enabled&&!n.cssMode)i(),n.autoHeight&&t.updateAutoHeight();else{if((n.slidesPerView==="auto"||n.slidesPerView>1)&&t.isEnd&&!n.centeredSlides){const a=t.virtual&&n.virtual.enabled?t.virtual.slides:t.slides;o=t.slideTo(a.length-1,0,!1,!0)}else o=t.slideTo(t.activeIndex,0,!1,!0);o||i()}n.watchOverflow&&r!==t.snapGrid&&t.checkOverflow(),t.emit("update")}changeDirection(t,r=!0){const n=this,i=n.params.direction;return t||(t=i==="horizontal"?"vertical":"horizontal"),t===i||t!=="horizontal"&&t!=="vertical"||(n.el.classList.remove(`${n.params.containerModifierClass}${i}`),n.el.classList.add(`${n.params.containerModifierClass}${t}`),n.emitContainerClasses(),n.params.direction=t,n.slides.forEach(o=>{t==="vertical"?o.style.width="":o.style.height=""}),n.emit("changeDirection"),r&&n.update()),n}changeLanguageDirection(t){const r=this;r.rtl&&t==="rtl"||!r.rtl&&t==="ltr"||(r.rtl=t==="rtl",r.rtlTranslate=r.params.direction==="horizontal"&&r.rtl,r.rtl?(r.el.classList.add(`${r.params.containerModifierClass}rtl`),r.el.dir="rtl"):(r.el.classList.remove(`${r.params.containerModifierClass}rtl`),r.el.dir="ltr"),r.update())}mount(t){const r=this;if(r.mounted)return!0;let n=t||r.params.el;if(typeof n=="string"&&(n=document.querySelector(n)),!n)return!1;n.swiper=r,n.parentNode&&n.parentNode.host&&n.parentNode.host.nodeName===r.params.swiperElementNodeName.toUpperCase()&&(r.isElement=!0);const i=()=>`.${(r.params.wrapperClass||"").trim().split(" ").join(".")}`;let a=n&&n.shadowRoot&&n.shadowRoot.querySelector?n.shadowRoot.querySelector(i()):er(n,i())[0];return!a&&r.params.createElements&&(a=Br("div",r.params.wrapperClass),n.append(a),er(n,`.${r.params.slideClass}`).forEach(s=>{a.append(s)})),Object.assign(r,{el:n,wrapperEl:a,slidesEl:r.isElement&&!n.parentNode.host.slideSlots?n.parentNode.host:a,hostEl:r.isElement?n.parentNode.host:n,mounted:!0,rtl:n.dir.toLowerCase()==="rtl"||Wi(n,"direction")==="rtl",rtlTranslate:r.params.direction==="horizontal"&&(n.dir.toLowerCase()==="rtl"||Wi(n,"direction")==="rtl"),wrongRTL:Wi(a,"display")==="-webkit-box"}),!0}init(t){const r=this;if(r.initialized||r.mount(t)===!1)return r;r.emit("beforeInit"),r.params.breakpoints&&r.setBreakpoint(),r.addClasses(),r.updateSize(),r.updateSlides(),r.params.watchOverflow&&r.checkOverflow(),r.params.grabCursor&&r.enabled&&r.setGrabCursor(),r.params.loop&&r.virtual&&r.params.virtual.enabled?r.slideTo(r.params.initialSlide+r.virtual.slidesBefore,0,r.params.runCallbacksOnInit,!1,!0):r.slideTo(r.params.initialSlide,0,r.params.runCallbacksOnInit,!1,!0),r.params.loop&&r.loopCreate(void 0,!0),r.attachEvents();const i=[...r.el.querySelectorAll('[loading="lazy"]')];return r.isElement&&i.push(...r.hostEl.querySelectorAll('[loading="lazy"]')),i.forEach(o=>{o.complete?Nu(r,o):o.addEventListener("load",a=>{Nu(r,a.target)})}),$g(r),r.initialized=!0,$g(r),r.emit("init"),r.emit("afterInit"),r}destroy(t=!0,r=!0){const n=this,{params:i,el:o,wrapperEl:a,slides:s}=n;return typeof n.params>"u"||n.destroyed||(n.emit("beforeDestroy"),n.initialized=!1,n.detachEvents(),i.loop&&n.loopDestroy(),r&&(n.removeClasses(),o&&typeof o!="string"&&o.removeAttribute("style"),a&&a.removeAttribute("style"),s&&s.length&&s.forEach(l=>{l.classList.remove(i.slideVisibleClass,i.slideFullyVisibleClass,i.slideActiveClass,i.slideNextClass,i.slidePrevClass),l.removeAttribute("style"),l.removeAttribute("data-swiper-slide-index")})),n.emit("destroy"),Object.keys(n.eventsListeners).forEach(l=>{n.off(l)}),t!==!1&&(n.el&&typeof n.el!="string"&&(n.el.swiper=null),z6(n)),n.destroyed=!0),null}static extendDefaults(t){Nr(Wd,t)}static get extendedDefaults(){return Wd}static get defaults(){return Dg}static installModule(t){Rr.prototype.__modules__||(Rr.prototype.__modules__=[]);const r=Rr.prototype.__modules__;typeof t=="function"&&r.indexOf(t)<0&&r.push(t)}static use(t){return Array.isArray(t)?(t.forEach(r=>Rr.installModule(r)),Rr):(Rr.installModule(t),Rr)}}Object.keys(Vd).forEach(e=>{Object.keys(Vd[e]).forEach(t=>{Rr.prototype[t]=Vd[e][t]})});Rr.use([ez,tz]);const s5={class:"d-flex align-items-center"},a5={key:0,class:"me-2 fa-solid fa-xs fa-star"},l5={class:"cpname"},u5={class:"d-flex float-right justify-content-end align-items-center"},c5=["data-bs-target"],f5=["data-bs-target"],d5={class:"subgrid"},h5={key:0,class:"d-flex justify-content-center align-items-center vehiclestatus"},p5={class:"d-flex flex-column align-items-center px-0"},g5={class:"d-flex justify-content-center flex-wrap"},m5={class:"d-flex align-items-center"},y5={class:"badge phasesInUse rounded-pill"},v5={class:"d-flex flex-wrap justify-content-center chargeinfo"},b5={class:"me-1"},_5={key:0,class:"subgrid socEditRow m-0 p-0"},w5={class:"socEditor rounded mt-2 d-flex flex-column align-items-center grid-col-12"},S5={class:"d-flex justify-content-stretch align-items-center"},E5=We({__name:"CompactListItem",props:{chargepoint:{}},setup(e){const t=e,r=et(!1),n=_e(()=>zt[t.chargepoint.chargeMode].icon),i=_e(()=>{let b="";return t.chargepoint.isLocked?b="fa-lock":t.chargepoint.isCharging?b=" fa-bolt":t.chargepoint.isPluggedIn&&(b="fa-plug"),"fa "+b}),o=_e(()=>{let b="var(--color-axis)";return t.chargepoint.isLocked?b="var(--color-evu)":t.chargepoint.isCharging?b="var(--color-charging)":t.chargepoint.isPluggedIn&&(b="var(--color-battery)"),{color:b,border:`0.5px solid ${b} `}}),a=_e(()=>t.chargepoint.chargeMode==="stop"?{"background-color":"var(--color-input)"}:{"background-color":zt[t.chargepoint.chargeMode].color}),s=_e(()=>Fr(t.chargepoint.power,Ce.decimalPlaces)),l=_e(()=>t.chargepoint.current+" A"),u=_e(()=>t.chargepoint.phasesInUse),c=_e(()=>t.chargepoint.dailyYield>0?qi(t.chargepoint.dailyYield,Ce.decimalPlaces):"0 Wh"),f=_e(()=>"("+Math.round(t.chargepoint.rangeCharged).toString()+" "+t.chargepoint.rangeUnit+")"),d=_e(()=>zt[t.chargepoint.chargeMode].name);function h(){Mr("socUpdate",1,t.chargepoint.connectedVehicle),Ye[t.chargepoint.id].waitingForSoc=!0}function p(){Mr("setSoc",y.value,t.chargepoint.connectedVehicle),r.value=!1}const y=_e({get(){return t.chargepoint.soc},set(b){Ye[t.chargepoint.id].soc=b}}),v=_e(()=>t.chargepoint.isLocked?"Gesperrt":t.chargepoint.isCharging?"Lädt":t.chargepoint.isPluggedIn?"Bereit":"Frei");function g(b){switch(b.selected){case"none":return"";case"soc":return`Limit: ${b.soc} %`;case"amount":return"Limit: "+qi(b.amount)}}const m=_e(()=>{let b=t.chargepoint.chargeTemplate;if(b!=null)switch(b.chargemode.selected){case"pv_charging":return g(b.chargemode.pv_charging.limit);case"eco_charging":return g(b.chargemode.eco_charging.limit);case"instant_charging":return g(b.chargemode.instant_charging.limit);default:return""}else return""});return(b,_)=>(se(),Se(Ge,null,[we(ro,{titlecolor:e.chargepoint.color,fullwidth:!0,small:!0},{title:Ae(()=>[U("div",s5,[e.chargepoint.hasPriority?(se(),Se("span",a5)):Me("",!0),U("span",l5,$e(e.chargepoint.name),1),U("span",{class:"badge rounded-pill statusbadge mx-2",style:ot(o.value)},[U("i",{class:Qe([i.value,"me-1"])},null,2),Ke(" "+$e(v.value),1)],4)])]),buttons:Ae(()=>[U("div",u5,[U("span",{class:"badge rounded-pill modebadge mx-2",type:"button",style:ot(a.value),"data-bs-toggle":"modal","data-bs-target":"#cpsconfig-"+e.chargepoint.id},[U("i",{class:Qe(["fa me-1",n.value])},null,2),Ke(" "+$e(d.value),1)],12,c5),U("span",{class:"fa-solid ms-2 fa-lg fa-edit ps-1",type:"button","data-bs-toggle":"modal","data-bs-target":"#cpsconfig-"+e.chargepoint.id},null,8,f5)])]),default:Ae(()=>[U("div",d5,[we(lt,{heading:e.chargepoint.vehicleName,small:!0,class:"grid-left grid-col-4"},{default:Ae(()=>[e.chargepoint.isSocConfigured?(se(),Se("span",h5,[e.chargepoint.soc?(se(),De(sf,{key:0,class:"me-1",soc:e.chargepoint.soc},null,8,["soc"])):Me("",!0),e.chargepoint.isSocConfigured&&e.chargepoint.isSocManual?(se(),Se("i",{key:1,type:"button",class:"fa-solid fa-sm fas fa-edit",style:{color:"var(--color-menu)"},onClick:_[0]||(_[0]=w=>r.value=!r.value)})):Me("",!0),e.chargepoint.isSocConfigured&&!e.chargepoint.isSocManual?(se(),Se("i",{key:2,type:"button",class:Qe(["fa-solid fa-sm me-2",e.chargepoint.waitingForSoc?"fa-spinner fa-spin":"fa-sync"]),style:{color:"var(--color-menu)"},onClick:h},null,2)):Me("",!0)])):Me("",!0)]),_:1},8,["heading"]),we(lt,{heading:"Parameter:",small:!0,class:"grid-col-4"},{default:Ae(()=>[U("div",p5,[U("span",g5,[U("span",null,$e(s.value),1),U("span",m5,[U("span",y5,$e(u.value),1),U("span",null,$e(l.value),1)])]),U("span",null,$e(m.value),1)])]),_:1}),we(lt,{heading:"Geladen:",small:!0,class:"grid-right grid-col-4"},{default:Ae(()=>[U("div",v5,[U("span",b5,$e(c.value),1),U("span",null,$e(f.value),1)])]),_:1})]),r.value?(se(),Se("div",_5,[U("div",w5,[_[2]||(_[2]=U("span",{class:"d-flex m-1 p-0 socEditTitle"},"Ladestand einstellen:",-1)),U("span",S5,[U("span",null,[we(Ot,{id:"manualSoc",modelValue:y.value,"onUpdate:modelValue":_[1]||(_[1]=w=>y.value=w),min:0,max:100,step:1,unit:"%"},null,8,["modelValue"])])]),U("span",{type:"button",class:"fa-solid d-flex fa-lg me-2 mb-3 align-self-end fa-circle-check",onClick:p})])])):Me("",!0)]),_:1},8,["titlecolor"]),(se(),De(Ew,{to:"body"},[(se(),De(gl,{key:e.chargepoint.id,"modal-id":"cpsconfig-"+e.chargepoint.id},{title:Ae(()=>[Ke(" Konfiguration: "+$e(e.chargepoint.name),1)]),default:Ae(()=>[e.chargepoint!=null?(se(),De(Lg,{key:0,chargepoint:e.chargepoint},null,8,["chargepoint"])):Me("",!0)]),_:1},8,["modal-id"]))]))],64))}}),x5=Xe(E5,[["__scopeId","data-v-b5eb106f"]]),T5=We({__name:"CompactList",setup(e){const t=_e(()=>Object.values(Ye));return(r,n)=>(se(),De(mn,{"variable-width":!0},{title:Ae(()=>[...n[0]||(n[0]=[U("span",{class:"fa-solid fa-charging-station"}," ",-1),Ke(" Ladepunkte ",-1)])]),buttons:Ae(()=>[le(mt).active?(se(),De(yn,{key:0,bgcolor:"var(--color-menu)"},{default:Ae(()=>[Ke("Strompreis: "+$e(le(mt).etCurrentPriceString),1)]),_:1})):Me("",!0)]),default:Ae(()=>[(se(!0),Se(Ge,null,it(t.value,(i,o)=>(se(),Se("div",{key:o,class:"subgrid pb-2"},[we(x5,{chargepoint:i},null,8,["chargepoint"])]))),128))]),_:1}))}}),A5=Xe(T5,[["__scopeId","data-v-99d6026a"]]),zd=We({__name:"ChargePointList",props:{id:{},compact:{type:Boolean}},setup(e){let t,r;const n=e,i=_e(()=>{let u=Object.values(Ye);return l(),u}),o=_e(()=>a.value+" "+s.value),a=_e(()=>{switch(Object.values(Ye).length){case 0:return Ce.preferWideBoxes?"col-lg-6":"col-lg-4";case 1:return Ce.preferWideBoxes?"col-lg-6":"col-lg-4";case 2:return Ce.preferWideBoxes?"col-lg-12":"col-lg-8 ";default:return"col-lg-12"}}),s=_e(()=>"swiper-chargepoints-"+n.id);function l(){let u=document.querySelector("."+s.value);if(u&&(r=u,t=r.swiper),t){let c="1";if(Ln.value)switch(Object.values(Ye).length){case 0:case 1:c="1";break;case 2:c="2";break;default:c="3"}r.setAttribute("slides-per-view",c),t.update()}}return Hr(()=>{let u=document.querySelector("."+s.value);u&&(r=u,t=r.swiper),window.addEventListener("resize",l),window.document.addEventListener("visibilitychange",l)}),(u,c)=>(se(),Se(Ge,null,[n.compact?Me("",!0):(se(),Se("swiper-container",{key:0,"space-between":0,"slides-per-view":1,pagination:{clickable:!0},class:Qe(["cplist m-0 p-0 d-flex align-items-stretch",o.value])},[(se(!0),Se(Ge,null,it(i.value,f=>(se(),Se("swiper-slide",{key:f.id},[U("div",{class:Qe([le(Ln)?"mb-0":"mb-5","d-flex align-items-stretch flex-fill"])},[we(V6,{chargepoint:f,"full-width":!0},null,8,["chargepoint"])],2)]))),128))],2)),n.compact?(se(),De(A5,{key:1})):Me("",!0)],64))}}),I5={class:"container-fluid p-0 m-0"},C5={class:"row p-0 m-0"},M5={class:"d-grid gap-2"},k5=["onClick"],P5={class:"col-md-4 p-1"},O5={class:"d-grid gap-2"},L5={key:0},R5={class:"row justify-content-center m-1 p-0"},N5={class:"col-lg-4 p-1 m-0"},$5={class:"d-grid gap-2"},D5={class:"col-lg-4 p-1 m-0"},B5={class:"d-grid gap-2"},F5={class:"col-lg-4 p-1 m-0"},U5={class:"d-grid gap-2"},j5=We({__name:"BBSelect",props:{cpId:{}},setup(e){const t=e,r=[{mode:"instant_charging",name:"Sofort",color:"var(--color-charging)"},{mode:"pv_charging",name:"PV",color:"var(--color-pv)"},{mode:"scheduled_charging",name:"Zielladen",color:"var(--color-battery)"},{mode:"eco_charging",name:"Eco",color:"var(--color-eco)"},{mode:"stop",name:"Stop",color:"var(--color-axis)"}],n=_e(()=>Ye[t.cpId]);function i(u){return u==n.value.chargeMode?"btn btn-success buttonTextSize":"btn btn-secondary buttonTextSize"}function o(u){return wt.pvBatteryPriority==u?"btn-success":"btn-secondary"}function a(u){n.value.chargeMode=u}function s(u){n.value.isLocked=u}function l(u){wt.pvBatteryPriority=u}return(u,c)=>(se(),Se("div",I5,[U("div",C5,[(se(),Se(Ge,null,it(r,(f,d)=>U("div",{key:d,class:"col-md-4 p-1"},[U("div",M5,[U("button",{type:"button",class:Qe(i(f.mode)),style:{},onClick:h=>a(f.mode)},$e(f.name),11,k5)])])),64)),U("div",P5,[U("div",O5,[n.value.isLocked?(se(),Se("button",{key:0,type:"button",class:"btn btn-outline-success buttonTextSize","data-bs-dismiss":"modal",onClick:c[0]||(c[0]=f=>s(!1))}," Entsperren ")):Me("",!0),n.value.isLocked?Me("",!0):(se(),Se("button",{key:1,type:"button",class:"btn btn-outline-danger buttonTextSize","data-bs-dismiss":"modal",onClick:c[1]||(c[1]=f=>s(!0))}," Sperren "))])])]),le(wt).isBatteryConfigured?(se(),Se("div",L5,[c[8]||(c[8]=U("hr",null,null,-1)),c[9]||(c[9]=U("div",{class:"row"},[U("div",{class:"col text-center"},"Vorrang im Lademodus PV-Laden:")],-1)),U("div",R5,[U("div",N5,[U("div",$5,[U("button",{id:"evPriorityBtn",type:"button",class:Qe(["priorityModeBtn btn btn-secondary buttonTextSize",o("ev_mode")]),"data-dismiss":"modal",priority:"1",onClick:c[2]||(c[2]=f=>l("ev_mode"))},[...c[5]||(c[5]=[Ke(" EV ",-1),U("span",{class:"fas fa-car ms-2"}," ",-1)])],2)])]),U("div",D5,[U("div",B5,[U("button",{id:"batteryPriorityBtn",type:"button",class:Qe(["priorityModeBtn btn btn-secondary buttonTextSize",o("bat_mode")]),"data-dismiss":"modal",priority:"0",onClick:c[3]||(c[3]=f=>l("bat_mode"))},[...c[6]||(c[6]=[Ke(" Speicher ",-1),U("span",{class:"fas fa-car-battery ms-2"}," ",-1)])],2)])]),U("div",F5,[U("div",U5,[U("button",{id:"minsocPriorityBtn",type:"button",class:Qe(["priorityModeBtn btn btn-secondary buttonTextSize",o("min_soc_bat_mode")]),"data-dismiss":"modal",priority:"0",onClick:c[4]||(c[4]=f=>l("min_soc_bat_mode"))},[...c[7]||(c[7]=[Ke(" MinSoc ",-1),U("span",{class:"fas fa-battery-half"}," ",-1)])],2)])])])])):Me("",!0)]))}}),V5=Xe(j5,[["__scopeId","data-v-aff76f76"]]),W5={class:"col-lg-4 p-0 m-0 mt-1"},z5={class:"d-grid gap-2"},H5=["data-bs-target"],q5={class:"m-0 p-0 d-flex justify-content-between align-items-center"},G5={class:"mx-1 badge rounded-pill smallTextSize plugIndicator"},Y5={key:0,class:"ms-2"},K5={class:"m-0 p-0"},X5={key:0,class:"ps-1"},Q5=We({__name:"BbChargeButton",props:{chargepoint:{}},setup(e){const t=e,r="chargeSelectModal"+t.chargepoint.id,n=_e(()=>zt[t.chargepoint.chargeMode].name),i=_e(()=>{let c={background:"var(--color-menu)"};return t.chargepoint.isLocked?c.background="var(--color-evu)":t.chargepoint.isCharging?c.background="var(--color-charging)":t.chargepoint.isPluggedIn&&(c.background="var(--color-battery)"),c}),o=_e(()=>{if(zt){let c={background:zt[t.chargepoint.chargeMode].color,color:"white"};switch(t.chargepoint.chargeMode){case $r.instant_charging:t.chargepoint.isCharging&&!t.chargepoint.isLocked&&(c=u(c));break;case $r.stop:c.background="darkgrey",c.color="black";break;case $r.scheduled_charging:t.chargepoint.isPluggedIn&&!t.chargepoint.isCharging&&!t.chargepoint.isLocked&&(c=u(c));break}return c}else return{background:"var(--color-bg)",color:"var(--color-bg)"}}),a=_e(()=>zt?zt[t.chargepoint.chargeMode].icon:""),s=_e(()=>{switch(wt.pvBatteryPriority){case"ev_mode":return"fa-car";case"bat_mode":return"fa-car-battery";case"min_soc_bat_mode":return"fa-battery-half";default:return console.log("default"),""}}),l=_e(()=>{let c="fa-ellipsis";return t.chargepoint.isLocked?c="fa-lock":t.chargepoint.isCharging?c=" fa-bolt":t.chargepoint.isPluggedIn&&(c="fa-plug"),"fa "+c});function u(c){let f=c.color;return c.color=c.background,c.background=f,c}return(c,f)=>(se(),Se("div",W5,[U("div",z5,[U("button",{type:"button",class:"btn mx-1 mb-0 p-1 mediumTextSize chargeButton shadow",style:ot(i.value),"data-bs-toggle":"modal","data-bs-target":"#"+r},[U("div",q5,[U("span",G5,[U("i",{class:Qe(l.value)},null,2),e.chargepoint.isCharging?(se(),Se("span",Y5,$e(le(Fr)(e.chargepoint.power)),1)):Me("",!0)]),U("span",K5,$e(e.chargepoint.name),1),U("span",{class:"mx-2 m-0 badge rounded-pill smallTextSize modeIndicator",style:ot(o.value)},[U("i",{class:Qe(["fa me-1",a.value])},null,2),Ke(" "+$e(n.value)+" ",1),e.chargepoint.chargeMode==le($r).pv_charging&&le(wt).isBatteryConfigured?(se(),Se("span",X5,[f[0]||(f[0]=Ke(" ( ",-1)),U("i",{class:Qe(["fa m-0",s.value])},null,2),f[1]||(f[1]=Ke(") ",-1))])):Me("",!0)],4)])],12,H5)]),we(gl,{"modal-id":r},{title:Ae(()=>[Ke(" Lademodus für "+$e(e.chargepoint.vehicleName),1)]),default:Ae(()=>[we(V5,{"cp-id":e.chargepoint.id},null,8,["cp-id"])]),_:1})]))}}),J5=Xe(Q5,[["__scopeId","data-v-71bb7e5f"]]),Z5={class:"row p-0 mt-0 mb-1 m-0"},eH={class:"col p-0 m-0"},tH={class:"container-fluid p-0 m-0"},rH={class:"row p-0 m-0 d-flex justify-content-center align-items-center"},nH={key:0,class:"col time-display"},iH=We({__name:"ButtonBar",setup(e){return(t,r)=>(se(),Se("div",Z5,[U("div",eH,[U("div",tH,[U("div",rH,[le(Ce).showClock=="buttonbar"?(se(),Se("span",nH,$e(le(ka)(le(Eg))),1)):Me("",!0),(se(!0),Se(Ge,null,it(le(Ye),(n,i)=>(se(),De(J5,{key:i,chargepoint:n,"charge-point-count":Object.values(le(Ye)).length},null,8,["chargepoint","charge-point-count"]))),128))])])])]))}}),oH=Xe(iH,[["__scopeId","data-v-791e4be0"]]),sH={class:"battery-title"},aH={class:"subgrid pt-1"},lH=We({__name:"BLBattery",props:{bat:{}},setup(e){const t=e,r=_e(()=>t.bat.power<0?`Liefert (${Fr(-t.bat.power)})`:t.bat.power>0?`Lädt (${Fr(t.bat.power)})`:"Bereit"),n=_e(()=>t.bat.power<0?"var(--color-pv)":t.bat.power>0?"var(--color-battery)":"var(--color-menu)");return(i,o)=>(se(),De(ro,{titlecolor:"var(--color-title)",fullwidth:!0},{title:Ae(()=>[U("span",sH,$e(e.bat.name),1)]),buttons:Ae(()=>[we(yn,{bgcolor:n.value},{default:Ae(()=>[Ke($e(r.value),1)]),_:1},8,["bgcolor"])]),default:Ae(()=>[U("div",aH,[we(lt,{heading:"Ladestand:",small:!0,class:"grid-left grid-col-4"},{default:Ae(()=>[we(sf,{soc:t.bat.soc},null,8,["soc"])]),_:1}),we(lt,{heading:"Geladen:",small:!0,class:"grid-col-4"},{default:Ae(()=>[we($n,{"watt-h":t.bat.dailyYieldImport},null,8,["watt-h"])]),_:1}),we(lt,{heading:"Geliefert:",small:!0,class:"grid-right grid-col-4"},{default:Ae(()=>[we($n,{"watt-h":t.bat.dailyYieldExport},null,8,["watt-h"])]),_:1})])]),_:1}))}}),uH=Xe(lH,[["__scopeId","data-v-f7f825f7"]]),cH={class:"subgrid grid-12"},fH={key:0,class:"subgrid"},dH=We({__name:"BatteryList",setup(e){const t=_e(()=>Pe.getPower("batOut")>0?`Liefert (${Fr(Pe.getPower("batOut"))})`:Pe.getPower("batIn")>0?`Lädt (${Fr(Pe.getPower("batIn"))})`:"Bereit:"),r=_e(()=>Pe.getPower("batOut")>0?"var(--color-pv)":Pe.getPower("batIn")>0?"var(--color-battery)":"var(--color-menu)"),n=_e(()=>{let i=0;return Pt.value.forEach(o=>{i+=o.dailyYieldImport}),i});return(i,o)=>le(wt).isBatteryConfigured?(se(),De(mn,{key:0,"variable-width":!0,"full-width":!1},{title:Ae(()=>[...o[0]||(o[0]=[U("span",{class:"fas fa-car-battery me-2",style:{color:"var(--color-battery)"}}," ",-1),U("span",null,"Speicher",-1)])]),buttons:Ae(()=>[we(yn,{bgcolor:r.value},{default:Ae(()=>[Ke($e(t.value),1)]),_:1},8,["bgcolor"])]),default:Ae(()=>[U("div",cH,[we(lt,{heading:"Ladestand:",class:"grid-left grid-col-4"},{default:Ae(()=>[we(sf,{color:"var(--color-battery)",soc:le(wt).batterySoc},null,8,["soc"])]),_:1}),we(lt,{heading:"Geladen:",class:"grid-col-4"},{default:Ae(()=>[U("span",null,$e(le(qi)(n.value)),1)]),_:1}),we(lt,{heading:"Geliefert",class:"grid-right grid-col-4"},{default:Ae(()=>[U("span",null,$e(le(qi)(le(Pe).getEnergy("batOut"))),1)]),_:1})]),le(Pt).size>1?(se(),Se("div",fH,[(se(!0),Se(Ge,null,it(le(Pt),([a,s])=>(se(),De(uH,{key:a,bat:s,class:"px-0"},null,8,["bat"]))),128))])):Me("",!0)]),_:1})):Me("",!0)}}),Hd=Xe(dH,[["__scopeId","data-v-7ce7529e"]]),hH={class:"devicename"},pH={class:"subgrid"},gH=We({__name:"SHListItem",props:{device:{}},setup(e){const t=e,r=_e(()=>t.device.status=="on"?"fa-toggle-on fa-xl":t.device.status=="waiting"?"fa-spinner fa-spin":"fa-toggle-off fa-xl"),n=_e(()=>{let s="var(--color-switchRed)";switch(t.device.status){case"on":s="var(--color-switchGreen)";break;case"detection":s="var(--color-switchBlue)";break;case"timeout":s="var(--color-switchWhite)";break;case"waiting":s="var(--color-menu)";break;default:s="var(--color-switchRed)"}return{color:s}});function i(){t.device.isAutomatic||(t.device.status=="on"?Mr("shSwitchOn",0,+t.device.id.slice(2)):Mr("shSwitchOn",1,+t.device.id.slice(2)),Ct.get(t.device.id).status="waiting")}function o(){t.device.isAutomatic?Mr("shSetManual",1,+t.device.id.slice(2)):Mr("shSetManual",0,+t.device.id.slice(2))}const a=_e(()=>t.device.isAutomatic?"Auto":"Man");return(s,l)=>(se(),De(ro,{titlecolor:e.device.color,fullwidth:!0},{title:Ae(()=>[U("span",hH,$e(e.device.name),1)]),buttons:Ae(()=>[(se(!0),Se(Ge,null,it(e.device.temp,(u,c)=>(se(),Se("span",{key:c},[u<300?(se(),De(yn,{key:0,bgcolor:"var(--color-battery)"},{default:Ae(()=>[U("span",null,$e(le(k$)(u)),1)]),_:2},1024)):Me("",!0)]))),128)),t.device.canSwitch?(se(),Se("span",{key:0,class:Qe([r.value,"fa-solid statusbutton mr-2 ms-2"]),style:ot(n.value),onClick:i},null,6)):Me("",!0),t.device.canSwitch?(se(),De(yn,{key:1,type:"button",onClick:o},{default:Ae(()=>[Ke($e(a.value),1)]),_:1})):Me("",!0)]),default:Ae(()=>[U("div",pH,[we(lt,{heading:"Leistung:",small:!0,class:"grid-col-4 grid-left"},{default:Ae(()=>[we(ll,{watt:e.device.power},null,8,["watt"])]),_:1}),we(lt,{heading:"Energie:",small:!0,class:"grid-col-4"},{default:Ae(()=>[we($n,{"watt-h":e.device.now.energy},null,8,["watt-h"])]),_:1}),we(lt,{heading:"Laufzeit:",small:!0,class:"grid-col-4 grid-right"},{default:Ae(()=>[Ke($e(le(C$)(e.device.runningTime)),1)]),_:1})])]),_:1},8,["titlecolor"]))}}),mH=Xe(gH,[["__scopeId","data-v-607c2d1c"]]),yH={class:"sh-title py-4"},vH=["id","onUpdate:modelValue","value"],bH=["for"],_H=3,wH=We({__name:"SmartHomeList",setup(e){const t=_e(()=>Ln.value?r.value.reduce((a,s)=>{const l=a;let u=a[a.length-1];return u.length>=_H?a.push([s]):u.push(s),l},[[]]):[r.value]),r=_e(()=>[...Ct.values()].filter(a=>a.configured));function n(a){return"Geräte"+(Ln.value&&t.value.length>1?"("+(a+1)+")":"")}function i(){o.value=!o.value}const o=et(!1);return(a,s)=>(se(),Se(Ge,null,[(se(!0),Se(Ge,null,it(t.value,(l,u)=>(se(),De(mn,{key:u,"variable-width":!0},{title:Ae(()=>[U("span",{onClick:i},[s[0]||(s[0]=U("span",{class:"fas fa-plug me-2",style:{color:"var(--color-devices)"}}," ",-1)),U("span",yH,$e(n(u)),1)])]),buttons:Ae(()=>[U("span",{class:"ms-2 pt-1",onClick:i},[...s[1]||(s[1]=[U("span",{class:"fa-solid fa-lg ps-1 fa-ellipsis-vertical"},null,-1)])])]),default:Ae(()=>[(se(!0),Se(Ge,null,it(l,c=>(se(),De(mH,{key:c.id,device:c,class:"subgrid pb-2"},null,8,["device"]))),128))]),_:2},1024))),128)),o.value?(se(),De(mn,{key:0},{title:Ae(()=>[U("span",{class:"smarthome",onClick:i},[...s[2]||(s[2]=[U("span",{class:"fas fa-gear"}," ",-1),Ke(" Einstellungen",-1)])])]),buttons:Ae(()=>[U("span",{class:"ms-2 pt-1",onClick:i},[...s[3]||(s[3]=[U("span",{class:"fa-solid fa-lg ps-1 fa-circle-check"},null,-1)])])]),default:Ae(()=>[we(ut,{title:"Im Energie-Graph anzeigen:",icon:"fa-chart-column",fullwidth:!0},{default:Ae(()=>[(se(!0),Se(Ge,null,it(r.value,(l,u)=>(se(),Se("div",{key:u},[wi(U("input",{id:"check"+u,"onUpdate:modelValue":c=>l.showInGraph=c,class:"form-check-input",type:"checkbox",value:l},null,8,vH),[[Oc,l.showInGraph]]),U("label",{class:"form-check-label px-2",for:"check"+u},$e(l.name),9,bH)]))),128))]),_:1}),U("div",{class:"row p-0 m-0",onClick:i},[...s[4]||(s[4]=[U("div",{class:"col-12 mb-3 pe-3 mt-0"},[U("button",{class:"btn btn-sm btn-secondary float-end"},"Schließen")],-1)])])]),_:1})):Me("",!0)],64))}}),qd=Xe(wH,[["__scopeId","data-v-5b5cf6b3"]]),SH={class:"subgrid pt-1"},EH=We({__name:"ClCounter",props:{counter:{}},setup(e){const t=e,r=_e(()=>t.counter.power>0?"Bezug":"Export"),n=_e(()=>t.counter.power>0?"var(--color-evu)":"var(--color-pv)"),i=_e(()=>({color:t.counter.color||"var(--color-evu)"}));return(o,a)=>(se(),De(ro,{titlecolor:"var(--color-title)",fullwidth:!0},{title:Ae(()=>[U("span",{class:"countername",style:ot(i.value)},$e(e.counter.name),5)]),buttons:Ae(()=>[t.counter.power!=0?(se(),De(yn,{key:0,bgcolor:n.value},{default:Ae(()=>[Ke($e(r.value),1)]),_:1},8,["bgcolor"])):Me("",!0),we(yn,{color:"var(--color-bg)"},{default:Ae(()=>[Ke(" ID: "+$e(t.counter.id),1)]),_:1})]),default:Ae(()=>[U("div",SH,[we(lt,{heading:"Leistung:",small:!0,class:"grid-left grid-col-4"},{default:Ae(()=>[we(ll,{watt:Math.abs(t.counter.power)},null,8,["watt"])]),_:1}),we(lt,{heading:"Bezogen:",small:!0,class:"grid-col-4"},{default:Ae(()=>[we($n,{"watt-h":t.counter.energy_imported},null,8,["watt-h"])]),_:1}),we(lt,{heading:"Exportiert:",small:!0,class:"grid-right grid-col-4"},{default:Ae(()=>[we($n,{"watt-h":t.counter.energy_exported},null,8,["watt-h"])]),_:1})])]),_:1}))}}),xH=Xe(EH,[["__scopeId","data-v-a966bcfc"]]),TH={class:"d-flex flex-column"},AH=["id","onUpdate:modelValue","value"],IH=["for"],CH=We({__name:"CounterSettings",setup(e){return(t,r)=>(se(),Se("div",TH,[r[0]||(r[0]=U("span",{class:"settingstitle mb-3"},"Zähler in den Diagrammen anzeigen:",-1)),(se(!0),Se(Ge,null,it(le(ct).values(),(n,i)=>(se(),Se("div",{key:i},[n.grid?Me("",!0):wi((se(),Se("input",{key:0,id:"check"+i,"onUpdate:modelValue":o=>n.showInGraph=o,class:"form-check-input mb-3",type:"checkbox",value:n},null,8,AH)),[[Oc,n.showInGraph]]),n.grid?Me("",!0):(se(),Se("label",{key:1,class:"form-check-label px-2",for:"check"+i},$e(n.name),9,IH))]))),128))]))}}),MH=Xe(CH,[["__scopeId","data-v-70fd4ed2"]]),kH=We({__name:"CounterList",setup(e){const t=et(!1);return(r,n)=>t.value?(se(),De(mn,{key:1,"variable-width":!0},{title:Ae(()=>[...n[4]||(n[4]=[Ke(" Anzeige der Zähler ",-1)])]),buttons:Ae(()=>[U("span",{class:"ms-2 pt-1",onClick:n[1]||(n[1]=i=>t.value=!t.value)},[...n[5]||(n[5]=[U("span",{class:"fa-solid fa-lg ps-1 fa-circle-check"},null,-1)])])]),default:Ae(()=>[we(MH)]),_:1})):(se(),De(mn,{key:0,"variable-width":!0},{title:Ae(()=>[...n[2]||(n[2]=[U("span",{class:"fas fa-bolt me-2",style:{color:"var(--color-evu)"}}," ",-1),U("span",null,"Zähler",-1)])]),buttons:Ae(()=>[U("span",{type:"button",class:"ms-2 ps-1 pt-1",onClick:n[0]||(n[0]=i=>t.value=!t.value)},[...n[3]||(n[3]=[U("span",{class:"fa-solid fa-lg ps-1 fa-ellipsis-vertical"},null,-1)])])]),default:Ae(()=>[(se(!0),Se(Ge,null,it([...le(ct).values()],(i,o)=>(se(),Se("div",{key:o,class:"subgrid pb-2"},[we(xH,{counter:i},null,8,["counter"])]))),128))]),_:1}))}}),Gd=Xe(kH,[["__scopeId","data-v-d42657ec"]]),PH={class:"vehiclename"},OH={class:"subgrid"},LH=We({__name:"VlVehicle",props:{vehicle:{}},setup(e){const t=e,r=_e(()=>{let i="Unterwegs",o=t.vehicle.chargepoint;return o!=null&&(o.isCharging?i="Lädt ("+o.name+")":o.isPluggedIn&&(i="Bereit ("+o.name+")")),i}),n=_e(()=>{let i=t.vehicle.chargepoint;return i!=null?i.isLocked?"var(--color-evu)":i.isCharging?"var(--color-charging)":i.isPluggedIn?"var(--color-battery)":"var(--color-axis)":"var(--color-axis)"});return(i,o)=>(se(),De(ro,{titlecolor:"var(--color-title)",fullwidth:!0},{title:Ae(()=>[U("span",PH,$e(t.vehicle.name),1)]),default:Ae(()=>[U("div",OH,[we(lt,{heading:"Status:",small:!0,class:"grid-left grid-col-4"},{default:Ae(()=>[U("span",{style:ot({color:n.value}),class:"d-flex justify-content-center align-items-center status-string"},$e(r.value),5)]),_:1}),we(lt,{heading:"Ladestand:",small:!0,class:"grid-col-4"},{default:Ae(()=>[Ke($e(Math.round(t.vehicle.soc))+" % ",1)]),_:1}),we(lt,{heading:"Reichweite:",small:!0,class:"grid-right grid-col-4"},{default:Ae(()=>[Ke($e(Math.round(t.vehicle.range))+" km ",1)]),_:1})])]),_:1}))}}),RH=Xe(LH,[["__scopeId","data-v-9e2cb63e"]]),NH=We({__name:"VehicleList",setup(e){return(t,r)=>(se(),De(mn,{"variable-width":!0},{title:Ae(()=>[...r[0]||(r[0]=[U("span",{class:"fas fa-car me-2",style:{color:"var(--color-charging)"}}," ",-1),U("span",null,"Fahrzeuge",-1)])]),default:Ae(()=>[(se(!0),Se(Ge,null,it(Object.values(le(rt)).filter(n=>n.visible),(n,i)=>(se(),Se("div",{key:i,class:"subgrid px-4"},[we(RH,{vehicle:n},null,8,["vehicle"])]))),128))]),_:1}))}}),Yd=Xe(NH,[["__scopeId","data-v-f87a53b0"]]),$H={class:"subtitle"},DH={class:"grapharea"},BH=We({__name:"GlobalPriceChart",props:{id:{}},setup(e){const t=e;return(r,n)=>(se(),De(mn,{"variable-width":!0},{title:Ae(()=>[...n[0]||(n[0]=[U("span",{class:"fas fa-coins me-2",style:{color:"var(--color-battery)"}}," ",-1),U("span",null,"Strompreis",-1)])]),buttons:Ae(()=>[le(mt).active?(se(),De(yn,{key:0,bgcolor:"var(--color-charging)"},{default:Ae(()=>[Ke($e(le(mt).etCurrentPriceString),1)]),_:1})):Me("",!0)]),default:Ae(()=>[U("div",$H,$e(le(mt).etProvider),1),U("div",DH,[we(nT,{id:t.id},null,8,["id"])])]),_:1}))}}),Kd=Xe(BH,[["__scopeId","data-v-02681f2f"]]),FH={class:"subgrid pt-1"},UH=We({__name:"IlInverter",props:{inverter:{}},setup(e){const t=e,r=_e(()=>({color:t.inverter.color}));return(n,i)=>(se(),De(ro,{titlecolor:"var(--color-title)",fullwidth:!0},{title:Ae(()=>[U("span",{class:"invertername",style:ot(r.value)},$e(e.inverter.name),5)]),buttons:Ae(()=>[t.inverter.power<0?(se(),De(yn,{key:0,bgcolor:"var(--color-pv)"},{default:Ae(()=>[Ke($e(le(Fr)(-t.inverter.power)),1)]),_:1})):Me("",!0)]),default:Ae(()=>[U("div",FH,[we(lt,{heading:"Heute:",small:!0,class:"grid-col-4 grid-left"},{default:Ae(()=>[we($n,{"watt-h":t.inverter.now.energy},null,8,["watt-h"])]),_:1}),we(lt,{heading:"Monat:",small:!0,class:"grid-col-4"},{default:Ae(()=>[we($n,{"watt-h":t.inverter.energy_month},null,8,["watt-h"])]),_:1}),we(lt,{heading:"Jahr:",small:!0,class:"grid-right grid-col-4"},{default:Ae(()=>[we($n,{"watt-h":t.inverter.energy_year},null,8,["watt-h"])]),_:1})])]),_:1}))}}),jH=Xe(UH,[["__scopeId","data-v-0bfd46ca"]]),VH=We({__name:"InverterList",setup(e){const t=_e(()=>[...Jt.value.values()].sort((r,n)=>r.id-n.id));return(r,n)=>(se(),De(mn,{"variable-width":!0},{title:Ae(()=>[...n[0]||(n[0]=[U("span",{class:"fas fa-solar-panel me-2",style:{color:"var(--color-pv)"}}," ",-1),U("span",null,"Wechselrichter",-1)])]),buttons:Ae(()=>[le(Pe).getPower("pv")>0?(se(),De(yn,{key:0,bgcolor:"var(--color-pv)"},{default:Ae(()=>[Ke($e(le(Fr)(le(Pe).getPower("pv"))),1)]),_:1})):Me("",!0)]),default:Ae(()=>[(se(!0),Se(Ge,null,it(t.value,i=>(se(),Se("div",{key:i.id,class:"subgrid pb-2"},[we(jH,{inverter:i},null,8,["inverter"])]))),128))]),_:1}))}}),Xd=Xe(VH,[["__scopeId","data-v-d9fe13e6"]]),WH={class:"row py-0 px-0 m-0"},zH=["breakpoints"],HH=We({__name:"CarouselFix",setup(e){let t,r;const n=et(!1),i=_e(()=>n.value?{992:{slidesPerView:1,spaceBetween:0}}:{992:{slidesPerView:3,spaceBetween:0}});return ql(()=>Ce.zoomGraph,o=>{if(t){let a=o?"1":"3";r.setAttribute("slides-per-view",a),t.activeIndex=Ce.zoomedWidget,t.update()}}),Hr(()=>{let o=document.querySelector(".swiper-carousel");o&&(r=o,t=r.swiper)}),(o,a)=>(se(),Se("div",WH,[U("swiper-container",{"space-between":0,pagination:{clickable:!0},"slides-per-view":"1",class:"p-0 m-0 swiper-carousel",breakpoints:i.value},[U("swiper-slide",null,[U("div",{class:Qe([le(Ln)?"mb-0":"mb-5","flex-fill d-flex align-items-stretch"])},[It(o.$slots,"item1",{},void 0,!0)],2)]),U("swiper-slide",null,[U("div",{class:Qe([le(Ln)?"mb-0":"mb-5","flex-fill d-flex align-items-stretch"])},[It(o.$slots,"item2",{},void 0,!0)],2)]),U("swiper-slide",null,[U("div",{class:Qe([le(Ln)?"mb-0":"mb-5","flex-fill d-flex align-items-stretch"])},[It(o.$slots,"item3",{},void 0,!0)],2)])],8,zH)]))}}),qH=Xe(HH,[["__scopeId","data-v-17424929"]]);function GH(e,t){e=="openWB/graph/boolDisplayLiveGraph"?wt.displayLiveGraph=+t==1:e.match(/^openwb\/graph\/alllivevaluesJson[1-9][0-9]*$/i)?YH(e,t):e=="openWB/graph/lastlivevaluesJson"?KH(e,t):e=="openWB/graph/config/duration"&&(Wt.duration=JSON.parse(t))}function YH(e,t){if(!Wt.initialized){let r=[];const n=t.toString().split(` +`);n.length>1?r=n.map(a=>JSON.parse(a)):r=[];const i=e.match(/(\d+)$/g),o=i?i[0]:"";o!=""&&typeof Wt.rawDataPacks[+o-1]>"u"&&(Wt.rawDataPacks[+o-1]=r,Wt.initCounter++)}if(Wt.initCounter==16){const r=[];Wt.unsubscribeRefresh(),Wt.initialized=!0,Wt.rawDataPacks.forEach(n=>{n.forEach(i=>{const o=hT(i);r.push(o)})}),al(r),Wt.subscribeUpdates()}}function KH(e,t){const r=JSON.parse(t),n=hT(r);Wt.graphRefreshCounter++,al(Te.data.concat(n)),Wt.graphRefreshCounter>60&&Wt.activate()}function hT(e){const t=Object.values(Ye).length>0?Object.values(Ye)[0].connectedVehicle:0,r=Object.values(Ye).length>1?Object.values(Ye)[1].connectedVehicle:1,n="ev"+t+"-soc",i="ev"+r+"-soc",o=/cp(\d+)-power/,a=/counter(\d+)-power/,s={};return s.date=+e.timestamp*1e3,+e.grid>0?(s.evuIn=+e.grid,s.evuOut=0):+e.grid<=0?(s.evuIn=0,s.evuOut=-e.grid):(s.evuIn=0,s.evuOut=0),+e["pv-all"]>=0?(s.pv=+e["pv-all"],s.inverter=0):(s.pv=0,s.inverter=-e["pv-all"]),s.house=+e["house-power"],+e["bat-all-power"]>0?(s.batOut=0,s.batIn=+e["bat-all-power"]):+e["bat-all-power"]<0?(s.batOut=-e["bat-all-power"],s.batIn=0):(s.batOut=0,s.batIn=0),e["bat-all-soc"]?s.batSoc=+e["bat-all-soc"]:s.batSoc=0,e[n]&&(s["soc"+t]=+e[n]),e[i]&&(s["soc"+r]=+e[i]),s.charging=+e["charging-all"],Object.keys(e).filter(l=>o.test(l)).forEach(l=>{const u=l.match(o);u&&u[1]&&(s["cp"+u[1]]=+(e[l]??0))}),s.counters=0,Object.keys(e).filter(l=>a.test(l)).forEach(l=>{const u=l.match(a);if(u&&u[1]){const c="ctr"+u[1];ct.get(+u[1])?.showInGraph&&(s[c]=+(e[l]??0),s.counters+=+(e[l]??0))}}),s.selfUsage=s.pv-s.evuOut,s.selfUsage<0&&(s.selfUsage=0),s.devices=0,s}let vc=[];function XH(e,t){const{entries:r,names:n,totals:i}=JSON.parse(t);sn.value=new Map(Object.entries(n)),Qm(),vc=[],Pe.keys().forEach(a=>{Pe.setEnergyPv(a,0),Pe.setEnergyBat(a,0)});const o=QH(r);al(o),Gm(i,vc),Ce.debug&&ZH(r,i,o),Te.graphMode=="today"&&setTimeout(()=>$t.activate(),3e5)}function QH(e){const t=[];let r={};return e.forEach(n=>{r=JH(n);const i=r;t.push(i)}),t}function JH(e){const t={};t.date=e.timestamp*1e3,t.evuOut=0,t.evuIn=0,t.counters=0,Object.entries(e.counter).forEach(([i,o])=>{o.grid?(t.evuOut+=o.power_exported,t.evuIn+=o.power_imported,vc.includes(i)||vc.push(i)):(Pe.keys().includes(i)||Pe.duplicateItem(i,ct.get(+i.slice(7))),Pe.items.get(i)._showInGraph&&(t.counters+=o.power_imported??0,t[i]=o.power_imported??0))}),t.evuOut==0&&t.evuIn==0&&Object.entries(e.counter).forEach(i=>{t.evuOut+=i[1].power_exported,t.evuIn+=i[1].power_imported}),Object.entries(e.pv).forEach(([i,o])=>{i!="all"?t[i]=o.power_exported:t.pv=o.power_exported}),Object.entries(e.bat).length>0?(t.batIn=e.bat.all.power_imported,t.batOut=e.bat.all.power_exported,t.batSoc=e.bat.all.soc??0):(t.batIn=0,t.batOut=0,t.batSoc=0),Object.entries(e.cp).forEach(([i,o])=>{i!="all"?(t[i]=o.power_imported,Pe.keys().includes(i)||Pe.duplicateItem(i,Ye[+i.slice(2)])):t.charging=o.power_imported}),Object.entries(e.ev).forEach(([i,o])=>{i!="all"&&(t["soc"+i.substring(2)]=o.soc)}),t.devices=0;let r=0;const n=1e3/12*(t.pv-t.evuOut)/(t.pv-t.evuOut+t.evuIn+t.batOut);return Object.entries(e.sh).forEach(([i,o])=>{i!="all"&&(t[i]=o.power_imported??0,Pe.keys().includes(i)||Pe.duplicateItem(i,Ct.get(i)),Ct.get(i)?.countAsHouse?r+=o.power_imported:t.devices+=o.power_imported??0),o.power_imported>0&&(Pe.items.get(i)[Te.graphScope].energyPv+=o.power_imported*n,Pe.items.get(i)[Te.graphScope].energyBat+=1e3/12*(o.power_imported*t.batOut)/(t.pv-t.evuOut+t.evuIn+t.batOut)),e.prices.grid>0&&(t.price=e.prices.grid*1e5)}),t.selfUsage=Math.max(0,t.pv-t.evuOut),e.hc&&e.hc.all?t.house=e.hc.all.power_imported-r:t.house=t.evuIn+t.batOut+t.pv-t.evuOut-t.charging-t.devices-t.counters-t.batOut,t}function ZH(e,t,r){console.debug("---------------------------------------- Graph Data -"),console.debug(["--- Incoming graph data:",e]),console.debug(["--- Incoming energy data:",t]),console.debug(["--- Data to be displayed:",r]),console.debug("-----------------------------------------------------")}let Wl={};const pT=["charging","house","batIn","devices"];let Po=[];function eq(e,t){const{entries:r,names:n,totals:i}=JSON.parse(t);sn.value=new Map(Object.entries(n)),Qm(),Po=[],pT.forEach(o=>{Pe.items.get(o).past.energyPv=0,Pe.items.get(o).past.energyBat=0}),r.length>0&&al(gT(r)),Gm(i,Po)}function tq(e,t){const{entries:r,names:n,totals:i}=JSON.parse(t);sn.value=new Map(Object.entries(n)),Qm(),Po=[],pT.forEach(o=>{Pe.items.get(o).past.energyPv=0,Pe.items.get(o).past.energyBat=0}),r.length>0&&al(gT(r)),Gm(i,Po)}function gT(e){const t=[];let r={};return Wl={},e.forEach(n=>{r=rq(n),t.push(r),Object.keys(r).forEach(i=>{i!="date"&&(r[i]<0&&(console.warn(`Negative energy value for ${i} in row ${r.date}. Ignoring the value.`),r[i]=0),Wl[i]?Wl[i]+=r[i]:Wl[i]=r[i])})}),t}function rq(e){const t={},r=B1("%Y%m%d")(e.date);r&&(t.date=Te.graphMode=="month"?r.getDate():r.getMonth()+1),t.evuOut=0,t.evuIn=0;let n=0,i=0;return Object.entries(e.counter).forEach(([o,a])=>{n+=a.energy_exported,i+=a.energy_imported,a.grid&&(t.evuOut+=a.energy_exported,t.evuIn+=a.energy_imported,Po.includes(o)||Po.push(o))}),Po.length==0&&(t.evuOut=n,t.evuIn=i),t.pv=e.pv.all.energy_exported,Object.entries(e.bat).length>0?(e.bat.all.energy_imported>=0?t.batIn=e.bat.all.energy_imported:(console.warn("ignoring negative value for batIn on day "+t.date),t.batIn=0),e.bat.all.energy_exported>=0?t.batOut=e.bat.all.energy_exported:(console.warn("ignoring negative value for batOut on day "+t.date),t.batOut=0)):(t.batIn=0,t.batOut=0),Object.entries(e.cp).forEach(([o,a])=>{if(o!="all"){if(!Pe.keys().includes(o)){const s=Ye[+o.slice(2)]??Co(o,yt.chargepoint,"var(--color-charging)");Pe.duplicateItem(o,s)}t[o]=a.energy_imported}else t.charging=a.energy_imported}),Object.entries(e.ev).forEach(([o,a])=>{o!="all"&&(t["soc-"+o]=a.soc)}),t.devices=Object.entries(e.sh).reduce((o,a)=>(Pe.keys().includes(a[0])||Pe.duplicateItem(a[0],Ct.get(a[0])),a[1].energy_imported>=0?o+=a[1].energy_imported:console.warn(`Negative energy value for device ${a[0]} in row ${t.date}. Ignoring this value`),o),0),t.counters=0,Object.entries(e.counter).forEach(([o,a])=>{a.grid||(t.counters+=a.power_imported??0,t[o]=a.power_imported??0,Pe.keys().includes(o)||(Pe.duplicateItem(o,ct.get(+o.slice(7))),Pe.items.get(o).showInGraph=!0))}),e.hc&&e.hc.all?t.house=e.hc.all.energy_imported:t.house=t.pv+t.evuIn+t.batOut-t.evuOut-t.batIn-t.charging,t.selfUsage=t.pv-t.evuOut,t}function nq(e,t){const r=iq(e);if(r&&!Pt.value.has(r)){console.warn("Invalid battery index: ",r);return}e=="openWB/bat/config/configured"?wt.isBatteryConfigured=t=="true":e=="openWB/bat/get/power"?+t>0?(Pe.setPower("batIn",+t),Pe.setPower("batOut",0)):(Pe.setPower("batIn",0),Pe.setPower("batOut",-t)):e=="openWB/bat/get/soc"?wt.batterySoc=+t:e=="openWB/bat/get/daily_exported"?Pe.setEnergy("batOut",+t):e=="openWB/bat/get/daily_imported"?Pe.setEnergy("batIn",+t):r&&Pt.value.has(r)&&(e.match(/^openwb\/bat\/[0-9]+\/get\/daily_exported$/i)?Pt.value.get(r).dailyYieldExport=+t:e.match(/^openwb\/bat\/[0-9]+\/get\/daily_imported$/i)?Pt.value.get(r).dailyYieldImport=+t:e.match(/^openwb\/bat\/[0-9]+\/get\/exported$/i)?Pt.value.get(r).exported=+t:e.match(/^openwb\/bat\/[0-9]+\/get\/fault_state$/i)?Pt.value.get(r).faultState=+t:e.match(/^openwb\/bat\/[0-9]+\/get\/fault_str$/i)?Pt.value.get(r).faultStr=t:e.match(/^openwb\/bat\/[0-9]+\/get\/imported$/i)?Pt.value.get(r).imported=+t:e.match(/^openwb\/bat\/[0-9]+\/get\/power$/i)?Pt.value.get(r).power=+t:e.match(/^openwb\/bat\/[0-9]+\/get\/soc$/i)&&(Pt.value.get(r).soc=+t))}function iq(e){let t=0;try{const r=e.match(/(?:\/)([0-9]+)(?=\/)/g);return r?(t=+r[0].replace(/[^0-9]+/g,""),t):void 0}catch(r){console.warn("Parser error in getIndex for topic "+e+": "+r)}}function oq(e,t){if(e=="openWB/optional/ep/configured")mt.active=t=="true";else if(e=="openWB/optional/ep/flexible_tariff/provider"){const r=JSON.parse(t);mt.etProvider=r.name,r.configuration&&(r.configuration.country!=null&&(wt.country=r.configuration.country,mt.country=r.configuration.country),r.configuration.unit!=null&&(mt.unit=r.configuration.unit))}else if(e=="openWB/optional/ep/get/prices"){const r=JSON.parse(t),n=new Map;Object.keys(r).forEach(i=>{n.set(new Date(+i*1e3),r[i]*1e5)}),n.size>0&&(mt.etPriceList=n)}}function sq(e,t){const r=mT(e);if(r!=null&&!(r in Ye)){console.warn("Invalid chargepoint id received: "+r);return}if(e=="openWB/chargepoint/get/power"?Pe.setPower("charging",+t):e=="openWB/chargepoint/get/daily_imported"&&Pe.setEnergy("charging",+t),e=="openWB/chargepoint/get/daily_exported")wt.cpDailyExported=+t;else if(r)if(e.match(/^openwb\/chargepoint\/[0-9]+\/config$/i))if(Ye[r]){const n=JSON.parse(t);Ye[r].name=n.name,Ye[r].icon=n.name}else console.warn("invalid chargepoint index: "+r);else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/state_str$/i))Ye[r].stateStr=JSON.parse(t);else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/fault_str$/i))Ye[r].faultStr=JSON.parse(t);else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/fault_state$/i))Ye[r].faultState=+t;else if(e.match(/^openWB\/chargepoint\/[0-9]+\/get\/power$/i))Ye[r].power=+t;else if(e.match(/^openWB\/chargepoint\/[0-9]+\/get\/daily_imported$/i))Ye[r].dailyYield=+t;else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/plug_state$/i))Ye[r].isPluggedIn=t=="true";else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/charge_state$/i))Ye[r].isCharging=t=="true";else if(e.match(/^openwb\/chargepoint\/[0-9]+\/set\/manual_lock$/i))Ye[r].updateIsLocked(t=="true");else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/enabled$/i))Ye[r].isEnabled=t=="1";else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/phases_in_use/i))Ye[r].phasesInUse=+t;else if(e.match(/^openwb\/chargepoint\/[0-9]+\/set\/current/i))Ye[r].current=+t;else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/currents/i))Ye[r].currents=JSON.parse(t);else if(e.match(/^openwb\/chargepoint\/[0-9]+\/set\/log/i)){const n=JSON.parse(t);Ye[r].chargedSincePlugged=n.imported_since_plugged}else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/connected_vehicle\/soc$/i)){const n=JSON.parse(t);Ye[r].soc=n.soc,Ye[r].waitingForSoc=!1,Ye[r].rangeCharged=n.range_charged,Ye[r].rangeUnit=n.range_unit}else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/connected_vehicle\/info$/i)){const n=JSON.parse(t);Ye[r].vehicleName=String(n.name),Ye[r].updateConnectedVehicle(+n.id)}else if(e.match(/^openwb\/chargepoint\/[0-9]+\/get\/connected_vehicle\/config$/i)){const n=JSON.parse(t);Ye[r].averageConsumption=n.average_consumption}else e.match(/^openwb\/chargepoint\/[0-9]+\/set\/charge_template$/i)&&(Ye[r].chargeTemplate=JSON.parse(t))}function aq(e,t){const r=mT(e);if(r!=null){if(!(r in rt)){const n=new n$(r);rt[r]=n}if(e.match(/^openwb\/vehicle\/[0-9]+\/name$/i))Object.values(Ye).forEach(n=>{n.connectedVehicle==r&&(n.vehicleName=JSON.parse(t))}),rt[r].name=JSON.parse(t);else if(e.match(/^openwb\/vehicle\/[0-9]+\/get\/soc$/i))rt[r].soc=JSON.parse(t);else if(e.match(/^openwb\/vehicle\/[0-9]+\/get\/range$/i))isNaN(+t)?rt[r].range=0:rt[r].range=+t;else if(e.match(/^openwb\/vehicle\/[0-9]+\/charge_template$/i))rt[r].updateChargeTemplateId(+t);else if(e.match(/^openwb\/vehicle\/[0-9]+\/ev_template$/i))rt[r].updateEvTemplateId(+t);else if(e.match(/^openwb\/vehicle\/[0-9]+\/soc_module\/config$/i)){const n=JSON.parse(t);Object.values(Ye).forEach(i=>{i.connectedVehicle==r&&(i.isSocConfigured=n.type!==null,i.isSocManual=n.type=="manual")}),rt[r].isSocConfigured=n.type!==null,rt[r].isSocManual=n.type=="manual"}}}function lq(e,t){if(e.match(/^openwb\/vehicle\/template\/charge_template\/[0-9]+$/i)){const r=e.match(/[0-9]+$/i);if(r){const n=+r[0];qa[n]=JSON.parse(t)}}else if(e.match(/^openwb\/vehicle\/template\/ev_template\/[0-9]+$/i)){const r=e.match(/[0-9]+$/i);if(r){const n=+r[0],i=JSON.parse(t);UE[n]=i}}}function mT(e){let t=0;try{const r=e.match(/(?:\/)([0-9]+)(?=\/)/g);return r?(t=+r[0].replace(/[^0-9]+/g,""),t):void 0}catch(r){console.warn("Parser error in getIndex for topic "+e+": "+r)}}function uq(e,t){e.match(/^openWB\/LegacySmarthome\/config\//i)?cq(e,t):e.match(/^openWB\/LegacySmarthome\/Devices\//i)&&fq(e,t)}function cq(e,t){const r=yT(e);if(r==null)return;Ct.has("sh"+r)||Im("sh"+r);const n=Ct.get("sh"+r);e.match(/^openWB\/LegacySmarthome\/config\/get\/Devices\/[0-9]+\/device_configured$/i)?(n.configured=t!="0",Bg("power"),Bg("energy")):e.match(/^openWB\/LegacySmarthome\/config\/get\/Devices\/[0-9]+\/device_name$/i)?(n.name=t.toString(),n.icon=t.toString()):e.match(/^openWB\/LegacySmarthome\/config\/set\/Devices\/[0-9]+\/mode$/i)?n.isAutomatic=t=="0":e.match(/^openWB\/LegacySmarthome\/config\/get\/Devices\/[0-9]+\/device_canSwitch$/i)?n.canSwitch=t=="1":e.match(/^openWB\/LegacySmarthome\/config\/get\/Devices\/[0-9]+\/device_homeConsumtion$/i)?n.countAsHouse=t=="1":e.match(/^openWB\/LegacySmarthome\/config\/get\/Devices\/[0-9]+\/device_temperatur_configured$/i)&&(n.tempConfigured=+t)}function fq(e,t){const r=yT(e);if(r==null){console.warn("Smarthome: Missing index in "+e);return}Ct.has("sh"+r)||Im("sh"+r);const n=Ct.get("sh"+r);if(e.match(/^openWB\/LegacySmarthome\/Devices\/[0-9]+\/Watt$/i))n.power=+t,Bg("power");else if(!e.match(/^openWB\/LegacySmarthome\/Devices\/[0-9]+\/Wh$/i)){if(e.match(/^openWB\/LegacySmarthome\/Devices\/[0-9]+\/RunningTimeToday$/i))n.runningTime=+t;else if(e.match(/^openWB\/LegacySmarthome\/Devices\/[0-9]+\/TemperatureSensor0$/i))n.temp[0]=+t;else if(e.match(/^openWB\/LegacySmarthome\/Devices\/[0-9]+\/TemperatureSensor1$/i))n.temp[1]=+t;else if(e.match(/^openWB\/LegacySmarthome\/Devices\/[0-9]+\/TemperatureSensor2$/i))n.temp[2]=+t;else if(e.match(/^openWB\/LegacySmartHome\/Devices\/[0-9]+\/Status$/i))switch(+t){case 10:n.status="off";break;case 11:n.status="on";break;case 20:n.status="detection";break;case 30:n.status="timeout";break;default:n.status="off"}}}function Bg(e){switch(e){case"power":Pe.setPower("devices",[...Ct.values()].filter(t=>t.configured&&!t.countAsHouse).reduce((t,r)=>t+r.power,0));break;case"energy":Pe.setEnergy("devices",[...Ct.values()].filter(t=>t.configured&&!t.countAsHouse).reduce((t,r)=>t+r.now.energy,0));break;default:console.error("Unknown category")}}function yT(e){let t=0;try{const r=e.match(/(?:\/)([0-9]+)(?=\/)/g);return r?(t=+r[0].replace(/[^0-9]+/g,""),t):void 0}catch(r){console.warn("Parser error in getIndex for topic "+e+": "+r)}}const bc=Dt([]);let dq=class vT{name;children;count;lastValue;constructor(t,r,n,i){this.name=t,this.children=r,this.count=n,this.lastValue=i}insert(t,r){if(t.length){const n=t.splice(1);if(t[0]==this.name)if(n.length){let i=!1;if(this.children.forEach(o=>{o.name==n[0]&&(o.insert(n,r),i=!0)}),!i){const o=new vT(n[0],[],0,"");o.insert(n,r),this.children.push(o)}}else this.count=this.count+1,this.lastValue=r}}};function hq(e,t){const r=e.split("/");if(r.length){let n=!1;if(bc.forEach(i=>{i.name==r[0]&&(i.insert(r,t),n=!0)}),!n){const i=new dq(r[0],[],0,"");bc.push(i),i.insert(r,t)}}}const pq=["openWB/counter/#","openWB/bat/#","openWB/pv/#","openWB/chargepoint/#","openWB/vehicle/#","openWB/general/chargemode_config/bat/#","openWB/general/web_theme","openWB/optional/ep/#","openWB/system/#","openWB/LegacySmartHome/#","openWB/command/"+Hm()+"/#"];function gq(){e$(mq),pq.forEach(e=>{Io(e)}),Ht()}function mq(e,t){hq(e,t.toString());const r=t.toString();e.match(/^openwb\/counter\/[0-9]+\//i)?yq(e,r):e.match(/^openwb\/counter\//i)?vq(e,r):e.match(/^openwb\/bat\//i)?nq(e,r):e.match(/^openwb\/pv\//i)?bq(e,r):e.match(/^openwb\/chargepoint\//i)?sq(e,r):e.match(/^openwb\/vehicle\/template\//i)?lq(e,r):e.match(/^openwb\/vehicle\//i)?aq(e,r):e.match(/^openwb\/general\/chargemode_config\/bat\//i)?_q(e,r):e.match(/^openwb\/general\/web_theme/i)?wq(e,r):e.match(/^openwb\/graph\//i)?GH(e,r):e.match(/^openwb\/log\/daily\//i)?XH(e,r):e.match(/^openwb\/log\/monthly\//i)?eq(e,r):e.match(/^openwb\/log\/yearly\//i)?tq(e,r):e.match(/^openwb\/optional\/ep\//i)?oq(e,r):e.match(/^openwb\/system\//i)?Eq(e,r):e.match(/^openwb\/LegacySmartHome\//i)?uq(e,r):e.match(/^openwb\/command\//i)&&xq(e,r)}function yq(e,t){const r=_T(e);r!=null&&(r==wt.evuId&&Sq(e,t),ct.has(r)?e.match(/^openWB\/counter\/[0-9]+\/get\/power$/i)?(ct.get(r).power=+t,l$("power")):e.match(/^openWB\/counter\/[0-9]+\/get\/daily_imported$/i)?(ct.get(r).energy_imported=+t,ct.get(r).now.energy=+t):e.match(/^openWB\/counter\/[0-9]+\/get\/daily_exported$/i)&&(ct.get(r).energy_exported=+t):console.warn("Invalid counter index: "+r))}function vq(e,t){if(e.match(/^openwb\/counter\/get\/hierarchy$/i)){const r=JSON.parse(t);r.length&&(o$(),A$(),wt.evuId=r[0].id,bT(r[0]))}else e.match(/^openwb\/counter\/set\/home_consumption$/i)?Pe.setPower("house",+t):e.match(/^openwb\/counter\/set\/daily_yield_home_consumption$/i)&&Pe.setEnergy("house",+t)}function bT(e){switch(e.type){case"counter":a$(e.id,e.type,e.id==wt.evuId),Ce.countersToShow.includes(e.id)&&(ct.get(e.id).showInGraph=!0);break;case"cp":i$(e.id);break;case"bat":HE(e.id);break;case"inverter":E$(e.id);break}e.children.forEach(t=>bT(t))}function bq(e,t){const r=_T(e);r&&!Jt.value.has(r)?console.warn("Invalid PV system index: "+r):e=="openWB/pv/get/power"?Pe.setPower("pv",-t):e=="openWB/pv/get/daily_exported"?Pe.setEnergy("pv",+t):e.match(/^openWB\/pv\/[0-9]+\/get\/power$/i)?Jt.value.get(r).power=+t:e.match(/^openWB\/pv\/[0-9]+\/get\/daily_exported$/i)?Jt.value.get(r).now.energy=+t:e.match(/^openWB\/pv\/[0-9]+\/get\/monthly_exported$/i)?Jt.value.get(r).energy_month=+t:e.match(/^openWB\/pv\/[0-9]+\/get\/yearly_exported$/i)?Jt.value.get(r).energy_year=+t:e.match(/^openWB\/pv\/[0-9]+\/get\/exported$/i)&&(Jt.value.get(r).energy_total=+t)}function _q(e,t){const r=e.split("/");r.length>0&&r[4]==="mode"&&wt.updatePvBatteryPriority(JSON.parse(t))}function wq(e,t){const r=JSON.parse(t).configuration;Ce.setShowRelativeArcs(r.showRelativeArcs),Ce.setDisplayMode(r.displayMode),Ce.setLiveGraphDuration(r.liveGraphDuration),Ce.setShowGrid(r.showGrid),Ce.setSmartHomeColors(r.smartHomeColors),Ce.setDecimalPlaces(r.decimalPlaces),Ce.setShowCounters(r.showCounters),Ce.setShowVehicles(r.showVehicles),Ce.setShowStandardVehicle(r.showStandardVehicle),Ce.setShowPrices(r.showPrices),Ce.setLowerPriceBound(r.lowerPriceBound),Ce.setUpperPriceBound(r.upperPriceBound),Ce.setShowInverters(r.showInverters),Ce.setAlternativeEnergy(r.alternativeEnergy)}function Sq(e,t){switch(e.split("/")[4]){case"power":+t>0?(Pe.setPower("evuIn",+t),Pe.setPower("evuOut",0)):(Pe.setPower("evuIn",0),Pe.setPower("evuOut",-t));break;case"daily_imported":Pe.setEnergy("evuIn",+t);break;case"daily_exported":Pe.setEnergy("evuOut",+t);break}}function Eq(e,t){if(e.match(/^openWB\/system\/device\/[0-9]+\/component\/[0-9]+\/config$/i)){const r=JSON.parse(t);switch(r.type){case"counter":case"consumption_counter":ct.get(r.id)&&(ct.get(r.id).name=r.name,ct.get(r.id).icon=r.name);break;case"inverter":case"inverter_secondary":Jt.value.has(r.id)||Jt.value.set(r.id,new H1(r.id)),Jt.value.get(r.id).name=r.name;break;case"bat":Pt.value.has(r.id)||HE(r.id),Pt.value.get(r.id).name=r.name}}}function xq(e,t){const r=e.split("/");if(e.match(/^openWB\/command\/[a-z]+\/error$/i)&&r[2]==Hm()){const n=JSON.parse(t);console.error(`Error message from openWB: Command: ${n.command} Data: JSON.stringify(err.data) Error: diff --git a/packages/modules/web_themes/colors/web/index.html b/packages/modules/web_themes/colors/web/index.html index 8604453d93..96715e912c 100644 --- a/packages/modules/web_themes/colors/web/index.html +++ b/packages/modules/web_themes/colors/web/index.html @@ -24,7 +24,7 @@ openWB - + diff --git a/packages/modules/web_themes/koala/source/src/components/ChargePointFaultIcon.vue b/packages/modules/web_themes/koala/source/src/components/ChargePointFaultIcon.vue new file mode 100644 index 0000000000..2e09481d7b --- /dev/null +++ b/packages/modules/web_themes/koala/source/src/components/ChargePointFaultIcon.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/packages/modules/web_themes/koala/source/src/components/ChargePointInformation.vue b/packages/modules/web_themes/koala/source/src/components/ChargePointInformation.vue index 6187feb21b..9f41e9fecd 100644 --- a/packages/modules/web_themes/koala/source/src/components/ChargePointInformation.vue +++ b/packages/modules/web_themes/koala/source/src/components/ChargePointInformation.vue @@ -26,13 +26,21 @@ @@ -70,13 +78,23 @@ @@ -133,7 +151,7 @@ +openWB diff --git a/packages/modules/web_themes/koala/web/sw.js b/packages/modules/web_themes/koala/web/sw.js index 6d377b2a65..7f9595cd21 100644 --- a/packages/modules/web_themes/koala/web/sw.js +++ b/packages/modules/web_themes/koala/web/sw.js @@ -1 +1 @@ -if(!self.define){let e,s={};const i=(i,a)=>(i=new URL(i+".js",a).href,s[i]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=s,document.head.appendChild(e)}else e=i,importScripts(i),s()}).then(()=>{let e=s[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e}));self.define=(a,n)=>{const r=e||("document"in self?document.currentScript.src:"")||location.href;if(s[r])return;let d={};const f=e=>i(e,r),c={module:{uri:r},exports:d,require:f};s[r]=Promise.all(a.map(e=>c[e]||f(e))).then(e=>(n(...e),d))}}define(["./workbox-778a14ff"],function(e){"use strict";e.setCacheNameDetails({prefix:"openwb-koala-web-theme"}),self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"manifest.json",revision:"291b1cf54805e7cc540854a2601f651b"},{url:"index.html",revision:"5bd7eb050bb305af8e1b724ce1036e42"},{url:"favicon.ico",revision:"21ec9d90ddf9217f71db985765970460"},{url:"icons/openWB_logo_dark.png",revision:"fb8fe2728744be30d7beb07a78c6d886"},{url:"icons/icon-96x96.png",revision:"2f9771755fc8559353a62023c3b31976"},{url:"icons/icon-72x72.png",revision:"a4fe9ae16f8df3b31b1392a9e1e17aa3"},{url:"icons/icon-512x512.png",revision:"ed6ff495b6d0d2240682714e78d1a9f2"},{url:"icons/icon-48x48.png",revision:"ba12339bebba853069fdcad3ae2a6e40"},{url:"icons/icon-256x256.png",revision:"9043ec80cc89c1c6610b209325f94360"},{url:"icons/icon-192x192.png",revision:"bc936b6464631f18b89afd54ed62d04d"},{url:"icons/icon-128x128.png",revision:"86dad79e449e75c39c6d373b85b9f486"},{url:"icons/icon-1024x1024.png",revision:"e261ff64a764a7c5802309561cf190d4"},{url:"icons/favicon-96x96.png",revision:"830d36dc970ffa9592e61af7ef771d5d"},{url:"icons/favicon-32x32.png",revision:"0d30a992b5f03bd43f1b393917dc1714"},{url:"icons/favicon-16x16.png",revision:"7834f799f3bc7a6adb0704cb8a25a2c6"},{url:"icons/favicon-128x128.png",revision:"11a65eacbba8a7148cb1d00f77d5307a"},{url:"assets/store-init-BXq7L9zY.js",revision:"364a9f19606b3ac85a6933313d5705b2"},{url:"assets/runtime-core.esm-bundler-OIYNE8jX.js",revision:"68270113dfe4355c1ac9852f87858a6d"},{url:"assets/mqtt-store-De_G5kbR.js",revision:"4b542b0bc791799d9ff3a8e4c346fab7"},{url:"assets/index-_sSIWMSm.js",revision:"776cfd897294e9e2924c65ad65fd769d"},{url:"assets/index-BAxanY6a.css",revision:"fd429d2d6da5abb78791fbed06fa1168"},{url:"assets/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ-D-x-0Q06.woff2",revision:"a4160421d2605545f69a4cd6cd642902"},{url:"assets/flUhRq6tzZclQEJ-Vdg-IuiaDsNa-OUIwM9U8.woff",revision:"a1bb97d8ebe5c1b573d474d070e19f41"},{url:"assets/defineProperty-BbfpZ9Tg.js",revision:"489a6e8420626ba7812b1b715b5ed17e"},{url:"assets/chart-defaults-mwJ76vth.js",revision:"2a8cbc7011bcf9ede410fd7311b605e8"},{url:"assets/chart-Bi1ERiJi.js",revision:"2e51adc7917b74877e7a209f480a310a"},{url:"assets/_plugin-vue_export-helper-B2Q8hCKi.js",revision:"aa6209821df7dde531da5a4f4a4541c1"},{url:"assets/QBtn-B8lH8KwG.js",revision:"a2aa90247722504eab959f60e25e79f0"},{url:"assets/MainLayout-DXab2ahf.css",revision:"c6bc5eca9939a05a1a58dac5d5e38c93"},{url:"assets/MainLayout-BPjaHbB8.js",revision:"d53b840f6a64bbf0ed589168acf7998c"},{url:"assets/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWubEbVmUiAw-BG9VWE5v.woff",revision:"a8ec1aa4d529692688441dd7883f1f0b"},{url:"assets/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWubEbFmUiAw-CnAg2DeQ.woff",revision:"031c156aa8b7f18cf07b98ffa68d15da"},{url:"assets/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWub2bVmUiAw-D0406B4n.woff",revision:"a7dc25f9c5467fc7bdf619bdbfdf373d"},{url:"assets/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWuaabVmUiAw-CoAZ_DKt.woff",revision:"98bd23c42353bdd096fc3fb83dede1b8"},{url:"assets/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWuZtalmUiAw-B7du-70m.woff",revision:"6de3ac4d52ff3c57d2389353a300ea0a"},{url:"assets/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWuYjalmUiAw-k1h7X_-h.woff",revision:"c5c1ecf75d420934b20ff22275fbacc0"},{url:"assets/IndexPage-XHw-0b-P.css",revision:"d5650f0a82c82b30762ec310a3e77ce4"},{url:"assets/IndexPage-Bj96liUZ.js",revision:"2fe56ebf0d11a9389452a9cd2a8f2244"},{url:"assets/ErrorNotFound-T6zWoaxe.js",revision:"36b219467ef95269fd8579d4d0e98197"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html"),{denylist:[/sw\.js$/,/workbox-(.)*\\.js$/]}))}); +if(!self.define){let e,s={};const i=(i,a)=>(i=new URL(i+".js",a).href,s[i]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=s,document.head.appendChild(e)}else e=i,importScripts(i),s()}).then(()=>{let e=s[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e}));self.define=(a,n)=>{const f=e||("document"in self?document.currentScript.src:"")||location.href;if(s[f])return;let r={};const c=e=>i(e,f),o={module:{uri:f},exports:r,require:c};s[f]=Promise.all(a.map(e=>o[e]||c(e))).then(e=>(n(...e),r))}}define(["./workbox-778a14ff"],function(e){"use strict";e.setCacheNameDetails({prefix:"openwb-koala-web-theme"}),self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"manifest.json",revision:"291b1cf54805e7cc540854a2601f651b"},{url:"index.html",revision:"484ee4707450a678ff77ab45ea165899"},{url:"favicon.ico",revision:"21ec9d90ddf9217f71db985765970460"},{url:"icons/openWB_logo_dark.png",revision:"fb8fe2728744be30d7beb07a78c6d886"},{url:"icons/icon-96x96.png",revision:"2f9771755fc8559353a62023c3b31976"},{url:"icons/icon-72x72.png",revision:"a4fe9ae16f8df3b31b1392a9e1e17aa3"},{url:"icons/icon-512x512.png",revision:"ed6ff495b6d0d2240682714e78d1a9f2"},{url:"icons/icon-48x48.png",revision:"ba12339bebba853069fdcad3ae2a6e40"},{url:"icons/icon-256x256.png",revision:"9043ec80cc89c1c6610b209325f94360"},{url:"icons/icon-192x192.png",revision:"bc936b6464631f18b89afd54ed62d04d"},{url:"icons/icon-128x128.png",revision:"86dad79e449e75c39c6d373b85b9f486"},{url:"icons/icon-1024x1024.png",revision:"e261ff64a764a7c5802309561cf190d4"},{url:"icons/favicon-96x96.png",revision:"830d36dc970ffa9592e61af7ef771d5d"},{url:"icons/favicon-32x32.png",revision:"0d30a992b5f03bd43f1b393917dc1714"},{url:"icons/favicon-16x16.png",revision:"7834f799f3bc7a6adb0704cb8a25a2c6"},{url:"icons/favicon-128x128.png",revision:"11a65eacbba8a7148cb1d00f77d5307a"},{url:"assets/store-init-vCdUq9au.js",revision:"7ee92f6a2c59923c3e147033fa967c3a"},{url:"assets/runtime-core.esm-bundler-OIYNE8jX.js",revision:"68270113dfe4355c1ac9852f87858a6d"},{url:"assets/mqtt-store-BL4obglv.js",revision:"f7b72e5413be70382af9c31f198ee092"},{url:"assets/index-DUOuyZZR.js",revision:"ab8ab8793dce7cff365e8da24a77ef72"},{url:"assets/index-BAxanY6a.css",revision:"fd429d2d6da5abb78791fbed06fa1168"},{url:"assets/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ-D-x-0Q06.woff2",revision:"a4160421d2605545f69a4cd6cd642902"},{url:"assets/flUhRq6tzZclQEJ-Vdg-IuiaDsNa-OUIwM9U8.woff",revision:"a1bb97d8ebe5c1b573d474d070e19f41"},{url:"assets/defineProperty-BbfpZ9Tg.js",revision:"489a6e8420626ba7812b1b715b5ed17e"},{url:"assets/chart-defaults-B4o93AaF.js",revision:"8bc4df1771ee217808f9e399d15ab624"},{url:"assets/chart-Bi1ERiJi.js",revision:"2e51adc7917b74877e7a209f480a310a"},{url:"assets/_plugin-vue_export-helper-BnthiKAF.js",revision:"b7b310d89fce090fca9a979895c4638a"},{url:"assets/QBtn-B8lH8KwG.js",revision:"a2aa90247722504eab959f60e25e79f0"},{url:"assets/MainLayout-pmqFw_iR.js",revision:"7fd8cd7c22cee949b9aea9fcc6f682f8"},{url:"assets/MainLayout-DXab2ahf.css",revision:"c6bc5eca9939a05a1a58dac5d5e38c93"},{url:"assets/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWubEbVmUiAw-BG9VWE5v.woff",revision:"a8ec1aa4d529692688441dd7883f1f0b"},{url:"assets/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWubEbFmUiAw-CnAg2DeQ.woff",revision:"031c156aa8b7f18cf07b98ffa68d15da"},{url:"assets/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWub2bVmUiAw-D0406B4n.woff",revision:"a7dc25f9c5467fc7bdf619bdbfdf373d"},{url:"assets/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWuaabVmUiAw-CoAZ_DKt.woff",revision:"98bd23c42353bdd096fc3fb83dede1b8"},{url:"assets/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWuZtalmUiAw-B7du-70m.woff",revision:"6de3ac4d52ff3c57d2389353a300ea0a"},{url:"assets/KFOMCnqEu92Fr1ME7kSn66aGLdTylUAMQXC89YmC2DPNWuYjalmUiAw-k1h7X_-h.woff",revision:"c5c1ecf75d420934b20ff22275fbacc0"},{url:"assets/IndexPage-JQT6445W.js",revision:"df3b21408d4094b6cbf8bb1079de16b5"},{url:"assets/IndexPage-DQ6eiRT5.css",revision:"54ef9f33c0bbce55f5ae75d32f19e3b5"},{url:"assets/ErrorNotFound-T6zWoaxe.js",revision:"36b219467ef95269fd8579d4d0e98197"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html"),{denylist:[/sw\.js$/,/workbox-(.)*\\.js$/]}))}); diff --git a/web/settings/assets/ActiveBatControlConfiguration-BVUZdovw.js b/web/settings/assets/ActiveBatControlConfiguration-BVUZdovw.js new file mode 100644 index 0000000000..c2bc1fc210 --- /dev/null +++ b/web/settings/assets/ActiveBatControlConfiguration-BVUZdovw.js @@ -0,0 +1 @@ +import{C as $}from"./index-CE-5DBwq.js";import{F as C,l as E,a4 as D,ag as L,ah as F}from"./vendor-fortawesome-DplTMxoa.js";import{_ as N,m as b,l as i,f as s,y as c,q as a,u as r,B as o,x as l,z as h,D as q,K as y,L as V,O as M,J as B}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";E.add(D,L,F);const P={name:"OpenwbActiveBatControlConfigurationView",components:{FontAwesomeIcon:C},mixins:[$],emits:["save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/bat/+/get/max_charge_power",writeable:!0},{topic:"openWB/bat/+/get/max_discharge_power",writeable:!0},{topic:"openWB/bat/+/get/power_limit_controllable",writeable:!1},{topic:"openWB/bat/config/bat_control_activated",writeable:!0},{topic:"openWB/bat/config/bat_control_max_soc",writeable:!0},{topic:"openWB/bat/config/bat_control_min_soc",writeable:!0},{topic:"openWB/bat/config/charge_limit",writeable:!0},{topic:"openWB/bat/config/manual_mode",writeable:!0},{topic:"openWB/bat/config/power_limit_condition",writeable:!0},{topic:"openWB/bat/config/power_limit_mode",writeable:!0},{topic:"openWB/bat/config/price_charge_activated",writeable:!0},{topic:"openWB/bat/config/price_limit",writeable:!0},{topic:"openWB/bat/config/price_limit_activated",writeable:!0},{topic:"openWB/general/chargemode_config/bat/mode",writeable:!0},{topic:"openWB/general/chargemode_config/bat/power_discharge",writeable:!0},{topic:"openWB/general/chargemode_config/bat/power_discharge_active",writeable:!0},{topic:"openWB/general/chargemode_config/bat/power_reserve",writeable:!0},{topic:"openWB/general/chargemode_config/bat/power_reserve_active",writeable:!0},{topic:"openWB/general/chargemode_config/bat/max_soc",writeable:!0},{topic:"openWB/general/chargemode_config/bat/min_soc",writeable:!0},{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/system/device/+/component/+/config",writeable:!1},{topic:"openWB/optional/ep/configured",writeable:!1}]}},computed:{batMode:{get(){return this.$store.state.mqtt["openWB/general/chargemode_config/bat/mode"]},set(t){this.updateState("openWB/general/chargemode_config/bat/mode",t)}},numBatteriesInstalled(){return Object.keys(this.batteryConfigs).length},batteryConfigs(){return this.$store.state.mqtt["openWB/general/extern"]===!0?{}:this.filterComponentsByType(this.getWildcardTopics("openWB/system/device/+/component/+/config"),"bat")},controllableBatteryConfigs(){return this.$store.state.mqtt["openWB/general/extern"]===!0?{}:Object.keys(this.batteryConfigs).filter(t=>{const e=this.batteryConfigs[t].id;return this.$store.state.mqtt[`openWB/bat/${e}/get/power_limit_controllable`]===!0}).reduce((t,e)=>({...t,[e]:this.batteryConfigs[e]}),{})},hasNonControllableBatteries(){return this.$store.state.mqtt["openWB/general/extern"]===!0?!1:Object.keys(this.batteryConfigs).some(t=>{const e=this.batteryConfigs[t].id;return this.$store.state.mqtt[`openWB/bat/${e}/get/power_limit_controllable`]===!1})},hasControllableBatteries(){return Object.keys(this.controllableBatteryConfigs).length>0},priceLimitUpper(){return this.formatPrice(this.$store.state.mqtt["openWB/bat/config/price_limit"])},priceLimitLower(){return this.formatPrice(this.$store.state.mqtt["openWB/bat/config/charge_limit"])},batteryBehaviorDescription(){const t=this.$store.state.mqtt["openWB/bat/config/power_limit_condition"],e=this.$store.state.mqtt["openWB/bat/config/power_limit_mode"],g=this.$store.state.mqtt["openWB/bat/config/manual_mode"],d=[];return t==="manual"&&d.push("Die Konfiguration wird dauerhaft angewendet."),t==="vehicle_charging"&&d.push("Die Konfiguration wird angewendet, sobald ein Fahrzeug lädt."),t==="price_limit"&&d.push(`Die Konfiguration wird abhängig vom Strompreis angewendet (zwischen ${this.priceLimitLower} und ${this.priceLimitUpper} ct/kWh).`),(t==="manual"||t==="vehicle_charging")&&(g==="manual_disable"&&d.push("Der Speicher arbeitet in Eigenregelung."),g==="manual_limit"&&d.push("Der konfigurierte Regelmodus wird angewendet."),g==="manual_charge"&&d.push("Der Speicher wird aktiv geladen.")),(t==="price_limit"||g==="manual_limit")&&(e==="mode_no_discharge"&&d.push("Die Speicherentladung ist vollständig gesperrt. Alle Verbraucher werden durch Netz oder PV versorgt."),e==="mode_discharge_home_consumption"&&d.push("Der Speicher versorgt ausschließlich den Hausverbrauch. Fahrzeugladung erfolgt nicht aus dem Speicher."),e==="mode_charge_pv_production"&&d.push("PV-Ertrag wird vorrangig im Speicher gespeichert. Verbraucher werden bei Bedarf aus dem Netz versorgt.")),d}},methods:{filterComponentsByType(t,e){return Object.keys(t).filter(g=>t[g].type.includes(e)).reduce((g,d)=>({...g,[d]:t[d]}),{})},handlePowerLimitConditionChange(t){this.updateState("openWB/bat/config/power_limit_condition",t),t==="vehicle_charging"&&this.updateState("openWB/bat/config/manual_mode","manual_limit")},formatPrice(t){return((t||0)*1e5).toLocaleString(void 0,{minimumFractionDigits:3,maximumFractionDigits:3})}}},U={class:"batteryConfig"},A={name:"batteryConfigForm"},H={key:0},R={key:1},O={key:0},T={key:1},I={key:2},K={key:0},j={key:0},J={key:2,class:"mb-3"},G={key:3},Q={key:0},X={key:0},Y={key:1},Z={key:2},x={key:0},ee={key:0},te={key:1},ne={key:2},re={key:0},ie={key:1},ae={key:2},oe={key:1},se={key:0},le={key:1},de={key:2},ue={key:2},ge={key:1};function me(t,e,g,d,pe,u){const m=b("openwb-base-alert"),v=b("font-awesome-icon"),p=b("openwb-base-button-group-input"),w=b("openwb-base-range-input"),f=b("openwb-base-heading"),_=b("openwb-base-number-input"),S=b("openwb-base-card"),z=b("openwb-base-submit-buttons");return i(),s("div",U,[c("form",A,[a(S,{title:"Passive Speicherbeachtung (PV)"},{default:r(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(i(),s("div",H,[a(m,{subtype:"info"},{default:r(()=>[...e[20]||(e[20]=[o(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(i(),s("div",R,[a(m,{subtype:"info"},{default:r(()=>[...e[21]||(e[21]=[o(' Die Regelmodi der Speicherbeachtung erfolgen "passiv" durch Anpassung der Fahrzeug-Ladeleistung. PV-Überschuss wird, je nach Konfiguration, entweder dem Fahrzeug zugeteilt oder dem Speicher überlassen. Netz- und Speicherbezug wird, sofern nicht anders konfiguriert, vermieden. ',-1)])]),_:1}),a(p,{modelValue:u.batMode,"onUpdate:modelValue":e[0]||(e[0]=n=>u.batMode=n),title:"Ladepriorität",buttons:[{buttonValue:"ev_mode"},{buttonValue:"bat_mode"},{buttonValue:"min_soc_bat_mode"}]},{"label-ev_mode":r(()=>[a(v,{"fixed-width":"",icon:["fas","car-side"]}),e[22]||(e[22]=o(" Fahrzeuge ",-1))]),"label-bat_mode":r(()=>[a(v,{"fixed-width":"",icon:["fas","fa-car-battery"]}),e[23]||(e[23]=o(" Speicher ",-1))]),"label-min_soc_bat_mode":r(()=>[a(v,{"fixed-width":"",icon:["fas","fa-battery-half"]}),e[24]||(e[24]=o(" Nach SoC des Speichers ",-1))]),help:r(()=>[u.batMode==="ev_mode"?(i(),s("div",O," Der gesamte Überschuss wird in das EV geladen. Wird mehr Überschuss erzeugt als die Fahrzeuge abnehmen, findet auch eine Speicherladung statt. ")):l("",!0),u.batMode==="bat_mode"?(i(),s("div",T," Der gesamte Überschuss wird in den Speicher geladen. Ist die maximale Ladeleistung des Speichers erreicht und es wird eingespeist, wird dieser Überschuss unter Beachtung der Einschaltschwelle in die Fahrzeuge geladen. ")):l("",!0),u.batMode==="min_soc_bat_mode"?(i(),s("div",I,' Verhält sich bis zum Erreichen des Mindest-SoC wie "Ladepriorität Speicher" und danach wie "Ladepriorität Fahrzeuge" - fällt der Speicher wieder unter den Mindest-SoC, erhält er erneut Vorrang, bis er den Maximal-SoC erreicht hat. Die maximale Leistung der Speicherbe- und entladung lässt sich hier festlegen. ')):l("",!0)]),_:1},8,["modelValue"]),u.batMode==="min_soc_bat_mode"?(i(),s("div",K,[a(w,{title:"Mindest-SoC des Speichers",min:0,max:100,step:1,unit:"%",required:"","model-value":t.$store.state.mqtt["openWB/general/chargemode_config/bat/min_soc"],"onUpdate:modelValue":e[1]||(e[1]=n=>(t.updateState("openWB/general/chargemode_config/bat/min_soc",n),t.updateState("openWB/general/chargemode_config/bat/max_soc",t.$store.state.mqtt["openWB/general/chargemode_config/bat/min_soc"][...e[25]||(e[25]=[o(" Unterhalb des Mindest-SoC wird vorhandener PV-Überschuss bevorzugt in den Speicher geladen. Oberhalb des Mindest-SoC hat die Fahrzeugladung Priorität - außer der Speicher ist zuvor unter den Mindest-SoC gefallen: dann behält der Speicher die Priorität, bis er den Maximal-SoC erreicht hat. ",-1)])]),_:1},8,["model-value"]),a(w,{title:"Maximal-SoC des Speichers",min:0,max:100,step:1,unit:"%",required:"","model-value":t.$store.state.mqtt["openWB/general/chargemode_config/bat/max_soc"],"onUpdate:modelValue":e[2]||(e[2]=n=>(t.updateState("openWB/general/chargemode_config/bat/max_soc",n),t.updateState("openWB/general/chargemode_config/bat/min_soc",t.$store.state.mqtt["openWB/general/chargemode_config/bat/max_soc"]>t.$store.state.mqtt["openWB/general/chargemode_config/bat/min_soc"]?t.$store.state.mqtt["openWB/general/chargemode_config/bat/min_soc"]:n)))},{help:r(()=>[...e[26]||(e[26]=[o(" Wird der Maximal-SoC überschritten, darf der Speicher bis zum Erreichen des Mindest-SoC zur Fahrzeugladung mitbenutzt werden. ",-1)])]),_:1},8,["model-value"]),t.$store.state.mqtt["openWB/general/chargemode_config/bat/min_soc"]==t.$store.state.mqtt["openWB/general/chargemode_config/bat/max_soc"]?(i(),h(m,{key:0,subtype:"info"},{default:r(()=>[...e[27]||(e[27]=[o(" Bei identischen SoC Angaben findet keine Speicherhysterese statt. ",-1)])]),_:1})):l("",!0),a(f,null,{default:r(()=>[...e[28]||(e[28]=[o(" Speicher-Ladeleistung unterhalb Mindest-SoC ",-1)])]),_:1}),a(p,{title:"Nur eine bestimmte Ladeleistung reservieren",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/chargemode_config/bat/power_reserve_active"],"onUpdate:modelValue":e[3]||(e[3]=n=>t.updateState("openWB/general/chargemode_config/bat/power_reserve_active",n))},q({_:2},[t.$store.state.mqtt["openWB/general/chargemode_config/bat/power_reserve_active"]?{name:"help",fn:r(()=>[e[29]||(e[29]=o(" ACHTUNG: Der hier eingestellte Wert darf die maximale Ladeleistung des Speichers nicht überschreiten!",-1)),e[30]||(e[30]=c("br",null,null,-1)),e[31]||(e[31]=o(" Befindet sich der Speicher unterhalb des Mindest-SoC, wird er mit der hier eingestellten Speicherladeleistung geladen. Verbleibender Überschuss wird in die Fahrzeuge geladen. ",-1))]),key:"0"}:{name:"help",fn:r(()=>[e[32]||(e[32]=o(" Befindet sich der Speicher unterhalb des Mindest-SoC, wird er priorisiert geladen. ",-1))]),key:"1"}]),1032,["model-value"]),t.$store.state.mqtt["openWB/general/chargemode_config/bat/power_reserve_active"]?(i(),h(_,{key:1,title:"Reservierte Ladeleistung",min:.1,step:.1,unit:"kW",required:"","model-value":t.$store.state.mqtt["openWB/general/chargemode_config/bat/power_reserve"]/1e3,"onUpdate:modelValue":e[4]||(e[4]=n=>t.updateState("openWB/general/chargemode_config/bat/power_reserve",n*1e3))},null,8,["model-value"])):l("",!0),a(f,null,{default:r(()=>[...e[33]||(e[33]=[o(" Speicher-SoC oberhalb Maximal-SoC ",-1)])]),_:1}),a(p,{title:"Entladung des Speichers erlauben",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/chargemode_config/bat/power_discharge_active"],"onUpdate:modelValue":e[5]||(e[5]=n=>t.updateState("openWB/general/chargemode_config/bat/power_discharge_active",n))},q({_:2},[t.$store.state.mqtt["openWB/general/chargemode_config/bat/power_discharge_active"]?{name:"help",fn:r(()=>[e[34]||(e[34]=o(" ACHTUNG: Der hier eingestellte Wert darf die maximale Entladeleistung des Speichers nicht überschreiten! Wird der Maximal-SoC überschritten, wird die PV-Ladung mit der hier eingestellten Speicherentladeleistung unterstützt. Der Speicher darf bis zum Mindest-SoC entladen werden. Die erlaubte Entladeleistung des Speichers wird dem Überschuss zum Erreichen der Einschaltschwelle hinzugerechnet. ",-1))]),key:"0"}:{name:"help",fn:r(()=>[e[35]||(e[35]=o(" Oberhalb des Maximal-SoC wird der Speicher nicht für die Fahrzeugladung mitgenutzt. ",-1))]),key:"1"}]),1032,["model-value"]),t.$store.state.mqtt["openWB/general/chargemode_config/bat/power_discharge_active"]?(i(),h(_,{key:2,title:"Erlaubte Entladeleistung",min:.1,step:.1,unit:"kW",required:"","model-value":t.$store.state.mqtt["openWB/general/chargemode_config/bat/power_discharge"]/1e3,"onUpdate:modelValue":e[6]||(e[6]=n=>t.updateState("openWB/general/chargemode_config/bat/power_discharge",n*1e3))},null,8,["model-value"])):l("",!0)])):l("",!0)]))]),_:1}),a(S,{title:"Aktive Speichersteuerung"},{default:r(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(i(),s("div",j,[a(m,{subtype:"info"},{default:r(()=>[...e[36]||(e[36]=[o(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(i(),h(m,{key:1,subtype:"warning",class:"mb-3"},{default:r(()=>[...e[37]||(e[37]=[c("p",null,[o(" Die aktive Speichersteuerung durch openWB basiert auf öffentlich zugänglichen Informationen zu den verschiedenen Speichersystemen. Diese können auch nicht vom Hersteller freigegebene Informationen beinhalten."),c("br"),o(' Fragen bezüglich der Gewährleistung und Hardwarekompatibilität sind vor der Nutzung mit dem Hersteller zu klären. openWB übernimmt keine Haftung für Schäden, welche aus der Nutzung der "aktiven Speichersteuerung" entstehen. Mit der Aktivierung der aktiven Speichersteuerung (Schalter unten) bestätigst du, dass du die Hinweise gelesen und verstanden hast und die Verantwortung für die Nutzung der aktiven Speichersteuerung übernimmst. ')],-1)])]),_:1})),a(p,{title:"Speicher aktiv Steuern",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/bat/config/bat_control_activated"],"onUpdate:modelValue":e[7]||(e[7]=n=>t.updateState("openWB/bat/config/bat_control_activated",n))},q({_:2},[t.$store.state.mqtt["openWB/bat/config/bat_control_activated"]?{name:"help",fn:r(()=>[e[38]||(e[38]=o(" Speicher wird aktiv gesteuert. Grundlage ist die nachfolgende Konfiguration. ",-1))]),key:"0"}:{name:"help",fn:r(()=>[e[39]||(e[39]=o(" Speicher wird nicht aktiv gesteuert, sondern regelt eigenständig.",-1)),e[40]||(e[40]=c("br",null,null,-1)),e[41]||(e[41]=o(" Es greifen die Regelparameter der Speicherbeachtung. ",-1))]),key:"1"}]),1032,["model-value"]),t.$store.state.mqtt["openWB/bat/config/bat_control_activated"]===!0?(i(),s("div",J,[a(f,{class:"mt-0"},{default:r(()=>[...e[42]||(e[42]=[o(" Regelmodi der aktiven Speichersteuerung ",-1)])]),_:1}),a(m,{subtype:"info"},{default:r(()=>[...e[43]||(e[43]=[o(" Die aktive Speichersteuerung kann Speicherentladung begrenzen oder den Speicher zur Ladung zwingen. Die erlaubte Entladeleistung des Speichers (Speicherbeachtung PV) wird bei aktiver Speichersteuerung überschrieben, da Speicherentladung unter Umständen aktiv begrenzt wird. ",-1)])]),_:1})])):l("",!0),t.$store.state.mqtt["openWB/bat/config/bat_control_activated"]?(i(),s("div",G,[a(S,{title:"Aktiv steuerbare Speicher"},{default:r(()=>[u.hasNonControllableBatteries?(i(),h(m,{key:0,subtype:"danger"},{default:r(()=>[...e[44]||(e[44]=[o(" Es sind nicht steuerbare Speicher im System vorhanden. Solche Speicher führen gewöhnlich eigenständig eine Nullpunktausregelung durch, versuchen also Überschuss zu speichern (Einspeisung zu verhindern) und Netzbezug durch eigene Entladung zu vermeiden.",-1),c("br",null,null,-1),o(" Ein solcher Speicher versucht ebenso aktiv gesteuerte Speicher auszugleichen. ",-1)])]),_:1})):l("",!0),(i(!0),s(y,null,V(u.controllableBatteryConfigs,(n,W)=>(i(),s("div",{key:W,class:"mb-3"},[a(S,{title:n.name+" (ID: "+n.id+")",collapsible:!0,collapsed:!0,subtype:"warning"},{header:r(()=>[a(v,{icon:["fas","fa-car-battery"],class:"fa-border",style:M({backgroundColor:n.color,color:t.getContrastColor(n.color),"--fa-border-color":t.getContrastColor(n.color)})},null,8,["style"]),o(" "+B(n.name)+" (ID: "+B(n.id)+") ",1)]),default:r(()=>[a(_,{title:"Maximale Entladeleistung",min:.01,step:.01,unit:"kW",required:"","model-value":t.$store.state.mqtt["openWB/bat/"+n.id+"/get/max_discharge_power"]/-1e3,"onUpdate:modelValue":k=>t.updateState("openWB/bat/"+n.id+"/get/max_discharge_power",k*-1e3)},null,8,["model-value","onUpdate:modelValue"]),a(_,{title:"Maximale Ladeleistung",min:.01,step:.01,unit:"kW",required:"","model-value":t.$store.state.mqtt["openWB/bat/"+n.id+"/get/max_charge_power"]/1e3,"onUpdate:modelValue":k=>t.updateState("openWB/bat/"+n.id+"/get/max_charge_power",k*1e3)},null,8,["model-value","onUpdate:modelValue"])]),_:2},1032,["title"])]))),128))]),_:1}),u.hasControllableBatteries?(i(),s("div",Q,[a(w,{title:"Untere Entladeschranke",min:5,max:100,step:1,unit:"%",required:"","model-value":t.$store.state.mqtt["openWB/bat/config/bat_control_min_soc"],"onUpdate:modelValue":e[8]||(e[8]=n=>(t.updateState("openWB/bat/config/bat_control_min_soc",n),t.updateState("openWB/bat/config/bat_control_max_soc",t.$store.state.mqtt["openWB/bat/config/bat_control_min_soc"][...e[45]||(e[45]=[o(' Speicher, welche durch die aktive Steuerung entladen werden, schalten unterhalb des eingestellten SoC auf "Eigenregelung", um mögliche Tiefentladung zu verhindern. Die aktive Ladung ist weiterhin möglich. ',-1)])]),_:1},8,["model-value"]),a(w,{title:"Obere Ladeschranke",min:5,max:100,step:1,unit:"%",required:"","model-value":t.$store.state.mqtt["openWB/bat/config/bat_control_max_soc"],"onUpdate:modelValue":e[9]||(e[9]=n=>(t.updateState("openWB/bat/config/bat_control_max_soc",n),t.updateState("openWB/bat/config/bat_control_min_soc",t.$store.state.mqtt["openWB/bat/config/bat_control_max_soc"]>t.$store.state.mqtt["openWB/bat/config/bat_control_min_soc"]?t.$store.state.mqtt["openWB/bat/config/bat_control_min_soc"]:n)))},{help:r(()=>[...e[46]||(e[46]=[o(" Speicher, welche aktiv geladen werden, sperren oberhalb des eingestellten SoC die Entladung oder schalten auf Eigenregelung des Speichers. ",-1)])]),_:1},8,["model-value"]),a(p,{title:"Regelbedingung",buttons:[{buttonValue:"manual",text:"Manuell"},{buttonValue:"vehicle_charging",text:"Fahrzeugladung aktiv"},{buttonValue:"price_limit",text:"Preisgrenze"}],"model-value":t.$store.state.mqtt["openWB/bat/config/power_limit_condition"],"onUpdate:modelValue":u.handlePowerLimitConditionChange},{help:r(()=>[t.$store.state.mqtt["openWB/bat/config/power_limit_condition"]==="manual"?(i(),s("div",X," Der Speicher regelt direkt entsprechend der manuellen Einstellung. ")):l("",!0),t.$store.state.mqtt["openWB/bat/config/power_limit_condition"]==="vehicle_charging"?(i(),s("div",Y," Der unten eingestellte Regelmodus wird angewendet, sobald ein oder mehrere Fahrzeuge Laden. ")):l("",!0),t.$store.state.mqtt["openWB/bat/config/power_limit_condition"]==="price_limit"?(i(),s("div",Z," Regelung nach Preisgrenze bei variablen Strompreisen. ")):l("",!0)]),_:1},8,["model-value","onUpdate:modelValue"]),e[52]||(e[52]=c("hr",null,null,-1)),t.$store.state.mqtt["openWB/bat/config/power_limit_condition"]==="manual"||t.$store.state.mqtt["openWB/bat/config/power_limit_condition"]==="vehicle_charging"?(i(),s("div",x,[a(f,{class:"mt-0"},{default:r(()=>[o(B(t.$store.state.mqtt["openWB/bat/config/power_limit_condition"]==="manual"?"Manuell":"Fahrzeugladung aktiv"),1)]),_:1}),a(p,{title:"Speichersteuerung",buttons:[{buttonValue:"manual_disable",text:"Eigenregelung",disabled:t.$store.state.mqtt["openWB/bat/config/power_limit_condition"]==="vehicle_charging"},{buttonValue:"manual_limit",text:"Regelmodus anwenden"},{buttonValue:"manual_charge",text:"Speicher aktiv laden",disabled:t.$store.state.mqtt["openWB/bat/config/power_limit_condition"]==="vehicle_charging"}],"model-value":t.$store.state.mqtt["openWB/bat/config/manual_mode"],"onUpdate:modelValue":e[10]||(e[10]=n=>t.updateState("openWB/bat/config/manual_mode",n))},{help:r(()=>[t.$store.state.mqtt["openWB/bat/config/manual_mode"]==="manual_disable"?(i(),s("div",ee," Aktive Speichersteuerung deaktivieren (Eigenregelung des Speichers). ")):l("",!0),t.$store.state.mqtt["openWB/bat/config/manual_mode"]==="manual_limit"?(i(),s("div",te," Es wird der weiter unten konfigurierte Regelmodus angewendet. ")):l("",!0),t.$store.state.mqtt["openWB/bat/config/manual_mode"]==="manual_charge"?(i(),s("div",ne," Alle Speicher werden mit ihrer eingestellten maximalen Ladeleistung beladen. Befinden sich die Speicher über der oberen Ladeschranke wird der SoC gehalten. ")):l("",!0)]),_:1},8,["buttons","model-value"]),t.$store.state.mqtt["openWB/bat/config/manual_mode"]==="manual_limit"?(i(),h(p,{key:0,title:"Regelmodus",buttons:[{buttonValue:"mode_no_discharge",text:"volle Entladesperre"},{buttonValue:"mode_discharge_home_consumption",text:"Nur Hausverbrauch entladen"},{buttonValue:"mode_charge_pv_production",text:"PV-Ertrag speichern"}],"model-value":t.$store.state.mqtt["openWB/bat/config/power_limit_mode"],"onUpdate:modelValue":e[11]||(e[11]=n=>t.updateState("openWB/bat/config/power_limit_mode",n))},{help:r(()=>[t.$store.state.mqtt["openWB/bat/config/power_limit_mode"]==="mode_no_discharge"?(i(),s("div",re," Die Speicherentladung wird komplett gesperrt! Alle Verbraucher (Fahrzeuge, Hausverbrauch) werden durch Netzstrom und ggfs. vorhandenen PV-Überschuss versorgt. ")):l("",!0),t.$store.state.mqtt["openWB/bat/config/power_limit_mode"]==="mode_discharge_home_consumption"?(i(),s("div",ie,' Es wird nur der Hausverbrauch durch den Speicher ausgeglichen. Die Speicherentladung in Fahrzeuge wird komplett gesperrt! Fahrzeugladung, die nicht durch PV-Überschuss gedeckt werden kann, erzeugt Netzbezug statt Speicherentladung. Kann die Entladung am Speicher nur komplett gesperrt werden, verhält sich diese Einstellung wie "volle Entladesperre". ')):l("",!0),t.$store.state.mqtt["openWB/bat/config/power_limit_mode"]==="mode_charge_pv_production"?(i(),s("div",ae," Fahrzeuge werden mit Netzstrom geladen, der Hausverbrauch wird durch PV gedeckt und überschüssiger PV-Ertrag in den Speicher geladen. Ist der PV-Ertrag zu gering, wird der Hausverbrauch aus dem Speicher gedeckt. ")):l("",!0)]),_:1},8,["model-value"])):l("",!0)])):l("",!0),t.$store.state.mqtt["openWB/bat/config/power_limit_condition"]==="price_limit"?(i(),s("div",oe,[a(f,{class:"mt-0"},{default:r(()=>[...e[47]||(e[47]=[o(" Preisgrenze (Variable Strompreise) ",-1)])]),_:1}),t.$store.state.mqtt["openWB/optional/ep/configured"]?l("",!0):(i(),h(m,{key:0,subtype:"warning"},{default:r(()=>[...e[48]||(e[48]=[o(" Bitte in den übergreifenden Ladeeinstellungen einen Strompreis-Anbieter konfigurieren. Ohne Strompreis-Anbieter schaltet der Speicher auf Eigenregelung. ",-1)])]),_:1})),a(p,{title:"Preisgrenze für Netzbezug statt Speicherentladung",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/bat/config/price_limit_activated"],"onUpdate:modelValue":e[12]||(e[12]=n=>t.updateState("openWB/bat/config/price_limit_activated",n))},{help:r(()=>[...e[49]||(e[49]=[o(" Fällt der variable Strompreis unter diesen Wert, greift der unten konfigurierte Regelmodus. ",-1)])]),_:1},8,["model-value"]),a(_,{title:"Eigenregelung für Strompreise über",step:.001,precision:3,unit:"ct/kWh",required:"","model-value":t.$store.state.mqtt["openWB/bat/config/price_limit"]*1e5,"onUpdate:modelValue":e[13]||(e[13]=n=>t.updateState("openWB/bat/config/price_limit",n/1e5))},null,8,["model-value"]),a(p,{title:`Regelmodus für Strompreise zwischen ${u.priceLimitLower} und ${u.priceLimitUpper} ct/kWh`,buttons:[{buttonValue:"mode_no_discharge",text:"volle Entladesperre"},{buttonValue:"mode_discharge_home_consumption",text:"Nur Hausverbrauch entladen"},{buttonValue:"mode_charge_pv_production",text:"PV-Ertrag speichern"}],"model-value":t.$store.state.mqtt["openWB/bat/config/power_limit_mode"],"onUpdate:modelValue":e[14]||(e[14]=n=>t.updateState("openWB/bat/config/power_limit_mode",n))},{help:r(()=>[t.$store.state.mqtt["openWB/bat/config/power_limit_mode"]==="mode_no_discharge"?(i(),s("div",se," Die Speicherentladung wird komplett gesperrt! Alle Verbraucher (Fahrzeuge, Hausverbrauch) werden durch Netzstrom und ggfs. vorhandenen PV-Überschuss versorgt. ")):l("",!0),t.$store.state.mqtt["openWB/bat/config/power_limit_mode"]==="mode_discharge_home_consumption"?(i(),s("div",le,' Es wird nur der Hausverbrauch durch den Speicher ausgeglichen. Die Speicherentladung in Fahrzeuge wird komplett gesperrt! Fahrzeugladung, die nicht durch PV-Überschuss gedeckt werden kann, erzeugt Netzbezug statt Speicherentladung. Kann die Entladung am Speicher nur komplett gesperrt werden, verhält sich diese Einstellung wie "volle Entladesperre". ')):l("",!0),t.$store.state.mqtt["openWB/bat/config/power_limit_mode"]==="mode_charge_pv_production"?(i(),s("div",de," PV-Ertrag wird vorrangig in den Speicher geladen (aktive Ladung)! Weiterer Verbrauch (Hausverbrauch/ Fahrzeugladung) erzeugt Netzbezug. ")):l("",!0)]),_:1},8,["title","model-value"]),a(p,{title:"Preisgrenze für Regelmodus",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/bat/config/price_charge_activated"],"onUpdate:modelValue":e[15]||(e[15]=n=>t.updateState("openWB/bat/config/price_charge_activated",n))},{help:r(()=>[...e[50]||(e[50]=[o(" Fällt der variable Strompreis unter diesen Wert werden alle Speicher mit ihrer eingestellten maximalen Ladeleistung beladen. Befinden sich die Speicher über der oberen Ladeschranke wird der SoC gehalten. ",-1)])]),_:1},8,["model-value"]),a(_,{title:"Speicher aktiv laden für Strompreise unter",step:.001,precision:3,unit:"ct/kWh",required:"","model-value":t.$store.state.mqtt["openWB/bat/config/charge_limit"]*1e5,"onUpdate:modelValue":e[16]||(e[16]=n=>t.updateState("openWB/bat/config/charge_limit",n/1e5))},null,8,["model-value"])])):l("",!0),u.batteryBehaviorDescription.length?(i(),s("div",ue,[a(f,{class:"mt-2"},{default:r(()=>[...e[51]||(e[51]=[o(" Beschreibung des Verhaltens ",-1)])]),_:1}),a(m,{subtype:"info"},{default:r(()=>[(i(!0),s(y,null,V(u.batteryBehaviorDescription,(n,W)=>(i(),s("div",{key:W},B(n),1))),128))]),_:1})])):l("",!0)])):(i(),s("div",ge,[a(m,{subtype:"info"},{default:r(()=>[...e[53]||(e[53]=[o(" Die Speicher-Entladung ins Fahrzeug kann nicht gesteuert werden, da die Entladeleistung nicht an den/die konfigurierten Speicher übergeben werden kann. ",-1)])]),_:1})]))])):l("",!0)]),_:1}),a(z,{"form-name":"batteryConfigForm",onSave:e[17]||(e[17]=n=>t.$emit("save",t.mqttTopicsToPublish)),onReset:e[18]||(e[18]=n=>t.$emit("reset")),onDefaults:e[19]||(e[19]=n=>t.$emit("defaults"))})])])}const we=N(P,[["render",me],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/ActiveBatControlConfiguration.vue"]]);export{we as default}; diff --git a/web/settings/assets/ActiveBatControlConfiguration-DCsLHsew.js b/web/settings/assets/ActiveBatControlConfiguration-DCsLHsew.js deleted file mode 100644 index 4db13b568e..0000000000 --- a/web/settings/assets/ActiveBatControlConfiguration-DCsLHsew.js +++ /dev/null @@ -1 +0,0 @@ -import{C as $}from"./index-Bv2WLdLZ.js";import{F as C,l as E,a4 as D,ag as L,ah as F}from"./vendor-fortawesome-DplTMxoa.js";import{_ as N,m as b,l as i,f as s,y as c,q as o,u as r,B as a,x as l,z as h,D as q,K as y,L as V,O as U,J as S}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";E.add(D,L,F);const P={name:"OpenwbActiveBatControlConfigurationView",components:{FontAwesomeIcon:C},mixins:[$],emits:["save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/bat/+/get/max_charge_power",writeable:!0},{topic:"openWB/bat/+/get/max_discharge_power",writeable:!0},{topic:"openWB/bat/+/get/power_limit_controllable",writeable:!1},{topic:"openWB/bat/config/bat_control_activated",writeable:!0},{topic:"openWB/bat/config/bat_control_max_soc",writeable:!0},{topic:"openWB/bat/config/bat_control_min_soc",writeable:!0},{topic:"openWB/bat/config/charge_limit",writeable:!0},{topic:"openWB/bat/config/manual_mode",writeable:!0},{topic:"openWB/bat/config/power_limit_condition",writeable:!0},{topic:"openWB/bat/config/power_limit_mode",writeable:!0},{topic:"openWB/bat/config/price_charge_activated",writeable:!0},{topic:"openWB/bat/config/price_limit",writeable:!0},{topic:"openWB/bat/config/price_limit_activated",writeable:!0},{topic:"openWB/general/chargemode_config/bat/mode",writeable:!0},{topic:"openWB/general/chargemode_config/bat/power_discharge",writeable:!0},{topic:"openWB/general/chargemode_config/bat/power_discharge_active",writeable:!0},{topic:"openWB/general/chargemode_config/bat/power_reserve",writeable:!0},{topic:"openWB/general/chargemode_config/bat/power_reserve_active",writeable:!0},{topic:"openWB/general/chargemode_config/bat/max_soc",writeable:!0},{topic:"openWB/general/chargemode_config/bat/min_soc",writeable:!0},{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/system/device/+/component/+/config",writeable:!1},{topic:"openWB/optional/ep/configured",writeable:!1}]}},computed:{batMode:{get(){return this.$store.state.mqtt["openWB/general/chargemode_config/bat/mode"]},set(t){this.updateState("openWB/general/chargemode_config/bat/mode",t)}},numBatteriesInstalled(){return Object.keys(this.batteryConfigs).length},batteryConfigs(){return this.$store.state.mqtt["openWB/general/extern"]===!0?{}:this.filterComponentsByType(this.getWildcardTopics("openWB/system/device/+/component/+/config"),"bat")},controllableBatteryConfigs(){return this.$store.state.mqtt["openWB/general/extern"]===!0?{}:Object.keys(this.batteryConfigs).filter(t=>{const e=this.batteryConfigs[t].id;return this.$store.state.mqtt[`openWB/bat/${e}/get/power_limit_controllable`]===!0}).reduce((t,e)=>({...t,[e]:this.batteryConfigs[e]}),{})},hasNonControllableBatteries(){return this.$store.state.mqtt["openWB/general/extern"]===!0?!1:Object.keys(this.batteryConfigs).some(t=>{const e=this.batteryConfigs[t].id;return this.$store.state.mqtt[`openWB/bat/${e}/get/power_limit_controllable`]===!1})},hasControllableBatteries(){return Object.keys(this.controllableBatteryConfigs).length>0},priceLimitUpper(){return this.formatPrice(this.$store.state.mqtt["openWB/bat/config/price_limit"])},priceLimitLower(){return this.formatPrice(this.$store.state.mqtt["openWB/bat/config/charge_limit"])},batteryBehaviorDescription(){const t=this.$store.state.mqtt["openWB/bat/config/power_limit_condition"],e=this.$store.state.mqtt["openWB/bat/config/power_limit_mode"],g=this.$store.state.mqtt["openWB/bat/config/manual_mode"],d=[];return t==="manual"&&d.push("Die Konfiguration wird dauerhaft angewendet."),t==="vehicle_charging"&&d.push("Die Konfiguration wird angewendet, sobald ein Fahrzeug lädt."),t==="price_limit"&&d.push(`Die Konfiguration wird abhängig vom Strompreis angewendet (zwischen ${this.priceLimitLower} und ${this.priceLimitUpper} ct/kWh).`),(t==="manual"||t==="vehicle_charging")&&(g==="manual_disable"&&d.push("Der Speicher arbeitet in Eigenregelung."),g==="manual_limit"&&d.push("Der konfigurierte Regelmodus wird angewendet."),g==="manual_charge"&&d.push("Der Speicher wird aktiv geladen.")),(t==="price_limit"||g==="manual_limit")&&(e==="mode_no_discharge"&&d.push("Die Speicherentladung ist vollständig gesperrt. Alle Verbraucher werden durch Netz oder PV versorgt."),e==="mode_discharge_home_consumption"&&d.push("Der Speicher versorgt ausschließlich den Hausverbrauch. Fahrzeugladung erfolgt nicht aus dem Speicher."),e==="mode_charge_pv_production"&&d.push("PV-Ertrag wird vorrangig im Speicher gespeichert. Verbraucher werden bei Bedarf aus dem Netz versorgt.")),d}},methods:{filterComponentsByType(t,e){return Object.keys(t).filter(g=>t[g].type.includes(e)).reduce((g,d)=>({...g,[d]:t[d]}),{})},handlePowerLimitConditionChange(t){this.updateState("openWB/bat/config/power_limit_condition",t),t==="vehicle_charging"&&this.updateState("openWB/bat/config/manual_mode","manual_limit")},formatPrice(t){return((t||0)*1e5).toLocaleString(void 0,{minimumFractionDigits:3,maximumFractionDigits:3})}}},M={class:"batteryConfig"},A={name:"batteryConfigForm"},H={key:0},R={key:1},O={key:0},T={key:1},I={key:2},K={key:0},j={key:0},J={key:2,class:"mb-3"},G={key:3},Q={key:0},X={key:0},Y={key:1},Z={key:2},x={key:0},ee={key:0},te={key:1},ne={key:2},re={key:0},ie={key:1},oe={key:2},ae={key:1},se={key:0},le={key:1},de={key:2},ue={key:2},ge={key:1};function me(t,e,g,d,pe,u){const m=b("openwb-base-alert"),v=b("font-awesome-icon"),p=b("openwb-base-button-group-input"),w=b("openwb-base-range-input"),f=b("openwb-base-heading"),_=b("openwb-base-number-input"),B=b("openwb-base-card"),z=b("openwb-base-submit-buttons");return i(),s("div",M,[c("form",A,[o(B,{title:"Passive Speicherbeachtung (PV)"},{default:r(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(i(),s("div",H,[o(m,{subtype:"info"},{default:r(()=>[...e[20]||(e[20]=[a(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(i(),s("div",R,[o(m,{subtype:"info"},{default:r(()=>[...e[21]||(e[21]=[a(' Die Regelmodi der Speicherbeachtung erfolgen "passiv" durch Anpassung der Fahrzeug-Ladeleistung. PV-Überschuss wird, je nach Konfiguration, entweder dem Fahrzeug zugeteilt oder dem Speicher überlassen. Netz- und Speicherbezug wird, sofern nicht anders konfiguriert, vermieden. ',-1)])]),_:1}),o(p,{modelValue:u.batMode,"onUpdate:modelValue":e[0]||(e[0]=n=>u.batMode=n),title:"Ladepriorität",buttons:[{buttonValue:"ev_mode"},{buttonValue:"bat_mode"},{buttonValue:"min_soc_bat_mode"}]},{"label-ev_mode":r(()=>[o(v,{"fixed-width":"",icon:["fas","car-side"]}),e[22]||(e[22]=a(" Fahrzeuge ",-1))]),"label-bat_mode":r(()=>[o(v,{"fixed-width":"",icon:["fas","fa-car-battery"]}),e[23]||(e[23]=a(" Speicher ",-1))]),"label-min_soc_bat_mode":r(()=>[o(v,{"fixed-width":"",icon:["fas","fa-battery-half"]}),e[24]||(e[24]=a(" Nach SoC des Speichers ",-1))]),help:r(()=>[u.batMode==="ev_mode"?(i(),s("div",O," Der gesamte Überschuss wird in das EV geladen. Wird mehr Überschuss erzeugt als die Fahrzeuge abnehmen, findet auch eine Speicherladung statt. ")):l("",!0),u.batMode==="bat_mode"?(i(),s("div",T," Der gesamte Überschuss wird in den Speicher geladen. Ist die maximale Ladeleistung des Speichers erreicht und es wird eingespeist, wird dieser Überschuss unter Beachtung der Einschaltschwelle in die Fahrzeuge geladen. ")):l("",!0),u.batMode==="min_soc_bat_mode"?(i(),s("div",I,' Verhält sich bis zum Erreichen des Mindest-SoC wie "Ladepriorität Speicher" und oberhalb des Mindest-SoC wie "Ladepriorität Fahrzeuge". Die maximale Leistung der Speicherbe- und entladung lässt sich hier festlegen. ')):l("",!0)]),_:1},8,["modelValue"]),u.batMode==="min_soc_bat_mode"?(i(),s("div",K,[o(w,{title:"Mindest-SoC des Speichers",min:0,max:100,step:1,unit:"%",required:"","model-value":t.$store.state.mqtt["openWB/general/chargemode_config/bat/min_soc"],"onUpdate:modelValue":e[1]||(e[1]=n=>(t.updateState("openWB/general/chargemode_config/bat/min_soc",n),t.updateState("openWB/general/chargemode_config/bat/max_soc",t.$store.state.mqtt["openWB/general/chargemode_config/bat/min_soc"][...e[25]||(e[25]=[a(" Unterhalb des Mindest-SoC wird vorhandener PV-Überschuss bevorzugt in den Speicher geladen. Oberhalb des Mindest-SoC hat die Fahrzeugladung Priorität. ",-1)])]),_:1},8,["model-value"]),o(w,{title:"Maximal-SoC des Speichers",min:0,max:100,step:1,unit:"%",required:"","model-value":t.$store.state.mqtt["openWB/general/chargemode_config/bat/max_soc"],"onUpdate:modelValue":e[2]||(e[2]=n=>(t.updateState("openWB/general/chargemode_config/bat/max_soc",n),t.updateState("openWB/general/chargemode_config/bat/min_soc",t.$store.state.mqtt["openWB/general/chargemode_config/bat/max_soc"]>t.$store.state.mqtt["openWB/general/chargemode_config/bat/min_soc"]?t.$store.state.mqtt["openWB/general/chargemode_config/bat/min_soc"]:n)))},{help:r(()=>[...e[26]||(e[26]=[a(" Wird der Maximal-SoC überschritten, darf der Speicher bis zum Erreichen des Mindest-SoC zur Fahrzeugladung mitbenutzt werden. ",-1)])]),_:1},8,["model-value"]),t.$store.state.mqtt["openWB/general/chargemode_config/bat/min_soc"]==t.$store.state.mqtt["openWB/general/chargemode_config/bat/max_soc"]?(i(),h(m,{key:0,subtype:"info"},{default:r(()=>[...e[27]||(e[27]=[a(" Bei identischen SoC Angaben findet keine Speicherhysterese statt. ",-1)])]),_:1})):l("",!0),o(f,null,{default:r(()=>[...e[28]||(e[28]=[a(" Speicher-Ladeleistung unterhalb Mindest-SoC ",-1)])]),_:1}),o(p,{title:"Nur eine bestimmte Ladeleistung reservieren",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/chargemode_config/bat/power_reserve_active"],"onUpdate:modelValue":e[3]||(e[3]=n=>t.updateState("openWB/general/chargemode_config/bat/power_reserve_active",n))},q({_:2},[t.$store.state.mqtt["openWB/general/chargemode_config/bat/power_reserve_active"]?{name:"help",fn:r(()=>[e[29]||(e[29]=a(" ACHTUNG: Der hier eingestellte Wert darf die maximale Ladeleistung des Speichers nicht überschreiten!",-1)),e[30]||(e[30]=c("br",null,null,-1)),e[31]||(e[31]=a(" Befindet sich der Speicher unterhalb des Mindest-SoC, wird er mit der hier eingestellten Speicherladeleistung geladen. Verbleibender Überschuss wird in die Fahrzeuge geladen. ",-1))]),key:"0"}:{name:"help",fn:r(()=>[e[32]||(e[32]=a(" Befindet sich der Speicher unterhalb des Mindest-SoC, wird er priorisiert geladen. ",-1))]),key:"1"}]),1032,["model-value"]),t.$store.state.mqtt["openWB/general/chargemode_config/bat/power_reserve_active"]?(i(),h(_,{key:1,title:"Reservierte Ladeleistung",min:.1,step:.1,unit:"kW",required:"","model-value":t.$store.state.mqtt["openWB/general/chargemode_config/bat/power_reserve"]/1e3,"onUpdate:modelValue":e[4]||(e[4]=n=>t.updateState("openWB/general/chargemode_config/bat/power_reserve",n*1e3))},null,8,["model-value"])):l("",!0),o(f,null,{default:r(()=>[...e[33]||(e[33]=[a(" Speicher-SoC oberhalb Maximal-SoC ",-1)])]),_:1}),o(p,{title:"Entladung des Speichers erlauben",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/chargemode_config/bat/power_discharge_active"],"onUpdate:modelValue":e[5]||(e[5]=n=>t.updateState("openWB/general/chargemode_config/bat/power_discharge_active",n))},q({_:2},[t.$store.state.mqtt["openWB/general/chargemode_config/bat/power_discharge_active"]?{name:"help",fn:r(()=>[e[34]||(e[34]=a(" ACHTUNG: Der hier eingestellte Wert darf die maximale Entladeleistung des Speichers nicht überschreiten! Wird der Maximal-SoC überschritten, wird die PV-Ladung mit der hier eingestellten Speicherentladeleistung unterstützt. Der Speicher darf bis zum Mindest-SoC entladen werden. Die erlaubte Entladeleistung des Speichers wird dem Überschuss zum Erreichen der Einschaltschwelle hinzugerechnet. ",-1))]),key:"0"}:{name:"help",fn:r(()=>[e[35]||(e[35]=a(" Oberhalb des Maximal-SoC wird der Speicher nicht für die Fahrzeugladung mitgenutzt. ",-1))]),key:"1"}]),1032,["model-value"]),t.$store.state.mqtt["openWB/general/chargemode_config/bat/power_discharge_active"]?(i(),h(_,{key:2,title:"Erlaubte Entladeleistung",min:.1,step:.1,unit:"kW",required:"","model-value":t.$store.state.mqtt["openWB/general/chargemode_config/bat/power_discharge"]/1e3,"onUpdate:modelValue":e[6]||(e[6]=n=>t.updateState("openWB/general/chargemode_config/bat/power_discharge",n*1e3))},null,8,["model-value"])):l("",!0)])):l("",!0)]))]),_:1}),o(B,{title:"Aktive Speichersteuerung"},{default:r(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(i(),s("div",j,[o(m,{subtype:"info"},{default:r(()=>[...e[36]||(e[36]=[a(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(i(),h(m,{key:1,subtype:"warning",class:"mb-3"},{default:r(()=>[...e[37]||(e[37]=[c("p",null,[a(" Die aktive Speichersteuerung durch openWB basiert auf öffentlich zugänglichen Informationen zu den verschiedenen Speichersystemen. Diese können auch nicht vom Hersteller freigegebene Informationen beinhalten."),c("br"),a(' Fragen bezüglich der Gewährleistung und Hardwarekompatibilität sind vor der Nutzung mit dem Hersteller zu klären. openWB übernimmt keine Haftung für Schäden, welche aus der Nutzung der "aktiven Speichersteuerung" entstehen. Mit der Aktivierung der aktiven Speichersteuerung (Schalter unten) bestätigst du, dass du die Hinweise gelesen und verstanden hast und die Verantwortung für die Nutzung der aktiven Speichersteuerung übernimmst. ')],-1)])]),_:1})),o(p,{title:"Speicher aktiv Steuern",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/bat/config/bat_control_activated"],"onUpdate:modelValue":e[7]||(e[7]=n=>t.updateState("openWB/bat/config/bat_control_activated",n))},q({_:2},[t.$store.state.mqtt["openWB/bat/config/bat_control_activated"]?{name:"help",fn:r(()=>[e[38]||(e[38]=a(" Speicher wird aktiv gesteuert. Grundlage ist die nachfolgende Konfiguration. ",-1))]),key:"0"}:{name:"help",fn:r(()=>[e[39]||(e[39]=a(" Speicher wird nicht aktiv gesteuert, sondern regelt eigenständig.",-1)),e[40]||(e[40]=c("br",null,null,-1)),e[41]||(e[41]=a(" Es greifen die Regelparameter der Speicherbeachtung. ",-1))]),key:"1"}]),1032,["model-value"]),t.$store.state.mqtt["openWB/bat/config/bat_control_activated"]===!0?(i(),s("div",J,[o(f,{class:"mt-0"},{default:r(()=>[...e[42]||(e[42]=[a(" Regelmodi der aktiven Speichersteuerung ",-1)])]),_:1}),o(m,{subtype:"info"},{default:r(()=>[...e[43]||(e[43]=[a(" Die aktive Speichersteuerung kann Speicherentladung begrenzen oder den Speicher zur Ladung zwingen. Die erlaubte Entladeleistung des Speichers (Speicherbeachtung PV) wird bei aktiver Speichersteuerung überschrieben, da Speicherentladung unter Umständen aktiv begrenzt wird. ",-1)])]),_:1})])):l("",!0),t.$store.state.mqtt["openWB/bat/config/bat_control_activated"]?(i(),s("div",G,[o(B,{title:"Aktiv steuerbare Speicher"},{default:r(()=>[u.hasNonControllableBatteries?(i(),h(m,{key:0,subtype:"danger"},{default:r(()=>[...e[44]||(e[44]=[a(" Es sind nicht steuerbare Speicher im System vorhanden. Solche Speicher führen gewöhnlich eigenständig eine Nullpunktausregelung durch, versuchen also Überschuss zu speichern (Einspeisung zu verhindern) und Netzbezug durch eigene Entladung zu vermeiden.",-1),c("br",null,null,-1),a(" Ein solcher Speicher versucht ebenso aktiv gesteuerte Speicher auszugleichen. ",-1)])]),_:1})):l("",!0),(i(!0),s(y,null,V(u.controllableBatteryConfigs,(n,W)=>(i(),s("div",{key:W,class:"mb-3"},[o(B,{title:n.name+" (ID: "+n.id+")",collapsible:!0,collapsed:!0,subtype:"warning"},{header:r(()=>[o(v,{icon:["fas","fa-car-battery"],class:"fa-border",style:U({backgroundColor:n.color,color:t.getContrastColor(n.color),"--fa-border-color":t.getContrastColor(n.color)})},null,8,["style"]),a(" "+S(n.name)+" (ID: "+S(n.id)+") ",1)]),default:r(()=>[o(_,{title:"Maximale Entladeleistung",min:.01,step:.01,unit:"kW",required:"","model-value":t.$store.state.mqtt["openWB/bat/"+n.id+"/get/max_discharge_power"]/-1e3,"onUpdate:modelValue":k=>t.updateState("openWB/bat/"+n.id+"/get/max_discharge_power",k*-1e3)},null,8,["model-value","onUpdate:modelValue"]),o(_,{title:"Maximale Ladeleistung",min:.01,step:.01,unit:"kW",required:"","model-value":t.$store.state.mqtt["openWB/bat/"+n.id+"/get/max_charge_power"]/1e3,"onUpdate:modelValue":k=>t.updateState("openWB/bat/"+n.id+"/get/max_charge_power",k*1e3)},null,8,["model-value","onUpdate:modelValue"])]),_:2},1032,["title"])]))),128))]),_:1}),u.hasControllableBatteries?(i(),s("div",Q,[o(w,{title:"Untere Entladeschranke",min:5,max:100,step:1,unit:"%",required:"","model-value":t.$store.state.mqtt["openWB/bat/config/bat_control_min_soc"],"onUpdate:modelValue":e[8]||(e[8]=n=>(t.updateState("openWB/bat/config/bat_control_min_soc",n),t.updateState("openWB/bat/config/bat_control_max_soc",t.$store.state.mqtt["openWB/bat/config/bat_control_min_soc"][...e[45]||(e[45]=[a(' Speicher, welche durch die aktive Steuerung entladen werden, schalten unterhalb des eingestellten SoC auf "Eigenregelung", um mögliche Tiefentladung zu verhindern. Die aktive Ladung ist weiterhin möglich. ',-1)])]),_:1},8,["model-value"]),o(w,{title:"Obere Ladeschranke",min:5,max:100,step:1,unit:"%",required:"","model-value":t.$store.state.mqtt["openWB/bat/config/bat_control_max_soc"],"onUpdate:modelValue":e[9]||(e[9]=n=>(t.updateState("openWB/bat/config/bat_control_max_soc",n),t.updateState("openWB/bat/config/bat_control_min_soc",t.$store.state.mqtt["openWB/bat/config/bat_control_max_soc"]>t.$store.state.mqtt["openWB/bat/config/bat_control_min_soc"]?t.$store.state.mqtt["openWB/bat/config/bat_control_min_soc"]:n)))},{help:r(()=>[...e[46]||(e[46]=[a(" Speicher, welche aktiv geladen werden, sperren oberhalb des eingestellten SoC die Entladung oder schalten auf Eigenregelung des Speichers. ",-1)])]),_:1},8,["model-value"]),o(p,{title:"Regelbedingung",buttons:[{buttonValue:"manual",text:"Manuell"},{buttonValue:"vehicle_charging",text:"Fahrzeugladung aktiv"},{buttonValue:"price_limit",text:"Preisgrenze"}],"model-value":t.$store.state.mqtt["openWB/bat/config/power_limit_condition"],"onUpdate:modelValue":u.handlePowerLimitConditionChange},{help:r(()=>[t.$store.state.mqtt["openWB/bat/config/power_limit_condition"]==="manual"?(i(),s("div",X," Der Speicher regelt direkt entsprechend der manuellen Einstellung. ")):l("",!0),t.$store.state.mqtt["openWB/bat/config/power_limit_condition"]==="vehicle_charging"?(i(),s("div",Y," Der unten eingestellte Regelmodus wird angewendet, sobald ein oder mehrere Fahrzeuge Laden. ")):l("",!0),t.$store.state.mqtt["openWB/bat/config/power_limit_condition"]==="price_limit"?(i(),s("div",Z," Regelung nach Preisgrenze bei variablen Strompreisen. ")):l("",!0)]),_:1},8,["model-value","onUpdate:modelValue"]),e[52]||(e[52]=c("hr",null,null,-1)),t.$store.state.mqtt["openWB/bat/config/power_limit_condition"]==="manual"||t.$store.state.mqtt["openWB/bat/config/power_limit_condition"]==="vehicle_charging"?(i(),s("div",x,[o(f,{class:"mt-0"},{default:r(()=>[a(S(t.$store.state.mqtt["openWB/bat/config/power_limit_condition"]==="manual"?"Manuell":"Fahrzeugladung aktiv"),1)]),_:1}),o(p,{title:"Speichersteuerung",buttons:[{buttonValue:"manual_disable",text:"Eigenregelung",disabled:t.$store.state.mqtt["openWB/bat/config/power_limit_condition"]==="vehicle_charging"},{buttonValue:"manual_limit",text:"Regelmodus anwenden"},{buttonValue:"manual_charge",text:"Speicher aktiv laden",disabled:t.$store.state.mqtt["openWB/bat/config/power_limit_condition"]==="vehicle_charging"}],"model-value":t.$store.state.mqtt["openWB/bat/config/manual_mode"],"onUpdate:modelValue":e[10]||(e[10]=n=>t.updateState("openWB/bat/config/manual_mode",n))},{help:r(()=>[t.$store.state.mqtt["openWB/bat/config/manual_mode"]==="manual_disable"?(i(),s("div",ee," Aktive Speichersteuerung deaktivieren (Eigenregelung des Speichers). ")):l("",!0),t.$store.state.mqtt["openWB/bat/config/manual_mode"]==="manual_limit"?(i(),s("div",te," Es wird der weiter unten konfigurierte Regelmodus angewendet. ")):l("",!0),t.$store.state.mqtt["openWB/bat/config/manual_mode"]==="manual_charge"?(i(),s("div",ne," Alle Speicher werden mit ihrer eingestellten maximalen Ladeleistung beladen. Befinden sich die Speicher über der oberen Ladeschranke wird der SoC gehalten. ")):l("",!0)]),_:1},8,["buttons","model-value"]),t.$store.state.mqtt["openWB/bat/config/manual_mode"]==="manual_limit"?(i(),h(p,{key:0,title:"Regelmodus",buttons:[{buttonValue:"mode_no_discharge",text:"volle Entladesperre"},{buttonValue:"mode_discharge_home_consumption",text:"Nur Hausverbrauch entladen"},{buttonValue:"mode_charge_pv_production",text:"PV-Ertrag speichern"}],"model-value":t.$store.state.mqtt["openWB/bat/config/power_limit_mode"],"onUpdate:modelValue":e[11]||(e[11]=n=>t.updateState("openWB/bat/config/power_limit_mode",n))},{help:r(()=>[t.$store.state.mqtt["openWB/bat/config/power_limit_mode"]==="mode_no_discharge"?(i(),s("div",re," Die Speicherentladung wird komplett gesperrt! Alle Verbraucher (Fahrzeuge, Hausverbrauch) werden durch Netzstrom und ggfs. vorhandenen PV-Überschuss versorgt. ")):l("",!0),t.$store.state.mqtt["openWB/bat/config/power_limit_mode"]==="mode_discharge_home_consumption"?(i(),s("div",ie,' Es wird nur der Hausverbrauch durch den Speicher ausgeglichen. Die Speicherentladung in Fahrzeuge wird komplett gesperrt! Fahrzeugladung, die nicht durch PV-Überschuss gedeckt werden kann, erzeugt Netzbezug statt Speicherentladung. Kann die Entladung am Speicher nur komplett gesperrt werden, verhält sich diese Einstellung wie "volle Entladesperre". ')):l("",!0),t.$store.state.mqtt["openWB/bat/config/power_limit_mode"]==="mode_charge_pv_production"?(i(),s("div",oe," Fahrzeuge werden mit Netzstrom geladen, der Hausverbrauch wird durch PV gedeckt und überschüssiger PV-Ertrag in den Speicher geladen. Ist der PV-Ertrag zu gering, wird der Hausverbrauch aus dem Speicher gedeckt. ")):l("",!0)]),_:1},8,["model-value"])):l("",!0)])):l("",!0),t.$store.state.mqtt["openWB/bat/config/power_limit_condition"]==="price_limit"?(i(),s("div",ae,[o(f,{class:"mt-0"},{default:r(()=>[...e[47]||(e[47]=[a(" Preisgrenze (Variable Strompreise) ",-1)])]),_:1}),t.$store.state.mqtt["openWB/optional/ep/configured"]?l("",!0):(i(),h(m,{key:0,subtype:"warning"},{default:r(()=>[...e[48]||(e[48]=[a(" Bitte in den übergreifenden Ladeeinstellungen einen Strompreis-Anbieter konfigurieren. Ohne Strompreis-Anbieter schaltet der Speicher auf Eigenregelung. ",-1)])]),_:1})),o(p,{title:"Preisgrenze für Netzbezug statt Speicherentladung",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/bat/config/price_limit_activated"],"onUpdate:modelValue":e[12]||(e[12]=n=>t.updateState("openWB/bat/config/price_limit_activated",n))},{help:r(()=>[...e[49]||(e[49]=[a(" Fällt der variable Strompreis unter diesen Wert, greift der unten konfigurierte Regelmodus. ",-1)])]),_:1},8,["model-value"]),o(_,{title:"Eigenregelung für Strompreise über",step:.001,precision:3,unit:"ct/kWh",required:"","model-value":t.$store.state.mqtt["openWB/bat/config/price_limit"]*1e5,"onUpdate:modelValue":e[13]||(e[13]=n=>t.updateState("openWB/bat/config/price_limit",n/1e5))},null,8,["model-value"]),o(p,{title:`Regelmodus für Strompreise zwischen ${u.priceLimitLower} und ${u.priceLimitUpper} ct/kWh`,buttons:[{buttonValue:"mode_no_discharge",text:"volle Entladesperre"},{buttonValue:"mode_discharge_home_consumption",text:"Nur Hausverbrauch entladen"},{buttonValue:"mode_charge_pv_production",text:"PV-Ertrag speichern"}],"model-value":t.$store.state.mqtt["openWB/bat/config/power_limit_mode"],"onUpdate:modelValue":e[14]||(e[14]=n=>t.updateState("openWB/bat/config/power_limit_mode",n))},{help:r(()=>[t.$store.state.mqtt["openWB/bat/config/power_limit_mode"]==="mode_no_discharge"?(i(),s("div",se," Die Speicherentladung wird komplett gesperrt! Alle Verbraucher (Fahrzeuge, Hausverbrauch) werden durch Netzstrom und ggfs. vorhandenen PV-Überschuss versorgt. ")):l("",!0),t.$store.state.mqtt["openWB/bat/config/power_limit_mode"]==="mode_discharge_home_consumption"?(i(),s("div",le,' Es wird nur der Hausverbrauch durch den Speicher ausgeglichen. Die Speicherentladung in Fahrzeuge wird komplett gesperrt! Fahrzeugladung, die nicht durch PV-Überschuss gedeckt werden kann, erzeugt Netzbezug statt Speicherentladung. Kann die Entladung am Speicher nur komplett gesperrt werden, verhält sich diese Einstellung wie "volle Entladesperre". ')):l("",!0),t.$store.state.mqtt["openWB/bat/config/power_limit_mode"]==="mode_charge_pv_production"?(i(),s("div",de," PV-Ertrag wird vorrangig in den Speicher geladen (aktive Ladung)! Weiterer Verbrauch (Hausverbrauch/ Fahrzeugladung) erzeugt Netzbezug. ")):l("",!0)]),_:1},8,["title","model-value"]),o(p,{title:"Preisgrenze für Regelmodus",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/bat/config/price_charge_activated"],"onUpdate:modelValue":e[15]||(e[15]=n=>t.updateState("openWB/bat/config/price_charge_activated",n))},{help:r(()=>[...e[50]||(e[50]=[a(" Fällt der variable Strompreis unter diesen Wert werden alle Speicher mit ihrer eingestellten maximalen Ladeleistung beladen. Befinden sich die Speicher über der oberen Ladeschranke wird der SoC gehalten. ",-1)])]),_:1},8,["model-value"]),o(_,{title:"Speicher aktiv laden für Strompreise unter",step:.001,precision:3,unit:"ct/kWh",required:"","model-value":t.$store.state.mqtt["openWB/bat/config/charge_limit"]*1e5,"onUpdate:modelValue":e[16]||(e[16]=n=>t.updateState("openWB/bat/config/charge_limit",n/1e5))},null,8,["model-value"])])):l("",!0),u.batteryBehaviorDescription.length?(i(),s("div",ue,[o(f,{class:"mt-2"},{default:r(()=>[...e[51]||(e[51]=[a(" Beschreibung des Verhaltens ",-1)])]),_:1}),o(m,{subtype:"info"},{default:r(()=>[(i(!0),s(y,null,V(u.batteryBehaviorDescription,(n,W)=>(i(),s("div",{key:W},S(n),1))),128))]),_:1})])):l("",!0)])):(i(),s("div",ge,[o(m,{subtype:"info"},{default:r(()=>[...e[53]||(e[53]=[a(" Die Speicher-Entladung ins Fahrzeug kann nicht gesteuert werden, da die Entladeleistung nicht an den/die konfigurierten Speicher übergeben werden kann. ",-1)])]),_:1})]))])):l("",!0)]),_:1}),o(z,{"form-name":"batteryConfigForm",onSave:e[17]||(e[17]=n=>t.$emit("save",t.mqttTopicsToPublish)),onReset:e[18]||(e[18]=n=>t.$emit("reset")),onDefaults:e[19]||(e[19]=n=>t.$emit("defaults"))})])])}const we=N(P,[["render",me],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/ActiveBatControlConfiguration.vue"]]);export{we as default}; diff --git a/web/settings/assets/ChargeLog-C6D5JW6I.js b/web/settings/assets/ChargeLog-CcQqZ_vX.js similarity index 99% rename from web/settings/assets/ChargeLog-C6D5JW6I.js rename to web/settings/assets/ChargeLog-CcQqZ_vX.js index 8e771385dc..fbba8903f9 100644 --- a/web/settings/assets/ChargeLog-C6D5JW6I.js +++ b/web/settings/assets/ChargeLog-CcQqZ_vX.js @@ -1,3 +1,3 @@ -import{F as N,l as k,a8 as E,a9 as R}from"./vendor-fortawesome-DplTMxoa.js";import{_ as B,a5 as S,m as h,l as _,f as g,q as c,u as s,B as d,y as o,J as n,z as W,k as w,O as m,x as V}from"./vendor-BwGffBs-.js";import{C as I}from"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";k.add(E,R);const y={name:"OpenwbChargeLogView",components:{Vue3TableLite:S,FontAwesomeIcon:N},mixins:[I],emits:["sendCommand"],data(){return{dateTimeFormat:new Intl.DateTimeFormat(void 0,{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}),mqttTopics:[{topic:"openWB/chargepoint/+/config",writeable:!1},{topic:"openWB/general/charge_log_data_config",writeable:!1},{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/vehicle/+/info",writeable:!1},{topic:"openWB/vehicle/+/name",writeable:!1}],currentMonth:"",chargeLogRequestData:{month:"",year:"",filter:{chargepoint:{id:[]},vehicle:{id:[],tag:[],chargemode:[],prio:void 0}}},downloadFile:null,table:{messages:{pagingInfo:"Einträge {0}-{1} von {2}",pageSizeChangeLabel:"Einträge:",gotoPageLabel:" Gehe zu:",noDataAvailable:"Keine Einträge gefunden."},pageOptions:[{value:5,text:"5"},{value:10,text:"10"},{value:25,text:"25"},{value:50,text:"50"},{value:100,text:"100"}],columns:[{label:"Beginn",field:"time_begin",sortable:!0},{label:"Ende",field:"time_end",sortable:!0},{label:"Dauer",field:"time_time_charged",sortable:!0},{label:"Kosten",field:"data_costs",sortable:!0},{label:"Energieaufteilung",field:"data_power_source",sortable:!1},{label:"Fahrzeug",field:"vehicle_name",sortable:!0},{label:"Lademodus",field:"vehicle_chargemode",sortable:!0},{label:"Priorität",field:"vehicle_prio",sortable:!0},{label:"ID-Tag",field:"vehicle_rfid",sortable:!0},{label:"Kilometerstand",field:"vehicle_odometer",sortable:!0},{label:"SoC Beginn",field:"vehicle_soc_at_start",sortable:!0},{label:"SoC Ende",field:"vehicle_soc_at_end",sortable:!0},{label:"Ladepunkt",field:"chargepoint_name",sortable:!0},{label:"Seriennummer",field:"chargepoint_serial_number",sortable:!0},{label:"Energie",field:"data_imported_since_mode_switch",sortable:!0},{label:"Zähler Laden Beginn",field:"chargepoint_imported_at_start",sortable:!0},{label:"Zähler Laden Ende",field:"chargepoint_imported_at_end",sortable:!0},{label:"Entladene Energie",field:"data_exported_since_mode_switch",sortable:!0},{label:"Zähler Entladen Beginn",field:"chargepoint_exported_at_start",sortable:!0},{label:"Zähler Entladen Ende",field:"chargepoint_exported_at_end",sortable:!0}],sortable:{order:"timestamp_begin",sort:"asc"}},totals:{columns:[{label:"Dauer",field:"time_charged",sortable:!1},{label:"Energie",field:"imported_since_mode_switch",sortable:!1},{label:"Entladene Energie",field:"exported_since_mode_switch",sortable:!1},{label:"Reichweite",field:"range_charged",sortable:!1},{label:"Kosten",field:"costs",sortable:!1}]}}},computed:{mqttClientId(){return this.$root.mqttClientId},baseUrl(){const t=parseInt(location.port)||(location.protocol==="https:"?443:80);return`${location.protocol}//${location.hostname}:${t}/openWB/web/settings/downloadChargeLog.php`},downloadUrlMonth(){return!this.chargeLogRequestData.year||!this.chargeLogRequestData.month?null:`${this.baseUrl}?year=${this.chargeLogRequestData.year}&month=${this.chargeLogRequestData.month}`},downloadUrlYear(){return this.chargeLogRequestData.year?`${this.baseUrl}?year=${this.chargeLogRequestData.year}`:null},chargeLogDate:{get(){return this.chargeLogRequestData.year+"-"+this.chargeLogRequestData.month},set(t){let e=t.split("-");this.chargeLogRequestData.year=e[0],this.chargeLogRequestData.month=e[1]}},chargeLogTotals(){return this.$store.state.mqtt["openWB/log/"+this.mqttClientId+"/data"]?[this.$store.state.mqtt["openWB/log/"+this.mqttClientId+"/data"].totals]:[]},chargeLogColumns(){return this.table.columns.map(t=>({...t,headerClasses:this.addClasses(t.field),columnClasses:this.addClasses(t.field)}))},chargeLogDataset:{get(){if(this.$store.state.mqtt["openWB/log/"+this.mqttClientId+"/data"]==null)return[];try{return this.$store.state.mqtt["openWB/log/"+this.mqttClientId+"/data"].entries.map(t=>{var e=Date.parse(t.time.begin),i=Date.parse(t.time.end);return{chargepoint_id:t.chargepoint.id,chargepoint_name:t.chargepoint.name,chargepoint_imported_at_start:t.chargepoint.imported_at_start,chargepoint_imported_at_end:t.chargepoint.imported_at_end,chargepoint_exported_at_start:t.chargepoint.exported_at_start,chargepoint_exported_at_end:t.chargepoint.exported_at_end,chargepoint_serial_number:t.chargepoint.serial_number,vehicle_id:t.vehicle.id,vehicle_name:t.vehicle.name,vehicle_chargemode:this.translateChargeMode(t.vehicle.chargemode),vehicle_rfid:t.vehicle.rfid,vehicle_odometer:t.vehicle.odometer,vehicle_prio:t.vehicle.prio,vehicle_soc_at_start:t.vehicle.soc_at_start,vehicle_soc_at_end:t.vehicle.soc_at_end,vehicle_range_at_start:t.vehicle.range_at_start,vehicle_range_at_end:t.vehicle.range_at_end,timestamp_begin:e/1e3,time_begin:isNaN(e)?null:this.dateTimeFormat.format(new Date(e)),timestamp_end:i/1e3,time_end:isNaN(i)?null:this.dateTimeFormat.format(new Date(i)),time_time_charged:t.time.time_charged,data_power_source:t.data.power_source?{pv:t.data.power_source.pv*100,grid:t.data.power_source.grid*100,bat:t.data.power_source.bat*100,cp:t.data.power_source.cp*100}:void 0,data_range_charged:t.data.range_charged,data_costs:t.data.costs,data_imported_since_plugged:t.data.imported_since_plugged,data_imported_since_mode_switch:t.data.imported_since_mode_switch,data_exported_since_plugged:t.data.exported_since_plugged,data_exported_since_mode_switch:t.data.exported_since_mode_switch}})}catch(t){return console.error(t),[]}}},chargeLogCsv:{get(){return[['"Beginn"','"Ende"','"Zeitstempel Beginn"','"Zeitstempel Ende"','"Dauer"','"Kosten"','"Energieanteil Netz"','"Energieanteil Ladepunkte"','"Energieanteil Speicher"','"Energieanteil PV"','"Fahrzeug"','"Fahrzeug-ID"','"Lademodus"','"Priorität"','"ID-Tag"','"Kilometerstand"','"SoC Beginn"','"SoC Ende"','"Reichweite Beginn"','"Reichweite Ende"','"Ladepunkt"','"Ladepunkt-ID"','"Zähler Seriennummer"','"Geladene Energie"','"Entladene Energie"','"Reichweite"','"Zählerstand Laden Beginn"','"Zählerstand Laden Ende"','"Zählerstand Entladen Beginn"','"Zählerstand Entladen Ende"','"Energie seit Anstecken"','"Entladene Energie seit Anstecken"'],...this.chargeLogDataset.map(e=>[e.time_begin==null?"":'"'+e.time_begin+'"',e.time_end==null?"":'"'+e.time_end+'"',e.timestamp_begin==null||isNaN(e.timestamp_begin)?"":e.timestamp_begin,e.timestamp_end==null||isNaN(e.timestamp_end)?"":e.timestamp_end,'"'+e.time_time_charged+'"',this.formatCosts(e.data_costs,!1),e.data_power_source==null?"":this.formatNumber(e.data_power_source.grid,2),e.data_power_source==null?"":this.formatNumber(e.data_power_source.cp,2),e.data_power_source==null?"":this.formatNumber(e.data_power_source.bat,2),e.data_power_source==null?"":this.formatNumber(e.data_power_source.pv,2),'"'+e.vehicle_name+'"',e.vehicle_id,'"'+e.vehicle_chargemode+'"','"'+this.formatBool(e.vehicle_prio)+'"',e.vehicle_rfid==null?"":'"'+e.vehicle_rfid+'"',e.vehicle_odometer==null?"":'"'+e.vehicle_odometer+'"',e.vehicle_soc_at_start==null?"":this.formatNumber(e.vehicle_soc_at_start,0),e.vehicle_soc_at_end==null?"":this.formatNumber(e.vehicle_soc_at_end,0),e.vehicle_range_at_start==null?"":this.formatNumber(e.vehicle_range_at_start,0),e.vehicle_range_at_end==null?"":this.formatNumber(e.vehicle_range_at_end,0),'"'+e.chargepoint_name+'"',e.chargepoint_id,e.chargepoint_serial_number==null?"":'"'+e.chargepoint_serial_number+'"',this.formatNumber(e.data_imported_since_mode_switch/1e3,2),this.formatNumber((e.data_exported_since_mode_switch||0)/1e3,2),this.formatNumber(e.data_range_charged,0),this.formatNumber(e.chargepoint_imported_at_start/1e3,2),this.formatNumber(e.chargepoint_imported_at_end/1e3,2),this.formatNumber((e.chargepoint_exported_at_start||0)/1e3,2),this.formatNumber((e.chargepoint_exported_at_end||0)/1e3,2),this.formatNumber(e.data_imported_since_plugged/1e3,2),this.formatNumber((e.data_exported_since_plugged||0)/1e3,2)])].map(e=>e.join(";")).join(` +import{F as N,l as k,a8 as E,a9 as R}from"./vendor-fortawesome-DplTMxoa.js";import{_ as B,a5 as S,m as h,l as _,f as g,q as c,u as s,B as d,y as o,J as n,z as W,k as w,O as m,x as V}from"./vendor-BwGffBs-.js";import{C as I}from"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";k.add(E,R);const y={name:"OpenwbChargeLogView",components:{Vue3TableLite:S,FontAwesomeIcon:N},mixins:[I],emits:["sendCommand"],data(){return{dateTimeFormat:new Intl.DateTimeFormat(void 0,{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}),mqttTopics:[{topic:"openWB/chargepoint/+/config",writeable:!1},{topic:"openWB/general/charge_log_data_config",writeable:!1},{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/vehicle/+/info",writeable:!1},{topic:"openWB/vehicle/+/name",writeable:!1}],currentMonth:"",chargeLogRequestData:{month:"",year:"",filter:{chargepoint:{id:[]},vehicle:{id:[],tag:[],chargemode:[],prio:void 0}}},downloadFile:null,table:{messages:{pagingInfo:"Einträge {0}-{1} von {2}",pageSizeChangeLabel:"Einträge:",gotoPageLabel:" Gehe zu:",noDataAvailable:"Keine Einträge gefunden."},pageOptions:[{value:5,text:"5"},{value:10,text:"10"},{value:25,text:"25"},{value:50,text:"50"},{value:100,text:"100"}],columns:[{label:"Beginn",field:"time_begin",sortable:!0},{label:"Ende",field:"time_end",sortable:!0},{label:"Dauer",field:"time_time_charged",sortable:!0},{label:"Kosten",field:"data_costs",sortable:!0},{label:"Energieaufteilung",field:"data_power_source",sortable:!1},{label:"Fahrzeug",field:"vehicle_name",sortable:!0},{label:"Lademodus",field:"vehicle_chargemode",sortable:!0},{label:"Priorität",field:"vehicle_prio",sortable:!0},{label:"ID-Tag",field:"vehicle_rfid",sortable:!0},{label:"Kilometerstand",field:"vehicle_odometer",sortable:!0},{label:"SoC Beginn",field:"vehicle_soc_at_start",sortable:!0},{label:"SoC Ende",field:"vehicle_soc_at_end",sortable:!0},{label:"Ladepunkt",field:"chargepoint_name",sortable:!0},{label:"Seriennummer",field:"chargepoint_serial_number",sortable:!0},{label:"Energie",field:"data_imported_since_mode_switch",sortable:!0},{label:"Zähler Laden Beginn",field:"chargepoint_imported_at_start",sortable:!0},{label:"Zähler Laden Ende",field:"chargepoint_imported_at_end",sortable:!0},{label:"Entladene Energie",field:"data_exported_since_mode_switch",sortable:!0},{label:"Zähler Entladen Beginn",field:"chargepoint_exported_at_start",sortable:!0},{label:"Zähler Entladen Ende",field:"chargepoint_exported_at_end",sortable:!0}],sortable:{order:"timestamp_begin",sort:"asc"}},totals:{columns:[{label:"Dauer",field:"time_charged",sortable:!1},{label:"Energie",field:"imported_since_mode_switch",sortable:!1},{label:"Entladene Energie",field:"exported_since_mode_switch",sortable:!1},{label:"Reichweite",field:"range_charged",sortable:!1},{label:"Kosten",field:"costs",sortable:!1}]}}},computed:{mqttClientId(){return this.$root.mqttClientId},baseUrl(){const t=parseInt(location.port)||(location.protocol==="https:"?443:80);return`${location.protocol}//${location.hostname}:${t}/openWB/web/settings/downloadChargeLog.php`},downloadUrlMonth(){return!this.chargeLogRequestData.year||!this.chargeLogRequestData.month?null:`${this.baseUrl}?year=${this.chargeLogRequestData.year}&month=${this.chargeLogRequestData.month}`},downloadUrlYear(){return this.chargeLogRequestData.year?`${this.baseUrl}?year=${this.chargeLogRequestData.year}`:null},chargeLogDate:{get(){return this.chargeLogRequestData.year+"-"+this.chargeLogRequestData.month},set(t){let e=t.split("-");this.chargeLogRequestData.year=e[0],this.chargeLogRequestData.month=e[1]}},chargeLogTotals(){return this.$store.state.mqtt["openWB/log/"+this.mqttClientId+"/data"]?[this.$store.state.mqtt["openWB/log/"+this.mqttClientId+"/data"].totals]:[]},chargeLogColumns(){return this.table.columns.map(t=>({...t,headerClasses:this.addClasses(t.field),columnClasses:this.addClasses(t.field)}))},chargeLogDataset:{get(){if(this.$store.state.mqtt["openWB/log/"+this.mqttClientId+"/data"]==null)return[];try{return this.$store.state.mqtt["openWB/log/"+this.mqttClientId+"/data"].entries.map(t=>{var e=Date.parse(t.time.begin),i=Date.parse(t.time.end);return{chargepoint_id:t.chargepoint.id,chargepoint_name:t.chargepoint.name,chargepoint_imported_at_start:t.chargepoint.imported_at_start,chargepoint_imported_at_end:t.chargepoint.imported_at_end,chargepoint_exported_at_start:t.chargepoint.exported_at_start,chargepoint_exported_at_end:t.chargepoint.exported_at_end,chargepoint_serial_number:t.chargepoint.serial_number,vehicle_id:t.vehicle.id,vehicle_name:t.vehicle.name,vehicle_chargemode:this.translateChargeMode(t.vehicle.chargemode),vehicle_rfid:t.vehicle.rfid,vehicle_odometer:t.vehicle.odometer,vehicle_prio:t.vehicle.prio,vehicle_soc_at_start:t.vehicle.soc_at_start,vehicle_soc_at_end:t.vehicle.soc_at_end,vehicle_range_at_start:t.vehicle.range_at_start,vehicle_range_at_end:t.vehicle.range_at_end,timestamp_begin:e/1e3,time_begin:isNaN(e)?null:this.dateTimeFormat.format(new Date(e)),timestamp_end:i/1e3,time_end:isNaN(i)?null:this.dateTimeFormat.format(new Date(i)),time_time_charged:t.time.time_charged,data_power_source:t.data.power_source?{pv:t.data.power_source.pv*100,grid:t.data.power_source.grid*100,bat:t.data.power_source.bat*100,cp:t.data.power_source.cp*100}:void 0,data_range_charged:t.data.range_charged,data_costs:t.data.costs,data_imported_since_plugged:t.data.imported_since_plugged,data_imported_since_mode_switch:t.data.imported_since_mode_switch,data_exported_since_plugged:t.data.exported_since_plugged,data_exported_since_mode_switch:t.data.exported_since_mode_switch}})}catch(t){return console.error(t),[]}}},chargeLogCsv:{get(){return[['"Beginn"','"Ende"','"Zeitstempel Beginn"','"Zeitstempel Ende"','"Dauer"','"Kosten"','"Energieanteil Netz"','"Energieanteil Ladepunkte"','"Energieanteil Speicher"','"Energieanteil PV"','"Fahrzeug"','"Fahrzeug-ID"','"Lademodus"','"Priorität"','"ID-Tag"','"Kilometerstand"','"SoC Beginn"','"SoC Ende"','"Reichweite Beginn"','"Reichweite Ende"','"Ladepunkt"','"Ladepunkt-ID"','"Zähler Seriennummer"','"Geladene Energie"','"Entladene Energie"','"Reichweite"','"Zählerstand Laden Beginn"','"Zählerstand Laden Ende"','"Zählerstand Entladen Beginn"','"Zählerstand Entladen Ende"','"Energie seit Anstecken"','"Entladene Energie seit Anstecken"'],...this.chargeLogDataset.map(e=>[e.time_begin==null?"":'"'+e.time_begin+'"',e.time_end==null?"":'"'+e.time_end+'"',e.timestamp_begin==null||isNaN(e.timestamp_begin)?"":e.timestamp_begin,e.timestamp_end==null||isNaN(e.timestamp_end)?"":e.timestamp_end,'"'+e.time_time_charged+'"',this.formatCosts(e.data_costs,!1),e.data_power_source==null?"":this.formatNumber(e.data_power_source.grid,2),e.data_power_source==null?"":this.formatNumber(e.data_power_source.cp,2),e.data_power_source==null?"":this.formatNumber(e.data_power_source.bat,2),e.data_power_source==null?"":this.formatNumber(e.data_power_source.pv,2),'"'+e.vehicle_name+'"',e.vehicle_id,'"'+e.vehicle_chargemode+'"','"'+this.formatBool(e.vehicle_prio)+'"',e.vehicle_rfid==null?"":'"'+e.vehicle_rfid+'"',e.vehicle_odometer==null?"":'"'+e.vehicle_odometer+'"',e.vehicle_soc_at_start==null?"":this.formatNumber(e.vehicle_soc_at_start,0),e.vehicle_soc_at_end==null?"":this.formatNumber(e.vehicle_soc_at_end,0),e.vehicle_range_at_start==null?"":this.formatNumber(e.vehicle_range_at_start,0),e.vehicle_range_at_end==null?"":this.formatNumber(e.vehicle_range_at_end,0),'"'+e.chargepoint_name+'"',e.chargepoint_id,e.chargepoint_serial_number==null?"":'"'+e.chargepoint_serial_number+'"',this.formatNumber(e.data_imported_since_mode_switch/1e3,2),this.formatNumber((e.data_exported_since_mode_switch||0)/1e3,2),this.formatNumber(e.data_range_charged,0),this.formatNumber(e.chargepoint_imported_at_start/1e3,2),this.formatNumber(e.chargepoint_imported_at_end/1e3,2),this.formatNumber((e.chargepoint_exported_at_start||0)/1e3,2),this.formatNumber((e.chargepoint_exported_at_end||0)/1e3,2),this.formatNumber(e.data_imported_since_plugged/1e3,2),this.formatNumber((e.data_exported_since_plugged||0)/1e3,2)])].map(e=>e.join(";")).join(` `)+` `}},chargeLogRead:{get(){return this.chargeLogDataset!=null}},chargeLogHasEntries:{get(){return this.chargeLogDataset==null?!1:this.chargeLogDataset.length>0}},totalRecordCount(){return this.chargeLogDataset.length},chargeModeList(){let t=this.chargeModes.map(i=>({value:i,text:this.translateChargeMode(i)}));const e=t.map(i=>i.value);return t.unshift({value:e,text:"Alle"}),t},chargePointList(){let t=this.getWildcardTopics("openWB/chargepoint/+/config");var e=[];for(const[,i]of Object.entries(t))e.push({value:i.id,text:i.name});return e.length>=1&&e.unshift({value:[],text:"Alle"}),e},vehicleList(){let t=this.getWildcardTopics("openWB/vehicle/+/info");var e=[];for(const i of Object.keys(t)){let u=parseInt(i.match(/\/([0-9]+)\/info$/)[1]);const l=this.$store.state.mqtt["openWB/vehicle/"+u+"/name"];e.push({value:u,text:l||`Fahrzeug ${u}`})}return e.length>=1&&e.unshift({value:[],text:"Alle"}),e}},beforeMount(){this.mqttTopics.push({topic:"openWB/log/"+this.mqttClientId+"/data",writeable:!1});const t=new Date;this.currentMonth=this.chargeLogDate=t.getFullYear()+"-"+String(t.getMonth()+1).padStart(2,"0")},mounted(){window.setTimeout(()=>{console.debug("initial charge log request"),console.debug("vehicle List on init:",JSON.stringify(this.vehicleList)),console.debug("charge Point List on init:",JSON.stringify(this.chargePointList)),this.requestChargeLog()},500)},methods:{cleanRequestData(){const t=i=>i==null?[]:Array.isArray(i)?i.some(u=>Array.isArray(u))?[]:i:[i],e=this.chargeLogRequestData.filter;e.vehicle.id=t(e.vehicle.id).filter(i=>i!==void 0),e.vehicle.chargemode=t(e.vehicle.chargemode).filter(i=>i!==void 0),e.chargepoint.id=t(e.chargepoint.id).filter(i=>i!==void 0),e.vehicle.prio===null&&(e.vehicle.prio=void 0),console.debug("cleaned request data",JSON.stringify(this.chargeLogRequestData))},requestChargeLog(){if(console.debug("requesting charge log with data:",JSON.stringify(this.chargeLogRequestData)),document.forms.chargeLogForm?.reportValidity())this.cleanRequestData(),this.$emit("sendCommand",{command:"getChargeLog",data:this.chargeLogRequestData});else{console.warn("form invalid");return}},makeTextFile(t){var e=new Blob([t],{type:"text/csv"});return this.downloadFile!==null&&window.URL.revokeObjectURL(this.downloadFile),this.downloadFile=window.URL.createObjectURL(e),this.downloadFile},downloadChargeLog(){this.$refs.downloadChargeLogLink.setAttribute("download","Ladeprotokoll-"+this.chargeLogDate+".csv"),this.$refs.downloadChargeLogLink.href=this.makeTextFile(this.chargeLogCsv),this.$refs.downloadChargeLogLink.dispatchEvent(new MouseEvent("click"))},addClasses(t){return this.$store.state.mqtt["openWB/general/charge_log_data_config"]!==void 0&&Object.hasOwn(this.$store.state.mqtt["openWB/general/charge_log_data_config"],t)?this.$store.state.mqtt["openWB/general/charge_log_data_config"][t]?[]:["d-none"]:[]},getProgressTitle(t){return`Netz: ${this.formatNumber(t.grid,0,0)}%, Ladepunkte: ${this.formatNumber(t.cp,0,0)}%, Speicher: ${this.formatNumber(t.bat,0,0)}%, PV: ${this.formatNumber(t.pv,0,0)}%`},formatBool(t){return t?"Ja":"Nein"},formatW(t,e=!0){let i=this.dashIfNotSet(this.formatNumber(t/1e3,2));return e?i+"kW":i},formatWh(t,e=!0){let i=this.dashIfNotSet(this.formatNumber(t/1e3,2));return e?i+"kWh":i},formatRange(t,e=!0){let i=this.dashIfNotSet(this.formatNumber(t,0));return e?i+"km":i},formatOdometer(t,e=!0){let i=this.dashIfNotSet(this.formatNumber(t,0));return e?i+"km":i},formatSoc(t,e=!0){let i=this.dashIfNotSet(this.formatNumber(t,0));return e?i+"%":i},formatCosts(t,e=!0){let i=this.dashIfNotSet(this.formatNumber(t,2));return e?i+"€":i},dashIfNotSet(t){return t==null||t==""||t==null?"-":t},getChargeModeClass(t){switch(t){case"Sofort":return"bg-danger";case"PV":return"bg-success";case"Zielladen":return"bg-primary";case"Zeitladen":return"bg-warning";case"Eco":case"Standby":return"bg-secondary";case"Stop":return"bg-dark";default:return console.warn("unknown charge mode:",t),"bg-light"}}}},F={class:"chargeLog"},T={key:0},U={key:1},M={name:"chargeLogForm"},O=["href"],A=["href"],P={key:1},Z={class:"td-end"},z={class:"td-end"},j=["title"],J=["aria-valuenow"],K=["aria-valuenow"],Y=["aria-valuenow"],G=["aria-valuenow"],H={key:1,class:"td-center"},Q={class:"td-end"},X={class:"no-wrap"},$={class:"no-wrap"},ee={class:"td-end"},te={class:"no-wrap"},ae={class:"no-wrap"},re={class:"td-end"},ie={class:"no-wrap"},oe={class:"no-wrap"},se={class:"td-end"},ne={class:"no-wrap"},le={class:"td-end"},de={class:"td-end"},ce={class:"td-end"},he={class:"td-end"},_e={key:0},ge={class:"row justify-content-center"},ue={ref:"downloadChargeLogLink",class:"hide"},me={class:"td-end"},pe={class:"td-end"},fe={class:"td-end"},be={class:"td-end"},ve={class:"td-end"};function Le(t,e,i,u,l,r){const p=h("openwb-base-alert"),C=h("openwb-base-text-input"),b=h("font-awesome-icon"),D=h("openwb-base-button-group-input"),f=h("openwb-base-select-input"),x=h("openwb-base-array-input"),v=h("openwb-base-card"),L=h("vue3-table-lite"),q=h("openwb-base-click-button");return _(),g("div",F,[t.$store.state.mqtt["openWB/general/extern"]===!0?(_(),g("div",T,[c(p,{subtype:"info"},{default:s(()=>[...e[13]||(e[13]=[d(' Das Ladeprotokoll ist nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. Du findest alle Ladevorgänge in der openWB, die sich im Steuerungsmodus "primary" befindet. ',-1)])]),_:1})])):(_(),g("div",U,[o("form",M,[c(v,{title:"Filter"},{default:s(()=>[c(C,{modelValue:r.chargeLogDate,"onUpdate:modelValue":[e[0]||(e[0]=a=>r.chargeLogDate=a),e[1]||(e[1]=a=>r.requestChargeLog())],title:"Zeitraum",subtype:"month",min:"2018-01","show-quick-buttons":!0,max:l.currentMonth},null,8,["modelValue","max"]),c(v,{title:"Erweiterte Optionen",collapsible:!0,collapsed:!0},{header:s(()=>[c(b,{icon:["fas","filter"]}),e[14]||(e[14]=d(" Erweiterte Optionen ",-1))]),default:s(()=>[c(D,{modelValue:l.chargeLogRequestData.filter.vehicle.prio,"onUpdate:modelValue":[e[2]||(e[2]=a=>l.chargeLogRequestData.filter.vehicle.prio=a),e[3]||(e[3]=a=>r.requestChargeLog())],title:"Priorität",buttons:[{buttonValue:null,text:"Alle",class:"btn-outline-info"},{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}]},null,8,["modelValue"]),c(f,{modelValue:l.chargeLogRequestData.filter.vehicle.chargemode,"onUpdate:modelValue":[e[4]||(e[4]=a=>l.chargeLogRequestData.filter.vehicle.chargemode=a),e[5]||(e[5]=a=>r.requestChargeLog())],title:"Lademodus",multiple:"",options:r.chargeModeList},{help:s(()=>[...e[15]||(e[15]=[d(" Es können mehrere Elemente ausgewählt werden. ",-1)])]),_:1},8,["modelValue","options"]),c(f,{modelValue:l.chargeLogRequestData.filter.chargepoint.id,"onUpdate:modelValue":[e[6]||(e[6]=a=>l.chargeLogRequestData.filter.chargepoint.id=a),e[7]||(e[7]=a=>r.requestChargeLog())],title:"Ladepunkt",multiple:"",options:r.chargePointList},{help:s(()=>[...e[16]||(e[16]=[d(" Es können mehrere Elemente ausgewählt werden. ",-1)])]),_:1},8,["modelValue","options"]),c(f,{modelValue:l.chargeLogRequestData.filter.vehicle.id,"onUpdate:modelValue":[e[8]||(e[8]=a=>l.chargeLogRequestData.filter.vehicle.id=a),e[9]||(e[9]=a=>r.requestChargeLog())],title:"Fahrzeug",multiple:"",options:r.vehicleList},{help:s(()=>[...e[17]||(e[17]=[d(" Es können mehrere Elemente ausgewählt werden. ",-1)])]),_:1},8,["modelValue","options"]),c(x,{modelValue:l.chargeLogRequestData.filter.vehicle.tag,"onUpdate:modelValue":[e[10]||(e[10]=a=>l.chargeLogRequestData.filter.vehicle.tag=a),e[11]||(e[11]=a=>r.requestChargeLog())],title:"ID-Tags"},{help:s(()=>[...e[18]||(e[18]=[d(" Es können mehrere Tags als Filter verwendet werden. ",-1)])]),_:1},8,["modelValue"])]),_:1})]),_:1}),c(p,{subtype:"info"},{default:s(()=>[e[19]||(e[19]=d(" Das Ladeprotokoll kann monatsweise automatisiert über folgende URL abgerufen werden: ",-1)),o("a",{href:r.downloadUrlMonth},n(r.downloadUrlMonth),9,O),e[20]||(e[20]=d()),e[21]||(e[21]=o("br",null,null,-1)),e[22]||(e[22]=d(" Das komplette Ladeprotokoll für das gesamte Jahr kann automatisiert über folgende URL abgerufen werden: ",-1)),o("a",{href:r.downloadUrlYear},n(r.downloadUrlYear),9,A)]),_:1}),r.chargeLogRead?(_(),g("div",P,[c(L,{class:"charge-log-table","is-static-mode":!0,columns:r.chargeLogColumns,rows:r.chargeLogDataset,total:r.totalRecordCount,sortable:l.table.sortable,messages:l.table.messages,"page-options":l.table.pageOptions,limit:25,"is-slot-mode":!0},{time_begin:s(a=>[d(n(r.dashIfNotSet(a.value.time_begin)),1)]),time_end:s(a=>[d(n(r.dashIfNotSet(a.value.time_end)),1)]),time_time_charged:s(a=>[o("div",Z,n(a.value.time_time_charged),1)]),data_costs:s(a=>[o("div",z,n(r.formatCosts(a.value.data_costs)),1)]),data_power_source:s(a=>[a.value.data_power_source?(_(),g("div",{key:0,class:"progress td-center",title:r.getProgressTitle(a.value.data_power_source)},[o("div",{class:"progress-bar bg-danger",role:"progressbar",style:m({width:a.value.data_power_source.grid+"%"}),"aria-valuenow":a.value.data_power_source.grid,"aria-valuemin":"0","aria-valuemax":"100"},null,12,J),o("div",{class:"progress-bar bg-primary",role:"progressbar",style:m({width:a.value.data_power_source.cp+"%"}),"aria-valuenow":a.value.data_power_source.cp,"aria-valuemin":"0","aria-valuemax":"100"},null,12,K),o("div",{class:"progress-bar bg-warning",role:"progressbar",style:m({width:a.value.data_power_source.bat+"%"}),"aria-valuenow":a.value.data_power_source.bat,"aria-valuemin":"0","aria-valuemax":"100"},null,12,Y),o("div",{class:"progress-bar bg-success",role:"progressbar",style:m({width:a.value.data_power_source.pv+"%"}),"aria-valuenow":a.value.data_power_source.pv,"aria-valuemin":"0","aria-valuemax":"100"},null,12,G)],8,j)):(_(),g("div",H," - "))]),vehicle_chargemode:s(a=>[o("div",{class:w(["td-center tag",r.getChargeModeClass(a.value.vehicle_chargemode)])},n(a.value.vehicle_chargemode),3)]),vehicle_prio:s(a=>[o("div",{class:w(["td-center tag",a.value.vehicle_prio?"bg-success":"bg-danger"])},n(r.formatBool(a.value.vehicle_prio)),3)]),vehicle_rfid:s(a=>[d(n(r.dashIfNotSet(a.value.vehicle_rfid)),1)]),vehicle_odometer:s(a=>[d(n(r.formatOdometer(a.value.vehicle_odometer)),1)]),vehicle_soc_at_start:s(a=>[o("div",Q,[o("span",X,n(r.formatSoc(a.value.vehicle_soc_at_start)),1),o("span",$," ("+n(r.formatRange(a.value.vehicle_range_at_start))+") ",1)])]),vehicle_soc_at_end:s(a=>[o("div",ee,[o("span",te,n(r.formatSoc(a.value.vehicle_soc_at_end)),1),o("span",ae," ("+n(r.formatRange(a.value.vehicle_range_at_end))+") ",1)])]),chargepoint_name:s(a=>[d(n(r.dashIfNotSet(a.value.chargepoint_name)),1)]),chargepoint_serial_number:s(a=>[d(n(r.dashIfNotSet(a.value.chargepoint_serial_number)),1)]),data_imported_since_mode_switch:s(a=>[o("div",re,[o("span",ie,n(r.formatWh(a.value.data_imported_since_mode_switch)),1),o("span",oe," ("+n(r.formatRange(a.value.data_range_charged))+") ",1)])]),data_exported_since_mode_switch:s(a=>[o("div",se,[o("span",ne,n(r.formatWh(a.value.data_exported_since_mode_switch||0)),1)])]),chargepoint_imported_at_start:s(a=>[o("div",le,n(r.formatWh(a.value.chargepoint_imported_at_start)),1)]),chargepoint_imported_at_end:s(a=>[o("div",de,n(r.formatWh(a.value.chargepoint_imported_at_end)),1)]),chargepoint_exported_at_start:s(a=>[o("div",ce,n(r.formatWh(a.value.chargepoint_exported_at_start||0)),1)]),chargepoint_exported_at_end:s(a=>[o("div",he,n(r.formatWh(a.value.chargepoint_exported_at_end||0)),1)]),_:1},8,["columns","rows","total","sortable","messages","page-options"]),r.totalRecordCount>0?(_(),g("div",_e,[o("div",ge,[c(q,{class:"col-4 btn-success",onButtonClicked:e[12]||(e[12]=a=>r.downloadChargeLog())},{default:s(()=>[e[24]||(e[24]=d(" Als CSV exportieren ",-1)),c(b,{icon:["fas","download"]})]),_:1}),o("a",ue,null,512)]),e[25]||(e[25]=o("div",{class:"row"},[o("div",{class:"col"},[o("h2",null,"Summe")])],-1)),c(L,{class:"charge-log-totals","is-static-mode":!0,"is-hide-paging":!0,columns:l.totals.columns,rows:r.chargeLogTotals,total:1,"is-slot-mode":!0},{time_charged:s(a=>[o("div",me,n(a.value.time_charged),1)]),imported_since_mode_switch:s(a=>[o("div",pe,n(r.formatWh(a.value.imported_since_mode_switch)),1)]),exported_since_mode_switch:s(a=>[o("div",fe,n(r.formatWh(a.value.exported_since_mode_switch||0)),1)]),range_charged:s(a=>[o("div",be,n(r.formatRange(a.value.range_charged)),1)]),costs:s(a=>[o("div",ve,n(r.formatCosts(a.value.costs)),1)]),_:1},8,["columns","rows"])])):V("",!0)])):(_(),W(p,{key:0,subtype:"info"},{default:s(()=>[...e[23]||(e[23]=[d(" Es wurden noch keine Daten abgerufen. ",-1)])]),_:1}))])]))])}const ke=B(y,[["render",Le],["__scopeId","data-v-8607e7e7"],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/ChargeLog.vue"]]);export{ke as default}; diff --git a/web/settings/assets/ChargePointInstallation-u7kPgCv5.js b/web/settings/assets/ChargePointInstallation-CmmRvfWj.js similarity index 96% rename from web/settings/assets/ChargePointInstallation-u7kPgCv5.js rename to web/settings/assets/ChargePointInstallation-CmmRvfWj.js index 7a60ad4feb..815ac3e16c 100644 --- a/web/settings/assets/ChargePointInstallation-u7kPgCv5.js +++ b/web/settings/assets/ChargePointInstallation-CmmRvfWj.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chargePoint-Pf0_HKLP.js","assets/vendor-BwGffBs-.js","assets/vendor-Cq9CCOuG.css","assets/vendor-fortawesome-DplTMxoa.js","assets/index-Bv2WLdLZ.js","assets/vendor-bootstrap-DxivtUnb.js","assets/vendor-jquery-CEMonh9Y.js","assets/vendor-bootstrap-BJ8HpIhY.css","assets/vendor-axios-C0vEeTtS.js","assets/index-xf6JJloS.css","assets/SystemVersion-eCZ4XHiC.js","assets/dynamic-import-helper-BheWnx7M.js","assets/chargePoint-Bhe_YdR3.js","assets/chargePoint-BcOWjdb0.js","assets/chargePoint-BHhf5-E6.js","assets/chargePoint-ClSZgToH.js","assets/chargePoint-BkIvK-cu.js","assets/chargePoint-oww4Ns3m.js","assets/commands-CBYCGJEQ.js","assets/commands-CY34MdmV.js"])))=>i.map(i=>d[i]); -import{F as j,l as R,al as N,ak as Z,H,aj as J,ai as $,P as te,d as ne,X as ae,az as oe}from"./vendor-fortawesome-DplTMxoa.js";import{_ as P,C as G}from"./index-Bv2WLdLZ.js";import{S as le}from"./SystemVersion-eCZ4XHiC.js";import{_ as O}from"./dynamic-import-helper-BheWnx7M.js";import{_ as z,m as p,l,f as u,z as h,u as o,B as i,J as k,q as a,y as m,a7 as F,P as M,K as A,x as g,L as E,A as S,k as ie,O as re,D as se}from"./vendor-BwGffBs-.js";const ue={props:{chargePoint:{type:Object,required:!0}},emits:["update:configuration"],methods:{updateConfiguration(t,e=void 0){this.$emit("update:configuration",{value:t,object:e})}}},de=z(ue,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/ChargePointConfigMixin.vue"]]),pe={name:"ChargePointConfigFallback",mixins:[de]},me={class:"charge-point-config-fallback"},ge={key:1};function ce(t,e,c,w,_,n){const v=p("openwb-base-alert"),b=p("openwb-base-textarea");return l(),u("div",me,[Object.keys(t.chargePoint.configuration).length==0?(l(),h(v,{key:0,subtype:"info"},{default:o(()=>[i(' Der Ladepunkt-Typ "'+k(t.chargePoint.type)+'" bietet keine Einstellungen. ',1)]),_:1})):(l(),u("div",ge,[a(v,{subtype:"warning"},{default:o(()=>[i(' Es wurde keine Konfigurationsseite für den Ladepunkt-Typ "'+k(t.chargePoint.type)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),a(b,{title:"Konfiguration",subtype:"json","model-value":t.chargePoint.configuration,"onUpdate:modelValue":e[0]||(e[0]=C=>t.updateConfiguration(C,"configuration"))},{help:o(()=>[...e[1]||(e[1]=[i(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),a(v,{subtype:"info"},{default:o(()=>[m("pre",null,k(JSON.stringify(t.chargePoint.configuration,void 0,2)),1)]),_:1})]))])}const fe=z(pe,[["render",ce],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/OpenwbChargePointConfigFallback.vue"]]),be={props:{chargePoint:{type:Object,required:!0}}},he=z(be,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/ChargePointCommandsMixin.vue"]]),_e={name:"ChargePointCommandsFallback",mixins:[he]},ke={class:"charge-point-commands-fallback"};function we(t,e,c,w,_,n){return l(),u("div",ke)}const ve=z(_e,[["render",we],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/OpenwbChargePointCommandsFallback.vue"]]),ye={name:"OpenwbChargePointProxy",props:{chargePoint:{required:!0,type:Object}},emits:["update:configuration"],methods:{getChargePointSettingsComponent(){return console.debug(`loading charge point settings: ${this.chargePoint.type}`),F({loader:()=>O(Object.assign({"./external_openwb/chargePoint.vue":()=>P(()=>import("./chargePoint-Pf0_HKLP.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])),"./internal_openwb/chargePoint.vue":()=>P(()=>import("./chargePoint-Bhe_YdR3.js"),__vite__mapDeps([12,1,2,3,4,5,6,7,8,9,10,11])),"./mqtt/chargePoint.vue":()=>P(()=>import("./chargePoint-BcOWjdb0.js"),__vite__mapDeps([13,1,2,3,4,5,6,7,8,9,10,11])),"./openwb_dc_adapter/chargePoint.vue":()=>P(()=>import("./chargePoint-BHhf5-E6.js"),__vite__mapDeps([14,1,2,3,4,5,6,7,8,9,10,11])),"./openwb_pro/chargePoint.vue":()=>P(()=>import("./chargePoint-ClSZgToH.js"),__vite__mapDeps([15,1,2,3,4,5,6,7,8,9,10,11])),"./openwb_series2_satellit/chargePoint.vue":()=>P(()=>import("./chargePoint-BkIvK-cu.js"),__vite__mapDeps([16,1,2,3,4,5,6,7,8,9,10,11])),"./smartwb/chargePoint.vue":()=>P(()=>import("./chargePoint-oww4Ns3m.js"),__vite__mapDeps([17,1,2,3,4,5,6,7,8,9,10,11]))}),`./${this.chargePoint.type}/chargePoint.vue`,3),errorComponent:fe})},getChargePointCommandsComponent(){return console.debug(`loading charge point commands: ${this.chargePoint.type}`),F({loader:()=>O(Object.assign({"./internal_openwb/commands.vue":()=>P(()=>import("./commands-CBYCGJEQ.js"),__vite__mapDeps([18,1,2,3,4,5,6,7,8,9,10,11])),"./openwb_pro/commands.vue":()=>P(()=>import("./commands-CY34MdmV.js"),__vite__mapDeps([19,1,2,3,4,5,6,7,8,9,10,11]))}),`./${this.chargePoint.type}/commands.vue`,3),errorComponent:ve})},updateConfiguration(t){this.$emit("update:configuration",t)}}};function Ce(t,e,c,w,_,n){const v=p("openwb-base-heading");return l(),u(A,null,[a(v,null,{default:o(()=>[i(' Einstellungen für Ladepunkt Typ "'+k(c.chargePoint.type)+'" ',1)]),_:1}),(l(),h(M(n.getChargePointSettingsComponent()),{"charge-point":c.chargePoint,"onUpdate:configuration":e[0]||(e[0]=b=>n.updateConfiguration(b))},null,40,["charge-point"])),e[1]||(e[1]=m("hr",null,null,-1)),a(v,null,{default:o(()=>[i(' Befehle für Ladepunkt Typ "'+k(c.chargePoint.type)+'" ',1)]),_:1}),(l(),h(M(n.getChargePointCommandsComponent()),{"charge-point":c.chargePoint},null,8,["charge-point"]))],64)}const Pe=z(ye,[["render",Ce],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/OpenwbChargePointProxy.vue"]]);R.add(N,Z,H,J,$);const Ve={name:"TemplateAutoLockPlan",components:{FontAwesomeIcon:j},mixins:[G],props:{modelValue:{type:Object,required:!0},templateId:{type:Number,required:!0}},emits:["update:modelValue","sendCommand"],data(){return{showRemoveModal:!1}},computed:{plan(){return this.modelValue}},watch:{plan:{handler(t){this.$emit("update:modelValue",t)},deep:!0}},methods:{copyPlan(){this.$emit("sendCommand",{command:"addAutolockPlan",data:{template:this.templateId,copy:this.modelValue.id}})},removePlanModal(){this.showRemoveModal=!0},removePlan(t){this.showRemoveModal=!1,t=="confirm"&&this.$emit("sendCommand",{command:"removeAutolockPlan",data:{template:this.templateId,plan:this.modelValue.id}})}}},Le={key:0},Be={key:1},We={key:2},Ae={key:1},ze={key:2};function Ie(t,e,c,w,_,n){const v=p("openwb-base-modal-dialog"),b=p("font-awesome-icon"),C=p("openwb-base-avatar"),y=p("openwb-base-text-input"),U=p("openwb-base-button-group-input"),I=p("openwb-base-card");return l(),u(A,null,[a(v,{show:_.showRemoveModal,title:"Autolock Zeitplan löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:n.removePlan},{default:o(()=>[i(' Willst Du den Autolock Zeitplan "'+k(n.plan.name)+'" wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ',1)]),_:1},8,["show","onModalResult"]),a(I,{title:n.plan.name,collapsible:!0,collapsed:!0},{actions:o(f=>[f.collapsed==!0?(l(),u("span",{key:0,class:ie(["pill clickable",n.plan.active?"bg-success":"bg-danger"]),onClick:e[0]||(e[0]=S(V=>n.plan.active=!n.plan.active,["stop"]))},[a(b,{icon:["fas","clock"]}),i(" "+k(n.plan.time[0])+" - "+k(n.plan.time[1])+" ",1),n.plan.frequency.selected=="once"?(l(),u("span",Le,[a(b,{icon:["fas","calendar-day"]}),i(" "+k(t.formatDate(n.plan.frequency.once[0])==t.formatDate(n.plan.frequency.once[1])?t.formatDate(n.plan.frequency.once[0]):t.formatDate(n.plan.frequency.once[0])+" - "+t.formatDate(n.plan.frequency.once[1])),1)])):g("",!0),n.plan.frequency.selected=="daily"?(l(),u("span",Be,[a(b,{icon:["fas","calendar-week"]})])):g("",!0),n.plan.frequency.selected=="weekly"?(l(),u("span",We,[a(b,{icon:["fas","calendar-alt"]})])):g("",!0)],2)):g("",!0),f.collapsed==!1?(l(),u("span",Ae,[a(C,{class:"bg-success clickable",title:"Autolock Zeitplan duplizieren",onClick:e[1]||(e[1]=S(V=>n.copyPlan(),["stop"]))},{default:o(()=>[a(b,{icon:["fas","copy"]})]),_:1}),a(C,{class:"bg-danger clickable ml-1",title:"Autolock Zeitplan löschen",onClick:e[2]||(e[2]=S(V=>n.removePlanModal(),["stop"]))},{default:o(()=>[a(b,{icon:["fas","trash"]})]),_:1})])):g("",!0)]),default:o(()=>[a(y,{modelValue:n.plan.name,"onUpdate:modelValue":e[3]||(e[3]=f=>n.plan.name=f),title:"Bezeichnung"},null,8,["modelValue"]),a(U,{modelValue:n.plan.active,"onUpdate:modelValue":e[4]||(e[4]=f=>n.plan.active=f),title:"Zeitplan aktiv",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}]},null,8,["modelValue"]),a(y,{modelValue:n.plan.time[0],"onUpdate:modelValue":e[5]||(e[5]=f=>n.plan.time[0]=f),title:"Sperren um",subtype:"time"},null,8,["modelValue"]),a(y,{modelValue:n.plan.time[1],"onUpdate:modelValue":e[6]||(e[6]=f=>n.plan.time[1]=f),title:"Freigeben um",subtype:"time"},null,8,["modelValue"]),a(U,{modelValue:n.plan.frequency.selected,"onUpdate:modelValue":e[7]||(e[7]=f=>n.plan.frequency.selected=f),title:"Wiederholungen",buttons:[{buttonValue:"once",text:"Einmalig",class:"btn-outline-info"},{buttonValue:"daily",text:"Täglich",class:"btn-outline-info"},{buttonValue:"weekly",text:"Wöchentlich",class:"btn-outline-info"}]},null,8,["modelValue"]),n.plan.frequency.selected=="once"?(l(),h(y,{key:0,modelValue:n.plan.frequency.once[0],"onUpdate:modelValue":e[8]||(e[8]=f=>n.plan.frequency.once[0]=f),title:"Sperren ab ...",subtype:"date"},null,8,["modelValue"])):g("",!0),n.plan.frequency.selected=="once"?(l(),h(y,{key:1,modelValue:n.plan.frequency.once[1],"onUpdate:modelValue":e[9]||(e[9]=f=>n.plan.frequency.once[1]=f),title:"... bis",subtype:"date",min:n.plan.frequency.once[0]},null,8,["modelValue","min"])):g("",!0),n.plan.frequency.selected=="weekly"?(l(),u("div",ze,[(l(!0),u(A,null,E(t.weekdays,(f,V)=>(l(),h(U,{key:V,modelValue:n.plan.frequency.weekly[V],"onUpdate:modelValue":L=>n.plan.frequency.weekly[V]=L,title:f,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}]},null,8,["modelValue","onUpdate:modelValue","title"]))),128))])):g("",!0)]),_:1},8,["title"])],64)}const Ue=z(Ve,[["render",Ie],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/TemplateAutoLockPlan.vue"]]);R.add(ne,N,Z,H,J,$,ae,oe);const De={name:"OpenwbChargePointInstallationView",components:{FontAwesomeIcon:j,FontAwesomeLayers:te,OpenwbChargePointProxy:Pe,TemplateAutoLockPlan:Ue},mixins:[G,le],props:{installAssistantActive:{type:Boolean,required:!1,default:!1}},emits:["sendCommand","save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/chargepoint/+/config",writeable:!0},{topic:"openWB/chargepoint/template/+",writeable:!0},{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/optional/dc_charging",writeable:!1},{topic:"openWB/optional/ocpp/config",writeable:!1},{topic:"openWB/optional/rfid/active",writeable:!1},{topic:"openWB/system/configurable/chargepoints",writeable:!1},{topic:"openWB/system/configurable/chargepoints_internal",writeable:!1}],chargePointToAdd:void 0,showChargePointModal:!1,modalChargePointIndex:void 0,showChargePointTemplateModal:!1,modalChargePointTemplateIndex:void 0,chargePointColorPalette:["#0052a3","#0066cc","#0d79f2","#007bff","#2f90ff","#58a6ff","#7fbaff","#a3ccff","#c2dbff","#dce9ff"]}},computed:{dcChargingEnabled:{get(){return this.$store.state.mqtt["openWB/optional/dc_charging"]}},installedChargePoints:{get(){let t=this.getWildcardTopics("openWB/chargepoint/+/config"),e={};for(const[c,w]of Object.entries(t))(w&&typeof w=="object"&&w.type==="internal_openwb"||this.$store.state.mqtt["openWB/general/extern"]===!1)&&(e[c]=w);return e}},chargePointTemplates(){const t=this.getWildcardTopics("openWB/chargepoint/template/+");return Object.fromEntries(Object.entries(t).filter(([,e])=>e&&typeof e=="object"))},chargePointTemplateList:{get(){let t=[];return Object.keys(this.chargePointTemplates).forEach(e=>{let c=parseInt(e.match(/([0-9]+)/g)[0]),w=this.$store.state.mqtt["openWB/chargepoint/template/"+c].name;t.push({value:c,text:w})}),t}}},methods:{addChargePoint(){this.$emit("sendCommand",{command:"addChargepoint",data:{type:this.chargePointToAdd}})},removeChargePointModal(t,e){t.stopPropagation(),this.modalChargePointIndex=parseInt(e.match(/(?:\/)(\d+)(?=\/)/)[1]),this.showChargePointModal=!0},removeChargePoint(t,e){this.showChargePointModal=!1,t=="confirm"&&this.$emit("sendCommand",{command:"removeChargepoint",data:{id:e}})},getChargePointList(){return this.$store.state.mqtt["openWB/general/extern"]===!1?this.$store.state.mqtt["openWB/system/configurable/chargepoints"]:this.$store.state.mqtt["openWB/system/configurable/chargepoints_internal"]},getChargePointName(t){return this.$store.state.mqtt["openWB/chargepoint/"+t+"/config"]?this.$store.state.mqtt["openWB/chargepoint/"+t+"/config"].name:"Ladepunkt "+t},getChargePointTemplateIndex(t){return parseInt(t.match(/([^/]+)$/)[0])},getChargePointTemplateName(t){return this.$store.state.mqtt["openWB/chargepoint/template/"+t]?this.$store.state.mqtt["openWB/chargepoint/template/"+t].name:"Profil "+t},addChargePointTemplate(t,e){t.stopPropagation();let c={};e&&(c.copy=this.getChargePointTemplateIndex(e)),this.$emit("sendCommand",{command:"addChargepointTemplate",data:c})},removeChargePointTemplateModal(t,e){t.stopPropagation(),this.modalChargePointTemplateIndex=this.getChargePointTemplateIndex(e),this.showChargePointTemplateModal=!0},removeChargePointTemplate(t,e){this.showChargePointTemplateModal=!1,t=="confirm"&&this.$emit("sendCommand",{command:"removeChargepointTemplate",data:{id:e}})},addChargePointTemplateAutolockPlan(t){this.$emit("sendCommand",{command:"addAutolockPlan",data:{template:this.getChargePointTemplateIndex(t)}})},updateConfiguration(t,e){console.debug("updateConfiguration",t,e),this.updateState(t,e.value,e.object)}}},Ee={class:"chargePointInstallation"},Se={name:"chargePointInstallationForm"},qe=["href"],xe={key:0},Te={key:2},Oe={key:0},Fe={key:0,class:"border-secondary"},Me={key:0},je={key:1},Re={key:1},Ne={key:0},Ze={key:0},He={key:1},Je={key:2},$e={key:1},Ge={key:0},Qe={key:2},Xe={key:4};function Ye(t,e,c,w,_,n){const v=p("openwb-base-modal-dialog"),b=p("font-awesome-icon"),C=p("openwb-base-alert"),y=p("openwb-base-avatar"),U=p("openwb-base-color-picker"),I=p("openwb-base-text-input"),f=p("openwb-base-select-input"),V=p("openwb-charge-point-proxy"),L=p("openwb-base-heading"),W=p("openwb-base-button-group-input"),D=p("openwb-base-card"),Q=p("font-awesome-layers"),x=p("router-link"),X=p("openwb-base-array-input"),T=p("openwb-base-range-input"),Y=p("openwb-base-number-input"),K=p("template-auto-lock-plan"),ee=p("openwb-base-submit-buttons");return l(),u(A,null,[a(v,{show:_.showChargePointModal,title:"Ladepunkt löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:e[0]||(e[0]=r=>n.removeChargePoint(r,_.modalChargePointIndex))},{default:o(()=>[i(' Willst Du den Ladepunkt "'+k(n.getChargePointName(_.modalChargePointIndex))+'" (ID: '+k(_.modalChargePointIndex)+") wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ",1)]),_:1},8,["show"]),a(v,{show:_.showChargePointTemplateModal,title:"Ladepunkt-Profil löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:e[1]||(e[1]=r=>n.removeChargePointTemplate(r,_.modalChargePointTemplateIndex))},{default:o(()=>[i(' Willst Du das Ladepunkt-Profil "'+k(n.getChargePointTemplateName(_.modalChargePointTemplateIndex))+'" (ID: '+k(_.modalChargePointTemplateIndex)+") wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ",1)]),_:1},8,["show"]),m("div",Ee,[m("form",Se,[a(D,{title:"Ladepunkte",subtype:"primary",collapsible:!0,collapsed:!c.installAssistantActive},{header:o(()=>[a(b,{icon:["fas","charging-station"]}),e[7]||(e[7]=i(" Ladepunkte ",-1))]),default:o(()=>[a(C,{subtype:"info"},{default:o(()=>[e[8]||(e[8]=i(" Eine detaillierte Anleitung zur Einrichtung der Ladepunkte findet sich in unserem ",-1)),m("a",{href:`https://wiki.openwb.de/doku.php?id=openwb:vc:${t.systemVersion}:software:einstell-konfig:konfiguration:ladepunkte:openwb`,target:"_blank",rel:"noopener noreferrer"},"Wiki",8,qe),e[9]||(e[9]=i(" . ",-1))]),_:1}),(l(!0),u(A,null,E(n.installedChargePoints,(r,d)=>(l(),h(D,{key:d,collapsible:!0,collapsed:!0,subtype:"primary"},{header:o(()=>[a(b,{icon:["fas","charging-station"],class:"fa-border",style:re({backgroundColor:r.color,color:t.getContrastColor(r.color),"--fa-border-color":t.getContrastColor(r.color)})},null,8,["style"]),i(" "+k(r?.name)+" (ID: "+k(r?.id)+") ",1)]),actions:o(s=>[s.collapsed?g("",!0):(l(),h(y,{key:0,class:"bg-danger clickable",title:"Ladepunkt löschen",onClick:B=>n.removeChargePointModal(B,d)},{default:o(()=>[a(b,{icon:["fas","trash"]})]),_:1},8,["onClick"]))]),default:o(()=>[a(I,{title:"Bezeichnung",subtype:"text","model-value":r?.name,"onUpdate:modelValue":s=>t.updateState(d,s,"name")},{append:o(()=>[a(U,{class:"p-1","model-value":r.color,"default-color":"#007bff","color-palette":_.chargePointColorPalette,"onUpdate:modelValue":s=>t.updateState(d,s,"color")},null,8,["model-value","color-palette","onUpdate:modelValue"])]),_:2},1032,["model-value","onUpdate:modelValue"]),a(I,{title:"Modul",subtype:"text",disabled:"",readonly:"","model-value":t.$store.state.mqtt[d].type},null,8,["model-value"]),r?.type!=="internal_openwb"||t.$store.state.mqtt["openWB/general/extern"]===!1?(l(),u("span",xe,[a(f,{title:"Ladepunkt-Profil",options:n.chargePointTemplateList,"model-value":t.$store.state.mqtt[d].template,"onUpdate:modelValue":s=>t.updateState(d,s,"template")},null,8,["options","model-value","onUpdate:modelValue"])])):g("",!0),t.$store.state.mqtt["openWB/optional/ocpp/config"]?.active===!0?(l(),h(I,{key:1,title:"OCPP-Chargebox ID","model-value":r?.ocpp_chargebox_id,"onUpdate:modelValue":s=>t.updateState(d,s,"ocpp_chargebox_id")},{help:o(()=>[...e[10]||(e[10]=[i(" Bitte gib hier die Chargebox ID ein, die im OCPP-Backend für diesen Ladepunkt verwendet wird. Sollen die Daten dieses Ladepunktes nicht an ein OCPP-Backend übertragen werden, lasse dieses Feld leer. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"])):g("",!0),e[16]||(e[16]=m("hr",null,null,-1)),a(V,{"charge-point":r,"onUpdate:configuration":s=>n.updateConfiguration(d,s)},null,8,["charge-point","onUpdate:configuration"]),(r?.type!=="internal_openwb"||t.$store.state.mqtt["openWB/general/extern"]===!1)&&r?.charging_type!=="DC"?(l(),u("div",Te,[e[15]||(e[15]=m("hr",null,null,-1)),a(L,null,{default:o(()=>[...e[11]||(e[11]=[i(" Hardware-Optionen ",-1)])]),_:1}),a(W,{title:"automatische Phasenumschaltung vorhanden",buttons:[{buttonValue:!1,text:"Nein"},{buttonValue:!0,text:"Ja"}],"model-value":r?.auto_phase_switch_hw,"onUpdate:modelValue":s=>t.updateState(d,s,"auto_phase_switch_hw")},null,8,["model-value","onUpdate:modelValue"]),a(W,{title:"Control-Pilot-Unterbrechung vorhanden",buttons:[{buttonValue:!1,text:"Nein"},{buttonValue:!0,text:"Ja"}],"model-value":r?.control_pilot_interruption_hw,"onUpdate:modelValue":s=>t.updateState(d,s,"control_pilot_interruption_hw")},{help:o(()=>[...e[12]||(e[12]=[i(' Die Control-Pilot-Leitung ist im Ladekabel integriert und dient der Steuerung der Fahrzeugladung (An/Aus/Stromvorgaben). Bei einigen Fahrzeugen können durch die Regelung erzwungene, längere Ladestopps (z.B. beim PV-Laden) zu unerwünschten "Einschlaf"-Effekten des Fahrzeuges führen. Mit diesem Feature, welches hardwareseitig verbaut sein muss, kann ein Abstecken des Ladesteckers simuliert werden, um ein Aufwecken des Fahrzeuges zu ermöglichen. Die Funktion hängt immer auch vom Fahrzeugtyp ab. ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(L,null,{default:o(()=>[...e[13]||(e[13]=[i(" Elektrischer Anschluss ",-1)])]),_:1}),a(W,{title:"Anzahl angeschlossener Phasen",buttons:[{buttonValue:1,text:"1"},{buttonValue:2,text:"2"},{buttonValue:3,text:"3"}],"model-value":r?.connected_phases,"onUpdate:modelValue":s=>t.updateState(d,s,"connected_phases")},null,8,["model-value","onUpdate:modelValue"]),a(W,{title:"Phase 1 des Ladekabels",buttons:[{buttonValue:1,text:"EVU L1"},{buttonValue:2,text:"EVU L2"},{buttonValue:3,text:"EVU L3"}],"model-value":r?.phase_1,"onUpdate:modelValue":s=>t.updateState(d,s,"phase_1")},{help:o(()=>[...e[14]||(e[14]=[i(" Hier ist anzugeben, an welcher Phase des Hausanschlusses (EVU-Punkt) die Phase 1 dieses Ladepunktes angeschlossen ist. Diese Information wird für das Lastmanagement benötigt, um bei einer Schieflast gezielt einzelne Ladepunkte zu drosseln.",-1),m("br",null,null,-1),i(' Bei mehreren Ladepunkten macht es Sinn, die Phasen der LP rotierend anzuschließen, damit mehrere "nicht-dreiphasig" ladende Fahrzeuge mit optimaler Leistung laden können, bevor das Lastmanagement eingreift.',-1),m("br",null,null,-1),i(" Es wird vorausgesetzt, dass das Drehfeld innerhalb der Installation gleich bleibt. Wenn z.B. L1 des Ladepunktes auf EVU-L2 liegt, muss L2 des Ladepunktes auf EVU-L3 aufgelegt sein (und L3 des Ladepunktes auf EVU-L1).",-1),m("br",null,null,-1),i(" Eine Möglichkeit, die zur Ladepunktphase L1 zugehörige EVU-Phase zu ermitteln, ist eine einphasige Ladung zu starten und die Phasenströme am EVU-Zähler zu beobachten. Mit einem zweiphasig ladenden Fahrzeug kann danach auch der Anschluss von L2 ermittelt und so das Drehfeld kontrolliert werden.",-1),m("br",null,null,-1),i(" Im Zweifel bitte das Drehfeld von einer Fachkraft prüfen und korrigieren lassen. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"])])):g("",!0)]),_:2},1024))),128)),Object.keys(n.installedChargePoints).length>0?(l(),u("hr",Oe)):g("",!0),a(f,{title:"Verfügbare Ladepunkte","not-selected":"Bitte auswählen",options:n.getChargePointList(),"model-value":_.chargePointToAdd,"add-button":!0,"onUpdate:modelValue":e[2]||(e[2]=r=>_.chargePointToAdd=r),"onInput:add":n.addChargePoint},{help:o(()=>[...e[17]||(e[17]=[i(" Bitte einen Ladepunkt auswählen, der der openWB-Regelung hinzugefügt werden soll.",-1),m("br",null,null,-1),m("ul",null,[m("li",null," Interne openWB - wenn diese openWB über einen verbauten Ladepunkt mit Regelcontroller verfügt (z.B. Standard(+), Custom, Duo, Buchse, NICHT Standalone); ansonsten immer anlegen, egal ob diese openWB steuert = primary oder ferngesteuert wird = secondary "),m("li",null," Secondary openWB - wenn diese openWB (primary) die Fernsteuerung von weiteren openWB (secondary) übernimmt "),m("li",null,"MQTT-Ladepunkt - nur zur Nutzung des openWB-Simulators zugelassen"),m("li",null,"openWB Pro - wenn diese openWB (primary) die Fernsteuerung einer openWB Pro (secondary) übernimmt"),m("li",null," openWB series2 Satellit/Satellit Duo - wenn diese openWB (primary) die Fernsteuerung einer openWB series2 Satellit/Satellit Duo (secondary) übernimmt "),m("li",null," smartWB/EVSE-Wifi - wenn diese openWB (primary) die Fernsteuerung einer smartWB/EVSE-Wifi übernimmt ")],-1)])]),_:1},8,["options","model-value","onInput:add"])]),_:1},8,["collapsed"]),t.$store.state.mqtt["openWB/general/extern"]==!1||!c.installAssistantActive?(l(),u("hr",Fe)):g("",!0),t.$store.state.mqtt["openWB/general/extern"]===!1||!c.installAssistantActive?(l(),h(D,{key:1,title:"Ladepunkt-Profile",collapsible:!0,collapsed:!0},{header:o(()=>[a(Q,{class:"fa-lg"},{default:o(()=>[a(b,{icon:["far","file"]}),a(b,{icon:["fas","charging-station"],transform:"shrink-8"})]),_:1}),e[18]||(e[18]=i(" Ladepunkt-Profile ",-1))]),actions:o(()=>[t.$store.state.mqtt["openWB/general/extern"]===!1?(l(),h(y,{key:0,class:"bg-success clickable",title:"Neues Ladepunkt-Profil anlegen",onClick:n.addChargePointTemplate},{default:o(()=>[a(b,{icon:["fas","plus"]})]),_:1},8,["onClick"])):g("",!0)]),default:o(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(l(),u("div",Me,[a(C,{subtype:"info"},{default:o(()=>[...e[19]||(e[19]=[i(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(l(),u("div",je,[(l(!0),u(A,null,E(n.chargePointTemplates,(r,d)=>(l(),h(D,{key:d,title:`${r.name} (ID: ${n.getChargePointTemplateIndex(d)})`,collapsible:!0,collapsed:!0},{actions:o(s=>[s.collapsed==!1?(l(),h(y,{key:0,class:"bg-success clickable",title:"Ladepunkt-Profil duplizieren",onClick:B=>n.addChargePointTemplate(B,d)},{default:o(()=>[a(b,{icon:["fas","copy"]})]),_:1},8,["onClick"])):g("",!0),s.collapsed==!1&&!d.endsWith("/0")?(l(),h(y,{key:1,class:"bg-danger clickable ml-1",title:"Ladepunkt-Profil löschen",onClick:B=>n.removeChargePointTemplateModal(B,d)},{default:o(()=>[a(b,{icon:["fas","trash"]})]),_:1},8,["onClick"])):g("",!0)]),default:o(()=>[a(I,{title:"Bezeichnung",subtype:"text","model-value":r.name,disabled:d.endsWith("/0"),"onUpdate:modelValue":s=>t.updateState(d,s,"name")},se({_:2},[d.endsWith("/0")?{name:"help",fn:o(()=>[e[20]||(e[20]=i(" Das Standard-Profil kann nicht umbenannt werden. ",-1))]),key:"0"}:void 0]),1032,["model-value","disabled","onUpdate:modelValue"]),n.dcChargingEnabled===!0?(l(),h(W,{key:0,title:"Typ des Ladeprofils",buttons:[{buttonValue:"AC",text:"AC"},{buttonValue:"DC",text:"DC"}],"model-value":r.charging_type,"onUpdate:modelValue":s=>t.updateState(d,s,"charging_type")},null,8,["model-value","onUpdate:modelValue"])):g("",!0),e[40]||(e[40]=m("hr",null,null,-1)),c.installAssistantActive?g("",!0):(l(),u("div",Re,[a(L,null,{default:o(()=>[...e[21]||(e[21]=[i(" Zugangskontrolle ",-1)])]),_:1}),r.valid_tags.length>0?(l(),u("div",Ne,[a(C,{subtype:"info"},{default:o(()=>[e[23]||(e[23]=i(" Einstellungen zur Zugangskontrolle finden sich unter ",-1)),a(x,{to:"/IdentificationConfiguration"},{default:o(()=>[...e[22]||(e[22]=[i(" Einstellungen - Identifikation ",-1)])]),_:1}),e[24]||(e[24]=i(". ",-1)),t.$store.state.mqtt["openWB/optional/rfid/active"]===!0&&r.disable_after_unplug?(l(),u("div",Ze," Ladepunkte mit diesem Profil werden automatisch beim Abstecken eines Fahrzeugs gesperrt und müssen für den nächsten Ladevorgang mit einem ID-Tag entsperrt werden. ")):t.$store.state.mqtt["openWB/optional/rfid/active"]===!1?(l(),u("div",He," Die Zugangskontrolle ist aktuell deaktiviert. ")):(l(),u("div",Je," Die Zugangskontrolle ist aktiviert, jedoch werden Ladepunkte mit diesem Profil nicht automatisch nach dem Abstecken eines Fahrzeugs gesperrt. "))]),_:2},1024),a(X,{title:"Zugeordnete ID-Tags","no-elements-message":"Keine keine ID-Tags zugeordnet.",readonly:!0,"model-value":r.valid_tags},{help:o(()=>[...e[25]||(e[25]=[i(" Hier werden die ID-Tags aufgelistet, welche diesem Ladepunkt-Profil zugeordnet sind. Nur mit diesen ID-Tags können Ladepunkte, denen dieses Profil zugeordnet ist, entsperrt werden. ",-1)])]),_:1},8,["model-value"])])):(l(),u("div",$e,[a(C,{subtype:"info"},{default:o(()=>[e[27]||(e[27]=i(" Einstellungen zur Zugangskontrolle finden sich unter ",-1)),a(x,{to:"/IdentificationConfiguration"},{default:o(()=>[...e[26]||(e[26]=[i(" Einstellungen - Identifikation ",-1)])]),_:1}),e[28]||(e[28]=i(".",-1)),e[29]||(e[29]=m("br",null,null,-1)),e[30]||(e[30]=i(" Dem Ladepunkt-Profil sind aktuell keine ID-Tags zum Entsperren zugeordnet. ",-1))]),_:1})]))])),e[41]||(e[41]=m("hr",null,null,-1)),a(L,null,{default:o(()=>[...e[31]||(e[31]=[i(" Angaben zum konfigurierten Ladestrom der openWB ",-1)])]),_:1}),a(C,{subtype:"info"},{default:o(()=>[e[32]||(e[32]=i(" Hier werden die maximalen Ladeströme entsprechend der in dem zugeordneten Ladepunkt genutzten Phasen eingestellt.",-1)),e[33]||(e[33]=m("br",null,null,-1)),e[34]||(e[34]=i(" Generell gilt, dass diese Werte in Übereinstimmung mit der Ausführung des Ladepunktes und des elektrischen Anschlusses bzw. der Absicherung zu wählen sind. ",-1)),r.charging_type==="AC"?(l(),u("span",Ge," Bei einer openWB mit 22kW Maximalleistung sind hier jeweils 32A einzustellen. Ist die openWB beispielsweise auf 11kW begrenzt (KfW-Förderung oder die Zuleitung ist mit 16A abgesichert), dann sind hier jeweils 16A einzustellen. ")):g("",!0)]),_:2},1024),r.charging_type==="AC"||n.dcChargingEnabled!==!0?(l(),u("div",Qe,[a(T,{title:"Maximalstrom bei einer Phase",min:6,max:32,step:1,unit:"A","model-value":r.max_current_single_phase,"onUpdate:modelValue":s=>t.updateState(d,s,"max_current_single_phase")},null,8,["model-value","onUpdate:modelValue"]),a(T,{title:"Maximalstrom mehrere Phasen",min:6,max:32,step:1,unit:"A","model-value":r.max_current_multi_phases,"onUpdate:modelValue":s=>t.updateState(d,s,"max_current_multi_phases")},null,8,["model-value","onUpdate:modelValue"])])):(l(),h(Y,{key:3,title:"Maximalleistung",min:22,max:420,step:1,unit:"kW",precision:5,"model-value":t.ac_current2dc_power(r.dc_max_current),"onUpdate:modelValue":s=>t.updateState(d,t.dc_power2ac_current(s),"dc_max_current")},null,8,["model-value","onUpdate:modelValue"])),c.installAssistantActive?g("",!0):(l(),u("div",Xe,[e[39]||(e[39]=m("hr",null,null,-1)),a(L,null,{default:o(()=>[...e[35]||(e[35]=[i(" Sperren nach Uhrzeit (Komplettsperrung - Freischaltung per Identifikation möglich) ",-1)])]),_:1}),a(W,{title:"Sperren nach Uhrzeit aktiv",buttons:[{buttonValue:!1,text:"Nein"},{buttonValue:!0,text:"Ja"}],"model-value":r.autolock.active,"onUpdate:modelValue":s=>t.updateState(d,s,"autolock.active")},{help:o(()=>[...e[36]||(e[36]=[i(" Wird Sperren nach Uhrzeit aktiviert, können Fahrzeugladungen mittels Zeitplan auf gewünschte Zeitbereiche eingeschränkt werden. Dies kann z.B. bei Zugänglichkeiten zu Ladepunkten in öffentlichen oder halb-öffentlichen Bereichen sinnvoll sein. In dieser Zeit ist aber eine Freischaltung per RFID, Fahrzeugerkennung oder Pin möglich, wenn Identifikation aktiviert ist. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(W,{title:"Erst nach Ladeende sperren",buttons:[{buttonValue:!1,text:"Nein"},{buttonValue:!0,text:"Ja"}],"model-value":r.autolock.wait_for_charging_end,"onUpdate:modelValue":s=>t.updateState(d,s,"autolock.wait_for_charging_end")},{help:o(()=>[...e[37]||(e[37]=[i(' Wenn ein Zeitplan Sperren nach Uhrzeit aktiviert, werden alle Ladepunkte direkt gesperrt und laufende Ladevorgänge beendet. Wird hier "Ja" ausgewählt, dann werden laufende Ladevorgänge NICHT beendet und diese Ladepunkte erst nach abgeschlossener Ladung gesperrt. ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(L,null,{actions:o(()=>[a(y,{class:"bg-success clickable",title:"Neuen Autolock Zeitplan anlegen",onClick:S(s=>n.addChargePointTemplateAutolockPlan(d),["stop"])},{default:o(()=>[a(b,{icon:["fas","plus"]})]),_:1},8,["onClick"])]),default:o(()=>[e[38]||(e[38]=i(" Zeitpläne für Sperren nach Uhrzeit ",-1))]),_:2},1024)])),(l(!0),u(A,null,E(r.autolock.plans,(s,B)=>(l(),h(K,{key:B,"model-value":s,"template-id":r.id,"onUpdate:modelValue":q=>t.updateState(d,q,`autolock.plans.${B}`),onSendCommand:e[3]||(e[3]=q=>t.$emit("sendCommand",q))},null,8,["model-value","template-id","onUpdate:modelValue"]))),128))]),_:2},1032,["title"]))),128))]))]),_:1})):g("",!0),a(ee,{"form-name":"chargePointInstallationForm",onSave:e[4]||(e[4]=r=>t.$emit("save",t.mqttTopicsToPublish)),onReset:e[5]||(e[5]=r=>t.$emit("reset")),onDefaults:e[6]||(e[6]=r=>t.$emit("defaults"))})])])],64)}const Ke=z(De,[["render",Ye],["__scopeId","data-v-75fe5743"],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/ChargePointInstallation.vue"]]),lt=Object.freeze(Object.defineProperty({__proto__:null,default:Ke},Symbol.toStringTag,{value:"Module"}));export{de as C,he as a,Ke as b,lt as c}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chargePoint-Dh7zkIcH.js","assets/vendor-BwGffBs-.js","assets/vendor-Cq9CCOuG.css","assets/vendor-fortawesome-DplTMxoa.js","assets/index-CE-5DBwq.js","assets/vendor-bootstrap-DxivtUnb.js","assets/vendor-jquery-CEMonh9Y.js","assets/vendor-bootstrap-BJ8HpIhY.css","assets/vendor-axios-C0vEeTtS.js","assets/index-xf6JJloS.css","assets/SystemVersion-eCZ4XHiC.js","assets/dynamic-import-helper-BheWnx7M.js","assets/chargePoint-Dqze0Ru0.js","assets/chargePoint-C65LaVDf.js","assets/chargePoint-DA-Gvx1C.js","assets/chargePoint-4Gh7DnVy.js","assets/chargePoint-CAatMEqK.js","assets/chargePoint-AfihyObz.js","assets/commands-C1EyPswU.js","assets/commands-D5WT6PSm.js"])))=>i.map(i=>d[i]); +import{F as j,l as R,al as N,ak as Z,H,aj as J,ai as $,P as te,d as ne,X as ae,az as oe}from"./vendor-fortawesome-DplTMxoa.js";import{_ as P,C as G}from"./index-CE-5DBwq.js";import{S as le}from"./SystemVersion-eCZ4XHiC.js";import{_ as O}from"./dynamic-import-helper-BheWnx7M.js";import{_ as z,m as p,l,f as u,z as h,u as o,B as i,J as k,q as a,y as m,a7 as F,P as M,K as A,x as g,L as E,A as S,k as ie,O as re,D as se}from"./vendor-BwGffBs-.js";const ue={props:{chargePoint:{type:Object,required:!0}},emits:["update:configuration"],methods:{updateConfiguration(t,e=void 0){this.$emit("update:configuration",{value:t,object:e})}}},de=z(ue,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/ChargePointConfigMixin.vue"]]),pe={name:"ChargePointConfigFallback",mixins:[de]},me={class:"charge-point-config-fallback"},ge={key:1};function ce(t,e,c,w,_,n){const v=p("openwb-base-alert"),b=p("openwb-base-textarea");return l(),u("div",me,[Object.keys(t.chargePoint.configuration).length==0?(l(),h(v,{key:0,subtype:"info"},{default:o(()=>[i(' Der Ladepunkt-Typ "'+k(t.chargePoint.type)+'" bietet keine Einstellungen. ',1)]),_:1})):(l(),u("div",ge,[a(v,{subtype:"warning"},{default:o(()=>[i(' Es wurde keine Konfigurationsseite für den Ladepunkt-Typ "'+k(t.chargePoint.type)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),a(b,{title:"Konfiguration",subtype:"json","model-value":t.chargePoint.configuration,"onUpdate:modelValue":e[0]||(e[0]=C=>t.updateConfiguration(C,"configuration"))},{help:o(()=>[...e[1]||(e[1]=[i(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),a(v,{subtype:"info"},{default:o(()=>[m("pre",null,k(JSON.stringify(t.chargePoint.configuration,void 0,2)),1)]),_:1})]))])}const fe=z(pe,[["render",ce],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/OpenwbChargePointConfigFallback.vue"]]),be={props:{chargePoint:{type:Object,required:!0}}},he=z(be,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/ChargePointCommandsMixin.vue"]]),_e={name:"ChargePointCommandsFallback",mixins:[he]},ke={class:"charge-point-commands-fallback"};function we(t,e,c,w,_,n){return l(),u("div",ke)}const ve=z(_e,[["render",we],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/OpenwbChargePointCommandsFallback.vue"]]),ye={name:"OpenwbChargePointProxy",props:{chargePoint:{required:!0,type:Object}},emits:["update:configuration"],methods:{getChargePointSettingsComponent(){return console.debug(`loading charge point settings: ${this.chargePoint.type}`),F({loader:()=>O(Object.assign({"./external_openwb/chargePoint.vue":()=>P(()=>import("./chargePoint-Dh7zkIcH.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])),"./internal_openwb/chargePoint.vue":()=>P(()=>import("./chargePoint-Dqze0Ru0.js"),__vite__mapDeps([12,1,2,3,4,5,6,7,8,9,10,11])),"./mqtt/chargePoint.vue":()=>P(()=>import("./chargePoint-C65LaVDf.js"),__vite__mapDeps([13,1,2,3,4,5,6,7,8,9,10,11])),"./openwb_dc_adapter/chargePoint.vue":()=>P(()=>import("./chargePoint-DA-Gvx1C.js"),__vite__mapDeps([14,1,2,3,4,5,6,7,8,9,10,11])),"./openwb_pro/chargePoint.vue":()=>P(()=>import("./chargePoint-4Gh7DnVy.js"),__vite__mapDeps([15,1,2,3,4,5,6,7,8,9,10,11])),"./openwb_series2_satellit/chargePoint.vue":()=>P(()=>import("./chargePoint-CAatMEqK.js"),__vite__mapDeps([16,1,2,3,4,5,6,7,8,9,10,11])),"./smartwb/chargePoint.vue":()=>P(()=>import("./chargePoint-AfihyObz.js"),__vite__mapDeps([17,1,2,3,4,5,6,7,8,9,10,11]))}),`./${this.chargePoint.type}/chargePoint.vue`,3),errorComponent:fe})},getChargePointCommandsComponent(){return console.debug(`loading charge point commands: ${this.chargePoint.type}`),F({loader:()=>O(Object.assign({"./internal_openwb/commands.vue":()=>P(()=>import("./commands-C1EyPswU.js"),__vite__mapDeps([18,1,2,3,4,5,6,7,8,9,10,11])),"./openwb_pro/commands.vue":()=>P(()=>import("./commands-D5WT6PSm.js"),__vite__mapDeps([19,1,2,3,4,5,6,7,8,9,10,11]))}),`./${this.chargePoint.type}/commands.vue`,3),errorComponent:ve})},updateConfiguration(t){this.$emit("update:configuration",t)}}};function Ce(t,e,c,w,_,n){const v=p("openwb-base-heading");return l(),u(A,null,[a(v,null,{default:o(()=>[i(' Einstellungen für Ladepunkt Typ "'+k(c.chargePoint.type)+'" ',1)]),_:1}),(l(),h(M(n.getChargePointSettingsComponent()),{"charge-point":c.chargePoint,"onUpdate:configuration":e[0]||(e[0]=b=>n.updateConfiguration(b))},null,40,["charge-point"])),e[1]||(e[1]=m("hr",null,null,-1)),a(v,null,{default:o(()=>[i(' Befehle für Ladepunkt Typ "'+k(c.chargePoint.type)+'" ',1)]),_:1}),(l(),h(M(n.getChargePointCommandsComponent()),{"charge-point":c.chargePoint},null,8,["charge-point"]))],64)}const Pe=z(ye,[["render",Ce],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/OpenwbChargePointProxy.vue"]]);R.add(N,Z,H,J,$);const Ve={name:"TemplateAutoLockPlan",components:{FontAwesomeIcon:j},mixins:[G],props:{modelValue:{type:Object,required:!0},templateId:{type:Number,required:!0}},emits:["update:modelValue","sendCommand"],data(){return{showRemoveModal:!1}},computed:{plan(){return this.modelValue}},watch:{plan:{handler(t){this.$emit("update:modelValue",t)},deep:!0}},methods:{copyPlan(){this.$emit("sendCommand",{command:"addAutolockPlan",data:{template:this.templateId,copy:this.modelValue.id}})},removePlanModal(){this.showRemoveModal=!0},removePlan(t){this.showRemoveModal=!1,t=="confirm"&&this.$emit("sendCommand",{command:"removeAutolockPlan",data:{template:this.templateId,plan:this.modelValue.id}})}}},Le={key:0},Be={key:1},We={key:2},Ae={key:1},ze={key:2};function Ie(t,e,c,w,_,n){const v=p("openwb-base-modal-dialog"),b=p("font-awesome-icon"),C=p("openwb-base-avatar"),y=p("openwb-base-text-input"),U=p("openwb-base-button-group-input"),I=p("openwb-base-card");return l(),u(A,null,[a(v,{show:_.showRemoveModal,title:"Autolock Zeitplan löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:n.removePlan},{default:o(()=>[i(' Willst Du den Autolock Zeitplan "'+k(n.plan.name)+'" wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ',1)]),_:1},8,["show","onModalResult"]),a(I,{title:n.plan.name,collapsible:!0,collapsed:!0},{actions:o(f=>[f.collapsed==!0?(l(),u("span",{key:0,class:ie(["pill clickable",n.plan.active?"bg-success":"bg-danger"]),onClick:e[0]||(e[0]=S(V=>n.plan.active=!n.plan.active,["stop"]))},[a(b,{icon:["fas","clock"]}),i(" "+k(n.plan.time[0])+" - "+k(n.plan.time[1])+" ",1),n.plan.frequency.selected=="once"?(l(),u("span",Le,[a(b,{icon:["fas","calendar-day"]}),i(" "+k(t.formatDate(n.plan.frequency.once[0])==t.formatDate(n.plan.frequency.once[1])?t.formatDate(n.plan.frequency.once[0]):t.formatDate(n.plan.frequency.once[0])+" - "+t.formatDate(n.plan.frequency.once[1])),1)])):g("",!0),n.plan.frequency.selected=="daily"?(l(),u("span",Be,[a(b,{icon:["fas","calendar-week"]})])):g("",!0),n.plan.frequency.selected=="weekly"?(l(),u("span",We,[a(b,{icon:["fas","calendar-alt"]})])):g("",!0)],2)):g("",!0),f.collapsed==!1?(l(),u("span",Ae,[a(C,{class:"bg-success clickable",title:"Autolock Zeitplan duplizieren",onClick:e[1]||(e[1]=S(V=>n.copyPlan(),["stop"]))},{default:o(()=>[a(b,{icon:["fas","copy"]})]),_:1}),a(C,{class:"bg-danger clickable ml-1",title:"Autolock Zeitplan löschen",onClick:e[2]||(e[2]=S(V=>n.removePlanModal(),["stop"]))},{default:o(()=>[a(b,{icon:["fas","trash"]})]),_:1})])):g("",!0)]),default:o(()=>[a(y,{modelValue:n.plan.name,"onUpdate:modelValue":e[3]||(e[3]=f=>n.plan.name=f),title:"Bezeichnung"},null,8,["modelValue"]),a(U,{modelValue:n.plan.active,"onUpdate:modelValue":e[4]||(e[4]=f=>n.plan.active=f),title:"Zeitplan aktiv",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}]},null,8,["modelValue"]),a(y,{modelValue:n.plan.time[0],"onUpdate:modelValue":e[5]||(e[5]=f=>n.plan.time[0]=f),title:"Sperren um",subtype:"time"},null,8,["modelValue"]),a(y,{modelValue:n.plan.time[1],"onUpdate:modelValue":e[6]||(e[6]=f=>n.plan.time[1]=f),title:"Freigeben um",subtype:"time"},null,8,["modelValue"]),a(U,{modelValue:n.plan.frequency.selected,"onUpdate:modelValue":e[7]||(e[7]=f=>n.plan.frequency.selected=f),title:"Wiederholungen",buttons:[{buttonValue:"once",text:"Einmalig",class:"btn-outline-info"},{buttonValue:"daily",text:"Täglich",class:"btn-outline-info"},{buttonValue:"weekly",text:"Wöchentlich",class:"btn-outline-info"}]},null,8,["modelValue"]),n.plan.frequency.selected=="once"?(l(),h(y,{key:0,modelValue:n.plan.frequency.once[0],"onUpdate:modelValue":e[8]||(e[8]=f=>n.plan.frequency.once[0]=f),title:"Sperren ab ...",subtype:"date"},null,8,["modelValue"])):g("",!0),n.plan.frequency.selected=="once"?(l(),h(y,{key:1,modelValue:n.plan.frequency.once[1],"onUpdate:modelValue":e[9]||(e[9]=f=>n.plan.frequency.once[1]=f),title:"... bis",subtype:"date",min:n.plan.frequency.once[0]},null,8,["modelValue","min"])):g("",!0),n.plan.frequency.selected=="weekly"?(l(),u("div",ze,[(l(!0),u(A,null,E(t.weekdays,(f,V)=>(l(),h(U,{key:V,modelValue:n.plan.frequency.weekly[V],"onUpdate:modelValue":L=>n.plan.frequency.weekly[V]=L,title:f,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}]},null,8,["modelValue","onUpdate:modelValue","title"]))),128))])):g("",!0)]),_:1},8,["title"])],64)}const Ue=z(Ve,[["render",Ie],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/TemplateAutoLockPlan.vue"]]);R.add(ne,N,Z,H,J,$,ae,oe);const De={name:"OpenwbChargePointInstallationView",components:{FontAwesomeIcon:j,FontAwesomeLayers:te,OpenwbChargePointProxy:Pe,TemplateAutoLockPlan:Ue},mixins:[G,le],props:{installAssistantActive:{type:Boolean,required:!1,default:!1}},emits:["sendCommand","save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/chargepoint/+/config",writeable:!0},{topic:"openWB/chargepoint/template/+",writeable:!0},{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/optional/dc_charging",writeable:!1},{topic:"openWB/optional/ocpp/config",writeable:!1},{topic:"openWB/optional/rfid/active",writeable:!1},{topic:"openWB/system/configurable/chargepoints",writeable:!1},{topic:"openWB/system/configurable/chargepoints_internal",writeable:!1}],chargePointToAdd:void 0,showChargePointModal:!1,modalChargePointIndex:void 0,showChargePointTemplateModal:!1,modalChargePointTemplateIndex:void 0,chargePointColorPalette:["#0052a3","#0066cc","#0d79f2","#007bff","#2f90ff","#58a6ff","#7fbaff","#a3ccff","#c2dbff","#dce9ff"]}},computed:{dcChargingEnabled:{get(){return this.$store.state.mqtt["openWB/optional/dc_charging"]}},installedChargePoints:{get(){let t=this.getWildcardTopics("openWB/chargepoint/+/config"),e={};for(const[c,w]of Object.entries(t))(w&&typeof w=="object"&&w.type==="internal_openwb"||this.$store.state.mqtt["openWB/general/extern"]===!1)&&(e[c]=w);return e}},chargePointTemplates(){const t=this.getWildcardTopics("openWB/chargepoint/template/+");return Object.fromEntries(Object.entries(t).filter(([,e])=>e&&typeof e=="object"))},chargePointTemplateList:{get(){let t=[];return Object.keys(this.chargePointTemplates).forEach(e=>{let c=parseInt(e.match(/([0-9]+)/g)[0]),w=this.$store.state.mqtt["openWB/chargepoint/template/"+c].name;t.push({value:c,text:w})}),t}}},methods:{addChargePoint(){this.$emit("sendCommand",{command:"addChargepoint",data:{type:this.chargePointToAdd}})},removeChargePointModal(t,e){t.stopPropagation(),this.modalChargePointIndex=parseInt(e.match(/(?:\/)(\d+)(?=\/)/)[1]),this.showChargePointModal=!0},removeChargePoint(t,e){this.showChargePointModal=!1,t=="confirm"&&this.$emit("sendCommand",{command:"removeChargepoint",data:{id:e}})},getChargePointList(){return this.$store.state.mqtt["openWB/general/extern"]===!1?this.$store.state.mqtt["openWB/system/configurable/chargepoints"]:this.$store.state.mqtt["openWB/system/configurable/chargepoints_internal"]},getChargePointName(t){return this.$store.state.mqtt["openWB/chargepoint/"+t+"/config"]?this.$store.state.mqtt["openWB/chargepoint/"+t+"/config"].name:"Ladepunkt "+t},getChargePointTemplateIndex(t){return parseInt(t.match(/([^/]+)$/)[0])},getChargePointTemplateName(t){return this.$store.state.mqtt["openWB/chargepoint/template/"+t]?this.$store.state.mqtt["openWB/chargepoint/template/"+t].name:"Profil "+t},addChargePointTemplate(t,e){t.stopPropagation();let c={};e&&(c.copy=this.getChargePointTemplateIndex(e)),this.$emit("sendCommand",{command:"addChargepointTemplate",data:c})},removeChargePointTemplateModal(t,e){t.stopPropagation(),this.modalChargePointTemplateIndex=this.getChargePointTemplateIndex(e),this.showChargePointTemplateModal=!0},removeChargePointTemplate(t,e){this.showChargePointTemplateModal=!1,t=="confirm"&&this.$emit("sendCommand",{command:"removeChargepointTemplate",data:{id:e}})},addChargePointTemplateAutolockPlan(t){this.$emit("sendCommand",{command:"addAutolockPlan",data:{template:this.getChargePointTemplateIndex(t)}})},updateConfiguration(t,e){console.debug("updateConfiguration",t,e),this.updateState(t,e.value,e.object)}}},Ee={class:"chargePointInstallation"},Se={name:"chargePointInstallationForm"},qe=["href"],xe={key:0},Te={key:2},Oe={key:0},Fe={key:0,class:"border-secondary"},Me={key:0},je={key:1},Re={key:1},Ne={key:0},Ze={key:0},He={key:1},Je={key:2},$e={key:1},Ge={key:0},Qe={key:2},Xe={key:4};function Ye(t,e,c,w,_,n){const v=p("openwb-base-modal-dialog"),b=p("font-awesome-icon"),C=p("openwb-base-alert"),y=p("openwb-base-avatar"),U=p("openwb-base-color-picker"),I=p("openwb-base-text-input"),f=p("openwb-base-select-input"),V=p("openwb-charge-point-proxy"),L=p("openwb-base-heading"),W=p("openwb-base-button-group-input"),D=p("openwb-base-card"),Q=p("font-awesome-layers"),x=p("router-link"),X=p("openwb-base-array-input"),T=p("openwb-base-range-input"),Y=p("openwb-base-number-input"),K=p("template-auto-lock-plan"),ee=p("openwb-base-submit-buttons");return l(),u(A,null,[a(v,{show:_.showChargePointModal,title:"Ladepunkt löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:e[0]||(e[0]=r=>n.removeChargePoint(r,_.modalChargePointIndex))},{default:o(()=>[i(' Willst Du den Ladepunkt "'+k(n.getChargePointName(_.modalChargePointIndex))+'" (ID: '+k(_.modalChargePointIndex)+") wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ",1)]),_:1},8,["show"]),a(v,{show:_.showChargePointTemplateModal,title:"Ladepunkt-Profil löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:e[1]||(e[1]=r=>n.removeChargePointTemplate(r,_.modalChargePointTemplateIndex))},{default:o(()=>[i(' Willst Du das Ladepunkt-Profil "'+k(n.getChargePointTemplateName(_.modalChargePointTemplateIndex))+'" (ID: '+k(_.modalChargePointTemplateIndex)+") wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ",1)]),_:1},8,["show"]),m("div",Ee,[m("form",Se,[a(D,{title:"Ladepunkte",subtype:"primary",collapsible:!0,collapsed:!c.installAssistantActive},{header:o(()=>[a(b,{icon:["fas","charging-station"]}),e[7]||(e[7]=i(" Ladepunkte ",-1))]),default:o(()=>[a(C,{subtype:"info"},{default:o(()=>[e[8]||(e[8]=i(" Eine detaillierte Anleitung zur Einrichtung der Ladepunkte findet sich in unserem ",-1)),m("a",{href:`https://wiki.openwb.de/doku.php?id=openwb:vc:${t.systemVersion}:software:einstell-konfig:konfiguration:ladepunkte:openwb`,target:"_blank",rel:"noopener noreferrer"},"Wiki",8,qe),e[9]||(e[9]=i(" . ",-1))]),_:1}),(l(!0),u(A,null,E(n.installedChargePoints,(r,d)=>(l(),h(D,{key:d,collapsible:!0,collapsed:!0,subtype:"primary"},{header:o(()=>[a(b,{icon:["fas","charging-station"],class:"fa-border",style:re({backgroundColor:r.color,color:t.getContrastColor(r.color),"--fa-border-color":t.getContrastColor(r.color)})},null,8,["style"]),i(" "+k(r?.name)+" (ID: "+k(r?.id)+") ",1)]),actions:o(s=>[s.collapsed?g("",!0):(l(),h(y,{key:0,class:"bg-danger clickable",title:"Ladepunkt löschen",onClick:B=>n.removeChargePointModal(B,d)},{default:o(()=>[a(b,{icon:["fas","trash"]})]),_:1},8,["onClick"]))]),default:o(()=>[a(I,{title:"Bezeichnung",subtype:"text","model-value":r?.name,"onUpdate:modelValue":s=>t.updateState(d,s,"name")},{append:o(()=>[a(U,{class:"p-1","model-value":r.color,"default-color":"#007bff","color-palette":_.chargePointColorPalette,"onUpdate:modelValue":s=>t.updateState(d,s,"color")},null,8,["model-value","color-palette","onUpdate:modelValue"])]),_:2},1032,["model-value","onUpdate:modelValue"]),a(I,{title:"Modul",subtype:"text",disabled:"",readonly:"","model-value":t.$store.state.mqtt[d].type},null,8,["model-value"]),r?.type!=="internal_openwb"||t.$store.state.mqtt["openWB/general/extern"]===!1?(l(),u("span",xe,[a(f,{title:"Ladepunkt-Profil",options:n.chargePointTemplateList,"model-value":t.$store.state.mqtt[d].template,"onUpdate:modelValue":s=>t.updateState(d,s,"template")},null,8,["options","model-value","onUpdate:modelValue"])])):g("",!0),t.$store.state.mqtt["openWB/optional/ocpp/config"]?.active===!0?(l(),h(I,{key:1,title:"OCPP-Chargebox ID","model-value":r?.ocpp_chargebox_id,"onUpdate:modelValue":s=>t.updateState(d,s,"ocpp_chargebox_id")},{help:o(()=>[...e[10]||(e[10]=[i(" Bitte gib hier die Chargebox ID ein, die im OCPP-Backend für diesen Ladepunkt verwendet wird. Sollen die Daten dieses Ladepunktes nicht an ein OCPP-Backend übertragen werden, lasse dieses Feld leer. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"])):g("",!0),e[16]||(e[16]=m("hr",null,null,-1)),a(V,{"charge-point":r,"onUpdate:configuration":s=>n.updateConfiguration(d,s)},null,8,["charge-point","onUpdate:configuration"]),(r?.type!=="internal_openwb"||t.$store.state.mqtt["openWB/general/extern"]===!1)&&r?.charging_type!=="DC"?(l(),u("div",Te,[e[15]||(e[15]=m("hr",null,null,-1)),a(L,null,{default:o(()=>[...e[11]||(e[11]=[i(" Hardware-Optionen ",-1)])]),_:1}),a(W,{title:"automatische Phasenumschaltung vorhanden",buttons:[{buttonValue:!1,text:"Nein"},{buttonValue:!0,text:"Ja"}],"model-value":r?.auto_phase_switch_hw,"onUpdate:modelValue":s=>t.updateState(d,s,"auto_phase_switch_hw")},null,8,["model-value","onUpdate:modelValue"]),a(W,{title:"Control-Pilot-Unterbrechung vorhanden",buttons:[{buttonValue:!1,text:"Nein"},{buttonValue:!0,text:"Ja"}],"model-value":r?.control_pilot_interruption_hw,"onUpdate:modelValue":s=>t.updateState(d,s,"control_pilot_interruption_hw")},{help:o(()=>[...e[12]||(e[12]=[i(' Die Control-Pilot-Leitung ist im Ladekabel integriert und dient der Steuerung der Fahrzeugladung (An/Aus/Stromvorgaben). Bei einigen Fahrzeugen können durch die Regelung erzwungene, längere Ladestopps (z.B. beim PV-Laden) zu unerwünschten "Einschlaf"-Effekten des Fahrzeuges führen. Mit diesem Feature, welches hardwareseitig verbaut sein muss, kann ein Abstecken des Ladesteckers simuliert werden, um ein Aufwecken des Fahrzeuges zu ermöglichen. Die Funktion hängt immer auch vom Fahrzeugtyp ab. ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(L,null,{default:o(()=>[...e[13]||(e[13]=[i(" Elektrischer Anschluss ",-1)])]),_:1}),a(W,{title:"Anzahl angeschlossener Phasen",buttons:[{buttonValue:1,text:"1"},{buttonValue:2,text:"2"},{buttonValue:3,text:"3"}],"model-value":r?.connected_phases,"onUpdate:modelValue":s=>t.updateState(d,s,"connected_phases")},null,8,["model-value","onUpdate:modelValue"]),a(W,{title:"Phase 1 des Ladekabels",buttons:[{buttonValue:1,text:"EVU L1"},{buttonValue:2,text:"EVU L2"},{buttonValue:3,text:"EVU L3"}],"model-value":r?.phase_1,"onUpdate:modelValue":s=>t.updateState(d,s,"phase_1")},{help:o(()=>[...e[14]||(e[14]=[i(" Hier ist anzugeben, an welcher Phase des Hausanschlusses (EVU-Punkt) die Phase 1 dieses Ladepunktes angeschlossen ist. Diese Information wird für das Lastmanagement benötigt, um bei einer Schieflast gezielt einzelne Ladepunkte zu drosseln.",-1),m("br",null,null,-1),i(' Bei mehreren Ladepunkten macht es Sinn, die Phasen der LP rotierend anzuschließen, damit mehrere "nicht-dreiphasig" ladende Fahrzeuge mit optimaler Leistung laden können, bevor das Lastmanagement eingreift.',-1),m("br",null,null,-1),i(" Es wird vorausgesetzt, dass das Drehfeld innerhalb der Installation gleich bleibt. Wenn z.B. L1 des Ladepunktes auf EVU-L2 liegt, muss L2 des Ladepunktes auf EVU-L3 aufgelegt sein (und L3 des Ladepunktes auf EVU-L1).",-1),m("br",null,null,-1),i(" Eine Möglichkeit, die zur Ladepunktphase L1 zugehörige EVU-Phase zu ermitteln, ist eine einphasige Ladung zu starten und die Phasenströme am EVU-Zähler zu beobachten. Mit einem zweiphasig ladenden Fahrzeug kann danach auch der Anschluss von L2 ermittelt und so das Drehfeld kontrolliert werden.",-1),m("br",null,null,-1),i(" Im Zweifel bitte das Drehfeld von einer Fachkraft prüfen und korrigieren lassen. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"])])):g("",!0)]),_:2},1024))),128)),Object.keys(n.installedChargePoints).length>0?(l(),u("hr",Oe)):g("",!0),a(f,{title:"Verfügbare Ladepunkte","not-selected":"Bitte auswählen",options:n.getChargePointList(),"model-value":_.chargePointToAdd,"add-button":!0,"onUpdate:modelValue":e[2]||(e[2]=r=>_.chargePointToAdd=r),"onInput:add":n.addChargePoint},{help:o(()=>[...e[17]||(e[17]=[i(" Bitte einen Ladepunkt auswählen, der der openWB-Regelung hinzugefügt werden soll.",-1),m("br",null,null,-1),m("ul",null,[m("li",null," Interne openWB - wenn diese openWB über einen verbauten Ladepunkt mit Regelcontroller verfügt (z.B. Standard(+), Custom, Duo, Buchse, NICHT Standalone); ansonsten immer anlegen, egal ob diese openWB steuert = primary oder ferngesteuert wird = secondary "),m("li",null," Secondary openWB - wenn diese openWB (primary) die Fernsteuerung von weiteren openWB (secondary) übernimmt "),m("li",null,"MQTT-Ladepunkt - nur zur Nutzung des openWB-Simulators zugelassen"),m("li",null,"openWB Pro - wenn diese openWB (primary) die Fernsteuerung einer openWB Pro (secondary) übernimmt"),m("li",null," openWB series2 Satellit/Satellit Duo - wenn diese openWB (primary) die Fernsteuerung einer openWB series2 Satellit/Satellit Duo (secondary) übernimmt "),m("li",null," smartWB/EVSE-Wifi - wenn diese openWB (primary) die Fernsteuerung einer smartWB/EVSE-Wifi übernimmt ")],-1)])]),_:1},8,["options","model-value","onInput:add"])]),_:1},8,["collapsed"]),t.$store.state.mqtt["openWB/general/extern"]==!1||!c.installAssistantActive?(l(),u("hr",Fe)):g("",!0),t.$store.state.mqtt["openWB/general/extern"]===!1||!c.installAssistantActive?(l(),h(D,{key:1,title:"Ladepunkt-Profile",collapsible:!0,collapsed:!0},{header:o(()=>[a(Q,{class:"fa-lg"},{default:o(()=>[a(b,{icon:["far","file"]}),a(b,{icon:["fas","charging-station"],transform:"shrink-8"})]),_:1}),e[18]||(e[18]=i(" Ladepunkt-Profile ",-1))]),actions:o(()=>[t.$store.state.mqtt["openWB/general/extern"]===!1?(l(),h(y,{key:0,class:"bg-success clickable",title:"Neues Ladepunkt-Profil anlegen",onClick:n.addChargePointTemplate},{default:o(()=>[a(b,{icon:["fas","plus"]})]),_:1},8,["onClick"])):g("",!0)]),default:o(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(l(),u("div",Me,[a(C,{subtype:"info"},{default:o(()=>[...e[19]||(e[19]=[i(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(l(),u("div",je,[(l(!0),u(A,null,E(n.chargePointTemplates,(r,d)=>(l(),h(D,{key:d,title:`${r.name} (ID: ${n.getChargePointTemplateIndex(d)})`,collapsible:!0,collapsed:!0},{actions:o(s=>[s.collapsed==!1?(l(),h(y,{key:0,class:"bg-success clickable",title:"Ladepunkt-Profil duplizieren",onClick:B=>n.addChargePointTemplate(B,d)},{default:o(()=>[a(b,{icon:["fas","copy"]})]),_:1},8,["onClick"])):g("",!0),s.collapsed==!1&&!d.endsWith("/0")?(l(),h(y,{key:1,class:"bg-danger clickable ml-1",title:"Ladepunkt-Profil löschen",onClick:B=>n.removeChargePointTemplateModal(B,d)},{default:o(()=>[a(b,{icon:["fas","trash"]})]),_:1},8,["onClick"])):g("",!0)]),default:o(()=>[a(I,{title:"Bezeichnung",subtype:"text","model-value":r.name,disabled:d.endsWith("/0"),"onUpdate:modelValue":s=>t.updateState(d,s,"name")},se({_:2},[d.endsWith("/0")?{name:"help",fn:o(()=>[e[20]||(e[20]=i(" Das Standard-Profil kann nicht umbenannt werden. ",-1))]),key:"0"}:void 0]),1032,["model-value","disabled","onUpdate:modelValue"]),n.dcChargingEnabled===!0?(l(),h(W,{key:0,title:"Typ des Ladeprofils",buttons:[{buttonValue:"AC",text:"AC"},{buttonValue:"DC",text:"DC"}],"model-value":r.charging_type,"onUpdate:modelValue":s=>t.updateState(d,s,"charging_type")},null,8,["model-value","onUpdate:modelValue"])):g("",!0),e[40]||(e[40]=m("hr",null,null,-1)),c.installAssistantActive?g("",!0):(l(),u("div",Re,[a(L,null,{default:o(()=>[...e[21]||(e[21]=[i(" Zugangskontrolle ",-1)])]),_:1}),r.valid_tags.length>0?(l(),u("div",Ne,[a(C,{subtype:"info"},{default:o(()=>[e[23]||(e[23]=i(" Einstellungen zur Zugangskontrolle finden sich unter ",-1)),a(x,{to:"/IdentificationConfiguration"},{default:o(()=>[...e[22]||(e[22]=[i(" Einstellungen - Identifikation ",-1)])]),_:1}),e[24]||(e[24]=i(". ",-1)),t.$store.state.mqtt["openWB/optional/rfid/active"]===!0&&r.disable_after_unplug?(l(),u("div",Ze," Ladepunkte mit diesem Profil werden automatisch beim Abstecken eines Fahrzeugs gesperrt und müssen für den nächsten Ladevorgang mit einem ID-Tag entsperrt werden. ")):t.$store.state.mqtt["openWB/optional/rfid/active"]===!1?(l(),u("div",He," Die Zugangskontrolle ist aktuell deaktiviert. ")):(l(),u("div",Je," Die Zugangskontrolle ist aktiviert, jedoch werden Ladepunkte mit diesem Profil nicht automatisch nach dem Abstecken eines Fahrzeugs gesperrt. "))]),_:2},1024),a(X,{title:"Zugeordnete ID-Tags","no-elements-message":"Keine keine ID-Tags zugeordnet.",readonly:!0,"model-value":r.valid_tags},{help:o(()=>[...e[25]||(e[25]=[i(" Hier werden die ID-Tags aufgelistet, welche diesem Ladepunkt-Profil zugeordnet sind. Nur mit diesen ID-Tags können Ladepunkte, denen dieses Profil zugeordnet ist, entsperrt werden. ",-1)])]),_:1},8,["model-value"])])):(l(),u("div",$e,[a(C,{subtype:"info"},{default:o(()=>[e[27]||(e[27]=i(" Einstellungen zur Zugangskontrolle finden sich unter ",-1)),a(x,{to:"/IdentificationConfiguration"},{default:o(()=>[...e[26]||(e[26]=[i(" Einstellungen - Identifikation ",-1)])]),_:1}),e[28]||(e[28]=i(".",-1)),e[29]||(e[29]=m("br",null,null,-1)),e[30]||(e[30]=i(" Dem Ladepunkt-Profil sind aktuell keine ID-Tags zum Entsperren zugeordnet. ",-1))]),_:1})]))])),e[41]||(e[41]=m("hr",null,null,-1)),a(L,null,{default:o(()=>[...e[31]||(e[31]=[i(" Angaben zum konfigurierten Ladestrom der openWB ",-1)])]),_:1}),a(C,{subtype:"info"},{default:o(()=>[e[32]||(e[32]=i(" Hier werden die maximalen Ladeströme entsprechend der in dem zugeordneten Ladepunkt genutzten Phasen eingestellt.",-1)),e[33]||(e[33]=m("br",null,null,-1)),e[34]||(e[34]=i(" Generell gilt, dass diese Werte in Übereinstimmung mit der Ausführung des Ladepunktes und des elektrischen Anschlusses bzw. der Absicherung zu wählen sind. ",-1)),r.charging_type==="AC"?(l(),u("span",Ge," Bei einer openWB mit 22kW Maximalleistung sind hier jeweils 32A einzustellen. Ist die openWB beispielsweise auf 11kW begrenzt (KfW-Förderung oder die Zuleitung ist mit 16A abgesichert), dann sind hier jeweils 16A einzustellen. ")):g("",!0)]),_:2},1024),r.charging_type==="AC"||n.dcChargingEnabled!==!0?(l(),u("div",Qe,[a(T,{title:"Maximalstrom bei einer Phase",min:6,max:32,step:1,unit:"A","model-value":r.max_current_single_phase,"onUpdate:modelValue":s=>t.updateState(d,s,"max_current_single_phase")},null,8,["model-value","onUpdate:modelValue"]),a(T,{title:"Maximalstrom mehrere Phasen",min:6,max:32,step:1,unit:"A","model-value":r.max_current_multi_phases,"onUpdate:modelValue":s=>t.updateState(d,s,"max_current_multi_phases")},null,8,["model-value","onUpdate:modelValue"])])):(l(),h(Y,{key:3,title:"Maximalleistung",min:22,max:420,step:1,unit:"kW",precision:5,"model-value":t.ac_current2dc_power(r.dc_max_current),"onUpdate:modelValue":s=>t.updateState(d,t.dc_power2ac_current(s),"dc_max_current")},null,8,["model-value","onUpdate:modelValue"])),c.installAssistantActive?g("",!0):(l(),u("div",Xe,[e[39]||(e[39]=m("hr",null,null,-1)),a(L,null,{default:o(()=>[...e[35]||(e[35]=[i(" Sperren nach Uhrzeit (Komplettsperrung - Freischaltung per Identifikation möglich) ",-1)])]),_:1}),a(W,{title:"Sperren nach Uhrzeit aktiv",buttons:[{buttonValue:!1,text:"Nein"},{buttonValue:!0,text:"Ja"}],"model-value":r.autolock.active,"onUpdate:modelValue":s=>t.updateState(d,s,"autolock.active")},{help:o(()=>[...e[36]||(e[36]=[i(" Wird Sperren nach Uhrzeit aktiviert, können Fahrzeugladungen mittels Zeitplan auf gewünschte Zeitbereiche eingeschränkt werden. Dies kann z.B. bei Zugänglichkeiten zu Ladepunkten in öffentlichen oder halb-öffentlichen Bereichen sinnvoll sein. In dieser Zeit ist aber eine Freischaltung per RFID, Fahrzeugerkennung oder Pin möglich, wenn Identifikation aktiviert ist. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(W,{title:"Erst nach Ladeende sperren",buttons:[{buttonValue:!1,text:"Nein"},{buttonValue:!0,text:"Ja"}],"model-value":r.autolock.wait_for_charging_end,"onUpdate:modelValue":s=>t.updateState(d,s,"autolock.wait_for_charging_end")},{help:o(()=>[...e[37]||(e[37]=[i(' Wenn ein Zeitplan Sperren nach Uhrzeit aktiviert, werden alle Ladepunkte direkt gesperrt und laufende Ladevorgänge beendet. Wird hier "Ja" ausgewählt, dann werden laufende Ladevorgänge NICHT beendet und diese Ladepunkte erst nach abgeschlossener Ladung gesperrt. ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(L,null,{actions:o(()=>[a(y,{class:"bg-success clickable",title:"Neuen Autolock Zeitplan anlegen",onClick:S(s=>n.addChargePointTemplateAutolockPlan(d),["stop"])},{default:o(()=>[a(b,{icon:["fas","plus"]})]),_:1},8,["onClick"])]),default:o(()=>[e[38]||(e[38]=i(" Zeitpläne für Sperren nach Uhrzeit ",-1))]),_:2},1024)])),(l(!0),u(A,null,E(r.autolock.plans,(s,B)=>(l(),h(K,{key:B,"model-value":s,"template-id":r.id,"onUpdate:modelValue":q=>t.updateState(d,q,`autolock.plans.${B}`),onSendCommand:e[3]||(e[3]=q=>t.$emit("sendCommand",q))},null,8,["model-value","template-id","onUpdate:modelValue"]))),128))]),_:2},1032,["title"]))),128))]))]),_:1})):g("",!0),a(ee,{"form-name":"chargePointInstallationForm",onSave:e[4]||(e[4]=r=>t.$emit("save",t.mqttTopicsToPublish)),onReset:e[5]||(e[5]=r=>t.$emit("reset")),onDefaults:e[6]||(e[6]=r=>t.$emit("defaults"))})])])],64)}const Ke=z(De,[["render",Ye],["__scopeId","data-v-75fe5743"],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/ChargePointInstallation.vue"]]),lt=Object.freeze(Object.defineProperty({__proto__:null,default:Ke},Symbol.toStringTag,{value:"Module"}));export{de as C,he as a,Ke as b,lt as c}; diff --git a/web/settings/assets/Chart-Bibs_Mk0.js b/web/settings/assets/Chart-Bibs_Mk0.js deleted file mode 100644 index 283f67147c..0000000000 --- a/web/settings/assets/Chart-Bibs_Mk0.js +++ /dev/null @@ -1 +0,0 @@ -import{F as B,l as j,X as M,a4 as O,a3 as z,a2 as q,aa as E,ab as P,Y as N}from"./vendor-fortawesome-DplTMxoa.js";import{C as F}from"./index-Bv2WLdLZ.js";import{L as Z,g as X,C as G,p as K,a as J,b as Y,c as U,B as Q,f as ee,P as te,d as re,T as ae,i as ne,e as oe}from"./vendor-chartjs-C4FabExn.js";import{_ as D,l as s,f as c,K as _,L as k,k as w,y as p,J as C,m as u,z as m,q as h,u as g,B as v,x as A,O as ie,t as S,a6 as se}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./vendor-luxon-BDx6lZXm.js";const ce={name:"LegendStandard",props:{items:{type:Array,default:()=>[]}},emits:["toggle"]},le={class:"custom-legend d-flex flex-wrap justify-content-center"},de=["onClick"],ue={width:"20",height:"6",class:"mr-1"},pe=["stroke","stroke-dasharray"];function he(e,t,r,n,o,a){return s(),c("div",le,[(s(!0),c(_,null,k(r.items,i=>(s(),c("div",{key:i.label,class:w(["legend-item d-flex align-items-center m-1",{"legend-item-hidden":i.hidden}]),role:"button",onClick:d=>e.$emit("toggle",i.label)},[(s(),c("svg",ue,[p("line",{x1:"0",y1:"3",x2:"20",y2:"3",stroke:i.borderColor,"stroke-width":"3","stroke-dasharray":i.borderDash&&i.borderDash.length?i.borderDash.join(","):""},null,8,pe)])),p("span",{class:w(["legend-label",{"text-line-through":i.hidden}])},C(i.label),3)],10,de))),128))])}const ge=D(ce,[["render",he],["__scopeId","data-v-40ecb731"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/chart/LegendStandard.vue"]]),me={name:"LegendCategory",props:{label:{type:String,default:""},items:{type:Array,default:()=>[]}},emits:["toggle"]},be={class:"dropdown m-1"},ye={class:"btn btn-secondary dropdown-toggle",type:"button","data-toggle":"dropdown","aria-expanded":"false"},fe={class:"dropdown-menu legend-dropdown"},_e=["onClick"],ke={width:"20",height:"6",class:"mr-1"},xe=["stroke","stroke-dasharray"];function ve(e,t,r,n,o,a){return s(),c("div",be,[p("button",ye,C(r.label),1),p("ul",fe,[(s(!0),c(_,null,k(r.items,i=>(s(),c("li",{key:i.label,class:w(["dropdown-item",{"legend-item-hidden":i.hidden}]),onClick:d=>e.$emit("toggle",i.label)},[(s(),c("svg",ke,[p("line",{x1:"0",y1:"3",x2:"20",y2:"3",stroke:i.borderColor,"stroke-width":"3","stroke-dasharray":i.borderDash&&i.borderDash.length?i.borderDash.join(","):""},null,8,xe)])),p("span",{class:w({"text-line-through":i.hidden})},C(i.label),3)],10,_e))),128))])])}const Ce=D(me,[["render",ve],["__scopeId","data-v-1ce49a26"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/chart/LegendCategory.vue"]]),De={name:"LegendCategoriesGroup",components:{LegendCategory:Ce},props:{categorizedItems:{type:Object,default:()=>({chargepoint:[],vehicle:[],component:[]})}},emits:["toggle"],data(){return{categoryLabels:{component:"Komponenten",chargepoint:"Ladepunkte",vehicle:"Fahrzeuge",consumer:"Verbraucher"}}}},Ae={class:"d-flex flex-wrap justify-content-center"};function we(e,t,r,n,o,a){const i=u("LegendCategory");return s(),c("div",Ae,[(s(!0),c(_,null,k(r.categorizedItems,(d,x)=>(s(),m(i,{key:x,label:o.categoryLabels[x],items:d,onToggle:t[0]||(t[0]=f=>e.$emit("toggle",f))},null,8,["label","items"]))),128))])}const Se=D(De,[["render",we],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/chart/LegendCategoriesGroup.vue"]]),We={name:"ChartLegend",components:{LegendCategoriesGroup:Se,LegendStandard:ge},props:{chart:{type:Object,default:()=>null},range:{type:String,default:"day"}},computed:{legendItems(){if(!this.chart||!this.chart.data)return[];const e=this.$store.state.chartLegend.hiddenDatasets;return this.chart.data.datasets.map((t,r)=>({label:t.label,index:r,category:t.category||"component",hidden:e.includes(t.label),borderColor:t.borderColor,borderDash:t.borderDash}))},categorizedLegendItems(){if(!this.chart)return{chargepoint:[],vehicle:[],component:[]};let e={};const t=this.$store.state.chartLegend.hiddenDatasets;return this.range==="day"?e={chargepoint:[],vehicle:[],consumer:[],component:[]}:e={chargepoint:[],consumer:[],component:[]},(this.chart?.data?.datasets||[]).forEach((n,o)=>{const a=n.category||"component";e[a]||(e[a]=[]),e[a].push({label:n.label,index:o,hidden:t.includes(n.label),borderColor:n.borderColor,borderDash:n.borderDash})}),Object.fromEntries(Object.entries(e).filter(([,n])=>n.length>0))},showStandardLegend(){return this.legendItems.length<12}},watch:{chart(e){this.defaultHiddenDatasets(e)}},mounted(){this.defaultHiddenDatasets(this.chart)},methods:{toggleDataset(e){if(!this.chart)return;const t=this.chart.data.datasets.find(r=>r.label===e);t&&(this.$store.commit("chartLegend/toggleDataset",t.label),this.applyHiddenDatasetsToChart())},defaultHiddenDatasets(e){if(e&&e.data&&e.data.datasets.length){const t=e.data.datasets.filter(r=>r.hidden).map(r=>r.label);this.$store.commit("chartLegend/setHiddenDatasets",t),this.applyHiddenDatasetsToChart()}},applyHiddenDatasetsToChart(){if(!this.chart||!this.chart.data)return;const e=this.$store.state.chartLegend.hiddenDatasets;this.chart.data.datasets.forEach(t=>{t.hidden=e.includes(t.label)}),this.chart.update()}}};function Ie(e,t,r,n,o,a){const i=u("LegendStandard"),d=u("LegendCategoriesGroup");return a.showStandardLegend?(s(),m(i,{key:r.range,items:a.legendItems,onToggle:a.toggleDataset},null,8,["items","onToggle"])):(s(),m(d,{key:1,"categorized-items":a.categorizedLegendItems,onToggle:a.toggleDataset},null,8,["categorized-items","onToggle"]))}const Re=D(We,[["render",Ie],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/chart/ChartLegend.vue"]]);j.add(M,O,z,q,E,P,N);G.register(K,J,Y,U,Q,ee,te,re,ae,ne,oe);const Le=["pv","counter","bat","cp","consumer","sh","ev","hc"],$e={counter:"counter",pv:"inverter",bat:"bat",cp:"cp"},W={"counter-power_average":{label:"Zähler",category:"component",unit:"kW",jsonKey:null,borderColor:"#dc3545b2",backgroundColor:"#dc35454c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!1,borderWidth:1,data:null,yAxisID:"y",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"counter-energy_imported":{label:"Zähler",category:"component",unit:"kWh",jsonKey:null,borderColor:"#dc3545b2",backgroundColor:"#dc35454c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!1,borderWidth:1,data:null,yAxisID:"y2",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"counter-energy_exported":{label:"Zähler",category:"component",unit:"kWh",jsonKey:null,borderColor:"rgba(0, 255, 105, 0.7)",backgroundColor:"rgba(0, 255, 255, 0.3)",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!1,borderWidth:1,data:null,yAxisID:"y2",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"counter-energy_imported_grid":{label:"Zähler (Netzanteil)",category:"component",unit:"kWh",type:"bar",jsonKey:null,borderColor:"#dc3545b2",backgroundColor:"#dc35454c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:3,data:null,yAxisID:"y2",stack:"#-energy-imported-source",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"counter-energy_imported_pv":{label:"Zähler (PV-Anteil)",category:"component",unit:"kWh",type:"bar",jsonKey:null,borderColor:"#28a745b2",backgroundColor:"#dc35454c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:3,data:null,yAxisID:"y2",stack:"#-energy-imported-source",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"counter-energy_imported_bat":{label:"Zähler (Speicher-Anteil)",category:"component",unit:"kWh",type:"bar",jsonKey:null,borderColor:"#ffc107b2",backgroundColor:"#dc35454c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:3,data:null,yAxisID:"y2",stack:"#-energy-imported-source",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"pv-power_exported":{label:"PV",category:"component",unit:"kW",jsonKey:null,borderColor:"#28a745b2",backgroundColor:"#28a7454c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:1,data:null,yAxisID:"y",stack:"inverter-power",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"pv-energy_exported":{label:"PV",category:"component",unit:"kWh",jsonKey:null,borderColor:"#28a745b2",backgroundColor:"#28a7454c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:1,data:null,yAxisID:"y2",stack:"inverter-exported",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"bat-power_average":{label:"Speicher",category:"component",unit:"kW",jsonKey:null,borderColor:"#ffc107b2",backgroundColor:"#ffc1074c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:1,data:null,yAxisID:"y",stack:"battery-power",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"bat-energy_imported":{label:"Speicher",category:"component",unit:"kWh",jsonKey:null,borderColor:"#ffc107b2",backgroundColor:"#ffc1074c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:1,data:null,yAxisID:"y2",stack:"battery-imported",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"bat-energy_exported":{label:"Speicher",category:"component",unit:"kWh",jsonKey:null,borderColor:"#ffc107b2",backgroundColor:"#ffc1074c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:1,data:null,yAxisID:"y2",stack:"battery-exported",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"bat-soc":{label:"Speicher SoC",category:"component",unit:"%",jsonKey:null,borderColor:"#ffc107b2",backgroundColor:"#ffc1074c",borderDash:[10,5],hidden:!0,fill:!1,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",borderWidth:2,data:null,yAxisID:"y3",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"cp-power_average":{label:"Ladepunkt",category:"chargepoint",unit:"kW",jsonKey:null,borderColor:"#00539c",backgroundColor:"#0000ff4c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:1,data:null,yAxisID:"y",stack:"charge-point-power",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"cp-energy_imported":{label:"Ladepunkt",category:"chargepoint",unit:"kWh",jsonKey:null,borderColor:"#00539c",backgroundColor:"#0000ff4c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:1,data:null,yAxisID:"y2",stack:"charge-point-imported",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"cp-energy_imported_grid":{label:"Ladepunkt (Netzanteil)",category:"chargepoint",unit:"kWh",type:"bar",jsonKey:null,borderColor:"#dc3545b2",backgroundColor:"#0000ff4c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:3,data:null,yAxisID:"y2",stack:"charge-point-imported-source",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"cp-energy_imported_pv":{label:"Ladepunkt (PV-Anteil)",category:"chargepoint",unit:"kWh",type:"bar",jsonKey:null,borderColor:"#28a745b2",backgroundColor:"#0000ff4c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:3,data:null,yAxisID:"y2",stack:"charge-point-imported-source",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"cp-energy_imported_bat":{label:"Ladepunkt (Speicher-Anteil)",category:"chargepoint",unit:"kWh",type:"bar",jsonKey:null,borderColor:"#ffc107b2",backgroundColor:"#0000ff4c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:3,data:null,yAxisID:"y2",stack:"charge-point-imported-source",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"consumer-power_average":{label:"Verbraucher",category:"consumer",unit:"kW",jsonKey:null,borderColor:"#6f42c1b2",backgroundColor:"#6f42c14c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:1,data:null,yAxisID:"y",stack:"consumer-power",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"consumer-energy_imported":{label:"Verbraucher",category:"consumer",unit:"kWh",jsonKey:null,borderColor:"#6f42c1b2",backgroundColor:"#6f42c14c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:1,data:null,yAxisID:"y2",stack:"consumer-imported",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"consumer-energy_exported":{label:"Verbraucher",category:"consumer",unit:"kWh",jsonKey:null,borderColor:"#6f42c1b2",backgroundColor:"#6f42c14c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:1,data:null,yAxisID:"y2",stack:"consumer-exported",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"consumer-energy_imported_grid":{label:"Verbraucher (Netzanteil)",category:"consumer",unit:"kWh",type:"bar",jsonKey:null,borderColor:"#dc3545b2",backgroundColor:"#6f42c14c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:3,data:null,yAxisID:"y2",stack:"#-energy-imported-source",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"consumer-energy_imported_pv":{label:"Verbraucher (PV-Anteil)",category:"consumer",unit:"kWh",type:"bar",jsonKey:null,borderColor:"#28a745b2",backgroundColor:"#6f42c14c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:3,data:null,yAxisID:"y2",stack:"#-energy-imported-source",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"consumer-energy_imported_bat":{label:"Verbraucher (Speicher-Anteil)",category:"consumer",unit:"kWh",type:"bar",jsonKey:null,borderColor:"#ffc107b2",backgroundColor:"#6f42c14c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:3,data:null,yAxisID:"y2",stack:"#-energy-imported-source",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"ev-soc":{label:"Fahrzeug SoC",category:"vehicle",unit:"%",jsonKey:null,borderColor:"#17a2b8b2",backgroundColor:"#17a2b84c",borderDash:[10,5],hidden:!0,fill:!1,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",borderWidth:2,data:null,yAxisID:"y3",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"sh-power_average":{label:"SmartHome",category:"component",unit:"kW",jsonKey:null,borderColor:"rgba(232, 62, 140, 0.7)",backgroundColor:"rgba(232, 72, 150, 0.3)",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!1,borderWidth:1,data:null,yAxisID:"y",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"sh-energy_imported":{label:"SmartHome",category:"component",unit:"kWh",jsonKey:null,borderColor:"rgba(232, 62, 140, 0.7)",backgroundColor:"rgba(232, 72, 150, 0.3)",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!1,borderWidth:1,data:null,yAxisID:"y2",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"sh-energy_exported":{label:"SmartHome",category:"component",unit:"kWh",jsonKey:null,borderColor:"rgba(232, 62, 140, 0.7)",backgroundColor:"rgba(232, 72, 150, 0.3)",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!1,borderWidth:1,data:null,yAxisID:"y2",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"hc-power_imported":{label:"Hausverbrauch",category:"component",unit:"kW",jsonKey:null,borderColor:"#787a7cb2",backgroundColor:"#787a7c4c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:1,data:null,yAxisID:"y",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"hc-energy_imported":{label:"Hausverbrauch",category:"component",unit:"kWh",jsonKey:null,borderColor:"##787a7cb2",backgroundColor:"#787a7c4c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:1,data:null,yAxisID:"y2",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"hc-energy_imported_grid":{label:"Hausverbrauch (Netzanteil)",category:"component",unit:"kWh",type:"bar",jsonKey:null,borderColor:"#dc3545b2",backgroundColor:"#787a7c4c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:3,data:null,yAxisID:"y2",stack:"hc-energy-imported-source",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"hc-energy_imported_pv":{label:"Hausverbrauch (PV-Anteil)",category:"component",unit:"kWh",type:"bar",jsonKey:null,borderColor:"#28a745b2",backgroundColor:"#787a7c4c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:3,data:null,yAxisID:"y2",stack:"hc-energy-imported-source",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"hc-energy_imported_bat":{label:"Hausverbrauch (Speicher-Anteil)",category:"component",unit:"kWh",type:"bar",jsonKey:null,borderColor:"#ffc107b2",backgroundColor:"#787a7c4c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:3,data:null,yAxisID:"y2",stack:"hc-energy-imported-source",parsing:{xAxisKey:"timestamp",yAxisKey:null}}},Te={name:"OpenwbChartView",components:{ChartjsLine:Z,FontAwesomeIcon:B,ChartLegend:Re},mixins:[F],props:{initialChartRange:{type:String,required:!1,validator:function(e){return["day","month","year"].indexOf(e)!==-1},default:"day"},initialDate:{type:String,required:!1,validator:function(e){return e.match(/^(([0-9]{4})(-[0-9]{2}(-[0-9]{2})?)?)?$/g)},default:""}},emits:["sendCommand"],data(){return{chartInstance:null,chartInstancePlugins:[{id:"captureChartInstance",afterInit:e=>{this.chartInstance=se(e)},afterDestroy:e=>{this.chartInstance===e&&(this.chartInstance=null)}}],mqttTopics:[{topic:"openWB/bat/+/get/power",writeable:!1},{topic:"openWB/bat/get/power",writeable:!1},{topic:"openWB/chargepoint/+/config",writeable:!1},{topic:"openWB/chargepoint/get/power",writeable:!1},{topic:"openWB/consumer/+/get/power",writeable:!1},{topic:"openWB/consumer/get/power",writeable:!1},{topic:"openWB/counter/+/get/power",writeable:!1},{topic:"openWB/counter/get/hierarchy",writeable:!1},{topic:"openWB/counter/set/home_consumption",writeable:!1},{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/log/daily/#",writeable:!1},{topic:"openWB/log/monthly/#",writeable:!1},{topic:"openWB/log/yearly/#",writeable:!1},{topic:"openWB/pv/+/get/power",writeable:!1},{topic:"openWB/pv/get/power",writeable:!1},{topic:"openWB/system/device/+/component/+/config",writeable:!1},{topic:"openWB/system/security/user_management_active",writeable:!1},{topic:"openWB/vehicle/+/info",writeable:!1},{topic:"openWB/vehicle/+/name",writeable:!1}],currentDate:"",chartRange:"day",blockChartInit:!1,chartIsLoading:!1,chartRequestDate:{day:"",month:"",year:""},chartOptions:{plugins:{title:{display:!1},tooltip:{enabled:!0,callbacks:{label:e=>`${e.dataset.label}: ${e.formattedValue} ${e.dataset.unit}`}},legend:{display:!1},zoom:{pan:{enabled:!0,mode:"x",threshold:5},zoom:{wheel:{enabled:!0},pinch:{enabled:!0},mode:"x"}}},elements:{point:{radius:2}},responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},scales:{x:{type:"time",time:{unit:"",tooltipFormat:""},display:!0,title:{display:!0,text:""},ticks:{source:"timestamp",font:{size:12},maxTicksLimit:0},grid:{}},y:{position:"left",type:"linear",display:"auto",suggestedMin:0,suggestedMax:0,title:{font:{size:12},display:!0,text:"Leistung [kW]"},grid:{},ticks:{font:{size:12},stepSize:.2,maxTicksLimit:11}},y2:{position:"left",type:"linear",display:"auto",suggestedMin:0,suggestedMax:0,title:{font:{size:12},display:!0,text:"Energie [kWh]"},grid:{},ticks:{font:{size:12},stepSize:.2,maxTicksLimit:11}},y3:{position:"right",type:"linear",display:"auto",suggestedMin:0,suggestedMax:100,title:{font:{size:12},display:!0,text:"SoC [%]"},grid:{display:!1},ticks:{font:{size:12},stepSize:10,maxTicksLimit:11}}}},chartDatasets:{datasets:[]}}},computed:{dateInput(){var e={title:"Datum",type:"date",min:"2018-01-01"};switch(this.chartRange){case"month":e={title:"Monat",type:"month",min:"2018-01"};break;case"year":e={title:"Jahr",type:"year",min:"2018"};break}return e},chartDate:{get(){var e=this.chartRequestDate.year;return this.chartRange!="year"&&(e=e+"-"+this.chartRequestDate.month),this.chartRange=="day"&&(e=e+"-"+this.chartRequestDate.day),e},set(e){let t=e.split("-");this.chartRequestDate.year=t[0],t.length>1?this.chartRequestDate.month=t[1]:this.chartRequestDate.month="",t.length>2?this.chartRequestDate.day=t[2]:this.chartRequestDate.day=""}},chartScaleX(){switch(this.chartRange){case"month":return{unit:"day",tooltipFormat:"DD",text:"Tag",maxTicksLimit:31};case"year":return{unit:"month",tooltipFormat:"LLLL yyyy",text:"Monat",maxTicksLimit:12};default:return{unit:"minute",tooltipFormat:"DD T",text:"Zeit",maxTicksLimit:24}}},commandData(){var e={date:this.chartRequestDate.year+this.chartRequestDate.month+this.chartRequestDate.day};switch(this.chartRange){case"month":e={date:this.chartRequestDate.year+this.chartRequestDate.month};break;case"year":e={date:this.chartRequestDate.year};break}return e},baseTopic(){var e="openWB/log/";switch(this.chartRange){case"day":e=e+"daily/";break;case"month":e=e+"monthly/";break;case"year":e=e+"yearly/";break}return e},chartDataRead(){return this.chartDataObject!=null},chartDataHasEntries(){return this.chartDataObject?this.chartDataObject.length>0:!1},chartTotals(){if(this.$store.state.mqtt[this.baseTopic+this.commandData.date]&&Object.prototype.hasOwnProperty.call(this.$store.state.mqtt[this.baseTopic+this.commandData.date],"totals")){var e=structuredClone(S(this.$store.state.mqtt[this.baseTopic+this.commandData.date].totals));return Object.keys(e).forEach(t=>{Object.keys(e[t]).forEach(r=>{this.objectAccessible(t,r)||(console.debug(`Removing totals for ${t} - ${r} due to missing access rights.`),delete e[t][r])}),Object.keys(e[t]).length===0&&(console.debug(`Removing empty totals for ${t}.`),delete e[t])}),delete e.energy_source,Object.keys(e.counter||{}).forEach(t=>{Object.prototype.hasOwnProperty.call(e.counter[t],"grid")&&delete e.counter[t].grid}),Object.keys(e).forEach(t=>{Object.prototype.hasOwnProperty.call(e[t],"all")&&(Object.keys(e[t]).length<=2&&["bat","pv","consumer"].includes(t)?delete e[t].all:e[t]={all:e[t].all,...e[t]})}),e}},chartDataObject(){const e=r=>(Object.keys(r).forEach(n=>{n==="timestamp"&&(r.timestamp=r.timestamp*1e3)}),r);if(this.$store.state.mqtt[this.baseTopic+this.commandData.date]){var t=this.$store.state.mqtt[this.baseTopic+this.commandData.date];Object.prototype.hasOwnProperty.call(t,"entries")&&(t=t.entries);let r=structuredClone(S(t));return r.forEach(n=>{e(n)}),r}},chartDataStructure(){const e={};return this.chartDataObject&&Le.forEach(t=>{const r={};this.chartDataObject.forEach(n=>{Object.prototype.hasOwnProperty.call(n,t)&&Object.entries(n[t]).forEach(([o,a])=>{r[o]===void 0&&(r[o]=new Set),Object.keys(a).forEach(i=>{r[o].add(i)})})}),Object.keys(r).length>0&&(e[t]=r)}),e},chartData(){if(this.chartDataObject)return Object.entries(this.chartDataStructure).forEach(([e,t])=>{let r=Object.keys(t);r.includes("all")&&(["bat","pv","consumer"].includes(e)&&r.length<=2?r=r.filter(n=>n!=="all"):r=["all",...r.filter(n=>n!=="all")]),r.forEach(n=>{t[n].forEach(o=>{this.initDataset(e,n,o)})})}),this.chartDatasets},configuredComponents(){const e=this.$store.state.mqtt["openWB/counter/get/hierarchy"];if(!Array.isArray(e))return;const t=new Set,r=n=>{Array.isArray(n)&&n.forEach(o=>{t.add(`${o.type}${o.id}`),r(o.children)})};return r(e),t},objectConfigured(){return(e,t)=>{if(this.configuredComponents===void 0)return!0;const r=$e[e],n=parseInt(t.match(/\d+$/)?.[0]||"");return r===void 0||isNaN(n)?!0:this.configuredComponents.has(`${r}${n}`)}},objectAccessible(){return(e,t)=>{let r;const n=parseInt(t.match(/\d+$/)?.[0]||"");switch(e){case"hc":r="openWB/counter/set/home_consumption";break;case"cp":t=="all"?r="openWB/chargepoint/get/power":isNaN(n)||(r=`openWB/chargepoint/${n}/config`);break;case"consumer":t=="all"?r="openWB/consumer/get/power":isNaN(n)||(r=`openWB/consumer/${n}/get/power`);break;case"ev":isNaN(n)||(r=`openWB/vehicle/${n}/info`);break;case"pv":t=="all"?r="openWB/pv/get/power":isNaN(n)||(r=`openWB/pv/${n}/get/power`);break;case"bat":t=="all"?r="openWB/bat/get/power":isNaN(n)||(r=`openWB/bat/${n}/get/power`);break;case"counter":isNaN(n)||(r=`openWB/counter/${n}/get/power`);break}return r?this.$store.state.mqtt[r]!==void 0?!0:this.$store.state.mqtt["openWB/system/security/user_management_active"]!==!1?!1:!this.objectConfigured(e,t):!0}}},watch:{chartRange(){this.init()},chartDataRead:{handler(e){e&&(this.chartIsLoading=!1)},immediate:!0}},mounted(){this.init()},methods:{handleChartClick(e){if(this.chartRange=="day")return;const t=this.$refs.myChart.chart;if(!t)return;const r=X(t,e);if(!r.length)return;const{datasetIndex:n,index:o}=r[0],a=this.chartData.datasets[n].data[o].date;var i="",d="";switch(this.chartRange){case"month":i=a.substring(0,4)+"-"+a.substring(4,6)+"-"+a.substring(6),d="day";break;case"year":i=a.substring(0,4)+"-"+a.substring(4,6),d="month";break}this.blockChartInit=!0,this.chartDate=i,this.chartRange=d},getCardSubtype(e){switch(e){case"bat":return"warning";case"counter":return"danger";case"consumer":return"purple";case"cp":return"primary";case"pv":return"success";case"sh":return"pink";default:return"secondary"}},getCardIcon(e){switch(e){case"bat":return["fas","car-battery"];case"counter":return["fas","gauge-high"];case"consumer":return["fas","plug"];case"cp":return["fas","charging-station"];case"pv":return["fas","solar-panel"];case"sh":return["fas","house-signal"];case"hc":return["fas","house"];default:return}},hideDataset(e,t,r){return!!(["bat","pv","cp","consumer"].includes(e)&&Object.prototype.hasOwnProperty.call(this.chartTotals?.[e]??{},"all")&&t!="all"||["grid","bat","pv","cp"].includes(r.split("_").pop()))},getTotalsLabel(e,t=void 0,r=void 0){var n="*test*";if(!t&&!r){switch(e){case"bat":return"Speicher";case"counter":return"Zähler";case"pv":return"Wechselrichter";case"cp":return"Ladepunkte";case"consumer":return"Verbraucher";case"sh":return"SmartHome-Geräte";case"hc":return"Hausverbrauch";default:console.warn("unknown group key:",e)}return"*"+e+"*"}if(t&&!r){if(t=="all")return"Summe";if(Object.prototype.hasOwnProperty.call(this.$store.state.mqtt[this.baseTopic+this.commandData.date],"names"))return this.$store.state.mqtt[this.baseTopic+this.commandData.date].names[t]}if(t&&r){switch(e){case"bat":case"cp":switch(r){case"imported":case"energy_imported":return"Ladung";case"exported":case"energy_exported":return"Entladung";case"energy_imported_grid":return"Ladung (Netz-Anteil)";case"energy_imported_pv":return"Ladung (PV-Anteil)";case"energy_imported_bat":return"Ladung (Speicher-Anteil)";case"energy_imported_cp":return"Ladung (Ladepunkt-Anteil)";default:console.warn("unknown measurement key:",e,r)}break;case"counter":switch(r){case"imported":case"energy_imported":return"Bezug/Verbrauch";case"exported":case"energy_exported":return"Einspeisung/Erzeugung";case"energy_imported_grid":return"Verbrauch (Netz-Anteil)";case"energy_imported_pv":return"Verbrauch (PV-Anteil)";case"energy_imported_bat":return"Verbrauch (Speicher-Anteil)";case"energy_imported_cp":return"Verbrauch (Ladepunkt-Anteil)";default:console.warn("unknown measurement key:",e,r)}break;case"pv":switch(r){case"exported":case"energy_exported":return"Erzeugung";default:console.warn("unknown measurement key:",e,r)}break;case"consumer":switch(r){case"imported":case"energy_imported":return"Verbrauch";case"exported":case"energy_exported":return"Erzeugung";case"energy_imported_grid":return"Verbrauch (Netz-Anteil)";case"energy_imported_pv":return"Verbrauch (PV-Anteil)";case"energy_imported_bat":return"Verbrauch (Speicher-Anteil)";case"energy_imported_cp":return"Verbrauch (Ladepunkt-Anteil)";default:console.warn("unknown measurement key:",e,r)}break;case"sh":switch(r){case"imported":case"energy_imported":return"Verbrauch";case"exported":case"energy_exported":return"Erzeugung";default:console.warn("unknown measurement key:",e,r)}break;case"hc":switch(r){case"imported":case"energy_imported":return"Verbrauch";case"energy_imported_grid":return"Verbrauch (Netz-Anteil)";case"energy_imported_pv":return"Verbrauch (PV-Anteil)";case"energy_imported_bat":return"Verbrauch (Speicher-Anteil)";case"energy_imported_cp":return"Verbrauch (Ladepunkt-Anteil)";default:console.warn("unknown measurement key:",e,r)}break;default:console.warn("unknown group key:",e)}return"*"+e+"+"+t+"+"+r+"*"}return n},getDatasetLabel(e,t,r,n){var o=["*"+n],a=[];if(t=="all")switch(e!=="hc"&&a.push("Summe"),e){case"pv":o=["PV"];break;case"bat":o=["Speicher"],r==="soc"&&o.push("SoC");break;case"cp":o=["Ladepunkte"];break;case"consumer":o=["Verbraucher"];break;case"hc":o=["Hausverbrauch"];break}else Object.prototype.hasOwnProperty.call(this.$store.state.mqtt[this.baseTopic+this.commandData.date],"names")&&Object.prototype.hasOwnProperty.call(this.$store.state.mqtt[this.baseTopic+this.commandData.date].names,t)&&(o=[this.$store.state.mqtt[this.baseTopic+this.commandData.date].names[t]]);switch(e){case"bat":case"ev":case"cp":switch(r){case"soc":a.push("SoC");break;case"energy_imported":a.push("Ladung");break;case"energy_exported":a.push("Entladung");break;case"energy_imported_grid":a.push("Netz-Anteil");break;case"energy_imported_pv":a.push("PV-Anteil");break;case"energy_imported_bat":a.push("Speicher-Anteil");break;case"energy_imported_cp":a.push("Ladepunkt-Anteil");break}break;case"counter":switch(r){case"energy_imported":a.push("Bezug/Verbrauch");break;case"energy_exported":a.push("Einspeisung/Erzeugung");break;case"energy_imported_grid":a.push("Netz-Anteil");break;case"energy_imported_pv":a.push("PV-Anteil");break;case"energy_imported_bat":a.push("Speicher-Anteil");break;case"energy_imported_cp":a.push("Ladepunkt-Anteil");break}break;case"consumer":switch(r){case"energy_imported":a.push("Verbrauch");break;case"energy_exported":a.push("Erzeugung");break;case"energy_imported_grid":a.push("Netz-Anteil");break;case"energy_imported_pv":a.push("PV-Anteil");break;case"energy_imported_bat":a.push("Speicher-Anteil");break;case"energy_imported_cp":a.push("Ladepunkt-Anteil");break}break;case"sh":switch(r){case"energy_imported":a.push("Verbrauch");break;case"energy_exported":a.push("Erzeugung");break}break;case"hc":switch(r){case"energy_imported_grid":a.push("Netz-Anteil");break;case"energy_imported_pv":a.push("PV-Anteil");break;case"energy_imported_bat":a.push("Speicher-Anteil");break;case"energy_imported_cp":a.push("Ladepunkt-Anteil");break}break}return`${o.join(" ")}${a.length?" ("+a.join(", ")+")":""}`},getDatasetColor(e,t,r,n){let o;return Object.prototype.hasOwnProperty.call(this.$store.state.mqtt[this.baseTopic+this.commandData.date],"colors")&&Object.prototype.hasOwnProperty.call(this.$store.state.mqtt[this.baseTopic+this.commandData.date].colors,t)&&(o=this.$store.state.mqtt[this.baseTopic+this.commandData.date].colors[t]),console.debug("getDatasetColor:",e,t,r,n,o),o?{borderColor:`${o}b2`,backgroundColor:`${o}${r=="soc"?"00":"4c"}`}:void 0},getComponentColor(e,t){let r;return console.info("getComponentColor:",e,t),Object.prototype.hasOwnProperty.call(this.$store.state.mqtt[this.baseTopic+this.commandData.date],"colors")&&Object.prototype.hasOwnProperty.call(this.$store.state.mqtt[this.baseTopic+this.commandData.date].colors,t)&&(r=this.$store.state.mqtt[this.baseTopic+this.commandData.date].colors[t]),console.info("getComponentColor:",e,t,r),r||"#000000"},getDatasetIndex(e){let t=this.chartDatasets.datasets.findIndex(r=>r.jsonKey==e);if(t!=-1)return t},updateDatasetStack(e,t,r){if(e){if(t=="all"&&!["grid","pv","bat","cp"].includes(r.split("_").slice(-1)[0])){console.debug("not stacking totals for:",e,t,r);return}return e.includes("#")?(console.debug("updating stack template:",e,t,r),e.replace("#",t)):e}},addDataset(e,t,r,n){if(console.debug("adding dataset:",e,t,r,n),!(Object.prototype.hasOwnProperty.call(this.chartTotals,e)&&!Object.prototype.hasOwnProperty.call(this.chartTotals[e],t))){var o=e+"-"+r;if(W[o]){var a=structuredClone(S(W[o]));a.parsing.yAxisKey=n,a.jsonKey=n,a.data=this.chartDataObject,a.category=W[o].category,a.label=this.getDatasetLabel(e,t,r,n),a.labelSuffix!=null&&(a.label=a.label+a.labelSuffix),a.hidden=this.hideDataset(e,t,r),a.stack=this.updateDatasetStack(a.stack,t,r);const i=this.getDatasetColor(e,t,r,n);return console.log("dataset color",i),i&&(a.borderColor=i.borderColor,a.backgroundColor=i.backgroundColor),this.chartDatasets.datasets.push(a)-1}else console.warn("no matching template found for: "+n+" with template: "+o)}},initDataset(e,t,r){if(!this.objectAccessible(e,t)){console.debug("skipping dataset due to missing rights:",e,t,r);return}let n;this.chartRange=="day"?n={counter:["power_average"],pv:["power_exported"],bat:["power_average","soc"],cp:["power_average"],consumer:["power_average"],sh:["power_average"],ev:["soc"],hc:["power_imported"]}:n={counter:["energy_imported","energy_exported","energy_imported_grid","energy_imported_pv","energy_imported_bat"],pv:["energy_exported"],bat:["energy_imported","energy_exported"],cp:["energy_imported","energy_imported_grid","energy_imported_pv","energy_imported_bat"],consumer:["energy_imported","energy_exported","energy_imported_grid","energy_imported_pv","energy_imported_bat"],sh:["energy_imported","energy_exported"],ev:[],hc:["energy_imported","energy_imported_grid","energy_imported_pv","energy_imported_bat"]};const o=e+"."+t+"."+r;if(n[e].includes(r)){var a=this.getDatasetIndex(o);a==null&&this.addDataset(e,t,r,o)}else console.debug("skipping dataset:",o)},setupScaleX(){this.chartOptions.scales.x.time.unit=this.chartScaleX.unit,this.chartOptions.scales.x.time.tooltipFormat=this.chartScaleX.tooltipFormat,this.chartOptions.scales.x.title.text=this.chartScaleX.text,this.chartOptions.scales.x.ticks.maxTicksLimit=this.chartScaleX.maxTicksLimit},requestChart(){if(document.forms.chartFilterForm?.reportValidity()){this.chartIsLoading=!0,this.setupScaleX(),this.chartDatasets.datasets=[];var t="";switch(this.chartRange){case"day":t="getDailyLog";break;case"month":t="getMonthlyLog";break;case"year":t="getYearlyLog";break}this.$emit("sendCommand",{command:t,data:this.commandData})}else{console.warn("form invalid");return}},clearChartData(){this.getWildcardIndexList(this.baseTopic+"+").forEach(e=>{this.$store.commit("removeTopic",`${this.baseTopic}${e}`)})},updateChart(){this.clearChartData(),this.requestChart()},init(){const e=new Date;this.currentDate=String(e.getFullYear()),this.chartRange!="year"&&(this.currentDate=this.currentDate+"-"+String(e.getMonth()+1).padStart(2,"0")),this.chartRange=="day"&&(this.currentDate=this.currentDate+"-"+String(e.getDate()).padStart(2,"0")),this.blockChartInit?this.blockChartInit=!1:this.initialDate==null||this.initialDate==""?this.chartDate=this.currentDate:this.chartDate=this.initialDate,this.updateChart()}}},Ve={class:"chart"},He={key:0},Be={key:1},je={name:"chartFilterForm"},Me={key:1},Oe={key:1},ze={class:"openwb-chart"},qe={name:"chartTotalsForm"},Ee={class:"header-left-wrapper"},Pe={key:1};function Ne(e,t,r,n,o,a){const i=u("openwb-base-alert"),d=u("openwb-base-select-input"),x=u("openwb-base-text-input"),f=u("openwb-base-card"),L=u("chartjs-line"),$=u("ChartLegend"),I=u("font-awesome-icon"),T=u("openwb-base-heading");return s(),c("div",Ve,[e.$store.state.mqtt["openWB/general/extern"]===!0?(s(),c("div",He,[h(i,{subtype:"info"},{default:g(()=>[...t[3]||(t[3]=[v(' Die Auswertungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. Du findest alle Auswertungen in der openWB, welche sich im Steuerungsmodus "primary" befindet. ',-1)])]),_:1})])):(s(),c("div",Be,[h(f,{title:"Filter",collapsible:!0,collapsed:!1},{default:g(()=>[p("form",je,[h(d,{modelValue:o.chartRange,"onUpdate:modelValue":t[0]||(t[0]=b=>o.chartRange=b),title:"Zeitraum",options:[{value:"day",text:"Tag"},{value:"month",text:"Monat"},{value:"year",text:"Jahr"}]},null,8,["modelValue"]),h(x,{modelValue:a.chartDate,"onUpdate:modelValue":[t[1]||(t[1]=b=>a.chartDate=b),t[2]||(t[2]=b=>a.updateChart())],title:a.dateInput.title,subtype:a.dateInput.type,min:a.dateInput.min,max:o.currentDate,"show-quick-buttons":!0},null,8,["modelValue","title","subtype","min","max"])])]),_:1}),o.chartIsLoading?(s(),m(i,{key:0,subtype:"info"},{default:g(()=>[...t[4]||(t[4]=[v(" Daten werden geladen... ",-1)])]),_:1})):(s(),c("div",Me,[a.chartDataHasEntries?(s(),c("div",Oe,[h(f,{title:"Diagramm",collapsible:!0,collapsed:!1},{default:g(()=>[p("div",ze,[h(L,{ref:"myChart",data:a.chartData,options:o.chartOptions,plugins:o.chartInstancePlugins,onClick:a.handleChartClick},null,8,["data","options","plugins","onClick"])]),o.chartInstance?(s(),m($,{key:o.chartDatasets.datasets.length,ref:"chartLegend",range:o.chartRange,chart:o.chartInstance},null,8,["range","chart"])):A("",!0)]),_:1}),h(f,{title:"Summen",collapsible:!0,collapsed:!0},{default:g(()=>[p("form",qe,[(s(!0),c(_,null,k(Object.fromEntries(Object.entries(a.chartTotals).filter(([b,l])=>Object.keys(l).length>0)),(b,l)=>(s(),m(f,{key:l,collapsible:!0,collapsed:!0,subtype:a.getCardSubtype(l)},{header:g(()=>[h(I,{icon:a.getCardIcon(l)},null,8,["icon"]),v(" "+C(a.getTotalsLabel(l)),1)]),default:g(()=>[(s(!0),c(_,null,k(b,(V,y)=>(s(),c("div",{key:y},[l!=="hc"?(s(),m(T,{key:0},{default:g(()=>[p("div",Ee,[y!="all"?(s(),m(I,{key:0,icon:a.getCardIcon(l),class:"fa-border",style:ie({backgroundColor:a.getComponentColor(l,y),color:e.getContrastColor(a.getComponentColor(l,y)),fontSize:"60%"})},null,8,["icon","style"])):A("",!0),v(" "+C(a.getTotalsLabel(l,y)),1)])]),_:2},1024)):A("",!0),(s(!0),c(_,null,k(V,(H,R)=>(s(),c("div",{key:R},[h(x,{title:a.getTotalsLabel(l,y,R),readonly:"",class:"text-right",unit:"kWh","model-value":e.formatNumber(H/1e3,3)},null,8,["title","model-value"])]))),128)),y=="all"&&l!="hc"?(s(),c("hr",Pe)):A("",!0)]))),128))]),_:2},1032,["subtype"]))),128))])]),_:1})])):(s(),m(i,{key:0,subtype:"info"},{default:g(()=>[...t[5]||(t[5]=[v(" Es konnten keine Daten für diesen Zeitraum gefunden werden. ",-1)])]),_:1}))]))]))])}const Qe=D(Te,[["render",Ne],["__scopeId","data-v-e00a7cd5"],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/Chart.vue"]]);export{Qe as default}; diff --git a/web/settings/assets/Chart-BieonKyw.js b/web/settings/assets/Chart-BieonKyw.js new file mode 100644 index 0000000000..05e735b354 --- /dev/null +++ b/web/settings/assets/Chart-BieonKyw.js @@ -0,0 +1 @@ +import{F as B,l as z,X as j,a4 as M,a3 as O,a2 as q,aa as E,ab as P,Y as N}from"./vendor-fortawesome-DplTMxoa.js";import{C as F}from"./index-CE-5DBwq.js";import{L as Z,g as X,C as G,p as K,a as J,b as Y,c as U,B as Q,f as ee,P as te,d as re,T as ae,i as ne,e as oe}from"./vendor-chartjs-C4FabExn.js";import{_ as D,l as s,f as l,K as k,L as x,k as w,y as g,J as C,m as u,z as m,q as p,u as h,B as _,x as A,O as ie,t as R,a6 as se}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./vendor-luxon-BDx6lZXm.js";const le={name:"LegendStandard",props:{items:{type:Array,default:()=>[]}},emits:["toggle"]},ce={class:"custom-legend d-flex flex-wrap justify-content-center"},de=["onClick"],ue={width:"20",height:"6",class:"mr-1"},pe=["stroke","stroke-dasharray"];function he(e,t,r,n,o,a){return s(),l("div",ce,[(s(!0),l(k,null,x(r.items,i=>(s(),l("div",{key:i.label,class:w(["legend-item d-flex align-items-center m-1",{"legend-item-hidden":i.hidden}]),role:"button",onClick:d=>e.$emit("toggle",i.label)},[(s(),l("svg",ue,[g("line",{x1:"0",y1:"3",x2:"20",y2:"3",stroke:i.borderColor,"stroke-width":"3","stroke-dasharray":i.borderDash&&i.borderDash.length?i.borderDash.join(","):""},null,8,pe)])),g("span",{class:w(["legend-label",{"text-line-through":i.hidden}])},C(i.label),3)],10,de))),128))])}const ge=D(le,[["render",he],["__scopeId","data-v-40ecb731"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/chart/LegendStandard.vue"]]),me={name:"LegendCategory",props:{label:{type:String,default:""},items:{type:Array,default:()=>[]}},emits:["toggle"]},be={class:"dropdown m-1"},ye={class:"btn btn-secondary dropdown-toggle",type:"button","data-toggle":"dropdown","aria-expanded":"false"},fe={class:"dropdown-menu legend-dropdown"},_e=["onClick"],ke={width:"20",height:"6",class:"mr-1"},xe=["stroke","stroke-dasharray"];function ve(e,t,r,n,o,a){return s(),l("div",be,[g("button",ye,C(r.label),1),g("ul",fe,[(s(!0),l(k,null,x(r.items,i=>(s(),l("li",{key:i.label,class:w(["dropdown-item",{"legend-item-hidden":i.hidden}]),onClick:d=>e.$emit("toggle",i.label)},[(s(),l("svg",ke,[g("line",{x1:"0",y1:"3",x2:"20",y2:"3",stroke:i.borderColor,"stroke-width":"3","stroke-dasharray":i.borderDash&&i.borderDash.length?i.borderDash.join(","):""},null,8,xe)])),g("span",{class:w({"text-line-through":i.hidden})},C(i.label),3)],10,_e))),128))])])}const Ce=D(me,[["render",ve],["__scopeId","data-v-1ce49a26"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/chart/LegendCategory.vue"]]),De={name:"LegendCategoriesGroup",components:{LegendCategory:Ce},props:{categorizedItems:{type:Object,default:()=>({chargepoint:[],vehicle:[],component:[]})}},emits:["toggle"],data(){return{categoryLabels:{component:"Komponenten",chargepoint:"Ladepunkte",vehicle:"Fahrzeuge",consumer:"Verbraucher"}}}},Ae={class:"d-flex flex-wrap justify-content-center"};function we(e,t,r,n,o,a){const i=u("LegendCategory");return s(),l("div",Ae,[(s(!0),l(k,null,x(r.categorizedItems,(d,v)=>(s(),m(i,{key:v,label:o.categoryLabels[v],items:d,onToggle:t[0]||(t[0]=f=>e.$emit("toggle",f))},null,8,["label","items"]))),128))])}const Re=D(De,[["render",we],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/chart/LegendCategoriesGroup.vue"]]),Se={name:"ChartLegend",components:{LegendCategoriesGroup:Re,LegendStandard:ge},props:{chart:{type:Object,default:()=>null},range:{type:String,default:"day"}},computed:{legendItems(){if(!this.chart||!this.chart.data)return[];const e=this.$store.state.chartLegend.hiddenDatasets;return this.chart.data.datasets.map((t,r)=>({label:t.label,index:r,category:t.category||"component",hidden:e.includes(t.label),borderColor:t.borderColor,borderDash:t.borderDash}))},categorizedLegendItems(){if(!this.chart)return{chargepoint:[],vehicle:[],component:[]};let e={};const t=this.$store.state.chartLegend.hiddenDatasets;return this.range==="day"?e={chargepoint:[],vehicle:[],consumer:[],component:[]}:e={chargepoint:[],consumer:[],component:[]},(this.chart?.data?.datasets||[]).forEach((n,o)=>{const a=n.category||"component";e[a]||(e[a]=[]),e[a].push({label:n.label,index:o,hidden:t.includes(n.label),borderColor:n.borderColor,borderDash:n.borderDash})}),Object.fromEntries(Object.entries(e).filter(([,n])=>n.length>0))},showStandardLegend(){return this.legendItems.length<12}},watch:{chart(e){this.defaultHiddenDatasets(e)}},mounted(){this.defaultHiddenDatasets(this.chart)},methods:{toggleDataset(e){if(!this.chart)return;const t=this.chart.data.datasets.find(r=>r.label===e);t&&(this.$store.commit("chartLegend/toggleDataset",t.label),this.applyHiddenDatasetsToChart())},defaultHiddenDatasets(e){if(e&&e.data&&e.data.datasets.length){const t=e.data.datasets.filter(r=>r.hidden).map(r=>r.label);this.$store.commit("chartLegend/setHiddenDatasets",t),this.applyHiddenDatasetsToChart()}},applyHiddenDatasetsToChart(){if(!this.chart||!this.chart.data)return;const e=this.$store.state.chartLegend.hiddenDatasets;this.chart.data.datasets.forEach(t=>{t.hidden=e.includes(t.label)}),this.chart.update()}}};function We(e,t,r,n,o,a){const i=u("LegendStandard"),d=u("LegendCategoriesGroup");return a.showStandardLegend?(s(),m(i,{key:r.range,items:a.legendItems,onToggle:a.toggleDataset},null,8,["items","onToggle"])):(s(),m(d,{key:1,"categorized-items":a.categorizedLegendItems,onToggle:a.toggleDataset},null,8,["categorized-items","onToggle"]))}const Ie=D(Se,[["render",We],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/chart/ChartLegend.vue"]]);z.add(j,M,O,q,E,P,N);G.register(K,J,Y,U,Q,ee,te,re,ae,ne,oe);const Le=["pv","counter","bat","cp","consumer","sh","ev","hc"],$e={counter:"counter",pv:"inverter",bat:"bat",cp:"cp"},S={"counter-power_average":{label:"Zähler",category:"component",unit:"kW",jsonKey:null,borderColor:"#dc3545b2",backgroundColor:"#dc35454c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!1,borderWidth:1,data:null,yAxisID:"y",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"counter-energy_imported":{label:"Zähler",category:"component",unit:"kWh",jsonKey:null,borderColor:"#dc3545b2",backgroundColor:"#dc35454c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!1,borderWidth:1,data:null,yAxisID:"y2",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"counter-energy_exported":{label:"Zähler",category:"component",unit:"kWh",jsonKey:null,borderColor:"rgba(0, 255, 105, 0.7)",backgroundColor:"rgba(0, 255, 255, 0.3)",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!1,borderWidth:1,data:null,yAxisID:"y2",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"counter-energy_imported_grid":{label:"Zähler (Netzanteil)",category:"component",unit:"kWh",type:"bar",jsonKey:null,borderColor:"#dc3545b2",backgroundColor:"#dc35454c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:3,data:null,yAxisID:"y2",stack:"#-energy-imported-source",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"counter-energy_imported_pv":{label:"Zähler (PV-Anteil)",category:"component",unit:"kWh",type:"bar",jsonKey:null,borderColor:"#28a745b2",backgroundColor:"#dc35454c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:3,data:null,yAxisID:"y2",stack:"#-energy-imported-source",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"counter-energy_imported_bat":{label:"Zähler (Speicher-Anteil)",category:"component",unit:"kWh",type:"bar",jsonKey:null,borderColor:"#ffc107b2",backgroundColor:"#dc35454c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:3,data:null,yAxisID:"y2",stack:"#-energy-imported-source",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"pv-power_exported":{label:"PV",category:"component",unit:"kW",jsonKey:null,borderColor:"#28a745b2",backgroundColor:"#28a7454c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:1,data:null,yAxisID:"y",stack:"inverter-power",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"pv-energy_exported":{label:"PV",category:"component",unit:"kWh",jsonKey:null,borderColor:"#28a745b2",backgroundColor:"#28a7454c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:1,data:null,yAxisID:"y2",stack:"inverter-exported",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"bat-power_average":{label:"Speicher",category:"component",unit:"kW",jsonKey:null,borderColor:"#ffc107b2",backgroundColor:"#ffc1074c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:1,data:null,yAxisID:"y",stack:"battery-power",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"bat-energy_imported":{label:"Speicher",category:"component",unit:"kWh",jsonKey:null,borderColor:"#ffc107b2",backgroundColor:"#ffc1074c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:1,data:null,yAxisID:"y2",stack:"battery-imported",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"bat-energy_exported":{label:"Speicher",category:"component",unit:"kWh",jsonKey:null,borderColor:"#ffc107b2",backgroundColor:"#ffc1074c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:1,data:null,yAxisID:"y2",stack:"battery-exported",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"bat-soc":{label:"Speicher SoC",category:"component",unit:"%",jsonKey:null,borderColor:"#ffc107b2",backgroundColor:"#ffc1074c",borderDash:[10,5],hidden:!0,fill:!1,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",borderWidth:2,data:null,yAxisID:"y3",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"cp-power_average":{label:"Ladepunkt",category:"chargepoint",unit:"kW",jsonKey:null,borderColor:"#00539c",backgroundColor:"#0000ff4c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:1,data:null,yAxisID:"y",stack:"charge-point-power",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"cp-energy_imported":{label:"Ladepunkt",category:"chargepoint",unit:"kWh",jsonKey:null,borderColor:"#00539c",backgroundColor:"#0000ff4c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:1,data:null,yAxisID:"y2",stack:"charge-point-imported",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"cp-energy_imported_grid":{label:"Ladepunkt (Netzanteil)",category:"chargepoint",unit:"kWh",type:"bar",jsonKey:null,borderColor:"#dc3545b2",backgroundColor:"#0000ff4c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:3,data:null,yAxisID:"y2",stack:"charge-point-imported-source",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"cp-energy_imported_pv":{label:"Ladepunkt (PV-Anteil)",category:"chargepoint",unit:"kWh",type:"bar",jsonKey:null,borderColor:"#28a745b2",backgroundColor:"#0000ff4c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:3,data:null,yAxisID:"y2",stack:"charge-point-imported-source",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"cp-energy_imported_bat":{label:"Ladepunkt (Speicher-Anteil)",category:"chargepoint",unit:"kWh",type:"bar",jsonKey:null,borderColor:"#ffc107b2",backgroundColor:"#0000ff4c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:3,data:null,yAxisID:"y2",stack:"charge-point-imported-source",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"consumer-power_average":{label:"Verbraucher",category:"consumer",unit:"kW",jsonKey:null,borderColor:"#6f42c1b2",backgroundColor:"#6f42c14c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:1,data:null,yAxisID:"y",stack:"consumer-power",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"consumer-energy_imported":{label:"Verbraucher",category:"consumer",unit:"kWh",jsonKey:null,borderColor:"#6f42c1b2",backgroundColor:"#6f42c14c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:1,data:null,yAxisID:"y2",stack:"consumer-imported",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"consumer-energy_exported":{label:"Verbraucher",category:"consumer",unit:"kWh",jsonKey:null,borderColor:"#6f42c1b2",backgroundColor:"#6f42c14c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:1,data:null,yAxisID:"y2",stack:"consumer-exported",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"consumer-energy_imported_grid":{label:"Verbraucher (Netzanteil)",category:"consumer",unit:"kWh",type:"bar",jsonKey:null,borderColor:"#dc3545b2",backgroundColor:"#6f42c14c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:3,data:null,yAxisID:"y2",stack:"#-energy-imported-source",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"consumer-energy_imported_pv":{label:"Verbraucher (PV-Anteil)",category:"consumer",unit:"kWh",type:"bar",jsonKey:null,borderColor:"#28a745b2",backgroundColor:"#6f42c14c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:3,data:null,yAxisID:"y2",stack:"#-energy-imported-source",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"consumer-energy_imported_bat":{label:"Verbraucher (Speicher-Anteil)",category:"consumer",unit:"kWh",type:"bar",jsonKey:null,borderColor:"#ffc107b2",backgroundColor:"#6f42c14c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:3,data:null,yAxisID:"y2",stack:"#-energy-imported-source",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"ev-soc":{label:"Fahrzeug SoC",category:"vehicle",unit:"%",jsonKey:null,borderColor:"#17a2b8b2",backgroundColor:"#17a2b84c",borderDash:[10,5],hidden:!0,fill:!1,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",borderWidth:2,data:null,yAxisID:"y3",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"sh-power_average":{label:"SmartHome",category:"component",unit:"kW",jsonKey:null,borderColor:"rgba(232, 62, 140, 0.7)",backgroundColor:"rgba(232, 72, 150, 0.3)",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!1,borderWidth:1,data:null,yAxisID:"y",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"sh-energy_imported":{label:"SmartHome",category:"component",unit:"kWh",jsonKey:null,borderColor:"rgba(232, 62, 140, 0.7)",backgroundColor:"rgba(232, 72, 150, 0.3)",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!1,borderWidth:1,data:null,yAxisID:"y2",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"sh-energy_exported":{label:"SmartHome",category:"component",unit:"kWh",jsonKey:null,borderColor:"rgba(232, 62, 140, 0.7)",backgroundColor:"rgba(232, 72, 150, 0.3)",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!1,borderWidth:1,data:null,yAxisID:"y2",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"hc-power_imported":{label:"Hausverbrauch",category:"component",unit:"kW",jsonKey:null,borderColor:"#787a7cb2",backgroundColor:"#787a7c4c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:1,data:null,yAxisID:"y",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"hc-energy_imported":{label:"Hausverbrauch",category:"component",unit:"kWh",jsonKey:null,borderColor:"##787a7cb2",backgroundColor:"#787a7c4c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:1,data:null,yAxisID:"y2",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"hc-energy_imported_grid":{label:"Hausverbrauch (Netzanteil)",category:"component",unit:"kWh",type:"bar",jsonKey:null,borderColor:"#dc3545b2",backgroundColor:"#787a7c4c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:3,data:null,yAxisID:"y2",stack:"hc-energy-imported-source",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"hc-energy_imported_pv":{label:"Hausverbrauch (PV-Anteil)",category:"component",unit:"kWh",type:"bar",jsonKey:null,borderColor:"#28a745b2",backgroundColor:"#787a7c4c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:3,data:null,yAxisID:"y2",stack:"hc-energy-imported-source",parsing:{xAxisKey:"timestamp",yAxisKey:null}},"hc-energy_imported_bat":{label:"Hausverbrauch (Speicher-Anteil)",category:"component",unit:"kWh",type:"bar",jsonKey:null,borderColor:"#ffc107b2",backgroundColor:"#787a7c4c",fill:!0,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!0,borderWidth:3,data:null,yAxisID:"y2",stack:"hc-energy-imported-source",parsing:{xAxisKey:"timestamp",yAxisKey:null}}},Te={name:"OpenwbChartView",components:{ChartjsLine:Z,FontAwesomeIcon:B,ChartLegend:Ie},mixins:[F],props:{initialChartRange:{type:String,required:!1,validator:function(e){return["day","month","year"].indexOf(e)!==-1},default:"day"},initialDate:{type:String,required:!1,validator:function(e){return e.match(/^(([0-9]{4})(-[0-9]{2}(-[0-9]{2})?)?)?$/g)},default:""}},emits:["sendCommand"],data(){return{chartInstance:null,chartInstancePlugins:[{id:"captureChartInstance",afterInit:e=>{this.chartInstance=se(e)},afterDestroy:e=>{this.chartInstance===e&&(this.chartInstance=null)}}],mqttTopics:[{topic:"openWB/bat/+/get/power",writeable:!1},{topic:"openWB/bat/get/power",writeable:!1},{topic:"openWB/chargepoint/+/config",writeable:!1},{topic:"openWB/chargepoint/get/power",writeable:!1},{topic:"openWB/consumer/+/get/power",writeable:!1},{topic:"openWB/consumer/get/power",writeable:!1},{topic:"openWB/counter/+/get/power",writeable:!1},{topic:"openWB/counter/get/hierarchy",writeable:!1},{topic:"openWB/counter/set/home_consumption",writeable:!1},{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/log/daily/#",writeable:!1},{topic:"openWB/log/monthly/#",writeable:!1},{topic:"openWB/log/yearly/#",writeable:!1},{topic:"openWB/pv/+/get/power",writeable:!1},{topic:"openWB/pv/get/power",writeable:!1},{topic:"openWB/system/device/+/component/+/config",writeable:!1},{topic:"openWB/system/log_data_ready",writeable:!1},{topic:"openWB/system/security/user_management_active",writeable:!1},{topic:"openWB/vehicle/+/info",writeable:!1},{topic:"openWB/vehicle/+/name",writeable:!1}],currentDate:"",chartRange:"day",blockChartInit:!1,chartIsLoading:!1,chartRequestDate:{day:"",month:"",year:""},chartOptions:{plugins:{title:{display:!1},tooltip:{enabled:!0,callbacks:{label:e=>`${e.dataset.label}: ${e.formattedValue} ${e.dataset.unit}`}},legend:{display:!1},zoom:{pan:{enabled:!0,mode:"x",threshold:5},zoom:{wheel:{enabled:!0},pinch:{enabled:!0},mode:"x"}}},elements:{point:{radius:2}},responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},scales:{x:{type:"time",time:{unit:"",tooltipFormat:""},display:!0,title:{display:!0,text:""},ticks:{source:"timestamp",font:{size:12},maxTicksLimit:0},grid:{}},y:{position:"left",type:"linear",display:"auto",suggestedMin:0,suggestedMax:0,title:{font:{size:12},display:!0,text:"Leistung [kW]"},grid:{},ticks:{font:{size:12},stepSize:.2,maxTicksLimit:11}},y2:{position:"left",type:"linear",display:"auto",suggestedMin:0,suggestedMax:0,title:{font:{size:12},display:!0,text:"Energie [kWh]"},grid:{},ticks:{font:{size:12},stepSize:.2,maxTicksLimit:11}},y3:{position:"right",type:"linear",display:"auto",suggestedMin:0,suggestedMax:100,title:{font:{size:12},display:!0,text:"SoC [%]"},grid:{display:!1},ticks:{font:{size:12},stepSize:10,maxTicksLimit:11}}}},chartDatasets:{datasets:[]}}},computed:{logDataReady(){return this.$store.state.mqtt["openWB/system/log_data_ready"]===!0},dateInput(){var e={title:"Datum",type:"date",min:"2018-01-01"};switch(this.chartRange){case"month":e={title:"Monat",type:"month",min:"2018-01"};break;case"year":e={title:"Jahr",type:"year",min:"2018"};break}return e},chartDate:{get(){var e=this.chartRequestDate.year;return this.chartRange!="year"&&(e=e+"-"+this.chartRequestDate.month),this.chartRange=="day"&&(e=e+"-"+this.chartRequestDate.day),e},set(e){let t=e.split("-");this.chartRequestDate.year=t[0],t.length>1?this.chartRequestDate.month=t[1]:this.chartRequestDate.month="",t.length>2?this.chartRequestDate.day=t[2]:this.chartRequestDate.day=""}},chartScaleX(){switch(this.chartRange){case"month":return{unit:"day",tooltipFormat:"DD",text:"Tag",maxTicksLimit:31};case"year":return{unit:"month",tooltipFormat:"LLLL yyyy",text:"Monat",maxTicksLimit:12};default:return{unit:"minute",tooltipFormat:"DD T",text:"Zeit",maxTicksLimit:24}}},commandData(){var e={date:this.chartRequestDate.year+this.chartRequestDate.month+this.chartRequestDate.day};switch(this.chartRange){case"month":e={date:this.chartRequestDate.year+this.chartRequestDate.month};break;case"year":e={date:this.chartRequestDate.year};break}return e},baseTopic(){var e="openWB/log/";switch(this.chartRange){case"day":e=e+"daily/";break;case"month":e=e+"monthly/";break;case"year":e=e+"yearly/";break}return e},chartDataRead(){return this.chartDataObject!=null},chartDataHasEntries(){return this.chartDataObject?this.chartDataObject.length>0:!1},chartTotals(){if(this.$store.state.mqtt[this.baseTopic+this.commandData.date]&&Object.prototype.hasOwnProperty.call(this.$store.state.mqtt[this.baseTopic+this.commandData.date],"totals")){var e=structuredClone(R(this.$store.state.mqtt[this.baseTopic+this.commandData.date].totals));return Object.keys(e).forEach(t=>{Object.keys(e[t]).forEach(r=>{this.objectAccessible(t,r)||(console.debug(`Removing totals for ${t} - ${r} due to missing access rights.`),delete e[t][r])}),Object.keys(e[t]).length===0&&(console.debug(`Removing empty totals for ${t}.`),delete e[t])}),delete e.energy_source,Object.keys(e.counter||{}).forEach(t=>{Object.prototype.hasOwnProperty.call(e.counter[t],"grid")&&delete e.counter[t].grid}),Object.keys(e).forEach(t=>{Object.prototype.hasOwnProperty.call(e[t],"all")&&(Object.keys(e[t]).length<=2&&["bat","pv","consumer"].includes(t)?delete e[t].all:e[t]={all:e[t].all,...e[t]})}),e}},chartDataObject(){const e=r=>(Object.keys(r).forEach(n=>{n==="timestamp"&&(r.timestamp=r.timestamp*1e3)}),r);if(this.$store.state.mqtt[this.baseTopic+this.commandData.date]){var t=this.$store.state.mqtt[this.baseTopic+this.commandData.date];Object.prototype.hasOwnProperty.call(t,"entries")&&(t=t.entries);let r=structuredClone(R(t));return r.forEach(n=>{e(n)}),r}},chartDataStructure(){const e={};return this.chartDataObject&&Le.forEach(t=>{const r={};this.chartDataObject.forEach(n=>{Object.prototype.hasOwnProperty.call(n,t)&&Object.entries(n[t]).forEach(([o,a])=>{r[o]===void 0&&(r[o]=new Set),Object.keys(a).forEach(i=>{r[o].add(i)})})}),Object.keys(r).length>0&&(e[t]=r)}),e},chartData(){if(this.chartDataObject)return Object.entries(this.chartDataStructure).forEach(([e,t])=>{let r=Object.keys(t);r.includes("all")&&(["bat","pv","consumer"].includes(e)&&r.length<=2?r=r.filter(n=>n!=="all"):r=["all",...r.filter(n=>n!=="all")]),r.forEach(n=>{t[n].forEach(o=>{this.initDataset(e,n,o)})})}),this.chartDatasets},configuredComponents(){const e=this.$store.state.mqtt["openWB/counter/get/hierarchy"];if(!Array.isArray(e))return;const t=new Set,r=n=>{Array.isArray(n)&&n.forEach(o=>{t.add(`${o.type}${o.id}`),r(o.children)})};return r(e),t},objectConfigured(){return(e,t)=>{if(this.configuredComponents===void 0)return!0;const r=$e[e],n=parseInt(t.match(/\d+$/)?.[0]||"");return r===void 0||isNaN(n)?!0:this.configuredComponents.has(`${r}${n}`)}},objectAccessible(){return(e,t)=>{let r;const n=parseInt(t.match(/\d+$/)?.[0]||"");switch(e){case"hc":r="openWB/counter/set/home_consumption";break;case"cp":t=="all"?r="openWB/chargepoint/get/power":isNaN(n)||(r=`openWB/chargepoint/${n}/config`);break;case"consumer":t=="all"?r="openWB/consumer/get/power":isNaN(n)||(r=`openWB/consumer/${n}/get/power`);break;case"ev":isNaN(n)||(r=`openWB/vehicle/${n}/info`);break;case"pv":t=="all"?r="openWB/pv/get/power":isNaN(n)||(r=`openWB/pv/${n}/get/power`);break;case"bat":t=="all"?r="openWB/bat/get/power":isNaN(n)||(r=`openWB/bat/${n}/get/power`);break;case"counter":isNaN(n)||(r=`openWB/counter/${n}/get/power`);break}return r?this.$store.state.mqtt[r]!==void 0?!0:this.$store.state.mqtt["openWB/system/security/user_management_active"]!==!1?!1:!this.objectConfigured(e,t):!0}}},watch:{logDataReady(e,t){e===!0&&t!==!0&&this.$nextTick(()=>{this.logDataReady&&this.init()})},chartRange(){this.logDataReady&&this.init()},chartDataRead:{handler(e){e&&(this.chartIsLoading=!1)},immediate:!0}},mounted(){this.logDataReady&&this.init()},methods:{handleChartClick(e){if(this.chartRange=="day")return;const t=this.$refs.myChart.chart;if(!t)return;const r=X(t,e);if(!r.length)return;const{datasetIndex:n,index:o}=r[0],a=this.chartData.datasets[n].data[o].date;var i="",d="";switch(this.chartRange){case"month":i=a.substring(0,4)+"-"+a.substring(4,6)+"-"+a.substring(6),d="day";break;case"year":i=a.substring(0,4)+"-"+a.substring(4,6),d="month";break}this.blockChartInit=!0,this.chartDate=i,this.chartRange=d},getCardSubtype(e){switch(e){case"bat":return"warning";case"counter":return"danger";case"consumer":return"purple";case"cp":return"primary";case"pv":return"success";case"sh":return"pink";default:return"secondary"}},getCardIcon(e){switch(e){case"bat":return["fas","car-battery"];case"counter":return["fas","gauge-high"];case"consumer":return["fas","plug"];case"cp":return["fas","charging-station"];case"pv":return["fas","solar-panel"];case"sh":return["fas","house-signal"];case"hc":return["fas","house"];default:return}},hideDataset(e,t,r){return!!(["bat","pv","cp","consumer"].includes(e)&&Object.prototype.hasOwnProperty.call(this.chartTotals?.[e]??{},"all")&&t!="all"||["grid","bat","pv","cp"].includes(r.split("_").pop()))},getTotalsLabel(e,t=void 0,r=void 0){var n="*test*";if(!t&&!r){switch(e){case"bat":return"Speicher";case"counter":return"Zähler";case"pv":return"Wechselrichter";case"cp":return"Ladepunkte";case"consumer":return"Verbraucher";case"sh":return"SmartHome-Geräte";case"hc":return"Hausverbrauch";default:console.warn("unknown group key:",e)}return"*"+e+"*"}if(t&&!r){if(t=="all")return"Summe";if(Object.prototype.hasOwnProperty.call(this.$store.state.mqtt[this.baseTopic+this.commandData.date],"names"))return this.$store.state.mqtt[this.baseTopic+this.commandData.date].names[t]}if(t&&r){switch(e){case"bat":case"cp":switch(r){case"imported":case"energy_imported":return"Ladung";case"exported":case"energy_exported":return"Entladung";case"energy_imported_grid":return"Ladung (Netz-Anteil)";case"energy_imported_pv":return"Ladung (PV-Anteil)";case"energy_imported_bat":return"Ladung (Speicher-Anteil)";case"energy_imported_cp":return"Ladung (Ladepunkt-Anteil)";default:console.warn("unknown measurement key:",e,r)}break;case"counter":switch(r){case"imported":case"energy_imported":return"Bezug/Verbrauch";case"exported":case"energy_exported":return"Einspeisung/Erzeugung";case"energy_imported_grid":return"Verbrauch (Netz-Anteil)";case"energy_imported_pv":return"Verbrauch (PV-Anteil)";case"energy_imported_bat":return"Verbrauch (Speicher-Anteil)";case"energy_imported_cp":return"Verbrauch (Ladepunkt-Anteil)";default:console.warn("unknown measurement key:",e,r)}break;case"pv":switch(r){case"exported":case"energy_exported":return"Erzeugung";default:console.warn("unknown measurement key:",e,r)}break;case"consumer":switch(r){case"imported":case"energy_imported":return"Verbrauch";case"exported":case"energy_exported":return"Erzeugung";case"energy_imported_grid":return"Verbrauch (Netz-Anteil)";case"energy_imported_pv":return"Verbrauch (PV-Anteil)";case"energy_imported_bat":return"Verbrauch (Speicher-Anteil)";case"energy_imported_cp":return"Verbrauch (Ladepunkt-Anteil)";default:console.warn("unknown measurement key:",e,r)}break;case"sh":switch(r){case"imported":case"energy_imported":return"Verbrauch";case"exported":case"energy_exported":return"Erzeugung";default:console.warn("unknown measurement key:",e,r)}break;case"hc":switch(r){case"imported":case"energy_imported":return"Verbrauch";case"energy_imported_grid":return"Verbrauch (Netz-Anteil)";case"energy_imported_pv":return"Verbrauch (PV-Anteil)";case"energy_imported_bat":return"Verbrauch (Speicher-Anteil)";case"energy_imported_cp":return"Verbrauch (Ladepunkt-Anteil)";default:console.warn("unknown measurement key:",e,r)}break;default:console.warn("unknown group key:",e)}return"*"+e+"+"+t+"+"+r+"*"}return n},getDatasetLabel(e,t,r,n){var o=["*"+n],a=[];if(t=="all")switch(e!=="hc"&&a.push("Summe"),e){case"pv":o=["PV"];break;case"bat":o=["Speicher"],r==="soc"&&o.push("SoC");break;case"cp":o=["Ladepunkte"];break;case"consumer":o=["Verbraucher"];break;case"hc":o=["Hausverbrauch"];break}else Object.prototype.hasOwnProperty.call(this.$store.state.mqtt[this.baseTopic+this.commandData.date],"names")&&Object.prototype.hasOwnProperty.call(this.$store.state.mqtt[this.baseTopic+this.commandData.date].names,t)&&(o=[this.$store.state.mqtt[this.baseTopic+this.commandData.date].names[t]]);switch(e){case"bat":case"ev":case"cp":switch(r){case"soc":a.push("SoC");break;case"energy_imported":a.push("Ladung");break;case"energy_exported":a.push("Entladung");break;case"energy_imported_grid":a.push("Netz-Anteil");break;case"energy_imported_pv":a.push("PV-Anteil");break;case"energy_imported_bat":a.push("Speicher-Anteil");break;case"energy_imported_cp":a.push("Ladepunkt-Anteil");break}break;case"counter":switch(r){case"energy_imported":a.push("Bezug/Verbrauch");break;case"energy_exported":a.push("Einspeisung/Erzeugung");break;case"energy_imported_grid":a.push("Netz-Anteil");break;case"energy_imported_pv":a.push("PV-Anteil");break;case"energy_imported_bat":a.push("Speicher-Anteil");break;case"energy_imported_cp":a.push("Ladepunkt-Anteil");break}break;case"consumer":switch(r){case"energy_imported":a.push("Verbrauch");break;case"energy_exported":a.push("Erzeugung");break;case"energy_imported_grid":a.push("Netz-Anteil");break;case"energy_imported_pv":a.push("PV-Anteil");break;case"energy_imported_bat":a.push("Speicher-Anteil");break;case"energy_imported_cp":a.push("Ladepunkt-Anteil");break}break;case"sh":switch(r){case"energy_imported":a.push("Verbrauch");break;case"energy_exported":a.push("Erzeugung");break}break;case"hc":switch(r){case"energy_imported_grid":a.push("Netz-Anteil");break;case"energy_imported_pv":a.push("PV-Anteil");break;case"energy_imported_bat":a.push("Speicher-Anteil");break;case"energy_imported_cp":a.push("Ladepunkt-Anteil");break}break}return`${o.join(" ")}${a.length?" ("+a.join(", ")+")":""}`},getDatasetColor(e,t,r,n){let o;return Object.prototype.hasOwnProperty.call(this.$store.state.mqtt[this.baseTopic+this.commandData.date],"colors")&&Object.prototype.hasOwnProperty.call(this.$store.state.mqtt[this.baseTopic+this.commandData.date].colors,t)&&(o=this.$store.state.mqtt[this.baseTopic+this.commandData.date].colors[t]),console.debug("getDatasetColor:",e,t,r,n,o),o?{borderColor:`${o}b2`,backgroundColor:`${o}${r=="soc"?"00":"4c"}`}:void 0},getComponentColor(e,t){let r;return console.info("getComponentColor:",e,t),Object.prototype.hasOwnProperty.call(this.$store.state.mqtt[this.baseTopic+this.commandData.date],"colors")&&Object.prototype.hasOwnProperty.call(this.$store.state.mqtt[this.baseTopic+this.commandData.date].colors,t)&&(r=this.$store.state.mqtt[this.baseTopic+this.commandData.date].colors[t]),console.info("getComponentColor:",e,t,r),r||"#000000"},getDatasetIndex(e){let t=this.chartDatasets.datasets.findIndex(r=>r.jsonKey==e);if(t!=-1)return t},updateDatasetStack(e,t,r){if(e){if(t=="all"&&!["grid","pv","bat","cp"].includes(r.split("_").slice(-1)[0])){console.debug("not stacking totals for:",e,t,r);return}return e.includes("#")?(console.debug("updating stack template:",e,t,r),e.replace("#",t)):e}},addDataset(e,t,r,n){if(console.debug("adding dataset:",e,t,r,n),!(Object.prototype.hasOwnProperty.call(this.chartTotals,e)&&!Object.prototype.hasOwnProperty.call(this.chartTotals[e],t))){var o=e+"-"+r;if(S[o]){var a=structuredClone(R(S[o]));a.parsing.yAxisKey=n,a.jsonKey=n,a.data=this.chartDataObject,a.category=S[o].category,a.label=this.getDatasetLabel(e,t,r,n),a.labelSuffix!=null&&(a.label=a.label+a.labelSuffix),a.hidden=this.hideDataset(e,t,r),a.stack=this.updateDatasetStack(a.stack,t,r);const i=this.getDatasetColor(e,t,r,n);return console.log("dataset color",i),i&&(a.borderColor=i.borderColor,a.backgroundColor=i.backgroundColor),this.chartDatasets.datasets.push(a)-1}else console.warn("no matching template found for: "+n+" with template: "+o)}},initDataset(e,t,r){if(!this.objectAccessible(e,t)){console.debug("skipping dataset due to missing rights:",e,t,r);return}let n;this.chartRange=="day"?n={counter:["power_average"],pv:["power_exported"],bat:["power_average","soc"],cp:["power_average"],consumer:["power_average"],sh:["power_average"],ev:["soc"],hc:["power_imported"]}:n={counter:["energy_imported","energy_exported","energy_imported_grid","energy_imported_pv","energy_imported_bat"],pv:["energy_exported"],bat:["energy_imported","energy_exported"],cp:["energy_imported","energy_imported_grid","energy_imported_pv","energy_imported_bat"],consumer:["energy_imported","energy_exported","energy_imported_grid","energy_imported_pv","energy_imported_bat"],sh:["energy_imported","energy_exported"],ev:[],hc:["energy_imported","energy_imported_grid","energy_imported_pv","energy_imported_bat"]};const o=e+"."+t+"."+r;if(n[e].includes(r)){var a=this.getDatasetIndex(o);a==null&&this.addDataset(e,t,r,o)}else console.debug("skipping dataset:",o)},setupScaleX(){this.chartOptions.scales.x.time.unit=this.chartScaleX.unit,this.chartOptions.scales.x.time.tooltipFormat=this.chartScaleX.tooltipFormat,this.chartOptions.scales.x.title.text=this.chartScaleX.text,this.chartOptions.scales.x.ticks.maxTicksLimit=this.chartScaleX.maxTicksLimit},requestChart(){if(!this.logDataReady)return;if(document.forms.chartFilterForm?.reportValidity()){this.chartIsLoading=!0,this.setupScaleX(),this.chartDatasets.datasets=[];var t="";switch(this.chartRange){case"day":t="getDailyLog";break;case"month":t="getMonthlyLog";break;case"year":t="getYearlyLog";break}this.$emit("sendCommand",{command:t,data:this.commandData})}else{console.warn("form invalid");return}},clearChartData(){this.getWildcardIndexList(this.baseTopic+"+").forEach(e=>{this.$store.commit("removeTopic",`${this.baseTopic}${e}`)})},updateChart(){this.clearChartData(),this.requestChart()},init(){const e=new Date;this.currentDate=String(e.getFullYear()),this.chartRange!="year"&&(this.currentDate=this.currentDate+"-"+String(e.getMonth()+1).padStart(2,"0")),this.chartRange=="day"&&(this.currentDate=this.currentDate+"-"+String(e.getDate()).padStart(2,"0")),this.blockChartInit?this.blockChartInit=!1:this.initialDate==null||this.initialDate==""?this.chartDate=this.currentDate:this.chartDate=this.initialDate,this.updateChart()}}},Ve={class:"chart"},He={key:0},Be={key:1},ze={key:2},je={name:"chartFilterForm"},Me={key:1},Oe={key:1},qe={class:"openwb-chart"},Ee={name:"chartTotalsForm"},Pe={class:"header-left-wrapper"},Ne={key:1};function Fe(e,t,r,n,o,a){const i=u("openwb-base-alert"),d=u("openwb-base-select-input"),v=u("openwb-base-text-input"),f=u("openwb-base-card"),L=u("chartjs-line"),$=u("ChartLegend"),W=u("font-awesome-icon"),T=u("openwb-base-heading");return s(),l("div",Ve,[e.$store.state.mqtt["openWB/general/extern"]===!0?(s(),l("div",He,[p(i,{subtype:"info"},{default:h(()=>[...t[3]||(t[3]=[_(' Die Auswertungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. Du findest alle Auswertungen in der openWB, welche sich im Steuerungsmodus "primary" befindet. ',-1)])]),_:1})])):a.logDataReady?(s(),l("div",ze,[p(f,{title:"Filter",collapsible:!0,collapsed:!1},{default:h(()=>[g("form",je,[p(d,{modelValue:o.chartRange,"onUpdate:modelValue":t[0]||(t[0]=b=>o.chartRange=b),title:"Zeitraum",options:[{value:"day",text:"Tag"},{value:"month",text:"Monat"},{value:"year",text:"Jahr"}]},null,8,["modelValue"]),p(v,{modelValue:a.chartDate,"onUpdate:modelValue":[t[1]||(t[1]=b=>a.chartDate=b),t[2]||(t[2]=b=>a.updateChart())],title:a.dateInput.title,subtype:a.dateInput.type,min:a.dateInput.min,max:o.currentDate,"show-quick-buttons":!0},null,8,["modelValue","title","subtype","min","max"])])]),_:1}),o.chartIsLoading?(s(),m(i,{key:0,subtype:"info"},{default:h(()=>[...t[5]||(t[5]=[_(" Daten werden geladen... ",-1)])]),_:1})):(s(),l("div",Me,[a.chartDataHasEntries?(s(),l("div",Oe,[p(f,{title:"Diagramm",collapsible:!0,collapsed:!1},{default:h(()=>[g("div",qe,[p(L,{ref:"myChart",data:a.chartData,options:o.chartOptions,plugins:o.chartInstancePlugins,onClick:a.handleChartClick},null,8,["data","options","plugins","onClick"])]),o.chartInstance?(s(),m($,{key:o.chartDatasets.datasets.length,ref:"chartLegend",range:o.chartRange,chart:o.chartInstance},null,8,["range","chart"])):A("",!0)]),_:1}),p(f,{title:"Summen",collapsible:!0,collapsed:!0},{default:h(()=>[g("form",Ee,[(s(!0),l(k,null,x(Object.fromEntries(Object.entries(a.chartTotals).filter(([b,c])=>Object.keys(c).length>0)),(b,c)=>(s(),m(f,{key:c,collapsible:!0,collapsed:!0,subtype:a.getCardSubtype(c)},{header:h(()=>[p(W,{icon:a.getCardIcon(c)},null,8,["icon"]),_(" "+C(a.getTotalsLabel(c)),1)]),default:h(()=>[(s(!0),l(k,null,x(b,(V,y)=>(s(),l("div",{key:y},[c!=="hc"?(s(),m(T,{key:0},{default:h(()=>[g("div",Pe,[y!="all"?(s(),m(W,{key:0,icon:a.getCardIcon(c),class:"fa-border",style:ie({backgroundColor:a.getComponentColor(c,y),color:e.getContrastColor(a.getComponentColor(c,y)),fontSize:"60%"})},null,8,["icon","style"])):A("",!0),_(" "+C(a.getTotalsLabel(c,y)),1)])]),_:2},1024)):A("",!0),(s(!0),l(k,null,x(V,(H,I)=>(s(),l("div",{key:I},[p(v,{title:a.getTotalsLabel(c,y,I),readonly:"",class:"text-right",unit:"kWh","model-value":e.formatNumber(H/1e3,3)},null,8,["title","model-value"])]))),128)),y=="all"&&c!="hc"?(s(),l("hr",Ne)):A("",!0)]))),128))]),_:2},1032,["subtype"]))),128))])]),_:1})])):(s(),m(i,{key:0,subtype:"info"},{default:h(()=>[...t[6]||(t[6]=[_(" Es konnten keine Daten für diesen Zeitraum gefunden werden. ",-1)])]),_:1}))]))])):(s(),l("div",Be,[p(i,{subtype:"info"},{default:h(()=>[...t[4]||(t[4]=[_(" Die Auswertungen sind derzeit noch nicht verfügbar, da die historischen Logdaten verarbeitet werden. Sobald die Verarbeitung abgeschlossen ist, stehen die Diagramme automatisch wieder zur Verfügung. ",-1)])]),_:1})]))])}const et=D(Te,[["render",Fe],["__scopeId","data-v-e00a7cd5"],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/Chart.vue"]]);export{et as default}; diff --git a/web/settings/assets/CloudConfiguration-cyqsfdIl.js b/web/settings/assets/CloudConfiguration-ByKE05Ar.js similarity index 99% rename from web/settings/assets/CloudConfiguration-cyqsfdIl.js rename to web/settings/assets/CloudConfiguration-ByKE05Ar.js index cde3be0d2f..8ed1ae7ff5 100644 --- a/web/settings/assets/CloudConfiguration-cyqsfdIl.js +++ b/web/settings/assets/CloudConfiguration-ByKE05Ar.js @@ -1 +1 @@ -import{F as z,l as q,am as P}from"./vendor-fortawesome-DplTMxoa.js";import{C as h}from"./index-Bv2WLdLZ.js";import{_ as S,m as d,l,f as C,q as s,u as n,B as r,y as i,z as p,x as m,D as I,k as D,K as Z}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";q.add(P);const K={name:"OpenwbCloudConfigView",components:{FontAwesomeIcon:z},mixins:[h],emits:["sendCommand","save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/system/dataprotection_acknowledged",writeable:!1},{topic:"openWB/system/mqtt/bridge/+",writeable:!0},{topic:"openWB/system/mqtt/valid_partner_ids",writeable:!0}],enableNewCloudButton:!0,newCloudData:{email:"",username:"",partner:!1},enableCloudConnectButton:!0,connectCloudData:{username:"",password:"",partner:!1},enableRemoveCloudButton:!0,showCloudRemoveModal:!1}},computed:{cloudBridge:{get(){let t=this.getWildcardTopics("openWB/system/mqtt/bridge/+");for(const[e,c]of Object.entries(t))c.remote.is_openwb_cloud||delete t[e];return t}},cloudBridgeKey:{get(){for(const[t,e]of Object.entries(this.cloudBridge))if(e.remote.is_openwb_cloud)return t}},cloudSettings:{get(){return{username:this.cloudBridge[this.cloudBridgeKey].remote.username,password:this.cloudBridge[this.cloudBridgeKey].remote.password,partner:this.cloudBridge[this.cloudBridgeKey].access?this.cloudBridge[this.cloudBridgeKey].access.partner:!1}}}},methods:{getMqttBridgeIndex(t){return parseInt(t.match(/(?:\/)(\d+)$/)[1])},createCloud(){document.forms.cloudConfigCreateForm.reportValidity()&&(this.$emit("save",this.mqttTopicsToPublish),this.$emit("sendCommand",{command:"initCloud",data:this.newCloudData}),this.enableNewCloudButton=!1)},connectCloud(){document.forms.cloudConfigConnectForm.reportValidity()&&(this.$emit("save",this.mqttTopicsToPublish),this.$emit("sendCommand",{command:"connectCloud",data:this.connectCloudData}),this.enableCloudConnectButton=!1)},removeCloudModal(t){t.stopPropagation(),this.showCloudRemoveModal=!0},removeCloud(t){this.showCloudRemoveModal=!1,t=="confirm"&&(this.updateState("openWB/system/mqtt/valid_partner_ids",[]),this.$emit("sendCommand",{command:"removeMqttBridge",data:{bridge:this.getMqttBridgeIndex(this.cloudBridgeKey)}}),this.enableCloudConnectButton=!0)}}},M={class:"cloud-config"},x={key:1},R={key:1,name:"cloudConfigConnectForm"},T={class:"row justify-content-center"},U={key:2,name:"cloudConfigured"},A={class:"row justify-content-center"};function E(t,e,c,N,u,a){const _=d("openwb-base-modal-dialog"),w=d("router-link"),g=d("openwb-base-alert"),b=d("openwb-base-text-input"),B=d("openwb-base-button-group-input"),f=d("font-awesome-icon"),k=d("openwb-base-array-input"),y=d("openwb-base-click-button"),v=d("openwb-base-card"),V=d("openwb-base-heading"),W=d("openwb-base-submit-buttons");return l(),C(Z,null,[s(_,{show:u.showCloudRemoveModal,title:"Eingabefelder zurücksetzen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:e[0]||(e[0]=o=>a.removeCloud(o))},{default:n(()=>[...e[13]||(e[13]=[r(" Willst Du wirklich die Eingabefelder zurücksetzen? Du kannst Clouddaten danach neu eingeben. Das Zurücksetzen der Eingabefelder macht Deine Clouddaten nicht ungültig. Gültige Clouddaten stehen auf einem Aufkleber in Deinem Gerät. Du kannst selbst keine neuen Daten vergeben. ",-1)])]),_:1},8,["show"]),i("div",M,[t.$store.state.mqtt["openWB/system/dataprotection_acknowledged"]!==!0?(l(),p(g,{key:0,subtype:"danger"},{default:n(()=>[e[15]||(e[15]=r(" Du musst der ",-1)),s(w,{to:"/System/LegalSettings"},{default:n(()=>[...e[14]||(e[14]=[r(" Datenschutzerklärung ",-1)])]),_:1}),e[16]||(e[16]=r(" zustimmen, um die openWB Cloud nutzen zu können. ",-1))]),_:1})):(l(),C("div",x,[s(g,{subtype:"success"},{default:n(()=>[e[18]||(e[18]=r(" Du hast der ",-1)),s(w,{to:"/System/LegalSettings"},{default:n(()=>[...e[17]||(e[17]=[r(" Datenschutzerklärung ",-1)])]),_:1}),e[19]||(e[19]=r(" zugestimmt und kannst die openWB Cloud nutzen. ",-1))]),_:1}),u.enableRemoveCloudButton?m("",!0):(l(),p(g,{key:0,subtype:"warning"},{default:n(()=>[...e[20]||(e[20]=[r(" Der Zugang wurde entfernt. Bitte starte die openWB neu, um die Änderungen anzuwenden! ",-1)])]),_:1})),a.cloudBridgeKey?m("",!0):(l(),C("form",R,[s(v,{title:"Vorhandenen Zugang einrichten"},I({default:n(()=>[s(g,{subtype:"info"},{default:n(()=>[...e[21]||(e[21]=[i("p",null,[r(" Bitte nutze die in/an der openWB notierten Zugangsdaten. Wenn bei einer gekauften openWB keine Zugangsdaten vorhanden sind, schreibe bitte eine Mail unter Angabe der Bestell- und/oder Seriennummer an "),i("a",{href:"mailto:support@openwb.de",subject:"Cloud Zugangsdaten"}," support@openwb.de "),r(" . ")],-1),i("p",null,[r(" Eine Anleitung zur Einrichtung der openWB Cloud findest Du im "),i("a",{href:"https://wiki.openwb.de/doku.php?id=openwb:tutorials:cloudeinrichten",target:"_blank",rel:"noopener noreferrer"}," Wiki "),r(". ")],-1)])]),_:1}),s(b,{modelValue:u.connectCloudData.username,"onUpdate:modelValue":e[1]||(e[1]=o=>u.connectCloudData.username=o),title:"Benutzername",required:"",subtype:"user"},null,8,["modelValue"]),s(b,{modelValue:u.connectCloudData.password,"onUpdate:modelValue":e[2]||(e[2]=o=>u.connectCloudData.password=o),title:"Passwort",required:"",subtype:"password"},null,8,["modelValue"]),s(B,{modelValue:u.connectCloudData.partner,"onUpdate:modelValue":e[3]||(e[3]=o=>u.connectCloudData.partner=o),title:"Zugang für Partner",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}]},{help:n(()=>[...e[22]||(e[22]=[r(" Wenn diese openWB über einen Partner erworben wurde, kann hier ein Support-Zugang für diesen freigegeben werden. ",-1)])]),_:1},8,["modelValue"]),u.connectCloudData.partner?(l(),p(k,{key:0,title:"Gültige Partner-IDs","no-elements-message":"Keine Partner-ID zugeordnet.","model-value":t.$store.state.mqtt["openWB/system/mqtt/valid_partner_ids"],"onUpdate:modelValue":e[4]||(e[4]=o=>t.updateState("openWB/system/mqtt/valid_partner_ids",o))},{"input-prefix":n(()=>[s(f,{icon:["fas","user-gear"]})]),"element-prefix":n(()=>[s(f,{icon:["fas","user-gear"]})]),help:n(()=>[...e[23]||(e[23]=[r(" Die Partner-ID erhältst Du von Deinem Installateur. Ist hier keine Partner-ID eingetragen, dann kann auch niemand - trotz aktiviertem Zugang für Partner - über das Partner-Portal auf diese openWB zugreifen! ",-1)])]),_:1},8,["model-value"])):m("",!0)]),_:2},[t.$store.state.mqtt["openWB/system/dataprotection_acknowledged"]===!0?{name:"footer",fn:n(()=>[i("div",T,[s(y,{class:D(["col-4",u.enableCloudConnectButton?"btn-success":"btn-outline-success"]),disabled:!u.enableCloudConnectButton,onButtonClicked:a.connectCloud},{default:n(()=>[...e[24]||(e[24]=[r(" Mit Cloud verbinden ",-1)])]),_:1},8,["class","disabled","onButtonClicked"])])]),key:"0"}:void 0]),1024)])),a.cloudBridgeKey?(l(),C("form",U,[!u.enableCloudConnectButton||!u.enableNewCloudButton?(l(),p(g,{key:0,subtype:"warning"},{default:n(()=>[...e[25]||(e[25]=[r(" Der Zugang wurde eingerichtet. Bitte starte die die openWB neu, um die Änderungen anzuwenden! ",-1)])]),_:1})):m("",!0),s(v,{title:"Vorhandener Cloud Zugang"},{footer:n(()=>[i("div",A,[s(y,{class:D(["col-4",u.enableRemoveCloudButton?"btn-danger":"btn-outline-danger"]),disabled:!u.enableRemoveCloudButton,onButtonClicked:e[9]||(e[9]=o=>a.removeCloudModal(o))},{default:n(()=>[...e[29]||(e[29]=[r(" Eingabefelder zurücksetzen ",-1)])]),_:1},8,["class","disabled"])])]),default:n(()=>[s(V,null,{default:n(()=>[...e[26]||(e[26]=[i("span",null,[r(" Mit diesen Zugangsdaten kannst Du dich in der "),i("a",{href:"https://remote.openwb.de/",target:"_blank",rel:"noopener noreferrer"}," openWB Cloud "),r(" anmelden. ")],-1)])]),_:1}),s(b,{modelValue:a.cloudSettings.username,"onUpdate:modelValue":e[5]||(e[5]=o=>a.cloudSettings.username=o),title:"Benutzername",required:"",subtype:"user",disabled:""},null,8,["modelValue"]),s(b,{modelValue:a.cloudSettings.password,"onUpdate:modelValue":e[6]||(e[6]=o=>a.cloudSettings.password=o),title:"Passwort",required:"",subtype:"password",disabled:""},null,8,["modelValue"]),e[30]||(e[30]=i("hr",null,null,-1)),s(B,{title:"Zugang für Partner",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"model-value":a.cloudSettings.partner,"onUpdate:modelValue":e[7]||(e[7]=o=>t.updateState(a.cloudBridgeKey,o,"access.partner"))},{help:n(()=>[...e[27]||(e[27]=[r(" Wenn diese openWB über einen Partner erworben wurde, kann hier ein Support-Zugang für diesen freigegeben werden. ",-1)])]),_:1},8,["model-value"]),a.cloudSettings.partner?(l(),p(k,{key:0,title:"Gültige Partner-IDs","no-elements-message":"Keine Partner-ID zugeordnet.","model-value":t.$store.state.mqtt["openWB/system/mqtt/valid_partner_ids"],"onUpdate:modelValue":e[8]||(e[8]=o=>t.updateState("openWB/system/mqtt/valid_partner_ids",o))},{"input-prefix":n(()=>[s(f,{icon:["fas","user-gear"]})]),"element-prefix":n(()=>[s(f,{icon:["fas","user-gear"]})]),help:n(()=>[...e[28]||(e[28]=[r(" Die Partner-ID erhältst Du von Deinem Installateur. Ist hier keine Partner-ID eingetragen, dann kann auch niemand - trotz aktiviertem Zugang für Partner - über das Partner-Portal auf diese openWB zugreifen! ",-1)])]),_:1},8,["model-value"])):m("",!0)]),_:1})])):m("",!0),a.cloudBridgeKey?(l(),p(W,{key:3,"form-name":"cloudConfigured",onSave:e[10]||(e[10]=o=>t.$emit("save",t.mqttTopicsToPublish)),onReset:e[11]||(e[11]=o=>t.$emit("reset")),onDefaults:e[12]||(e[12]=o=>t.$emit("defaults"))})):m("",!0)]))])],64)}const J=S(K,[["render",E],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/CloudConfiguration.vue"]]);export{J as default}; +import{F as z,l as q,am as P}from"./vendor-fortawesome-DplTMxoa.js";import{C as h}from"./index-CE-5DBwq.js";import{_ as S,m as d,l,f as C,q as s,u as n,B as r,y as i,z as p,x as m,D as I,k as D,K as Z}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";q.add(P);const K={name:"OpenwbCloudConfigView",components:{FontAwesomeIcon:z},mixins:[h],emits:["sendCommand","save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/system/dataprotection_acknowledged",writeable:!1},{topic:"openWB/system/mqtt/bridge/+",writeable:!0},{topic:"openWB/system/mqtt/valid_partner_ids",writeable:!0}],enableNewCloudButton:!0,newCloudData:{email:"",username:"",partner:!1},enableCloudConnectButton:!0,connectCloudData:{username:"",password:"",partner:!1},enableRemoveCloudButton:!0,showCloudRemoveModal:!1}},computed:{cloudBridge:{get(){let t=this.getWildcardTopics("openWB/system/mqtt/bridge/+");for(const[e,c]of Object.entries(t))c.remote.is_openwb_cloud||delete t[e];return t}},cloudBridgeKey:{get(){for(const[t,e]of Object.entries(this.cloudBridge))if(e.remote.is_openwb_cloud)return t}},cloudSettings:{get(){return{username:this.cloudBridge[this.cloudBridgeKey].remote.username,password:this.cloudBridge[this.cloudBridgeKey].remote.password,partner:this.cloudBridge[this.cloudBridgeKey].access?this.cloudBridge[this.cloudBridgeKey].access.partner:!1}}}},methods:{getMqttBridgeIndex(t){return parseInt(t.match(/(?:\/)(\d+)$/)[1])},createCloud(){document.forms.cloudConfigCreateForm.reportValidity()&&(this.$emit("save",this.mqttTopicsToPublish),this.$emit("sendCommand",{command:"initCloud",data:this.newCloudData}),this.enableNewCloudButton=!1)},connectCloud(){document.forms.cloudConfigConnectForm.reportValidity()&&(this.$emit("save",this.mqttTopicsToPublish),this.$emit("sendCommand",{command:"connectCloud",data:this.connectCloudData}),this.enableCloudConnectButton=!1)},removeCloudModal(t){t.stopPropagation(),this.showCloudRemoveModal=!0},removeCloud(t){this.showCloudRemoveModal=!1,t=="confirm"&&(this.updateState("openWB/system/mqtt/valid_partner_ids",[]),this.$emit("sendCommand",{command:"removeMqttBridge",data:{bridge:this.getMqttBridgeIndex(this.cloudBridgeKey)}}),this.enableCloudConnectButton=!0)}}},M={class:"cloud-config"},x={key:1},R={key:1,name:"cloudConfigConnectForm"},T={class:"row justify-content-center"},U={key:2,name:"cloudConfigured"},A={class:"row justify-content-center"};function E(t,e,c,N,u,a){const _=d("openwb-base-modal-dialog"),w=d("router-link"),g=d("openwb-base-alert"),b=d("openwb-base-text-input"),B=d("openwb-base-button-group-input"),f=d("font-awesome-icon"),k=d("openwb-base-array-input"),y=d("openwb-base-click-button"),v=d("openwb-base-card"),V=d("openwb-base-heading"),W=d("openwb-base-submit-buttons");return l(),C(Z,null,[s(_,{show:u.showCloudRemoveModal,title:"Eingabefelder zurücksetzen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:e[0]||(e[0]=o=>a.removeCloud(o))},{default:n(()=>[...e[13]||(e[13]=[r(" Willst Du wirklich die Eingabefelder zurücksetzen? Du kannst Clouddaten danach neu eingeben. Das Zurücksetzen der Eingabefelder macht Deine Clouddaten nicht ungültig. Gültige Clouddaten stehen auf einem Aufkleber in Deinem Gerät. Du kannst selbst keine neuen Daten vergeben. ",-1)])]),_:1},8,["show"]),i("div",M,[t.$store.state.mqtt["openWB/system/dataprotection_acknowledged"]!==!0?(l(),p(g,{key:0,subtype:"danger"},{default:n(()=>[e[15]||(e[15]=r(" Du musst der ",-1)),s(w,{to:"/System/LegalSettings"},{default:n(()=>[...e[14]||(e[14]=[r(" Datenschutzerklärung ",-1)])]),_:1}),e[16]||(e[16]=r(" zustimmen, um die openWB Cloud nutzen zu können. ",-1))]),_:1})):(l(),C("div",x,[s(g,{subtype:"success"},{default:n(()=>[e[18]||(e[18]=r(" Du hast der ",-1)),s(w,{to:"/System/LegalSettings"},{default:n(()=>[...e[17]||(e[17]=[r(" Datenschutzerklärung ",-1)])]),_:1}),e[19]||(e[19]=r(" zugestimmt und kannst die openWB Cloud nutzen. ",-1))]),_:1}),u.enableRemoveCloudButton?m("",!0):(l(),p(g,{key:0,subtype:"warning"},{default:n(()=>[...e[20]||(e[20]=[r(" Der Zugang wurde entfernt. Bitte starte die openWB neu, um die Änderungen anzuwenden! ",-1)])]),_:1})),a.cloudBridgeKey?m("",!0):(l(),C("form",R,[s(v,{title:"Vorhandenen Zugang einrichten"},I({default:n(()=>[s(g,{subtype:"info"},{default:n(()=>[...e[21]||(e[21]=[i("p",null,[r(" Bitte nutze die in/an der openWB notierten Zugangsdaten. Wenn bei einer gekauften openWB keine Zugangsdaten vorhanden sind, schreibe bitte eine Mail unter Angabe der Bestell- und/oder Seriennummer an "),i("a",{href:"mailto:support@openwb.de",subject:"Cloud Zugangsdaten"}," support@openwb.de "),r(" . ")],-1),i("p",null,[r(" Eine Anleitung zur Einrichtung der openWB Cloud findest Du im "),i("a",{href:"https://wiki.openwb.de/doku.php?id=openwb:tutorials:cloudeinrichten",target:"_blank",rel:"noopener noreferrer"}," Wiki "),r(". ")],-1)])]),_:1}),s(b,{modelValue:u.connectCloudData.username,"onUpdate:modelValue":e[1]||(e[1]=o=>u.connectCloudData.username=o),title:"Benutzername",required:"",subtype:"user"},null,8,["modelValue"]),s(b,{modelValue:u.connectCloudData.password,"onUpdate:modelValue":e[2]||(e[2]=o=>u.connectCloudData.password=o),title:"Passwort",required:"",subtype:"password"},null,8,["modelValue"]),s(B,{modelValue:u.connectCloudData.partner,"onUpdate:modelValue":e[3]||(e[3]=o=>u.connectCloudData.partner=o),title:"Zugang für Partner",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}]},{help:n(()=>[...e[22]||(e[22]=[r(" Wenn diese openWB über einen Partner erworben wurde, kann hier ein Support-Zugang für diesen freigegeben werden. ",-1)])]),_:1},8,["modelValue"]),u.connectCloudData.partner?(l(),p(k,{key:0,title:"Gültige Partner-IDs","no-elements-message":"Keine Partner-ID zugeordnet.","model-value":t.$store.state.mqtt["openWB/system/mqtt/valid_partner_ids"],"onUpdate:modelValue":e[4]||(e[4]=o=>t.updateState("openWB/system/mqtt/valid_partner_ids",o))},{"input-prefix":n(()=>[s(f,{icon:["fas","user-gear"]})]),"element-prefix":n(()=>[s(f,{icon:["fas","user-gear"]})]),help:n(()=>[...e[23]||(e[23]=[r(" Die Partner-ID erhältst Du von Deinem Installateur. Ist hier keine Partner-ID eingetragen, dann kann auch niemand - trotz aktiviertem Zugang für Partner - über das Partner-Portal auf diese openWB zugreifen! ",-1)])]),_:1},8,["model-value"])):m("",!0)]),_:2},[t.$store.state.mqtt["openWB/system/dataprotection_acknowledged"]===!0?{name:"footer",fn:n(()=>[i("div",T,[s(y,{class:D(["col-4",u.enableCloudConnectButton?"btn-success":"btn-outline-success"]),disabled:!u.enableCloudConnectButton,onButtonClicked:a.connectCloud},{default:n(()=>[...e[24]||(e[24]=[r(" Mit Cloud verbinden ",-1)])]),_:1},8,["class","disabled","onButtonClicked"])])]),key:"0"}:void 0]),1024)])),a.cloudBridgeKey?(l(),C("form",U,[!u.enableCloudConnectButton||!u.enableNewCloudButton?(l(),p(g,{key:0,subtype:"warning"},{default:n(()=>[...e[25]||(e[25]=[r(" Der Zugang wurde eingerichtet. Bitte starte die die openWB neu, um die Änderungen anzuwenden! ",-1)])]),_:1})):m("",!0),s(v,{title:"Vorhandener Cloud Zugang"},{footer:n(()=>[i("div",A,[s(y,{class:D(["col-4",u.enableRemoveCloudButton?"btn-danger":"btn-outline-danger"]),disabled:!u.enableRemoveCloudButton,onButtonClicked:e[9]||(e[9]=o=>a.removeCloudModal(o))},{default:n(()=>[...e[29]||(e[29]=[r(" Eingabefelder zurücksetzen ",-1)])]),_:1},8,["class","disabled"])])]),default:n(()=>[s(V,null,{default:n(()=>[...e[26]||(e[26]=[i("span",null,[r(" Mit diesen Zugangsdaten kannst Du dich in der "),i("a",{href:"https://remote.openwb.de/",target:"_blank",rel:"noopener noreferrer"}," openWB Cloud "),r(" anmelden. ")],-1)])]),_:1}),s(b,{modelValue:a.cloudSettings.username,"onUpdate:modelValue":e[5]||(e[5]=o=>a.cloudSettings.username=o),title:"Benutzername",required:"",subtype:"user",disabled:""},null,8,["modelValue"]),s(b,{modelValue:a.cloudSettings.password,"onUpdate:modelValue":e[6]||(e[6]=o=>a.cloudSettings.password=o),title:"Passwort",required:"",subtype:"password",disabled:""},null,8,["modelValue"]),e[30]||(e[30]=i("hr",null,null,-1)),s(B,{title:"Zugang für Partner",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"model-value":a.cloudSettings.partner,"onUpdate:modelValue":e[7]||(e[7]=o=>t.updateState(a.cloudBridgeKey,o,"access.partner"))},{help:n(()=>[...e[27]||(e[27]=[r(" Wenn diese openWB über einen Partner erworben wurde, kann hier ein Support-Zugang für diesen freigegeben werden. ",-1)])]),_:1},8,["model-value"]),a.cloudSettings.partner?(l(),p(k,{key:0,title:"Gültige Partner-IDs","no-elements-message":"Keine Partner-ID zugeordnet.","model-value":t.$store.state.mqtt["openWB/system/mqtt/valid_partner_ids"],"onUpdate:modelValue":e[8]||(e[8]=o=>t.updateState("openWB/system/mqtt/valid_partner_ids",o))},{"input-prefix":n(()=>[s(f,{icon:["fas","user-gear"]})]),"element-prefix":n(()=>[s(f,{icon:["fas","user-gear"]})]),help:n(()=>[...e[28]||(e[28]=[r(" Die Partner-ID erhältst Du von Deinem Installateur. Ist hier keine Partner-ID eingetragen, dann kann auch niemand - trotz aktiviertem Zugang für Partner - über das Partner-Portal auf diese openWB zugreifen! ",-1)])]),_:1},8,["model-value"])):m("",!0)]),_:1})])):m("",!0),a.cloudBridgeKey?(l(),p(W,{key:3,"form-name":"cloudConfigured",onSave:e[10]||(e[10]=o=>t.$emit("save",t.mqttTopicsToPublish)),onReset:e[11]||(e[11]=o=>t.$emit("reset")),onDefaults:e[12]||(e[12]=o=>t.$emit("defaults"))})):m("",!0)]))])],64)}const J=S(K,[["render",E],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/CloudConfiguration.vue"]]);export{J as default}; diff --git a/web/settings/assets/ConsumerConfig-CDodeLc0.js b/web/settings/assets/ConsumerConfig-CDodeLc0.js new file mode 100644 index 0000000000..9c36ada99d --- /dev/null +++ b/web/settings/assets/ConsumerConfig-CDodeLc0.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/device-DHB2lzzG.js","assets/DeviceConfigMixin-D2g2-xc_.js","assets/vendor-BwGffBs-.js","assets/vendor-Cq9CCOuG.css","assets/device-Bmiwd3r6.js","assets/device-Chn2mfBF.js","assets/device-Du5x1ttW.js","assets/device-DCCgNY-n.js","assets/device-C-VdYO_S.js","assets/device-CUsU7GEo.js","assets/device-qM6Ow-QZ.js","assets/device-D0NVBx3_.js","assets/device-CyemJxTG.js","assets/device-CWvuKt9H.js","assets/device-Hl-FIG_-.js","assets/device-CwrJywgw.js","assets/device-BfuV33Ny.js","assets/device-CME_IE2O.js","assets/device-B2ATC70N.js","assets/device-Drtgd5P3.js","assets/device-CnnZ5HDz.js","assets/device-D93KyX8z.js","assets/device-C7upWp-n.js","assets/device-BeTvjVsI.js","assets/device-LwKhWIDy.js","assets/device-CX9F2w1R.js","assets/device-DFeFqcPa.js","assets/device-CpVp0tJY.js","assets/device-h744ldQG.js","assets/device-DxS-IR5M.js","assets/device-BjmcAYaW.js","assets/device-D7XDJsSX.js","assets/device-B7mQquwz.js","assets/device-D-HB7yYz.js","assets/device-BjH2i3dR.js","assets/device-By62nPmK.js","assets/device-BMh4AbeD.js","assets/device-D7FS6Gp8.js","assets/device-DVfJuzkE.js","assets/device-CzW27uID.js","assets/device-CaZSyW6k.js","assets/device-BKrVP95F.js","assets/device-BnxKSgH8.js","assets/device-DLmN6zPE.js","assets/device-Di9i_dA8.js","assets/device-C0xDk0ts.js","assets/device-BSXhrs1Z.js","assets/device-Bx-PcB2n.js","assets/device-CdePIfdb.js","assets/device-BnxT8JJ2.js","assets/device-DA58b9nm.js","assets/device-Bh86b_Z3.js","assets/device-DdtU9l__.js","assets/device-DQB3GNdG.js","assets/device-De_utEj4.js","assets/device-DBtCkhyu.js","assets/device-DVMfFy_D.js","assets/device-9hZ9C-_o.js","assets/device-BtMlWIlE.js","assets/device-N4SVn9jC.js","assets/device-GN_GKnJc.js","assets/device-BtAcz1pD.js","assets/device-D8Ube9qm.js","assets/device-BW_zyWYf.js","assets/device-Ct0EL_5c.js","assets/device-BObe7-fT.js","assets/device-Cae8kKJA.js","assets/device-Bm5lJk-e.js","assets/device-YYGO4kNw.js","assets/device-Dnz-lfZw.js","assets/device-o4cJfonB.js","assets/device-CBzzuPPX.js","assets/device-Du21jRtu.js","assets/device-DmTp-4Q0.js","assets/device-D97fwZ97.js","assets/device-D_Qh4d0E.js","assets/device-B2BXKGVF.js","assets/device-CFv91Hst.js","assets/device--8PbFL3K.js","assets/device-BP1KJA6p.js","assets/device-DjnKnvxd.js","assets/device-BQKDm_yK.js","assets/device-DMnSEPnd.js","assets/device-CePtNibg.js","assets/device-1rlXvG7o.js","assets/device-ap_aIxcd.js","assets/device-CZWl8ObD.js","assets/device-CB23bxqx.js","assets/device-DDCqw8SU.js","assets/device-Wiugpl0X.js","assets/device-oF88OjWr.js","assets/device-RdsB0ti4.js","assets/device-S7xoJYQU.js","assets/device-D0qPaH_i.js","assets/device-DyNIhzeY.js","assets/device-0R3TseqV.js","assets/device-DKtpZs7X.js","assets/device-hKSMI4zZ.js","assets/device-CHU8Jgeh.js","assets/consumer-x1OJSxBK.js","assets/vendor-fortawesome-DplTMxoa.js","assets/index-CE-5DBwq.js","assets/vendor-bootstrap-DxivtUnb.js","assets/vendor-jquery-CEMonh9Y.js","assets/vendor-bootstrap-BJ8HpIhY.css","assets/vendor-axios-C0vEeTtS.js","assets/index-xf6JJloS.css","assets/dynamic-import-helper-BheWnx7M.js","assets/consumer-BhiN-Pbu.js","assets/consumer-DGx9umH6.js","assets/consumer-B_TG_jwd.js","assets/consumer-Bmfknm9t.js","assets/consumer-DoDJKaK5.js","assets/consumer-DP1oPG1b.js","assets/consumer-CVjfcpZy.js","assets/consumer-Cxc3OQkk.js","assets/consumer-m8ZTdtIv.js","assets/consumer-CruA9slz.js","assets/consumer-CZYz4YZg.js","assets/consumer-Cd_74VSS.js","assets/consumer-C7mzR7uP.js","assets/consumer-DFZAM7gI.js","assets/consumer-DmXv955p.js","assets/consumer-DYwIyUhr.js","assets/consumer-CPPPGiNU.js","assets/consumer-B1ueKIDM.js","assets/consumer-DP77PVzL.js","assets/consumer-C30nO6sE.js","assets/consumer-DIrQ3KTM.js","assets/consumer-CgpjQOKz.js","assets/consumer-Bkx6h3Vw.js","assets/consumer-Bby-DojC.js","assets/consumer-wNhSDED-.js","assets/consumer-CH0MotHm.js","assets/consumer-Di_jjil1.js","assets/consumer-Ak9gNogG.js","assets/consumer-d3D8ujRs.js","assets/consumer-BYkNOEGj.js","assets/consumer-q_3jRzYP.js"])))=>i.map(i=>d[i]); +import{F as M,l as C,a4 as $,G as N,H as j,ai as F,aj as H,ak as J,al as Z,Y as ee,d as te}from"./vendor-fortawesome-DplTMxoa.js";import{_ as n,C as q}from"./index-CE-5DBwq.js";import{_ as G}from"./dynamic-import-helper-BheWnx7M.js";import{_ as I,m as b,l as u,f as _,z as v,u as s,B as a,J as A,q as i,y as p,a7 as ne,P as re,x as g,K as k,L as B,A as O,k as Q,O as oe}from"./vendor-BwGffBs-.js";const ie={props:{consumer:{type:Object,required:!0}},emits:["update:configuration"],methods:{updateConfiguration(r,e=void 0){this.$emit("update:configuration",{value:r,object:e})}}},se=I(ie,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/ConsumerConfigMixin.vue"]]),ue={name:"OpenwbConsumerConfigFallback",mixins:[se]},ae={class:"consumer-config-fallback"},le={key:1};function de(r,e,l,m,h,t){const w=b("openwb-base-alert"),E=b("openwb-base-textarea");return u(),_("div",ae,[Object.keys(r.consumer.configuration).length==0?(u(),v(w,{key:0,subtype:"info"},{default:s(()=>[a(' Der Verbraucher-Typ "'+A(r.consumer.type)+'" bietet keine Einstellungen. ',1)]),_:1})):(u(),_("div",le,[i(w,{subtype:"warning"},{default:s(()=>[a(' Es wurde keine Konfigurationsseite für den Verbraucher-Typ "'+A(r.consumer.type)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),i(E,{title:"Konfiguration",subtype:"json","model-value":r.consumer.configuration,"onUpdate:modelValue":e[0]||(e[0]=f=>r.updateConfiguration(f,"configuration"))},{help:s(()=>[...e[1]||(e[1]=[a(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),i(w,{subtype:"info"},{default:s(()=>[p("pre",null,A(JSON.stringify(r.consumer.configuration,void 0,2)),1)]),_:1})]))])}const me=I(ue,[["render",de],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/OpenwbConsumerConfigFallback.vue"]]),ce={name:"OpenwbConsumerConfigProxy",props:{consumer:{type:Object,required:!0}},emits:["update:configuration"],data(){return{SHARED_DEVICE_VENDORS:["openwb"]}},methods:{getComponent(){console.debug(`loading consumer config: ${this.consumer.vendor} / ${this.consumer.type}`);const r=this.SHARED_DEVICE_VENDORS.includes(this.consumer.vendor);return ne({loader:()=>r?G(Object.assign({"../devices/algodue/algodue/device.vue":()=>n(()=>import("./device-DHB2lzzG.js"),__vite__mapDeps([0,1,2,3])),"../devices/alpha_ess/alpha_ess/device.vue":()=>n(()=>import("./device-Bmiwd3r6.js"),__vite__mapDeps([4,1,2,3])),"../devices/ampere/ampere/device.vue":()=>n(()=>import("./device-Chn2mfBF.js"),__vite__mapDeps([5,1,2,3])),"../devices/anker/smartmeter_gen2/device.vue":()=>n(()=>import("./device-Du5x1ttW.js"),__vite__mapDeps([6,1,2,3])),"../devices/anker/solarbank/device.vue":()=>n(()=>import("./device-DCCgNY-n.js"),__vite__mapDeps([7,1,2,3])),"../devices/avm/avm/device.vue":()=>n(()=>import("./device-C-VdYO_S.js"),__vite__mapDeps([8,1,2,3])),"../devices/azzurro_zcs/azzurro_zcs/device.vue":()=>n(()=>import("./device-CUsU7GEo.js"),__vite__mapDeps([9,1,2,3])),"../devices/azzurro_zcs/azzurro_zcs_3p/device.vue":()=>n(()=>import("./device-qM6Ow-QZ.js"),__vite__mapDeps([10,1,2,3])),"../devices/batterx/batterx/device.vue":()=>n(()=>import("./device-D0NVBx3_.js"),__vite__mapDeps([11,1,2,3])),"../devices/benning/benning/device.vue":()=>n(()=>import("./device-CyemJxTG.js"),__vite__mapDeps([12,1,2,3])),"../devices/byd/byd/device.vue":()=>n(()=>import("./device-CWvuKt9H.js"),__vite__mapDeps([13,1,2,3])),"../devices/carlo_gavazzi/carlo_gavazzi/device.vue":()=>n(()=>import("./device-Hl-FIG_-.js"),__vite__mapDeps([14,1,2,3])),"../devices/chint/chint/device.vue":()=>n(()=>import("./device-CwrJywgw.js"),__vite__mapDeps([15,1,2,3])),"../devices/deye/deye/device.vue":()=>n(()=>import("./device-BfuV33Ny.js"),__vite__mapDeps([16,1,2,3])),"../devices/deye/deye_solarman/device.vue":()=>n(()=>import("./device-CME_IE2O.js"),__vite__mapDeps([17,1,2,3])),"../devices/discovergy/discovergy/device.vue":()=>n(()=>import("./device-B2ATC70N.js"),__vite__mapDeps([18,1,2,3])),"../devices/e3dc/e3dc/device.vue":()=>n(()=>import("./device-Drtgd5P3.js"),__vite__mapDeps([19,1,2,3])),"../devices/ecoflow/stream/device.vue":()=>n(()=>import("./device-CnnZ5HDz.js"),__vite__mapDeps([20,1,2,3])),"../devices/elgris/elgris/device.vue":()=>n(()=>import("./device-D93KyX8z.js"),__vite__mapDeps([21,1,2,3])),"../devices/enecess/ecomain/device.vue":()=>n(()=>import("./device-C7upWp-n.js"),__vite__mapDeps([22,1,2,3])),"../devices/enphase/enphase/device.vue":()=>n(()=>import("./device-BeTvjVsI.js"),__vite__mapDeps([23,1,2,3])),"../devices/fems/fems/device.vue":()=>n(()=>import("./device-LwKhWIDy.js"),__vite__mapDeps([24,1,2,3])),"../devices/fox_ess/fox_ess/device.vue":()=>n(()=>import("./device-CX9F2w1R.js"),__vite__mapDeps([25,1,2,3])),"../devices/fox_ess/fox_ess_h3_smart/device.vue":()=>n(()=>import("./device-DFeFqcPa.js"),__vite__mapDeps([26,1,2,3])),"../devices/fronius/fronius_http_api/device.vue":()=>n(()=>import("./device-CpVp0tJY.js"),__vite__mapDeps([27,1,2,3])),"../devices/fronius/fronius_sunspec/device.vue":()=>n(()=>import("./device-h744ldQG.js"),__vite__mapDeps([28,1,2,3])),"../devices/generic/http/device.vue":()=>n(()=>import("./device-DxS-IR5M.js"),__vite__mapDeps([29,1,2,3])),"../devices/generic/json/device.vue":()=>n(()=>import("./device-BjmcAYaW.js"),__vite__mapDeps([30,1,2,3])),"../devices/generic/modbus/device.vue":()=>n(()=>import("./device-D7XDJsSX.js"),__vite__mapDeps([31,1,2,3])),"../devices/generic/mqtt/device.vue":()=>n(()=>import("./device-B7mQquwz.js"),__vite__mapDeps([32,1,2,3])),"../devices/good_we/good_we/device.vue":()=>n(()=>import("./device-D-HB7yYz.js"),__vite__mapDeps([33,1,2,3])),"../devices/growatt/growatt/device.vue":()=>n(()=>import("./device-BjH2i3dR.js"),__vite__mapDeps([34,1,2,3])),"../devices/huawei/huawei/device.vue":()=>n(()=>import("./device-By62nPmK.js"),__vite__mapDeps([35,1,2,3])),"../devices/huawei/huawei_emma/device.vue":()=>n(()=>import("./device-BMh4AbeD.js"),__vite__mapDeps([36,1,2,3])),"../devices/huawei/huawei_smartlogger/device.vue":()=>n(()=>import("./device-D7FS6Gp8.js"),__vite__mapDeps([37,1,2,3])),"../devices/idm/idm/device.vue":()=>n(()=>import("./device-DVfJuzkE.js"),__vite__mapDeps([38,1,2,3])),"../devices/janitza/janitza/device.vue":()=>n(()=>import("./device-CzW27uID.js"),__vite__mapDeps([39,1,2,3])),"../devices/kaco/kaco_nh/device.vue":()=>n(()=>import("./device-CaZSyW6k.js"),__vite__mapDeps([40,1,2,3])),"../devices/kaco/kaco_tx/device.vue":()=>n(()=>import("./device-BKrVP95F.js"),__vite__mapDeps([41,1,2,3])),"../devices/kostal/kostal_piko/device.vue":()=>n(()=>import("./device-BnxKSgH8.js"),__vite__mapDeps([42,1,2,3])),"../devices/kostal/kostal_piko_ci/device.vue":()=>n(()=>import("./device-DLmN6zPE.js"),__vite__mapDeps([43,1,2,3])),"../devices/kostal/kostal_piko_old/device.vue":()=>n(()=>import("./device-Di9i_dA8.js"),__vite__mapDeps([44,1,2,3])),"../devices/kostal/kostal_plenticore/device.vue":()=>n(()=>import("./device-C0xDk0ts.js"),__vite__mapDeps([45,1,2,3])),"../devices/kostal/kostal_sem/device.vue":()=>n(()=>import("./device-BSXhrs1Z.js"),__vite__mapDeps([46,1,2,3])),"../devices/kostal/kostal_steca/device.vue":()=>n(()=>import("./device-Bx-PcB2n.js"),__vite__mapDeps([47,1,2,3])),"../devices/lg/lg/device.vue":()=>n(()=>import("./device-CdePIfdb.js"),__vite__mapDeps([48,1,2,3])),"../devices/marstek/venus_c_e/device.vue":()=>n(()=>import("./device-BnxT8JJ2.js"),__vite__mapDeps([49,1,2,3])),"../devices/mtec/mtec/device.vue":()=>n(()=>import("./device-DA58b9nm.js"),__vite__mapDeps([50,1,2,3])),"../devices/mystrom/mystrom/device.vue":()=>n(()=>import("./device-Bh86b_Z3.js"),__vite__mapDeps([51,1,2,3])),"../devices/nibe/nibe/device.vue":()=>n(()=>import("./device-DdtU9l__.js"),__vite__mapDeps([52,1,2,3])),"../devices/opendtu/opendtu/device.vue":()=>n(()=>import("./device-DQB3GNdG.js"),__vite__mapDeps([53,1,2,3])),"../devices/openwb/openwb_flex/device.vue":()=>n(()=>import("./device-De_utEj4.js"),__vite__mapDeps([54,1,2,3])),"../devices/openwb/openwb_flex_local/device.vue":()=>n(()=>import("./device-DBtCkhyu.js"),__vite__mapDeps([55,1,2,3])),"../devices/orno/orno/device.vue":()=>n(()=>import("./device-DVMfFy_D.js"),__vite__mapDeps([56,1,2,3])),"../devices/powerdog/powerdog/device.vue":()=>n(()=>import("./device-9hZ9C-_o.js"),__vite__mapDeps([57,1,2,3])),"../devices/powerfox/powerfox/device.vue":()=>n(()=>import("./device-BtMlWIlE.js"),__vite__mapDeps([58,1,2,3])),"../devices/qcells/qcells/device.vue":()=>n(()=>import("./device-N4SVn9jC.js"),__vite__mapDeps([59,1,2,3])),"../devices/rct/rct/device.vue":()=>n(()=>import("./device-GN_GKnJc.js"),__vite__mapDeps([60,1,2,3])),"../devices/saxpower/saxpower/device.vue":()=>n(()=>import("./device-BtAcz1pD.js"),__vite__mapDeps([61,1,2,3])),"../devices/shelly/shelly/device.vue":()=>n(()=>import("./device-D8Ube9qm.js"),__vite__mapDeps([62,1,2,3])),"../devices/siemens/siemens/device.vue":()=>n(()=>import("./device-BW_zyWYf.js"),__vite__mapDeps([63,1,2,3])),"../devices/siemens/siemens_sentron/device.vue":()=>n(()=>import("./device-Ct0EL_5c.js"),__vite__mapDeps([64,1,2,3])),"../devices/sigenergy/sigenergy/device.vue":()=>n(()=>import("./device-BObe7-fT.js"),__vite__mapDeps([65,1,2,3])),"../devices/sma/sma_sunny_boy/device.vue":()=>n(()=>import("./device-Cae8kKJA.js"),__vite__mapDeps([66,1,2,3])),"../devices/sma/sma_sunny_island/device.vue":()=>n(()=>import("./device-Bm5lJk-e.js"),__vite__mapDeps([67,1,2,3])),"../devices/sma/sma_webbox/device.vue":()=>n(()=>import("./device-YYGO4kNw.js"),__vite__mapDeps([68,1,2,3])),"../devices/smart_me/smart_me/device.vue":()=>n(()=>import("./device-Dnz-lfZw.js"),__vite__mapDeps([69,1,2,3])),"../devices/smartfox/smartfox/device.vue":()=>n(()=>import("./device-o4cJfonB.js"),__vite__mapDeps([70,1,2,3])),"../devices/sofar/sofar/device.vue":()=>n(()=>import("./device-CBzzuPPX.js"),__vite__mapDeps([71,1,2,3])),"../devices/solakon/solakon_one/device.vue":()=>n(()=>import("./device-Du21jRtu.js"),__vite__mapDeps([72,1,2,3])),"../devices/solar_log/solar_log/device.vue":()=>n(()=>import("./device-DmTp-4Q0.js"),__vite__mapDeps([73,1,2,3])),"../devices/solar_view/solar_view/device.vue":()=>n(()=>import("./device-D97fwZ97.js"),__vite__mapDeps([74,1,2,3])),"../devices/solar_watt/solar_watt/device.vue":()=>n(()=>import("./device-D_Qh4d0E.js"),__vite__mapDeps([75,1,2,3])),"../devices/solar_world/solar_world/device.vue":()=>n(()=>import("./device-B2BXKGVF.js"),__vite__mapDeps([76,1,2,3])),"../devices/solaredge/solaredge/device.vue":()=>n(()=>import("./device-CFv91Hst.js"),__vite__mapDeps([77,1,2,3])),"../devices/solarmax/solarmax/device.vue":()=>n(()=>import("./device--8PbFL3K.js"),__vite__mapDeps([78,1,2,3])),"../devices/solax/solax/device.vue":()=>n(()=>import("./device-BP1KJA6p.js"),__vite__mapDeps([79,1,2,3])),"../devices/solis/solis/device.vue":()=>n(()=>import("./device-DjnKnvxd.js"),__vite__mapDeps([80,1,2,3])),"../devices/sonnen/sonnenbatterie/device.vue":()=>n(()=>import("./device-BQKDm_yK.js"),__vite__mapDeps([81,1,2,3])),"../devices/studer/studer/device.vue":()=>n(()=>import("./device-DMnSEPnd.js"),__vite__mapDeps([82,1,2,3])),"../devices/sunenergyxt/sunenergyxt/device.vue":()=>n(()=>import("./device-CePtNibg.js"),__vite__mapDeps([83,1,2,3])),"../devices/sungrow/sungrow_ihm/device.vue":()=>n(()=>import("./device-1rlXvG7o.js"),__vite__mapDeps([84,1,2,3])),"../devices/sungrow/sungrow_micro/device.vue":()=>n(()=>import("./device-ap_aIxcd.js"),__vite__mapDeps([85,1,2,3])),"../devices/sungrow/sungrow_sg/device.vue":()=>n(()=>import("./device-CZWl8ObD.js"),__vite__mapDeps([86,1,2,3])),"../devices/sungrow/sungrow_sh/device.vue":()=>n(()=>import("./device-CB23bxqx.js"),__vite__mapDeps([87,1,2,3])),"../devices/sunways/sunways/device.vue":()=>n(()=>import("./device-DDCqw8SU.js"),__vite__mapDeps([88,1,2,3])),"../devices/tasmota/tasmota/device.vue":()=>n(()=>import("./device-Wiugpl0X.js"),__vite__mapDeps([89,1,2,3])),"../devices/tesla/tesla/device.vue":()=>n(()=>import("./device-oF88OjWr.js"),__vite__mapDeps([90,1,2,3])),"../devices/thermia/thermia/device.vue":()=>n(()=>import("./device-RdsB0ti4.js"),__vite__mapDeps([91,1,2,3])),"../devices/upower/upower/device.vue":()=>n(()=>import("./device-S7xoJYQU.js"),__vite__mapDeps([92,1,2,3])),"../devices/varta/varta/device.vue":()=>n(()=>import("./device-D0qPaH_i.js"),__vite__mapDeps([93,1,2,3])),"../devices/victron/victron/device.vue":()=>n(()=>import("./device-DyNIhzeY.js"),__vite__mapDeps([94,1,2,3])),"../devices/victron/victron_3p75ct/device.vue":()=>n(()=>import("./device-0R3TseqV.js"),__vite__mapDeps([95,1,2,3])),"../devices/vzlogger/vzlogger/device.vue":()=>n(()=>import("./device-DKtpZs7X.js"),__vite__mapDeps([96,1,2,3])),"../devices/youless/youless/device.vue":()=>n(()=>import("./device-hKSMI4zZ.js"),__vite__mapDeps([97,1,2,3])),"../devices/zendure/zendure/device.vue":()=>n(()=>import("./device-CHU8Jgeh.js"),__vite__mapDeps([98,1,2,3]))}),`../devices/${this.consumer.vendor}/${this.consumer.type}/device.vue`,5):G(Object.assign({"./askoma/askoheat/consumer.vue":()=>n(()=>import("./consumer-x1OJSxBK.js"),__vite__mapDeps([99,2,3,100,101,102,103,104,105,106,107])),"./avm/avm/consumer.vue":()=>n(()=>import("./consumer-BhiN-Pbu.js"),__vite__mapDeps([108,2,3,100,101,102,103,104,105,106,107])),"./daikin/daikin_homehub_air2air/consumer.vue":()=>n(()=>import("./consumer-DGx9umH6.js"),__vite__mapDeps([109,2,3,100,101,102,103,104,105,106,107])),"./daikin/daikin_homehub_altherma/consumer.vue":()=>n(()=>import("./consumer-B_TG_jwd.js"),__vite__mapDeps([110,2,3,100,101,102,103,104,105,106,107])),"./ego/ego/consumer.vue":()=>n(()=>import("./consumer-Bmfknm9t.js"),__vite__mapDeps([111,2,3,100,101,102,103,104,105,106,107])),"./ems_esp/ems_esp/consumer.vue":()=>n(()=>import("./consumer-DoDJKaK5.js"),__vite__mapDeps([112,2,3,100,101,102,103,104,105,106,107])),"./generic/dac/consumer.vue":()=>n(()=>import("./consumer-DP1oPG1b.js"),__vite__mapDeps([113,2,3,100,101,102,103,104,105,106,107])),"./generic/http/consumer.vue":()=>n(()=>import("./consumer-CVjfcpZy.js"),__vite__mapDeps([114,2,3,100,101,102,103,104,105,106,107])),"./generic/json/consumer.vue":()=>n(()=>import("./consumer-Cxc3OQkk.js"),__vite__mapDeps([115,2,3,100,101,102,103,104,105,106,107])),"./generic/mqtt/consumer.vue":()=>n(()=>import("./consumer-m8ZTdtIv.js"),__vite__mapDeps([116,2,3,100,101,102,103,104,105,106,107])),"./gree/gree/consumer.vue":()=>n(()=>import("./consumer-CruA9slz.js"),__vite__mapDeps([117,2,3,100,101,102,103,104,105,106,107])),"./idm/idm/consumer.vue":()=>n(()=>import("./consumer-CZYz4YZg.js"),__vite__mapDeps([118,2,3,100,101,102,103,104,105,106,107])),"./kermi/kermi/consumer.vue":()=>n(()=>import("./consumer-Cd_74VSS.js"),__vite__mapDeps([119,2,3,100,101,102,103,104,105,106,107])),"./lambda_/lambda_/consumer.vue":()=>n(()=>import("./consumer-C7mzR7uP.js"),__vite__mapDeps([120,2,3,100,101,102,103,104,105,106,107])),"./lg_therma/lg_therma/consumer.vue":()=>n(()=>import("./consumer-DFZAM7gI.js"),__vite__mapDeps([121,2,3,100,101,102,103,104,105,106,107])),"./luxtronik/luxtronik/consumer.vue":()=>n(()=>import("./consumer-DmXv955p.js"),__vite__mapDeps([122,2,3,100,101,102,103,104,105,106,107])),"./mitsubishi/mitsubishi_modbus/consumer.vue":()=>n(()=>import("./consumer-DYwIyUhr.js"),__vite__mapDeps([123,2,3,100,101,102,103,104,105,106,107])),"./mtec/mtec/consumer.vue":()=>n(()=>import("./consumer-CPPPGiNU.js"),__vite__mapDeps([124,2,3,100,101,102,103,104,105,106,107])),"./my_pv/acthor/consumer.vue":()=>n(()=>import("./consumer-B1ueKIDM.js"),__vite__mapDeps([125,2,3,100,101,102,103,104,105,106,107])),"./my_pv/elwa_e/consumer.vue":()=>n(()=>import("./consumer-DP77PVzL.js"),__vite__mapDeps([126,2,3,100,101,102,103,104,105,106,107])),"./mystrom/mystrom/consumer.vue":()=>n(()=>import("./consumer-C30nO6sE.js"),__vite__mapDeps([127,2,3,100,101,102,103,104,105,106,107])),"./nibe/nibe_s_series/consumer.vue":()=>n(()=>import("./consumer-DIrQ3KTM.js"),__vite__mapDeps([128,2,3,100,101,102,103,104,105,106,107])),"./ovum/ovum/consumer.vue":()=>n(()=>import("./consumer-CgpjQOKz.js"),__vite__mapDeps([129,2,3,100,101,102,103,104,105,106,107])),"./ratiotherm/ratiotherm/consumer.vue":()=>n(()=>import("./consumer-Bkx6h3Vw.js"),__vite__mapDeps([130,2,3,100,101,102,103,104,105,106,107])),"./shelly/shelly_em/consumer.vue":()=>n(()=>import("./consumer-Bby-DojC.js"),__vite__mapDeps([131,2,3,100,101,102,103,104,105,106,107])),"./shelly/shelly_pm/consumer.vue":()=>n(()=>import("./consumer-wNhSDED-.js"),__vite__mapDeps([132,2,3,100,101,102,103,104,105,106,107])),"./solarfocus/vampair/consumer.vue":()=>n(()=>import("./consumer-CH0MotHm.js"),__vite__mapDeps([133,2,3,100,101,102,103,104,105,106,107])),"./solvis/solvis/consumer.vue":()=>n(()=>import("./consumer-Di_jjil1.js"),__vite__mapDeps([134,2,3,100,101,102,103,104,105,106,107])),"./stiebel/stiebel/consumer.vue":()=>n(()=>import("./consumer-Ak9gNogG.js"),__vite__mapDeps([135,2,3,100,101,102,103,104,105,106,107])),"./viessmann/viessmann_heat_pump/consumer.vue":()=>n(()=>import("./consumer-d3D8ujRs.js"),__vite__mapDeps([136,2,3,100,101,102,103,104,105,106,107])),"./weishaupt/weishaupt_wwp/consumer.vue":()=>n(()=>import("./consumer-BYkNOEGj.js"),__vite__mapDeps([137,2,3,100,101,102,103,104,105,106,107])),"./xtherma/xtherma/consumer.vue":()=>n(()=>import("./consumer-q_3jRzYP.js"),__vite__mapDeps([138,2,3,100,101,102,103,104,105,106,107]))}),`./${this.consumer.vendor}/${this.consumer.type}/consumer.vue`,4),errorComponent:me})},updateConfiguration(r){this.$emit("update:configuration",r)}}};function _e(r,e,l,m,h,t){return u(),v(re(t.getComponent()),{consumer:l.consumer,"onUpdate:configuration":e[0]||(e[0]=w=>t.updateConfiguration(w))},null,40,["consumer"])}const pe=I(ce,[["render",_e],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/OpenwbConsumerConfigProxy.vue"]]);C.add($,N,j,F,H,J,Z);const ve={name:"ConsumerTimeChargingPlan",components:{FontAwesomeIcon:M},mixins:[q],props:{modelValue:{type:Object,required:!0},consumerId:{type:Number,required:!0}},emits:["update:modelValue","sendCommand"],data(){return{mqttTopics:[],showRemoveModal:!1}},computed:{plan(){return this.modelValue},minBatSocLabels(){const r=[{label:"Aus",value:null}];for(let e=5;e<=95;e+=5)r.push({label:e,value:e});return r}},methods:{copyPlan(){this.$emit("sendCommand",{command:"addConsumerTimePlan",data:{consumer_id:this.consumerId,copy:this.modelValue.id}})},removePlanModal(){this.showRemoveModal=!0},removePlan(r){this.showRemoveModal=!1,r=="confirm"&&this.$emit("sendCommand",{command:"removeConsumerTimePlan",data:{consumer_id:this.consumerId,plan:this.modelValue.id}})}}},ge={key:0},be={key:1},fe={key:2},he={key:3},Ve={key:1},Ee={key:2};function ye(r,e,l,m,h,t){const w=b("openwb-base-modal-dialog"),E=b("font-awesome-icon"),f=b("openwb-base-avatar"),V=b("openwb-base-text-input"),P=b("openwb-base-button-group-input"),L=b("openwb-base-range-input"),U=b("openwb-base-card");return u(),_(k,null,[i(w,{show:h.showRemoveModal,title:"Zeitladen-Plan löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:t.removePlan},{default:s(()=>[a(' Willst Du den Zeitladen-Plan "'+A(t.plan.name)+'" wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ',1)]),_:1},8,["show","onModalResult"]),i(U,{title:t.plan.name,collapsible:!0,collapsed:!0},{actions:s(c=>[c.collapsed==!0?(u(),_("span",{key:0,class:Q(["pill clickable",t.plan.active?"bg-success":"bg-danger"]),onClick:e[0]||(e[0]=O(y=>t.plan.active=!t.plan.active,["stop"]))},[i(E,{icon:["fas","clock"]}),a(" "+A(t.plan.time[0])+" - "+A(t.plan.time[1])+" ",1),t.plan.frequency.selected=="once"?(u(),_("span",ge,[i(E,{icon:["fas","calendar-day"]})])):g("",!0),t.plan.frequency.selected=="daily"?(u(),_("span",be,[i(E,{icon:["fas","calendar-week"]})])):g("",!0),t.plan.frequency.selected=="weekly"?(u(),_("span",fe,[i(E,{icon:["fas","calendar-alt"]})])):g("",!0),t.plan.min_bat_soc!=null?(u(),_("span",he,[i(E,{icon:["fas","car-battery"]}),a(" "+A(t.plan.min_bat_soc)+"% ",1)])):g("",!0)],2)):g("",!0),c.collapsed==!1?(u(),_("span",Ve,[i(f,{class:"bg-success clickable",title:"Zeitladen-Plan duplizieren",onClick:e[1]||(e[1]=O(y=>t.copyPlan(),["stop"]))},{default:s(()=>[i(E,{icon:["fas","copy"]})]),_:1}),i(f,{class:"bg-danger clickable ml-1",title:"Zeitladen-Plan löschen",onClick:e[2]||(e[2]=O(y=>t.removePlanModal(),["stop"]))},{default:s(()=>[i(E,{icon:["fas","trash"]})]),_:1})])):g("",!0)]),default:s(()=>[i(V,{modelValue:t.plan.name,"onUpdate:modelValue":e[3]||(e[3]=c=>t.plan.name=c),title:"Bezeichnung"},null,8,["modelValue"]),i(P,{modelValue:t.plan.active,"onUpdate:modelValue":e[4]||(e[4]=c=>t.plan.active=c),title:"Zeitplan aktiv",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}]},null,8,["modelValue"]),i(V,{modelValue:t.plan.time[0],"onUpdate:modelValue":e[5]||(e[5]=c=>t.plan.time[0]=c),title:"Zeitpunkt des Einschaltens",subtype:"time"},null,8,["modelValue"]),i(V,{modelValue:t.plan.time[1],"onUpdate:modelValue":e[6]||(e[6]=c=>t.plan.time[1]=c),title:"Zeitpunkt des Ausschaltens",subtype:"time"},null,8,["modelValue"]),i(P,{modelValue:t.plan.frequency.selected,"onUpdate:modelValue":e[7]||(e[7]=c=>t.plan.frequency.selected=c),title:"Wiederholungen",buttons:[{buttonValue:"once",text:"Einmalig",class:"btn-outline-info"},{buttonValue:"daily",text:"Täglich",class:"btn-outline-info"},{buttonValue:"weekly",text:"Wöchentlich",class:"btn-outline-info"}]},null,8,["modelValue"]),t.plan.frequency.selected=="once"?(u(),v(V,{key:0,modelValue:t.plan.frequency.once[0],"onUpdate:modelValue":e[8]||(e[8]=c=>t.plan.frequency.once[0]=c),title:"Gültig ab",subtype:"date"},null,8,["modelValue"])):g("",!0),t.plan.frequency.selected=="once"?(u(),v(V,{key:1,modelValue:t.plan.frequency.once[1],"onUpdate:modelValue":e[9]||(e[9]=c=>t.plan.frequency.once[1]=c),title:"Gültig bis",subtype:"date",min:t.plan.frequency.once[0]},null,8,["modelValue","min"])):g("",!0),t.plan.frequency.selected=="weekly"?(u(),_("div",Ee,[(u(!0),_(k,null,B(r.weekdays,(c,y)=>(u(),v(P,{key:y,modelValue:t.plan.frequency.weekly[y],"onUpdate:modelValue":D=>t.plan.frequency.weekly[y]=D,title:c,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}]},null,8,["modelValue","onUpdate:modelValue","title"]))),128))])):g("",!0),e[12]||(e[12]=p("hr",null,null,-1)),i(L,{modelValue:t.plan.min_bat_soc,"onUpdate:modelValue":e[10]||(e[10]=c=>t.plan.min_bat_soc=c),title:"Zeitladen bis Speicher entladen auf",min:0,max:t.minBatSocLabels.length-1,step:1,unit:"%",labels:t.minBatSocLabels},{help:s(()=>[...e[11]||(e[11]=[a(' Zeitladen wird nur ausgeführt, solange der Speicher-SoC über diesem Wert liegt. Bei "Aus" wird der Speicher-SoC nicht berücksichtigt. Lädt die aktive Speichersteuerung gerade den Speicher, wird kein Zeitladen gestartet, da der Speicher nicht gleichzeitig geladen und entladen werden kann. ',-1)])]),_:1},8,["modelValue","max","labels"])]),_:1},8,["title"])],64)}const we=I(ve,[["render",ye],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/ConsumerTimeChargingPlan.vue"]]);C.add(N,j,F,H,J,Z);const ke={name:"ConsumerScheduledPlan",components:{FontAwesomeIcon:M},mixins:[q],props:{modelValue:{type:Object,required:!0},consumerId:{type:Number,required:!0}},emits:["update:modelValue","sendCommand"],data(){return{mqttTopics:[],showRemoveModal:!1}},computed:{plan(){return this.modelValue}},methods:{copyPlan(){this.$emit("sendCommand",{command:"addConsumerSchedulePlan",data:{consumer_id:this.consumerId,copy:this.modelValue.id}})},removePlanModal(){this.showRemoveModal=!0},removePlan(r){this.showRemoveModal=!1,r=="confirm"&&this.$emit("sendCommand",{command:"removeConsumerSchedulePlan",data:{consumer_id:this.consumerId,plan:this.modelValue.id}})}}},Pe={key:0},De={key:1},Ae={key:2},Te={key:1},Oe={key:2};function Le(r,e,l,m,h,t){const w=b("openwb-base-modal-dialog"),E=b("font-awesome-icon"),f=b("openwb-base-avatar"),V=b("openwb-base-text-input"),P=b("openwb-base-button-group-input"),L=b("openwb-base-number-input"),U=b("openwb-base-card");return u(),_(k,null,[i(w,{show:h.showRemoveModal,title:"Zielladen-Plan löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:t.removePlan},{default:s(()=>[a(' Willst Du den Zielladen-Plan "'+A(t.plan.name)+'" wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ',1)]),_:1},8,["show","onModalResult"]),i(U,{title:t.plan.name,collapsible:!0,collapsed:!0},{actions:s(c=>[c.collapsed==!0?(u(),_("span",{key:0,class:Q(["pill clickable",t.plan.active?"bg-success":"bg-danger"]),onClick:e[0]||(e[0]=O(y=>t.plan.active=!t.plan.active,["stop"]))},[i(E,{icon:["fas","clock"]}),a(" "+A(t.plan.time)+" ",1),t.plan.frequency.selected=="once"?(u(),_("span",Pe,[i(E,{icon:["fas","calendar-day"]})])):g("",!0),t.plan.frequency.selected=="daily"?(u(),_("span",De,[i(E,{icon:["fas","calendar-week"]})])):g("",!0),t.plan.frequency.selected=="weekly"?(u(),_("span",Ae,[i(E,{icon:["fas","calendar-alt"]})])):g("",!0)],2)):g("",!0),c.collapsed==!1?(u(),_("span",Te,[i(f,{class:"bg-success clickable",title:"Zielladen-Plan duplizieren",onClick:e[1]||(e[1]=O(y=>t.copyPlan(),["stop"]))},{default:s(()=>[i(E,{icon:["fas","copy"]})]),_:1}),i(f,{class:"bg-danger clickable ml-1",title:"Zielladen-Plan löschen",onClick:e[2]||(e[2]=O(y=>t.removePlanModal(),["stop"]))},{default:s(()=>[i(E,{icon:["fas","trash"]})]),_:1})])):g("",!0)]),default:s(()=>[i(V,{modelValue:t.plan.name,"onUpdate:modelValue":e[3]||(e[3]=c=>t.plan.name=c),title:"Bezeichnung"},null,8,["modelValue"]),i(P,{modelValue:t.plan.active,"onUpdate:modelValue":e[4]||(e[4]=c=>t.plan.active=c),title:"Plan aktiv",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}]},null,8,["modelValue"]),i(V,{modelValue:t.plan.time,"onUpdate:modelValue":e[5]||(e[5]=c=>t.plan.time=c),title:"Ziel-Termin",subtype:"time"},null,8,["modelValue"]),i(P,{modelValue:t.plan.frequency.selected,"onUpdate:modelValue":e[6]||(e[6]=c=>t.plan.frequency.selected=c),title:"Wiederholungen",buttons:[{buttonValue:"once",text:"Einmalig",class:"btn-outline-info"},{buttonValue:"daily",text:"Täglich",class:"btn-outline-info"},{buttonValue:"weekly",text:"Wöchentlich",class:"btn-outline-info"}]},null,8,["modelValue"]),t.plan.frequency.selected=="once"?(u(),v(V,{key:0,modelValue:t.plan.frequency.once[0],"onUpdate:modelValue":e[7]||(e[7]=c=>t.plan.frequency.once[0]=c),title:"Gültig ab",subtype:"date"},null,8,["modelValue"])):g("",!0),t.plan.frequency.selected=="once"?(u(),v(V,{key:1,modelValue:t.plan.frequency.once[1],"onUpdate:modelValue":e[8]||(e[8]=c=>t.plan.frequency.once[1]=c),title:"Gültig bis",subtype:"date",min:t.plan.frequency.once[0]},null,8,["modelValue","min"])):g("",!0),t.plan.frequency.selected=="weekly"?(u(),_("div",Oe,[(u(!0),_(k,null,B(r.weekdays,(c,y)=>(u(),v(P,{key:y,modelValue:t.plan.frequency.weekly[y],"onUpdate:modelValue":D=>t.plan.frequency.weekly[y]=D,title:c,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}]},null,8,["modelValue","onUpdate:modelValue","title"]))),128))])):g("",!0),e[11]||(e[11]=p("hr",null,null,-1)),i(L,{title:"Gesamtlaufzeit",unit:"min",min:0,step:1,"model-value":t.plan.duration/60,"onUpdate:modelValue":e[9]||(e[9]=c=>t.plan.duration=c*60)},{help:s(()=>[...e[10]||(e[10]=[a(" Gesamte Laufzeit eines Programm-Durchlaufs des Geräts. ",-1)])]),_:1},8,["model-value"])]),_:1},8,["title"])],64)}const Re=I(ke,[["render",Le],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/ConsumerScheduledPlan.vue"]]);C.add(ee,te,Z);const Ie={name:"OpenwbConsumerConfigView",components:{FontAwesomeIcon:M,OpenwbConsumerConfigProxy:pe,ConsumerTimeChargingPlan:we,ConsumerScheduledPlan:Re},mixins:[q],emits:["sendCommand","save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/general/legacy_smarthome_active",writeable:!0},{topic:"openWB/consumer/+/module",writeable:!0},{topic:"openWB/consumer/+/config",writeable:!0},{topic:"openWB/consumer/+/usage",writeable:!0},{topic:"openWB/consumer/+/extra_meter",writeable:!0},{topic:"openWB/system/device/+/config",writeable:!1},{topic:"openWB/system/device/+/component/+/config",writeable:!1},{topic:"openWB/counter/get/hierarchy",writeable:!1},{topic:"openWB/system/configurable/consumers",writeable:!1},{topic:"openWB/optional/ep/configured",writeable:!1}],selectedVendor:void 0,consumerToAdd:void 0,showConsumerRemoveModal:!1,modalConsumer:void 0,modalConsumerName:"",CONSUMER_CONFIG_FIELDS:["connected_phases","phase_1","max_power"],commandQueue:[],consumerDefaultColor:"#6f42c1"}},computed:{installedConsumers(){const r=this.getWildcardTopics("openWB/consumer/+/module"),e=this.getWildcardTopics("openWB/consumer/+/config"),l=this.getWildcardTopics("openWB/consumer/+/usage");return Object.fromEntries(Object.entries(r).map(([m,h])=>{const t=h.id;return[m,{...h,color:h.color??this.consumerDefaultColor,config:e[`openWB/consumer/${t}/config`]??{},consumerUsage:l[`openWB/consumer/${t}/usage`]??null}]}))},vendorList:{get(){if(this.$store.state.mqtt["openWB/system/configurable/consumers"]===void 0)return[];const r=this.$store.state.mqtt["openWB/system/configurable/consumers"];return Object.entries(r).map(([,e])=>({label:e.group_name,options:Object.entries(e.vendors).map(([l,m])=>({value:l,text:m.vendor_name})).sort((l,m)=>l.text.localeCompare(m.text))})).sort((e,l)=>-e.label.localeCompare(l.label))}},consumerList:{get(){if(this.selectedVendor===void 0)return[];const r=this.$store.state.mqtt["openWB/system/configurable/consumers"];if(!r)return[];let e=null;for(const l of Object.values(r))if(l.vendors&&l.vendors[this.selectedVendor]){e=l.vendors[this.selectedVendor];break}return!e||!e.consumers?[]:Object.entries(e.consumers).map(([l,m])=>({value:[this.selectedVendor,l],text:m.consumer_name})).sort((l,m)=>l.text.localeCompare(m.text))}},componentConfigurations(){return this.getWildcardTopics("openWB/system/device/+/component/+/config")},virtualComponentIds(){const r=this.getWildcardTopics("openWB/system/device/+/config"),e=Object.values(r).filter(l=>l?.type==="virtual").map(l=>l.id);return Object.entries(this.componentConfigurations).filter(([l])=>{const m=l.match(/openWB\/system\/device\/(\d+)\/component\//);return m&&e.includes(parseInt(m[1]))}).map(([,l])=>l?.id)},evuCounterId(){const r=this.$store.state.mqtt["openWB/counter/get/hierarchy"];if(!(!Array.isArray(r)||r.length===0))return r[0]?.id},extraMeterLinks(){const r=this.getWildcardTopics("openWB/consumer/+/extra_meter");return Object.entries(r).map(([e,l])=>{const m=e.match(/openWB\/consumer\/(\d+)\/extra_meter/);return{consumerId:m?parseInt(m[1]):null,counterId:l}})},hasIntegratedCounter(){const r={};return Object.values(this.installedConsumers).forEach(e=>{r[e.id]=e?.usage?.includes("meter_only")??!1}),r},savingData(){return this.$store.state.local.savingData}},watch:{savingData(r,e){if(r===!1&&e===!0){for(;this.commandQueue.length>0;){const l=this.commandQueue.shift();console.debug(`Processing queued command: ${l.command}`),this.$emit("sendCommand",l)}this.$store.commit("storeLocal",{name:"preventSavingModal",value:!1})}}},methods:{addConsumer(){this.consumerToAdd&&this.$emit("sendCommand",{command:"addConsumer",data:{vendor:this.consumerToAdd[0],type:this.consumerToAdd[1]}})},removeConsumerModal(r,e,l){l.stopPropagation(),this.modalConsumer=r,this.modalConsumerName=e,this.showConsumerRemoveModal=!0},removeConsumer(r){this.showConsumerRemoveModal=!1,r=="confirm"&&this.$emit("sendCommand",{command:"removeConsumer",data:{consumer_id:this.modalConsumer}})},getExtraMeter(r){return this.$store.state.mqtt[`openWB/consumer/${r}/extra_meter`]},hasExtraMeter(r){return this.getExtraMeter(r)!=null},setExtraMeter(r,e){this.updateState(`openWB/consumer/${r}/extra_meter`,e??null)},availableCounterOptions(r){const e=this.extraMeterLinks.filter(m=>m.consumerId!==r&&m.counterId!=null).map(m=>m.counterId),l=Object.values(this.componentConfigurations).filter(m=>m&&this.isComponentType(m.type,"counter")).filter(m=>m.id!==this.evuCounterId).filter(m=>!this.virtualComponentIds.includes(m.id)).filter(m=>!e.includes(m.id)).map(m=>({value:m.id,text:m.name})).sort((m,h)=>m.text.localeCompare(h.text));return[{value:null,text:"kein Zähler"},...l]},isComponentType(r,e){return r.split("_").includes(e)},consumerDeviceConfiguration(r,e){const{object:l,value:m}=e,t=this.CONSUMER_CONFIG_FIELDS.includes(l)?`openWB/consumer/${r.id}/config`:`openWB/consumer/${r.id}/module`;this.updateState(t,m,l)},showModeSettings(r){const e=r.consumerUsage?.type;return e!=null&&e!=="meter_only"&&e!=="self_controlled"},showMinCurrent(r){const e=r.consumerUsage?.type;return e!=="suspendable_onoff"&&e!=="continuous"&&e!=="meter_only"&&e!=="self_controlled"},getUsageOptions(r){return Array.isArray(r.usage)?r.usage.map(e=>({value:e,text:this.usageLabels(e)})):[]},usageLabels(r){return{meter_only:"Nur Messung",suspendable_onoff:"Schaltbar (Ein/Aus)",suspendable_tunable:"Stufenlos regelbar",continuous:"Dauerverbraucher",self_controlled:"Wärmepumpe in Eigensteuerung"}[r]??r},updateUsage(r,e,l){this.updateState(`openWB/consumer/${r}/usage`,e,l)},openActiveModeCard(r,e){this.$nextTick(()=>{["instant_charging","pv_charging","eco_charging","scheduled_charging"].forEach(m=>{const h=`card-${r}-${m}`,t=this.$refs[h],w=Array.isArray(t)?t[0]:t;w&&(w.isCollapsed=m!==e)})})},resetDateParts(r){const e=r.consumerUsage?.reset_chargemode?.time,l=e?new Date(e*1e3):new Date,m=h=>String(h).padStart(2,"0");return{date:`${l.getFullYear()}-${m(l.getMonth()+1)}-${m(l.getDate())}`,time:`${m(l.getHours())}:${m(l.getMinutes())}`}},setResetDate(r,e){this.writeResetTime(r.id,e,this.resetDateParts(r).time)},setResetTime(r,e){this.writeResetTime(r.id,this.resetDateParts(r).date,e)},writeResetTime(r,e,l){if(!e||!l)return;const m=Math.floor(new Date(`${e}T${l}`).getTime()/1e3);Number.isNaN(m)||this.updateUsage(r,m,"reset_chargemode.time")},commandAfterSavingConsumerUsage(r,e,l=!1){this.commandQueue.push({command:r,data:e}),l&&(console.debug(`Hiding save modal before executing command: ${r}`),this.$store.commit("storeLocal",{name:"preventSavingModal",value:!0})),console.debug(`Saving consumer usage data before executing command: ${r}`),this.$emit("save",[`openWB/consumer/${e.consumer_id}/usage`])}}},Ue={class:"consumerConfig"},Se={name:"consumerConfigForm"},xe={key:0},Be={key:1},We={key:0},ze={key:1},Me={key:2},Ce={key:3},Ze={key:4},qe={key:5},Ge={key:0},Ne={key:1},je={key:0},Fe={key:1},He={key:1};function Je(r,e,l,m,h,t){const w=b("openwb-base-modal-dialog"),E=b("router-link"),f=b("openwb-base-alert"),V=b("openwb-base-button-group-input"),P=b("font-awesome-icon"),L=b("openwb-base-avatar"),U=b("openwb-base-color-picker"),c=b("openwb-base-text-input"),y=b("openwb-consumer-config-proxy"),D=b("openwb-base-heading"),W=b("openwb-base-select-input"),z=b("openwb-base-number-input"),R=b("openwb-base-card"),K=b("consumer-scheduled-plan"),Y=b("consumer-time-charging-plan"),X=b("openwb-base-submit-buttons");return u(),_(k,null,[i(w,{show:h.showConsumerRemoveModal,title:"Verbraucher löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:t.removeConsumer},{default:s(()=>[a(' Willst Du den Verbraucher "'+A(h.modalConsumerName)+'" wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ',1)]),_:1},8,["show","onModalResult"]),p("div",Ue,[i(f,{subtype:"info"},{default:s(()=>[e[10]||(e[10]=a(" Das Einschalten der Verbraucher richtet sich nach der Rangfolge in der Prioritäten-Steuerung (Geräte werden von oben nach unten geschaltet) und dem Mindeststrom des jeweiligen Geräts: Bei geringem Überschuss wird das erste Gerät in der Liste geschaltet, dessen Mindeststrom erreicht ist. Die Rangfolge lässt sich unter ",-1)),i(E,{to:"/LoadManagementConfiguration"},{default:s(()=>[...e[9]||(e[9]=[a(" Lastmanagement ",-1)])]),_:1}),e[11]||(e[11]=a(" anpassen. ",-1))]),_:1}),p("form",Se,[i(R,{title:"Verbraucher"},{default:s(()=>[r.$store.state.mqtt["openWB/general/extern"]===!0?(u(),_("div",xe,[i(f,{subtype:"info"},{default:s(()=>[...e[12]||(e[12]=[a(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(u(),_("div",Be,[i(V,{title:"SmartHome (veraltet)",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"model-value":r.$store.state.mqtt["openWB/general/legacy_smarthome_active"],"onUpdate:modelValue":e[0]||(e[0]=o=>r.updateState("openWB/general/legacy_smarthome_active",o))},{help:s(()=>[...e[13]||(e[13]=[a(' Aktiviert die bisherige, eigenständige SmartHome-Steuerung (Geräte über "openWB/LegacySmartHome/..."-Topics). Wer keine solchen Geräte eingerichtet hat, kann sie hier deaktivieren. ',-1)])]),_:1},8,["model-value"]),r.$store.state.mqtt["openWB/general/legacy_smarthome_active"]===!0?(u(),v(f,{key:0,subtype:"warning"},{default:s(()=>[...e[14]||(e[14]=[a(" Die alte SmartHome-Steuerung ist aktiv. Die Verbrauchersteuerung auf dieser Seite ist ihr Nachfolger. Bestehende SmartHome-Geräte funktionieren weiterhin; beim Umstieg sollte jedes Gerät aber nur in einem der beiden Systeme eingerichtet sein, da eine gleichzeitige Steuerung zu unerwünschtem Schaltverhalten führen kann. Sind alle Geräte umgezogen, kann das bisherige SmartHome hier abgeschaltet werden. ",-1)])]),_:1})):g("",!0),e[74]||(e[74]=p("hr",null,null,-1)),(u(!0),_(k,null,B(t.installedConsumers,(o,S)=>(u(),v(R,{key:S,collapsible:!0,collapsed:!0,subtype:"purple"},{header:s(()=>[i(P,{icon:["fas","plug"],class:"fa-border",style:oe({backgroundColor:o.color,color:r.getContrastColor(o.color),"--fa-border-color":r.getContrastColor(o.color)})},null,8,["style"]),a(" "+A(o?.name),1)]),actions:s(d=>[d.collapsed?g("",!0):(u(),v(L,{key:0,class:"bg-danger clickable",onClick:x=>t.removeConsumerModal(o?.id,o?.name,x)},{default:s(()=>[i(P,{icon:["fas","trash"]})]),_:1},8,["onClick"]))]),default:s(()=>[i(c,{title:"Bezeichnung",subtype:"text","model-value":o?.name,"onUpdate:modelValue":d=>r.updateState(S,d,"name")},{append:s(()=>[i(U,{class:"p-1","model-value":o.color,"default-color":h.consumerDefaultColor,"onUpdate:modelValue":d=>r.updateState(S,d,"color")},null,8,["model-value","default-color","onUpdate:modelValue"])]),_:2},1032,["model-value","onUpdate:modelValue"]),i(c,{title:"Hersteller",subtype:"text","model-value":o.info?.manufacturer,"onUpdate:modelValue":d=>r.updateState(S,d,"info.manufacturer")},{help:s(()=>[...e[15]||(e[15]=[a(" Optional: zusätzliche Information für den Systembericht. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),i(c,{title:"Modell",subtype:"text","model-value":o.info?.model,"onUpdate:modelValue":d=>r.updateState(S,d,"info.model")},{help:s(()=>[...e[16]||(e[16]=[a(" Optional: zusätzliche Information für den Systembericht. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),e[68]||(e[68]=p("hr",null,null,-1)),i(y,{consumer:o,"onUpdate:configuration":d=>t.consumerDeviceConfiguration(o,d)},null,8,["consumer","onUpdate:configuration"]),e[69]||(e[69]=p("hr",null,null,-1)),i(D,null,{default:s(()=>[...e[17]||(e[17]=[a(" Verwendung Optionen ",-1)])]),_:1}),i(W,{title:"Verwendung","not-selected":"Bitte auswählen",options:t.getUsageOptions(o),"model-value":o.consumerUsage?.type,"onUpdate:modelValue":d=>t.updateUsage(o.id,d,"type")},null,8,["options","model-value","onUpdate:modelValue"]),i(f,{subtype:"info"},{default:s(()=>[o.consumerUsage?.type==="meter_only"?(u(),_("span",We,[...e[18]||(e[18]=[p("ul",{class:"mb-0"},[p("li",null,"Es werden nur Messwerte erfasst.")],-1)])])):o.consumerUsage?.type==="suspendable_onoff"?(u(),_("span",ze,[...e[19]||(e[19]=[p("ul",{class:"mb-0"},[p("li",null,"Steuerung über Ein/Aus-Signale und Geräte mit SG-Ready-Kontakt"),p("li",null,"Unterbrechung im laufenden Betrieb möglich"),p("li",null,"Wärmepumpen, die durch die openWB gesteuert werden sollen (wie im SmartHome)")],-1)])])):o.consumerUsage?.type==="suspendable_tunable"?(u(),_("span",Me,[...e[20]||(e[20]=[p("ul",{class:"mb-0"},[p("li",null,"Steuerung durch Vorgabe einer Sollleistung"),p("li",null,"Unterbrechung im laufenden Betrieb möglich")],-1)])])):o.consumerUsage?.type==="continuous"?(u(),_("span",Ce,[...e[21]||(e[21]=[p("ul",{class:"mb-0"},[p("li",null,"Steuerung über Ein/Aus-Signale"),p("li",null,"Laufende Programme sollen nicht unterbrochen werden, z. B. Spülmaschine oder Trockner")],-1)])])):o.consumerUsage?.type==="self_controlled"?(u(),_("span",Ze,[...e[22]||(e[22]=[p("ul",{class:"mb-0"},[p("li",null,"Die Wärmepumpe übernimmt die Steuerung selbst."),p("li",null,"openWB sendet Regelparameter an die Wärmepumpe, wie zB EVU- und PV-Leistung"),p("li",null,"Zwei unabhängige Regelsysteme können zu Schwingungen und unerwünschten Effekten führen.")],-1)])])):(u(),_("span",qe,[...e[23]||(e[23]=[p("ul",{class:"mb-0"},[p("li",null,"Bitte zuerst einen Verwendungstyp auswählen.")],-1)])]))]),_:2},1024),e[70]||(e[70]=p("hr",null,null,-1)),i(D,null,{default:s(()=>[...e[24]||(e[24]=[a(" Elektrischer Anschluss ",-1)])]),_:1}),i(V,{title:"Anzahl angeschlossener Phasen",buttons:[{buttonValue:1,text:"1"},{buttonValue:2,text:"2"},{buttonValue:3,text:"3"}],"model-value":o.config?.connected_phases,"onUpdate:modelValue":d=>r.updateState(`openWB/consumer/${o.id}/config`,d,"connected_phases")},null,8,["model-value","onUpdate:modelValue"]),i(V,{title:"Phase 1 des Verbraucheranschlusses",buttons:[{buttonValue:1,text:"EVU L1"},{buttonValue:2,text:"EVU L2"},{buttonValue:3,text:"EVU L3"}],"model-value":o?.config?.phase_1,"onUpdate:modelValue":d=>r.updateState(`openWB/consumer/${o.id}/config`,d,"phase_1")},null,8,["model-value","onUpdate:modelValue"]),i(V,{title:"Im Hausverbrauch berücksichtigen?",buttons:[{buttonValue:"home_consumption",text:"Ja",class:"btn-outline-success"},{buttonValue:"auto_home_consumption",text:"Automatisch",class:"btn-outline-info"},{buttonValue:"no_home_consumption",text:"Nein",class:"btn-outline-danger"}],"model-value":o?.config?.is_home_consumption_consumer??"auto_home_consumption","onUpdate:modelValue":d=>r.updateState(`openWB/consumer/${o.id}/config`,d,"is_home_consumption_consumer")},{help:s(()=>[...e[25]||(e[25]=[a(" Ja: Verbraucher wird im Hausverbrauch berücksichtigt. Nein: Verbraucher wird nicht berücksichtigt. Automatisch: Verbraucher übernimmt die Einstellung des übergeordneten Zählers. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),t.showModeSettings(o)?(u(),v(z,{key:0,title:"Maximale Leistung",unit:"W",min:1,"model-value":o?.config?.max_power,"onUpdate:modelValue":d=>r.updateState(`openWB/consumer/${o.id}/config`,d,"max_power")},{help:s(()=>[e[26]||(e[26]=a(" Maximale Leistungsaufnahme des Geräts. ",-1)),o.consumerUsage?.type==="suspendable_tunable"?(u(),_("span",Ge," Wird im Sofort-, Zeit- und Eco-Betrieb (bei günstigem Preis) als Sollleistung verwendet. ")):(u(),_("span",Ne," Wird im Sofort-, Zeit- und Eco-Betrieb (bei günstigem Preis) als Sollleistung verwendet. Im PV- und Eco-Betrieb wird das Gerät nur eingeschaltet, wenn mindestens diese Leistung als Überschuss verfügbar ist."))]),_:2},1032,["model-value","onUpdate:modelValue"])):g("",!0),t.showMinCurrent(o)?(u(),v(z,{key:1,title:"Minimaler Betriebsstrom",unit:"A",min:0,step:.1,"model-value":o.config?.min_current,"onUpdate:modelValue":d=>r.updateState(`openWB/consumer/${o.id}/config`,d,"min_current")},{help:s(()=>[...e[27]||(e[27]=[a(" Mindeststrom, den das Gerät zum Betrieb benötigt. Im PV- und Eco-Betrieb wird das Gerät nur eingeschaltet, wenn mindestens dieser Strom als Überschuss verfügbar ist. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"])):g("",!0),t.showModeSettings(o)?(u(),v(z,{key:2,title:o.consumerUsage?.type==="continuous"?"Minimale Programmdauer (vom längsten Programm)":"Minimales Regelintervall",unit:"min",min:0,step:.1,"model-value":o.config?.min_interval!=null?parseFloat((o.config.min_interval/60).toFixed(2)):null,"onUpdate:modelValue":d=>r.updateState(`openWB/consumer/${o.id}/config`,parseFloat((d*60).toFixed(0)),"min_interval")},{help:s(()=>[o.consumerUsage?.type==="continuous"?(u(),_("span",je," Mindestlaufzeit, die der Verbraucher nach dem Einschalten eingeschaltet bleibt. Auf die Dauer des längsten Programms einstellen, damit ein gestartetes Programm vollständig durchlaufen kann. ")):(u(),_("span",Fe," Mindestzeit, die der Verbraucher in einem Schaltzustand bleibt, bevor neu geregelt wird. Träge Geräte (z. B. Wärmepumpen) reagieren langsam und benötigen hier größere Werte. "))]),_:2},1032,["title","model-value","onUpdate:modelValue"])):g("",!0),t.showModeSettings(o)?(u(),_(k,{key:3},[e[53]||(e[53]=p("hr",null,null,-1)),i(D,null,{default:s(()=>[...e[28]||(e[28]=[a(" Betriebsmodus ",-1)])]),_:1}),i(V,{title:"Betriebsmodus",buttons:[{buttonValue:"instant_charging",text:"Sofort",class:"btn-outline-danger"},{buttonValue:"pv_charging",text:"PV",class:"btn-outline-success"},{buttonValue:"scheduled_charging",text:"Ziel",class:"btn-outline-primary"},{buttonValue:"eco_charging",text:"Eco",class:"btn-outline-secondary"},{buttonValue:"stop",text:"Stop",class:"btn-outline-dark"}],"model-value":o.consumerUsage.chargemode,"onUpdate:modelValue":d=>t.updateUsage(o.id,d,"chargemode"),onButtonClick:d=>t.openActiveModeCard(o.id,d)},{help:s(()=>[...e[29]||(e[29]=[a(" Sofort = dauerhaft an, Stop = dauerhaft aus. PV, Eco und Ziel schalten den Verbraucher nach Überschuss, Strompreis bzw. Zeitplan. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue","onButtonClick"]),e[54]||(e[54]=p("hr",null,null,-1)),i(D,null,{default:s(()=>[...e[30]||(e[30]=[a(" Betriebsmodus umstellen ",-1)])]),_:1}),i(V,{title:"Umstellen",buttons:[{buttonValue:"never",text:"Nie",class:"btn-outline-secondary"},{buttonValue:"midnight",text:"Mitternacht",class:"btn-outline-info"},{buttonValue:"time",text:"Zeitpunkt",class:"btn-outline-info"}],"model-value":o.consumerUsage.reset_chargemode?.mode??"never","onUpdate:modelValue":d=>t.updateUsage(o.id,d,"reset_chargemode.mode")},{help:s(()=>[o.consumerUsage.reset_chargemode?.mode==="midnight"?(u(),_(k,{key:0},[a(' Stellt den Betriebsmodus automatisch auf einen anderen Modus um: "Mitternacht" täglich um 0:00 Uhr ')],64)):o.consumerUsage.reset_chargemode?.mode==="time"?(u(),_(k,{key:1},[a(" Stellt den Betriebsmodus automatisch auf einen anderen Modus um, einmalig zum angegebenen Zeitpunkt. ")],64)):(u(),_(k,{key:2},[a(" Stellt den Betriebsmodus nicht automatisch um. ")],64))]),_:2},1032,["model-value","onUpdate:modelValue"]),(o.consumerUsage.reset_chargemode?.mode??"never")!=="never"?(u(),_(k,{key:0},[o.consumerUsage.reset_chargemode?.mode==="time"?(u(),v(c,{key:0,title:"Datum",subtype:"date","model-value":t.resetDateParts(o).date,"onUpdate:modelValue":d=>t.setResetDate(o,d)},null,8,["model-value","onUpdate:modelValue"])):g("",!0),o.consumerUsage.reset_chargemode?.mode==="time"?(u(),v(c,{key:1,title:"Uhrzeit",subtype:"time","model-value":t.resetDateParts(o).time,"onUpdate:modelValue":d=>t.setResetTime(o,d)},null,8,["model-value","onUpdate:modelValue"])):g("",!0),i(V,{title:"Zielmodus",buttons:[{buttonValue:"instant_charging",text:"Sofort",class:"btn-outline-danger"},{buttonValue:"pv_charging",text:"PV",class:"btn-outline-success"},{buttonValue:"scheduled_charging",text:"Ziel",class:"btn-outline-primary"},{buttonValue:"eco_charging",text:"Eco",class:"btn-outline-secondary"},{buttonValue:"stop",text:"Stop",class:"btn-outline-dark"}],"model-value":o.consumerUsage.reset_chargemode?.chargemode,"onUpdate:modelValue":d=>t.updateUsage(o.id,d,"reset_chargemode.chargemode")},{help:s(()=>[...e[31]||(e[31]=[a(" Der Modus, auf den der Verbraucher umgestellt wird. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"])],64)):g("",!0),e[55]||(e[55]=p("hr",null,null,-1)),i(V,{title:"Anlauferkennung",buttons:[{buttonValue:!0,text:"Ja",class:"btn-outline-success"},{buttonValue:!1,text:"Nein",class:"btn-outline-danger"}],"model-value":o.consumerUsage.wait_for_start_active,"onUpdate:modelValue":d=>t.updateUsage(o.id,d,"wait_for_start_active")},{help:s(()=>[...e[32]||(e[32]=[a(" Die Anlauferkennung ist in den Betriebsmodi PV, Eco und Ziel aktiv und wird bei Ablauf eines Zielplans, um Mitternacht sowie beim Ändern des Betriebsmodus zurückgesetzt.",-1),p("br",null,null,-1),a(" Das Gerät wird eingeschaltet, um seine Startsequenz (z. B. Befüllen, Türverriegelung) abzuwarten. Sobald der Strom den eingestellten Minimalstrom übersteigt, wird das Gerät als aktiv erkannt, das Gerät abgeschaltet und es übernimmt der gewählte Betriebsmodus. So kann z. B. eine Waschmaschine morgens befüllt werden und läuft erst an, wenn genug Überschuss vorhanden ist. Für Geräte ohne Anlaufsequenz (z. B. Wärmepumpen) deaktivieren. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),e[56]||(e[56]=p("hr",null,null,-1)),i(R,{ref_for:!0,ref:`card-${o.id}-instant_charging`,collapsible:!0,collapsed:o.consumerUsage.chargemode!=="instant_charging",title:"Sofort",subtype:"secondary"},{default:s(()=>[o.consumerUsage.type==="suspendable_tunable"?(u(),v(f,{key:0,subtype:"info"},{default:s(()=>[...e[33]||(e[33]=[a(" Das Gerät wird sofort mit maximaler Leistung eingeschaltet. ",-1)])]),_:1})):(u(),v(f,{key:1,subtype:"info"},{default:s(()=>[...e[34]||(e[34]=[a(" Das Gerät wird sofort eingeschaltet. ",-1)])]),_:1}))]),_:2},1032,["collapsed"]),i(R,{ref_for:!0,ref:`card-${o.id}-pv_charging`,collapsible:!0,collapsed:o.consumerUsage.chargemode!=="pv_charging",title:"PV",subtype:"secondary"},{default:s(()=>[o.consumerUsage.type==="suspendable_onoff"?(u(),v(f,{key:0,subtype:"info"},{default:s(()=>[...e[35]||(e[35]=[a(" Das Gerät wird eingeschaltet, wenn der min. Betriebsstrom für die Dauer der Einschaltverzögerung überschritten wurde. Das Gerät wird frühestens wieder ausgeschaltet, wenn die minimale Betriebsdauer erreicht wurde, um sicherzustellen, dass das Programm vollständig durchlaufen kann. ",-1)])]),_:1})):o.consumerUsage.type==="suspendable_tunable"?(u(),v(f,{key:1,subtype:"info"},{default:s(()=>[...e[36]||(e[36]=[a(" Das Gerät wird eingeschaltet, wenn der min. Betriebsstrom für die Dauer der Einschaltverzögerung überschritten wurde und bei ausreichend Überschuss hoch geregelt. ",-1)])]),_:1})):(u(),v(f,{key:2,subtype:"info"},{default:s(()=>[...e[37]||(e[37]=[a(" Das Gerät wird eingeschaltet, wenn der min. Betriebsstrom für die Dauer der Einschaltverzögerung überschritten wurde. ",-1)])]),_:1}))]),_:2},1032,["collapsed"]),i(R,{ref_for:!0,ref:`card-${o.id}-scheduled_charging`,collapsible:!0,collapsed:o.consumerUsage.chargemode!=="scheduled_charging",title:"Ziel",subtype:"secondary"},{default:s(()=>[o.consumerUsage.type==="suspendable_onoff"?(u(),v(f,{key:0,subtype:"info"},{default:s(()=>[...e[38]||(e[38]=[a(" Wenn der Preis vorher günstig ist oder genug Überschuss da ist, wird vorher gestartet, sonst so, dass die Mindestlaufzeit erreicht wird. ",-1)])]),_:1})):o.consumerUsage.type==="suspendable_tunable"?(u(),v(f,{key:1,subtype:"info"},{default:s(()=>[...e[39]||(e[39]=[a(" Wenn der Preis vorher günstig ist oder genug Überschuss da ist, wird vorher gestartet, sonst mit maximaler Stromstärke, sodass die Mindestlaufzeit erreicht wird. ",-1)])]),_:1})):(u(),v(f,{key:2,subtype:"info"},{default:s(()=>[...e[40]||(e[40]=[a(" Jeder Plan führt einen Programm-Durchlauf des Geräts durch. Wenn der Preis vorher günstig ist oder genug Überschuss da ist, wird vorher gestartet, sonst zu angegebenen Uhrzeit. ",-1)])]),_:1})),e[43]||(e[43]=p("hr",null,null,-1)),i(D,null,{actions:s(()=>[i(L,{class:"bg-success clickable",title:"Neuen Zielladen-Plan hinzufügen",onClick:O(d=>t.commandAfterSavingConsumerUsage("addConsumerSchedulePlan",{consumer_id:o.id},!0),["stop"])},{default:s(()=>[i(P,{icon:["fas","plus"]})]),_:1},8,["onClick"])]),default:s(()=>[e[41]||(e[41]=a(" Ziel-Pläne ",-1))]),_:2},1024),o.consumerUsage.scheduled_charging?.plans?.length?g("",!0):(u(),v(f,{key:3,subtype:"info"},{default:s(()=>[...e[42]||(e[42]=[a(" Es wurde noch kein Zielplan angelegt. ",-1)])]),_:1})),(u(!0),_(k,null,B(o.consumerUsage.scheduled_charging?.plans??[],(d,x)=>(u(),v(K,{key:d.id,"model-value":d,"consumer-id":o.id,"onUpdate:modelValue":T=>t.updateUsage(o.id,T,`scheduled_charging.plans.${x}`),onSendCommand:e[1]||(e[1]=T=>t.commandAfterSavingConsumerUsage(T.command,T.data,!0))},null,8,["model-value","consumer-id","onUpdate:modelValue"]))),128))]),_:2},1032,["collapsed"]),i(R,{ref_for:!0,ref:`card-${o.id}-eco_charging`,collapsible:!0,collapsed:o.consumerUsage.chargemode!=="eco_charging",title:"Eco",subtype:"secondary"},{default:s(()=>[o.consumerUsage.type==="suspendable_onoff"?(u(),v(f,{key:0,subtype:"info"},{default:s(()=>[...e[44]||(e[44]=[a(" Das Gerät wird eingeschaltet, wenn der min. Betriebsstrom für die Dauer der Einschaltverzögerung überschritten wurde oder der Preis unter die Strompreisgrenze fällt. Das Gerät wird frühestens wieder ausgeschaltet, wenn die minimale Betriebsdauer erreicht wurde, um sicherzustellen, dass das Programm vollständig durchlaufen kann. ",-1)])]),_:1})):o.consumerUsage.type==="suspendable_tunable"?(u(),v(f,{key:1,subtype:"info"},{default:s(()=>[...e[45]||(e[45]=[a(" Das Gerät wird eingeschaltet, wenn der min. Betriebsstrom für die Dauer der Einschaltverzögerung überschritten wurde und bei ausreichend Überschuss hoch geregelt oder mit maximaler Leistung eingeschaltet, wenn der Preis unter die Strompreisgrenze fällt. ",-1)])]),_:1})):(u(),v(f,{key:2,subtype:"info"},{default:s(()=>[...e[46]||(e[46]=[a(" Das Gerät wird eingeschaltet, wenn der min. Betriebsstrom für die Dauer der Einschaltverzögerung überschritten wurde oder der Preis unter die Strompreisgrenze fällt. ",-1)])]),_:1})),i(z,{title:"Strompreisgrenze",unit:"ct/kWh",min:0,step:.1,precision:2,"model-value":o.consumerUsage.eco_charging.price_limit*1e5,"onUpdate:modelValue":d=>t.updateUsage(o.id,parseFloat((d/1e5).toFixed(7)),"eco_charging.price_limit")},{help:s(()=>[...e[47]||(e[47]=[a(" Eco schaltet den Verbraucher ein, sobald der variable Strompreis unter diesem Wert liegt. Dafür muss ein Strompreis-Anbieter konfiguriert sein. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),r.$store.state.mqtt["openWB/optional/ep/configured"]?g("",!0):(u(),v(f,{key:3,class:"mt-2",subtype:"warning"},{default:s(()=>[...e[48]||(e[48]=[a(" Bitte in den übergreifenden Ladeeinstellungen einen Strompreis-Anbieter konfigurieren. Ohne Strompreis-Anbieter wird das Gerät im Modus Eco nur eingeschaltet, wenn Überschuss vorhanden ist. ",-1)])]),_:1}))]),_:2},1032,["collapsed"]),e[57]||(e[57]=p("hr",null,null,-1)),i(D,null,{default:s(()=>[...e[49]||(e[49]=[a(" Zeit-Pläne ",-1)])]),_:1}),i(V,{title:"Zeit-Pläne aktiv",buttons:[{buttonValue:!0,text:"Ja",class:"btn-outline-success"},{buttonValue:!1,text:"Nein",class:"btn-outline-danger"}],"model-value":o.consumerUsage.time_charging.active,"onUpdate:modelValue":d=>t.updateUsage(o.id,d,"time_charging.active")},{help:s(()=>[...e[50]||(e[50]=[a(" Zeit-Pläne schalten das Gerät innerhalb der festgelegten Zeit-Plan ein, unabhängig vom oben gewählten Betriebsmodus. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),i(R,{collapsible:!0,collapsed:!0,subtype:"secondary"},{header:s(()=>[...e[51]||(e[51]=[a(" Zeit-Pläne ",-1)])]),actions:s(()=>[i(L,{class:"bg-success clickable",title:"Neuen Zeitladen-Plan hinzufügen",onClick:O(d=>t.commandAfterSavingConsumerUsage("addConsumerTimePlan",{consumer_id:o.id},!0),["stop"])},{default:s(()=>[i(P,{icon:["fas","plus"]})]),_:1},8,["onClick"])]),default:s(()=>[o.consumerUsage.time_charging.plans?.length?g("",!0):(u(),v(f,{key:0,subtype:"info"},{default:s(()=>[...e[52]||(e[52]=[a(" Es wurde noch kein Zeit-Plan angelegt. ",-1)])]),_:1})),(u(!0),_(k,null,B(o.consumerUsage.time_charging.plans??[],(d,x)=>(u(),v(Y,{key:d.id,"model-value":d,"consumer-id":o.id,"onUpdate:modelValue":T=>t.updateUsage(o.id,T,`time_charging.plans.${x}`),onSendCommand:e[2]||(e[2]=T=>t.commandAfterSavingConsumerUsage(T.command,T.data,!0))},null,8,["model-value","consumer-id","onUpdate:modelValue"]))),128))]),_:2},1024)],64)):g("",!0),e[71]||(e[71]=p("hr",null,null,-1)),i(D,null,{default:s(()=>[...e[58]||(e[58]=[a(" Integrierter Zähler ",-1)])]),_:1}),!t.hasIntegratedCounter[o.id]&&!t.hasExtraMeter(o.id)?(u(),v(f,{key:4,subtype:"warning"},{default:s(()=>[...e[59]||(e[59]=[a(" Der Verbraucher hat keinen integrierten Zähler und es ist kein separater Zähler verknüpft. Der Verbraucher wird anhand der eingegebenen minimalen Leistung geschaltet. ",-1)])]),_:1})):g("",!0),!t.hasIntegratedCounter[o.id]&&t.hasExtraMeter(o.id)?(u(),v(f,{key:5,subtype:"info"},{default:s(()=>[...e[60]||(e[60]=[a(" Dieser Verbraucher verfügt über keinen integrierten Zähler. Ein separater Zähler ist verknüpft. ",-1)])]),_:1})):g("",!0),t.hasIntegratedCounter[o.id]&&!t.hasExtraMeter(o.id)?(u(),v(f,{key:6,subtype:"info"},{default:s(()=>[...e[61]||(e[61]=[a(" Die Messwerte werden aus dem integrierten Zähler des Verbrauchers ausgelesen. Falls gewünscht, kann ein separater Zähler verknüpft werden, der die Messwerte des integrierten Zählers überschreibt. ",-1)])]),_:1})):g("",!0),t.hasIntegratedCounter[o.id]&&t.hasExtraMeter(o.id)?(u(),v(f,{key:7,subtype:"info"},{default:s(()=>[...e[62]||(e[62]=[a(" Ein separater Zähler ist verknüpft. Die Messwerte des integrierten Zählers werden durch die Werte des separaten Zählers überschrieben. ",-1)])]),_:1})):g("",!0),e[72]||(e[72]=p("hr",null,null,-1)),i(D,null,{default:s(()=>[...e[63]||(e[63]=[a(" Separate Leistungsmessung ",-1)])]),_:1}),i(f,{subtype:"info"},{default:s(()=>[e[65]||(e[65]=a(" Lege den Zähler zuerst unter ",-1)),i(E,{to:"/HardwareInstallation"},{default:s(()=>[...e[64]||(e[64]=[a("Geräte und Komponenten",-1)])]),_:1}),e[66]||(e[66]=a(" an und verknüpfe ihn anschließend hier mit dem Verbraucher. Der EVU-Zähler, virtuelle Zähler sowie Zähler, die bereits einem anderen Verbraucher zugeordnet sind, stehen nicht zur Auswahl. ",-1))]),_:1}),i(W,{title:"Zähler",options:t.availableCounterOptions(o.id),"model-value":t.getExtraMeter(o.id)??null,"onUpdate:modelValue":d=>t.setExtraMeter(o.id,d)},{help:s(()=>[...e[67]||(e[67]=[a(' Der ausgewählte Zähler überschreibt die Messwerte eines ggf. integrierten Zählers. Konfiguriert wird der Zähler unter "Geräte und Komponenten". ',-1)])]),_:1},8,["options","model-value","onUpdate:modelValue"])]),_:2},1024))),128)),Object.keys(t.installedConsumers).length>0?(u(),_("hr",He)):g("",!0),i(W,{modelValue:h.selectedVendor,"onUpdate:modelValue":e[3]||(e[3]=o=>h.selectedVendor=o),title:"Hersteller","not-selected":"Bitte auswählen",groups:t.vendorList},null,8,["modelValue","groups"]),i(W,{modelValue:h.consumerToAdd,"onUpdate:modelValue":[e[4]||(e[4]=o=>h.consumerToAdd=o),e[5]||(e[5]=o=>h.consumerToAdd=o)],title:"Verfügbare Verbraucher","not-selected":"Bitte auswählen",disabled:h.selectedVendor===void 0,options:t.consumerList,"model-value":h.consumerToAdd,"add-button":!0,"onInput:add":t.addConsumer},{help:s(()=>[...e[73]||(e[73]=[a(" Bitte einen Verbraucher auswählen, der hinzugefügt werden soll. ",-1)])]),_:1},8,["modelValue","disabled","options","model-value","onInput:add"])]))]),_:1}),i(X,{"form-name":"consumerConfigForm",onSave:e[6]||(e[6]=o=>r.$emit("save",r.mqttTopicsToPublish)),onReset:e[7]||(e[7]=o=>r.$emit("reset")),onDefaults:e[8]||(e[8]=o=>r.$emit("defaults"))})])])],64)}const Qe=I(Ie,[["render",Je],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/ConsumerConfig.vue"]]),et=Object.freeze(Object.defineProperty({__proto__:null,default:Qe},Symbol.toStringTag,{value:"Module"}));export{se as C,et as a}; diff --git a/web/settings/assets/ConsumerConfig-DBNAxLj7.js b/web/settings/assets/ConsumerConfig-DBNAxLj7.js deleted file mode 100644 index c8d8512708..0000000000 --- a/web/settings/assets/ConsumerConfig-DBNAxLj7.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/device-DHB2lzzG.js","assets/DeviceConfigMixin-D2g2-xc_.js","assets/vendor-BwGffBs-.js","assets/vendor-Cq9CCOuG.css","assets/device-Bmiwd3r6.js","assets/device-Chn2mfBF.js","assets/device-Du5x1ttW.js","assets/device-DCCgNY-n.js","assets/device-C-VdYO_S.js","assets/device-CUsU7GEo.js","assets/device-qM6Ow-QZ.js","assets/device-D0NVBx3_.js","assets/device-CyemJxTG.js","assets/device-CWvuKt9H.js","assets/device-Hl-FIG_-.js","assets/device-CwrJywgw.js","assets/device-BfuV33Ny.js","assets/device-CME_IE2O.js","assets/device-B2ATC70N.js","assets/device-Drtgd5P3.js","assets/device-CnnZ5HDz.js","assets/device-D93KyX8z.js","assets/device-C7upWp-n.js","assets/device-BeTvjVsI.js","assets/device-LwKhWIDy.js","assets/device-CX9F2w1R.js","assets/device-DFeFqcPa.js","assets/device-CpVp0tJY.js","assets/device-h744ldQG.js","assets/device-DxS-IR5M.js","assets/device-BjmcAYaW.js","assets/device-D7XDJsSX.js","assets/device-B7mQquwz.js","assets/device-D-HB7yYz.js","assets/device-BjH2i3dR.js","assets/device-By62nPmK.js","assets/device-BMh4AbeD.js","assets/device-D7FS6Gp8.js","assets/device-DVfJuzkE.js","assets/device-CzW27uID.js","assets/device-CaZSyW6k.js","assets/device-BKrVP95F.js","assets/device-BnxKSgH8.js","assets/device-DLmN6zPE.js","assets/device-Di9i_dA8.js","assets/device-C0xDk0ts.js","assets/device-BSXhrs1Z.js","assets/device-Bx-PcB2n.js","assets/device-CdePIfdb.js","assets/device-BnxT8JJ2.js","assets/device-DA58b9nm.js","assets/device-Bh86b_Z3.js","assets/device-DdtU9l__.js","assets/device-DQB3GNdG.js","assets/device-De_utEj4.js","assets/device-DBtCkhyu.js","assets/device-DVMfFy_D.js","assets/device-9hZ9C-_o.js","assets/device-BtMlWIlE.js","assets/device-N4SVn9jC.js","assets/device-GN_GKnJc.js","assets/device-BtAcz1pD.js","assets/device-D8Ube9qm.js","assets/device-BW_zyWYf.js","assets/device-Ct0EL_5c.js","assets/device-BObe7-fT.js","assets/device-Cae8kKJA.js","assets/device-Bm5lJk-e.js","assets/device-YYGO4kNw.js","assets/device-Dnz-lfZw.js","assets/device-o4cJfonB.js","assets/device-CBzzuPPX.js","assets/device-Du21jRtu.js","assets/device-DmTp-4Q0.js","assets/device-D97fwZ97.js","assets/device-D_Qh4d0E.js","assets/device-B2BXKGVF.js","assets/device-CFv91Hst.js","assets/device--8PbFL3K.js","assets/device-BP1KJA6p.js","assets/device-DjnKnvxd.js","assets/device-BQKDm_yK.js","assets/device-DMnSEPnd.js","assets/device-CePtNibg.js","assets/device-1rlXvG7o.js","assets/device-ap_aIxcd.js","assets/device-CZWl8ObD.js","assets/device-CB23bxqx.js","assets/device-DDCqw8SU.js","assets/device-Wiugpl0X.js","assets/device-oF88OjWr.js","assets/device-RdsB0ti4.js","assets/device-S7xoJYQU.js","assets/device-D0qPaH_i.js","assets/device-DyNIhzeY.js","assets/device-0R3TseqV.js","assets/device-DKtpZs7X.js","assets/device-hKSMI4zZ.js","assets/device-CHU8Jgeh.js","assets/consumer-CJI9u_ji.js","assets/vendor-fortawesome-DplTMxoa.js","assets/index-Bv2WLdLZ.js","assets/vendor-bootstrap-DxivtUnb.js","assets/vendor-jquery-CEMonh9Y.js","assets/vendor-bootstrap-BJ8HpIhY.css","assets/vendor-axios-C0vEeTtS.js","assets/index-xf6JJloS.css","assets/dynamic-import-helper-BheWnx7M.js","assets/consumer-gJpZm4dC.js","assets/consumer-CufH5TyZ.js","assets/consumer-B0w3Qt6u.js","assets/consumer-TVBmxOi9.js","assets/consumer-TBBdybso.js","assets/consumer-CSpVexRX.js","assets/consumer-lsBe_9nM.js","assets/consumer-D-SMWXiz.js","assets/consumer-4pKP_arC.js","assets/consumer-D0Zq1wHi.js","assets/consumer-C5PBUusA.js","assets/consumer-uGAO2_Qs.js","assets/consumer-CEs8i0Hw.js","assets/consumer-BjLvLZ31.js","assets/consumer-CMPGksUk.js","assets/consumer-cOlFnPi6.js","assets/consumer-9KeiKDAa.js","assets/consumer-DcivouOg.js","assets/consumer-CuCtayaG.js"])))=>i.map(i=>d[i]); -import{F as M,l as C,a4 as $,G as N,H as j,ai as F,aj as H,ak as J,al as Z,Y as ee,d as te}from"./vendor-fortawesome-DplTMxoa.js";import{_ as n,C as q}from"./index-Bv2WLdLZ.js";import{_ as G}from"./dynamic-import-helper-BheWnx7M.js";import{_ as I,m as b,l as u,f as _,z as v,u as s,B as a,J as A,q as i,y as p,a7 as ne,P as re,x as g,K as k,L as B,A as O,k as Q,O as oe}from"./vendor-BwGffBs-.js";const ie={props:{consumer:{type:Object,required:!0}},emits:["update:configuration"],methods:{updateConfiguration(r,e=void 0){this.$emit("update:configuration",{value:r,object:e})}}},se=I(ie,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/ConsumerConfigMixin.vue"]]),ue={name:"OpenwbConsumerConfigFallback",mixins:[se]},ae={class:"consumer-config-fallback"},le={key:1};function de(r,e,l,m,h,t){const w=b("openwb-base-alert"),y=b("openwb-base-textarea");return u(),_("div",ae,[Object.keys(r.consumer.configuration).length==0?(u(),v(w,{key:0,subtype:"info"},{default:s(()=>[a(' Der Verbraucher-Typ "'+A(r.consumer.type)+'" bietet keine Einstellungen. ',1)]),_:1})):(u(),_("div",le,[i(w,{subtype:"warning"},{default:s(()=>[a(' Es wurde keine Konfigurationsseite für den Verbraucher-Typ "'+A(r.consumer.type)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),i(y,{title:"Konfiguration",subtype:"json","model-value":r.consumer.configuration,"onUpdate:modelValue":e[0]||(e[0]=f=>r.updateConfiguration(f,"configuration"))},{help:s(()=>[...e[1]||(e[1]=[a(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),i(w,{subtype:"info"},{default:s(()=>[p("pre",null,A(JSON.stringify(r.consumer.configuration,void 0,2)),1)]),_:1})]))])}const me=I(ue,[["render",de],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/OpenwbConsumerConfigFallback.vue"]]),ce={name:"OpenwbConsumerConfigProxy",props:{consumer:{type:Object,required:!0}},emits:["update:configuration"],data(){return{SHARED_DEVICE_VENDORS:["openwb"]}},methods:{getComponent(){console.debug(`loading consumer config: ${this.consumer.vendor} / ${this.consumer.type}`);const r=this.SHARED_DEVICE_VENDORS.includes(this.consumer.vendor);return ne({loader:()=>r?G(Object.assign({"../devices/algodue/algodue/device.vue":()=>n(()=>import("./device-DHB2lzzG.js"),__vite__mapDeps([0,1,2,3])),"../devices/alpha_ess/alpha_ess/device.vue":()=>n(()=>import("./device-Bmiwd3r6.js"),__vite__mapDeps([4,1,2,3])),"../devices/ampere/ampere/device.vue":()=>n(()=>import("./device-Chn2mfBF.js"),__vite__mapDeps([5,1,2,3])),"../devices/anker/smartmeter_gen2/device.vue":()=>n(()=>import("./device-Du5x1ttW.js"),__vite__mapDeps([6,1,2,3])),"../devices/anker/solarbank/device.vue":()=>n(()=>import("./device-DCCgNY-n.js"),__vite__mapDeps([7,1,2,3])),"../devices/avm/avm/device.vue":()=>n(()=>import("./device-C-VdYO_S.js"),__vite__mapDeps([8,1,2,3])),"../devices/azzurro_zcs/azzurro_zcs/device.vue":()=>n(()=>import("./device-CUsU7GEo.js"),__vite__mapDeps([9,1,2,3])),"../devices/azzurro_zcs/azzurro_zcs_3p/device.vue":()=>n(()=>import("./device-qM6Ow-QZ.js"),__vite__mapDeps([10,1,2,3])),"../devices/batterx/batterx/device.vue":()=>n(()=>import("./device-D0NVBx3_.js"),__vite__mapDeps([11,1,2,3])),"../devices/benning/benning/device.vue":()=>n(()=>import("./device-CyemJxTG.js"),__vite__mapDeps([12,1,2,3])),"../devices/byd/byd/device.vue":()=>n(()=>import("./device-CWvuKt9H.js"),__vite__mapDeps([13,1,2,3])),"../devices/carlo_gavazzi/carlo_gavazzi/device.vue":()=>n(()=>import("./device-Hl-FIG_-.js"),__vite__mapDeps([14,1,2,3])),"../devices/chint/chint/device.vue":()=>n(()=>import("./device-CwrJywgw.js"),__vite__mapDeps([15,1,2,3])),"../devices/deye/deye/device.vue":()=>n(()=>import("./device-BfuV33Ny.js"),__vite__mapDeps([16,1,2,3])),"../devices/deye/deye_solarman/device.vue":()=>n(()=>import("./device-CME_IE2O.js"),__vite__mapDeps([17,1,2,3])),"../devices/discovergy/discovergy/device.vue":()=>n(()=>import("./device-B2ATC70N.js"),__vite__mapDeps([18,1,2,3])),"../devices/e3dc/e3dc/device.vue":()=>n(()=>import("./device-Drtgd5P3.js"),__vite__mapDeps([19,1,2,3])),"../devices/ecoflow/stream/device.vue":()=>n(()=>import("./device-CnnZ5HDz.js"),__vite__mapDeps([20,1,2,3])),"../devices/elgris/elgris/device.vue":()=>n(()=>import("./device-D93KyX8z.js"),__vite__mapDeps([21,1,2,3])),"../devices/enecess/ecomain/device.vue":()=>n(()=>import("./device-C7upWp-n.js"),__vite__mapDeps([22,1,2,3])),"../devices/enphase/enphase/device.vue":()=>n(()=>import("./device-BeTvjVsI.js"),__vite__mapDeps([23,1,2,3])),"../devices/fems/fems/device.vue":()=>n(()=>import("./device-LwKhWIDy.js"),__vite__mapDeps([24,1,2,3])),"../devices/fox_ess/fox_ess/device.vue":()=>n(()=>import("./device-CX9F2w1R.js"),__vite__mapDeps([25,1,2,3])),"../devices/fox_ess/fox_ess_h3_smart/device.vue":()=>n(()=>import("./device-DFeFqcPa.js"),__vite__mapDeps([26,1,2,3])),"../devices/fronius/fronius_http_api/device.vue":()=>n(()=>import("./device-CpVp0tJY.js"),__vite__mapDeps([27,1,2,3])),"../devices/fronius/fronius_sunspec/device.vue":()=>n(()=>import("./device-h744ldQG.js"),__vite__mapDeps([28,1,2,3])),"../devices/generic/http/device.vue":()=>n(()=>import("./device-DxS-IR5M.js"),__vite__mapDeps([29,1,2,3])),"../devices/generic/json/device.vue":()=>n(()=>import("./device-BjmcAYaW.js"),__vite__mapDeps([30,1,2,3])),"../devices/generic/modbus/device.vue":()=>n(()=>import("./device-D7XDJsSX.js"),__vite__mapDeps([31,1,2,3])),"../devices/generic/mqtt/device.vue":()=>n(()=>import("./device-B7mQquwz.js"),__vite__mapDeps([32,1,2,3])),"../devices/good_we/good_we/device.vue":()=>n(()=>import("./device-D-HB7yYz.js"),__vite__mapDeps([33,1,2,3])),"../devices/growatt/growatt/device.vue":()=>n(()=>import("./device-BjH2i3dR.js"),__vite__mapDeps([34,1,2,3])),"../devices/huawei/huawei/device.vue":()=>n(()=>import("./device-By62nPmK.js"),__vite__mapDeps([35,1,2,3])),"../devices/huawei/huawei_emma/device.vue":()=>n(()=>import("./device-BMh4AbeD.js"),__vite__mapDeps([36,1,2,3])),"../devices/huawei/huawei_smartlogger/device.vue":()=>n(()=>import("./device-D7FS6Gp8.js"),__vite__mapDeps([37,1,2,3])),"../devices/idm/idm/device.vue":()=>n(()=>import("./device-DVfJuzkE.js"),__vite__mapDeps([38,1,2,3])),"../devices/janitza/janitza/device.vue":()=>n(()=>import("./device-CzW27uID.js"),__vite__mapDeps([39,1,2,3])),"../devices/kaco/kaco_nh/device.vue":()=>n(()=>import("./device-CaZSyW6k.js"),__vite__mapDeps([40,1,2,3])),"../devices/kaco/kaco_tx/device.vue":()=>n(()=>import("./device-BKrVP95F.js"),__vite__mapDeps([41,1,2,3])),"../devices/kostal/kostal_piko/device.vue":()=>n(()=>import("./device-BnxKSgH8.js"),__vite__mapDeps([42,1,2,3])),"../devices/kostal/kostal_piko_ci/device.vue":()=>n(()=>import("./device-DLmN6zPE.js"),__vite__mapDeps([43,1,2,3])),"../devices/kostal/kostal_piko_old/device.vue":()=>n(()=>import("./device-Di9i_dA8.js"),__vite__mapDeps([44,1,2,3])),"../devices/kostal/kostal_plenticore/device.vue":()=>n(()=>import("./device-C0xDk0ts.js"),__vite__mapDeps([45,1,2,3])),"../devices/kostal/kostal_sem/device.vue":()=>n(()=>import("./device-BSXhrs1Z.js"),__vite__mapDeps([46,1,2,3])),"../devices/kostal/kostal_steca/device.vue":()=>n(()=>import("./device-Bx-PcB2n.js"),__vite__mapDeps([47,1,2,3])),"../devices/lg/lg/device.vue":()=>n(()=>import("./device-CdePIfdb.js"),__vite__mapDeps([48,1,2,3])),"../devices/marstek/venus_c_e/device.vue":()=>n(()=>import("./device-BnxT8JJ2.js"),__vite__mapDeps([49,1,2,3])),"../devices/mtec/mtec/device.vue":()=>n(()=>import("./device-DA58b9nm.js"),__vite__mapDeps([50,1,2,3])),"../devices/mystrom/mystrom/device.vue":()=>n(()=>import("./device-Bh86b_Z3.js"),__vite__mapDeps([51,1,2,3])),"../devices/nibe/nibe/device.vue":()=>n(()=>import("./device-DdtU9l__.js"),__vite__mapDeps([52,1,2,3])),"../devices/opendtu/opendtu/device.vue":()=>n(()=>import("./device-DQB3GNdG.js"),__vite__mapDeps([53,1,2,3])),"../devices/openwb/openwb_flex/device.vue":()=>n(()=>import("./device-De_utEj4.js"),__vite__mapDeps([54,1,2,3])),"../devices/openwb/openwb_flex_local/device.vue":()=>n(()=>import("./device-DBtCkhyu.js"),__vite__mapDeps([55,1,2,3])),"../devices/orno/orno/device.vue":()=>n(()=>import("./device-DVMfFy_D.js"),__vite__mapDeps([56,1,2,3])),"../devices/powerdog/powerdog/device.vue":()=>n(()=>import("./device-9hZ9C-_o.js"),__vite__mapDeps([57,1,2,3])),"../devices/powerfox/powerfox/device.vue":()=>n(()=>import("./device-BtMlWIlE.js"),__vite__mapDeps([58,1,2,3])),"../devices/qcells/qcells/device.vue":()=>n(()=>import("./device-N4SVn9jC.js"),__vite__mapDeps([59,1,2,3])),"../devices/rct/rct/device.vue":()=>n(()=>import("./device-GN_GKnJc.js"),__vite__mapDeps([60,1,2,3])),"../devices/saxpower/saxpower/device.vue":()=>n(()=>import("./device-BtAcz1pD.js"),__vite__mapDeps([61,1,2,3])),"../devices/shelly/shelly/device.vue":()=>n(()=>import("./device-D8Ube9qm.js"),__vite__mapDeps([62,1,2,3])),"../devices/siemens/siemens/device.vue":()=>n(()=>import("./device-BW_zyWYf.js"),__vite__mapDeps([63,1,2,3])),"../devices/siemens/siemens_sentron/device.vue":()=>n(()=>import("./device-Ct0EL_5c.js"),__vite__mapDeps([64,1,2,3])),"../devices/sigenergy/sigenergy/device.vue":()=>n(()=>import("./device-BObe7-fT.js"),__vite__mapDeps([65,1,2,3])),"../devices/sma/sma_sunny_boy/device.vue":()=>n(()=>import("./device-Cae8kKJA.js"),__vite__mapDeps([66,1,2,3])),"../devices/sma/sma_sunny_island/device.vue":()=>n(()=>import("./device-Bm5lJk-e.js"),__vite__mapDeps([67,1,2,3])),"../devices/sma/sma_webbox/device.vue":()=>n(()=>import("./device-YYGO4kNw.js"),__vite__mapDeps([68,1,2,3])),"../devices/smart_me/smart_me/device.vue":()=>n(()=>import("./device-Dnz-lfZw.js"),__vite__mapDeps([69,1,2,3])),"../devices/smartfox/smartfox/device.vue":()=>n(()=>import("./device-o4cJfonB.js"),__vite__mapDeps([70,1,2,3])),"../devices/sofar/sofar/device.vue":()=>n(()=>import("./device-CBzzuPPX.js"),__vite__mapDeps([71,1,2,3])),"../devices/solakon/solakon_one/device.vue":()=>n(()=>import("./device-Du21jRtu.js"),__vite__mapDeps([72,1,2,3])),"../devices/solar_log/solar_log/device.vue":()=>n(()=>import("./device-DmTp-4Q0.js"),__vite__mapDeps([73,1,2,3])),"../devices/solar_view/solar_view/device.vue":()=>n(()=>import("./device-D97fwZ97.js"),__vite__mapDeps([74,1,2,3])),"../devices/solar_watt/solar_watt/device.vue":()=>n(()=>import("./device-D_Qh4d0E.js"),__vite__mapDeps([75,1,2,3])),"../devices/solar_world/solar_world/device.vue":()=>n(()=>import("./device-B2BXKGVF.js"),__vite__mapDeps([76,1,2,3])),"../devices/solaredge/solaredge/device.vue":()=>n(()=>import("./device-CFv91Hst.js"),__vite__mapDeps([77,1,2,3])),"../devices/solarmax/solarmax/device.vue":()=>n(()=>import("./device--8PbFL3K.js"),__vite__mapDeps([78,1,2,3])),"../devices/solax/solax/device.vue":()=>n(()=>import("./device-BP1KJA6p.js"),__vite__mapDeps([79,1,2,3])),"../devices/solis/solis/device.vue":()=>n(()=>import("./device-DjnKnvxd.js"),__vite__mapDeps([80,1,2,3])),"../devices/sonnen/sonnenbatterie/device.vue":()=>n(()=>import("./device-BQKDm_yK.js"),__vite__mapDeps([81,1,2,3])),"../devices/studer/studer/device.vue":()=>n(()=>import("./device-DMnSEPnd.js"),__vite__mapDeps([82,1,2,3])),"../devices/sunenergyxt/sunenergyxt/device.vue":()=>n(()=>import("./device-CePtNibg.js"),__vite__mapDeps([83,1,2,3])),"../devices/sungrow/sungrow_ihm/device.vue":()=>n(()=>import("./device-1rlXvG7o.js"),__vite__mapDeps([84,1,2,3])),"../devices/sungrow/sungrow_micro/device.vue":()=>n(()=>import("./device-ap_aIxcd.js"),__vite__mapDeps([85,1,2,3])),"../devices/sungrow/sungrow_sg/device.vue":()=>n(()=>import("./device-CZWl8ObD.js"),__vite__mapDeps([86,1,2,3])),"../devices/sungrow/sungrow_sh/device.vue":()=>n(()=>import("./device-CB23bxqx.js"),__vite__mapDeps([87,1,2,3])),"../devices/sunways/sunways/device.vue":()=>n(()=>import("./device-DDCqw8SU.js"),__vite__mapDeps([88,1,2,3])),"../devices/tasmota/tasmota/device.vue":()=>n(()=>import("./device-Wiugpl0X.js"),__vite__mapDeps([89,1,2,3])),"../devices/tesla/tesla/device.vue":()=>n(()=>import("./device-oF88OjWr.js"),__vite__mapDeps([90,1,2,3])),"../devices/thermia/thermia/device.vue":()=>n(()=>import("./device-RdsB0ti4.js"),__vite__mapDeps([91,1,2,3])),"../devices/upower/upower/device.vue":()=>n(()=>import("./device-S7xoJYQU.js"),__vite__mapDeps([92,1,2,3])),"../devices/varta/varta/device.vue":()=>n(()=>import("./device-D0qPaH_i.js"),__vite__mapDeps([93,1,2,3])),"../devices/victron/victron/device.vue":()=>n(()=>import("./device-DyNIhzeY.js"),__vite__mapDeps([94,1,2,3])),"../devices/victron/victron_3p75ct/device.vue":()=>n(()=>import("./device-0R3TseqV.js"),__vite__mapDeps([95,1,2,3])),"../devices/vzlogger/vzlogger/device.vue":()=>n(()=>import("./device-DKtpZs7X.js"),__vite__mapDeps([96,1,2,3])),"../devices/youless/youless/device.vue":()=>n(()=>import("./device-hKSMI4zZ.js"),__vite__mapDeps([97,1,2,3])),"../devices/zendure/zendure/device.vue":()=>n(()=>import("./device-CHU8Jgeh.js"),__vite__mapDeps([98,1,2,3]))}),`../devices/${this.consumer.vendor}/${this.consumer.type}/device.vue`,5):G(Object.assign({"./askoma/askoheat/consumer.vue":()=>n(()=>import("./consumer-CJI9u_ji.js"),__vite__mapDeps([99,2,3,100,101,102,103,104,105,106,107])),"./avm/avm/consumer.vue":()=>n(()=>import("./consumer-gJpZm4dC.js"),__vite__mapDeps([108,2,3,100,101,102,103,104,105,106,107])),"./generic/dac/consumer.vue":()=>n(()=>import("./consumer-CufH5TyZ.js"),__vite__mapDeps([109,2,3,100,101,102,103,104,105,106,107])),"./generic/http/consumer.vue":()=>n(()=>import("./consumer-B0w3Qt6u.js"),__vite__mapDeps([110,2,3,100,101,102,103,104,105,106,107])),"./generic/json/consumer.vue":()=>n(()=>import("./consumer-TVBmxOi9.js"),__vite__mapDeps([111,2,3,100,101,102,103,104,105,106,107])),"./generic/mqtt/consumer.vue":()=>n(()=>import("./consumer-TBBdybso.js"),__vite__mapDeps([112,2,3,100,101,102,103,104,105,106,107])),"./idm/idm/consumer.vue":()=>n(()=>import("./consumer-CSpVexRX.js"),__vite__mapDeps([113,2,3,100,101,102,103,104,105,106,107])),"./lambda_/lambda_/consumer.vue":()=>n(()=>import("./consumer-lsBe_9nM.js"),__vite__mapDeps([114,2,3,100,101,102,103,104,105,106,107])),"./my_pv/acthor/consumer.vue":()=>n(()=>import("./consumer-D-SMWXiz.js"),__vite__mapDeps([115,2,3,100,101,102,103,104,105,106,107])),"./my_pv/elwa_e/consumer.vue":()=>n(()=>import("./consumer-4pKP_arC.js"),__vite__mapDeps([116,2,3,100,101,102,103,104,105,106,107])),"./mystrom/mystrom/consumer.vue":()=>n(()=>import("./consumer-D0Zq1wHi.js"),__vite__mapDeps([117,2,3,100,101,102,103,104,105,106,107])),"./nibe/nibe_s_series/consumer.vue":()=>n(()=>import("./consumer-C5PBUusA.js"),__vite__mapDeps([118,2,3,100,101,102,103,104,105,106,107])),"./ovum/ovum/consumer.vue":()=>n(()=>import("./consumer-uGAO2_Qs.js"),__vite__mapDeps([119,2,3,100,101,102,103,104,105,106,107])),"./ratiotherm/ratiotherm/consumer.vue":()=>n(()=>import("./consumer-CEs8i0Hw.js"),__vite__mapDeps([120,2,3,100,101,102,103,104,105,106,107])),"./shelly/shelly_em/consumer.vue":()=>n(()=>import("./consumer-BjLvLZ31.js"),__vite__mapDeps([121,2,3,100,101,102,103,104,105,106,107])),"./shelly/shelly_pm/consumer.vue":()=>n(()=>import("./consumer-CMPGksUk.js"),__vite__mapDeps([122,2,3,100,101,102,103,104,105,106,107])),"./solarfocus/vampair/consumer.vue":()=>n(()=>import("./consumer-cOlFnPi6.js"),__vite__mapDeps([123,2,3,100,101,102,103,104,105,106,107])),"./solvis/solvis/consumer.vue":()=>n(()=>import("./consumer-9KeiKDAa.js"),__vite__mapDeps([124,2,3,100,101,102,103,104,105,106,107])),"./stiebel/stiebel/consumer.vue":()=>n(()=>import("./consumer-DcivouOg.js"),__vite__mapDeps([125,2,3,100,101,102,103,104,105,106,107])),"./viessmann/viessmann_heat_pump/consumer.vue":()=>n(()=>import("./consumer-CuCtayaG.js"),__vite__mapDeps([126,2,3,100,101,102,103,104,105,106,107]))}),`./${this.consumer.vendor}/${this.consumer.type}/consumer.vue`,4),errorComponent:me})},updateConfiguration(r){this.$emit("update:configuration",r)}}};function _e(r,e,l,m,h,t){return u(),v(re(t.getComponent()),{consumer:l.consumer,"onUpdate:configuration":e[0]||(e[0]=w=>t.updateConfiguration(w))},null,40,["consumer"])}const pe=I(ce,[["render",_e],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/OpenwbConsumerConfigProxy.vue"]]);C.add($,N,j,F,H,J,Z);const ve={name:"ConsumerTimeChargingPlan",components:{FontAwesomeIcon:M},mixins:[q],props:{modelValue:{type:Object,required:!0},consumerId:{type:Number,required:!0}},emits:["update:modelValue","sendCommand"],data(){return{mqttTopics:[],showRemoveModal:!1}},computed:{plan(){return this.modelValue},minBatSocLabels(){const r=[{label:"Aus",value:null}];for(let e=5;e<=95;e+=5)r.push({label:e,value:e});return r}},methods:{copyPlan(){this.$emit("sendCommand",{command:"addConsumerTimePlan",data:{consumer_id:this.consumerId,copy:this.modelValue.id}})},removePlanModal(){this.showRemoveModal=!0},removePlan(r){this.showRemoveModal=!1,r=="confirm"&&this.$emit("sendCommand",{command:"removeConsumerTimePlan",data:{consumer_id:this.consumerId,plan:this.modelValue.id}})}}},ge={key:0},be={key:1},fe={key:2},he={key:3},Ve={key:1},ye={key:2};function Ee(r,e,l,m,h,t){const w=b("openwb-base-modal-dialog"),y=b("font-awesome-icon"),f=b("openwb-base-avatar"),V=b("openwb-base-text-input"),P=b("openwb-base-button-group-input"),L=b("openwb-base-range-input"),U=b("openwb-base-card");return u(),_(k,null,[i(w,{show:h.showRemoveModal,title:"Zeitladen-Plan löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:t.removePlan},{default:s(()=>[a(' Willst Du den Zeitladen-Plan "'+A(t.plan.name)+'" wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ',1)]),_:1},8,["show","onModalResult"]),i(U,{title:t.plan.name,collapsible:!0,collapsed:!0},{actions:s(c=>[c.collapsed==!0?(u(),_("span",{key:0,class:Q(["pill clickable",t.plan.active?"bg-success":"bg-danger"]),onClick:e[0]||(e[0]=O(E=>t.plan.active=!t.plan.active,["stop"]))},[i(y,{icon:["fas","clock"]}),a(" "+A(t.plan.time[0])+" - "+A(t.plan.time[1])+" ",1),t.plan.frequency.selected=="once"?(u(),_("span",ge,[i(y,{icon:["fas","calendar-day"]})])):g("",!0),t.plan.frequency.selected=="daily"?(u(),_("span",be,[i(y,{icon:["fas","calendar-week"]})])):g("",!0),t.plan.frequency.selected=="weekly"?(u(),_("span",fe,[i(y,{icon:["fas","calendar-alt"]})])):g("",!0),t.plan.min_bat_soc!=null?(u(),_("span",he,[i(y,{icon:["fas","car-battery"]}),a(" "+A(t.plan.min_bat_soc)+"% ",1)])):g("",!0)],2)):g("",!0),c.collapsed==!1?(u(),_("span",Ve,[i(f,{class:"bg-success clickable",title:"Zeitladen-Plan duplizieren",onClick:e[1]||(e[1]=O(E=>t.copyPlan(),["stop"]))},{default:s(()=>[i(y,{icon:["fas","copy"]})]),_:1}),i(f,{class:"bg-danger clickable ml-1",title:"Zeitladen-Plan löschen",onClick:e[2]||(e[2]=O(E=>t.removePlanModal(),["stop"]))},{default:s(()=>[i(y,{icon:["fas","trash"]})]),_:1})])):g("",!0)]),default:s(()=>[i(V,{modelValue:t.plan.name,"onUpdate:modelValue":e[3]||(e[3]=c=>t.plan.name=c),title:"Bezeichnung"},null,8,["modelValue"]),i(P,{modelValue:t.plan.active,"onUpdate:modelValue":e[4]||(e[4]=c=>t.plan.active=c),title:"Zeitplan aktiv",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}]},null,8,["modelValue"]),i(V,{modelValue:t.plan.time[0],"onUpdate:modelValue":e[5]||(e[5]=c=>t.plan.time[0]=c),title:"Zeitpunkt des Einschaltens",subtype:"time"},null,8,["modelValue"]),i(V,{modelValue:t.plan.time[1],"onUpdate:modelValue":e[6]||(e[6]=c=>t.plan.time[1]=c),title:"Zeitpunkt des Ausschaltens",subtype:"time"},null,8,["modelValue"]),i(P,{modelValue:t.plan.frequency.selected,"onUpdate:modelValue":e[7]||(e[7]=c=>t.plan.frequency.selected=c),title:"Wiederholungen",buttons:[{buttonValue:"once",text:"Einmalig",class:"btn-outline-info"},{buttonValue:"daily",text:"Täglich",class:"btn-outline-info"},{buttonValue:"weekly",text:"Wöchentlich",class:"btn-outline-info"}]},null,8,["modelValue"]),t.plan.frequency.selected=="once"?(u(),v(V,{key:0,modelValue:t.plan.frequency.once[0],"onUpdate:modelValue":e[8]||(e[8]=c=>t.plan.frequency.once[0]=c),title:"Gültig ab",subtype:"date"},null,8,["modelValue"])):g("",!0),t.plan.frequency.selected=="once"?(u(),v(V,{key:1,modelValue:t.plan.frequency.once[1],"onUpdate:modelValue":e[9]||(e[9]=c=>t.plan.frequency.once[1]=c),title:"Gültig bis",subtype:"date",min:t.plan.frequency.once[0]},null,8,["modelValue","min"])):g("",!0),t.plan.frequency.selected=="weekly"?(u(),_("div",ye,[(u(!0),_(k,null,B(r.weekdays,(c,E)=>(u(),v(P,{key:E,modelValue:t.plan.frequency.weekly[E],"onUpdate:modelValue":D=>t.plan.frequency.weekly[E]=D,title:c,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}]},null,8,["modelValue","onUpdate:modelValue","title"]))),128))])):g("",!0),e[12]||(e[12]=p("hr",null,null,-1)),i(L,{modelValue:t.plan.min_bat_soc,"onUpdate:modelValue":e[10]||(e[10]=c=>t.plan.min_bat_soc=c),title:"Zeitladen bis Speicher entladen auf",min:0,max:t.minBatSocLabels.length-1,step:1,unit:"%",labels:t.minBatSocLabels},{help:s(()=>[...e[11]||(e[11]=[a(' Zeitladen wird nur ausgeführt, solange der Speicher-SoC über diesem Wert liegt. Bei "Aus" wird der Speicher-SoC nicht berücksichtigt. Lädt die aktive Speichersteuerung gerade den Speicher, wird kein Zeitladen gestartet, da der Speicher nicht gleichzeitig geladen und entladen werden kann. ',-1)])]),_:1},8,["modelValue","max","labels"])]),_:1},8,["title"])],64)}const we=I(ve,[["render",Ee],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/ConsumerTimeChargingPlan.vue"]]);C.add(N,j,F,H,J,Z);const ke={name:"ConsumerScheduledPlan",components:{FontAwesomeIcon:M},mixins:[q],props:{modelValue:{type:Object,required:!0},consumerId:{type:Number,required:!0}},emits:["update:modelValue","sendCommand"],data(){return{mqttTopics:[],showRemoveModal:!1}},computed:{plan(){return this.modelValue}},methods:{copyPlan(){this.$emit("sendCommand",{command:"addConsumerSchedulePlan",data:{consumer_id:this.consumerId,copy:this.modelValue.id}})},removePlanModal(){this.showRemoveModal=!0},removePlan(r){this.showRemoveModal=!1,r=="confirm"&&this.$emit("sendCommand",{command:"removeConsumerSchedulePlan",data:{consumer_id:this.consumerId,plan:this.modelValue.id}})}}},Pe={key:0},De={key:1},Ae={key:2},Te={key:1},Oe={key:2};function Le(r,e,l,m,h,t){const w=b("openwb-base-modal-dialog"),y=b("font-awesome-icon"),f=b("openwb-base-avatar"),V=b("openwb-base-text-input"),P=b("openwb-base-button-group-input"),L=b("openwb-base-number-input"),U=b("openwb-base-card");return u(),_(k,null,[i(w,{show:h.showRemoveModal,title:"Zielladen-Plan löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:t.removePlan},{default:s(()=>[a(' Willst Du den Zielladen-Plan "'+A(t.plan.name)+'" wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ',1)]),_:1},8,["show","onModalResult"]),i(U,{title:t.plan.name,collapsible:!0,collapsed:!0},{actions:s(c=>[c.collapsed==!0?(u(),_("span",{key:0,class:Q(["pill clickable",t.plan.active?"bg-success":"bg-danger"]),onClick:e[0]||(e[0]=O(E=>t.plan.active=!t.plan.active,["stop"]))},[i(y,{icon:["fas","clock"]}),a(" "+A(t.plan.time)+" ",1),t.plan.frequency.selected=="once"?(u(),_("span",Pe,[i(y,{icon:["fas","calendar-day"]})])):g("",!0),t.plan.frequency.selected=="daily"?(u(),_("span",De,[i(y,{icon:["fas","calendar-week"]})])):g("",!0),t.plan.frequency.selected=="weekly"?(u(),_("span",Ae,[i(y,{icon:["fas","calendar-alt"]})])):g("",!0)],2)):g("",!0),c.collapsed==!1?(u(),_("span",Te,[i(f,{class:"bg-success clickable",title:"Zielladen-Plan duplizieren",onClick:e[1]||(e[1]=O(E=>t.copyPlan(),["stop"]))},{default:s(()=>[i(y,{icon:["fas","copy"]})]),_:1}),i(f,{class:"bg-danger clickable ml-1",title:"Zielladen-Plan löschen",onClick:e[2]||(e[2]=O(E=>t.removePlanModal(),["stop"]))},{default:s(()=>[i(y,{icon:["fas","trash"]})]),_:1})])):g("",!0)]),default:s(()=>[i(V,{modelValue:t.plan.name,"onUpdate:modelValue":e[3]||(e[3]=c=>t.plan.name=c),title:"Bezeichnung"},null,8,["modelValue"]),i(P,{modelValue:t.plan.active,"onUpdate:modelValue":e[4]||(e[4]=c=>t.plan.active=c),title:"Plan aktiv",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}]},null,8,["modelValue"]),i(V,{modelValue:t.plan.time,"onUpdate:modelValue":e[5]||(e[5]=c=>t.plan.time=c),title:"Ziel-Termin",subtype:"time"},null,8,["modelValue"]),i(P,{modelValue:t.plan.frequency.selected,"onUpdate:modelValue":e[6]||(e[6]=c=>t.plan.frequency.selected=c),title:"Wiederholungen",buttons:[{buttonValue:"once",text:"Einmalig",class:"btn-outline-info"},{buttonValue:"daily",text:"Täglich",class:"btn-outline-info"},{buttonValue:"weekly",text:"Wöchentlich",class:"btn-outline-info"}]},null,8,["modelValue"]),t.plan.frequency.selected=="once"?(u(),v(V,{key:0,modelValue:t.plan.frequency.once[0],"onUpdate:modelValue":e[7]||(e[7]=c=>t.plan.frequency.once[0]=c),title:"Gültig ab",subtype:"date"},null,8,["modelValue"])):g("",!0),t.plan.frequency.selected=="once"?(u(),v(V,{key:1,modelValue:t.plan.frequency.once[1],"onUpdate:modelValue":e[8]||(e[8]=c=>t.plan.frequency.once[1]=c),title:"Gültig bis",subtype:"date",min:t.plan.frequency.once[0]},null,8,["modelValue","min"])):g("",!0),t.plan.frequency.selected=="weekly"?(u(),_("div",Oe,[(u(!0),_(k,null,B(r.weekdays,(c,E)=>(u(),v(P,{key:E,modelValue:t.plan.frequency.weekly[E],"onUpdate:modelValue":D=>t.plan.frequency.weekly[E]=D,title:c,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}]},null,8,["modelValue","onUpdate:modelValue","title"]))),128))])):g("",!0),e[11]||(e[11]=p("hr",null,null,-1)),i(L,{title:"Gesamtlaufzeit",unit:"min",min:0,step:1,"model-value":t.plan.duration/60,"onUpdate:modelValue":e[9]||(e[9]=c=>t.plan.duration=c*60)},{help:s(()=>[...e[10]||(e[10]=[a(" Gesamte Laufzeit eines Programm-Durchlaufs des Geräts. ",-1)])]),_:1},8,["model-value"])]),_:1},8,["title"])],64)}const Re=I(ke,[["render",Le],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/ConsumerScheduledPlan.vue"]]);C.add(ee,te,Z);const Ie={name:"OpenwbConsumerConfigView",components:{FontAwesomeIcon:M,OpenwbConsumerConfigProxy:pe,ConsumerTimeChargingPlan:we,ConsumerScheduledPlan:Re},mixins:[q],emits:["sendCommand","save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/general/legacy_smarthome_active",writeable:!0},{topic:"openWB/consumer/+/module",writeable:!0},{topic:"openWB/consumer/+/config",writeable:!0},{topic:"openWB/consumer/+/usage",writeable:!0},{topic:"openWB/consumer/+/extra_meter",writeable:!0},{topic:"openWB/system/device/+/config",writeable:!1},{topic:"openWB/system/device/+/component/+/config",writeable:!1},{topic:"openWB/counter/get/hierarchy",writeable:!1},{topic:"openWB/system/configurable/consumers",writeable:!1},{topic:"openWB/optional/ep/configured",writeable:!1}],selectedVendor:void 0,consumerToAdd:void 0,showConsumerRemoveModal:!1,modalConsumer:void 0,modalConsumerName:"",CONSUMER_CONFIG_FIELDS:["connected_phases","phase_1","max_power"],commandQueue:[],consumerDefaultColor:"#6f42c1"}},computed:{installedConsumers(){const r=this.getWildcardTopics("openWB/consumer/+/module"),e=this.getWildcardTopics("openWB/consumer/+/config"),l=this.getWildcardTopics("openWB/consumer/+/usage");return Object.fromEntries(Object.entries(r).map(([m,h])=>{const t=h.id;return[m,{...h,color:h.color??this.consumerDefaultColor,config:e[`openWB/consumer/${t}/config`]??{},consumerUsage:l[`openWB/consumer/${t}/usage`]??null}]}))},vendorList:{get(){if(this.$store.state.mqtt["openWB/system/configurable/consumers"]===void 0)return[];const r=this.$store.state.mqtt["openWB/system/configurable/consumers"];return Object.entries(r).map(([,e])=>({label:e.group_name,options:Object.entries(e.vendors).map(([l,m])=>({value:l,text:m.vendor_name})).sort((l,m)=>l.text.localeCompare(m.text))})).sort((e,l)=>-e.label.localeCompare(l.label))}},consumerList:{get(){if(this.selectedVendor===void 0)return[];const r=this.$store.state.mqtt["openWB/system/configurable/consumers"];if(!r)return[];let e=null;for(const l of Object.values(r))if(l.vendors&&l.vendors[this.selectedVendor]){e=l.vendors[this.selectedVendor];break}return!e||!e.consumers?[]:Object.entries(e.consumers).map(([l,m])=>({value:[this.selectedVendor,l],text:m.consumer_name})).sort((l,m)=>l.text.localeCompare(m.text))}},componentConfigurations(){return this.getWildcardTopics("openWB/system/device/+/component/+/config")},virtualComponentIds(){const r=this.getWildcardTopics("openWB/system/device/+/config"),e=Object.values(r).filter(l=>l?.type==="virtual").map(l=>l.id);return Object.entries(this.componentConfigurations).filter(([l])=>{const m=l.match(/openWB\/system\/device\/(\d+)\/component\//);return m&&e.includes(parseInt(m[1]))}).map(([,l])=>l?.id)},evuCounterId(){const r=this.$store.state.mqtt["openWB/counter/get/hierarchy"];if(!(!Array.isArray(r)||r.length===0))return r[0]?.id},extraMeterLinks(){const r=this.getWildcardTopics("openWB/consumer/+/extra_meter");return Object.entries(r).map(([e,l])=>{const m=e.match(/openWB\/consumer\/(\d+)\/extra_meter/);return{consumerId:m?parseInt(m[1]):null,counterId:l}})},hasIntegratedCounter(){const r={};return Object.values(this.installedConsumers).forEach(e=>{r[e.id]=e?.usage?.includes("meter_only")??!1}),r},savingData(){return this.$store.state.local.savingData}},watch:{savingData(r,e){if(r===!1&&e===!0){for(;this.commandQueue.length>0;){const l=this.commandQueue.shift();console.debug(`Processing queued command: ${l.command}`),this.$emit("sendCommand",l)}this.$store.commit("storeLocal",{name:"preventSavingModal",value:!1})}}},methods:{addConsumer(){this.consumerToAdd&&this.$emit("sendCommand",{command:"addConsumer",data:{vendor:this.consumerToAdd[0],type:this.consumerToAdd[1]}})},removeConsumerModal(r,e,l){l.stopPropagation(),this.modalConsumer=r,this.modalConsumerName=e,this.showConsumerRemoveModal=!0},removeConsumer(r){this.showConsumerRemoveModal=!1,r=="confirm"&&this.$emit("sendCommand",{command:"removeConsumer",data:{consumer_id:this.modalConsumer}})},getExtraMeter(r){return this.$store.state.mqtt[`openWB/consumer/${r}/extra_meter`]},hasExtraMeter(r){return this.getExtraMeter(r)!=null},setExtraMeter(r,e){this.updateState(`openWB/consumer/${r}/extra_meter`,e??null)},availableCounterOptions(r){const e=this.extraMeterLinks.filter(m=>m.consumerId!==r&&m.counterId!=null).map(m=>m.counterId),l=Object.values(this.componentConfigurations).filter(m=>m&&this.isComponentType(m.type,"counter")).filter(m=>m.id!==this.evuCounterId).filter(m=>!this.virtualComponentIds.includes(m.id)).filter(m=>!e.includes(m.id)).map(m=>({value:m.id,text:m.name})).sort((m,h)=>m.text.localeCompare(h.text));return[{value:null,text:"kein Zähler"},...l]},isComponentType(r,e){return r.split("_").includes(e)},consumerDeviceConfiguration(r,e){const{object:l,value:m}=e,t=this.CONSUMER_CONFIG_FIELDS.includes(l)?`openWB/consumer/${r.id}/config`:`openWB/consumer/${r.id}/module`;this.updateState(t,m,l)},showModeSettings(r){const e=r.consumerUsage?.type;return e!=null&&e!=="meter_only"&&e!=="self_controlled"},showMinCurrent(r){const e=r.consumerUsage?.type;return e!=="suspendable_onoff"&&e!=="continuous"&&e!=="meter_only"&&e!=="self_controlled"},getUsageOptions(r){return Array.isArray(r.usage)?r.usage.map(e=>({value:e,text:this.usageLabels(e)})):[]},usageLabels(r){return{meter_only:"Nur Messung",suspendable_onoff:"Schaltbar (Ein/Aus)",suspendable_tunable:"Stufenlos regelbar",continuous:"Dauerverbraucher",self_controlled:"Wärmepumpe in Eigensteuerung"}[r]??r},updateUsage(r,e,l){this.updateState(`openWB/consumer/${r}/usage`,e,l)},openActiveModeCard(r,e){this.$nextTick(()=>{["instant_charging","pv_charging","eco_charging","scheduled_charging"].forEach(m=>{const h=`card-${r}-${m}`,t=this.$refs[h],w=Array.isArray(t)?t[0]:t;w&&(w.isCollapsed=m!==e)})})},resetDateParts(r){const e=r.consumerUsage?.reset_chargemode?.time,l=e?new Date(e*1e3):new Date,m=h=>String(h).padStart(2,"0");return{date:`${l.getFullYear()}-${m(l.getMonth()+1)}-${m(l.getDate())}`,time:`${m(l.getHours())}:${m(l.getMinutes())}`}},setResetDate(r,e){this.writeResetTime(r.id,e,this.resetDateParts(r).time)},setResetTime(r,e){this.writeResetTime(r.id,this.resetDateParts(r).date,e)},writeResetTime(r,e,l){if(!e||!l)return;const m=Math.floor(new Date(`${e}T${l}`).getTime()/1e3);Number.isNaN(m)||this.updateUsage(r,m,"reset_chargemode.time")},commandAfterSavingConsumerUsage(r,e,l=!1){this.commandQueue.push({command:r,data:e}),l&&(console.debug(`Hiding save modal before executing command: ${r}`),this.$store.commit("storeLocal",{name:"preventSavingModal",value:!0})),console.debug(`Saving consumer usage data before executing command: ${r}`),this.$emit("save",[`openWB/consumer/${e.consumer_id}/usage`])}}},Ue={class:"consumerConfig"},Se={name:"consumerConfigForm"},xe={key:0},Be={key:1},We={key:0},ze={key:1},Me={key:2},Ce={key:3},Ze={key:4},qe={key:5},Ge={key:0},Ne={key:1},je={key:0},Fe={key:1},He={key:1};function Je(r,e,l,m,h,t){const w=b("openwb-base-modal-dialog"),y=b("router-link"),f=b("openwb-base-alert"),V=b("openwb-base-button-group-input"),P=b("font-awesome-icon"),L=b("openwb-base-avatar"),U=b("openwb-base-color-picker"),c=b("openwb-base-text-input"),E=b("openwb-consumer-config-proxy"),D=b("openwb-base-heading"),W=b("openwb-base-select-input"),z=b("openwb-base-number-input"),R=b("openwb-base-card"),K=b("consumer-scheduled-plan"),Y=b("consumer-time-charging-plan"),X=b("openwb-base-submit-buttons");return u(),_(k,null,[i(w,{show:h.showConsumerRemoveModal,title:"Verbraucher löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:t.removeConsumer},{default:s(()=>[a(' Willst Du den Verbraucher "'+A(h.modalConsumerName)+'" wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ',1)]),_:1},8,["show","onModalResult"]),p("div",Ue,[i(f,{subtype:"info"},{default:s(()=>[e[10]||(e[10]=a(" Das Einschalten der Verbraucher richtet sich nach der Rangfolge in der Prioritäten-Steuerung (Geräte werden von oben nach unten geschaltet) und dem Mindeststrom des jeweiligen Geräts: Bei geringem Überschuss wird das erste Gerät in der Liste geschaltet, dessen Mindeststrom erreicht ist. Die Rangfolge lässt sich unter ",-1)),i(y,{to:"/LoadManagementConfiguration"},{default:s(()=>[...e[9]||(e[9]=[a(" Lastmanagement ",-1)])]),_:1}),e[11]||(e[11]=a(" anpassen. ",-1))]),_:1}),p("form",Se,[i(R,{title:"Verbraucher"},{default:s(()=>[r.$store.state.mqtt["openWB/general/extern"]===!0?(u(),_("div",xe,[i(f,{subtype:"info"},{default:s(()=>[...e[12]||(e[12]=[a(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(u(),_("div",Be,[i(V,{title:"SmartHome (veraltet)",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"model-value":r.$store.state.mqtt["openWB/general/legacy_smarthome_active"],"onUpdate:modelValue":e[0]||(e[0]=o=>r.updateState("openWB/general/legacy_smarthome_active",o))},{help:s(()=>[...e[13]||(e[13]=[a(' Aktiviert die bisherige, eigenständige SmartHome-Steuerung (Geräte über "openWB/LegacySmartHome/..."-Topics). Wer keine solchen Geräte eingerichtet hat, kann sie hier deaktivieren. ',-1)])]),_:1},8,["model-value"]),r.$store.state.mqtt["openWB/general/legacy_smarthome_active"]===!0?(u(),v(f,{key:0,subtype:"warning"},{default:s(()=>[...e[14]||(e[14]=[a(" Die alte SmartHome-Steuerung ist aktiv. Die Verbrauchersteuerung auf dieser Seite ist ihr Nachfolger. Bestehende SmartHome-Geräte funktionieren weiterhin; beim Umstieg sollte jedes Gerät aber nur in einem der beiden Systeme eingerichtet sein, da eine gleichzeitige Steuerung zu unerwünschtem Schaltverhalten führen kann. Sind alle Geräte umgezogen, kann das bisherige SmartHome hier abgeschaltet werden. ",-1)])]),_:1})):g("",!0),e[74]||(e[74]=p("hr",null,null,-1)),(u(!0),_(k,null,B(t.installedConsumers,(o,S)=>(u(),v(R,{key:S,collapsible:!0,collapsed:!0,subtype:"purple"},{header:s(()=>[i(P,{icon:["fas","plug"],class:"fa-border",style:oe({backgroundColor:o.color,color:r.getContrastColor(o.color),"--fa-border-color":r.getContrastColor(o.color)})},null,8,["style"]),a(" "+A(o?.name),1)]),actions:s(d=>[d.collapsed?g("",!0):(u(),v(L,{key:0,class:"bg-danger clickable",onClick:x=>t.removeConsumerModal(o?.id,o?.name,x)},{default:s(()=>[i(P,{icon:["fas","trash"]})]),_:1},8,["onClick"]))]),default:s(()=>[i(c,{title:"Bezeichnung",subtype:"text","model-value":o?.name,"onUpdate:modelValue":d=>r.updateState(S,d,"name")},{append:s(()=>[i(U,{class:"p-1","model-value":o.color,"default-color":h.consumerDefaultColor,"onUpdate:modelValue":d=>r.updateState(S,d,"color")},null,8,["model-value","default-color","onUpdate:modelValue"])]),_:2},1032,["model-value","onUpdate:modelValue"]),i(c,{title:"Hersteller",subtype:"text","model-value":o.info?.manufacturer,"onUpdate:modelValue":d=>r.updateState(S,d,"info.manufacturer")},{help:s(()=>[...e[15]||(e[15]=[a(" Optional: zusätzliche Information für den Systembericht. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),i(c,{title:"Modell",subtype:"text","model-value":o.info?.model,"onUpdate:modelValue":d=>r.updateState(S,d,"info.model")},{help:s(()=>[...e[16]||(e[16]=[a(" Optional: zusätzliche Information für den Systembericht. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),e[68]||(e[68]=p("hr",null,null,-1)),i(E,{consumer:o,"onUpdate:configuration":d=>t.consumerDeviceConfiguration(o,d)},null,8,["consumer","onUpdate:configuration"]),e[69]||(e[69]=p("hr",null,null,-1)),i(D,null,{default:s(()=>[...e[17]||(e[17]=[a(" Verwendung Optionen ",-1)])]),_:1}),i(W,{title:"Verwendung","not-selected":"Bitte auswählen",options:t.getUsageOptions(o),"model-value":o.consumerUsage?.type,"onUpdate:modelValue":d=>t.updateUsage(o.id,d,"type")},null,8,["options","model-value","onUpdate:modelValue"]),i(f,{subtype:"info"},{default:s(()=>[o.consumerUsage?.type==="meter_only"?(u(),_("span",We,[...e[18]||(e[18]=[p("ul",{class:"mb-0"},[p("li",null,"Es werden nur Messwerte erfasst.")],-1)])])):o.consumerUsage?.type==="suspendable_onoff"?(u(),_("span",ze,[...e[19]||(e[19]=[p("ul",{class:"mb-0"},[p("li",null,"Steuerung über Ein/Aus-Signale und Geräte mit SG-Ready-Kontakt"),p("li",null,"Unterbrechung im laufenden Betrieb möglich"),p("li",null,"Wärmepumpen, die durch die openWB gesteuert werden sollen (wie im SmartHome)")],-1)])])):o.consumerUsage?.type==="suspendable_tunable"?(u(),_("span",Me,[...e[20]||(e[20]=[p("ul",{class:"mb-0"},[p("li",null,"Steuerung durch Vorgabe einer Sollleistung"),p("li",null,"Unterbrechung im laufenden Betrieb möglich")],-1)])])):o.consumerUsage?.type==="continuous"?(u(),_("span",Ce,[...e[21]||(e[21]=[p("ul",{class:"mb-0"},[p("li",null,"Steuerung über Ein/Aus-Signale"),p("li",null,"Laufende Programme sollen nicht unterbrochen werden, z. B. Spülmaschine oder Trockner")],-1)])])):o.consumerUsage?.type==="self_controlled"?(u(),_("span",Ze,[...e[22]||(e[22]=[p("ul",{class:"mb-0"},[p("li",null,"Die Wärmepumpe übernimmt die Steuerung selbst."),p("li",null,"openWB sendet Regelparameter an die Wärmepumpe, wie zB EVU- und PV-Leistung"),p("li",null,"Zwei unabhängige Regelsysteme können zu Schwingungen und unerwünschten Effekten führen.")],-1)])])):(u(),_("span",qe,[...e[23]||(e[23]=[p("ul",{class:"mb-0"},[p("li",null,"Bitte zuerst einen Verwendungstyp auswählen.")],-1)])]))]),_:2},1024),e[70]||(e[70]=p("hr",null,null,-1)),i(D,null,{default:s(()=>[...e[24]||(e[24]=[a(" Elektrischer Anschluss ",-1)])]),_:1}),i(V,{title:"Anzahl angeschlossener Phasen",buttons:[{buttonValue:1,text:"1"},{buttonValue:2,text:"2"},{buttonValue:3,text:"3"}],"model-value":o.config?.connected_phases,"onUpdate:modelValue":d=>r.updateState(`openWB/consumer/${o.id}/config`,d,"connected_phases")},null,8,["model-value","onUpdate:modelValue"]),i(V,{title:"Phase 1 des Verbraucheranschlusses",buttons:[{buttonValue:1,text:"EVU L1"},{buttonValue:2,text:"EVU L2"},{buttonValue:3,text:"EVU L3"}],"model-value":o?.config?.phase_1,"onUpdate:modelValue":d=>r.updateState(`openWB/consumer/${o.id}/config`,d,"phase_1")},null,8,["model-value","onUpdate:modelValue"]),i(V,{title:"Im Hausverbrauch berücksichtigen?",buttons:[{buttonValue:"home_consumption",text:"Ja",class:"btn-outline-success"},{buttonValue:"auto_home_consumption",text:"Automatisch",class:"btn-outline-info"},{buttonValue:"no_home_consumption",text:"Nein",class:"btn-outline-danger"}],"model-value":o?.config?.is_home_consumption_consumer??"auto_home_consumption","onUpdate:modelValue":d=>r.updateState(`openWB/consumer/${o.id}/config`,d,"is_home_consumption_consumer")},{help:s(()=>[...e[25]||(e[25]=[a(" Ja: Verbraucher wird im Hausverbrauch berücksichtigt. Nein: Verbraucher wird nicht berücksichtigt. Automatisch: Verbraucher übernimmt die Einstellung des übergeordneten Zählers. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),t.showModeSettings(o)?(u(),v(z,{key:0,title:"Maximale Leistung",unit:"W",min:1,"model-value":o?.config?.max_power,"onUpdate:modelValue":d=>r.updateState(`openWB/consumer/${o.id}/config`,d,"max_power")},{help:s(()=>[e[26]||(e[26]=a(" Maximale Leistungsaufnahme des Geräts. ",-1)),o.consumerUsage?.type==="suspendable_tunable"?(u(),_("span",Ge," Wird im Sofort-, Zeit- und Eco-Betrieb (bei günstigem Preis) als Sollleistung verwendet. ")):(u(),_("span",Ne," Wird im Sofort-, Zeit- und Eco-Betrieb (bei günstigem Preis) als Sollleistung verwendet. Im PV- und Eco-Betrieb wird das Gerät nur eingeschaltet, wenn mindestens diese Leistung als Überschuss verfügbar ist."))]),_:2},1032,["model-value","onUpdate:modelValue"])):g("",!0),t.showMinCurrent(o)?(u(),v(z,{key:1,title:"Minimaler Betriebsstrom",unit:"A",min:0,step:.1,"model-value":o.config?.min_current,"onUpdate:modelValue":d=>r.updateState(`openWB/consumer/${o.id}/config`,d,"min_current")},{help:s(()=>[...e[27]||(e[27]=[a(" Mindeststrom, den das Gerät zum Betrieb benötigt. Im PV- und Eco-Betrieb wird das Gerät nur eingeschaltet, wenn mindestens dieser Strom als Überschuss verfügbar ist. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"])):g("",!0),t.showModeSettings(o)?(u(),v(z,{key:2,title:o.consumerUsage?.type==="continuous"?"Minimale Programmdauer (vom längsten Programm)":"Minimales Regelintervall",unit:"min",min:0,step:.1,"model-value":o.config?.min_interval!=null?parseFloat((o.config.min_interval/60).toFixed(2)):null,"onUpdate:modelValue":d=>r.updateState(`openWB/consumer/${o.id}/config`,parseFloat((d*60).toFixed(0)),"min_interval")},{help:s(()=>[o.consumerUsage?.type==="continuous"?(u(),_("span",je," Mindestlaufzeit, die der Verbraucher nach dem Einschalten eingeschaltet bleibt. Auf die Dauer des längsten Programms einstellen, damit ein gestartetes Programm vollständig durchlaufen kann. ")):(u(),_("span",Fe," Mindestzeit, die der Verbraucher in einem Schaltzustand bleibt, bevor neu geregelt wird. Träge Geräte (z. B. Wärmepumpen) reagieren langsam und benötigen hier größere Werte. "))]),_:2},1032,["title","model-value","onUpdate:modelValue"])):g("",!0),t.showModeSettings(o)?(u(),_(k,{key:3},[e[53]||(e[53]=p("hr",null,null,-1)),i(D,null,{default:s(()=>[...e[28]||(e[28]=[a(" Betriebsmodus ",-1)])]),_:1}),i(V,{title:"Betriebsmodus",buttons:[{buttonValue:"instant_charging",text:"Sofort",class:"btn-outline-danger"},{buttonValue:"pv_charging",text:"PV",class:"btn-outline-success"},{buttonValue:"scheduled_charging",text:"Ziel",class:"btn-outline-primary"},{buttonValue:"eco_charging",text:"Eco",class:"btn-outline-secondary"},{buttonValue:"stop",text:"Stop",class:"btn-outline-dark"}],"model-value":o.consumerUsage.chargemode,"onUpdate:modelValue":d=>t.updateUsage(o.id,d,"chargemode"),onButtonClick:d=>t.openActiveModeCard(o.id,d)},{help:s(()=>[...e[29]||(e[29]=[a(" Sofort = dauerhaft an, Stop = dauerhaft aus. PV, Eco und Ziel schalten den Verbraucher nach Überschuss, Strompreis bzw. Zeitplan. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue","onButtonClick"]),e[54]||(e[54]=p("hr",null,null,-1)),i(D,null,{default:s(()=>[...e[30]||(e[30]=[a(" Betriebsmodus umstellen ",-1)])]),_:1}),i(V,{title:"Umstellen",buttons:[{buttonValue:"never",text:"Nie",class:"btn-outline-secondary"},{buttonValue:"midnight",text:"Mitternacht",class:"btn-outline-info"},{buttonValue:"time",text:"Zeitpunkt",class:"btn-outline-info"}],"model-value":o.consumerUsage.reset_chargemode?.mode??"never","onUpdate:modelValue":d=>t.updateUsage(o.id,d,"reset_chargemode.mode")},{help:s(()=>[o.consumerUsage.reset_chargemode?.mode==="midnight"?(u(),_(k,{key:0},[a(' Stellt den Betriebsmodus automatisch auf einen anderen Modus um: "Mitternacht" täglich um 0:00 Uhr ')],64)):o.consumerUsage.reset_chargemode?.mode==="time"?(u(),_(k,{key:1},[a(" Stellt den Betriebsmodus automatisch auf einen anderen Modus um, einmalig zum angegebenen Zeitpunkt. ")],64)):(u(),_(k,{key:2},[a(" Stellt den Betriebsmodus nicht automatisch um. ")],64))]),_:2},1032,["model-value","onUpdate:modelValue"]),(o.consumerUsage.reset_chargemode?.mode??"never")!=="never"?(u(),_(k,{key:0},[o.consumerUsage.reset_chargemode?.mode==="time"?(u(),v(c,{key:0,title:"Datum",subtype:"date","model-value":t.resetDateParts(o).date,"onUpdate:modelValue":d=>t.setResetDate(o,d)},null,8,["model-value","onUpdate:modelValue"])):g("",!0),o.consumerUsage.reset_chargemode?.mode==="time"?(u(),v(c,{key:1,title:"Uhrzeit",subtype:"time","model-value":t.resetDateParts(o).time,"onUpdate:modelValue":d=>t.setResetTime(o,d)},null,8,["model-value","onUpdate:modelValue"])):g("",!0),i(V,{title:"Zielmodus",buttons:[{buttonValue:"instant_charging",text:"Sofort",class:"btn-outline-danger"},{buttonValue:"pv_charging",text:"PV",class:"btn-outline-success"},{buttonValue:"scheduled_charging",text:"Ziel",class:"btn-outline-primary"},{buttonValue:"eco_charging",text:"Eco",class:"btn-outline-secondary"},{buttonValue:"stop",text:"Stop",class:"btn-outline-dark"}],"model-value":o.consumerUsage.reset_chargemode?.chargemode,"onUpdate:modelValue":d=>t.updateUsage(o.id,d,"reset_chargemode.chargemode")},{help:s(()=>[...e[31]||(e[31]=[a(" Der Modus, auf den der Verbraucher umgestellt wird. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"])],64)):g("",!0),e[55]||(e[55]=p("hr",null,null,-1)),i(V,{title:"Anlauferkennung",buttons:[{buttonValue:!0,text:"Ja",class:"btn-outline-success"},{buttonValue:!1,text:"Nein",class:"btn-outline-danger"}],"model-value":o.consumerUsage.wait_for_start_active,"onUpdate:modelValue":d=>t.updateUsage(o.id,d,"wait_for_start_active")},{help:s(()=>[...e[32]||(e[32]=[a(" Die Anlauferkennung ist in den Betriebsmodi PV, Eco und Ziel aktiv und wird bei Ablauf eines Zielplans, um Mitternacht sowie beim Ändern des Betriebsmodus zurückgesetzt.",-1),p("br",null,null,-1),a(" Das Gerät wird eingeschaltet, um seine Startsequenz (z. B. Befüllen, Türverriegelung) abzuwarten. Sobald der Strom den eingestellten Minimalstrom übersteigt, wird das Gerät als aktiv erkannt, das Gerät abgeschaltet und es übernimmt der gewählte Betriebsmodus. So kann z. B. eine Waschmaschine morgens befüllt werden und läuft erst an, wenn genug Überschuss vorhanden ist. Für Geräte ohne Anlaufsequenz (z. B. Wärmepumpen) deaktivieren. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),e[56]||(e[56]=p("hr",null,null,-1)),i(R,{ref_for:!0,ref:`card-${o.id}-instant_charging`,collapsible:!0,collapsed:o.consumerUsage.chargemode!=="instant_charging",title:"Sofort",subtype:"secondary"},{default:s(()=>[o.consumerUsage.type==="suspendable_tunable"?(u(),v(f,{key:0,subtype:"info"},{default:s(()=>[...e[33]||(e[33]=[a(" Das Gerät wird sofort mit maximaler Leistung eingeschaltet. ",-1)])]),_:1})):(u(),v(f,{key:1,subtype:"info"},{default:s(()=>[...e[34]||(e[34]=[a(" Das Gerät wird sofort eingeschaltet. ",-1)])]),_:1}))]),_:2},1032,["collapsed"]),i(R,{ref_for:!0,ref:`card-${o.id}-pv_charging`,collapsible:!0,collapsed:o.consumerUsage.chargemode!=="pv_charging",title:"PV",subtype:"secondary"},{default:s(()=>[o.consumerUsage.type==="suspendable_onoff"?(u(),v(f,{key:0,subtype:"info"},{default:s(()=>[...e[35]||(e[35]=[a(" Das Gerät wird eingeschaltet, wenn der min. Betriebsstrom für die Dauer der Einschaltverzögerung überschritten wurde. Das Gerät wird frühestens wieder ausgeschaltet, wenn die minimale Betriebsdauer erreicht wurde, um sicherzustellen, dass das Programm vollständig durchlaufen kann. ",-1)])]),_:1})):o.consumerUsage.type==="suspendable_tunable"?(u(),v(f,{key:1,subtype:"info"},{default:s(()=>[...e[36]||(e[36]=[a(" Das Gerät wird eingeschaltet, wenn der min. Betriebsstrom für die Dauer der Einschaltverzögerung überschritten wurde und bei ausreichend Überschuss hoch geregelt. ",-1)])]),_:1})):(u(),v(f,{key:2,subtype:"info"},{default:s(()=>[...e[37]||(e[37]=[a(" Das Gerät wird eingeschaltet, wenn der min. Betriebsstrom für die Dauer der Einschaltverzögerung überschritten wurde. ",-1)])]),_:1}))]),_:2},1032,["collapsed"]),i(R,{ref_for:!0,ref:`card-${o.id}-scheduled_charging`,collapsible:!0,collapsed:o.consumerUsage.chargemode!=="scheduled_charging",title:"Ziel",subtype:"secondary"},{default:s(()=>[o.consumerUsage.type==="suspendable_onoff"?(u(),v(f,{key:0,subtype:"info"},{default:s(()=>[...e[38]||(e[38]=[a(" Wenn der Preis vorher günstig ist oder genug Überschuss da ist, wird vorher gestartet, sonst so, dass die Mindestlaufzeit erreicht wird. ",-1)])]),_:1})):o.consumerUsage.type==="suspendable_tunable"?(u(),v(f,{key:1,subtype:"info"},{default:s(()=>[...e[39]||(e[39]=[a(" Wenn der Preis vorher günstig ist oder genug Überschuss da ist, wird vorher gestartet, sonst mit maximaler Stromstärke, sodass die Mindestlaufzeit erreicht wird. ",-1)])]),_:1})):(u(),v(f,{key:2,subtype:"info"},{default:s(()=>[...e[40]||(e[40]=[a(" Jeder Plan führt einen Programm-Durchlauf des Geräts durch. Wenn der Preis vorher günstig ist oder genug Überschuss da ist, wird vorher gestartet, sonst zu angegebenen Uhrzeit. ",-1)])]),_:1})),e[43]||(e[43]=p("hr",null,null,-1)),i(D,null,{actions:s(()=>[i(L,{class:"bg-success clickable",title:"Neuen Zielladen-Plan hinzufügen",onClick:O(d=>t.commandAfterSavingConsumerUsage("addConsumerSchedulePlan",{consumer_id:o.id},!0),["stop"])},{default:s(()=>[i(P,{icon:["fas","plus"]})]),_:1},8,["onClick"])]),default:s(()=>[e[41]||(e[41]=a(" Ziel-Pläne ",-1))]),_:2},1024),o.consumerUsage.scheduled_charging?.plans?.length?g("",!0):(u(),v(f,{key:3,subtype:"info"},{default:s(()=>[...e[42]||(e[42]=[a(" Es wurde noch kein Zielplan angelegt. ",-1)])]),_:1})),(u(!0),_(k,null,B(o.consumerUsage.scheduled_charging?.plans??[],(d,x)=>(u(),v(K,{key:d.id,"model-value":d,"consumer-id":o.id,"onUpdate:modelValue":T=>t.updateUsage(o.id,T,`scheduled_charging.plans.${x}`),onSendCommand:e[1]||(e[1]=T=>t.commandAfterSavingConsumerUsage(T.command,T.data,!0))},null,8,["model-value","consumer-id","onUpdate:modelValue"]))),128))]),_:2},1032,["collapsed"]),i(R,{ref_for:!0,ref:`card-${o.id}-eco_charging`,collapsible:!0,collapsed:o.consumerUsage.chargemode!=="eco_charging",title:"Eco",subtype:"secondary"},{default:s(()=>[o.consumerUsage.type==="suspendable_onoff"?(u(),v(f,{key:0,subtype:"info"},{default:s(()=>[...e[44]||(e[44]=[a(" Das Gerät wird eingeschaltet, wenn der min. Betriebsstrom für die Dauer der Einschaltverzögerung überschritten wurde oder der Preis unter die Strompreisgrenze fällt. Das Gerät wird frühestens wieder ausgeschaltet, wenn die minimale Betriebsdauer erreicht wurde, um sicherzustellen, dass das Programm vollständig durchlaufen kann. ",-1)])]),_:1})):o.consumerUsage.type==="suspendable_tunable"?(u(),v(f,{key:1,subtype:"info"},{default:s(()=>[...e[45]||(e[45]=[a(" Das Gerät wird eingeschaltet, wenn der min. Betriebsstrom für die Dauer der Einschaltverzögerung überschritten wurde und bei ausreichend Überschuss hoch geregelt oder mit maximaler Leistung eingeschaltet, wenn der Preis unter die Strompreisgrenze fällt. ",-1)])]),_:1})):(u(),v(f,{key:2,subtype:"info"},{default:s(()=>[...e[46]||(e[46]=[a(" Das Gerät wird eingeschaltet, wenn der min. Betriebsstrom für die Dauer der Einschaltverzögerung überschritten wurde oder der Preis unter die Strompreisgrenze fällt. ",-1)])]),_:1})),i(z,{title:"Strompreisgrenze",unit:"ct/kWh",min:0,step:.1,precision:2,"model-value":o.consumerUsage.eco_charging.price_limit*1e5,"onUpdate:modelValue":d=>t.updateUsage(o.id,parseFloat((d/1e5).toFixed(7)),"eco_charging.price_limit")},{help:s(()=>[...e[47]||(e[47]=[a(" Eco schaltet den Verbraucher ein, sobald der variable Strompreis unter diesem Wert liegt. Dafür muss ein Strompreis-Anbieter konfiguriert sein. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),r.$store.state.mqtt["openWB/optional/ep/configured"]?g("",!0):(u(),v(f,{key:3,class:"mt-2",subtype:"warning"},{default:s(()=>[...e[48]||(e[48]=[a(" Bitte in den übergreifenden Ladeeinstellungen einen Strompreis-Anbieter konfigurieren. Ohne Strompreis-Anbieter wird das Gerät im Modus Eco nur eingeschaltet, wenn Überschuss vorhanden ist. ",-1)])]),_:1}))]),_:2},1032,["collapsed"]),e[57]||(e[57]=p("hr",null,null,-1)),i(D,null,{default:s(()=>[...e[49]||(e[49]=[a(" Zeit-Pläne ",-1)])]),_:1}),i(V,{title:"Zeit-Pläne aktiv",buttons:[{buttonValue:!0,text:"Ja",class:"btn-outline-success"},{buttonValue:!1,text:"Nein",class:"btn-outline-danger"}],"model-value":o.consumerUsage.time_charging.active,"onUpdate:modelValue":d=>t.updateUsage(o.id,d,"time_charging.active")},{help:s(()=>[...e[50]||(e[50]=[a(" Zeit-Pläne schalten das Gerät innerhalb der festgelegten Zeit-Plan ein, unabhängig vom oben gewählten Betriebsmodus. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),i(R,{collapsible:!0,collapsed:!0,subtype:"secondary"},{header:s(()=>[...e[51]||(e[51]=[a(" Zeit-Pläne ",-1)])]),actions:s(()=>[i(L,{class:"bg-success clickable",title:"Neuen Zeitladen-Plan hinzufügen",onClick:O(d=>t.commandAfterSavingConsumerUsage("addConsumerTimePlan",{consumer_id:o.id},!0),["stop"])},{default:s(()=>[i(P,{icon:["fas","plus"]})]),_:1},8,["onClick"])]),default:s(()=>[o.consumerUsage.time_charging.plans?.length?g("",!0):(u(),v(f,{key:0,subtype:"info"},{default:s(()=>[...e[52]||(e[52]=[a(" Es wurde noch kein Zeit-Plan angelegt. ",-1)])]),_:1})),(u(!0),_(k,null,B(o.consumerUsage.time_charging.plans??[],(d,x)=>(u(),v(Y,{key:d.id,"model-value":d,"consumer-id":o.id,"onUpdate:modelValue":T=>t.updateUsage(o.id,T,`time_charging.plans.${x}`),onSendCommand:e[2]||(e[2]=T=>t.commandAfterSavingConsumerUsage(T.command,T.data,!0))},null,8,["model-value","consumer-id","onUpdate:modelValue"]))),128))]),_:2},1024)],64)):g("",!0),e[71]||(e[71]=p("hr",null,null,-1)),i(D,null,{default:s(()=>[...e[58]||(e[58]=[a(" Integrierter Zähler ",-1)])]),_:1}),!t.hasIntegratedCounter[o.id]&&!t.hasExtraMeter(o.id)?(u(),v(f,{key:4,subtype:"warning"},{default:s(()=>[...e[59]||(e[59]=[a(" Der Verbraucher hat keinen integrierten Zähler und es ist kein separater Zähler verknüpft. Der Verbraucher wird anhand der eingegebenen minimalen Leistung geschaltet. ",-1)])]),_:1})):g("",!0),!t.hasIntegratedCounter[o.id]&&t.hasExtraMeter(o.id)?(u(),v(f,{key:5,subtype:"info"},{default:s(()=>[...e[60]||(e[60]=[a(" Dieser Verbraucher verfügt über keinen integrierten Zähler. Ein separater Zähler ist verknüpft. ",-1)])]),_:1})):g("",!0),t.hasIntegratedCounter[o.id]&&!t.hasExtraMeter(o.id)?(u(),v(f,{key:6,subtype:"info"},{default:s(()=>[...e[61]||(e[61]=[a(" Die Messwerte werden aus dem integrierten Zähler des Verbrauchers ausgelesen. Falls gewünscht, kann ein separater Zähler verknüpft werden, der die Messwerte des integrierten Zählers überschreibt. ",-1)])]),_:1})):g("",!0),t.hasIntegratedCounter[o.id]&&t.hasExtraMeter(o.id)?(u(),v(f,{key:7,subtype:"info"},{default:s(()=>[...e[62]||(e[62]=[a(" Ein separater Zähler ist verknüpft. Die Messwerte des integrierten Zählers werden durch die Werte des separaten Zählers überschrieben. ",-1)])]),_:1})):g("",!0),e[72]||(e[72]=p("hr",null,null,-1)),i(D,null,{default:s(()=>[...e[63]||(e[63]=[a(" Separate Leistungsmessung ",-1)])]),_:1}),i(f,{subtype:"info"},{default:s(()=>[e[65]||(e[65]=a(" Lege den Zähler zuerst unter ",-1)),i(y,{to:"/HardwareInstallation"},{default:s(()=>[...e[64]||(e[64]=[a("Geräte und Komponenten",-1)])]),_:1}),e[66]||(e[66]=a(" an und verknüpfe ihn anschließend hier mit dem Verbraucher. Der EVU-Zähler, virtuelle Zähler sowie Zähler, die bereits einem anderen Verbraucher zugeordnet sind, stehen nicht zur Auswahl. ",-1))]),_:1}),i(W,{title:"Zähler",options:t.availableCounterOptions(o.id),"model-value":t.getExtraMeter(o.id)??null,"onUpdate:modelValue":d=>t.setExtraMeter(o.id,d)},{help:s(()=>[...e[67]||(e[67]=[a(' Der ausgewählte Zähler überschreibt die Messwerte eines ggf. integrierten Zählers. Konfiguriert wird der Zähler unter "Geräte und Komponenten". ',-1)])]),_:1},8,["options","model-value","onUpdate:modelValue"])]),_:2},1024))),128)),Object.keys(t.installedConsumers).length>0?(u(),_("hr",He)):g("",!0),i(W,{modelValue:h.selectedVendor,"onUpdate:modelValue":e[3]||(e[3]=o=>h.selectedVendor=o),title:"Hersteller","not-selected":"Bitte auswählen",groups:t.vendorList},null,8,["modelValue","groups"]),i(W,{modelValue:h.consumerToAdd,"onUpdate:modelValue":[e[4]||(e[4]=o=>h.consumerToAdd=o),e[5]||(e[5]=o=>h.consumerToAdd=o)],title:"Verfügbare Verbraucher","not-selected":"Bitte auswählen",disabled:h.selectedVendor===void 0,options:t.consumerList,"model-value":h.consumerToAdd,"add-button":!0,"onInput:add":t.addConsumer},{help:s(()=>[...e[73]||(e[73]=[a(" Bitte einen Verbraucher auswählen, der hinzugefügt werden soll. ",-1)])]),_:1},8,["modelValue","disabled","options","model-value","onInput:add"])]))]),_:1}),i(X,{"form-name":"consumerConfigForm",onSave:e[6]||(e[6]=o=>r.$emit("save",r.mqttTopicsToPublish)),onReset:e[7]||(e[7]=o=>r.$emit("reset")),onDefaults:e[8]||(e[8]=o=>r.$emit("defaults"))})])])],64)}const Qe=I(Ie,[["render",Je],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/ConsumerConfig.vue"]]),et=Object.freeze(Object.defineProperty({__proto__:null,default:Qe},Symbol.toStringTag,{value:"Module"}));export{se as C,et as a}; diff --git a/web/settings/assets/DataManagement-CkfxmcJu.js b/web/settings/assets/DataManagement-CnuBQnBT.js similarity index 97% rename from web/settings/assets/DataManagement-CkfxmcJu.js rename to web/settings/assets/DataManagement-CnuBQnBT.js index 25af2c02ab..c6fa95644d 100644 --- a/web/settings/assets/DataManagement-CkfxmcJu.js +++ b/web/settings/assets/DataManagement-CnuBQnBT.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/backup_cloud-B9sEmM_b.js","assets/vendor-BwGffBs-.js","assets/vendor-Cq9CCOuG.css","assets/vendor-fortawesome-DplTMxoa.js","assets/index-Bv2WLdLZ.js","assets/vendor-bootstrap-DxivtUnb.js","assets/vendor-jquery-CEMonh9Y.js","assets/vendor-bootstrap-BJ8HpIhY.css","assets/vendor-axios-C0vEeTtS.js","assets/index-xf6JJloS.css","assets/SystemVersion-eCZ4XHiC.js","assets/dynamic-import-helper-BheWnx7M.js","assets/backup_cloud-_r5i9yKm.js","assets/backup_cloud-BlnBFHza.js","assets/backup_cloud-CmEgo92Y.js","assets/monitoring-Cgm9-SlF.js"])))=>i.map(i=>d[i]); -import{F as A,l as P,ac as L,ad as T,aD as H,aE as N,aF as K,aG as I,aH as G}from"./vendor-fortawesome-DplTMxoa.js";import{_ as B,C as J}from"./index-Bv2WLdLZ.js";import{S as Z}from"./SystemVersion-eCZ4XHiC.js";import{_ as E}from"./dynamic-import-helper-BheWnx7M.js";import{_ as C,m,l as d,f as g,z as h,u as i,B as o,J as f,q as n,y as s,a7 as j,P as R,K as M,x as k,k as W,L as V,D as z}from"./vendor-BwGffBs-.js";const Q={props:{backupCloud:{type:Object,required:!0}},emits:["update:configuration","sendCommand"],methods:{updateConfiguration(t,e=void 0){this.$emit("update:configuration",{value:t,object:e})},sendSystemCommand(t,e={}){this.$emit("sendCommand",{command:t,data:e})}}},X=C(Q,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/backup_clouds/BackupCloudConfigMixin.vue"]]),Y={name:"BackupCloudConfigFallback",mixins:[X]},ee={class:"backup-cloud-fallback"},te={key:1};function ne(t,e,r,y,l,u){const p=m("openwb-base-alert"),c=m("openwb-base-textarea");return d(),g("div",ee,[Object.keys(t.backupCloud.configuration).length==0?(d(),h(p,{key:0,subtype:"info"},{default:i(()=>[o(' Die Backup-Cloud "'+f(t.backupCloud.name)+'" bietet keine Einstellungen. ',1)]),_:1})):(d(),g("div",te,[n(p,{subtype:"warning"},{default:i(()=>[o(' Es wurde keine Konfigurationsseite für die Backup-Cloud "'+f(t.backupCloud.name)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),n(c,{title:"Konfiguration",subtype:"json","model-value":t.backupCloud.configuration,"onUpdate:modelValue":e[0]||(e[0]=b=>t.updateConfiguration(b,"configuration"))},{help:i(()=>[...e[1]||(e[1]=[o(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),n(p,{subtype:"info"},{default:i(()=>[s("pre",null,f(JSON.stringify(t.backupCloud.configuration,void 0,2)),1)]),_:1})]))])}const oe=C(Y,[["render",ne],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/backup_clouds/OpenwbBackupCloudConfigFallback.vue"]]);P.add(L,T);const ie={name:"OpenwbBackupCloudProxy",components:{FontAwesomeIcon:A},props:{backupCloud:{type:Object,required:!0}},emits:["update:configuration","sendCommand"],methods:{getBackupCloudComponent(){return console.debug(`loading backup cloud: ${this.backupCloud.type}`),j({loader:()=>E(Object.assign({"./nextcloud/backup_cloud.vue":()=>B(()=>import("./backup_cloud-B9sEmM_b.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])),"./nfs/backup_cloud.vue":()=>B(()=>import("./backup_cloud-_r5i9yKm.js"),__vite__mapDeps([12,1,2,3,4,5,6,7,8,9,10,11])),"./onedrive/backup_cloud.vue":()=>B(()=>import("./backup_cloud-BlnBFHza.js"),__vite__mapDeps([13,1,2,3,4,5,6,7,8,9,10,11])),"./samba/backup_cloud.vue":()=>B(()=>import("./backup_cloud-CmEgo92Y.js"),__vite__mapDeps([14,1,2,3,4,5,6,7,8,9,10,11]))}),`./${this.backupCloud.type}/backup_cloud.vue`,3),errorComponent:oe})},updateConfiguration(t){this.$emit("update:configuration",t)},sendCommand(t){this.$emit("sendCommand",t)}}};function se(t,e,r,y,l,u){const p=m("font-awesome-icon"),c=m("openwb-base-alert"),b=m("openwb-base-heading");return d(),g(M,null,[r.backupCloud.official?(d(),h(c,{key:0,subtype:"success"},{default:i(()=>[n(p,{icon:["fas","certificate"]}),o(' Das ausgewählte Backup-Cloud Modul "'+f(r.backupCloud.name)+'" wird von openWB gepflegt. ',1)]),_:1})):(d(),h(c,{key:1,subtype:"info"},{default:i(()=>[n(p,{icon:["fas","people-group"]}),o(' Das ausgewählte Backup-Cloud Modul "'+f(r.backupCloud.name)+'" wird in unserer Community gepflegt. Rückfragen oder Probleme bitte im Forum diskutieren. ',1)]),_:1})),n(b,null,{default:i(()=>[o(' Einstellungen für Backup-Cloud Modul "'+f(r.backupCloud.name)+'" ',1)]),_:1}),(d(),h(R(u.getBackupCloudComponent()),{"backup-cloud":r.backupCloud,"onUpdate:configuration":e[0]||(e[0]=w=>u.updateConfiguration(w)),onSendCommand:e[1]||(e[1]=w=>u.sendCommand(w))},null,40,["backup-cloud"]))],64)}const ae=C(ie,[["render",se],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/backup_clouds/OpenwbBackupCloudProxy.vue"]]),re={props:{monitoring:{type:Object,required:!0}},emits:["update:configuration"],methods:{updateConfiguration(t,e=void 0){this.$emit("update:configuration",{value:t,object:e})}}},le=C(re,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/monitoring/MonitoringConfigMixin.vue"]]),ue={name:"MonitoringConfigFallback",mixins:[le]},de={class:"monitoring-fallback"},pe={key:1};function ce(t,e,r,y,l,u){const p=m("openwb-base-alert"),c=m("openwb-base-textarea");return d(),g("div",de,[Object.keys(t.monitoring.configuration).length==0?(d(),h(p,{key:0,subtype:"info"},{default:i(()=>[o(' Der Anbieter "'+f(t.monitoring.name)+'" bietet keine Einstellungen. ',1)]),_:1})):(d(),g("div",pe,[n(p,{subtype:"warning"},{default:i(()=>[o(' Es wurde keine Konfigurationsseite für den Anbieter "'+f(t.monitoring.name)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),n(c,{title:"Konfiguration",subtype:"json","model-value":t.monitoring.configuration,"onUpdate:modelValue":e[0]||(e[0]=b=>t.updateConfiguration(b,"configuration"))},{help:i(()=>[...e[1]||(e[1]=[o(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),n(p,{subtype:"info"},{default:i(()=>[s("pre",null,f(JSON.stringify(t.monitoring.configuration,void 0,2)),1)]),_:1})]))])}const me=C(ue,[["render",ce],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/monitoring/OpenwbMonitoringConfigFallback.vue"]]);P.add(L,T);const ge={name:"OpenwbMonitoringProxy",components:{FontAwesomeIcon:A},props:{monitoring:{type:Object,required:!0}},emits:["update:configuration"],methods:{getMonitoringComponent(){return console.debug(`loading monitoring: ${this.monitoring.type}`),j({loader:()=>E(Object.assign({"./zabbix/monitoring.vue":()=>B(()=>import("./monitoring-Cgm9-SlF.js"),__vite__mapDeps([15,1,2,3,4,5,6,7,8,9,10,11]))}),`./${this.monitoring.type}/monitoring.vue`,3),errorComponent:me})},updateConfiguration(t){this.$emit("update:configuration",t)}}};function fe(t,e,r,y,l,u){const p=m("font-awesome-icon"),c=m("openwb-base-alert"),b=m("openwb-base-heading");return d(),g(M,null,[r.monitoring.official?(d(),h(c,{key:0,subtype:"success"},{default:i(()=>[n(p,{icon:["fas","certificate"]}),o(' Das ausgewählte Monitoring Modul "'+f(r.monitoring.name)+'" wird von openWB gepflegt. ',1)]),_:1})):(d(),h(c,{key:1,subtype:"info"},{default:i(()=>[n(p,{icon:["fas","people-group"]}),o(' Das ausgewählte Monitoring Modul "'+f(r.monitoring.name)+'" wird in unserer Community gepflegt. Rückfragen oder Probleme bitte im Forum diskutieren. ',1)]),_:1})),n(b,null,{default:i(()=>[o(' Einstellungen für Modul "'+f(r.monitoring.name)+'" ',1)]),_:1}),(d(),h(R(u.getMonitoringComponent()),{monitoring:r.monitoring,"onUpdate:configuration":e[0]||(e[0]=w=>u.updateConfiguration(w))},null,40,["monitoring"]))],64)}const be=C(ge,[["render",fe],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/monitoring/OpenwbMonitoringProxy.vue"]]);P.add(H,N,K,I,G);const he={name:"OpenwbDataManagementView",components:{FontAwesomeIcon:A,OpenwbBackupCloudProxy:ae,OpenwbMonitoringProxy:be},mixins:[J,Z],props:{installAssistantActive:{type:Boolean,required:!1,default:!1},showBackupCloudSection:{type:Boolean,required:!1,default:!0}},emits:["sendCommand","save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/LegacySmartHome/config/get/Devices/+/device_configured",writeable:!1},{topic:"openWB/LegacySmartHome/config/get/Devices/+/device_name",writeable:!1},{topic:"openWB/chargepoint/+/config",writeable:!1},{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/optional/monitoring/config",writeable:!1},{topic:"openWB/system/backup_cloud/backup_before_update",writeable:!1},{topic:"openWB/system/backup_cloud/config",writeable:!1},{topic:"openWB/system/backup_password",writeable:!1},{topic:"openWB/system/configurable/backup_clouds",writeable:!1},{topic:"openWB/system/configurable/monitoring",writeable:!1},{topic:"openWB/system/device/+/component/+/config",writeable:!1},{topic:"openWB/vehicle/+/name",writeable:!1}],warningAcknowledged:!1,showRestoreSection:!this.installAssistantActive,restorePassword:void 0,selectedRestoreFile:void 0,restoreUploadDone:!1,selectedDataMigrationFile:void 0,dataMigrationUploadDone:!1,dataMigrationConfig:[{sectionName:"Ladepunkte",sectionComponents:[{key:"cp1",label:"Ladepunkt 1",validTypes:["chargePoint"]},{key:"cp2",label:"Ladepunkt 2",validTypes:["chargePoint"]},{key:"cp3",label:"Ladepunkt 3",validTypes:["chargePoint"]},{key:"cp4",label:"Ladepunkt 4",validTypes:["chargePoint"]},{key:"cp5",label:"Ladepunkt 5",validTypes:["chargePoint"]},{key:"cp6",label:"Ladepunkt 6",validTypes:["chargePoint"]},{key:"cp7",label:"Ladepunkt 7",validTypes:["chargePoint"]},{key:"cp8",label:"Ladepunkt 8",validTypes:["chargePoint"]}]},{sectionName:"Zähler",sectionComponents:[{key:"evu",label:"EVU",validTypes:["counter"]},{key:"consumer1",label:"Verbraucher 1",validTypes:["counter"]},{key:"consumer2",label:"Verbraucher 2",validTypes:["counter"]},{key:"consumer3",label:"Verbraucher 3",validTypes:["counter"]}]},{sectionName:"Wechselrichter",sectionComponents:[{key:"pvAll",label:"Wechselrichter (Summe)",validTypes:["inverter"],help:"Die 1.9er Version von openWB speichert lediglich die Summen-Leistung aller Wechselrichter."}]},{sectionName:"Batteriespeicher",sectionComponents:[{key:"bat",label:"Speicher 1",validTypes:["battery"]}]},{sectionName:"Fahrzeuge",sectionComponents:[{key:"ev1",label:"Fahrzeug von Ladepunkt 1",validTypes:["vehicle"]},{key:"ev2",label:"Fahrzeug von Ladepunkt 2",validTypes:["vehicle"]}]},{sectionName:"SmartHome 2.0",sectionComponents:[{key:"sh1",label:"Gerät 1",validTypes:["smartHome"]},{key:"sh2",label:"Gerät 2",validTypes:["smartHome"]},{key:"sh3",label:"Gerät 3",validTypes:["smartHome"]},{key:"sh4",label:"Gerät 4",validTypes:["smartHome"]},{key:"sh5",label:"Gerät 5",validTypes:["smartHome"]},{key:"sh6",label:"Gerät 6",validTypes:["smartHome"]},{key:"sh7",label:"Gerät 7",validTypes:["smartHome"]},{key:"sh8",label:"Gerät 8",validTypes:["smartHome"]},{key:"sh9",label:"Gerät 9",validTypes:["smartHome"]}]}],dataMigrationMapping:{cp1:void 0,cp2:void 0,cp3:void 0,cp4:void 0,cp5:void 0,cp6:void 0,cp7:void 0,cp8:void 0,evu:void 0,pvAll:void 0,bat:void 0,consumer1:void 0,consumer2:void 0,consumer3:void 0,sh1:void 0,sh2:void 0,sh3:void 0,sh4:void 0,sh5:void 0,sh6:void 0,sh7:void 0,sh8:void 0,sh9:void 0,ev1:void 0,ev2:void 0}}},computed:{backupCloudList(){return this.$store.state.mqtt["openWB/system/configurable/backup_clouds"]},componentConfigurations(){return this.getWildcardTopics("openWB/system/device/+/component/+/config")},chargePointOptions(){let t=this.getWildcardTopics("openWB/chargepoint/+/config");var e=[];for(const r of Object.values(t))e.push({value:r.id,text:r.name});return e},counterOptions(){var t=[];for(const e of Object.values(this.componentConfigurations))this.isComponentType(e.type,"counter")&&t.push({value:e.id,text:e.name});return t},inverterOptions(){var t=[];for(const e of Object.values(this.componentConfigurations))this.isComponentType(e.type,"inverter")&&t.push({value:e.id,text:e.name});return t},monitoringList(){return this.$store.state.mqtt["openWB/system/configurable/monitoring"]},batteryOptions(){var t=[];for(const e of Object.values(this.componentConfigurations))this.isComponentType(e.type,"bat")&&t.push({value:e.id,text:e.name});return t},vehicleOptions(){let t=this.getWildcardTopics("openWB/vehicle/+/name");var e=[];for(const[r,y]of Object.entries(t)){let l=parseInt(r.match(/\/(\d\d?)\//)[1]);e.push({value:l,text:y})}return e},smartHomeOptions(){let t=this.getWildcardTopics("openWB/LegacySmartHome/config/get/Devices/+/device_configured");var e=[];for(const[r,y]of Object.entries(t))if(y==1){let l=parseInt(r.match(/\/(\d\d?)\//)[1]);e.push({value:l,text:this.$store.state.mqtt[`openWB/LegacySmartHome/config/get/Devices/${l}/device_name`]})}return e},disableRestoreUpload(){return!this.selectedRestoreFile||this.selectedRestoreFile?.name?.endsWith(".gpg")&&!(this.restorePassword||this.$store.state.mqtt["openWB/system/backup_password"])}},methods:{isComponentType(t,e){return t.split("_").includes(e)},getBackupCloudDefaultConfiguration(t){const e=this.backupCloudList.find(r=>r.value==t);return Object.prototype.hasOwnProperty.call(e,"defaults")?{...JSON.parse(JSON.stringify(e.defaults))}:(console.warn("no default configuration found for backup cloud type!",t),{})},sendSystemCommand(t,e={}){this.$emit("sendCommand",{command:t,data:e})},getMigrationOptions(t){var e=[{value:void 0,text:"-- nicht übernehmen --"}];return t.includes("chargePoint")&&e.push(...this.chargePointOptions),t.includes("counter")&&e.push(...this.counterOptions),t.includes("inverter")&&e.push(...this.inverterOptions),t.includes("battery")&&e.push(...this.batteryOptions),t.includes("vehicle")&&e.push(...this.vehicleOptions),t.includes("smartHome")&&e.push(...this.smartHomeOptions),e},updateConfiguration(t,e){console.debug("updateConfiguration",t,e),this.updateState(t,e.value,e.object)},updateSelectedBackupCloud(t){this.updateState("openWB/system/backup_cloud/config",t,"type"),this.updateState("openWB/system/backup_cloud/config",this.getBackupCloudDefaultConfiguration(t))},updateSelectedRestoreFile(t){this.selectedRestoreFile=t.target.files[0]},updateSelectedDataMigrationFile(t){this.selectedDataMigrationFile=t.target.files[0]},uploadFile(t,e,r,y={}){return new Promise(l=>{if(e!==void 0){this.$root.postClientMessage("Hochladen der Datei gestartet.","info");let u=new FormData;u.append("file",e),u.append("target",t);for(const[p,c]of Object.entries(y))u.append(p,c);this.axios.post(location.protocol+"//"+location.host+"/openWB/web/settings/uploadFile.php",u,{headers:{"Content-Type":"multipart/form-data"}}).then(()=>{this.$root.postClientMessage(r,"success"),l(!0)}).catch(p=>{if(p.response){console.error(p.response.status,p.response.data);var c="Hochladen der Datei fehlgeschlagen!
"+p.response.status+": "+p.response.data}else p.request?(console.error(p.request),c+="Es wurde keine Antwort vom Server empfangen."):(console.error("Error",p.message),c+="Es ist ein unbekannter Fehler aufgetreten.");this.$root.postClientMessage(c,"danger"),l(!1)})}else console.error("no file selected for upload"),l(!1)})},getMonitoringDefaultConfiguration(t){const e=this.monitoringList.find(r=>r.value==t);return Object.prototype.hasOwnProperty.call(e,"defaults")?{...e.defaults}:(console.warn("no default configuration found for monitoring type!",t),{})},updateSelectedMonitoring(t){this.updateState("openWB/optional/monitoring/config",t,"type"),this.updateState("openWB/optional/monitoring/config",this.getMonitoringDefaultConfiguration(t))},async uploadRestoreFile(){const t="Die Sicherungsdatei wurde erfolgreich hochgeladen. Du kannst die Wiederherstellung jetzt starten.";this.restoreUploadDone=await this.uploadFile("restore",this.selectedRestoreFile,t,[void 0,null,""].includes(this.restorePassword)?void 0:{restorePassword:this.restorePassword})},async uploadDataMigrationFile(){const t="Die Sicherungsdatei wurde erfolgreich hochgeladen. Du kannst den Import jetzt starten.";this.dataMigrationUploadDone=await this.uploadFile("migrate",this.selectedDataMigrationFile,t)},restoreBackup(){this.sendSystemCommand("restoreBackup"),this.$store.commit("storeLocal",{name:"reloadRequired",value:!0})},dataMigration(){this.sendSystemCommand("dataMigration",this.dataMigrationMapping)},factoryReset(){this.sendSystemCommand("factoryReset",{}),this.$store.commit("storeLocal",{name:"reloadRequired",value:!0})}}},ke={class:"system"},ye={key:1},ve={name:"backupPasswordForm"},we={name:"backupForm"},_e={class:"row justify-content-center"},Ce={class:"col-md-4 d-flex py-1 justify-content-center"},Be={key:0,name:"restoreForm"},De={class:"input-group mb-2"},Se={class:"input-group-prepend"},We={class:"input-group-text"},Me={class:"custom-file"},Oe={id:"input-file-label",class:"custom-file-label",for:"input-file","data-browse":"Suchen"},Fe={class:"input-group-append"},Ae=["disabled"],Pe={class:"row justify-content-center"},Ve={class:"col-md-4 d-flex py-1 justify-content-center"},ze={key:1},Le={key:0,name:"cloudBackupForm"},Te=["href"],Ee={key:0},je={name:"dataMigrationForm"},Re={class:"input-group"},Ue={class:"input-group-prepend"},qe={class:"input-group-text"},xe={class:"custom-file"},$e={id:"data-migration-file-label",class:"custom-file-label",for:"data-migration-file","data-browse":"Suchen"},He={class:"input-group-append"},Ne=["disabled"],Ke={class:"row justify-content-center"},Ie={class:"col-md-4 d-flex py-1 justify-content-center"},Ge={key:1,name:"resetForm"},Je={class:"row justify-content-center"},Ze={class:"col-md-4 d-flex py-1 justify-content-center"},Qe={key:2,name:"monitoringForm"},Xe={key:1},Ye={key:0};function et(t,e,r,y,l,u){const p=m("openwb-base-button-group-input"),c=m("openwb-base-alert"),b=m("openwb-base-heading"),w=m("openwb-base-text-input"),O=m("openwb-base-submit-buttons"),v=m("font-awesome-icon"),D=m("openwb-base-click-button"),F=m("openwb-base-select-input"),U=m("openwb-base-button-input"),q=m("openwb-backup-cloud-proxy"),S=m("openwb-base-card"),x=m("openwb-monitoring-proxy");return d(),g("div",ke,[r.installAssistantActive?k("",!0):(d(),h(c,{key:0,subtype:"danger"},{default:i(()=>[e[25]||(e[25]=s("h2",null,"Achtung!",-1)),e[26]||(e[26]=s("p",null," Vor allen Aktionen auf dieser Seite ist sicherzustellen, dass kein Ladevorgang aktiv ist! Zur Sicherheit bitte zusätzlich alle Fahrzeuge von der Ladestation / den Ladestationen abstecken! ",-1)),n(p,{modelValue:l.warningAcknowledged,"onUpdate:modelValue":e[0]||(e[0]=a=>l.warningAcknowledged=a),title:"Ich habe die Warnung verstanden",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}]},null,8,["modelValue"])]),_:1})),l.warningAcknowledged||r.installAssistantActive?(d(),g("div",ye,[n(S,{title:"Sicherung / Wiederherstellung",subtype:"success",collapsible:!0,collapsed:!r.installAssistantActive},{default:i(()=>[s("form",ve,[n(b,null,{default:i(()=>[...e[27]||(e[27]=[o("Allgemein",-1)])]),_:1}),n(w,{title:"Kennwort für Sicherungen",subtype:"password","model-value":t.$store.state.mqtt["openWB/system/backup_password"],"onUpdate:modelValue":e[1]||(e[1]=a=>t.updateState("openWB/system/backup_password",a))},{help:i(()=>[...e[28]||(e[28]=[o(" Ist hier ein Kennwort gesetzt, werden alle Sicherungen mit einem Kennwortschutz versehen. Diese Option sollte genutzt werden, wenn die Sicherungsdatei über unsichere Kanäle (z.B. eine Backup-Cloud im Internet) übertragen wird.",-1),s("br",null,null,-1),o(" Wichtig: Das Kennwort wird nicht in der Sicherung gespeichert! Ohne gültiges Kennwort kann eine geschützte Sicherung nicht wiederhergestellt werden! ",-1)])]),_:1},8,["model-value"]),n(O,{"form-name":"backupPasswordForm","hide-reset":!0,"hide-defaults":!0,"save-id":"saveBackupPassword",onSave:e[2]||(e[2]=a=>t.$emit("save",["openWB/system/backup_password"])),onReset:e[3]||(e[3]=a=>t.$emit("reset"))}),e[29]||(e[29]=s("hr",null,null,-1))]),s("form",we,[n(b,null,{default:i(()=>[...e[30]||(e[30]=[o("Sicherung",-1)])]),_:1}),n(c,{subtype:"danger"},{default:i(()=>[...e[31]||(e[31]=[o(' Es können nur Sicherungen wiederhergestellt werden, die in den Entwicklungszweigen "master", "Beta" oder "Release" erstellt wurden! ',-1)])]),_:1}),n(c,{subtype:"info"},{default:i(()=>[...e[32]||(e[32]=[o(" Nachdem die Sicherung abgeschlossen ist, kann die erstellte Datei über den Link in der Benachrichtigung oder ",-1),s("a",{href:"/openWB/data/backup/",target:"_blank"},"hier",-1),o(" heruntergeladen werden. ",-1)])]),_:1}),s("div",_e,[s("div",Ce,[n(D,{class:"btn-success clickable",onButtonClicked:e[4]||(e[4]=a=>u.sendSystemCommand("createBackup",{use_extended_filename:!0}))},{default:i(()=>[e[33]||(e[33]=o(" Sicherung erstellen ",-1)),n(v,{icon:["fas","archive"]})]),_:1})])])]),l.showRestoreSection?(d(),g("form",Be,[e[39]||(e[39]=s("hr",null,null,-1)),n(b,null,{default:i(()=>[...e[34]||(e[34]=[o("Wiederherstellung",-1)])]),_:1}),n(c,{subtype:"danger"},{default:i(()=>[...e[35]||(e[35]=[o(" Für die Wiederherstellung wird eine aktive Internetverbindung benötigt.",-1),s("br",null,null,-1),o(' Es können nur Sicherungen wiederhergestellt werden, die in den Entwicklungszweigen "master", "Beta" oder "Release" erstellt wurden! ',-1)])]),_:1}),s("div",De,[s("div",Se,[s("div",We,[n(v,{icon:["fas","file-archive"]})])]),s("div",Me,[s("input",{id:"input-file",type:"file",class:"custom-file-input",accept:".tar.gz,.openwb-backup,application/gzip,application/tar+gzip,.openwb-backup.gpg,application/gzip+gpg,application/tar+gzip+gpg",onChange:e[5]||(e[5]=a=>u.updateSelectedRestoreFile(a))},null,32),s("label",Oe,f(l.selectedRestoreFile?l.selectedRestoreFile.name:"Bitte eine Datei auswählen"),1)]),s("div",Fe,[s("button",{class:W(["btn",u.disableRestoreUpload?"btn-outline-success":"btn-success clickable"]),disabled:u.disableRestoreUpload,type:"button",onClick:e[6]||(e[6]=a=>u.uploadRestoreFile())},[e[36]||(e[36]=o(" Hochladen ",-1)),n(v,{icon:["fas","upload"]})],10,Ae)])]),l.selectedRestoreFile?.name?.endsWith(".gpg")?(d(),h(w,{key:0,modelValue:l.restorePassword,"onUpdate:modelValue":e[7]||(e[7]=a=>l.restorePassword=a),title:"Kennwort dieser Sicherung",subtype:"password"},{help:i(()=>[...e[37]||(e[37]=[o(' Wenn die Sicherung mit einem Kennwortschutz versehen wurde, wird zuerst eine Entschlüsselung mit dem unter "Allgemein" hinterlegten Kennwort versucht. Falls die Sicherung mit einem anderen Kennwort geschützt wurde, muss dieses hier eingegeben werden. ',-1)])]),_:1},8,["modelValue"])):k("",!0),s("div",Pe,[s("div",Ve,[n(D,{class:W(l.restoreUploadDone?"btn-success clickable":"btn-outline-success"),disabled:!l.restoreUploadDone,onButtonClicked:e[8]||(e[8]=a=>u.restoreBackup())},{default:i(()=>[e[38]||(e[38]=o(" Wiederherstellung starten ",-1)),n(v,{icon:["fas","box-open"]})]),_:1},8,["class","disabled"])])])])):k("",!0),r.installAssistantActive?k("",!0):(d(),g("div",ze,[r.showBackupCloudSection?(d(),g("form",Le,[e[48]||(e[48]=s("hr",null,null,-1)),n(b,null,{default:i(()=>[...e[40]||(e[40]=[o(" Automatische Sicherung in einen Cloud-Dienst ",-1)])]),_:1}),n(c,{subtype:"info"},{default:i(()=>[e[41]||(e[41]=o(" Ist die openWB als primary konfiguriert, wird zwischen Mitternacht und 5:00 Uhr automatisch eine Sicherung erstellt und in den angegebenen Cloud-Dienst (nicht openWB Cloud!) hochgeladen. Ist kein Cloud-Dienst konfiguriert, wird keine automatische Sicherung erstellt. Die automatische Sicherung kann unabhängig von der openWB Cloud genutzt werden.",-1)),e[42]||(e[42]=s("br",null,null,-1)),e[43]||(e[43]=o(" Die manuelle Cloud-Sicherung und -falls aktiviert- die Sicherung vor einem Update werden sowohl von einer primary als auch von einer secondary durchgeführt.",-1)),e[44]||(e[44]=s("br",null,null,-1)),e[45]||(e[45]=o(" Die Anleitung zur Konfiguration des Cloud-Dienstes findest Du ",-1)),s("a",{href:`https://wiki.openwb.de/doku.php?id=openwb:vc:${t.systemVersion}:software:system:datenverwaltung`,target:"_blank",rel:"noopener noreferrer"}," hier ",8,Te),e[46]||(e[46]=o(" . ",-1))]),_:1}),n(F,{class:"mb-2",title:"Backup-Cloud",options:u.backupCloudList,"model-value":t.$store.state.mqtt["openWB/system/backup_cloud/config"]?.type,"onUpdate:modelValue":e[9]||(e[9]=a=>u.updateSelectedBackupCloud(a))},null,8,["options","model-value"]),t.$store.state.mqtt["openWB/system/backup_cloud/config"]?.type?(d(),g("div",Ee,[n(p,{title:"Sicherung vor System-Update",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/system/backup_cloud/backup_before_update"],"onUpdate:modelValue":e[10]||(e[10]=a=>t.updateState("openWB/system/backup_cloud/backup_before_update",a))},{help:i(()=>[...e[47]||(e[47]=[o(" Ist diese Option aktiviert, dann wird vor jedem System-Update automatisch eine Sicherung erstellt und diese in die Backup-Cloud hochgeladen. ",-1)])]),_:1},8,["model-value"]),n(U,{title:"Manuelle Cloud-Sicherung","button-text":"Sicherung erstellen und hochladen",subtype:"success",onButtonClicked:e[11]||(e[11]=a=>u.sendSystemCommand("createCloudBackup",{}))}),n(q,{"backup-cloud":t.$store.state.mqtt["openWB/system/backup_cloud/config"],"onUpdate:configuration":e[12]||(e[12]=a=>u.updateConfiguration("openWB/system/backup_cloud/config",a)),onSendCommand:e[13]||(e[13]=a=>u.sendSystemCommand(a.command,a.args))},null,8,["backup-cloud"])])):k("",!0),n(O,{"form-name":"cloudBackupForm","hide-reset":!0,"hide-defaults":!0,"save-id":"saveCloudBackup",onSave:e[14]||(e[14]=a=>t.$emit("save",["openWB/system/backup_cloud/backup_before_update","openWB/system/backup_cloud/config"])),onReset:e[15]||(e[15]=a=>t.$emit("reset")),onDefaults:e[16]||(e[16]=a=>t.$emit("defaults"))})])):k("",!0)]))]),_:1},8,["collapsed"]),!r.installAssistantActive&&!t.$store.state.mqtt["openWB/general/extern"]?(d(),h(S,{key:0,title:"Datenübernahme",subtype:"success",collapsible:!0,collapsed:!0},{default:i(()=>[s("form",je,[n(c,{subtype:"info"},{default:i(()=>[...e[49]||(e[49]=[o(" Hier kann die Sicherung aus den älteren Software Versionen 1.9.303 oder 1.9.304 hochgeladen werden, um vorhandene historische Daten (Diagramme und Ladeprotokolle) sowie Cloud-Daten und Seriennummer in diese Installation zu importieren.",-1),s("br",null,null,-1),o(" Ein Import aus Versionen kleiner als 1.9.303 ist nicht möglich. Falls eine Datenübernahme aus 1.9er Versionen gewünscht ist, muss erst ein Upgrade auf 1.9.303 oder 1.9.304 durchgeführt werden! Die Zuordnung zwischen den alten und neuen Komponenten muss manuell durchgeführt werden. ",-1)])]),_:1}),n(c,{subtype:"danger"},{default:i(()=>[...e[50]||(e[50]=[o(" Die Portierung kann bei vielen historischen Daten von mehreren Jahren durchaus bis zu 30 Minuten dauern. Die openWB in dieser Zeit bitte nicht herunterfahren! Du erhältst eine Meldung, wenn die Datenübernahme abgeschlossen ist.",-1),s("br",null,null,-1),o(" Vor der Datenübernahme unbedingt eine Sicherung erstellen.",-1),s("br",null,null,-1),o(" Die Datenübernahme kann nur durch Einspielen einer Sicherung rückgängig gemacht werden! ",-1)])]),_:1}),s("div",Re,[s("div",Ue,[s("div",qe,[n(v,{icon:["fas","file-archive"]})])]),s("div",xe,[s("input",{id:"data-migration-file",type:"file",class:"custom-file-input",accept:".tar.gz,application/gzip,application/tar+gzip",onChange:e[17]||(e[17]=a=>u.updateSelectedDataMigrationFile(a))},null,32),s("label",$e,f(l.selectedDataMigrationFile?l.selectedDataMigrationFile.name:"Bitte eine Datei auswählen"),1)]),s("div",He,[s("button",{class:W(["btn",l.selectedDataMigrationFile?"btn-success clickable":"btn-outline-success"]),disabled:!l.selectedDataMigrationFile,type:"button",onClick:e[18]||(e[18]=a=>u.uploadDataMigrationFile())},[e[51]||(e[51]=o(" Hochladen ",-1)),n(v,{icon:["fas","upload"]})],10,Ne)])]),n(b,null,{default:i(()=>[...e[52]||(e[52]=[o(" Zuordnung der Komponenten ",-1)])]),_:1}),(d(!0),g(M,null,V(l.dataMigrationConfig,a=>(d(),g("div",{key:a.sectionName},[n(b,null,{default:i(()=>[o(f(a.sectionName),1)]),_:2},1024),(d(!0),g(M,null,V(a.sectionComponents,_=>(d(),h(F,{key:_.key,modelValue:l.dataMigrationMapping[_.key],"onUpdate:modelValue":$=>l.dataMigrationMapping[_.key]=$,title:_.label,options:u.getMigrationOptions(_.validTypes)},z({_:2},[_.help?{name:"help",fn:i(()=>[o(f(_.help),1)]),key:"0"}:void 0]),1032,["modelValue","onUpdate:modelValue","title","options"]))),128))]))),128)),s("div",Ke,[s("div",Ie,[n(D,{class:W(l.dataMigrationUploadDone?"btn-success clickable":"btn-outline-success"),disabled:!l.dataMigrationUploadDone,onButtonClicked:e[19]||(e[19]=a=>u.dataMigration())},{default:i(()=>[e[53]||(e[53]=o(" Datenübernahme starten ",-1)),n(v,{icon:["fas","box-open"]})]),_:1},8,["class","disabled"])])])])]),_:1})):k("",!0),r.installAssistantActive?k("",!0):(d(),g("form",Ge,[n(S,{title:"Zurücksetzen",subtype:"danger",collapsible:!0,collapsed:!0},{footer:i(()=>[s("div",Je,[s("div",Ze,[n(D,{class:"btn-danger clickable",onButtonClicked:e[20]||(e[20]=a=>u.factoryReset())},{default:i(()=>[n(v,{icon:["fas","skull-crossbones"]}),e[55]||(e[55]=o(" Zurücksetzen ",-1)),n(v,{icon:["fas","skull-crossbones"]})]),_:1})])])]),default:i(()=>[n(c,{subtype:"danger"},{default:i(()=>[...e[54]||(e[54]=[o(" Alle Einstellungen, angelegte Geräte/Komponenten, Ladepunkte und Fahrzeuge, etc., Tages-, Monats- und Jahresauswertungen sowie das Ladeprotokoll werden unwiederbringlich gelöscht. Auch die Vorkonfiguration im Auslieferungszustand wird gelöscht. Die openWB muss danach komplett neu eingerichtet werden. Die openWB wird hierfür automatisch neu gestartet. Bitte erstelle vor dem Zurücksetzen eine Sicherung! ",-1)])]),_:1})]),_:1})])),r.installAssistantActive?k("",!0):(d(),g("form",Qe,[n(S,{title:"Monitoring",subtype:"success",collapsible:!0,collapsed:!0},z({default:i(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(d(),h(c,{key:0,subtype:"info"},{default:i(()=>[...e[56]||(e[56]=[o(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})):(d(),g("div",Xe,[n(c,{subtype:"info"},{default:i(()=>[...e[57]||(e[57]=[o(" Das Monitoring informiert Dich sofort per E-Mail, wenn eine Deiner Komponenten oder Ladepunkte ein Problem hat oder die openWB nicht mehr erreichbar ist. ",-1)])]),_:1}),n(F,{class:"mb-2",title:"Anbieter",options:u.monitoringList,"model-value":t.$store.state.mqtt["openWB/optional/monitoring/config"]?t.$store.state.mqtt["openWB/optional/monitoring/config"].type:"","onUpdate:modelValue":e[21]||(e[21]=a=>u.updateSelectedMonitoring(a))},null,8,["options","model-value"]),t.$store.state.mqtt["openWB/optional/monitoring/config"]&&t.$store.state.mqtt["openWB/optional/monitoring/config"].type?(d(),g("div",Ye,[n(x,{monitoring:t.$store.state.mqtt["openWB/optional/monitoring/config"],"onUpdate:configuration":e[22]||(e[22]=a=>u.updateConfiguration("openWB/optional/monitoring/config",a))},null,8,["monitoring"])])):k("",!0)]))]),_:2},[t.$store.state.mqtt["openWB/general/extern"]!==!0?{name:"footer",fn:i(()=>[n(O,{"form-name":"monitoringForm","hide-defaults":!0,"save-id":"saveMonitoring",onSave:e[23]||(e[23]=a=>t.$emit("save",["openWB/optional/monitoring/config"])),onReset:e[24]||(e[24]=a=>t.$emit("reset"))})]),key:"0"}:void 0]),1024)]))])):k("",!0)])}const tt=C(he,[["render",et],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/DataManagement.vue"]]),rt=Object.freeze(Object.defineProperty({__proto__:null,default:tt},Symbol.toStringTag,{value:"Module"}));export{X as B,tt as D,le as M,rt as a}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/backup_cloud-DAnrhTL5.js","assets/vendor-BwGffBs-.js","assets/vendor-Cq9CCOuG.css","assets/vendor-fortawesome-DplTMxoa.js","assets/index-CE-5DBwq.js","assets/vendor-bootstrap-DxivtUnb.js","assets/vendor-jquery-CEMonh9Y.js","assets/vendor-bootstrap-BJ8HpIhY.css","assets/vendor-axios-C0vEeTtS.js","assets/index-xf6JJloS.css","assets/SystemVersion-eCZ4XHiC.js","assets/dynamic-import-helper-BheWnx7M.js","assets/backup_cloud-B6mtrEtH.js","assets/backup_cloud-DkNDL_nu.js","assets/backup_cloud-CkbLK3q6.js","assets/monitoring-Da0eqTxE.js"])))=>i.map(i=>d[i]); +import{F as A,l as P,ac as L,ad as T,aD as H,aE as N,aF as K,aG as I,aH as G}from"./vendor-fortawesome-DplTMxoa.js";import{_ as B,C as J}from"./index-CE-5DBwq.js";import{S as Z}from"./SystemVersion-eCZ4XHiC.js";import{_ as E}from"./dynamic-import-helper-BheWnx7M.js";import{_ as C,m,l as d,f as g,z as h,u as i,B as o,J as f,q as n,y as s,a7 as j,P as R,K as M,x as k,k as W,L as V,D as z}from"./vendor-BwGffBs-.js";const Q={props:{backupCloud:{type:Object,required:!0}},emits:["update:configuration","sendCommand"],methods:{updateConfiguration(t,e=void 0){this.$emit("update:configuration",{value:t,object:e})},sendSystemCommand(t,e={}){this.$emit("sendCommand",{command:t,data:e})}}},X=C(Q,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/backup_clouds/BackupCloudConfigMixin.vue"]]),Y={name:"BackupCloudConfigFallback",mixins:[X]},ee={class:"backup-cloud-fallback"},te={key:1};function ne(t,e,r,y,l,u){const p=m("openwb-base-alert"),c=m("openwb-base-textarea");return d(),g("div",ee,[Object.keys(t.backupCloud.configuration).length==0?(d(),h(p,{key:0,subtype:"info"},{default:i(()=>[o(' Die Backup-Cloud "'+f(t.backupCloud.name)+'" bietet keine Einstellungen. ',1)]),_:1})):(d(),g("div",te,[n(p,{subtype:"warning"},{default:i(()=>[o(' Es wurde keine Konfigurationsseite für die Backup-Cloud "'+f(t.backupCloud.name)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),n(c,{title:"Konfiguration",subtype:"json","model-value":t.backupCloud.configuration,"onUpdate:modelValue":e[0]||(e[0]=b=>t.updateConfiguration(b,"configuration"))},{help:i(()=>[...e[1]||(e[1]=[o(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),n(p,{subtype:"info"},{default:i(()=>[s("pre",null,f(JSON.stringify(t.backupCloud.configuration,void 0,2)),1)]),_:1})]))])}const oe=C(Y,[["render",ne],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/backup_clouds/OpenwbBackupCloudConfigFallback.vue"]]);P.add(L,T);const ie={name:"OpenwbBackupCloudProxy",components:{FontAwesomeIcon:A},props:{backupCloud:{type:Object,required:!0}},emits:["update:configuration","sendCommand"],methods:{getBackupCloudComponent(){return console.debug(`loading backup cloud: ${this.backupCloud.type}`),j({loader:()=>E(Object.assign({"./nextcloud/backup_cloud.vue":()=>B(()=>import("./backup_cloud-DAnrhTL5.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])),"./nfs/backup_cloud.vue":()=>B(()=>import("./backup_cloud-B6mtrEtH.js"),__vite__mapDeps([12,1,2,3,4,5,6,7,8,9,10,11])),"./onedrive/backup_cloud.vue":()=>B(()=>import("./backup_cloud-DkNDL_nu.js"),__vite__mapDeps([13,1,2,3,4,5,6,7,8,9,10,11])),"./samba/backup_cloud.vue":()=>B(()=>import("./backup_cloud-CkbLK3q6.js"),__vite__mapDeps([14,1,2,3,4,5,6,7,8,9,10,11]))}),`./${this.backupCloud.type}/backup_cloud.vue`,3),errorComponent:oe})},updateConfiguration(t){this.$emit("update:configuration",t)},sendCommand(t){this.$emit("sendCommand",t)}}};function se(t,e,r,y,l,u){const p=m("font-awesome-icon"),c=m("openwb-base-alert"),b=m("openwb-base-heading");return d(),g(M,null,[r.backupCloud.official?(d(),h(c,{key:0,subtype:"success"},{default:i(()=>[n(p,{icon:["fas","certificate"]}),o(' Das ausgewählte Backup-Cloud Modul "'+f(r.backupCloud.name)+'" wird von openWB gepflegt. ',1)]),_:1})):(d(),h(c,{key:1,subtype:"info"},{default:i(()=>[n(p,{icon:["fas","people-group"]}),o(' Das ausgewählte Backup-Cloud Modul "'+f(r.backupCloud.name)+'" wird in unserer Community gepflegt. Rückfragen oder Probleme bitte im Forum diskutieren. ',1)]),_:1})),n(b,null,{default:i(()=>[o(' Einstellungen für Backup-Cloud Modul "'+f(r.backupCloud.name)+'" ',1)]),_:1}),(d(),h(R(u.getBackupCloudComponent()),{"backup-cloud":r.backupCloud,"onUpdate:configuration":e[0]||(e[0]=w=>u.updateConfiguration(w)),onSendCommand:e[1]||(e[1]=w=>u.sendCommand(w))},null,40,["backup-cloud"]))],64)}const ae=C(ie,[["render",se],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/backup_clouds/OpenwbBackupCloudProxy.vue"]]),re={props:{monitoring:{type:Object,required:!0}},emits:["update:configuration"],methods:{updateConfiguration(t,e=void 0){this.$emit("update:configuration",{value:t,object:e})}}},le=C(re,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/monitoring/MonitoringConfigMixin.vue"]]),ue={name:"MonitoringConfigFallback",mixins:[le]},de={class:"monitoring-fallback"},pe={key:1};function ce(t,e,r,y,l,u){const p=m("openwb-base-alert"),c=m("openwb-base-textarea");return d(),g("div",de,[Object.keys(t.monitoring.configuration).length==0?(d(),h(p,{key:0,subtype:"info"},{default:i(()=>[o(' Der Anbieter "'+f(t.monitoring.name)+'" bietet keine Einstellungen. ',1)]),_:1})):(d(),g("div",pe,[n(p,{subtype:"warning"},{default:i(()=>[o(' Es wurde keine Konfigurationsseite für den Anbieter "'+f(t.monitoring.name)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),n(c,{title:"Konfiguration",subtype:"json","model-value":t.monitoring.configuration,"onUpdate:modelValue":e[0]||(e[0]=b=>t.updateConfiguration(b,"configuration"))},{help:i(()=>[...e[1]||(e[1]=[o(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),n(p,{subtype:"info"},{default:i(()=>[s("pre",null,f(JSON.stringify(t.monitoring.configuration,void 0,2)),1)]),_:1})]))])}const me=C(ue,[["render",ce],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/monitoring/OpenwbMonitoringConfigFallback.vue"]]);P.add(L,T);const ge={name:"OpenwbMonitoringProxy",components:{FontAwesomeIcon:A},props:{monitoring:{type:Object,required:!0}},emits:["update:configuration"],methods:{getMonitoringComponent(){return console.debug(`loading monitoring: ${this.monitoring.type}`),j({loader:()=>E(Object.assign({"./zabbix/monitoring.vue":()=>B(()=>import("./monitoring-Da0eqTxE.js"),__vite__mapDeps([15,1,2,3,4,5,6,7,8,9,10,11]))}),`./${this.monitoring.type}/monitoring.vue`,3),errorComponent:me})},updateConfiguration(t){this.$emit("update:configuration",t)}}};function fe(t,e,r,y,l,u){const p=m("font-awesome-icon"),c=m("openwb-base-alert"),b=m("openwb-base-heading");return d(),g(M,null,[r.monitoring.official?(d(),h(c,{key:0,subtype:"success"},{default:i(()=>[n(p,{icon:["fas","certificate"]}),o(' Das ausgewählte Monitoring Modul "'+f(r.monitoring.name)+'" wird von openWB gepflegt. ',1)]),_:1})):(d(),h(c,{key:1,subtype:"info"},{default:i(()=>[n(p,{icon:["fas","people-group"]}),o(' Das ausgewählte Monitoring Modul "'+f(r.monitoring.name)+'" wird in unserer Community gepflegt. Rückfragen oder Probleme bitte im Forum diskutieren. ',1)]),_:1})),n(b,null,{default:i(()=>[o(' Einstellungen für Modul "'+f(r.monitoring.name)+'" ',1)]),_:1}),(d(),h(R(u.getMonitoringComponent()),{monitoring:r.monitoring,"onUpdate:configuration":e[0]||(e[0]=w=>u.updateConfiguration(w))},null,40,["monitoring"]))],64)}const be=C(ge,[["render",fe],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/monitoring/OpenwbMonitoringProxy.vue"]]);P.add(H,N,K,I,G);const he={name:"OpenwbDataManagementView",components:{FontAwesomeIcon:A,OpenwbBackupCloudProxy:ae,OpenwbMonitoringProxy:be},mixins:[J,Z],props:{installAssistantActive:{type:Boolean,required:!1,default:!1},showBackupCloudSection:{type:Boolean,required:!1,default:!0}},emits:["sendCommand","save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/LegacySmartHome/config/get/Devices/+/device_configured",writeable:!1},{topic:"openWB/LegacySmartHome/config/get/Devices/+/device_name",writeable:!1},{topic:"openWB/chargepoint/+/config",writeable:!1},{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/optional/monitoring/config",writeable:!1},{topic:"openWB/system/backup_cloud/backup_before_update",writeable:!1},{topic:"openWB/system/backup_cloud/config",writeable:!1},{topic:"openWB/system/backup_password",writeable:!1},{topic:"openWB/system/configurable/backup_clouds",writeable:!1},{topic:"openWB/system/configurable/monitoring",writeable:!1},{topic:"openWB/system/device/+/component/+/config",writeable:!1},{topic:"openWB/vehicle/+/name",writeable:!1}],warningAcknowledged:!1,showRestoreSection:!this.installAssistantActive,restorePassword:void 0,selectedRestoreFile:void 0,restoreUploadDone:!1,selectedDataMigrationFile:void 0,dataMigrationUploadDone:!1,dataMigrationConfig:[{sectionName:"Ladepunkte",sectionComponents:[{key:"cp1",label:"Ladepunkt 1",validTypes:["chargePoint"]},{key:"cp2",label:"Ladepunkt 2",validTypes:["chargePoint"]},{key:"cp3",label:"Ladepunkt 3",validTypes:["chargePoint"]},{key:"cp4",label:"Ladepunkt 4",validTypes:["chargePoint"]},{key:"cp5",label:"Ladepunkt 5",validTypes:["chargePoint"]},{key:"cp6",label:"Ladepunkt 6",validTypes:["chargePoint"]},{key:"cp7",label:"Ladepunkt 7",validTypes:["chargePoint"]},{key:"cp8",label:"Ladepunkt 8",validTypes:["chargePoint"]}]},{sectionName:"Zähler",sectionComponents:[{key:"evu",label:"EVU",validTypes:["counter"]},{key:"consumer1",label:"Verbraucher 1",validTypes:["counter"]},{key:"consumer2",label:"Verbraucher 2",validTypes:["counter"]},{key:"consumer3",label:"Verbraucher 3",validTypes:["counter"]}]},{sectionName:"Wechselrichter",sectionComponents:[{key:"pvAll",label:"Wechselrichter (Summe)",validTypes:["inverter"],help:"Die 1.9er Version von openWB speichert lediglich die Summen-Leistung aller Wechselrichter."}]},{sectionName:"Batteriespeicher",sectionComponents:[{key:"bat",label:"Speicher 1",validTypes:["battery"]}]},{sectionName:"Fahrzeuge",sectionComponents:[{key:"ev1",label:"Fahrzeug von Ladepunkt 1",validTypes:["vehicle"]},{key:"ev2",label:"Fahrzeug von Ladepunkt 2",validTypes:["vehicle"]}]},{sectionName:"SmartHome 2.0",sectionComponents:[{key:"sh1",label:"Gerät 1",validTypes:["smartHome"]},{key:"sh2",label:"Gerät 2",validTypes:["smartHome"]},{key:"sh3",label:"Gerät 3",validTypes:["smartHome"]},{key:"sh4",label:"Gerät 4",validTypes:["smartHome"]},{key:"sh5",label:"Gerät 5",validTypes:["smartHome"]},{key:"sh6",label:"Gerät 6",validTypes:["smartHome"]},{key:"sh7",label:"Gerät 7",validTypes:["smartHome"]},{key:"sh8",label:"Gerät 8",validTypes:["smartHome"]},{key:"sh9",label:"Gerät 9",validTypes:["smartHome"]}]}],dataMigrationMapping:{cp1:void 0,cp2:void 0,cp3:void 0,cp4:void 0,cp5:void 0,cp6:void 0,cp7:void 0,cp8:void 0,evu:void 0,pvAll:void 0,bat:void 0,consumer1:void 0,consumer2:void 0,consumer3:void 0,sh1:void 0,sh2:void 0,sh3:void 0,sh4:void 0,sh5:void 0,sh6:void 0,sh7:void 0,sh8:void 0,sh9:void 0,ev1:void 0,ev2:void 0}}},computed:{backupCloudList(){return this.$store.state.mqtt["openWB/system/configurable/backup_clouds"]},componentConfigurations(){return this.getWildcardTopics("openWB/system/device/+/component/+/config")},chargePointOptions(){let t=this.getWildcardTopics("openWB/chargepoint/+/config");var e=[];for(const r of Object.values(t))e.push({value:r.id,text:r.name});return e},counterOptions(){var t=[];for(const e of Object.values(this.componentConfigurations))this.isComponentType(e.type,"counter")&&t.push({value:e.id,text:e.name});return t},inverterOptions(){var t=[];for(const e of Object.values(this.componentConfigurations))this.isComponentType(e.type,"inverter")&&t.push({value:e.id,text:e.name});return t},monitoringList(){return this.$store.state.mqtt["openWB/system/configurable/monitoring"]},batteryOptions(){var t=[];for(const e of Object.values(this.componentConfigurations))this.isComponentType(e.type,"bat")&&t.push({value:e.id,text:e.name});return t},vehicleOptions(){let t=this.getWildcardTopics("openWB/vehicle/+/name");var e=[];for(const[r,y]of Object.entries(t)){let l=parseInt(r.match(/\/(\d\d?)\//)[1]);e.push({value:l,text:y})}return e},smartHomeOptions(){let t=this.getWildcardTopics("openWB/LegacySmartHome/config/get/Devices/+/device_configured");var e=[];for(const[r,y]of Object.entries(t))if(y==1){let l=parseInt(r.match(/\/(\d\d?)\//)[1]);e.push({value:l,text:this.$store.state.mqtt[`openWB/LegacySmartHome/config/get/Devices/${l}/device_name`]})}return e},disableRestoreUpload(){return!this.selectedRestoreFile||this.selectedRestoreFile?.name?.endsWith(".gpg")&&!(this.restorePassword||this.$store.state.mqtt["openWB/system/backup_password"])}},methods:{isComponentType(t,e){return t.split("_").includes(e)},getBackupCloudDefaultConfiguration(t){const e=this.backupCloudList.find(r=>r.value==t);return Object.prototype.hasOwnProperty.call(e,"defaults")?{...JSON.parse(JSON.stringify(e.defaults))}:(console.warn("no default configuration found for backup cloud type!",t),{})},sendSystemCommand(t,e={}){this.$emit("sendCommand",{command:t,data:e})},getMigrationOptions(t){var e=[{value:void 0,text:"-- nicht übernehmen --"}];return t.includes("chargePoint")&&e.push(...this.chargePointOptions),t.includes("counter")&&e.push(...this.counterOptions),t.includes("inverter")&&e.push(...this.inverterOptions),t.includes("battery")&&e.push(...this.batteryOptions),t.includes("vehicle")&&e.push(...this.vehicleOptions),t.includes("smartHome")&&e.push(...this.smartHomeOptions),e},updateConfiguration(t,e){console.debug("updateConfiguration",t,e),this.updateState(t,e.value,e.object)},updateSelectedBackupCloud(t){this.updateState("openWB/system/backup_cloud/config",t,"type"),this.updateState("openWB/system/backup_cloud/config",this.getBackupCloudDefaultConfiguration(t))},updateSelectedRestoreFile(t){this.selectedRestoreFile=t.target.files[0]},updateSelectedDataMigrationFile(t){this.selectedDataMigrationFile=t.target.files[0]},uploadFile(t,e,r,y={}){return new Promise(l=>{if(e!==void 0){this.$root.postClientMessage("Hochladen der Datei gestartet.","info");let u=new FormData;u.append("file",e),u.append("target",t);for(const[p,c]of Object.entries(y))u.append(p,c);this.axios.post(location.protocol+"//"+location.host+"/openWB/web/settings/uploadFile.php",u,{headers:{"Content-Type":"multipart/form-data"}}).then(()=>{this.$root.postClientMessage(r,"success"),l(!0)}).catch(p=>{if(p.response){console.error(p.response.status,p.response.data);var c="Hochladen der Datei fehlgeschlagen!
"+p.response.status+": "+p.response.data}else p.request?(console.error(p.request),c+="Es wurde keine Antwort vom Server empfangen."):(console.error("Error",p.message),c+="Es ist ein unbekannter Fehler aufgetreten.");this.$root.postClientMessage(c,"danger"),l(!1)})}else console.error("no file selected for upload"),l(!1)})},getMonitoringDefaultConfiguration(t){const e=this.monitoringList.find(r=>r.value==t);return Object.prototype.hasOwnProperty.call(e,"defaults")?{...e.defaults}:(console.warn("no default configuration found for monitoring type!",t),{})},updateSelectedMonitoring(t){this.updateState("openWB/optional/monitoring/config",t,"type"),this.updateState("openWB/optional/monitoring/config",this.getMonitoringDefaultConfiguration(t))},async uploadRestoreFile(){const t="Die Sicherungsdatei wurde erfolgreich hochgeladen. Du kannst die Wiederherstellung jetzt starten.";this.restoreUploadDone=await this.uploadFile("restore",this.selectedRestoreFile,t,[void 0,null,""].includes(this.restorePassword)?void 0:{restorePassword:this.restorePassword})},async uploadDataMigrationFile(){const t="Die Sicherungsdatei wurde erfolgreich hochgeladen. Du kannst den Import jetzt starten.";this.dataMigrationUploadDone=await this.uploadFile("migrate",this.selectedDataMigrationFile,t)},restoreBackup(){this.sendSystemCommand("restoreBackup"),this.$store.commit("storeLocal",{name:"reloadRequired",value:!0})},dataMigration(){this.sendSystemCommand("dataMigration",this.dataMigrationMapping)},factoryReset(){this.sendSystemCommand("factoryReset",{}),this.$store.commit("storeLocal",{name:"reloadRequired",value:!0})}}},ke={class:"system"},ye={key:1},ve={name:"backupPasswordForm"},we={name:"backupForm"},_e={class:"row justify-content-center"},Ce={class:"col-md-4 d-flex py-1 justify-content-center"},Be={key:0,name:"restoreForm"},De={class:"input-group mb-2"},Se={class:"input-group-prepend"},We={class:"input-group-text"},Me={class:"custom-file"},Oe={id:"input-file-label",class:"custom-file-label",for:"input-file","data-browse":"Suchen"},Fe={class:"input-group-append"},Ae=["disabled"],Pe={class:"row justify-content-center"},Ve={class:"col-md-4 d-flex py-1 justify-content-center"},ze={key:1},Le={key:0,name:"cloudBackupForm"},Te=["href"],Ee={key:0},je={name:"dataMigrationForm"},Re={class:"input-group"},Ue={class:"input-group-prepend"},qe={class:"input-group-text"},xe={class:"custom-file"},$e={id:"data-migration-file-label",class:"custom-file-label",for:"data-migration-file","data-browse":"Suchen"},He={class:"input-group-append"},Ne=["disabled"],Ke={class:"row justify-content-center"},Ie={class:"col-md-4 d-flex py-1 justify-content-center"},Ge={key:1,name:"resetForm"},Je={class:"row justify-content-center"},Ze={class:"col-md-4 d-flex py-1 justify-content-center"},Qe={key:2,name:"monitoringForm"},Xe={key:1},Ye={key:0};function et(t,e,r,y,l,u){const p=m("openwb-base-button-group-input"),c=m("openwb-base-alert"),b=m("openwb-base-heading"),w=m("openwb-base-text-input"),O=m("openwb-base-submit-buttons"),v=m("font-awesome-icon"),D=m("openwb-base-click-button"),F=m("openwb-base-select-input"),U=m("openwb-base-button-input"),q=m("openwb-backup-cloud-proxy"),S=m("openwb-base-card"),x=m("openwb-monitoring-proxy");return d(),g("div",ke,[r.installAssistantActive?k("",!0):(d(),h(c,{key:0,subtype:"danger"},{default:i(()=>[e[25]||(e[25]=s("h2",null,"Achtung!",-1)),e[26]||(e[26]=s("p",null," Vor allen Aktionen auf dieser Seite ist sicherzustellen, dass kein Ladevorgang aktiv ist! Zur Sicherheit bitte zusätzlich alle Fahrzeuge von der Ladestation / den Ladestationen abstecken! ",-1)),n(p,{modelValue:l.warningAcknowledged,"onUpdate:modelValue":e[0]||(e[0]=a=>l.warningAcknowledged=a),title:"Ich habe die Warnung verstanden",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}]},null,8,["modelValue"])]),_:1})),l.warningAcknowledged||r.installAssistantActive?(d(),g("div",ye,[n(S,{title:"Sicherung / Wiederherstellung",subtype:"success",collapsible:!0,collapsed:!r.installAssistantActive},{default:i(()=>[s("form",ve,[n(b,null,{default:i(()=>[...e[27]||(e[27]=[o("Allgemein",-1)])]),_:1}),n(w,{title:"Kennwort für Sicherungen",subtype:"password","model-value":t.$store.state.mqtt["openWB/system/backup_password"],"onUpdate:modelValue":e[1]||(e[1]=a=>t.updateState("openWB/system/backup_password",a))},{help:i(()=>[...e[28]||(e[28]=[o(" Ist hier ein Kennwort gesetzt, werden alle Sicherungen mit einem Kennwortschutz versehen. Diese Option sollte genutzt werden, wenn die Sicherungsdatei über unsichere Kanäle (z.B. eine Backup-Cloud im Internet) übertragen wird.",-1),s("br",null,null,-1),o(" Wichtig: Das Kennwort wird nicht in der Sicherung gespeichert! Ohne gültiges Kennwort kann eine geschützte Sicherung nicht wiederhergestellt werden! ",-1)])]),_:1},8,["model-value"]),n(O,{"form-name":"backupPasswordForm","hide-reset":!0,"hide-defaults":!0,"save-id":"saveBackupPassword",onSave:e[2]||(e[2]=a=>t.$emit("save",["openWB/system/backup_password"])),onReset:e[3]||(e[3]=a=>t.$emit("reset"))}),e[29]||(e[29]=s("hr",null,null,-1))]),s("form",we,[n(b,null,{default:i(()=>[...e[30]||(e[30]=[o("Sicherung",-1)])]),_:1}),n(c,{subtype:"danger"},{default:i(()=>[...e[31]||(e[31]=[o(' Es können nur Sicherungen wiederhergestellt werden, die in den Entwicklungszweigen "master", "Beta" oder "Release" erstellt wurden! ',-1)])]),_:1}),n(c,{subtype:"info"},{default:i(()=>[...e[32]||(e[32]=[o(" Nachdem die Sicherung abgeschlossen ist, kann die erstellte Datei über den Link in der Benachrichtigung oder ",-1),s("a",{href:"/openWB/data/backup/",target:"_blank"},"hier",-1),o(" heruntergeladen werden. ",-1)])]),_:1}),s("div",_e,[s("div",Ce,[n(D,{class:"btn-success clickable",onButtonClicked:e[4]||(e[4]=a=>u.sendSystemCommand("createBackup",{use_extended_filename:!0}))},{default:i(()=>[e[33]||(e[33]=o(" Sicherung erstellen ",-1)),n(v,{icon:["fas","archive"]})]),_:1})])])]),l.showRestoreSection?(d(),g("form",Be,[e[39]||(e[39]=s("hr",null,null,-1)),n(b,null,{default:i(()=>[...e[34]||(e[34]=[o("Wiederherstellung",-1)])]),_:1}),n(c,{subtype:"danger"},{default:i(()=>[...e[35]||(e[35]=[o(" Für die Wiederherstellung wird eine aktive Internetverbindung benötigt.",-1),s("br",null,null,-1),o(' Es können nur Sicherungen wiederhergestellt werden, die in den Entwicklungszweigen "master", "Beta" oder "Release" erstellt wurden! ',-1)])]),_:1}),s("div",De,[s("div",Se,[s("div",We,[n(v,{icon:["fas","file-archive"]})])]),s("div",Me,[s("input",{id:"input-file",type:"file",class:"custom-file-input",accept:".tar.gz,.openwb-backup,application/gzip,application/tar+gzip,.openwb-backup.gpg,application/gzip+gpg,application/tar+gzip+gpg",onChange:e[5]||(e[5]=a=>u.updateSelectedRestoreFile(a))},null,32),s("label",Oe,f(l.selectedRestoreFile?l.selectedRestoreFile.name:"Bitte eine Datei auswählen"),1)]),s("div",Fe,[s("button",{class:W(["btn",u.disableRestoreUpload?"btn-outline-success":"btn-success clickable"]),disabled:u.disableRestoreUpload,type:"button",onClick:e[6]||(e[6]=a=>u.uploadRestoreFile())},[e[36]||(e[36]=o(" Hochladen ",-1)),n(v,{icon:["fas","upload"]})],10,Ae)])]),l.selectedRestoreFile?.name?.endsWith(".gpg")?(d(),h(w,{key:0,modelValue:l.restorePassword,"onUpdate:modelValue":e[7]||(e[7]=a=>l.restorePassword=a),title:"Kennwort dieser Sicherung",subtype:"password"},{help:i(()=>[...e[37]||(e[37]=[o(' Wenn die Sicherung mit einem Kennwortschutz versehen wurde, wird zuerst eine Entschlüsselung mit dem unter "Allgemein" hinterlegten Kennwort versucht. Falls die Sicherung mit einem anderen Kennwort geschützt wurde, muss dieses hier eingegeben werden. ',-1)])]),_:1},8,["modelValue"])):k("",!0),s("div",Pe,[s("div",Ve,[n(D,{class:W(l.restoreUploadDone?"btn-success clickable":"btn-outline-success"),disabled:!l.restoreUploadDone,onButtonClicked:e[8]||(e[8]=a=>u.restoreBackup())},{default:i(()=>[e[38]||(e[38]=o(" Wiederherstellung starten ",-1)),n(v,{icon:["fas","box-open"]})]),_:1},8,["class","disabled"])])])])):k("",!0),r.installAssistantActive?k("",!0):(d(),g("div",ze,[r.showBackupCloudSection?(d(),g("form",Le,[e[48]||(e[48]=s("hr",null,null,-1)),n(b,null,{default:i(()=>[...e[40]||(e[40]=[o(" Automatische Sicherung in einen Cloud-Dienst ",-1)])]),_:1}),n(c,{subtype:"info"},{default:i(()=>[e[41]||(e[41]=o(" Ist die openWB als primary konfiguriert, wird zwischen Mitternacht und 5:00 Uhr automatisch eine Sicherung erstellt und in den angegebenen Cloud-Dienst (nicht openWB Cloud!) hochgeladen. Ist kein Cloud-Dienst konfiguriert, wird keine automatische Sicherung erstellt. Die automatische Sicherung kann unabhängig von der openWB Cloud genutzt werden.",-1)),e[42]||(e[42]=s("br",null,null,-1)),e[43]||(e[43]=o(" Die manuelle Cloud-Sicherung und -falls aktiviert- die Sicherung vor einem Update werden sowohl von einer primary als auch von einer secondary durchgeführt.",-1)),e[44]||(e[44]=s("br",null,null,-1)),e[45]||(e[45]=o(" Die Anleitung zur Konfiguration des Cloud-Dienstes findest Du ",-1)),s("a",{href:`https://wiki.openwb.de/doku.php?id=openwb:vc:${t.systemVersion}:software:system:datenverwaltung`,target:"_blank",rel:"noopener noreferrer"}," hier ",8,Te),e[46]||(e[46]=o(" . ",-1))]),_:1}),n(F,{class:"mb-2",title:"Backup-Cloud",options:u.backupCloudList,"model-value":t.$store.state.mqtt["openWB/system/backup_cloud/config"]?.type,"onUpdate:modelValue":e[9]||(e[9]=a=>u.updateSelectedBackupCloud(a))},null,8,["options","model-value"]),t.$store.state.mqtt["openWB/system/backup_cloud/config"]?.type?(d(),g("div",Ee,[n(p,{title:"Sicherung vor System-Update",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/system/backup_cloud/backup_before_update"],"onUpdate:modelValue":e[10]||(e[10]=a=>t.updateState("openWB/system/backup_cloud/backup_before_update",a))},{help:i(()=>[...e[47]||(e[47]=[o(" Ist diese Option aktiviert, dann wird vor jedem System-Update automatisch eine Sicherung erstellt und diese in die Backup-Cloud hochgeladen. ",-1)])]),_:1},8,["model-value"]),n(U,{title:"Manuelle Cloud-Sicherung","button-text":"Sicherung erstellen und hochladen",subtype:"success",onButtonClicked:e[11]||(e[11]=a=>u.sendSystemCommand("createCloudBackup",{}))}),n(q,{"backup-cloud":t.$store.state.mqtt["openWB/system/backup_cloud/config"],"onUpdate:configuration":e[12]||(e[12]=a=>u.updateConfiguration("openWB/system/backup_cloud/config",a)),onSendCommand:e[13]||(e[13]=a=>u.sendSystemCommand(a.command,a.args))},null,8,["backup-cloud"])])):k("",!0),n(O,{"form-name":"cloudBackupForm","hide-reset":!0,"hide-defaults":!0,"save-id":"saveCloudBackup",onSave:e[14]||(e[14]=a=>t.$emit("save",["openWB/system/backup_cloud/backup_before_update","openWB/system/backup_cloud/config"])),onReset:e[15]||(e[15]=a=>t.$emit("reset")),onDefaults:e[16]||(e[16]=a=>t.$emit("defaults"))})])):k("",!0)]))]),_:1},8,["collapsed"]),!r.installAssistantActive&&!t.$store.state.mqtt["openWB/general/extern"]?(d(),h(S,{key:0,title:"Datenübernahme",subtype:"success",collapsible:!0,collapsed:!0},{default:i(()=>[s("form",je,[n(c,{subtype:"info"},{default:i(()=>[...e[49]||(e[49]=[o(" Hier kann die Sicherung aus den älteren Software Versionen 1.9.303 oder 1.9.304 hochgeladen werden, um vorhandene historische Daten (Diagramme und Ladeprotokolle) sowie Cloud-Daten und Seriennummer in diese Installation zu importieren.",-1),s("br",null,null,-1),o(" Ein Import aus Versionen kleiner als 1.9.303 ist nicht möglich. Falls eine Datenübernahme aus 1.9er Versionen gewünscht ist, muss erst ein Upgrade auf 1.9.303 oder 1.9.304 durchgeführt werden! Die Zuordnung zwischen den alten und neuen Komponenten muss manuell durchgeführt werden. ",-1)])]),_:1}),n(c,{subtype:"danger"},{default:i(()=>[...e[50]||(e[50]=[o(" Die Portierung kann bei vielen historischen Daten von mehreren Jahren durchaus bis zu 30 Minuten dauern. Die openWB in dieser Zeit bitte nicht herunterfahren! Du erhältst eine Meldung, wenn die Datenübernahme abgeschlossen ist.",-1),s("br",null,null,-1),o(" Vor der Datenübernahme unbedingt eine Sicherung erstellen.",-1),s("br",null,null,-1),o(" Die Datenübernahme kann nur durch Einspielen einer Sicherung rückgängig gemacht werden! ",-1)])]),_:1}),s("div",Re,[s("div",Ue,[s("div",qe,[n(v,{icon:["fas","file-archive"]})])]),s("div",xe,[s("input",{id:"data-migration-file",type:"file",class:"custom-file-input",accept:".tar.gz,application/gzip,application/tar+gzip",onChange:e[17]||(e[17]=a=>u.updateSelectedDataMigrationFile(a))},null,32),s("label",$e,f(l.selectedDataMigrationFile?l.selectedDataMigrationFile.name:"Bitte eine Datei auswählen"),1)]),s("div",He,[s("button",{class:W(["btn",l.selectedDataMigrationFile?"btn-success clickable":"btn-outline-success"]),disabled:!l.selectedDataMigrationFile,type:"button",onClick:e[18]||(e[18]=a=>u.uploadDataMigrationFile())},[e[51]||(e[51]=o(" Hochladen ",-1)),n(v,{icon:["fas","upload"]})],10,Ne)])]),n(b,null,{default:i(()=>[...e[52]||(e[52]=[o(" Zuordnung der Komponenten ",-1)])]),_:1}),(d(!0),g(M,null,V(l.dataMigrationConfig,a=>(d(),g("div",{key:a.sectionName},[n(b,null,{default:i(()=>[o(f(a.sectionName),1)]),_:2},1024),(d(!0),g(M,null,V(a.sectionComponents,_=>(d(),h(F,{key:_.key,modelValue:l.dataMigrationMapping[_.key],"onUpdate:modelValue":$=>l.dataMigrationMapping[_.key]=$,title:_.label,options:u.getMigrationOptions(_.validTypes)},z({_:2},[_.help?{name:"help",fn:i(()=>[o(f(_.help),1)]),key:"0"}:void 0]),1032,["modelValue","onUpdate:modelValue","title","options"]))),128))]))),128)),s("div",Ke,[s("div",Ie,[n(D,{class:W(l.dataMigrationUploadDone?"btn-success clickable":"btn-outline-success"),disabled:!l.dataMigrationUploadDone,onButtonClicked:e[19]||(e[19]=a=>u.dataMigration())},{default:i(()=>[e[53]||(e[53]=o(" Datenübernahme starten ",-1)),n(v,{icon:["fas","box-open"]})]),_:1},8,["class","disabled"])])])])]),_:1})):k("",!0),r.installAssistantActive?k("",!0):(d(),g("form",Ge,[n(S,{title:"Zurücksetzen",subtype:"danger",collapsible:!0,collapsed:!0},{footer:i(()=>[s("div",Je,[s("div",Ze,[n(D,{class:"btn-danger clickable",onButtonClicked:e[20]||(e[20]=a=>u.factoryReset())},{default:i(()=>[n(v,{icon:["fas","skull-crossbones"]}),e[55]||(e[55]=o(" Zurücksetzen ",-1)),n(v,{icon:["fas","skull-crossbones"]})]),_:1})])])]),default:i(()=>[n(c,{subtype:"danger"},{default:i(()=>[...e[54]||(e[54]=[o(" Alle Einstellungen, angelegte Geräte/Komponenten, Ladepunkte und Fahrzeuge, etc., Tages-, Monats- und Jahresauswertungen sowie das Ladeprotokoll werden unwiederbringlich gelöscht. Auch die Vorkonfiguration im Auslieferungszustand wird gelöscht. Die openWB muss danach komplett neu eingerichtet werden. Die openWB wird hierfür automatisch neu gestartet. Bitte erstelle vor dem Zurücksetzen eine Sicherung! ",-1)])]),_:1})]),_:1})])),r.installAssistantActive?k("",!0):(d(),g("form",Qe,[n(S,{title:"Monitoring",subtype:"success",collapsible:!0,collapsed:!0},z({default:i(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(d(),h(c,{key:0,subtype:"info"},{default:i(()=>[...e[56]||(e[56]=[o(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})):(d(),g("div",Xe,[n(c,{subtype:"info"},{default:i(()=>[...e[57]||(e[57]=[o(" Das Monitoring informiert Dich sofort per E-Mail, wenn eine Deiner Komponenten oder Ladepunkte ein Problem hat oder die openWB nicht mehr erreichbar ist. ",-1)])]),_:1}),n(F,{class:"mb-2",title:"Anbieter",options:u.monitoringList,"model-value":t.$store.state.mqtt["openWB/optional/monitoring/config"]?t.$store.state.mqtt["openWB/optional/monitoring/config"].type:"","onUpdate:modelValue":e[21]||(e[21]=a=>u.updateSelectedMonitoring(a))},null,8,["options","model-value"]),t.$store.state.mqtt["openWB/optional/monitoring/config"]&&t.$store.state.mqtt["openWB/optional/monitoring/config"].type?(d(),g("div",Ye,[n(x,{monitoring:t.$store.state.mqtt["openWB/optional/monitoring/config"],"onUpdate:configuration":e[22]||(e[22]=a=>u.updateConfiguration("openWB/optional/monitoring/config",a))},null,8,["monitoring"])])):k("",!0)]))]),_:2},[t.$store.state.mqtt["openWB/general/extern"]!==!0?{name:"footer",fn:i(()=>[n(O,{"form-name":"monitoringForm","hide-defaults":!0,"save-id":"saveMonitoring",onSave:e[23]||(e[23]=a=>t.$emit("save",["openWB/optional/monitoring/config"])),onReset:e[24]||(e[24]=a=>t.$emit("reset"))})]),key:"0"}:void 0]),1024)]))])):k("",!0)])}const tt=C(he,[["render",et],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/DataManagement.vue"]]),rt=Object.freeze(Object.defineProperty({__proto__:null,default:tt},Symbol.toStringTag,{value:"Module"}));export{X as B,tt as D,le as M,rt as a}; diff --git a/web/settings/assets/DebugConfiguration-BZBY-RKS.js b/web/settings/assets/DebugConfiguration-Bn9Ihz1V.js similarity index 69% rename from web/settings/assets/DebugConfiguration-BZBY-RKS.js rename to web/settings/assets/DebugConfiguration-Bn9Ihz1V.js index 8986aaa7c0..0d6bbf08ab 100644 --- a/web/settings/assets/DebugConfiguration-BZBY-RKS.js +++ b/web/settings/assets/DebugConfiguration-Bn9Ihz1V.js @@ -1,2 +1,2 @@ -import{C as x}from"./index-Bv2WLdLZ.js";import{F as B,l as W,an as V,ao as z,k as P,ap as N,g as T}from"./vendor-fortawesome-DplTMxoa.js";import{a as y}from"./vendor-axios-C0vEeTtS.js";import{_ as F,a8 as M,m as l,l as u,z as p,u as r,B as h,J as v,y as b,q as g,x as f,A as L,k as m,f as C,K as S,L as q}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";W.add(V,z,P,N,T);const I={name:"OpenwbLogCard",components:{FontAwesomeIcon:B},props:{title:{type:String,required:!0},logFile:{type:String,required:!0}},data(){return{logData:"-- noch nicht geladen --",loading:!1,foundFiles:[],selectedVariant:"",copyMessage:!1,pastebinLink:""}},methods:{async getFilePromise(o,e=!1,n=!0,a=!1){return y[a?"head":"get"](location.protocol+"//"+location.host+o).then(s=>{if(a)return!0;{const d=s.data;return d||"log file is empty"}}).catch(s=>{if(!n)throw s;return s.response?s.response.status==404&&e?a?!1:"":`A 404 is expected if running node.js dev server! -`+s.response.status+" "+s.response.statusText+": "+s.response.request.responseURL:s.request?s.request:s.message})},async loadLog(o,e=""){this.logData="wird aktualisiert...",this.loading=!0,this.pastebinLink="";var n="";e&&(o=o.replace(".log",`.${e}.log`));for(let t=4;t>=1;t--){const s=await this.getFilePromise(o+"."+t,!0);n+=s}const a=await this.getFilePromise(o);n+=a,this.logData=n,this.loading=!1},async checkLatestLog(o){const e=[{suffix:"latest",title:"Letzten 3 Durchläufe",description:"Logs der Letzten 3 Durchläufe laden"},{suffix:"current",title:"Letzter Durchlauf",description:"Logs des letzten Durchlaufs laden"},{suffix:"latest-warning",title:"Letzter Durchlauf mit Warnung oder Fehler",description:"Fehlerprotokoll laden"}];this.foundFiles=[];for(const n of e){const a=o.replace(".log",`.${n.suffix}.log`);try{await this.getFilePromise(a,!1,!1,!0),this.foundFiles.push(n),n.suffix==="latest"&&(this.selectedVariant="latest",console.log("Found latest log file: ",a))}catch(t){console.log(t)}}this.foundFiles.length>0&&this.foundFiles.push({suffix:"",title:"Vollständiges Log",description:"Vollständiges Log laden"})},async onCardExpand(){await this.checkLatestLog(this.logFile),this.loadLog(this.logFile,this.selectedVariant)},copyToClipboard(o=this.logData,e=!0){if(navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(o).then(()=>{e&&this.showCopyMessage()}).catch(n=>{console.error("Fehler beim Kopieren in die Zwischenablage: ",n)});else{const n=document.createElement("textarea");n.value=o,document.body.appendChild(n),n.select();try{document.execCommand("copy"),e&&this.showCopyMessage()}catch(a){console.error("Fehler beim Kopieren in die Zwischenablage: ",a)}document.body.removeChild(n)}},showCopyMessage(){this.copyMessage=!0,this.$root.postClientMessage("Log in die Zwischenablage kopiert.","info"),setTimeout(()=>{this.copyMessage=!1},3e3)},async postToPastebin(){try{const o=M.gzip(this.logData),e=await y.post("https://bytebin.openwb.de/post",o,{headers:{"Content-Type":"text/log","Content-Encoding":"gzip"}});if(!e.data.key)throw new Error("Key is missing in the response");const n=e.data.key;this.pastebinLink=`https://paste.openwb.de/${n}`,console.log("Pastebin link:",this.pastebinLink),this.copyToClipboard(this.pastebinLink,!1),this.$root.postClientMessage(`Log an Pastebin gesendet.
Key: ${n}
Der Link wurde in die Zwischenablage kopiert.`,"info")}catch(o){console.error("Fehler beim Posten auf paste.openwb.de: ",o)}}}},E={class:"log-data mb-0"};function K(o,e,n,a,t,s){const d=l("font-awesome-icon"),c=l("openwb-base-avatar"),k=l("openwb-base-select-input"),w=l("openwb-base-alert"),_=l("openwb-base-card");return u(),p(_,{title:n.title,class:"log-card",collapsible:!0,collapsed:!0,onExpanded:s.onCardExpand},{actions:r(({collapsed:i})=>[i?f("",!0):(u(),p(c,{key:0,class:m(["clickable mr-1",t.pastebinLink?"bg-success":"bg-info"]),title:t.pastebinLink?"Link in die Zwischenablage kopiert":"Log auf paste.openwb.de teilen",onClick:L(s.postToPastebin,["stop"])},{default:r(()=>[g(d,{icon:t.pastebinLink?["fas","check"]:["fas","share-nodes"]},null,8,["icon"])]),_:1},8,["class","title","onClick"])),i?f("",!0):(u(),p(c,{key:1,class:m(["clickable mr-1",t.copyMessage?"bg-success":"bg-info"]),title:t.copyMessage?"Log in die Zwischenablage kopiert":"Log kopieren",onClick:e[0]||(e[0]=L(D=>s.copyToClipboard(t.logData),["stop"]))},{default:r(()=>[g(d,{icon:t.copyMessage?["fas","check"]:["fas","clipboard"]},null,8,["icon"])]),_:1},8,["class","title"])),i?f("",!0):(u(),p(c,{key:2,class:m(["clickable",t.loading?"bg-success":"bg-info"]),title:"Log laden/aktualisieren",onClick:e[1]||(e[1]=L(D=>s.loadLog(n.logFile,t.selectedVariant),["stop"]))},{default:r(()=>[g(d,{class:m(t.loading?"fa-spin-pulse":""),icon:t.loading?["fas","spinner"]:["fas","file-download"]},null,8,["class","icon"])]),_:1},8,["class"]))]),default:r(()=>[t.foundFiles.length>0?(u(),p(w,{key:0,subtype:"info"},{default:r(()=>[h(" Im "+v(n.title)+" stehen unterschiedliche Logauszüge zur Verfügung. Standardmässig werden Logs der letzten 3 Durchläufe geladen, für viele Fälle sollte dies ausreichen. Optional kann auch das gesamte Log geladen werden.",1),e[4]||(e[4]=b("br",null,null,-1)),e[5]||(e[5]=h(" Wurde eine Warnung oder ein Fehler protokolliert steht zusätzlich der letzte Durchlauf mit Warnungen und Fehlern zur Verfügung.",-1)),e[6]||(e[6]=b("br",null,null,-1)),g(k,{modelValue:t.selectedVariant,"onUpdate:modelValue":e[2]||(e[2]=i=>t.selectedVariant=i),title:"Logfile",required:"",options:t.foundFiles.map(i=>({value:i.suffix,text:i.title})),onChange:e[3]||(e[3]=i=>s.loadLog(n.logFile,t.selectedVariant))},null,8,["modelValue","options"])]),_:1})):f("",!0),b("pre",E,v(t.logData),1)]),_:1},8,["title","onExpanded"])}const A=F(I,[["render",K],["__scopeId","data-v-a320c3d6"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/debug_config/LogCard.vue"]]),Z={name:"OpenwbDebuggingView",components:{OpenwbLogCard:A},mixins:[x],emits:["save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/system/debug_level",writeable:!0}],logFiles:[{title:"Main-Log",fileName:"/openWB/ramdisk/main.log"},{title:"Log des internen Ladepunktes",fileName:"/openWB/ramdisk/internal_chargepoint.log"},{title:"Log des Ladeprotokolls",fileName:"/openWB/ramdisk/chargelog.log"},{title:"MQTT-Log",fileName:"/openWB/ramdisk/mqtt.log"},{title:"SoC-Log",fileName:"/openWB/ramdisk/soc.log"},{title:"Protokoll des letzten Updates",fileName:"/openWB/data/log/update.log"},{title:"Protokoll des Remote-Dienstes",fileName:"/openWB/ramdisk/remote_support.log"},{title:"Protokoll des SmartHome Dienstes",fileName:"/openWB/ramdisk/smarthome.log"},{title:"Protokoll der Sicherung",fileName:"/openWB/data/log/backup.log"},{title:"Protokoll der Wiederherstellung",fileName:"/openWB/data/log/restore.log"},{title:"Protokoll der Datenmigration",fileName:"/openWB/data/log/data_migration.log"},{title:"Protokoll über die Schaltvorgänge von steuerbaren Verbrauchseinrichtungen",fileName:"/openWB/data/log/steuve_control_command.log"},{title:"Thread-Errors",fileName:"/openWB/ramdisk/thread_errors.log"}]}}},O={class:"debugging"},R={name:"debugConfigForm"};function U(o,e,n,a,t,s){const d=l("openwb-base-button-group-input"),c=l("openwb-base-alert"),k=l("openwb-base-card"),w=l("openwb-base-submit-buttons"),_=l("openwb-log-card");return u(),C("div",O,[b("form",R,[g(k,{title:"Protokollierung"},{default:r(()=>[g(d,{title:"Debug Level",buttons:[{buttonValue:30,text:"Warnungen und Fehler"},{buttonValue:20,text:"Info"},{buttonValue:10,text:"Details"}],"model-value":o.$store.state.mqtt["openWB/system/debug_level"],"onUpdate:modelValue":e[0]||(e[0]=i=>o.updateState("openWB/system/debug_level",i))},{help:r(()=>[...e[4]||(e[4]=[h(' Wenn der Debug Level auf "Info" oder "Details" gesetzt wird, werden mehr Informationen in die Logdateien geschrieben. Im normalen Betrieb sollte immer "Warnungen und Fehler" gewählt werden, um die Schreibvorgänge auf der SD-Karte zu reduzieren. ',-1)])]),_:1},8,["model-value"]),g(c,{subtype:"warning"},{default:r(()=>[...e[5]||(e[5]=[h(' Achtung! In den Einstellungen "Info" und "Details" können in den Logdateien sensible Daten wie Benutzernamen und Passwörter enthalten sein. Diese sollten vor dem Veröffentlichen z.B. im Forum unkenntlich gemacht werden. Private IP-Adressen (z.B. 192.168.x.x) müssen nicht maskiert werden, da diese nicht über das Internet erreichbar sind. ',-1)])]),_:1})]),_:1}),g(w,{"form-name":"debugConfigForm",onSave:e[1]||(e[1]=i=>o.$emit("save",o.mqttTopicsToPublish)),onReset:e[2]||(e[2]=i=>o.$emit("reset")),onDefaults:e[3]||(e[3]=i=>o.$emit("defaults"))})]),(u(!0),C(S,null,q(t.logFiles,i=>(u(),p(_,{key:i.fileName,title:i.title,"log-file":i.fileName},null,8,["title","log-file"]))),128))])}const Y=F(Z,[["render",U],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/DebugConfiguration.vue"]]);export{Y as default}; +import{C as B}from"./index-CE-5DBwq.js";import{F as x,l as W,an as V,ao as z,k as P,ap as N,g as T}from"./vendor-fortawesome-DplTMxoa.js";import{a as y}from"./vendor-axios-C0vEeTtS.js";import{_ as F,a8 as S,m as l,l as u,z as p,u as r,B as h,J as v,y as b,q as g,x as m,A as L,k as f,f as C,K as M,L as q}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";W.add(V,z,P,N,T);const I={name:"OpenwbLogCard",components:{FontAwesomeIcon:x},props:{title:{type:String,required:!0},logFile:{type:String,required:!0}},data(){return{logData:"-- noch nicht geladen --",loading:!1,foundFiles:[],selectedVariant:"",copyMessage:!1,pastebinLink:""}},methods:{async getFilePromise(o,e=!1,n=!0,a=!1){return y[a?"head":"get"](location.protocol+"//"+location.host+o).then(s=>{if(a)return!0;{const d=s.data;return d||"log file is empty"}}).catch(s=>{if(!n)throw s;return s.response?s.response.status==404&&e?a?!1:"":`A 404 is expected if running node.js dev server! +`+s.response.status+" "+s.response.statusText+": "+s.response.request.responseURL:s.request?s.request:s.message})},async loadLog(o,e=""){this.logData="wird aktualisiert...",this.loading=!0,this.pastebinLink="";var n="";e&&(o=o.replace(".log",`.${e}.log`));for(let t=4;t>=1;t--){const s=await this.getFilePromise(o+"."+t,!0);n+=s}const a=await this.getFilePromise(o);n+=a,this.logData=n,this.loading=!1},async checkLatestLog(o){const e=[{suffix:"latest",title:"Letzten 3 Durchläufe",description:"Logs der Letzten 3 Durchläufe laden"},{suffix:"current",title:"Letzter Durchlauf",description:"Logs des letzten Durchlaufs laden"},{suffix:"latest-warning",title:"Letzter Durchlauf mit Warnung oder Fehler",description:"Fehlerprotokoll laden"}];this.foundFiles=[];for(const n of e){const a=o.replace(".log",`.${n.suffix}.log`);try{await this.getFilePromise(a,!1,!1,!0),this.foundFiles.push(n),n.suffix==="latest"&&(this.selectedVariant="latest",console.log("Found latest log file: ",a))}catch(t){console.log(t)}}this.foundFiles.length>0&&this.foundFiles.push({suffix:"",title:"Vollständiges Log",description:"Vollständiges Log laden"})},async onCardExpand(){await this.checkLatestLog(this.logFile),this.loadLog(this.logFile,this.selectedVariant)},copyToClipboard(o=this.logData,e=!0){if(navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(o).then(()=>{e&&this.showCopyMessage()}).catch(n=>{console.error("Fehler beim Kopieren in die Zwischenablage: ",n)});else{const n=document.createElement("textarea");n.value=o,document.body.appendChild(n),n.select();try{document.execCommand("copy"),e&&this.showCopyMessage()}catch(a){console.error("Fehler beim Kopieren in die Zwischenablage: ",a)}document.body.removeChild(n)}},showCopyMessage(){this.copyMessage=!0,this.$root.postClientMessage("Log in die Zwischenablage kopiert.","info"),setTimeout(()=>{this.copyMessage=!1},3e3)},async postToPastebin(){try{const o=S.gzip(this.logData),e=await y.post("https://bytebin.openwb.de/post",o,{headers:{"Content-Type":"text/log","Content-Encoding":"gzip"}});if(!e.data.key)throw new Error("Key is missing in the response");const n=e.data.key;this.pastebinLink=`https://paste.openwb.de/${n}`,console.log("Pastebin link:",this.pastebinLink),this.copyToClipboard(this.pastebinLink,!1),this.$root.postClientMessage(`Log an Pastebin gesendet.
Key: ${n}
Der Link wurde in die Zwischenablage kopiert.`,"info")}catch(o){console.error("Fehler beim Posten auf paste.openwb.de: ",o)}}}},E={class:"log-data mb-0"};function K(o,e,n,a,t,s){const d=l("font-awesome-icon"),c=l("openwb-base-avatar"),k=l("openwb-base-select-input"),w=l("openwb-base-alert"),_=l("openwb-base-card");return u(),p(_,{title:n.title,class:"log-card",collapsible:!0,collapsed:!0,onExpanded:s.onCardExpand},{actions:r(({collapsed:i})=>[i?m("",!0):(u(),p(c,{key:0,class:f(["clickable mr-1",t.pastebinLink?"bg-success":"bg-info"]),title:t.pastebinLink?"Link in die Zwischenablage kopiert":"Log auf paste.openwb.de teilen",onClick:L(s.postToPastebin,["stop"])},{default:r(()=>[g(d,{icon:t.pastebinLink?["fas","check"]:["fas","share-nodes"]},null,8,["icon"])]),_:1},8,["class","title","onClick"])),i?m("",!0):(u(),p(c,{key:1,class:f(["clickable mr-1",t.copyMessage?"bg-success":"bg-info"]),title:t.copyMessage?"Log in die Zwischenablage kopiert":"Log kopieren",onClick:e[0]||(e[0]=L(D=>s.copyToClipboard(t.logData),["stop"]))},{default:r(()=>[g(d,{icon:t.copyMessage?["fas","check"]:["fas","clipboard"]},null,8,["icon"])]),_:1},8,["class","title"])),i?m("",!0):(u(),p(c,{key:2,class:f(["clickable",t.loading?"bg-success":"bg-info"]),title:"Log laden/aktualisieren",onClick:e[1]||(e[1]=L(D=>s.loadLog(n.logFile,t.selectedVariant),["stop"]))},{default:r(()=>[g(d,{class:f(t.loading?"fa-spin-pulse":""),icon:t.loading?["fas","spinner"]:["fas","file-download"]},null,8,["class","icon"])]),_:1},8,["class"]))]),default:r(()=>[t.foundFiles.length>0?(u(),p(w,{key:0,subtype:"info"},{default:r(()=>[h(" Im "+v(n.title)+" stehen unterschiedliche Logauszüge zur Verfügung. Standardmässig werden Logs der letzten 3 Durchläufe geladen, für viele Fälle sollte dies ausreichen. Optional kann auch das gesamte Log geladen werden.",1),e[4]||(e[4]=b("br",null,null,-1)),e[5]||(e[5]=h(" Wurde eine Warnung oder ein Fehler protokolliert steht zusätzlich der letzte Durchlauf mit Warnungen und Fehlern zur Verfügung.",-1)),e[6]||(e[6]=b("br",null,null,-1)),g(k,{modelValue:t.selectedVariant,"onUpdate:modelValue":e[2]||(e[2]=i=>t.selectedVariant=i),title:"Logfile",required:"",options:t.foundFiles.map(i=>({value:i.suffix,text:i.title})),onChange:e[3]||(e[3]=i=>s.loadLog(n.logFile,t.selectedVariant))},null,8,["modelValue","options"])]),_:1})):m("",!0),b("pre",E,v(t.logData),1)]),_:1},8,["title","onExpanded"])}const A=F(I,[["render",K],["__scopeId","data-v-a320c3d6"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/debug_config/LogCard.vue"]]),Z={name:"OpenwbDebuggingView",components:{OpenwbLogCard:A},mixins:[B],emits:["save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/system/debug_level",writeable:!0}],logFiles:[{title:"Main-Log",fileName:"/openWB/ramdisk/main.log"},{title:"Log des internen Ladepunktes",fileName:"/openWB/ramdisk/internal_chargepoint.log"},{title:"Log des Ladeprotokolls",fileName:"/openWB/ramdisk/chargelog.log"},{title:"MQTT-Log",fileName:"/openWB/ramdisk/mqtt.log"},{title:"SoC-Log",fileName:"/openWB/ramdisk/soc.log"},{title:"Protokoll des letzten Updates",fileName:"/openWB/data/log/update.log"},{title:"Protokoll des Remote-Dienstes",fileName:"/openWB/ramdisk/remote_support.log"},{title:"Protokoll des SmartHome Dienstes",fileName:"/openWB/ramdisk/smarthome.log"},{title:"Protokoll der Sicherung",fileName:"/openWB/data/log/backup.log"},{title:"Protokoll der Wiederherstellung",fileName:"/openWB/data/log/restore.log"},{title:"Protokoll der Datenmigration",fileName:"/openWB/data/log/data_migration.log"},{title:"Protokoll über die Schaltvorgänge von steuerbaren Verbrauchseinrichtungen",fileName:"/openWB/data/log/steuve_control_command.log"},{title:"Protokoll der Summenberechnung",fileName:"/openWB/ramdisk/generate_totals.log"},{title:"Thread-Errors",fileName:"/openWB/ramdisk/thread_errors.log"}]}}},O={class:"debugging"},R={name:"debugConfigForm"};function U(o,e,n,a,t,s){const d=l("openwb-base-button-group-input"),c=l("openwb-base-alert"),k=l("openwb-base-card"),w=l("openwb-base-submit-buttons"),_=l("openwb-log-card");return u(),C("div",O,[b("form",R,[g(k,{title:"Protokollierung"},{default:r(()=>[g(d,{title:"Debug Level",buttons:[{buttonValue:30,text:"Warnungen und Fehler"},{buttonValue:20,text:"Info"},{buttonValue:10,text:"Details"}],"model-value":o.$store.state.mqtt["openWB/system/debug_level"],"onUpdate:modelValue":e[0]||(e[0]=i=>o.updateState("openWB/system/debug_level",i))},{help:r(()=>[...e[4]||(e[4]=[h(' Wenn der Debug Level auf "Info" oder "Details" gesetzt wird, werden mehr Informationen in die Logdateien geschrieben. Im normalen Betrieb sollte immer "Warnungen und Fehler" gewählt werden, um die Schreibvorgänge auf der SD-Karte zu reduzieren. ',-1)])]),_:1},8,["model-value"]),g(c,{subtype:"warning"},{default:r(()=>[...e[5]||(e[5]=[h(' Achtung! In den Einstellungen "Info" und "Details" können in den Logdateien sensible Daten wie Benutzernamen und Passwörter enthalten sein. Diese sollten vor dem Veröffentlichen z.B. im Forum unkenntlich gemacht werden. Private IP-Adressen (z.B. 192.168.x.x) müssen nicht maskiert werden, da diese nicht über das Internet erreichbar sind. ',-1)])]),_:1})]),_:1}),g(w,{"form-name":"debugConfigForm",onSave:e[1]||(e[1]=i=>o.$emit("save",o.mqttTopicsToPublish)),onReset:e[2]||(e[2]=i=>o.$emit("reset")),onDefaults:e[3]||(e[3]=i=>o.$emit("defaults"))})]),(u(!0),C(M,null,q(t.logFiles,i=>(u(),p(_,{key:i.fileName,title:i.title,"log-file":i.fileName},null,8,["title","log-file"]))),128))])}const Y=F(Z,[["render",U],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/DebugConfiguration.vue"]]);export{Y as default}; diff --git a/web/settings/assets/DisplayConfiguration-BtMQTY__.js b/web/settings/assets/DisplayConfiguration-CqMq051X.js similarity index 97% rename from web/settings/assets/DisplayConfiguration-BtMQTY__.js rename to web/settings/assets/DisplayConfiguration-CqMq051X.js index 626f865440..e09e9fab0a 100644 --- a/web/settings/assets/DisplayConfiguration-BtMQTY__.js +++ b/web/settings/assets/DisplayConfiguration-CqMq051X.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/displayTheme-Cyu9dT1E.js","assets/vendor-BwGffBs-.js","assets/vendor-Cq9CCOuG.css","assets/index-Bv2WLdLZ.js","assets/vendor-fortawesome-DplTMxoa.js","assets/vendor-bootstrap-DxivtUnb.js","assets/vendor-jquery-CEMonh9Y.js","assets/vendor-bootstrap-BJ8HpIhY.css","assets/vendor-axios-C0vEeTtS.js","assets/index-xf6JJloS.css","assets/dynamic-import-helper-BheWnx7M.js","assets/displayTheme-DEZOYyQI.js"])))=>i.map(i=>d[i]); -import{_ as B,C}from"./index-Bv2WLdLZ.js";import{_ as z}from"./dynamic-import-helper-BheWnx7M.js";import{F as $,l as S,ac as O,ad as V,ae as q,af as E}from"./vendor-fortawesome-DplTMxoa.js";import{_,m as p,l as r,f as d,z as f,u as a,B as n,J as m,q as i,y as o,a7 as M,P,K as j,x as c}from"./vendor-BwGffBs-.js";const A={props:{displayTheme:{type:Object,required:!0}},emits:["update:configuration"],methods:{updateConfiguration(t,e=void 0){this.$emit("update:configuration",{value:t,object:e})}}},L=_(A,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/display_themes/DisplayThemeConfigMixin.vue"]]),N={name:"DisplayThemeFallback",mixins:[L]},F={class:"display-theme-fallback"},I={key:1};function U(t,e,l,w,v,b){const u=p("openwb-base-alert"),y=p("openwb-base-textarea");return r(),d("div",F,[Object.keys(t.displayTheme.configuration).length==0?(r(),f(u,{key:0,subtype:"info"},{default:a(()=>[n(' Das Display-Theme "'+m(t.displayTheme.name)+'" bietet keine Einstellungen. ',1)]),_:1})):(r(),d("div",I,[i(u,{subtype:"warning"},{default:a(()=>[n(' Es wurde keine Konfigurationsseite für das Display-Theme "'+m(t.displayTheme.name)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),i(y,{title:"Konfiguration",subtype:"json","model-value":t.displayTheme.configuration,"onUpdate:modelValue":e[0]||(e[0]=g=>t.updateConfiguration(g,"configuration"))},{help:a(()=>[...e[1]||(e[1]=[n(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),i(u,{subtype:"info"},{default:a(()=>[o("pre",null,m(JSON.stringify(t.displayTheme.configuration,void 0,2)),1)]),_:1})]))])}const x=_(N,[["render",U],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/display_themes/OpenwbDisplayThemeFallback.vue"]]);S.add(O,V,q,E);const J={name:"OpenwbDisplayThemeProxy",components:{FontAwesomeIcon:$},props:{displayTheme:{type:Object,required:!0}},emits:["update:configuration"],methods:{getDisplayThemeComponent(){return console.debug(`loading display theme: ${this.displayTheme.type}`),M({loader:()=>z(Object.assign({"./cards/displayTheme.vue":()=>B(()=>import("./displayTheme-Cyu9dT1E.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])),"./colors/displayTheme.vue":()=>B(()=>import("./displayTheme-DEZOYyQI.js"),__vite__mapDeps([11,1,2,3,4,5,6,7,8,9,10]))}),`./${this.displayTheme.type}/displayTheme.vue`,3),errorComponent:x})},updateConfiguration(t){this.$emit("update:configuration",t)}}};function R(t,e,l,w,v,b){const u=p("font-awesome-icon"),y=p("openwb-base-alert"),g=p("openwb-base-heading");return r(),d(j,null,[l.displayTheme.official?(r(),f(y,{key:0,subtype:"success"},{default:a(()=>[i(u,{icon:["fas","certificate"]}),n(' Das ausgewählte Display Theme "'+m(l.displayTheme.name)+'" wird von openWB gepflegt. ',1)]),_:1})):(r(),f(y,{key:1,subtype:"info"},{default:a(()=>[i(u,{icon:["fas","people-group"]}),n(' Das ausgewählte Display Theme "'+m(l.displayTheme.name)+'" wird in unserer Community gepflegt. Rückfragen oder Probleme bitte im Forum diskutieren. ',1)]),_:1})),i(y,{subtype:l.displayTheme.userManagementSupported?"success":"warning"},{default:a(()=>[i(u,{icon:["fas",l.displayTheme.userManagementSupported?"user-check":"user-slash"]},null,8,["icon"]),n(' Das ausgewählte Display Theme "'+m(l.displayTheme.name)+'" unterstützt die Benutzerverwaltung'+m(l.displayTheme.userManagementSupported?"":" nicht")+". ",1)]),_:1},8,["subtype"]),i(g,null,{default:a(()=>[n(' Einstellungen für Display Theme "'+m(l.displayTheme.name)+'" ',1)]),_:1}),(r(),f(P(b.getDisplayThemeComponent()),{"display-theme":l.displayTheme,"onUpdate:configuration":e[0]||(e[0]=h=>b.updateConfiguration(h))},null,40,["display-theme"]))],64)}const H=_(J,[["render",R],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/display_themes/OpenwbDisplayThemeProxy.vue"]]),G={name:"OpenwbOptionalComponentsView",components:{OpenwbDisplayThemeProxy:H},mixins:[C],emits:["save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/optional/int_display/active",writeable:!0},{topic:"openWB/optional/int_display/on_if_plugged_in",writeable:!0},{topic:"openWB/optional/int_display/only_local_charge_points",writeable:!0},{topic:"openWB/optional/int_display/rotation",writeable:!0},{topic:"openWB/optional/int_display/standby",writeable:!0},{topic:"openWB/optional/int_display/theme",writeable:!0},{topic:"openWB/system/configurable/display_themes",writeable:!1},{topic:"openWB/system/security/user_management_active",writeable:!1}]}},computed:{displayThemeList(){return this.$store.state.mqtt["openWB/system/configurable/display_themes"]},displayThemeGroupList(){let t=[{label:"openWB",options:[]},{label:"Community",options:[]}];return this.displayThemeList?.forEach(e=>{e.defaults.userManagementSupported!==!0&&this.$store.state.mqtt["openWB/system/security/user_management_active"]===!0||(e.official===!0?t[0].options.push(e):t[1].options.push(e))}),t.filter(e=>e.options.length>0)}},methods:{getDisplayThemeDefaults(t){const e=this.displayThemeList.find(l=>l.value==t);return Object.prototype.hasOwnProperty.call(e,"defaults")?{...JSON.parse(JSON.stringify(e.defaults))}:(console.warn("no default configuration found for display theme type!",t),{})},updateSelectedDisplayTheme(t){this.updateState("openWB/optional/int_display/theme",this.getDisplayThemeDefaults(t))},updateConfiguration(t,e){console.debug("updateConfiguration",t,e),this.updateState(t,e.value,e.object)}}},K={class:"optionalComponents"},Z={name:"optionalComponentsForm"},Q={key:0},X={key:1},Y={key:2},ee={key:0};function te(t,e,l,w,v,b){const u=p("openwb-base-button-group-input"),y=p("openwb-base-heading"),g=p("openwb-base-range-input"),h=p("openwb-base-alert"),D=p("openwb-base-select-input"),T=p("openwb-display-theme-proxy"),W=p("openwb-base-card"),k=p("openwb-base-submit-buttons");return r(),d("div",K,[o("form",Z,[i(W,{title:"Display (intern oder extern)"},{default:a(()=>[i(u,{title:"Integriertes Display","model-value":t.$store.state.mqtt["openWB/optional/int_display/active"],buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"onUpdate:modelValue":e[0]||(e[0]=s=>t.updateState("openWB/optional/int_display/active",s))},{help:a(()=>[...e[9]||(e[9]=[n(' Je nach Bestellung kann die openWB mit oder ohne Display geliefert worden sein. Auch die Variante "Standalone" bietet beide Optionen. Bitte prüfe zuerst die Hardwareausstattung deiner openWB (z.B. Lieferschein). ',-1)])]),_:1},8,["model-value"]),t.$store.state.mqtt["openWB/optional/int_display/active"]==!0?(r(),d("div",Q,[i(u,{title:"Orientierung","model-value":t.$store.state.mqtt["openWB/optional/int_display/rotation"],buttons:[{buttonValue:0,text:"0°"},{buttonValue:90,text:"90°"},{buttonValue:180,text:"180°"},{buttonValue:270,text:"270°"}],"onUpdate:modelValue":e[1]||(e[1]=s=>t.updateState("openWB/optional/int_display/rotation",s))},{help:a(()=>[...e[10]||(e[10]=[n(" Mit dieser Einstellung kann das Display im Uhrzeigersinn gedreht werden, falls erforderlich. Nach einer Änderung ist ein Neustart erforderlich!",-1),o("br",null,null,-1),n(" Diese Einstellung erfordert ein Raspberry Pi Display. Für eine openWB series2 mit integriertem Display muss 0° ausgewählt werden, für eine Standalone mit Display 180°. Anzeigen, welche über HDMI angeschlossen sind, werden nicht unterstützt. ",-1)])]),_:1},8,["model-value"]),e[13]||(e[13]=o("hr",null,null,-1)),i(y,null,{default:a(()=>[...e[11]||(e[11]=[n(" Display Standby ",-1)])]),_:1}),i(g,{title:"Ausschaltzeit",min:0,max:12,step:1,"model-value":t.$store.state.mqtt["openWB/optional/int_display/standby"],unit:"Sek",labels:[{label:5,value:5},{label:10,value:10},{label:15,value:15},{label:30,value:30},{label:45,value:45},{label:"1 Min",value:60},{label:"1,5 Min",value:90},{label:"2 Min",value:120},{label:"3 Min",value:180},{label:"4 Min",value:240},{label:"5 Min",value:300},{label:"10 Min",value:600},{label:"Immer an",value:0}],"onUpdate:modelValue":e[2]||(e[2]=s=>t.updateState("openWB/optional/int_display/standby",s))},{help:a(()=>[...e[12]||(e[12]=[n(" Hier kann eine Zeitspanne angegeben werden, nach der das Display ausgeschaltet wird. ",-1)])]),_:1},8,["model-value"])])):c("",!0),t.$store.state.mqtt["openWB/general/extern"]===!0?(r(),d("div",X,[e[15]||(e[15]=o("hr",null,null,-1)),i(h,{subtype:"info"},{default:a(()=>[...e[14]||(e[14]=[n(' Weitere Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(r(),d("div",Y,[e[19]||(e[19]=o("hr",null,null,-1)),i(u,{title:"Ladepunkte auf secondary openWB","model-value":t.$store.state.mqtt["openWB/optional/int_display/only_local_charge_points"],buttons:[{buttonValue:!1,text:"Alle",class:"btn-outline-danger"},{buttonValue:!0,text:"Nur Lokale",class:"btn-outline-success"}],"onUpdate:modelValue":e[3]||(e[3]=s=>t.updateState("openWB/optional/int_display/only_local_charge_points",s))},{help:a(()=>[...e[16]||(e[16]=[n(" Hiermit kann festgelegt werden, ob an angebundenen secondary openWB alle oder nur die jeweils lokalen Ladepunkte angezeigt werden sollen. ",-1)])]),_:1},8,["model-value"]),i(h,{subtype:"info",class:"mb-3"},{default:a(()=>[...e[17]||(e[17]=[o("p",null,[n(" Wenn die "),o("strong",null,"Benutzerverwaltung"),n(" aktiviert ist, werden nur die Ladepunkte angezeigt, für welche dem jeweiligen Display-Benutzer auch Zugriffsrechte gegeben wurden. Ebenfalls ist es möglich, dass bestimmte Daten von Wechselrichtern, Fahrzeugen, etc. nicht angezeigt werden, wenn der Benutzer hierfür keine Berechtigung besitzt. ")],-1),o("p",null,' Bei aktivierter Benutzerverwaltung wird empfohlen, die Anzeige auf "Alle" Ladepunkte zu setzen, damit es nicht zu Überschneidungen zwischen diesen Einschränkungen kommt. ',-1),o("p",null,[n(" Das "),o("strong",null,"integrierte Display"),n(' einer openWB series2 oder standalone verwendet automatisch den Benutzer "Display-Intern". Für '),o("strong",null,"externe openWB"),n(' im Steuerungsmodus "secondary" werden automatisch Benutzer mit dem Namen "Display-'),o("i",null,"IP"),n('", wobei '),o("i",null,"IP"),n(" für die jeweilige IP-Adresse der secondary openWB steht, angelegt. ")],-1)])]),_:1}),e[20]||(e[20]=o("hr",null,null,-1)),t.$store.state.mqtt["openWB/optional/int_display/theme"]!==void 0?(r(),d("div",ee,[i(D,{class:"mb-2",title:"Theme des Displays",groups:b.displayThemeGroupList,"model-value":t.$store.state.mqtt["openWB/optional/int_display/theme"].type,"onUpdate:modelValue":e[4]||(e[4]=s=>b.updateSelectedDisplayTheme(s))},{help:a(()=>[...e[18]||(e[18]=[n(" Hier können unterschiedliche Display-Anzeigen, s.g. Themes, ausgewählt werden. Die Anzahl der Themes wird sich mit zukünftigen Releases erhöhen. ",-1)])]),_:1},8,["groups","model-value"]),t.$store.state.mqtt["openWB/optional/int_display/theme"].type?(r(),f(T,{key:0,"display-theme":t.$store.state.mqtt["openWB/optional/int_display/theme"],"onUpdate:configuration":e[5]||(e[5]=s=>b.updateConfiguration("openWB/optional/int_display/theme",s))},null,8,["display-theme"])):c("",!0)])):c("",!0)]))]),_:1}),i(k,{"form-name":"optionalComponentsForm",onSave:e[6]||(e[6]=s=>t.$emit("save",t.mqttTopicsToPublish)),onReset:e[7]||(e[7]=s=>t.$emit("reset")),onDefaults:e[8]||(e[8]=s=>t.$emit("defaults"))})])])}const ne=_(G,[["render",te],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/DisplayConfiguration.vue"]]),le=Object.freeze(Object.defineProperty({__proto__:null,default:ne},Symbol.toStringTag,{value:"Module"}));export{L as D,le as a}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/displayTheme-DXQhlkdH.js","assets/vendor-BwGffBs-.js","assets/vendor-Cq9CCOuG.css","assets/index-CE-5DBwq.js","assets/vendor-fortawesome-DplTMxoa.js","assets/vendor-bootstrap-DxivtUnb.js","assets/vendor-jquery-CEMonh9Y.js","assets/vendor-bootstrap-BJ8HpIhY.css","assets/vendor-axios-C0vEeTtS.js","assets/index-xf6JJloS.css","assets/dynamic-import-helper-BheWnx7M.js","assets/displayTheme-B4_wh84b.js"])))=>i.map(i=>d[i]); +import{_ as B,C}from"./index-CE-5DBwq.js";import{_ as z}from"./dynamic-import-helper-BheWnx7M.js";import{F as $,l as S,ac as O,ad as V,ae as q,af as E}from"./vendor-fortawesome-DplTMxoa.js";import{_,m as p,l as r,f as d,z as f,u as a,B as n,J as m,q as i,y as o,a7 as M,P,K as j,x as c}from"./vendor-BwGffBs-.js";const A={props:{displayTheme:{type:Object,required:!0}},emits:["update:configuration"],methods:{updateConfiguration(t,e=void 0){this.$emit("update:configuration",{value:t,object:e})}}},L=_(A,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/display_themes/DisplayThemeConfigMixin.vue"]]),N={name:"DisplayThemeFallback",mixins:[L]},F={class:"display-theme-fallback"},I={key:1};function U(t,e,l,w,v,b){const u=p("openwb-base-alert"),y=p("openwb-base-textarea");return r(),d("div",F,[Object.keys(t.displayTheme.configuration).length==0?(r(),f(u,{key:0,subtype:"info"},{default:a(()=>[n(' Das Display-Theme "'+m(t.displayTheme.name)+'" bietet keine Einstellungen. ',1)]),_:1})):(r(),d("div",I,[i(u,{subtype:"warning"},{default:a(()=>[n(' Es wurde keine Konfigurationsseite für das Display-Theme "'+m(t.displayTheme.name)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),i(y,{title:"Konfiguration",subtype:"json","model-value":t.displayTheme.configuration,"onUpdate:modelValue":e[0]||(e[0]=g=>t.updateConfiguration(g,"configuration"))},{help:a(()=>[...e[1]||(e[1]=[n(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),i(u,{subtype:"info"},{default:a(()=>[o("pre",null,m(JSON.stringify(t.displayTheme.configuration,void 0,2)),1)]),_:1})]))])}const x=_(N,[["render",U],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/display_themes/OpenwbDisplayThemeFallback.vue"]]);S.add(O,V,q,E);const J={name:"OpenwbDisplayThemeProxy",components:{FontAwesomeIcon:$},props:{displayTheme:{type:Object,required:!0}},emits:["update:configuration"],methods:{getDisplayThemeComponent(){return console.debug(`loading display theme: ${this.displayTheme.type}`),M({loader:()=>z(Object.assign({"./cards/displayTheme.vue":()=>B(()=>import("./displayTheme-DXQhlkdH.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])),"./colors/displayTheme.vue":()=>B(()=>import("./displayTheme-B4_wh84b.js"),__vite__mapDeps([11,1,2,3,4,5,6,7,8,9,10]))}),`./${this.displayTheme.type}/displayTheme.vue`,3),errorComponent:x})},updateConfiguration(t){this.$emit("update:configuration",t)}}};function R(t,e,l,w,v,b){const u=p("font-awesome-icon"),y=p("openwb-base-alert"),g=p("openwb-base-heading");return r(),d(j,null,[l.displayTheme.official?(r(),f(y,{key:0,subtype:"success"},{default:a(()=>[i(u,{icon:["fas","certificate"]}),n(' Das ausgewählte Display Theme "'+m(l.displayTheme.name)+'" wird von openWB gepflegt. ',1)]),_:1})):(r(),f(y,{key:1,subtype:"info"},{default:a(()=>[i(u,{icon:["fas","people-group"]}),n(' Das ausgewählte Display Theme "'+m(l.displayTheme.name)+'" wird in unserer Community gepflegt. Rückfragen oder Probleme bitte im Forum diskutieren. ',1)]),_:1})),i(y,{subtype:l.displayTheme.userManagementSupported?"success":"warning"},{default:a(()=>[i(u,{icon:["fas",l.displayTheme.userManagementSupported?"user-check":"user-slash"]},null,8,["icon"]),n(' Das ausgewählte Display Theme "'+m(l.displayTheme.name)+'" unterstützt die Benutzerverwaltung'+m(l.displayTheme.userManagementSupported?"":" nicht")+". ",1)]),_:1},8,["subtype"]),i(g,null,{default:a(()=>[n(' Einstellungen für Display Theme "'+m(l.displayTheme.name)+'" ',1)]),_:1}),(r(),f(P(b.getDisplayThemeComponent()),{"display-theme":l.displayTheme,"onUpdate:configuration":e[0]||(e[0]=h=>b.updateConfiguration(h))},null,40,["display-theme"]))],64)}const H=_(J,[["render",R],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/display_themes/OpenwbDisplayThemeProxy.vue"]]),G={name:"OpenwbOptionalComponentsView",components:{OpenwbDisplayThemeProxy:H},mixins:[C],emits:["save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/optional/int_display/active",writeable:!0},{topic:"openWB/optional/int_display/on_if_plugged_in",writeable:!0},{topic:"openWB/optional/int_display/only_local_charge_points",writeable:!0},{topic:"openWB/optional/int_display/rotation",writeable:!0},{topic:"openWB/optional/int_display/standby",writeable:!0},{topic:"openWB/optional/int_display/theme",writeable:!0},{topic:"openWB/system/configurable/display_themes",writeable:!1},{topic:"openWB/system/security/user_management_active",writeable:!1}]}},computed:{displayThemeList(){return this.$store.state.mqtt["openWB/system/configurable/display_themes"]},displayThemeGroupList(){let t=[{label:"openWB",options:[]},{label:"Community",options:[]}];return this.displayThemeList?.forEach(e=>{e.defaults.userManagementSupported!==!0&&this.$store.state.mqtt["openWB/system/security/user_management_active"]===!0||(e.official===!0?t[0].options.push(e):t[1].options.push(e))}),t.filter(e=>e.options.length>0)}},methods:{getDisplayThemeDefaults(t){const e=this.displayThemeList.find(l=>l.value==t);return Object.prototype.hasOwnProperty.call(e,"defaults")?{...JSON.parse(JSON.stringify(e.defaults))}:(console.warn("no default configuration found for display theme type!",t),{})},updateSelectedDisplayTheme(t){this.updateState("openWB/optional/int_display/theme",this.getDisplayThemeDefaults(t))},updateConfiguration(t,e){console.debug("updateConfiguration",t,e),this.updateState(t,e.value,e.object)}}},K={class:"optionalComponents"},Z={name:"optionalComponentsForm"},Q={key:0},X={key:1},Y={key:2},ee={key:0};function te(t,e,l,w,v,b){const u=p("openwb-base-button-group-input"),y=p("openwb-base-heading"),g=p("openwb-base-range-input"),h=p("openwb-base-alert"),D=p("openwb-base-select-input"),T=p("openwb-display-theme-proxy"),W=p("openwb-base-card"),k=p("openwb-base-submit-buttons");return r(),d("div",K,[o("form",Z,[i(W,{title:"Display (intern oder extern)"},{default:a(()=>[i(u,{title:"Integriertes Display","model-value":t.$store.state.mqtt["openWB/optional/int_display/active"],buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"onUpdate:modelValue":e[0]||(e[0]=s=>t.updateState("openWB/optional/int_display/active",s))},{help:a(()=>[...e[9]||(e[9]=[n(' Je nach Bestellung kann die openWB mit oder ohne Display geliefert worden sein. Auch die Variante "Standalone" bietet beide Optionen. Bitte prüfe zuerst die Hardwareausstattung deiner openWB (z.B. Lieferschein). ',-1)])]),_:1},8,["model-value"]),t.$store.state.mqtt["openWB/optional/int_display/active"]==!0?(r(),d("div",Q,[i(u,{title:"Orientierung","model-value":t.$store.state.mqtt["openWB/optional/int_display/rotation"],buttons:[{buttonValue:0,text:"0°"},{buttonValue:90,text:"90°"},{buttonValue:180,text:"180°"},{buttonValue:270,text:"270°"}],"onUpdate:modelValue":e[1]||(e[1]=s=>t.updateState("openWB/optional/int_display/rotation",s))},{help:a(()=>[...e[10]||(e[10]=[n(" Mit dieser Einstellung kann das Display im Uhrzeigersinn gedreht werden, falls erforderlich. Nach einer Änderung ist ein Neustart erforderlich!",-1),o("br",null,null,-1),n(" Diese Einstellung erfordert ein Raspberry Pi Display. Für eine openWB series2 mit integriertem Display muss 0° ausgewählt werden, für eine Standalone mit Display 180°. Anzeigen, welche über HDMI angeschlossen sind, werden nicht unterstützt. ",-1)])]),_:1},8,["model-value"]),e[13]||(e[13]=o("hr",null,null,-1)),i(y,null,{default:a(()=>[...e[11]||(e[11]=[n(" Display Standby ",-1)])]),_:1}),i(g,{title:"Ausschaltzeit",min:0,max:12,step:1,"model-value":t.$store.state.mqtt["openWB/optional/int_display/standby"],unit:"Sek",labels:[{label:5,value:5},{label:10,value:10},{label:15,value:15},{label:30,value:30},{label:45,value:45},{label:"1 Min",value:60},{label:"1,5 Min",value:90},{label:"2 Min",value:120},{label:"3 Min",value:180},{label:"4 Min",value:240},{label:"5 Min",value:300},{label:"10 Min",value:600},{label:"Immer an",value:0}],"onUpdate:modelValue":e[2]||(e[2]=s=>t.updateState("openWB/optional/int_display/standby",s))},{help:a(()=>[...e[12]||(e[12]=[n(" Hier kann eine Zeitspanne angegeben werden, nach der das Display ausgeschaltet wird. ",-1)])]),_:1},8,["model-value"])])):c("",!0),t.$store.state.mqtt["openWB/general/extern"]===!0?(r(),d("div",X,[e[15]||(e[15]=o("hr",null,null,-1)),i(h,{subtype:"info"},{default:a(()=>[...e[14]||(e[14]=[n(' Weitere Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(r(),d("div",Y,[e[19]||(e[19]=o("hr",null,null,-1)),i(u,{title:"Ladepunkte auf secondary openWB","model-value":t.$store.state.mqtt["openWB/optional/int_display/only_local_charge_points"],buttons:[{buttonValue:!1,text:"Alle",class:"btn-outline-danger"},{buttonValue:!0,text:"Nur Lokale",class:"btn-outline-success"}],"onUpdate:modelValue":e[3]||(e[3]=s=>t.updateState("openWB/optional/int_display/only_local_charge_points",s))},{help:a(()=>[...e[16]||(e[16]=[n(" Hiermit kann festgelegt werden, ob an angebundenen secondary openWB alle oder nur die jeweils lokalen Ladepunkte angezeigt werden sollen. ",-1)])]),_:1},8,["model-value"]),i(h,{subtype:"info",class:"mb-3"},{default:a(()=>[...e[17]||(e[17]=[o("p",null,[n(" Wenn die "),o("strong",null,"Benutzerverwaltung"),n(" aktiviert ist, werden nur die Ladepunkte angezeigt, für welche dem jeweiligen Display-Benutzer auch Zugriffsrechte gegeben wurden. Ebenfalls ist es möglich, dass bestimmte Daten von Wechselrichtern, Fahrzeugen, etc. nicht angezeigt werden, wenn der Benutzer hierfür keine Berechtigung besitzt. ")],-1),o("p",null,' Bei aktivierter Benutzerverwaltung wird empfohlen, die Anzeige auf "Alle" Ladepunkte zu setzen, damit es nicht zu Überschneidungen zwischen diesen Einschränkungen kommt. ',-1),o("p",null,[n(" Das "),o("strong",null,"integrierte Display"),n(' einer openWB series2 oder standalone verwendet automatisch den Benutzer "Display-Intern". Für '),o("strong",null,"externe openWB"),n(' im Steuerungsmodus "secondary" werden automatisch Benutzer mit dem Namen "Display-'),o("i",null,"IP"),n('", wobei '),o("i",null,"IP"),n(" für die jeweilige IP-Adresse der secondary openWB steht, angelegt. ")],-1)])]),_:1}),e[20]||(e[20]=o("hr",null,null,-1)),t.$store.state.mqtt["openWB/optional/int_display/theme"]!==void 0?(r(),d("div",ee,[i(D,{class:"mb-2",title:"Theme des Displays",groups:b.displayThemeGroupList,"model-value":t.$store.state.mqtt["openWB/optional/int_display/theme"].type,"onUpdate:modelValue":e[4]||(e[4]=s=>b.updateSelectedDisplayTheme(s))},{help:a(()=>[...e[18]||(e[18]=[n(" Hier können unterschiedliche Display-Anzeigen, s.g. Themes, ausgewählt werden. Die Anzahl der Themes wird sich mit zukünftigen Releases erhöhen. ",-1)])]),_:1},8,["groups","model-value"]),t.$store.state.mqtt["openWB/optional/int_display/theme"].type?(r(),f(T,{key:0,"display-theme":t.$store.state.mqtt["openWB/optional/int_display/theme"],"onUpdate:configuration":e[5]||(e[5]=s=>b.updateConfiguration("openWB/optional/int_display/theme",s))},null,8,["display-theme"])):c("",!0)])):c("",!0)]))]),_:1}),i(k,{"form-name":"optionalComponentsForm",onSave:e[6]||(e[6]=s=>t.$emit("save",t.mqttTopicsToPublish)),onReset:e[7]||(e[7]=s=>t.$emit("reset")),onDefaults:e[8]||(e[8]=s=>t.$emit("defaults"))})])])}const ne=_(G,[["render",te],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/DisplayConfiguration.vue"]]),le=Object.freeze(Object.defineProperty({__proto__:null,default:ne},Symbol.toStringTag,{value:"Module"}));export{L as D,le as a}; diff --git a/web/settings/assets/GeneralChargeConfiguration-ZMe157LV.js b/web/settings/assets/GeneralChargeConfiguration-Bukx6MR1.js similarity index 92% rename from web/settings/assets/GeneralChargeConfiguration-ZMe157LV.js rename to web/settings/assets/GeneralChargeConfiguration-Bukx6MR1.js index ef08091835..5a511dceb0 100644 --- a/web/settings/assets/GeneralChargeConfiguration-ZMe157LV.js +++ b/web/settings/assets/GeneralChargeConfiguration-Bukx6MR1.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/flexible_tariff-Cy1943RB.js","assets/vendor-BwGffBs-.js","assets/vendor-Cq9CCOuG.css","assets/index-Bv2WLdLZ.js","assets/vendor-fortawesome-DplTMxoa.js","assets/vendor-bootstrap-DxivtUnb.js","assets/vendor-jquery-CEMonh9Y.js","assets/vendor-bootstrap-BJ8HpIhY.css","assets/vendor-axios-C0vEeTtS.js","assets/index-xf6JJloS.css","assets/dynamic-import-helper-BheWnx7M.js","assets/flexible_tariff-DD91qbM9.js","assets/flexible_tariff-D4bc_giw.js","assets/flexible_tariff-CuMmB510.js","assets/flexible_tariff-gwuyMP87.css","assets/flexible_tariff-BYbDwmy0.js","assets/flexible_tariff-DAnnz_Z9.js","assets/flexible_tariff-wVWYo-TB.js","assets/flexible_tariff-BjheVcQG.js","assets/flexible_tariff--nXtDno3.js","assets/flexible_tariff-CPgSVk1T.js","assets/flexible_tariff-sJj9lops.js","assets/flexible_tariff-C-gXkgBd.js","assets/grid_fee-E5Q8MXnI.js","assets/grid_fee-Cs94pth1.css"])))=>i.map(i=>d[i]); -import{_ as g,C as L}from"./index-Bv2WLdLZ.js";import{_ as F}from"./dynamic-import-helper-BheWnx7M.js";import{F as P,l as C,ac as S,ad as $}from"./vendor-fortawesome-DplTMxoa.js";import{_ as w,m as l,l as a,f as p,z as _,u as i,B as o,J as m,q as n,y as u,a7 as O,P as T,K as E,x as y}from"./vendor-BwGffBs-.js";const A={props:{flexibleTariff:{type:Object,required:!0}},emits:["update:configuration"],methods:{updateConfiguration(t,e=void 0){this.$emit("update:configuration",{value:t,object:e})}}},N=w(A,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/FlexibleTariffConfigMixin.vue"]]),G={name:"FlexibleTariffConfigFallback",mixins:[N]},I={class:"flexible-tariff-fallback"},R={key:1};function U(t,e,d,h,B,f){const s=l("openwb-base-alert"),b=l("openwb-base-textarea");return a(),p("div",I,[Object.keys(t.flexibleTariff.configuration).length==0?(a(),_(s,{key:0,subtype:"info"},{default:i(()=>[o(' Der Anbieter "'+m(t.flexibleTariff.name)+'" bietet keine Einstellungen. ',1)]),_:1})):(a(),p("div",R,[n(s,{subtype:"warning"},{default:i(()=>[o(' Es wurde keine Konfigurationsseite für den Anbieter "'+m(t.flexibleTariff.name)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),n(b,{title:"Konfiguration",subtype:"json","model-value":t.flexibleTariff.configuration,"onUpdate:modelValue":e[0]||(e[0]=c=>t.updateConfiguration(c,"configuration"))},{help:i(()=>[...e[1]||(e[1]=[o(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),n(s,{subtype:"info"},{default:i(()=>[u("pre",null,m(JSON.stringify(t.flexibleTariff.configuration,void 0,2)),1)]),_:1})]))])}const j=w(G,[["render",U],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/OpenwbFlexibleTariffConfigFallback.vue"]]);C.add(S,$);const M={name:"OpenwbFlexibleTariffProxy",components:{FontAwesomeIcon:P},props:{flexibleTariff:{type:Object,required:!0}},emits:["update:configuration"],methods:{getTariffComponent(){return console.debug(`loading flexible tariff: ${this.flexibleTariff.type}`),O({loader:()=>F(Object.assign({"./awattar/flexible_tariff.vue":()=>g(()=>import("./flexible_tariff-Cy1943RB.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])),"./ekz/flexible_tariff.vue":()=>g(()=>import("./flexible_tariff-DD91qbM9.js"),__vite__mapDeps([11,1,2,3,4,5,6,7,8,9,10])),"./energycharts/flexible_tariff.vue":()=>g(()=>import("./flexible_tariff-D4bc_giw.js"),__vite__mapDeps([12,1,2,3,4,5,6,7,8,9,10])),"./fixed_hours/flexible_tariff.vue":()=>g(()=>import("./flexible_tariff-CuMmB510.js"),__vite__mapDeps([13,1,2,4,3,5,6,7,8,9,10,14])),"./groupe_e/flexible_tariff.vue":()=>g(()=>import("./flexible_tariff-BYbDwmy0.js"),__vite__mapDeps([15,1,2,3,4,5,6,7,8,9,10])),"./naturstrom/flexible_tariff.vue":()=>g(()=>import("./flexible_tariff-DAnnz_Z9.js"),__vite__mapDeps([16,3,1,2,4,5,6,7,8,9,10])),"./octopusenergy/flexible_tariff.vue":()=>g(()=>import("./flexible_tariff-wVWYo-TB.js"),__vite__mapDeps([17,1,2,3,4,5,6,7,8,9,10])),"./ostrom/flexible_tariff.vue":()=>g(()=>import("./flexible_tariff-BjheVcQG.js"),__vite__mapDeps([18,1,2,3,4,5,6,7,8,9,10])),"./rabot/flexible_tariff.vue":()=>g(()=>import("./flexible_tariff--nXtDno3.js"),__vite__mapDeps([19,8,1,2,3,4,5,6,7,9,10])),"./tibber/flexible_tariff.vue":()=>g(()=>import("./flexible_tariff-CPgSVk1T.js"),__vite__mapDeps([20,1,2,3,4,5,6,7,8,9,10])),"./voltego/flexible_tariff.vue":()=>g(()=>import("./flexible_tariff-sJj9lops.js"),__vite__mapDeps([21,1,2,3,4,5,6,7,8,9,10])),"./westfalen_wind/flexible_tariff.vue":()=>g(()=>import("./flexible_tariff-C-gXkgBd.js"),__vite__mapDeps([22,1,2,3,4,5,6,7,8,9,10]))}),`./${this.flexibleTariff.type}/flexible_tariff.vue`,3),errorComponent:j})},updateConfiguration(t){this.$emit("update:configuration",t)}}};function Z(t,e,d,h,B,f){const s=l("font-awesome-icon"),b=l("openwb-base-alert"),c=l("openwb-base-heading");return a(),p(E,null,[d.flexibleTariff.official?(a(),_(b,{key:0,subtype:"success"},{default:i(()=>[n(s,{icon:["fas","certificate"]}),o(' Das ausgewählte Modul "'+m(d.flexibleTariff.name)+'" wird von openWB gepflegt. ',1)]),_:1})):(a(),_(b,{key:1,subtype:"info"},{default:i(()=>[n(s,{icon:["fas","people-group"]}),o(' Das ausgewählte Modul "'+m(d.flexibleTariff.name)+'" wird in unserer Community gepflegt. Rückfragen oder Probleme bitte im Forum diskutieren. ',1)]),_:1})),n(c,null,{default:i(()=>[o(' Einstellungen für Modul "'+m(d.flexibleTariff.name)+'" ',1)]),_:1}),(a(),_(T(f.getTariffComponent()),{"flexible-tariff":d.flexibleTariff,"onUpdate:configuration":e[0]||(e[0]=v=>f.updateConfiguration(v))},null,40,["flexible-tariff"]))],64)}const K=w(M,[["render",Z],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/OpenwbFlexibleTariffProxy.vue"]]),J={props:{gridFee:{type:Object,required:!0}},emits:["update:configuration"],methods:{updateConfiguration(t,e=void 0){this.$emit("update:configuration",{value:t,object:e})}}},H=w(J,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/grid_fees/GridFeeConfigMixin.vue"]]),Q={name:"GridFeeConfigFallback",mixins:[H]},X={class:"grid-fee-fallback"},Y={key:1};function ee(t,e,d,h,B,f){const s=l("openwb-base-alert"),b=l("openwb-base-textarea");return a(),p("div",X,[Object.keys(t.gridFee.configuration).length==0?(a(),_(s,{key:0,subtype:"info"},{default:i(()=>[o(' Der Anbieter "'+m(t.gridFee.name)+'" bietet keine Einstellungen. ',1)]),_:1})):(a(),p("div",Y,[n(s,{subtype:"warning"},{default:i(()=>[o(' Es wurde keine Konfigurationsseite für den Anbieter "'+m(t.gridFee.name)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),n(b,{title:"Konfiguration",subtype:"json","model-value":t.gridFee.configuration,"onUpdate:modelValue":e[0]||(e[0]=c=>t.updateConfiguration(c,"configuration"))},{help:i(()=>[...e[1]||(e[1]=[o(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),n(s,{subtype:"info"},{default:i(()=>[u("pre",null,m(JSON.stringify(t.gridFee.configuration,void 0,2)),1)]),_:1})]))])}const te=w(Q,[["render",ee],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/grid_fees/OpenwbGridFeeConfigFallback.vue"]]);C.add(S,$);const ne={name:"OpenwbGridFeeProxy",components:{FontAwesomeIcon:P},props:{gridFee:{type:Object,required:!0}},emits:["update:configuration"],methods:{getTariffComponent(){return console.debug(`loading grid fee: ${this.gridFee.type}`),O({loader:()=>F(Object.assign({"./fixed_hours/grid_fee.vue":()=>g(()=>import("./grid_fee-E5Q8MXnI.js"),__vite__mapDeps([23,1,2,4,3,5,6,7,8,9,10,24]))}),`./${this.gridFee.type}/grid_fee.vue`,3),errorComponent:te})},updateConfiguration(t){this.$emit("update:configuration",t)}}};function ie(t,e,d,h,B,f){const s=l("font-awesome-icon"),b=l("openwb-base-alert"),c=l("openwb-base-heading");return a(),p(E,null,[d.gridFee.official?(a(),_(b,{key:0,subtype:"success"},{default:i(()=>[n(s,{icon:["fas","certificate"]}),o(' Das ausgewählte Modul "'+m(d.gridFee.name)+'" wird von openWB gepflegt. ',1)]),_:1})):(a(),_(b,{key:1,subtype:"info"},{default:i(()=>[n(s,{icon:["fas","people-group"]}),o(' Das ausgewählte Modul "'+m(d.gridFee.name)+'" wird in unserer Community gepflegt. Rückfragen oder Probleme bitte im Forum diskutieren. ',1)]),_:1})),n(c,null,{default:i(()=>[o(' Einstellungen für Modul "'+m(d.gridFee.name)+'" ',1)]),_:1}),(a(),_(T(f.getTariffComponent()),{"grid-fee":d.gridFee,"onUpdate:configuration":e[0]||(e[0]=v=>f.updateConfiguration(v))},null,40,["grid-fee"]))],64)}const oe=w(ne,[["render",ie],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/grid_fees/OpenwbGridFeeProxy.vue"]]),re={name:"OpenwbGeneralChargeConfigView",components:{OpenwbFlexibleTariffProxy:K,OpenwbGridFeeProxy:oe},mixins:[L],emits:["save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/general/chargemode_config/unbalanced_load",writeable:!0},{topic:"openWB/general/chargemode_config/unbalanced_load_limit",writeable:!0},{topic:"openWB/general/prices/bat",writeable:!0},{topic:"openWB/general/prices/grid",writeable:!0},{topic:"openWB/general/prices/pv",writeable:!0},{topic:"openWB/optional/ep/flexible_tariff/provider",writeable:!0},{topic:"openWB/optional/ep/grid_fee/provider",writeable:!0},{topic:"openWB/optional/ocpp/config",writeable:!0},{topic:"openWB/system/configurable/flexible_tariffs",writeable:!1},{topic:"openWB/system/configurable/grid_fees",writeable:!1},{topic:"openWB/optional/ep/configured",writeable:!1}]}},computed:{flexibleTariffList(){return this.$store.state.mqtt["openWB/system/configurable/flexible_tariffs"]},gridFeeList(){return this.$store.state.mqtt["openWB/system/configurable/grid_fees"]}},methods:{getFlexibleTariffDefaultConfiguration(t){const e=this.flexibleTariffList.find(d=>d.value==t);return Object.prototype.hasOwnProperty.call(e,"defaults")?{...e.defaults}:(console.warn("no default configuration found for electricity tariff type!",t),{})},updateSelectedFlexibleTariff(t){this.updateState("openWB/optional/ep/flexible_tariff/provider",t,"type"),this.updateState("openWB/optional/ep/flexible_tariff/provider",this.getFlexibleTariffDefaultConfiguration(t))},getGridFeeDefaultConfiguration(t){const e=this.gridFeeList.find(d=>d.value==t);return e&&Object.prototype.hasOwnProperty.call(e,"defaults")?{...e.defaults}:(console.warn("no default configuration found for grid fee type!",t),{})},updateSelectedGridFee(t){this.updateState("openWB/optional/ep/grid_fee/provider",t,"type"),this.updateState("openWB/optional/ep/grid_fee/provider",this.getGridFeeDefaultConfiguration(t))},updateConfiguration(t,e){console.debug("updateConfiguration",t,e),this.updateState(t,e.value,e.object)}}},ae={class:"generalChargeConfig"},le={name:"generalChargeConfigForm"},se={key:0},de={key:1},ue={key:0},pe={key:1},fe={key:1},ge={key:2},be={key:0},me={key:1},_e={key:0};function ce(t,e,d,h,B,f){const s=l("openwb-base-alert"),b=l("openwb-base-button-group-input"),c=l("openwb-base-range-input"),v=l("openwb-base-card"),k=l("openwb-base-heading"),W=l("openwb-base-number-input"),x=l("openwb-base-select-input"),z=l("openwb-flexible-tariff-proxy"),D=l("openwb-grid-fee-proxy"),V=l("openwb-base-text-input"),q=l("openwb-base-submit-buttons");return a(),p("div",ae,[u("form",le,[n(v,{title:"Allgemein"},{default:i(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(a(),p("div",se,[n(s,{subtype:"info"},{default:i(()=>[...e[15]||(e[15]=[o(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(a(),p("div",de,[n(b,{title:"Begrenzung der Schieflast",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/chargemode_config/unbalanced_load"],"onUpdate:modelValue":e[0]||(e[0]=r=>t.updateState("openWB/general/chargemode_config/unbalanced_load",r))},{help:i(()=>[...e[16]||(e[16]=[o(" Wenn diese Option aktiviert ist, werden nicht-dreiphasige Ladevorgänge so geregelt, dass am Netzanschlusspunkt (EVU-Zähler) die eingestellte Grenze für die Schieflast nicht überschritten wird. Hierfür muss der EVU-Zähler einzelne Phasenströme bereitstellen!",-1),u("br",null,null,-1),o(' Weiterhin müssen bei den Ladepunkten sowie Fahrzeugen sämtliche Angaben zur Anzahl angeschlossener/unterstützter Phasen und der Phasenrotation hinterlegt werden, damit der Regelung bekannt ist, welcher Ladevorgang welche Phase am Netzanschluss beeinflusst. siehe "Konfiguration - Ladepunkte -> elektrischer Anschluss - Phase 1" und "Konfiguration - Fahrzeuge -> Fahrzeug-Profile" ',-1)])]),_:1},8,["model-value"]),t.$store.state.mqtt["openWB/general/chargemode_config/unbalanced_load"]?(a(),_(c,{key:0,title:"Erlaubte Schieflast",min:10,max:32,step:1,unit:"A","model-value":t.$store.state.mqtt["openWB/general/chargemode_config/unbalanced_load_limit"],"onUpdate:modelValue":e[1]||(e[1]=r=>t.updateState("openWB/general/chargemode_config/unbalanced_load_limit",r))},{help:i(()=>[...e[17]||(e[17]=[o(" Hiermit wird festgelegt, welche Schieflast am Netzanschlusspunkt erlaubt ist. Bei Überschreitung werden gezielt einzelne Ladevorgänge in der Leistung begrenzt. ",-1)])]),_:1},8,["model-value"])):y("",!0)]))]),_:1}),n(v,{title:"Energiekosten"},{default:i(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(a(),p("div",ue,[n(s,{subtype:"info"},{default:i(()=>[...e[18]||(e[18]=[o(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(a(),p("div",pe,[n(k,{class:"mt-0"},{help:i(()=>[...e[19]||(e[19]=[o(" Zur Berechnung der Ladekosten im Lade-Protokoll werden stundenweise die Anteile der Stromquellen (Speicher, Netz, PV) berechnet und mit den hier angegebenen Preisen multipliziert.",-1),u("br",null,null,-1),o(" Ist die Abrechnung über das Ladeprotokoll, z.B. mit dem Arbeitgeber, vereinbart, ist bei allen drei Feldern der vereinbarte Preis einzutragen. ",-1)])]),default:i(()=>[e[20]||(e[20]=o(" Berechnung der Ladekosten ",-1))]),_:1}),t.$store.state.mqtt["openWB/optional/ep/configured"]?(a(),_(s,{key:0,subtype:"info"},{default:i(()=>[...e[21]||(e[21]=[o(" Für den Netzbezug wird der dynamische Strompreis des Anbieters für variable Stromtarife verwendet. Wenn keine dynamischen Strompreise abgefragt werden können, wird der eingetragene Preis für den Netzbezug verwendet. ",-1)])]),_:1})):y("",!0),n(W,{title:"Preis für Netzbezug",step:.001,precision:3,unit:"ct/kWh",min:0,required:"","model-value":t.$store.state.mqtt["openWB/general/prices/grid"]*1e5,"onUpdate:modelValue":e[2]||(e[2]=r=>t.updateState("openWB/general/prices/grid",parseFloat((r/1e5).toFixed(7))))},null,8,["model-value"]),n(W,{title:"Preis für Speicherentladung",step:.001,precision:3,unit:"ct/kWh",min:0,required:"","model-value":t.$store.state.mqtt["openWB/general/prices/bat"]*1e5,"onUpdate:modelValue":e[3]||(e[3]=r=>t.updateState("openWB/general/prices/bat",parseFloat((r/1e5).toFixed(7))))},null,8,["model-value"]),n(W,{title:"Preis für PV-Strom",step:.001,precision:3,unit:"ct/kWh",min:0,required:"","model-value":t.$store.state.mqtt["openWB/general/prices/pv"]*1e5,"onUpdate:modelValue":e[4]||(e[4]=r=>t.updateState("openWB/general/prices/pv",parseFloat((r/1e5).toFixed(7))))},null,8,["model-value"]),e[26]||(e[26]=u("hr",null,null,-1)),n(k,null,{default:i(()=>[...e[22]||(e[22]=[o(" Variable Strompreise ",-1)])]),_:1}),n(s,{subtype:"info"},{default:i(()=>[...e[23]||(e[23]=[u("p",null,' Ist in den Lademodi Eco und Zeitladen "Preisbasiertes Laden" gewählt, wird nur geladen, wenn der Strompreis unter dem angegebenen maximalen Strompreis liegt. Für Zielladen wird die Ladedauer ermittelt und dann zu den günstigsten Zeiten geladen. ',-1),u("p",null,' Wenn keine Preise abgefragt werden können oder "Preisbasiertes Laden" abgewählt wurde, wird in Modus Eco immer geladen bzw. bei Zielladen zunächst mit PV-Überschuss und zum Erreichen des Zieltermins mit Netzstrom. ',-1),u("p",null," Wenn sowohl dynamische Stromtarife als auch Netzentgelte konfiguriert sind, werden beide zum Gesamt-Strompreis verrechnet. Dabei wird angenommen, dass der Standardpreis der Netzentgelte in dem Stromtarif enthalten ist. Dementsprechend wird die Differenz zwischen dem Standardpreis der Netzentgelte und den aktuellen Netzentgelten zum Strompreis addiert, um den Gesamt-Strompreis zu ermitteln. ",-1),u("p",null,"Beispiel:",-1),u("ul",null,[u("li",null,"Standardpreis der Netzentgelte: 10 ct/kWh"),u("li",null,"Aktueller Preis der Netzentgelte: 5 ct/kWh"),u("li",null,"Strompreis: 20 ct/kWh"),u("li",null,"Gesamt-Strompreis: 20 + (5 - 10) = 15 ct/kWh")],-1)])]),_:1}),n(k,null,{default:i(()=>[...e[24]||(e[24]=[o(" Dynamische Stromtarife ",-1)])]),_:1}),n(x,{class:"mb-2",title:"Anbieter",options:f.flexibleTariffList,"model-value":t.$store.state.mqtt["openWB/optional/ep/flexible_tariff/provider"]?t.$store.state.mqtt["openWB/optional/ep/flexible_tariff/provider"].type:"","onUpdate:modelValue":e[5]||(e[5]=r=>f.updateSelectedFlexibleTariff(r))},null,8,["options","model-value"]),t.$store.state.mqtt["openWB/optional/ep/flexible_tariff/provider"]&&t.$store.state.mqtt["openWB/optional/ep/flexible_tariff/provider"].type?(a(),p("div",fe,[n(z,{"flexible-tariff":t.$store.state.mqtt["openWB/optional/ep/flexible_tariff/provider"],"onUpdate:configuration":e[6]||(e[6]=r=>f.updateConfiguration("openWB/optional/ep/flexible_tariff/provider",r))},null,8,["flexible-tariff"])])):y("",!0),n(k,null,{default:i(()=>[...e[25]||(e[25]=[o(" Dynamische Netzentgelte ",-1)])]),_:1}),n(x,{class:"mb-2",title:"Anbieter",options:f.gridFeeList,"model-value":t.$store.state.mqtt["openWB/optional/ep/grid_fee/provider"]?t.$store.state.mqtt["openWB/optional/ep/grid_fee/provider"].type:"","onUpdate:modelValue":e[7]||(e[7]=r=>f.updateSelectedGridFee(r))},null,8,["options","model-value"]),t.$store.state.mqtt["openWB/optional/ep/grid_fee/provider"]&&t.$store.state.mqtt["openWB/optional/ep/grid_fee/provider"].type?(a(),p("div",ge,[n(D,{"grid-fee":t.$store.state.mqtt["openWB/optional/ep/grid_fee/provider"],"onUpdate:configuration":e[8]||(e[8]=r=>f.updateConfiguration("openWB/optional/ep/grid_fee/provider",r))},null,8,["grid-fee"])])):y("",!0)]))]),_:1}),n(v,{title:"OCPP Anbindung"},{default:i(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(a(),p("div",be,[n(s,{subtype:"info"},{default:i(()=>[...e[27]||(e[27]=[o(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(a(),p("div",me,[n(b,{title:"OCPP aktivieren",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/optional/ocpp/config"]?.active,"onUpdate:modelValue":e[9]||(e[9]=r=>t.updateState("openWB/optional/ocpp/config",r,"active"))},null,8,["model-value"]),t.$store.state.mqtt["openWB/optional/ocpp/config"]?.active===!0?(a(),p("div",_e,[n(s,{subtype:"info"},{default:i(()=>[...e[28]||(e[28]=[o(" Die Ladepunkte übermitteln den ID-Tag, Heartbeat und den Zählerstand zum Zeitpunkt des Ansteckens, Absteckens sowie alle 5 Minuten. Eine Steuerung per OCPP ist nicht möglich.",-1),u("br",null,null,-1),o(" Alle Ladepunkte, die ihre Daten an das OCPP-Backend übermitteln sollen, müssen zunächst im OCPP-Backend angelegt werden. Die dort eingetragene Chargebox ID muss in der openWB unter Einstellungen -> Konfiguration im zugehörigen -> Ladepunkt eingetragen werden. ",-1)])]),_:1}),n(V,{title:"URL des OCPP-Backends",subtype:"url","model-value":t.$store.state.mqtt["openWB/optional/ocpp/config"]?.url,"onUpdate:modelValue":e[10]||(e[10]=r=>t.updateState("openWB/optional/ocpp/config",r,"url"))},null,8,["model-value"]),n(x,{title:"Version","not-selected":"Bitte auswählen",options:[{value:"ocpp1.6",text:"OCPP 1.6"},{value:"ocpp2.0.1",text:"OCPP 2.0.1"}],"model-value":t.$store.state.mqtt["openWB/optional/ocpp/config"]?.version,"onUpdate:modelValue":e[11]||(e[11]=r=>t.updateState("openWB/optional/ocpp/config",r,"version"))},null,8,["model-value"])])):y("",!0)]))]),_:1}),n(q,{"form-name":"generalChargeConfigForm",onSave:e[12]||(e[12]=r=>t.$emit("save",t.mqttTopicsToPublish)),onReset:e[13]||(e[13]=r=>t.$emit("reset")),onDefaults:e[14]||(e[14]=r=>t.$emit("defaults"))})])])}const ve=w(re,[["render",ce],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/GeneralChargeConfiguration.vue"]]),ke=Object.freeze(Object.defineProperty({__proto__:null,default:ve},Symbol.toStringTag,{value:"Module"}));export{N as F,H as G,ke as a}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/flexible_tariff-BqHQEaee.js","assets/vendor-BwGffBs-.js","assets/vendor-Cq9CCOuG.css","assets/index-CE-5DBwq.js","assets/vendor-fortawesome-DplTMxoa.js","assets/vendor-bootstrap-DxivtUnb.js","assets/vendor-jquery-CEMonh9Y.js","assets/vendor-bootstrap-BJ8HpIhY.css","assets/vendor-axios-C0vEeTtS.js","assets/index-xf6JJloS.css","assets/dynamic-import-helper-BheWnx7M.js","assets/flexible_tariff-XtSMwM0l.js","assets/flexible_tariff-phf1P2DN.js","assets/flexible_tariff-d9extQ6-.js","assets/flexible_tariff-gwuyMP87.css","assets/flexible_tariff-Cvv-oNUn.js","assets/flexible_tariff-jJVf7CWC.js","assets/flexible_tariff-sCzmdrKR.js","assets/flexible_tariff-BWVThMmf.js","assets/flexible_tariff-CrPL3_fr.js","assets/flexible_tariff-DUetUvJg.js","assets/flexible_tariff-CP3GV2na.js","assets/flexible_tariff-Bcvd_OKC.js","assets/grid_fee-B1dRFbWZ.js","assets/grid_fee-Cs94pth1.css"])))=>i.map(i=>d[i]); +import{_ as g,C as L}from"./index-CE-5DBwq.js";import{_ as F}from"./dynamic-import-helper-BheWnx7M.js";import{F as P,l as C,ac as S,ad as $}from"./vendor-fortawesome-DplTMxoa.js";import{_ as w,m as l,l as a,f as p,z as _,u as i,B as o,J as m,q as n,y as u,a7 as O,P as T,K as E,x as y}from"./vendor-BwGffBs-.js";const A={props:{flexibleTariff:{type:Object,required:!0}},emits:["update:configuration"],methods:{updateConfiguration(t,e=void 0){this.$emit("update:configuration",{value:t,object:e})}}},N=w(A,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/FlexibleTariffConfigMixin.vue"]]),G={name:"FlexibleTariffConfigFallback",mixins:[N]},I={class:"flexible-tariff-fallback"},R={key:1};function U(t,e,d,h,B,f){const s=l("openwb-base-alert"),b=l("openwb-base-textarea");return a(),p("div",I,[Object.keys(t.flexibleTariff.configuration).length==0?(a(),_(s,{key:0,subtype:"info"},{default:i(()=>[o(' Der Anbieter "'+m(t.flexibleTariff.name)+'" bietet keine Einstellungen. ',1)]),_:1})):(a(),p("div",R,[n(s,{subtype:"warning"},{default:i(()=>[o(' Es wurde keine Konfigurationsseite für den Anbieter "'+m(t.flexibleTariff.name)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),n(b,{title:"Konfiguration",subtype:"json","model-value":t.flexibleTariff.configuration,"onUpdate:modelValue":e[0]||(e[0]=c=>t.updateConfiguration(c,"configuration"))},{help:i(()=>[...e[1]||(e[1]=[o(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),n(s,{subtype:"info"},{default:i(()=>[u("pre",null,m(JSON.stringify(t.flexibleTariff.configuration,void 0,2)),1)]),_:1})]))])}const j=w(G,[["render",U],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/OpenwbFlexibleTariffConfigFallback.vue"]]);C.add(S,$);const M={name:"OpenwbFlexibleTariffProxy",components:{FontAwesomeIcon:P},props:{flexibleTariff:{type:Object,required:!0}},emits:["update:configuration"],methods:{getTariffComponent(){return console.debug(`loading flexible tariff: ${this.flexibleTariff.type}`),O({loader:()=>F(Object.assign({"./awattar/flexible_tariff.vue":()=>g(()=>import("./flexible_tariff-BqHQEaee.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])),"./ekz/flexible_tariff.vue":()=>g(()=>import("./flexible_tariff-XtSMwM0l.js"),__vite__mapDeps([11,1,2,3,4,5,6,7,8,9,10])),"./energycharts/flexible_tariff.vue":()=>g(()=>import("./flexible_tariff-phf1P2DN.js"),__vite__mapDeps([12,1,2,3,4,5,6,7,8,9,10])),"./fixed_hours/flexible_tariff.vue":()=>g(()=>import("./flexible_tariff-d9extQ6-.js"),__vite__mapDeps([13,1,2,4,3,5,6,7,8,9,10,14])),"./groupe_e/flexible_tariff.vue":()=>g(()=>import("./flexible_tariff-Cvv-oNUn.js"),__vite__mapDeps([15,1,2,3,4,5,6,7,8,9,10])),"./naturstrom/flexible_tariff.vue":()=>g(()=>import("./flexible_tariff-jJVf7CWC.js"),__vite__mapDeps([16,3,1,2,4,5,6,7,8,9,10])),"./octopusenergy/flexible_tariff.vue":()=>g(()=>import("./flexible_tariff-sCzmdrKR.js"),__vite__mapDeps([17,1,2,3,4,5,6,7,8,9,10])),"./ostrom/flexible_tariff.vue":()=>g(()=>import("./flexible_tariff-BWVThMmf.js"),__vite__mapDeps([18,1,2,3,4,5,6,7,8,9,10])),"./rabot/flexible_tariff.vue":()=>g(()=>import("./flexible_tariff-CrPL3_fr.js"),__vite__mapDeps([19,8,1,2,3,4,5,6,7,9,10])),"./tibber/flexible_tariff.vue":()=>g(()=>import("./flexible_tariff-DUetUvJg.js"),__vite__mapDeps([20,1,2,3,4,5,6,7,8,9,10])),"./voltego/flexible_tariff.vue":()=>g(()=>import("./flexible_tariff-CP3GV2na.js"),__vite__mapDeps([21,1,2,3,4,5,6,7,8,9,10])),"./westfalen_wind/flexible_tariff.vue":()=>g(()=>import("./flexible_tariff-Bcvd_OKC.js"),__vite__mapDeps([22,1,2,3,4,5,6,7,8,9,10]))}),`./${this.flexibleTariff.type}/flexible_tariff.vue`,3),errorComponent:j})},updateConfiguration(t){this.$emit("update:configuration",t)}}};function Z(t,e,d,h,B,f){const s=l("font-awesome-icon"),b=l("openwb-base-alert"),c=l("openwb-base-heading");return a(),p(E,null,[d.flexibleTariff.official?(a(),_(b,{key:0,subtype:"success"},{default:i(()=>[n(s,{icon:["fas","certificate"]}),o(' Das ausgewählte Modul "'+m(d.flexibleTariff.name)+'" wird von openWB gepflegt. ',1)]),_:1})):(a(),_(b,{key:1,subtype:"info"},{default:i(()=>[n(s,{icon:["fas","people-group"]}),o(' Das ausgewählte Modul "'+m(d.flexibleTariff.name)+'" wird in unserer Community gepflegt. Rückfragen oder Probleme bitte im Forum diskutieren. ',1)]),_:1})),n(c,null,{default:i(()=>[o(' Einstellungen für Modul "'+m(d.flexibleTariff.name)+'" ',1)]),_:1}),(a(),_(T(f.getTariffComponent()),{"flexible-tariff":d.flexibleTariff,"onUpdate:configuration":e[0]||(e[0]=v=>f.updateConfiguration(v))},null,40,["flexible-tariff"]))],64)}const K=w(M,[["render",Z],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/OpenwbFlexibleTariffProxy.vue"]]),J={props:{gridFee:{type:Object,required:!0}},emits:["update:configuration"],methods:{updateConfiguration(t,e=void 0){this.$emit("update:configuration",{value:t,object:e})}}},H=w(J,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/grid_fees/GridFeeConfigMixin.vue"]]),Q={name:"GridFeeConfigFallback",mixins:[H]},X={class:"grid-fee-fallback"},Y={key:1};function ee(t,e,d,h,B,f){const s=l("openwb-base-alert"),b=l("openwb-base-textarea");return a(),p("div",X,[Object.keys(t.gridFee.configuration).length==0?(a(),_(s,{key:0,subtype:"info"},{default:i(()=>[o(' Der Anbieter "'+m(t.gridFee.name)+'" bietet keine Einstellungen. ',1)]),_:1})):(a(),p("div",Y,[n(s,{subtype:"warning"},{default:i(()=>[o(' Es wurde keine Konfigurationsseite für den Anbieter "'+m(t.gridFee.name)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),n(b,{title:"Konfiguration",subtype:"json","model-value":t.gridFee.configuration,"onUpdate:modelValue":e[0]||(e[0]=c=>t.updateConfiguration(c,"configuration"))},{help:i(()=>[...e[1]||(e[1]=[o(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),n(s,{subtype:"info"},{default:i(()=>[u("pre",null,m(JSON.stringify(t.gridFee.configuration,void 0,2)),1)]),_:1})]))])}const te=w(Q,[["render",ee],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/grid_fees/OpenwbGridFeeConfigFallback.vue"]]);C.add(S,$);const ne={name:"OpenwbGridFeeProxy",components:{FontAwesomeIcon:P},props:{gridFee:{type:Object,required:!0}},emits:["update:configuration"],methods:{getTariffComponent(){return console.debug(`loading grid fee: ${this.gridFee.type}`),O({loader:()=>F(Object.assign({"./fixed_hours/grid_fee.vue":()=>g(()=>import("./grid_fee-B1dRFbWZ.js"),__vite__mapDeps([23,1,2,4,3,5,6,7,8,9,10,24]))}),`./${this.gridFee.type}/grid_fee.vue`,3),errorComponent:te})},updateConfiguration(t){this.$emit("update:configuration",t)}}};function ie(t,e,d,h,B,f){const s=l("font-awesome-icon"),b=l("openwb-base-alert"),c=l("openwb-base-heading");return a(),p(E,null,[d.gridFee.official?(a(),_(b,{key:0,subtype:"success"},{default:i(()=>[n(s,{icon:["fas","certificate"]}),o(' Das ausgewählte Modul "'+m(d.gridFee.name)+'" wird von openWB gepflegt. ',1)]),_:1})):(a(),_(b,{key:1,subtype:"info"},{default:i(()=>[n(s,{icon:["fas","people-group"]}),o(' Das ausgewählte Modul "'+m(d.gridFee.name)+'" wird in unserer Community gepflegt. Rückfragen oder Probleme bitte im Forum diskutieren. ',1)]),_:1})),n(c,null,{default:i(()=>[o(' Einstellungen für Modul "'+m(d.gridFee.name)+'" ',1)]),_:1}),(a(),_(T(f.getTariffComponent()),{"grid-fee":d.gridFee,"onUpdate:configuration":e[0]||(e[0]=v=>f.updateConfiguration(v))},null,40,["grid-fee"]))],64)}const oe=w(ne,[["render",ie],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/grid_fees/OpenwbGridFeeProxy.vue"]]),re={name:"OpenwbGeneralChargeConfigView",components:{OpenwbFlexibleTariffProxy:K,OpenwbGridFeeProxy:oe},mixins:[L],emits:["save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/general/chargemode_config/unbalanced_load",writeable:!0},{topic:"openWB/general/chargemode_config/unbalanced_load_limit",writeable:!0},{topic:"openWB/general/prices/bat",writeable:!0},{topic:"openWB/general/prices/grid",writeable:!0},{topic:"openWB/general/prices/pv",writeable:!0},{topic:"openWB/optional/ep/flexible_tariff/provider",writeable:!0},{topic:"openWB/optional/ep/grid_fee/provider",writeable:!0},{topic:"openWB/optional/ocpp/config",writeable:!0},{topic:"openWB/system/configurable/flexible_tariffs",writeable:!1},{topic:"openWB/system/configurable/grid_fees",writeable:!1},{topic:"openWB/optional/ep/configured",writeable:!1}]}},computed:{flexibleTariffList(){return this.$store.state.mqtt["openWB/system/configurable/flexible_tariffs"]},gridFeeList(){return this.$store.state.mqtt["openWB/system/configurable/grid_fees"]}},methods:{getFlexibleTariffDefaultConfiguration(t){const e=this.flexibleTariffList.find(d=>d.value==t);return Object.prototype.hasOwnProperty.call(e,"defaults")?{...e.defaults}:(console.warn("no default configuration found for electricity tariff type!",t),{})},updateSelectedFlexibleTariff(t){this.updateState("openWB/optional/ep/flexible_tariff/provider",t,"type"),this.updateState("openWB/optional/ep/flexible_tariff/provider",this.getFlexibleTariffDefaultConfiguration(t))},getGridFeeDefaultConfiguration(t){const e=this.gridFeeList.find(d=>d.value==t);return e&&Object.prototype.hasOwnProperty.call(e,"defaults")?{...e.defaults}:(console.warn("no default configuration found for grid fee type!",t),{})},updateSelectedGridFee(t){this.updateState("openWB/optional/ep/grid_fee/provider",t,"type"),this.updateState("openWB/optional/ep/grid_fee/provider",this.getGridFeeDefaultConfiguration(t))},updateConfiguration(t,e){console.debug("updateConfiguration",t,e),this.updateState(t,e.value,e.object)}}},ae={class:"generalChargeConfig"},le={name:"generalChargeConfigForm"},se={key:0},de={key:1},ue={key:0},pe={key:1},fe={key:1},ge={key:2},be={key:0},me={key:1},_e={key:0};function ce(t,e,d,h,B,f){const s=l("openwb-base-alert"),b=l("openwb-base-button-group-input"),c=l("openwb-base-range-input"),v=l("openwb-base-card"),k=l("openwb-base-heading"),W=l("openwb-base-number-input"),x=l("openwb-base-select-input"),z=l("openwb-flexible-tariff-proxy"),D=l("openwb-grid-fee-proxy"),V=l("openwb-base-text-input"),q=l("openwb-base-submit-buttons");return a(),p("div",ae,[u("form",le,[n(v,{title:"Allgemein"},{default:i(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(a(),p("div",se,[n(s,{subtype:"info"},{default:i(()=>[...e[15]||(e[15]=[o(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(a(),p("div",de,[n(b,{title:"Begrenzung der Schieflast",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/chargemode_config/unbalanced_load"],"onUpdate:modelValue":e[0]||(e[0]=r=>t.updateState("openWB/general/chargemode_config/unbalanced_load",r))},{help:i(()=>[...e[16]||(e[16]=[o(" Wenn diese Option aktiviert ist, werden nicht-dreiphasige Ladevorgänge so geregelt, dass am Netzanschlusspunkt (EVU-Zähler) die eingestellte Grenze für die Schieflast nicht überschritten wird. Hierfür muss der EVU-Zähler einzelne Phasenströme bereitstellen!",-1),u("br",null,null,-1),o(' Weiterhin müssen bei den Ladepunkten sowie Fahrzeugen sämtliche Angaben zur Anzahl angeschlossener/unterstützter Phasen und der Phasenrotation hinterlegt werden, damit der Regelung bekannt ist, welcher Ladevorgang welche Phase am Netzanschluss beeinflusst. siehe "Konfiguration - Ladepunkte -> elektrischer Anschluss - Phase 1" und "Konfiguration - Fahrzeuge -> Fahrzeug-Profile" ',-1)])]),_:1},8,["model-value"]),t.$store.state.mqtt["openWB/general/chargemode_config/unbalanced_load"]?(a(),_(c,{key:0,title:"Erlaubte Schieflast",min:10,max:32,step:1,unit:"A","model-value":t.$store.state.mqtt["openWB/general/chargemode_config/unbalanced_load_limit"],"onUpdate:modelValue":e[1]||(e[1]=r=>t.updateState("openWB/general/chargemode_config/unbalanced_load_limit",r))},{help:i(()=>[...e[17]||(e[17]=[o(" Hiermit wird festgelegt, welche Schieflast am Netzanschlusspunkt erlaubt ist. Bei Überschreitung werden gezielt einzelne Ladevorgänge in der Leistung begrenzt. ",-1)])]),_:1},8,["model-value"])):y("",!0)]))]),_:1}),n(v,{title:"Energiekosten"},{default:i(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(a(),p("div",ue,[n(s,{subtype:"info"},{default:i(()=>[...e[18]||(e[18]=[o(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(a(),p("div",pe,[n(k,{class:"mt-0"},{help:i(()=>[...e[19]||(e[19]=[o(" Zur Berechnung der Ladekosten im Lade-Protokoll werden stundenweise die Anteile der Stromquellen (Speicher, Netz, PV) berechnet und mit den hier angegebenen Preisen multipliziert.",-1),u("br",null,null,-1),o(" Ist die Abrechnung über das Ladeprotokoll, z.B. mit dem Arbeitgeber, vereinbart, ist bei allen drei Feldern der vereinbarte Preis einzutragen. ",-1)])]),default:i(()=>[e[20]||(e[20]=o(" Berechnung der Ladekosten ",-1))]),_:1}),t.$store.state.mqtt["openWB/optional/ep/configured"]?(a(),_(s,{key:0,subtype:"info"},{default:i(()=>[...e[21]||(e[21]=[o(" Für den Netzbezug wird der dynamische Strompreis des Anbieters für variable Stromtarife verwendet. Wenn keine dynamischen Strompreise abgefragt werden können, wird der eingetragene Preis für den Netzbezug verwendet. ",-1)])]),_:1})):y("",!0),n(W,{title:"Preis für Netzbezug",step:.001,precision:3,unit:"ct/kWh",min:0,required:"","model-value":t.$store.state.mqtt["openWB/general/prices/grid"]*1e5,"onUpdate:modelValue":e[2]||(e[2]=r=>t.updateState("openWB/general/prices/grid",parseFloat((r/1e5).toFixed(7))))},null,8,["model-value"]),n(W,{title:"Preis für Speicherentladung",step:.001,precision:3,unit:"ct/kWh",min:0,required:"","model-value":t.$store.state.mqtt["openWB/general/prices/bat"]*1e5,"onUpdate:modelValue":e[3]||(e[3]=r=>t.updateState("openWB/general/prices/bat",parseFloat((r/1e5).toFixed(7))))},null,8,["model-value"]),n(W,{title:"Preis für PV-Strom",step:.001,precision:3,unit:"ct/kWh",min:0,required:"","model-value":t.$store.state.mqtt["openWB/general/prices/pv"]*1e5,"onUpdate:modelValue":e[4]||(e[4]=r=>t.updateState("openWB/general/prices/pv",parseFloat((r/1e5).toFixed(7))))},null,8,["model-value"]),e[26]||(e[26]=u("hr",null,null,-1)),n(k,null,{default:i(()=>[...e[22]||(e[22]=[o(" Variable Strompreise ",-1)])]),_:1}),n(s,{subtype:"info"},{default:i(()=>[...e[23]||(e[23]=[u("p",null,' Ist in den Lademodi Eco und Zeitladen "Preisbasiertes Laden" gewählt, wird nur geladen, wenn der Strompreis unter dem angegebenen maximalen Strompreis liegt. Für Zielladen wird die Ladedauer ermittelt und dann zu den günstigsten Zeiten geladen. ',-1),u("p",null,' Wenn keine Preise abgefragt werden können oder "Preisbasiertes Laden" abgewählt wurde, wird in Modus Eco immer geladen bzw. bei Zielladen zunächst mit PV-Überschuss und zum Erreichen des Zieltermins mit Netzstrom. ',-1),u("p",null," Wenn sowohl dynamische Stromtarife als auch Netzentgelte konfiguriert sind, werden beide zum Gesamt-Strompreis verrechnet. Dabei wird angenommen, dass der Standardpreis der Netzentgelte in dem Stromtarif enthalten ist. Dementsprechend wird die Differenz zwischen dem Standardpreis der Netzentgelte und den aktuellen Netzentgelten zum Strompreis addiert, um den Gesamt-Strompreis zu ermitteln. ",-1),u("p",null,"Beispiel:",-1),u("ul",null,[u("li",null,"Standardpreis der Netzentgelte: 10 ct/kWh"),u("li",null,"Aktueller Preis der Netzentgelte: 5 ct/kWh"),u("li",null,"Strompreis: 20 ct/kWh"),u("li",null,"Gesamt-Strompreis: 20 + (5 - 10) = 15 ct/kWh")],-1)])]),_:1}),n(k,null,{default:i(()=>[...e[24]||(e[24]=[o(" Dynamische Stromtarife ",-1)])]),_:1}),n(x,{class:"mb-2",title:"Anbieter",options:f.flexibleTariffList,"model-value":t.$store.state.mqtt["openWB/optional/ep/flexible_tariff/provider"]?t.$store.state.mqtt["openWB/optional/ep/flexible_tariff/provider"].type:"","onUpdate:modelValue":e[5]||(e[5]=r=>f.updateSelectedFlexibleTariff(r))},null,8,["options","model-value"]),t.$store.state.mqtt["openWB/optional/ep/flexible_tariff/provider"]&&t.$store.state.mqtt["openWB/optional/ep/flexible_tariff/provider"].type?(a(),p("div",fe,[n(z,{"flexible-tariff":t.$store.state.mqtt["openWB/optional/ep/flexible_tariff/provider"],"onUpdate:configuration":e[6]||(e[6]=r=>f.updateConfiguration("openWB/optional/ep/flexible_tariff/provider",r))},null,8,["flexible-tariff"])])):y("",!0),n(k,null,{default:i(()=>[...e[25]||(e[25]=[o(" Dynamische Netzentgelte ",-1)])]),_:1}),n(x,{class:"mb-2",title:"Anbieter",options:f.gridFeeList,"model-value":t.$store.state.mqtt["openWB/optional/ep/grid_fee/provider"]?t.$store.state.mqtt["openWB/optional/ep/grid_fee/provider"].type:"","onUpdate:modelValue":e[7]||(e[7]=r=>f.updateSelectedGridFee(r))},null,8,["options","model-value"]),t.$store.state.mqtt["openWB/optional/ep/grid_fee/provider"]&&t.$store.state.mqtt["openWB/optional/ep/grid_fee/provider"].type?(a(),p("div",ge,[n(D,{"grid-fee":t.$store.state.mqtt["openWB/optional/ep/grid_fee/provider"],"onUpdate:configuration":e[8]||(e[8]=r=>f.updateConfiguration("openWB/optional/ep/grid_fee/provider",r))},null,8,["grid-fee"])])):y("",!0)]))]),_:1}),n(v,{title:"OCPP Anbindung"},{default:i(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(a(),p("div",be,[n(s,{subtype:"info"},{default:i(()=>[...e[27]||(e[27]=[o(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(a(),p("div",me,[n(b,{title:"OCPP aktivieren",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/optional/ocpp/config"]?.active,"onUpdate:modelValue":e[9]||(e[9]=r=>t.updateState("openWB/optional/ocpp/config",r,"active"))},null,8,["model-value"]),t.$store.state.mqtt["openWB/optional/ocpp/config"]?.active===!0?(a(),p("div",_e,[n(s,{subtype:"info"},{default:i(()=>[...e[28]||(e[28]=[o(" Die Ladepunkte übermitteln den ID-Tag, Heartbeat und den Zählerstand zum Zeitpunkt des Ansteckens, Absteckens sowie alle 5 Minuten. Eine Steuerung per OCPP ist nicht möglich.",-1),u("br",null,null,-1),o(" Alle Ladepunkte, die ihre Daten an das OCPP-Backend übermitteln sollen, müssen zunächst im OCPP-Backend angelegt werden. Die dort eingetragene Chargebox ID muss in der openWB unter Einstellungen -> Konfiguration im zugehörigen -> Ladepunkt eingetragen werden. ",-1)])]),_:1}),n(V,{title:"URL des OCPP-Backends",subtype:"url","model-value":t.$store.state.mqtt["openWB/optional/ocpp/config"]?.url,"onUpdate:modelValue":e[10]||(e[10]=r=>t.updateState("openWB/optional/ocpp/config",r,"url"))},null,8,["model-value"]),n(x,{title:"Version","not-selected":"Bitte auswählen",options:[{value:"ocpp1.6",text:"OCPP 1.6"},{value:"ocpp2.0.1",text:"OCPP 2.0.1"}],"model-value":t.$store.state.mqtt["openWB/optional/ocpp/config"]?.version,"onUpdate:modelValue":e[11]||(e[11]=r=>t.updateState("openWB/optional/ocpp/config",r,"version"))},null,8,["model-value"])])):y("",!0)]))]),_:1}),n(q,{"form-name":"generalChargeConfigForm",onSave:e[12]||(e[12]=r=>t.$emit("save",t.mqttTopicsToPublish)),onReset:e[13]||(e[13]=r=>t.$emit("reset")),onDefaults:e[14]||(e[14]=r=>t.$emit("defaults"))})])])}const ve=w(re,[["render",ce],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/GeneralChargeConfiguration.vue"]]),ke=Object.freeze(Object.defineProperty({__proto__:null,default:ve},Symbol.toStringTag,{value:"Module"}));export{N as F,H as G,ke as a}; diff --git a/web/settings/assets/GeneralConfiguration-BiYqLhF0.js b/web/settings/assets/GeneralConfiguration-D0B_yW_W.js similarity index 97% rename from web/settings/assets/GeneralConfiguration-BiYqLhF0.js rename to web/settings/assets/GeneralConfiguration-D0B_yW_W.js index c1fec7543c..259fc6abf3 100644 --- a/web/settings/assets/GeneralConfiguration-BiYqLhF0.js +++ b/web/settings/assets/GeneralConfiguration-D0B_yW_W.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/webTheme-meC97XgZ.js","assets/vendor-BwGffBs-.js","assets/vendor-Cq9CCOuG.css","assets/vendor-fortawesome-DplTMxoa.js","assets/index-Bv2WLdLZ.js","assets/vendor-bootstrap-DxivtUnb.js","assets/vendor-jquery-CEMonh9Y.js","assets/vendor-bootstrap-BJ8HpIhY.css","assets/vendor-axios-C0vEeTtS.js","assets/index-xf6JJloS.css","assets/SystemVersion-eCZ4XHiC.js","assets/dynamic-import-helper-BheWnx7M.js","assets/webTheme-C6RtS5le.js","assets/OpenwbSortableList-CQO_8Mps.js","assets/OpenwbSortableList-BkrTk2sD.css","assets/webTheme-Djb-XQZh.js"])))=>i.map(i=>d[i]); -import{F as S,l as k,ac as z,ad as E,ae as C,af as D,a6 as N,X as A,G as L,as as U,at as P,au as J}from"./vendor-fortawesome-DplTMxoa.js";import{_ as B,C as O}from"./index-Bv2WLdLZ.js";import{S as M}from"./SystemVersion-eCZ4XHiC.js";import{_ as R}from"./dynamic-import-helper-BheWnx7M.js";import{_ as v,m as p,l as r,f as m,z as f,u as o,B as s,J as c,q as n,y as d,a7 as F,P as x,K as I,x as b}from"./vendor-BwGffBs-.js";const j={props:{webTheme:{type:Object,required:!0}},emits:["update:configuration"],methods:{updateConfiguration(t,e=void 0){this.$emit("update:configuration",{value:t,object:e})}}},G=v(j,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/web_themes/WebThemeConfigMixin.vue"]]),H={name:"WebThemeFallback",mixins:[G]},Z={class:"web-theme-fallback"},K={key:1};function Q(t,e,u,W,V,_){const g=p("openwb-base-alert"),l=p("openwb-base-textarea");return r(),m("div",Z,[Object.keys(t.webTheme.configuration).length==0?(r(),f(g,{key:0,subtype:"info"},{default:o(()=>[s(' Das Web Theme "'+c(t.webTheme.name)+'" bietet keine Einstellungen. ',1)]),_:1})):(r(),m("div",K,[n(g,{subtype:"warning"},{default:o(()=>[s(' Es wurde keine Konfigurationsseite für das Web Theme "'+c(t.webTheme.name)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),n(l,{title:"Theme Konfiguration",subtype:"json","model-value":t.webTheme.configuration,"onUpdate:modelValue":e[0]||(e[0]=h=>t.updateConfiguration(h,"configuration"))},{help:o(()=>[...e[1]||(e[1]=[s(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),n(g,{subtype:"info"},{default:o(()=>[d("pre",null,c(JSON.stringify(t.webTheme.configuration,void 0,2)),1)]),_:1})]))])}const X=v(H,[["render",Q],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/web_themes/OpenwbWebThemeFallback.vue"]]);k.add(z,E,C,D);const Y={name:"OpenwbWebThemeProxy",components:{FontAwesomeIcon:S},props:{webTheme:{type:Object,required:!0}},emits:["update:configuration"],methods:{getThemeComponent(){return console.debug(`loading web theme: ${this.webTheme.type}`),F({loader:()=>R(Object.assign({"./colors/webTheme.vue":()=>B(()=>import("./webTheme-meC97XgZ.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])),"./koala/webTheme.vue":()=>B(()=>import("./webTheme-C6RtS5le.js"),__vite__mapDeps([12,13,4,1,2,3,5,6,7,8,9,14,10,11])),"./standard_legacy/webTheme.vue":()=>B(()=>import("./webTheme-Djb-XQZh.js"),__vite__mapDeps([15,1,2,3,4,5,6,7,8,9,10,11]))}),`./${this.webTheme.type}/webTheme.vue`,3),errorComponent:X})},updateConfiguration(t){this.$emit("update:configuration",t)}}};function ee(t,e,u,W,V,_){const g=p("font-awesome-icon"),l=p("openwb-base-alert"),h=p("openwb-base-heading");return r(),m(I,null,[u.webTheme.official?(r(),f(l,{key:0,subtype:"success"},{default:o(()=>[n(g,{icon:["fas","certificate"]}),s(' Das ausgewählte Web Theme "'+c(u.webTheme.name)+'" wird von openWB gepflegt. ',1)]),_:1})):(r(),f(l,{key:1,subtype:"info"},{default:o(()=>[n(g,{icon:["fas","people-group"]}),e[1]||(e[1]=s(" Das ausgewählte Theme wird in unserer Community gepflegt. Rückfragen oder Probleme bitte im Forum diskutieren. ",-1))]),_:1})),n(l,{subtype:u.webTheme.userManagementSupported?"success":"warning"},{default:o(()=>[n(g,{icon:["fas",u.webTheme.userManagementSupported?"user-check":"user-slash"]},null,8,["icon"]),s(' Das ausgewählte Web Theme "'+c(u.webTheme.name)+'" unterstützt die Benutzerverwaltung'+c(u.webTheme.userManagementSupported?"":" nicht")+". ",1)]),_:1},8,["subtype"]),n(h,null,{default:o(()=>[s(' Einstellungen für Web Theme "'+c(u.webTheme.name)+'" ',1)]),_:1}),(r(),f(x(_.getThemeComponent()),{"web-theme":u.webTheme,"onUpdate:configuration":e[0]||(e[0]=w=>_.updateConfiguration(w))},null,40,["web-theme"]))],64)}const te=v(Y,[["render",ee],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/web_themes/OpenwbWebThemeProxy.vue"]]);k.add(N,A,L,U,P,J);const ne={name:"OpenwbGeneralConfigView",components:{OpenwbWebThemeProxy:te,FontAwesomeIcon:S},mixins:[O,M],props:{installAssistantActive:{type:Boolean,required:!1,default:!1}},emits:["save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/general/allow_unencrypted_access",writeable:!1},{topic:"openWB/general/charge_log_data_config",writeable:!0},{topic:"openWB/general/control_interval",writeable:!0},{topic:"openWB/general/extern",writeable:!0},{topic:"openWB/general/grid_protection_configured",writeable:!0},{topic:"openWB/general/http_api",writeable:!0},{topic:"openWB/general/modbus_control",writeable:!0},{topic:"openWB/general/range_unit",writeable:!0},{topic:"openWB/general/temporary_charge_templates_active",writeable:!0},{topic:"openWB/general/web_theme",writeable:!0},{topic:"openWB/system/configurable/web_themes",writeable:!1},{topic:"openWB/system/security/user_management_active",writeable:!1}]}},computed:{webThemeList:{get(){return this.$store.state.mqtt["openWB/system/configurable/web_themes"]}},webThemeGroupList:{get(){let t=[{label:"openWB",options:[]},{label:"Community",options:[]}];return this.webThemeList?.forEach(e=>{e.defaults.userManagementSupported!==!0&&this.$store.state.mqtt["openWB/system/security/user_management_active"]===!0||(e.official===!0?t[0].options.push(e):t[1].options.push(e))}),t.filter(e=>e.options.length>0)}},disableExternModeSwitch(){return this.$store.state.mqtt["openWB/system/security/user_management_active"]===!0||this.$store.state.mqtt["openWB/general/allow_unencrypted_access"]===!1}},methods:{getWebThemeDefaults(t){const e=this.webThemeList.find(u=>u.value==t);return Object.prototype.hasOwnProperty.call(e,"defaults")?{...JSON.parse(JSON.stringify(e.defaults))}:(console.warn("no default configuration found for web theme type!",t),{})},updateSelectedWebTheme(t){this.updateState("openWB/general/web_theme",this.getWebThemeDefaults(t))},updateConfiguration(t,e){console.debug("updateConfiguration",t,e),this.updateState(t,e.value,e.object)}}},ae={class:"generalConfig"},oe={name:"generalConfigForm"},se={key:1},le={key:1},re={key:2},ie={key:0},ue={key:0},de={key:1},ge={key:0},me={key:1},pe=["href"],be={key:0},fe={key:0},_e={key:1};function ce(t,e,u,W,V,_){const g=p("openwb-base-alert"),l=p("openwb-base-button-group-input"),h=p("RouterLink"),w=p("openwb-base-card"),y=p("openwb-base-heading"),T=p("openwb-base-select-input"),$=p("openwb-web-theme-proxy"),i=p("font-awesome-icon"),q=p("openwb-base-submit-buttons");return r(),m("div",ae,[d("form",oe,[n(w,{title:"Steuerungsmodus"},{default:o(()=>[n(g,{subtype:"info"},{default:o(()=>[...e[32]||(e[32]=[d("p",null,' Wird für den Steuerungsmodus "primary" gewählt, übernimmt diese openWB die alleinige Regelung und steuert ggf. vorhandene weitere openWB (z.B. secondary openWB, openWB Pro, Satellit u.a.) fern. Diese werden in den Ladepunkt-Einstellungen der primary-openWB hinzugefügt. ',-1),d("p",null,' Wird für den Steuerungsmodus "secondary" gewählt, übernimmt diese openWB keine Regelung und muss von einer anderen primary openWB ferngesteuert werden. Wichtig ist, dass in der secondary-openWB eine "interne openWB" mit der korrekten Bauart (= openWB-Hardwarevariante z.B. "Custom, Standard, Standard+, Duo, Buchse") konfiguriert ist. Bei einer Duo sind zwei "interne openWB" zu konfigurieren. Im "secondary"-Modus bleiben alle ausgeblendeten Einstellungen unbeachtet. ',-1)])]),_:1}),n(l,{title:"Steuerungsmodus",buttons:[{buttonValue:!1,text:"primary",class:"btn-outline-danger"},{buttonValue:!0,text:"secondary",class:"btn-outline-success"}],disabled:_.disableExternModeSwitch,"model-value":t.$store.state.mqtt["openWB/general/extern"],"onUpdate:modelValue":e[0]||(e[0]=a=>t.updateState("openWB/general/extern",a))},null,8,["disabled","model-value"]),_.disableExternModeSwitch?(r(),f(g,{key:0,subtype:"warning"},{default:o(()=>[e[34]||(e[34]=s(" Die Benutzerverwaltung ist aktiviert oder der unverschlüsselte Zugriff ist nicht erlaubt. Um den Steuerungsmodus ändern zu können, muss die Benutzerverwaltung im Bereich ",-1)),n(h,{to:"/System/SecurityConfiguration"},{default:o(()=>[...e[33]||(e[33]=[s("Sicherheit",-1)])]),_:1}),e[35]||(e[35]=s(" zunächst deaktiviert und der unverschlüsselte Zugang erlaubt werden. ",-1))]),_:1})):b("",!0),u.installAssistantActive?b("",!0):(r(),m("div",se,[t.$store.state.mqtt["openWB/general/extern"]===!0?(r(),f(l,{key:0,title:"Steuerung über Modbus als secondary",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/modbus_control"],"onUpdate:modelValue":e[1]||(e[1]=a=>t.updateState("openWB/general/modbus_control",a))},{help:o(()=>[...e[36]||(e[36]=[s(" Im secondary-Modus kann die openWB über die Modbus-Schnittstelle gesteuert werden. Die Register sind ",-1),d("a",{href:"https://openwb.de/main/wp-content/uploads/2023/10/ModbusTCP-openWB-series2-Pro-1.pdf",target:"_blank",rel:"noopener noreferrer"}," hier ",-1),s(" dokumentiert. Bei aktivierter Modbus-Schnittstelle darf die openWB nicht von einer primary-openWB gesteuert werden. ",-1)])]),_:1},8,["model-value"])):b("",!0),t.$store.state.mqtt["openWB/general/extern"]===!0&&t.$store.state.mqtt["openWB/general/modbus_control"]!==!0?(r(),m("div",le,[n(g,{subtype:"info",class:"mb-2"},{default:o(()=>[...e[37]||(e[37]=[s(' Wenn die Steuerung über Modbus auf "Aus" geändert wird, muss danach ein Neustart durchgeführt werden! ',-1)])]),_:1})])):b("",!0)])),u.installAssistantActive?b("",!0):(r(),m("div",re,[n(l,{title:"HTTP-API",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/http_api"],"onUpdate:modelValue":e[2]||(e[2]=a=>t.updateState("openWB/general/http_api",a))},{help:o(()=>[...e[38]||(e[38]=[d("p",null,[s(" Mit der HTTP-API kann man den Wert eines MQTT-Topics per HTTPs abfragen oder neu setzen. Die Schnittstelle ist "),d("a",{href:"https://openwb.de/main/wp-content/uploads/2025/02/HTTP-API-fuer-openWB-series1-und-series2.pdf",target:"_blank",rel:"noopener noreferrer"}," hier "),s(" dokumentiert. ")],-1)])]),_:1},8,["model-value"]),t.$store.state.mqtt["openWB/system/security/user_management_active"]===!0?(r(),f(g,{key:0,subtype:"info"},{default:o(()=>[...e[39]||(e[39]=[s(" Die Benutzerverwaltung ist aktiviert. Es muss bei jedem HTTP-API Zugriff ein gültiger Benutzername und Passwort mittels HTTP Basic Auth übermittelt werden. Es wird empfohlen, hierfür einen separaten Benutzer mit eingeschränkten Rechten anzulegen. ",-1)])]),_:1})):b("",!0)]))]),_:1}),u.installAssistantActive?b("",!0):(r(),m("div",ie,[n(w,{title:"Hardware"},{default:o(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(r(),m("div",ue,[n(g,{subtype:"info"},{default:o(()=>[...e[40]||(e[40]=[s(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):b("",!0),t.$store.state.mqtt["openWB/general/extern"]===!1?(r(),m("div",de,[n(l,{title:"Geschwindigkeit Regelintervall",buttons:[{buttonValue:10,text:"Normal",class:"btn-outline-success"},{buttonValue:20,text:"Langsam",class:"btn-outline-warning"},{buttonValue:60,text:"Sehr Langsam",class:"btn-outline-danger"}],"model-value":t.$store.state.mqtt["openWB/general/control_interval"],"onUpdate:modelValue":e[3]||(e[3]=a=>t.updateState("openWB/general/control_interval",a))},{help:o(()=>[...e[41]||(e[41]=[s(' Sollten Probleme oder Fehlermeldungen auftauchen, stelle bitte zunächst das Regelintervall auf "Normal". Werden Module genutzt, welche z.B. eine Online-API zur Abfrage nutzen (höhere Latenzzeiten) oder möchte man weniger Regeleingriffe, so kann man das Regelintervall auf "Langsam" (20 Sekunden) herabsetzen. Die Einstellung "Sehr Langsam" führt zu einer Regelzeit von 60 Sekunden.',-1),d("br",null,null,-1),d("span",{class:"text-danger"},' Nicht nur die Regelung der PV geführten Ladung, sondern auch die Ladestromänderung, beispielsweise "Stop" etc., werden dann nur noch in diesem Intervall ausgeführt. Die Regelung wird insgesamt träger. Solange es keinen triftigen Grund gibt, sollte "Normal" gewählt werden. ',-1)])]),_:1},8,["model-value"]),n(l,{title:"Netzschutz",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/grid_protection_configured"],"onUpdate:modelValue":e[4]||(e[4]=a=>t.updateState("openWB/general/grid_protection_configured",a))},{help:o(()=>[...e[42]||(e[42]=[s(' Diese Option ist standardmäßig aktiviert und sollte so belassen werden. Bei Unterschreitung einer kritischen Frequenz des Stromnetzes wird die Ladung nach einer zufälligen Zeit zwischen 1 und 90 Sekunden pausiert. Der Lademodus wechselt auf "Stop". Sobald die Frequenz wieder in einem normalen Bereich ist wird automatisch der zuletzt gewählte Lademodus wieder aktiviert. Ebenso wird die Ladung bei Überschreiten von 51,8 Hz unterbrochen. Dies ist dann der Fall, wenn der Energieversorger Wartungsarbeiten am (Teil-)Netz durchführt und auf einen vorübergehenden Generator-Betrieb umschaltet. Die Erhöhung der Frequenz wird durchgeführt, um die PV Anlagen abzuschalten.',-1),d("br",null,null,-1),d("span",{class:"text-danger"}," Die Option ist nur aktiv, wenn der EVU-Zähler die Frequenz übermittelt. ",-1)])]),_:1},8,["model-value"])])):b("",!0)]),_:1})])),u.installAssistantActive?b("",!0):(r(),f(w,{key:1,title:"Bedienung & Darstellung"},{default:o(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(r(),m("div",ge,[n(g,{subtype:"info"},{default:o(()=>[...e[43]||(e[43]=[s(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(r(),m("div",me,[n(l,{title:"Temporäre Ladeeinstellungen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/temporary_charge_templates_active"],"onUpdate:modelValue":e[5]||(e[5]=a=>t.updateState("openWB/general/temporary_charge_templates_active",a))},{help:o(()=>[e[45]||(e[45]=d("p",null,[s(' Bei Auswahl "Ja" werden Änderungen am Ladepunkt über die Hauptseite oder den Touchscreen der openWB als "temporäre" Eingaben behandelt. Dies erlaubt z.B. das schnelle, temporäre Umschalten des Lademodus oder deren Detaileinstellungen für eine unplanmäßige Ladeanforderung (Bsp. Voreinstellung -> PV-Laden / unplanmäßig -> Sofort-Laden für Laden wegen unplanmäßigen Termins). '),d("br"),s(" Alle Einstellungen, die unter Einstellungen → Konfiguration → Fahrzeuge → Lade-Profil für das jeweilige Fahrzeug konfiguriert sind, gelten als persistent (dauerhaft). Diese werden bei jedem Abstecken des jeweiligen Fahrzeugs neu geladen - sind also Voreinstellungen (default). ")],-1)),e[46]||(e[46]=d("p",null,' Bei Auswahl "Nein" werden Änderungen am Ladepunkt über die Hauptseite oder den Touchscreen der openWB direkt als "persistente" (dauerhafte) Eingaben behandelt. ',-1)),d("p",null,[e[44]||(e[44]=s(" Eine ausführliche Erläuterung mit Beispielen findet Ihr im ",-1)),d("a",{href:`https://wiki.openwb.de/doku.php?id=openwb:vc:${t.systemVersion}:software:einstell-konfig:einstellungen:allgemein#temporaere_ladeeinstellungen`,target:"_blank",rel:"noopener noreferrer"}," openWB-DokuWiki ",8,pe)])]),_:1},8,["model-value"]),n(y,{class:"mt-0"},{default:o(()=>[...e[47]||(e[47]=[s(" Hauptseite ",-1)])]),_:1}),t.$store.state.mqtt["openWB/general/web_theme"]!==void 0?(r(),m("div",be,[n(T,{class:"mb-2",title:"Theme",groups:_.webThemeGroupList,"model-value":t.$store.state.mqtt["openWB/general/web_theme"].type,"onUpdate:modelValue":e[6]||(e[6]=a=>_.updateSelectedWebTheme(a))},null,8,["groups","model-value"]),t.$store.state.mqtt["openWB/general/web_theme"].type?(r(),f($,{key:0,"web-theme":t.$store.state.mqtt["openWB/general/web_theme"],"onUpdate:configuration":e[7]||(e[7]=a=>_.updateConfiguration("openWB/general/web_theme",a))},null,8,["web-theme"])):b("",!0)])):b("",!0)]))]),_:1})),u.installAssistantActive?b("",!0):(r(),f(w,{key:2,title:"Lade-Protokoll"},{default:o(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(r(),m("div",fe,[n(g,{subtype:"info"},{default:o(()=>[...e[48]||(e[48]=[s(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(r(),m("div",_e,[n(l,{title:"Einheit für Entfernungen","model-value":t.$store.state.mqtt["openWB/general/range_unit"],buttons:[{buttonValue:"km",text:"Kilometer"},{buttonValue:"mi",text:"Meilen"}],"onUpdate:modelValue":e[8]||(e[8]=a=>t.updateState("openWB/general/range_unit",a))},null,8,["model-value"]),n(y,null,{default:o(()=>[...e[49]||(e[49]=[s(" Auswahl der Datenfelder ",-1)])]),_:1}),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.time_begin,"onUpdate:modelValue":e[9]||(e[9]=a=>t.updateState("openWB/general/charge_log_data_config",a,"time_begin"))},{title:o(()=>[n(i,{icon:["fas","calendar"]}),e[50]||(e[50]=s(" Beginn ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.time_end,"onUpdate:modelValue":e[10]||(e[10]=a=>t.updateState("openWB/general/charge_log_data_config",a,"time_end"))},{title:o(()=>[n(i,{icon:["fas","calendar"]}),e[51]||(e[51]=s(" Ende ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.time_time_charged,"onUpdate:modelValue":e[11]||(e[11]=a=>t.updateState("openWB/general/charge_log_data_config",a,"time_time_charged"))},{title:o(()=>[n(i,{icon:["fas","clock"]}),e[52]||(e[52]=s(" Dauer ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.data_costs,"onUpdate:modelValue":e[12]||(e[12]=a=>t.updateState("openWB/general/charge_log_data_config",a,"data_costs"))},{title:o(()=>[n(i,{icon:["fas","coins"]}),e[53]||(e[53]=s(" Kosten ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.data_power_source,"onUpdate:modelValue":e[13]||(e[13]=a=>t.updateState("openWB/general/charge_log_data_config",a,"data_power_source"))},{title:o(()=>[n(i,{icon:["fas","pie-chart"]}),e[54]||(e[54]=s(" Energieaufteilung ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.vehicle_name,"onUpdate:modelValue":e[14]||(e[14]=a=>t.updateState("openWB/general/charge_log_data_config",a,"vehicle_name"))},{title:o(()=>[n(i,{icon:["fas","car"]}),e[55]||(e[55]=s(" Name ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.vehicle_chargemode,"onUpdate:modelValue":e[15]||(e[15]=a=>t.updateState("openWB/general/charge_log_data_config",a,"vehicle_chargemode"))},{title:o(()=>[n(i,{icon:["fas","car"]}),e[56]||(e[56]=s(" Lademodus ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.vehicle_prio,"onUpdate:modelValue":e[16]||(e[16]=a=>t.updateState("openWB/general/charge_log_data_config",a,"vehicle_prio"))},{title:o(()=>[n(i,{icon:["fas","car"]}),e[57]||(e[57]=s(" Priorität ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.vehicle_rfid,"onUpdate:modelValue":e[17]||(e[17]=a=>t.updateState("openWB/general/charge_log_data_config",a,"vehicle_rfid"))},{title:o(()=>[n(i,{icon:["fas","car"]}),e[58]||(e[58]=s(" ID-Tag ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.vehicle_odometer,"onUpdate:modelValue":e[18]||(e[18]=a=>t.updateState("openWB/general/charge_log_data_config",a,"vehicle_odometer"))},{title:o(()=>[n(i,{icon:["fas","car"]}),e[59]||(e[59]=s(" Kilometerstand ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.vehicle_soc_at_start,"onUpdate:modelValue":e[19]||(e[19]=a=>t.updateState("openWB/general/charge_log_data_config",a,"vehicle_soc_at_start"))},{title:o(()=>[n(i,{icon:["fas","car"]}),e[60]||(e[60]=s(" SoC bei Ladebeginn ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.vehicle_soc_at_end,"onUpdate:modelValue":e[20]||(e[20]=a=>t.updateState("openWB/general/charge_log_data_config",a,"vehicle_soc_at_end"))},{title:o(()=>[n(i,{icon:["fas","car"]}),e[61]||(e[61]=s(" SoC bei Ladende ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.chargepoint_name,"onUpdate:modelValue":e[21]||(e[21]=a=>t.updateState("openWB/general/charge_log_data_config",a,"chargepoint_name"))},{title:o(()=>[n(i,{icon:["fas","charging-station"]}),e[62]||(e[62]=s(" Name ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.chargepoint_serial_number,"onUpdate:modelValue":e[22]||(e[22]=a=>t.updateState("openWB/general/charge_log_data_config",a,"chargepoint_serial_number"))},{title:o(()=>[n(i,{icon:["fas","charging-station"]}),e[63]||(e[63]=s(" Seriennummer ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.data_imported_since_mode_switch,"onUpdate:modelValue":e[23]||(e[23]=a=>t.updateState("openWB/general/charge_log_data_config",a,"data_imported_since_mode_switch"))},{title:o(()=>[n(i,{icon:["fas","charging-station"]}),e[64]||(e[64]=s(" Geladene Energie ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.chargepoint_imported_at_start,"onUpdate:modelValue":e[24]||(e[24]=a=>t.updateState("openWB/general/charge_log_data_config",a,"chargepoint_imported_at_start"))},{title:o(()=>[n(i,{icon:["fas","charging-station"]}),e[65]||(e[65]=s(" Zählerstand bei Ladebeginn ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.chargepoint_imported_at_end,"onUpdate:modelValue":e[25]||(e[25]=a=>t.updateState("openWB/general/charge_log_data_config",a,"chargepoint_imported_at_end"))},{title:o(()=>[n(i,{icon:["fas","charging-station"]}),e[66]||(e[66]=s(" Zählerstand bei Ladeende ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.data_exported_since_mode_switch,"onUpdate:modelValue":e[26]||(e[26]=a=>t.updateState("openWB/general/charge_log_data_config",a,"data_exported_since_mode_switch"))},{title:o(()=>[n(i,{icon:["fas","charging-station"]}),e[67]||(e[67]=s(" Entladene Energie ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.chargepoint_exported_at_start,"onUpdate:modelValue":e[27]||(e[27]=a=>t.updateState("openWB/general/charge_log_data_config",a,"chargepoint_exported_at_start"))},{title:o(()=>[n(i,{icon:["fas","charging-station"]}),e[68]||(e[68]=s(" Zählerstand bei Entladebeginn ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.chargepoint_exported_at_end,"onUpdate:modelValue":e[28]||(e[28]=a=>t.updateState("openWB/general/charge_log_data_config",a,"chargepoint_exported_at_end"))},{title:o(()=>[n(i,{icon:["fas","charging-station"]}),e[69]||(e[69]=s(" Zählerstand bei Entladeende ",-1))]),_:1},8,["model-value"])]))]),_:1})),n(q,{"form-name":"generalConfigForm",onSave:e[29]||(e[29]=a=>t.$emit("save",t.mqttTopicsToPublish)),onReset:e[30]||(e[30]=a=>t.$emit("reset")),onDefaults:e[31]||(e[31]=a=>t.$emit("defaults"))})])])}const we=v(ne,[["render",ce],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/GeneralConfiguration.vue"]]),ye=Object.freeze(Object.defineProperty({__proto__:null,default:we},Symbol.toStringTag,{value:"Module"}));export{we as G,G as W,ye as a}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/webTheme-Cb0hLMND.js","assets/vendor-BwGffBs-.js","assets/vendor-Cq9CCOuG.css","assets/vendor-fortawesome-DplTMxoa.js","assets/index-CE-5DBwq.js","assets/vendor-bootstrap-DxivtUnb.js","assets/vendor-jquery-CEMonh9Y.js","assets/vendor-bootstrap-BJ8HpIhY.css","assets/vendor-axios-C0vEeTtS.js","assets/index-xf6JJloS.css","assets/SystemVersion-eCZ4XHiC.js","assets/dynamic-import-helper-BheWnx7M.js","assets/webTheme-FN-GXJUO.js","assets/OpenwbSortableList-yQzkYwAQ.js","assets/OpenwbSortableList-BkrTk2sD.css","assets/webTheme-C9YxyerO.js"])))=>i.map(i=>d[i]); +import{F as S,l as k,ac as z,ad as E,ae as C,af as D,a6 as N,X as A,G as L,as as U,at as P,au as J}from"./vendor-fortawesome-DplTMxoa.js";import{_ as B,C as O}from"./index-CE-5DBwq.js";import{S as M}from"./SystemVersion-eCZ4XHiC.js";import{_ as R}from"./dynamic-import-helper-BheWnx7M.js";import{_ as v,m as p,l as r,f as m,z as f,u as o,B as s,J as c,q as n,y as d,a7 as F,P as x,K as I,x as b}from"./vendor-BwGffBs-.js";const j={props:{webTheme:{type:Object,required:!0}},emits:["update:configuration"],methods:{updateConfiguration(t,e=void 0){this.$emit("update:configuration",{value:t,object:e})}}},G=v(j,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/web_themes/WebThemeConfigMixin.vue"]]),H={name:"WebThemeFallback",mixins:[G]},Z={class:"web-theme-fallback"},K={key:1};function Q(t,e,u,W,V,_){const g=p("openwb-base-alert"),l=p("openwb-base-textarea");return r(),m("div",Z,[Object.keys(t.webTheme.configuration).length==0?(r(),f(g,{key:0,subtype:"info"},{default:o(()=>[s(' Das Web Theme "'+c(t.webTheme.name)+'" bietet keine Einstellungen. ',1)]),_:1})):(r(),m("div",K,[n(g,{subtype:"warning"},{default:o(()=>[s(' Es wurde keine Konfigurationsseite für das Web Theme "'+c(t.webTheme.name)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),n(l,{title:"Theme Konfiguration",subtype:"json","model-value":t.webTheme.configuration,"onUpdate:modelValue":e[0]||(e[0]=h=>t.updateConfiguration(h,"configuration"))},{help:o(()=>[...e[1]||(e[1]=[s(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),n(g,{subtype:"info"},{default:o(()=>[d("pre",null,c(JSON.stringify(t.webTheme.configuration,void 0,2)),1)]),_:1})]))])}const X=v(H,[["render",Q],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/web_themes/OpenwbWebThemeFallback.vue"]]);k.add(z,E,C,D);const Y={name:"OpenwbWebThemeProxy",components:{FontAwesomeIcon:S},props:{webTheme:{type:Object,required:!0}},emits:["update:configuration"],methods:{getThemeComponent(){return console.debug(`loading web theme: ${this.webTheme.type}`),F({loader:()=>R(Object.assign({"./colors/webTheme.vue":()=>B(()=>import("./webTheme-Cb0hLMND.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])),"./koala/webTheme.vue":()=>B(()=>import("./webTheme-FN-GXJUO.js"),__vite__mapDeps([12,13,4,1,2,3,5,6,7,8,9,14,10,11])),"./standard_legacy/webTheme.vue":()=>B(()=>import("./webTheme-C9YxyerO.js"),__vite__mapDeps([15,1,2,3,4,5,6,7,8,9,10,11]))}),`./${this.webTheme.type}/webTheme.vue`,3),errorComponent:X})},updateConfiguration(t){this.$emit("update:configuration",t)}}};function ee(t,e,u,W,V,_){const g=p("font-awesome-icon"),l=p("openwb-base-alert"),h=p("openwb-base-heading");return r(),m(I,null,[u.webTheme.official?(r(),f(l,{key:0,subtype:"success"},{default:o(()=>[n(g,{icon:["fas","certificate"]}),s(' Das ausgewählte Web Theme "'+c(u.webTheme.name)+'" wird von openWB gepflegt. ',1)]),_:1})):(r(),f(l,{key:1,subtype:"info"},{default:o(()=>[n(g,{icon:["fas","people-group"]}),e[1]||(e[1]=s(" Das ausgewählte Theme wird in unserer Community gepflegt. Rückfragen oder Probleme bitte im Forum diskutieren. ",-1))]),_:1})),n(l,{subtype:u.webTheme.userManagementSupported?"success":"warning"},{default:o(()=>[n(g,{icon:["fas",u.webTheme.userManagementSupported?"user-check":"user-slash"]},null,8,["icon"]),s(' Das ausgewählte Web Theme "'+c(u.webTheme.name)+'" unterstützt die Benutzerverwaltung'+c(u.webTheme.userManagementSupported?"":" nicht")+". ",1)]),_:1},8,["subtype"]),n(h,null,{default:o(()=>[s(' Einstellungen für Web Theme "'+c(u.webTheme.name)+'" ',1)]),_:1}),(r(),f(x(_.getThemeComponent()),{"web-theme":u.webTheme,"onUpdate:configuration":e[0]||(e[0]=w=>_.updateConfiguration(w))},null,40,["web-theme"]))],64)}const te=v(Y,[["render",ee],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/web_themes/OpenwbWebThemeProxy.vue"]]);k.add(N,A,L,U,P,J);const ne={name:"OpenwbGeneralConfigView",components:{OpenwbWebThemeProxy:te,FontAwesomeIcon:S},mixins:[O,M],props:{installAssistantActive:{type:Boolean,required:!1,default:!1}},emits:["save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/general/allow_unencrypted_access",writeable:!1},{topic:"openWB/general/charge_log_data_config",writeable:!0},{topic:"openWB/general/control_interval",writeable:!0},{topic:"openWB/general/extern",writeable:!0},{topic:"openWB/general/grid_protection_configured",writeable:!0},{topic:"openWB/general/http_api",writeable:!0},{topic:"openWB/general/modbus_control",writeable:!0},{topic:"openWB/general/range_unit",writeable:!0},{topic:"openWB/general/temporary_charge_templates_active",writeable:!0},{topic:"openWB/general/web_theme",writeable:!0},{topic:"openWB/system/configurable/web_themes",writeable:!1},{topic:"openWB/system/security/user_management_active",writeable:!1}]}},computed:{webThemeList:{get(){return this.$store.state.mqtt["openWB/system/configurable/web_themes"]}},webThemeGroupList:{get(){let t=[{label:"openWB",options:[]},{label:"Community",options:[]}];return this.webThemeList?.forEach(e=>{e.defaults.userManagementSupported!==!0&&this.$store.state.mqtt["openWB/system/security/user_management_active"]===!0||(e.official===!0?t[0].options.push(e):t[1].options.push(e))}),t.filter(e=>e.options.length>0)}},disableExternModeSwitch(){return this.$store.state.mqtt["openWB/system/security/user_management_active"]===!0||this.$store.state.mqtt["openWB/general/allow_unencrypted_access"]===!1}},methods:{getWebThemeDefaults(t){const e=this.webThemeList.find(u=>u.value==t);return Object.prototype.hasOwnProperty.call(e,"defaults")?{...JSON.parse(JSON.stringify(e.defaults))}:(console.warn("no default configuration found for web theme type!",t),{})},updateSelectedWebTheme(t){this.updateState("openWB/general/web_theme",this.getWebThemeDefaults(t))},updateConfiguration(t,e){console.debug("updateConfiguration",t,e),this.updateState(t,e.value,e.object)}}},ae={class:"generalConfig"},oe={name:"generalConfigForm"},se={key:1},le={key:1},re={key:2},ie={key:0},ue={key:0},de={key:1},ge={key:0},me={key:1},pe=["href"],be={key:0},fe={key:0},_e={key:1};function ce(t,e,u,W,V,_){const g=p("openwb-base-alert"),l=p("openwb-base-button-group-input"),h=p("RouterLink"),w=p("openwb-base-card"),y=p("openwb-base-heading"),T=p("openwb-base-select-input"),$=p("openwb-web-theme-proxy"),i=p("font-awesome-icon"),q=p("openwb-base-submit-buttons");return r(),m("div",ae,[d("form",oe,[n(w,{title:"Steuerungsmodus"},{default:o(()=>[n(g,{subtype:"info"},{default:o(()=>[...e[32]||(e[32]=[d("p",null,' Wird für den Steuerungsmodus "primary" gewählt, übernimmt diese openWB die alleinige Regelung und steuert ggf. vorhandene weitere openWB (z.B. secondary openWB, openWB Pro, Satellit u.a.) fern. Diese werden in den Ladepunkt-Einstellungen der primary-openWB hinzugefügt. ',-1),d("p",null,' Wird für den Steuerungsmodus "secondary" gewählt, übernimmt diese openWB keine Regelung und muss von einer anderen primary openWB ferngesteuert werden. Wichtig ist, dass in der secondary-openWB eine "interne openWB" mit der korrekten Bauart (= openWB-Hardwarevariante z.B. "Custom, Standard, Standard+, Duo, Buchse") konfiguriert ist. Bei einer Duo sind zwei "interne openWB" zu konfigurieren. Im "secondary"-Modus bleiben alle ausgeblendeten Einstellungen unbeachtet. ',-1)])]),_:1}),n(l,{title:"Steuerungsmodus",buttons:[{buttonValue:!1,text:"primary",class:"btn-outline-danger"},{buttonValue:!0,text:"secondary",class:"btn-outline-success"}],disabled:_.disableExternModeSwitch,"model-value":t.$store.state.mqtt["openWB/general/extern"],"onUpdate:modelValue":e[0]||(e[0]=a=>t.updateState("openWB/general/extern",a))},null,8,["disabled","model-value"]),_.disableExternModeSwitch?(r(),f(g,{key:0,subtype:"warning"},{default:o(()=>[e[34]||(e[34]=s(" Die Benutzerverwaltung ist aktiviert oder der unverschlüsselte Zugriff ist nicht erlaubt. Um den Steuerungsmodus ändern zu können, muss die Benutzerverwaltung im Bereich ",-1)),n(h,{to:"/System/SecurityConfiguration"},{default:o(()=>[...e[33]||(e[33]=[s("Sicherheit",-1)])]),_:1}),e[35]||(e[35]=s(" zunächst deaktiviert und der unverschlüsselte Zugang erlaubt werden. ",-1))]),_:1})):b("",!0),u.installAssistantActive?b("",!0):(r(),m("div",se,[t.$store.state.mqtt["openWB/general/extern"]===!0?(r(),f(l,{key:0,title:"Steuerung über Modbus als secondary",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/modbus_control"],"onUpdate:modelValue":e[1]||(e[1]=a=>t.updateState("openWB/general/modbus_control",a))},{help:o(()=>[...e[36]||(e[36]=[s(" Im secondary-Modus kann die openWB über die Modbus-Schnittstelle gesteuert werden. Die Register sind ",-1),d("a",{href:"https://openwb.de/main/wp-content/uploads/2023/10/ModbusTCP-openWB-series2-Pro-1.pdf",target:"_blank",rel:"noopener noreferrer"}," hier ",-1),s(" dokumentiert. Bei aktivierter Modbus-Schnittstelle darf die openWB nicht von einer primary-openWB gesteuert werden. ",-1)])]),_:1},8,["model-value"])):b("",!0),t.$store.state.mqtt["openWB/general/extern"]===!0&&t.$store.state.mqtt["openWB/general/modbus_control"]!==!0?(r(),m("div",le,[n(g,{subtype:"info",class:"mb-2"},{default:o(()=>[...e[37]||(e[37]=[s(' Wenn die Steuerung über Modbus auf "Aus" geändert wird, muss danach ein Neustart durchgeführt werden! ',-1)])]),_:1})])):b("",!0)])),u.installAssistantActive?b("",!0):(r(),m("div",re,[n(l,{title:"HTTP-API",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/http_api"],"onUpdate:modelValue":e[2]||(e[2]=a=>t.updateState("openWB/general/http_api",a))},{help:o(()=>[...e[38]||(e[38]=[d("p",null,[s(" Mit der HTTP-API kann man den Wert eines MQTT-Topics per HTTPs abfragen oder neu setzen. Die Schnittstelle ist "),d("a",{href:"https://openwb.de/main/wp-content/uploads/2025/02/HTTP-API-fuer-openWB-series1-und-series2.pdf",target:"_blank",rel:"noopener noreferrer"}," hier "),s(" dokumentiert. ")],-1)])]),_:1},8,["model-value"]),t.$store.state.mqtt["openWB/system/security/user_management_active"]===!0?(r(),f(g,{key:0,subtype:"info"},{default:o(()=>[...e[39]||(e[39]=[s(" Die Benutzerverwaltung ist aktiviert. Es muss bei jedem HTTP-API Zugriff ein gültiger Benutzername und Passwort mittels HTTP Basic Auth übermittelt werden. Es wird empfohlen, hierfür einen separaten Benutzer mit eingeschränkten Rechten anzulegen. ",-1)])]),_:1})):b("",!0)]))]),_:1}),u.installAssistantActive?b("",!0):(r(),m("div",ie,[n(w,{title:"Hardware"},{default:o(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(r(),m("div",ue,[n(g,{subtype:"info"},{default:o(()=>[...e[40]||(e[40]=[s(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):b("",!0),t.$store.state.mqtt["openWB/general/extern"]===!1?(r(),m("div",de,[n(l,{title:"Geschwindigkeit Regelintervall",buttons:[{buttonValue:10,text:"Normal",class:"btn-outline-success"},{buttonValue:20,text:"Langsam",class:"btn-outline-warning"},{buttonValue:60,text:"Sehr Langsam",class:"btn-outline-danger"}],"model-value":t.$store.state.mqtt["openWB/general/control_interval"],"onUpdate:modelValue":e[3]||(e[3]=a=>t.updateState("openWB/general/control_interval",a))},{help:o(()=>[...e[41]||(e[41]=[s(' Sollten Probleme oder Fehlermeldungen auftauchen, stelle bitte zunächst das Regelintervall auf "Normal". Werden Module genutzt, welche z.B. eine Online-API zur Abfrage nutzen (höhere Latenzzeiten) oder möchte man weniger Regeleingriffe, so kann man das Regelintervall auf "Langsam" (20 Sekunden) herabsetzen. Die Einstellung "Sehr Langsam" führt zu einer Regelzeit von 60 Sekunden.',-1),d("br",null,null,-1),d("span",{class:"text-danger"},' Nicht nur die Regelung der PV geführten Ladung, sondern auch die Ladestromänderung, beispielsweise "Stop" etc., werden dann nur noch in diesem Intervall ausgeführt. Die Regelung wird insgesamt träger. Solange es keinen triftigen Grund gibt, sollte "Normal" gewählt werden. ',-1)])]),_:1},8,["model-value"]),n(l,{title:"Netzschutz",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/grid_protection_configured"],"onUpdate:modelValue":e[4]||(e[4]=a=>t.updateState("openWB/general/grid_protection_configured",a))},{help:o(()=>[...e[42]||(e[42]=[s(' Diese Option ist standardmäßig aktiviert und sollte so belassen werden. Bei Unterschreitung einer kritischen Frequenz des Stromnetzes wird die Ladung nach einer zufälligen Zeit zwischen 1 und 90 Sekunden pausiert. Der Lademodus wechselt auf "Stop". Sobald die Frequenz wieder in einem normalen Bereich ist wird automatisch der zuletzt gewählte Lademodus wieder aktiviert. Ebenso wird die Ladung bei Überschreiten von 51,8 Hz unterbrochen. Dies ist dann der Fall, wenn der Energieversorger Wartungsarbeiten am (Teil-)Netz durchführt und auf einen vorübergehenden Generator-Betrieb umschaltet. Die Erhöhung der Frequenz wird durchgeführt, um die PV Anlagen abzuschalten.',-1),d("br",null,null,-1),d("span",{class:"text-danger"}," Die Option ist nur aktiv, wenn der EVU-Zähler die Frequenz übermittelt. ",-1)])]),_:1},8,["model-value"])])):b("",!0)]),_:1})])),u.installAssistantActive?b("",!0):(r(),f(w,{key:1,title:"Bedienung & Darstellung"},{default:o(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(r(),m("div",ge,[n(g,{subtype:"info"},{default:o(()=>[...e[43]||(e[43]=[s(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(r(),m("div",me,[n(l,{title:"Temporäre Ladeeinstellungen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/temporary_charge_templates_active"],"onUpdate:modelValue":e[5]||(e[5]=a=>t.updateState("openWB/general/temporary_charge_templates_active",a))},{help:o(()=>[e[45]||(e[45]=d("p",null,[s(' Bei Auswahl "Ja" werden Änderungen am Ladepunkt über die Hauptseite oder den Touchscreen der openWB als "temporäre" Eingaben behandelt. Dies erlaubt z.B. das schnelle, temporäre Umschalten des Lademodus oder deren Detaileinstellungen für eine unplanmäßige Ladeanforderung (Bsp. Voreinstellung -> PV-Laden / unplanmäßig -> Sofort-Laden für Laden wegen unplanmäßigen Termins). '),d("br"),s(" Alle Einstellungen, die unter Einstellungen → Konfiguration → Fahrzeuge → Lade-Profil für das jeweilige Fahrzeug konfiguriert sind, gelten als persistent (dauerhaft). Diese werden bei jedem Abstecken des jeweiligen Fahrzeugs neu geladen - sind also Voreinstellungen (default). ")],-1)),e[46]||(e[46]=d("p",null,' Bei Auswahl "Nein" werden Änderungen am Ladepunkt über die Hauptseite oder den Touchscreen der openWB direkt als "persistente" (dauerhafte) Eingaben behandelt. ',-1)),d("p",null,[e[44]||(e[44]=s(" Eine ausführliche Erläuterung mit Beispielen findet Ihr im ",-1)),d("a",{href:`https://wiki.openwb.de/doku.php?id=openwb:vc:${t.systemVersion}:software:einstell-konfig:einstellungen:allgemein#temporaere_ladeeinstellungen`,target:"_blank",rel:"noopener noreferrer"}," openWB-DokuWiki ",8,pe)])]),_:1},8,["model-value"]),n(y,{class:"mt-0"},{default:o(()=>[...e[47]||(e[47]=[s(" Hauptseite ",-1)])]),_:1}),t.$store.state.mqtt["openWB/general/web_theme"]!==void 0?(r(),m("div",be,[n(T,{class:"mb-2",title:"Theme",groups:_.webThemeGroupList,"model-value":t.$store.state.mqtt["openWB/general/web_theme"].type,"onUpdate:modelValue":e[6]||(e[6]=a=>_.updateSelectedWebTheme(a))},null,8,["groups","model-value"]),t.$store.state.mqtt["openWB/general/web_theme"].type?(r(),f($,{key:0,"web-theme":t.$store.state.mqtt["openWB/general/web_theme"],"onUpdate:configuration":e[7]||(e[7]=a=>_.updateConfiguration("openWB/general/web_theme",a))},null,8,["web-theme"])):b("",!0)])):b("",!0)]))]),_:1})),u.installAssistantActive?b("",!0):(r(),f(w,{key:2,title:"Lade-Protokoll"},{default:o(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(r(),m("div",fe,[n(g,{subtype:"info"},{default:o(()=>[...e[48]||(e[48]=[s(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(r(),m("div",_e,[n(l,{title:"Einheit für Entfernungen","model-value":t.$store.state.mqtt["openWB/general/range_unit"],buttons:[{buttonValue:"km",text:"Kilometer"},{buttonValue:"mi",text:"Meilen"}],"onUpdate:modelValue":e[8]||(e[8]=a=>t.updateState("openWB/general/range_unit",a))},null,8,["model-value"]),n(y,null,{default:o(()=>[...e[49]||(e[49]=[s(" Auswahl der Datenfelder ",-1)])]),_:1}),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.time_begin,"onUpdate:modelValue":e[9]||(e[9]=a=>t.updateState("openWB/general/charge_log_data_config",a,"time_begin"))},{title:o(()=>[n(i,{icon:["fas","calendar"]}),e[50]||(e[50]=s(" Beginn ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.time_end,"onUpdate:modelValue":e[10]||(e[10]=a=>t.updateState("openWB/general/charge_log_data_config",a,"time_end"))},{title:o(()=>[n(i,{icon:["fas","calendar"]}),e[51]||(e[51]=s(" Ende ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.time_time_charged,"onUpdate:modelValue":e[11]||(e[11]=a=>t.updateState("openWB/general/charge_log_data_config",a,"time_time_charged"))},{title:o(()=>[n(i,{icon:["fas","clock"]}),e[52]||(e[52]=s(" Dauer ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.data_costs,"onUpdate:modelValue":e[12]||(e[12]=a=>t.updateState("openWB/general/charge_log_data_config",a,"data_costs"))},{title:o(()=>[n(i,{icon:["fas","coins"]}),e[53]||(e[53]=s(" Kosten ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.data_power_source,"onUpdate:modelValue":e[13]||(e[13]=a=>t.updateState("openWB/general/charge_log_data_config",a,"data_power_source"))},{title:o(()=>[n(i,{icon:["fas","pie-chart"]}),e[54]||(e[54]=s(" Energieaufteilung ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.vehicle_name,"onUpdate:modelValue":e[14]||(e[14]=a=>t.updateState("openWB/general/charge_log_data_config",a,"vehicle_name"))},{title:o(()=>[n(i,{icon:["fas","car"]}),e[55]||(e[55]=s(" Name ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.vehicle_chargemode,"onUpdate:modelValue":e[15]||(e[15]=a=>t.updateState("openWB/general/charge_log_data_config",a,"vehicle_chargemode"))},{title:o(()=>[n(i,{icon:["fas","car"]}),e[56]||(e[56]=s(" Lademodus ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.vehicle_prio,"onUpdate:modelValue":e[16]||(e[16]=a=>t.updateState("openWB/general/charge_log_data_config",a,"vehicle_prio"))},{title:o(()=>[n(i,{icon:["fas","car"]}),e[57]||(e[57]=s(" Priorität ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.vehicle_rfid,"onUpdate:modelValue":e[17]||(e[17]=a=>t.updateState("openWB/general/charge_log_data_config",a,"vehicle_rfid"))},{title:o(()=>[n(i,{icon:["fas","car"]}),e[58]||(e[58]=s(" ID-Tag ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.vehicle_odometer,"onUpdate:modelValue":e[18]||(e[18]=a=>t.updateState("openWB/general/charge_log_data_config",a,"vehicle_odometer"))},{title:o(()=>[n(i,{icon:["fas","car"]}),e[59]||(e[59]=s(" Kilometerstand ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.vehicle_soc_at_start,"onUpdate:modelValue":e[19]||(e[19]=a=>t.updateState("openWB/general/charge_log_data_config",a,"vehicle_soc_at_start"))},{title:o(()=>[n(i,{icon:["fas","car"]}),e[60]||(e[60]=s(" SoC bei Ladebeginn ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.vehicle_soc_at_end,"onUpdate:modelValue":e[20]||(e[20]=a=>t.updateState("openWB/general/charge_log_data_config",a,"vehicle_soc_at_end"))},{title:o(()=>[n(i,{icon:["fas","car"]}),e[61]||(e[61]=s(" SoC bei Ladende ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.chargepoint_name,"onUpdate:modelValue":e[21]||(e[21]=a=>t.updateState("openWB/general/charge_log_data_config",a,"chargepoint_name"))},{title:o(()=>[n(i,{icon:["fas","charging-station"]}),e[62]||(e[62]=s(" Name ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.chargepoint_serial_number,"onUpdate:modelValue":e[22]||(e[22]=a=>t.updateState("openWB/general/charge_log_data_config",a,"chargepoint_serial_number"))},{title:o(()=>[n(i,{icon:["fas","charging-station"]}),e[63]||(e[63]=s(" Seriennummer ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.data_imported_since_mode_switch,"onUpdate:modelValue":e[23]||(e[23]=a=>t.updateState("openWB/general/charge_log_data_config",a,"data_imported_since_mode_switch"))},{title:o(()=>[n(i,{icon:["fas","charging-station"]}),e[64]||(e[64]=s(" Geladene Energie ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.chargepoint_imported_at_start,"onUpdate:modelValue":e[24]||(e[24]=a=>t.updateState("openWB/general/charge_log_data_config",a,"chargepoint_imported_at_start"))},{title:o(()=>[n(i,{icon:["fas","charging-station"]}),e[65]||(e[65]=s(" Zählerstand bei Ladebeginn ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.chargepoint_imported_at_end,"onUpdate:modelValue":e[25]||(e[25]=a=>t.updateState("openWB/general/charge_log_data_config",a,"chargepoint_imported_at_end"))},{title:o(()=>[n(i,{icon:["fas","charging-station"]}),e[66]||(e[66]=s(" Zählerstand bei Ladeende ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.data_exported_since_mode_switch,"onUpdate:modelValue":e[26]||(e[26]=a=>t.updateState("openWB/general/charge_log_data_config",a,"data_exported_since_mode_switch"))},{title:o(()=>[n(i,{icon:["fas","charging-station"]}),e[67]||(e[67]=s(" Entladene Energie ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.chargepoint_exported_at_start,"onUpdate:modelValue":e[27]||(e[27]=a=>t.updateState("openWB/general/charge_log_data_config",a,"chargepoint_exported_at_start"))},{title:o(()=>[n(i,{icon:["fas","charging-station"]}),e[68]||(e[68]=s(" Zählerstand bei Entladebeginn ",-1))]),_:1},8,["model-value"]),n(l,{buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/general/charge_log_data_config"]?.chargepoint_exported_at_end,"onUpdate:modelValue":e[28]||(e[28]=a=>t.updateState("openWB/general/charge_log_data_config",a,"chargepoint_exported_at_end"))},{title:o(()=>[n(i,{icon:["fas","charging-station"]}),e[69]||(e[69]=s(" Zählerstand bei Entladeende ",-1))]),_:1},8,["model-value"])]))]),_:1})),n(q,{"form-name":"generalConfigForm",onSave:e[29]||(e[29]=a=>t.$emit("save",t.mqttTopicsToPublish)),onReset:e[30]||(e[30]=a=>t.$emit("reset")),onDefaults:e[31]||(e[31]=a=>t.$emit("defaults"))})])])}const we=v(ne,[["render",ce],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/GeneralConfiguration.vue"]]),ye=Object.freeze(Object.defineProperty({__proto__:null,default:we},Symbol.toStringTag,{value:"Module"}));export{we as G,G as W,ye as a}; diff --git a/web/settings/assets/HardwareInstallation-Ln-RWgHD.js b/web/settings/assets/HardwareInstallation-M-k9qNJb.js similarity index 75% rename from web/settings/assets/HardwareInstallation-Ln-RWgHD.js rename to web/settings/assets/HardwareInstallation-M-k9qNJb.js index c6effc561f..a5fd079464 100644 --- a/web/settings/assets/HardwareInstallation-Ln-RWgHD.js +++ b/web/settings/assets/HardwareInstallation-M-k9qNJb.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/device-DHB2lzzG.js","assets/DeviceConfigMixin-D2g2-xc_.js","assets/vendor-BwGffBs-.js","assets/vendor-Cq9CCOuG.css","assets/bat-Dwir2dXd.js","assets/vendor-fortawesome-DplTMxoa.js","assets/index-Bv2WLdLZ.js","assets/vendor-bootstrap-DxivtUnb.js","assets/vendor-jquery-CEMonh9Y.js","assets/vendor-bootstrap-BJ8HpIhY.css","assets/vendor-axios-C0vEeTtS.js","assets/index-xf6JJloS.css","assets/dynamic-import-helper-BheWnx7M.js","assets/device-Bmiwd3r6.js","assets/device-Chn2mfBF.js","assets/device-Du5x1ttW.js","assets/device-DCCgNY-n.js","assets/counter-BNlBJ9zK.js","assets/device-C-VdYO_S.js","assets/device-CUsU7GEo.js","assets/device-qM6Ow-QZ.js","assets/bat-CsHZRmZS.js","assets/device-D0NVBx3_.js","assets/device-CyemJxTG.js","assets/inverter-CIAtxhWQ.js","assets/device-CWvuKt9H.js","assets/counter-Bffry-ig.js","assets/device-Hl-FIG_-.js","assets/counter-D-cbHK0b.js","assets/device-CwrJywgw.js","assets/bat-BmvkzpLQ.js","assets/counter-CZBG0Hhq.js","assets/device-BfuV33Ny.js","assets/inverter-B_yh5lUv.js","assets/device-CME_IE2O.js","assets/counter-fZ9ta8Io.js","assets/device-B2ATC70N.js","assets/inverter-gZKhptDj.js","assets/device-Drtgd5P3.js","assets/device-CnnZ5HDz.js","assets/device-D93KyX8z.js","assets/counter-G6bJTNfM.js","assets/device-C7upWp-n.js","assets/inverter-xEKKUyk6.js","assets/counter-CFsHa4Fy.js","assets/device-BeTvjVsI.js","assets/inverter-EScnj--j.js","assets/bat-B3F6eBBb.js","assets/device-LwKhWIDy.js","assets/bat-BaMLfbPd.js","assets/counter-DdeaIS5X.js","assets/device-CX9F2w1R.js","assets/inverter-BvFrtgVp.js","assets/bat-DRoLlz4z.js","assets/counter-B1e8yvdL.js","assets/device-DFeFqcPa.js","assets/inverter-4q1c4sTB.js","assets/bat-Bsznake9.js","assets/counter-Ligq6oN9.js","assets/device-CpVp0tJY.js","assets/inverter-Ddz53W4s.js","assets/inverter_production_meter-BiC0A6Jg.js","assets/bat-DmrMWSnP.js","assets/device-h744ldQG.js","assets/inverter-DDR03ckG.js","assets/bat-BQPcRXSE.js","assets/counter-BMhK4CiH.js","assets/device-DxS-IR5M.js","assets/inverter-D3RnIGNF.js","assets/bat-BlXDiKVw.js","assets/counter-CqlF4eMW.js","assets/device-BjmcAYaW.js","assets/inverter-BhwdqJVC.js","assets/ModbusRegisterFields-CkQ0333X.js","assets/bat-BXbHurWM.js","assets/bat-DHMe4o2t.css","assets/counter-DC6kT4Ul.js","assets/counter-CZH6UcIq.css","assets/device-D7XDJsSX.js","assets/inverter-Dq1iPHd6.js","assets/inverter-CP1pwHt6.css","assets/bat-BMu23u_H.js","assets/counter-CRumFQ-3.js","assets/device-B7mQquwz.js","assets/inverter-fPQd3WC-.js","assets/counter-CBEHJvDz.js","assets/bat-CjnsdiuU.js","assets/device-D-HB7yYz.js","assets/device-BjH2i3dR.js","assets/device-By62nPmK.js","assets/device-BMh4AbeD.js","assets/bat-DTs1HGE0.js","assets/counter-DbgfMXYW.js","assets/device-D7FS6Gp8.js","assets/inverter-nGKS2t5a.js","assets/device-DVfJuzkE.js","assets/counter-D7_VEfYR.js","assets/device-CzW27uID.js","assets/bat-CiEmt-O4.js","assets/counter-0w4sDDga.js","assets/device-CaZSyW6k.js","assets/inverter-DY7Mgnuo.js","assets/device-BKrVP95F.js","assets/inverter-CQxRN57y.js","assets/counter-Dw5I5Fam.js","assets/SystemVersion-eCZ4XHiC.js","assets/device-BnxKSgH8.js","assets/inverter-DRqfc3BL.js","assets/counter-D1L78n2b.js","assets/device-DLmN6zPE.js","assets/inverter-CLVuKxRd.js","assets/device-Di9i_dA8.js","assets/bat-BUTQpQgo.js","assets/counter-BJsQi-Il.js","assets/device-C0xDk0ts.js","assets/counter-D6d42tEa.js","assets/device-BSXhrs1Z.js","assets/device-Bx-PcB2n.js","assets/inverter-C52-BkWD.js","assets/device-CdePIfdb.js","assets/bat-B688j4YE.js","assets/device-BnxT8JJ2.js","assets/bat-CtbgR4DM.js","assets/counter-XQ79_Md3.js","assets/device-DA58b9nm.js","assets/inverter-g3CWikff.js","assets/device-Bh86b_Z3.js","assets/counter-BW0CYAOL.js","assets/device-DdtU9l__.js","assets/device-DQB3GNdG.js","assets/inverter-cbej_kAy.js","assets/bat-B8bl9-_1.js","assets/bat-DKm_TOA8.js","assets/counter-DcjDrUJp.js","assets/inverter-C2Y5Ecgw.js","assets/bat-CHbcjVCv.js","assets/consumption_counter-BXmDaQsP.js","assets/counter-aE7ZGMoA.js","assets/device-De_utEj4.js","assets/inverter-y4sIEMSG.js","assets/consumption_counter-57_J2Spi.js","assets/device-DBtCkhyu.js","assets/inverter-C6WRP55i.js","assets/counter-DUeWFs_r.js","assets/device-DVMfFy_D.js","assets/counter-CBqU5HUT.js","assets/device-9hZ9C-_o.js","assets/counter-DaLkrygO.js","assets/device-BtMlWIlE.js","assets/inverter-ClHZ9qff.js","assets/bat-BTFg5iPr.js","assets/device-N4SVn9jC.js","assets/device-GN_GKnJc.js","assets/bat-adFrQvT_.js","assets/device-BtAcz1pD.js","assets/counter-Ctv3sDCh.js","assets/device-D8Ube9qm.js","assets/device-BW_zyWYf.js","assets/device-Ct0EL_5c.js","assets/bat-C9j23L0a.js","assets/counter-DXPbMEv9.js","assets/device-BObe7-fT.js","assets/inverter-DXGg9_NH.js","assets/counter-BxgIp61P.js","assets/inverter-BoZH5Xyl.js","assets/bat-CaD2e0g2.js","assets/counter-B1X1Lm0y.js","assets/device-Cae8kKJA.js","assets/inverter-DwjEHaq5.js","assets/bat-iYEGDCT9.js","assets/device-Bm5lJk-e.js","assets/device-YYGO4kNw.js","assets/counter-GFOwVgsi.js","assets/device-Dnz-lfZw.js","assets/inverter-DzTd3kss.js","assets/device-o4cJfonB.js","assets/device-CBzzuPPX.js","assets/bat-f-Hw2SHa.js","assets/device-Du21jRtu.js","assets/inverter-wt0jUIdX.js","assets/counter-CSCRL4Aa.js","assets/device-DmTp-4Q0.js","assets/device-D97fwZ97.js","assets/inverter-Ci5gD6Ti.js","assets/device-D_Qh4d0E.js","assets/device-B2BXKGVF.js","assets/bat-DX4_xsov.js","assets/counter-BNOp0ehB.js","assets/device-CFv91Hst.js","assets/external_inverter-DXVST4jn.js","assets/inverter-ldOqf1dz.js","assets/bat-DR1ovJbK.js","assets/counter_maxstorage-B2T64hs1.js","assets/device--8PbFL3K.js","assets/inverter-BESdF3o1.js","assets/inverter_maxstorage-C0MYf9Zn.js","assets/device-BP1KJA6p.js","assets/bat-B0mwwShj.js","assets/counter-yTYJ7q_m.js","assets/device-DjnKnvxd.js","assets/inverter-fs5ob91Q.js","assets/bat-vDm95eeV.js","assets/counter-XNGLm26m.js","assets/counter_consumption-C7_zNodH.js","assets/device-BQKDm_yK.js","assets/bat-B8UvHJXX.js","assets/device-DMnSEPnd.js","assets/inverter-BDS1q9FY.js","assets/device-CePtNibg.js","assets/device-1rlXvG7o.js","assets/device-ap_aIxcd.js","assets/device-CZWl8ObD.js","assets/device-CB23bxqx.js","assets/device-DDCqw8SU.js","assets/device-Wiugpl0X.js","assets/counter-DXYr2-BR.js","assets/device-oF88OjWr.js","assets/counter-BKLEOBVh.js","assets/device-RdsB0ti4.js","assets/device-S7xoJYQU.js","assets/device-D0qPaH_i.js","assets/inverter-ByAQHSYq.js","assets/bat-LNwmKEXJ.js","assets/counter-DetJvNzo.js","assets/device-DyNIhzeY.js","assets/inverter-DM70X-Bj.js","assets/device-0R3TseqV.js","assets/counter-DsYC7F_g.js","assets/device-DKtpZs7X.js","assets/inverter-DegAEuIC.js","assets/device-hKSMI4zZ.js","assets/inverter-BrPPorIx.js","assets/bat-Bf2-CBXC.js","assets/counter-C25scRMR.js","assets/device-CHU8Jgeh.js","assets/inverter-BGBpQiIJ.js"])))=>i.map(i=>d[i]); -import{F as $,l as N,d as H,y as K,av as G,al as F,a4 as J,a3 as Y,a2 as Z}from"./vendor-fortawesome-DplTMxoa.js";import{_ as e,C as Q}from"./index-Bv2WLdLZ.js";import{_ as z}from"./dynamic-import-helper-BheWnx7M.js";import{_ as P,m as p,l as a,f as V,z as g,u as r,B as s,J as I,q as v,y as l,a7 as C,P as X,x as R,K as L,L as k,D as ee,O as B}from"./vendor-BwGffBs-.js";import{D as j}from"./DeviceConfigMixin-D2g2-xc_.js";const oe={name:"DeviceFallback",mixins:[j]},te={class:"device-fallback"},_e={key:1};function re(t,o,i,m,u,_){const c=p("openwb-base-alert"),T=p("openwb-base-textarea");return a(),V("div",te,[Object.keys(t.device.configuration).length==0?(a(),g(c,{key:0,subtype:"info"},{default:r(()=>[s(' Der Gerät-Typ "'+I(t.device.type)+'" bietet keine Einstellungen. ',1)]),_:1})):(a(),V("div",_e,[v(c,{subtype:"warning"},{default:r(()=>[s(' Es wurde keine Konfigurationsseite für den Geräte-Typ "'+I(t.device.type)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),v(T,{title:"Konfiguration",subtype:"json","model-value":t.device.configuration,"onUpdate:modelValue":o[0]||(o[0]=D=>t.updateConfiguration(D,"configuration"))},{help:r(()=>[...o[1]||(o[1]=[s(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),v(c,{subtype:"info"},{default:r(()=>[l("pre",null,I(JSON.stringify(t.device.configuration,void 0,2)),1)]),_:1})]))])}const ie=P(oe,[["render",re],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/OpenwbDeviceConfigFallback.vue"]]),ne={mixins:[j],props:{component:{type:Object,required:!0}}},ue=P(ne,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/ComponentConfigMixin.vue"]]),de={name:"ComponentFallback",mixins:[ue]},ve={class:"component-fallback"},se={key:1};function ae(t,o,i,m,u,_){const c=p("openwb-base-alert"),T=p("openwb-base-textarea");return a(),V("div",ve,[Object.keys(t.component.configuration).length==0?(a(),g(c,{key:0,subtype:"info"},{default:r(()=>[s(' Der Komponenten-Typ "'+I(t.component.type)+'" bietet keine Einstellungen. ',1)]),_:1})):(a(),V("div",se,[v(c,{subtype:"warning"},{default:r(()=>[s(' Es wurde keine Konfigurationsseite für den Komponenten-Typ "'+I(t.component.type)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),v(T,{title:"Konfiguration",subtype:"json","model-value":t.component.configuration,"onUpdate:modelValue":o[0]||(o[0]=D=>t.updateConfiguration(D,"configuration"))},{help:r(()=>[...o[1]||(o[1]=[s(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),v(c,{subtype:"info"},{default:r(()=>[l("pre",null,I(JSON.stringify(t.component.configuration,void 0,2)),1)]),_:1})]))])}const me=P(de,[["render",ae],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/OpenwbComponentConfigFallback.vue"]]),pe={name:"OpenwbConfigProxy",props:{device:{type:Object,required:!0},component:{type:Object,required:!1,default:void 0}},emits:["update:configuration"],methods:{getComponent(){return console.debug(`loading component: ${this.device?.type} / ${this.component?.type}`),this.component!==void 0?C({loader:()=>z(Object.assign({"./algodue/algodue/device.vue":()=>e(()=>import("./device-DHB2lzzG.js"),__vite__mapDeps([0,1,2,3])),"./alpha_ess/alpha_ess/bat.vue":()=>e(()=>import("./bat-Dwir2dXd.js"),__vite__mapDeps([4,2,3,5,6,7,8,9,10,11,12,1])),"./alpha_ess/alpha_ess/device.vue":()=>e(()=>import("./device-Bmiwd3r6.js"),__vite__mapDeps([13,1,2,3])),"./ampere/ampere/device.vue":()=>e(()=>import("./device-Chn2mfBF.js"),__vite__mapDeps([14,1,2,3])),"./anker/smartmeter_gen2/device.vue":()=>e(()=>import("./device-Du5x1ttW.js"),__vite__mapDeps([15,1,2,3])),"./anker/solarbank/device.vue":()=>e(()=>import("./device-DCCgNY-n.js"),__vite__mapDeps([16,1,2,3])),"./avm/avm/counter.vue":()=>e(()=>import("./counter-BNlBJ9zK.js"),__vite__mapDeps([17,2,3,5,6,7,8,9,10,11,12,1])),"./avm/avm/device.vue":()=>e(()=>import("./device-C-VdYO_S.js"),__vite__mapDeps([18,1,2,3])),"./azzurro_zcs/azzurro_zcs/device.vue":()=>e(()=>import("./device-CUsU7GEo.js"),__vite__mapDeps([19,1,2,3])),"./azzurro_zcs/azzurro_zcs_3p/device.vue":()=>e(()=>import("./device-qM6Ow-QZ.js"),__vite__mapDeps([20,1,2,3])),"./batterx/batterx/bat.vue":()=>e(()=>import("./bat-CsHZRmZS.js"),__vite__mapDeps([21,2,3,5,6,7,8,9,10,11,12,1])),"./batterx/batterx/device.vue":()=>e(()=>import("./device-D0NVBx3_.js"),__vite__mapDeps([22,1,2,3])),"./benning/benning/device.vue":()=>e(()=>import("./device-CyemJxTG.js"),__vite__mapDeps([23,1,2,3])),"./benning/benning/inverter.vue":()=>e(()=>import("./inverter-CIAtxhWQ.js"),__vite__mapDeps([24,2,3,5,6,7,8,9,10,11,12,1])),"./byd/byd/device.vue":()=>e(()=>import("./device-CWvuKt9H.js"),__vite__mapDeps([25,1,2,3])),"./carlo_gavazzi/carlo_gavazzi/counter.vue":()=>e(()=>import("./counter-Bffry-ig.js"),__vite__mapDeps([26,2,3,5,6,7,8,9,10,11,12,1])),"./carlo_gavazzi/carlo_gavazzi/device.vue":()=>e(()=>import("./device-Hl-FIG_-.js"),__vite__mapDeps([27,1,2,3])),"./chint/chint/counter.vue":()=>e(()=>import("./counter-D-cbHK0b.js"),__vite__mapDeps([28,2,3,5,6,7,8,9,10,11,12,1])),"./chint/chint/device.vue":()=>e(()=>import("./device-CwrJywgw.js"),__vite__mapDeps([29,1,2,3])),"./deye/deye/bat.vue":()=>e(()=>import("./bat-BmvkzpLQ.js"),__vite__mapDeps([30,2,3,5,6,7,8,9,10,11,12,1])),"./deye/deye/counter.vue":()=>e(()=>import("./counter-CZBG0Hhq.js"),__vite__mapDeps([31,2,3,5,6,7,8,9,10,11,12,1])),"./deye/deye/device.vue":()=>e(()=>import("./device-BfuV33Ny.js"),__vite__mapDeps([32,1,2,3])),"./deye/deye/inverter.vue":()=>e(()=>import("./inverter-B_yh5lUv.js"),__vite__mapDeps([33,2,3,5,6,7,8,9,10,11,12,1])),"./deye/deye_solarman/device.vue":()=>e(()=>import("./device-CME_IE2O.js"),__vite__mapDeps([34,1,2,3])),"./discovergy/discovergy/counter.vue":()=>e(()=>import("./counter-fZ9ta8Io.js"),__vite__mapDeps([35,2,3,5,6,7,8,9,10,11,12,1])),"./discovergy/discovergy/device.vue":()=>e(()=>import("./device-B2ATC70N.js"),__vite__mapDeps([36,1,2,3])),"./discovergy/discovergy/inverter.vue":()=>e(()=>import("./inverter-gZKhptDj.js"),__vite__mapDeps([37,2,3,5,6,7,8,9,10,11,12,1])),"./e3dc/e3dc/device.vue":()=>e(()=>import("./device-Drtgd5P3.js"),__vite__mapDeps([38,1,2,3])),"./ecoflow/stream/device.vue":()=>e(()=>import("./device-CnnZ5HDz.js"),__vite__mapDeps([39,1,2,3])),"./elgris/elgris/device.vue":()=>e(()=>import("./device-D93KyX8z.js"),__vite__mapDeps([40,1,2,3])),"./enecess/ecomain/counter.vue":()=>e(()=>import("./counter-G6bJTNfM.js"),__vite__mapDeps([41,2,3,5,6,7,8,9,10,11,12,1])),"./enecess/ecomain/device.vue":()=>e(()=>import("./device-C7upWp-n.js"),__vite__mapDeps([42,1,2,3])),"./enecess/ecomain/inverter.vue":()=>e(()=>import("./inverter-xEKKUyk6.js"),__vite__mapDeps([43,2,3,5,6,7,8,9,10,11,12,1])),"./enphase/enphase/counter.vue":()=>e(()=>import("./counter-CFsHa4Fy.js"),__vite__mapDeps([44,2,3,5,6,7,8,9,10,11,12,1])),"./enphase/enphase/device.vue":()=>e(()=>import("./device-BeTvjVsI.js"),__vite__mapDeps([45,1,2,3])),"./enphase/enphase/inverter.vue":()=>e(()=>import("./inverter-EScnj--j.js"),__vite__mapDeps([46,2,3,5,6,7,8,9,10,11,12,1])),"./fems/fems/bat.vue":()=>e(()=>import("./bat-B3F6eBBb.js"),__vite__mapDeps([47,2,3,5,6,7,8,9,10,11,12,1])),"./fems/fems/device.vue":()=>e(()=>import("./device-LwKhWIDy.js"),__vite__mapDeps([48,1,2,3])),"./fox_ess/fox_ess/bat.vue":()=>e(()=>import("./bat-BaMLfbPd.js"),__vite__mapDeps([49,2,3,5,6,7,8,9,10,11,12,1])),"./fox_ess/fox_ess/counter.vue":()=>e(()=>import("./counter-DdeaIS5X.js"),__vite__mapDeps([50,2,3,5,6,7,8,9,10,11,12,1])),"./fox_ess/fox_ess/device.vue":()=>e(()=>import("./device-CX9F2w1R.js"),__vite__mapDeps([51,1,2,3])),"./fox_ess/fox_ess/inverter.vue":()=>e(()=>import("./inverter-BvFrtgVp.js"),__vite__mapDeps([52,2,3,5,6,7,8,9,10,11,12,1])),"./fox_ess/fox_ess_h3_smart/bat.vue":()=>e(()=>import("./bat-DRoLlz4z.js"),__vite__mapDeps([53,2,3,5,6,7,8,9,10,11,12,1])),"./fox_ess/fox_ess_h3_smart/counter.vue":()=>e(()=>import("./counter-B1e8yvdL.js"),__vite__mapDeps([54,2,3,5,6,7,8,9,10,11,12,1])),"./fox_ess/fox_ess_h3_smart/device.vue":()=>e(()=>import("./device-DFeFqcPa.js"),__vite__mapDeps([55,1,2,3])),"./fox_ess/fox_ess_h3_smart/inverter.vue":()=>e(()=>import("./inverter-4q1c4sTB.js"),__vite__mapDeps([56,2,3,5,6,7,8,9,10,11,12,1])),"./fronius/fronius_http_api/bat.vue":()=>e(()=>import("./bat-Bsznake9.js"),__vite__mapDeps([57,2,3,5,6,7,8,9,10,11,12,1])),"./fronius/fronius_http_api/counter.vue":()=>e(()=>import("./counter-Ligq6oN9.js"),__vite__mapDeps([58,2,3,5,6,7,8,9,10,11,12,1])),"./fronius/fronius_http_api/device.vue":()=>e(()=>import("./device-CpVp0tJY.js"),__vite__mapDeps([59,1,2,3])),"./fronius/fronius_http_api/inverter.vue":()=>e(()=>import("./inverter-Ddz53W4s.js"),__vite__mapDeps([60,2,3,5,6,7,8,9,10,11,12,1])),"./fronius/fronius_http_api/inverter_production_meter.vue":()=>e(()=>import("./inverter_production_meter-BiC0A6Jg.js"),__vite__mapDeps([61,2,3,5,6,7,8,9,10,11,12,1])),"./fronius/fronius_sunspec/bat.vue":()=>e(()=>import("./bat-DmrMWSnP.js"),__vite__mapDeps([62,2,3,5,6,7,8,9,10,11,12,1])),"./fronius/fronius_sunspec/device.vue":()=>e(()=>import("./device-h744ldQG.js"),__vite__mapDeps([63,1,2,3])),"./fronius/fronius_sunspec/inverter.vue":()=>e(()=>import("./inverter-DDR03ckG.js"),__vite__mapDeps([64,2,3,5,6,7,8,9,10,11,12,1])),"./generic/http/bat.vue":()=>e(()=>import("./bat-BQPcRXSE.js"),__vite__mapDeps([65,2,3,5,6,7,8,9,10,11,12,1])),"./generic/http/counter.vue":()=>e(()=>import("./counter-BMhK4CiH.js"),__vite__mapDeps([66,2,3,5,6,7,8,9,10,11,12,1])),"./generic/http/device.vue":()=>e(()=>import("./device-DxS-IR5M.js"),__vite__mapDeps([67,1,2,3])),"./generic/http/inverter.vue":()=>e(()=>import("./inverter-D3RnIGNF.js"),__vite__mapDeps([68,2,3,5,6,7,8,9,10,11,12,1])),"./generic/json/bat.vue":()=>e(()=>import("./bat-BlXDiKVw.js"),__vite__mapDeps([69,2,3,5,6,7,8,9,10,11,12,1])),"./generic/json/counter.vue":()=>e(()=>import("./counter-CqlF4eMW.js"),__vite__mapDeps([70,2,3,5,6,7,8,9,10,11,12,1])),"./generic/json/device.vue":()=>e(()=>import("./device-BjmcAYaW.js"),__vite__mapDeps([71,1,2,3])),"./generic/json/inverter.vue":()=>e(()=>import("./inverter-BhwdqJVC.js"),__vite__mapDeps([72,2,3,5,6,7,8,9,10,11,12,1])),"./generic/modbus/ModbusRegisterFields.vue":()=>e(()=>import("./ModbusRegisterFields-CkQ0333X.js"),__vite__mapDeps([73,2,3])),"./generic/modbus/bat.vue":()=>e(()=>import("./bat-BXbHurWM.js"),__vite__mapDeps([74,73,2,3,5,6,7,8,9,10,11,12,1,75])),"./generic/modbus/counter.vue":()=>e(()=>import("./counter-DC6kT4Ul.js"),__vite__mapDeps([76,73,2,3,5,6,7,8,9,10,11,12,1,77])),"./generic/modbus/device.vue":()=>e(()=>import("./device-D7XDJsSX.js"),__vite__mapDeps([78,1,2,3])),"./generic/modbus/inverter.vue":()=>e(()=>import("./inverter-Dq1iPHd6.js"),__vite__mapDeps([79,73,2,3,5,6,7,8,9,10,11,12,1,80])),"./generic/mqtt/bat.vue":()=>e(()=>import("./bat-BMu23u_H.js"),__vite__mapDeps([81,2,3,5,6,7,8,9,10,11,12,1])),"./generic/mqtt/counter.vue":()=>e(()=>import("./counter-CRumFQ-3.js"),__vite__mapDeps([82,2,3,5,6,7,8,9,10,11,12,1])),"./generic/mqtt/device.vue":()=>e(()=>import("./device-B7mQquwz.js"),__vite__mapDeps([83,1,2,3])),"./generic/mqtt/inverter.vue":()=>e(()=>import("./inverter-fPQd3WC-.js"),__vite__mapDeps([84,2,3,5,6,7,8,9,10,11,12,1])),"./generic/virtual/counter.vue":()=>e(()=>import("./counter-CBEHJvDz.js"),__vite__mapDeps([85,2,3,5,6,7,8,9,10,11,12,1])),"./good_we/good_we/bat.vue":()=>e(()=>import("./bat-CjnsdiuU.js"),__vite__mapDeps([86,2,3,5,6,7,8,9,10,11,12,1])),"./good_we/good_we/device.vue":()=>e(()=>import("./device-D-HB7yYz.js"),__vite__mapDeps([87,1,2,3])),"./growatt/growatt/device.vue":()=>e(()=>import("./device-BjH2i3dR.js"),__vite__mapDeps([88,1,2,3])),"./huawei/huawei/device.vue":()=>e(()=>import("./device-By62nPmK.js"),__vite__mapDeps([89,1,2,3])),"./huawei/huawei_emma/device.vue":()=>e(()=>import("./device-BMh4AbeD.js"),__vite__mapDeps([90,1,2,3])),"./huawei/huawei_smartlogger/bat.vue":()=>e(()=>import("./bat-DTs1HGE0.js"),__vite__mapDeps([91,2,3,5,6,7,8,9,10,11,12,1])),"./huawei/huawei_smartlogger/counter.vue":()=>e(()=>import("./counter-DbgfMXYW.js"),__vite__mapDeps([92,2,3,5,6,7,8,9,10,11,12,1])),"./huawei/huawei_smartlogger/device.vue":()=>e(()=>import("./device-D7FS6Gp8.js"),__vite__mapDeps([93,1,2,3])),"./huawei/huawei_smartlogger/inverter.vue":()=>e(()=>import("./inverter-nGKS2t5a.js"),__vite__mapDeps([94,2,3,5,6,7,8,9,10,11,12,1])),"./idm/idm/device.vue":()=>e(()=>import("./device-DVfJuzkE.js"),__vite__mapDeps([95,1,2,3])),"./janitza/janitza/counter.vue":()=>e(()=>import("./counter-D7_VEfYR.js"),__vite__mapDeps([96,2,3,5,6,7,8,9,10,11,12,1])),"./janitza/janitza/device.vue":()=>e(()=>import("./device-CzW27uID.js"),__vite__mapDeps([97,1,2,3])),"./kaco/kaco_nh/bat.vue":()=>e(()=>import("./bat-CiEmt-O4.js"),__vite__mapDeps([98,2,3,5,6,7,8,9,10,11,12,1])),"./kaco/kaco_nh/counter.vue":()=>e(()=>import("./counter-0w4sDDga.js"),__vite__mapDeps([99,2,3,5,6,7,8,9,10,11,12,1])),"./kaco/kaco_nh/device.vue":()=>e(()=>import("./device-CaZSyW6k.js"),__vite__mapDeps([100,1,2,3])),"./kaco/kaco_nh/inverter.vue":()=>e(()=>import("./inverter-DY7Mgnuo.js"),__vite__mapDeps([101,2,3,5,6,7,8,9,10,11,12,1])),"./kaco/kaco_tx/device.vue":()=>e(()=>import("./device-BKrVP95F.js"),__vite__mapDeps([102,1,2,3])),"./kaco/kaco_tx/inverter.vue":()=>e(()=>import("./inverter-CQxRN57y.js"),__vite__mapDeps([103,2,3,5,6,7,8,9,10,11,12,1])),"./kostal/kostal_piko/counter.vue":()=>e(()=>import("./counter-Dw5I5Fam.js"),__vite__mapDeps([104,105,2,3,5,6,7,8,9,10,11,12,1])),"./kostal/kostal_piko/device.vue":()=>e(()=>import("./device-BnxKSgH8.js"),__vite__mapDeps([106,1,2,3])),"./kostal/kostal_piko/inverter.vue":()=>e(()=>import("./inverter-DRqfc3BL.js"),__vite__mapDeps([107,2,3,5,6,7,8,9,10,11,12,1])),"./kostal/kostal_piko_ci/counter.vue":()=>e(()=>import("./counter-D1L78n2b.js"),__vite__mapDeps([108,2,3,5,6,7,8,9,10,11,12,1])),"./kostal/kostal_piko_ci/device.vue":()=>e(()=>import("./device-DLmN6zPE.js"),__vite__mapDeps([109,1,2,3])),"./kostal/kostal_piko_ci/inverter.vue":()=>e(()=>import("./inverter-CLVuKxRd.js"),__vite__mapDeps([110,2,3,5,6,7,8,9,10,11,12,1])),"./kostal/kostal_piko_old/device.vue":()=>e(()=>import("./device-Di9i_dA8.js"),__vite__mapDeps([111,1,2,3])),"./kostal/kostal_plenticore/bat.vue":()=>e(()=>import("./bat-BUTQpQgo.js"),__vite__mapDeps([112,2,3,5,6,7,8,9,10,11,12,1])),"./kostal/kostal_plenticore/counter.vue":()=>e(()=>import("./counter-BJsQi-Il.js"),__vite__mapDeps([113,105,2,3,5,6,7,8,9,10,11,12,1])),"./kostal/kostal_plenticore/device.vue":()=>e(()=>import("./device-C0xDk0ts.js"),__vite__mapDeps([114,1,2,3])),"./kostal/kostal_sem/counter.vue":()=>e(()=>import("./counter-D6d42tEa.js"),__vite__mapDeps([115,2,3,5,6,7,8,9,10,11,12,1])),"./kostal/kostal_sem/device.vue":()=>e(()=>import("./device-BSXhrs1Z.js"),__vite__mapDeps([116,1,2,3])),"./kostal/kostal_steca/device.vue":()=>e(()=>import("./device-Bx-PcB2n.js"),__vite__mapDeps([117,1,2,3])),"./kostal/kostal_steca/inverter.vue":()=>e(()=>import("./inverter-C52-BkWD.js"),__vite__mapDeps([118,2,3,5,6,7,8,9,10,11,12,1])),"./lg/lg/device.vue":()=>e(()=>import("./device-CdePIfdb.js"),__vite__mapDeps([119,1,2,3])),"./marstek/venus_c_e/bat.vue":()=>e(()=>import("./bat-B688j4YE.js"),__vite__mapDeps([120,2,3,5,6,7,8,9,10,11,12,1])),"./marstek/venus_c_e/device.vue":()=>e(()=>import("./device-BnxT8JJ2.js"),__vite__mapDeps([121,1,2,3])),"./mtec/mtec/bat.vue":()=>e(()=>import("./bat-CtbgR4DM.js"),__vite__mapDeps([122,2,3,5,6,7,8,9,10,11,12,1])),"./mtec/mtec/counter.vue":()=>e(()=>import("./counter-XQ79_Md3.js"),__vite__mapDeps([123,2,3,5,6,7,8,9,10,11,12,1])),"./mtec/mtec/device.vue":()=>e(()=>import("./device-DA58b9nm.js"),__vite__mapDeps([124,1,2,3])),"./mtec/mtec/inverter.vue":()=>e(()=>import("./inverter-g3CWikff.js"),__vite__mapDeps([125,2,3,5,6,7,8,9,10,11,12,1])),"./mystrom/mystrom/device.vue":()=>e(()=>import("./device-Bh86b_Z3.js"),__vite__mapDeps([126,1,2,3])),"./nibe/nibe/counter.vue":()=>e(()=>import("./counter-BW0CYAOL.js"),__vite__mapDeps([127,2,3,5,6,7,8,9,10,11,12,1])),"./nibe/nibe/device.vue":()=>e(()=>import("./device-DdtU9l__.js"),__vite__mapDeps([128,1,2,3])),"./opendtu/opendtu/device.vue":()=>e(()=>import("./device-DQB3GNdG.js"),__vite__mapDeps([129,1,2,3])),"./opendtu/opendtu/inverter.vue":()=>e(()=>import("./inverter-cbej_kAy.js"),__vite__mapDeps([130,2,3,5,6,7,8,9,10,11,12,1])),"./openwb/openwb_bat_kit/bat.vue":()=>e(()=>import("./bat-B8bl9-_1.js"),__vite__mapDeps([131,2,3,5,6,7,8,9,10,11,12,1])),"./openwb/openwb_evu_kit/bat.vue":()=>e(()=>import("./bat-DKm_TOA8.js"),__vite__mapDeps([132,2,3,5,6,7,8,9,10,11,12,1])),"./openwb/openwb_evu_kit/counter.vue":()=>e(()=>import("./counter-DcjDrUJp.js"),__vite__mapDeps([133,2,3,5,6,7,8,9,10,11,12,1])),"./openwb/openwb_evu_kit/inverter.vue":()=>e(()=>import("./inverter-C2Y5Ecgw.js"),__vite__mapDeps([134,2,3,5,6,7,8,9,10,11,12,1])),"./openwb/openwb_flex/bat.vue":()=>e(()=>import("./bat-CHbcjVCv.js"),__vite__mapDeps([135,2,3,5,6,7,8,9,10,11,12,1])),"./openwb/openwb_flex/consumption_counter.vue":()=>e(()=>import("./consumption_counter-BXmDaQsP.js"),__vite__mapDeps([136,2,3,5,6,7,8,9,10,11,12,1])),"./openwb/openwb_flex/counter.vue":()=>e(()=>import("./counter-aE7ZGMoA.js"),__vite__mapDeps([137,2,3,5,6,7,8,9,10,11,12,1])),"./openwb/openwb_flex/device.vue":()=>e(()=>import("./device-De_utEj4.js"),__vite__mapDeps([138,1,2,3])),"./openwb/openwb_flex/inverter.vue":()=>e(()=>import("./inverter-y4sIEMSG.js"),__vite__mapDeps([139,2,3,5,6,7,8,9,10,11,12,1])),"./openwb/openwb_flex_local/consumption_counter.vue":()=>e(()=>import("./consumption_counter-57_J2Spi.js"),__vite__mapDeps([140,2,3,5,6,7,8,9,10,11,12,1])),"./openwb/openwb_flex_local/device.vue":()=>e(()=>import("./device-DBtCkhyu.js"),__vite__mapDeps([141,1,2,3])),"./openwb/openwb_pv_kit/inverter.vue":()=>e(()=>import("./inverter-C6WRP55i.js"),__vite__mapDeps([142,2,3,5,6,7,8,9,10,11,12,1])),"./orno/orno/counter.vue":()=>e(()=>import("./counter-DUeWFs_r.js"),__vite__mapDeps([143,2,3,5,6,7,8,9,10,11,12,1])),"./orno/orno/device.vue":()=>e(()=>import("./device-DVMfFy_D.js"),__vite__mapDeps([144,1,2,3])),"./powerdog/powerdog/counter.vue":()=>e(()=>import("./counter-CBqU5HUT.js"),__vite__mapDeps([145,2,3,5,6,7,8,9,10,11,12,1])),"./powerdog/powerdog/device.vue":()=>e(()=>import("./device-9hZ9C-_o.js"),__vite__mapDeps([146,1,2,3])),"./powerfox/powerfox/counter.vue":()=>e(()=>import("./counter-DaLkrygO.js"),__vite__mapDeps([147,2,3,5,6,7,8,9,10,11,12,1])),"./powerfox/powerfox/device.vue":()=>e(()=>import("./device-BtMlWIlE.js"),__vite__mapDeps([148,1,2,3])),"./powerfox/powerfox/inverter.vue":()=>e(()=>import("./inverter-ClHZ9qff.js"),__vite__mapDeps([149,2,3,5,6,7,8,9,10,11,12,1])),"./qcells/qcells/bat.vue":()=>e(()=>import("./bat-BTFg5iPr.js"),__vite__mapDeps([150,2,3,5,6,7,8,9,10,11,12,1])),"./qcells/qcells/device.vue":()=>e(()=>import("./device-N4SVn9jC.js"),__vite__mapDeps([151,1,2,3])),"./rct/rct/device.vue":()=>e(()=>import("./device-GN_GKnJc.js"),__vite__mapDeps([152,1,2,3])),"./saxpower/saxpower/bat.vue":()=>e(()=>import("./bat-adFrQvT_.js"),__vite__mapDeps([153,2,3,5,6,7,8,9,10,11,12,1])),"./saxpower/saxpower/device.vue":()=>e(()=>import("./device-BtAcz1pD.js"),__vite__mapDeps([154,1,2,3])),"./shelly/shelly/counter.vue":()=>e(()=>import("./counter-Ctv3sDCh.js"),__vite__mapDeps([155,2,3,5,6,7,8,9,10,11,12,1])),"./shelly/shelly/device.vue":()=>e(()=>import("./device-D8Ube9qm.js"),__vite__mapDeps([156,1,2,3])),"./siemens/siemens/device.vue":()=>e(()=>import("./device-BW_zyWYf.js"),__vite__mapDeps([157,1,2,3])),"./siemens/siemens_sentron/device.vue":()=>e(()=>import("./device-Ct0EL_5c.js"),__vite__mapDeps([158,1,2,3])),"./sigenergy/sigenergy/bat.vue":()=>e(()=>import("./bat-C9j23L0a.js"),__vite__mapDeps([159,2,3,5,6,7,8,9,10,11,12,1])),"./sigenergy/sigenergy/counter.vue":()=>e(()=>import("./counter-DXPbMEv9.js"),__vite__mapDeps([160,2,3,5,6,7,8,9,10,11,12,1])),"./sigenergy/sigenergy/device.vue":()=>e(()=>import("./device-BObe7-fT.js"),__vite__mapDeps([161,1,2,3])),"./sigenergy/sigenergy/inverter.vue":()=>e(()=>import("./inverter-DXGg9_NH.js"),__vite__mapDeps([162,2,3,5,6,7,8,9,10,11,12,1])),"./sma/sma_shm/counter.vue":()=>e(()=>import("./counter-BxgIp61P.js"),__vite__mapDeps([163,2,3,5,6,7,8,9,10,11,12,1])),"./sma/sma_shm/inverter.vue":()=>e(()=>import("./inverter-BoZH5Xyl.js"),__vite__mapDeps([164,2,3,5,6,7,8,9,10,11,12,1])),"./sma/sma_sunny_boy/bat.vue":()=>e(()=>import("./bat-CaD2e0g2.js"),__vite__mapDeps([165,2,3,5,6,7,8,9,10,11,12,1])),"./sma/sma_sunny_boy/counter.vue":()=>e(()=>import("./counter-B1X1Lm0y.js"),__vite__mapDeps([166,2,3,5,6,7,8,9,10,11,12,1])),"./sma/sma_sunny_boy/device.vue":()=>e(()=>import("./device-Cae8kKJA.js"),__vite__mapDeps([167,1,2,3])),"./sma/sma_sunny_boy/inverter.vue":()=>e(()=>import("./inverter-DwjEHaq5.js"),__vite__mapDeps([168,2,3,5,6,7,8,9,10,11,12,1])),"./sma/sma_sunny_island/bat.vue":()=>e(()=>import("./bat-iYEGDCT9.js"),__vite__mapDeps([169,2,3,5,6,7,8,9,10,11,12,1])),"./sma/sma_sunny_island/device.vue":()=>e(()=>import("./device-Bm5lJk-e.js"),__vite__mapDeps([170,1,2,3])),"./sma/sma_webbox/device.vue":()=>e(()=>import("./device-YYGO4kNw.js"),__vite__mapDeps([171,1,2,3])),"./smart_me/smart_me/counter.vue":()=>e(()=>import("./counter-GFOwVgsi.js"),__vite__mapDeps([172,2,3,5,6,7,8,9,10,11,12,1])),"./smart_me/smart_me/device.vue":()=>e(()=>import("./device-Dnz-lfZw.js"),__vite__mapDeps([173,1,2,3])),"./smart_me/smart_me/inverter.vue":()=>e(()=>import("./inverter-DzTd3kss.js"),__vite__mapDeps([174,2,3,5,6,7,8,9,10,11,12,1])),"./smartfox/smartfox/device.vue":()=>e(()=>import("./device-o4cJfonB.js"),__vite__mapDeps([175,1,2,3])),"./sofar/sofar/device.vue":()=>e(()=>import("./device-CBzzuPPX.js"),__vite__mapDeps([176,1,2,3])),"./solakon/solakon_one/bat.vue":()=>e(()=>import("./bat-f-Hw2SHa.js"),__vite__mapDeps([177,2,3,5,6,7,8,9,10,11,12,1])),"./solakon/solakon_one/device.vue":()=>e(()=>import("./device-Du21jRtu.js"),__vite__mapDeps([178,1,2,3])),"./solakon/solakon_one/inverter.vue":()=>e(()=>import("./inverter-wt0jUIdX.js"),__vite__mapDeps([179,2,3,5,6,7,8,9,10,11,12,1])),"./solar_log/solar_log/counter.vue":()=>e(()=>import("./counter-CSCRL4Aa.js"),__vite__mapDeps([180,105,2,3,5,6,7,8,9,10,11,12,1])),"./solar_log/solar_log/device.vue":()=>e(()=>import("./device-DmTp-4Q0.js"),__vite__mapDeps([181,1,2,3])),"./solar_view/solar_view/device.vue":()=>e(()=>import("./device-D97fwZ97.js"),__vite__mapDeps([182,1,2,3])),"./solar_view/solar_view/inverter.vue":()=>e(()=>import("./inverter-Ci5gD6Ti.js"),__vite__mapDeps([183,2,3,5,6,7,8,9,10,11,12,1])),"./solar_watt/solar_watt/device.vue":()=>e(()=>import("./device-D_Qh4d0E.js"),__vite__mapDeps([184,1,2,3])),"./solar_world/solar_world/device.vue":()=>e(()=>import("./device-B2BXKGVF.js"),__vite__mapDeps([185,1,2,3])),"./solaredge/solaredge/bat.vue":()=>e(()=>import("./bat-DX4_xsov.js"),__vite__mapDeps([186,2,3,5,6,7,8,9,10,11,12,1])),"./solaredge/solaredge/counter.vue":()=>e(()=>import("./counter-BNOp0ehB.js"),__vite__mapDeps([187,2,3,5,6,7,8,9,10,11,12,1])),"./solaredge/solaredge/device.vue":()=>e(()=>import("./device-CFv91Hst.js"),__vite__mapDeps([188,1,2,3])),"./solaredge/solaredge/external_inverter.vue":()=>e(()=>import("./external_inverter-DXVST4jn.js"),__vite__mapDeps([189,2,3,5,6,7,8,9,10,11,12,1])),"./solaredge/solaredge/inverter.vue":()=>e(()=>import("./inverter-ldOqf1dz.js"),__vite__mapDeps([190,2,3,5,6,7,8,9,10,11,12,1])),"./solarmax/solarmax/bat.vue":()=>e(()=>import("./bat-DR1ovJbK.js"),__vite__mapDeps([191,2,3,5,6,7,8,9,10,11,12,1])),"./solarmax/solarmax/counter_maxstorage.vue":()=>e(()=>import("./counter_maxstorage-B2T64hs1.js"),__vite__mapDeps([192,2,3,5,6,7,8,9,10,11,12,1])),"./solarmax/solarmax/device.vue":()=>e(()=>import("./device--8PbFL3K.js"),__vite__mapDeps([193,1,2,3])),"./solarmax/solarmax/inverter.vue":()=>e(()=>import("./inverter-BESdF3o1.js"),__vite__mapDeps([194,2,3,5,6,7,8,9,10,11,12,1])),"./solarmax/solarmax/inverter_maxstorage.vue":()=>e(()=>import("./inverter_maxstorage-C0MYf9Zn.js"),__vite__mapDeps([195,2,3,5,6,7,8,9,10,11,12,1])),"./solax/solax/device.vue":()=>e(()=>import("./device-BP1KJA6p.js"),__vite__mapDeps([196,1,2,3])),"./solis/solis/bat.vue":()=>e(()=>import("./bat-B0mwwShj.js"),__vite__mapDeps([197,2,3,5,6,7,8,9,10,11,12,1])),"./solis/solis/counter.vue":()=>e(()=>import("./counter-yTYJ7q_m.js"),__vite__mapDeps([198,2,3,5,6,7,8,9,10,11,12,1])),"./solis/solis/device.vue":()=>e(()=>import("./device-DjnKnvxd.js"),__vite__mapDeps([199,1,2,3])),"./solis/solis/inverter.vue":()=>e(()=>import("./inverter-fs5ob91Q.js"),__vite__mapDeps([200,2,3,5,6,7,8,9,10,11,12,1])),"./sonnen/sonnenbatterie/bat.vue":()=>e(()=>import("./bat-vDm95eeV.js"),__vite__mapDeps([201,2,3,5,6,7,8,9,10,11,12,1])),"./sonnen/sonnenbatterie/counter.vue":()=>e(()=>import("./counter-XNGLm26m.js"),__vite__mapDeps([202,2,3,5,6,7,8,9,10,11,12,1])),"./sonnen/sonnenbatterie/counter_consumption.vue":()=>e(()=>import("./counter_consumption-C7_zNodH.js"),__vite__mapDeps([203,2,3,5,6,7,8,9,10,11,12,1])),"./sonnen/sonnenbatterie/device.vue":()=>e(()=>import("./device-BQKDm_yK.js"),__vite__mapDeps([204,1,2,3])),"./studer/studer/bat.vue":()=>e(()=>import("./bat-B8UvHJXX.js"),__vite__mapDeps([205,2,3,5,6,7,8,9,10,11,12,1])),"./studer/studer/device.vue":()=>e(()=>import("./device-DMnSEPnd.js"),__vite__mapDeps([206,1,2,3])),"./studer/studer/inverter.vue":()=>e(()=>import("./inverter-BDS1q9FY.js"),__vite__mapDeps([207,2,3,5,6,7,8,9,10,11,12,1])),"./sunenergyxt/sunenergyxt/device.vue":()=>e(()=>import("./device-CePtNibg.js"),__vite__mapDeps([208,1,2,3])),"./sungrow/sungrow_ihm/device.vue":()=>e(()=>import("./device-1rlXvG7o.js"),__vite__mapDeps([209,1,2,3])),"./sungrow/sungrow_micro/device.vue":()=>e(()=>import("./device-ap_aIxcd.js"),__vite__mapDeps([210,1,2,3])),"./sungrow/sungrow_sg/device.vue":()=>e(()=>import("./device-CZWl8ObD.js"),__vite__mapDeps([211,1,2,3])),"./sungrow/sungrow_sh/device.vue":()=>e(()=>import("./device-CB23bxqx.js"),__vite__mapDeps([212,1,2,3])),"./sunways/sunways/device.vue":()=>e(()=>import("./device-DDCqw8SU.js"),__vite__mapDeps([213,1,2,3])),"./tasmota/tasmota/device.vue":()=>e(()=>import("./device-Wiugpl0X.js"),__vite__mapDeps([214,1,2,3])),"./tesla/tesla/counter.vue":()=>e(()=>import("./counter-DXYr2-BR.js"),__vite__mapDeps([215,2,3,5,6,7,8,9,10,11,12,1])),"./tesla/tesla/device.vue":()=>e(()=>import("./device-oF88OjWr.js"),__vite__mapDeps([216,1,2,3])),"./thermia/thermia/counter.vue":()=>e(()=>import("./counter-BKLEOBVh.js"),__vite__mapDeps([217,2,3,5,6,7,8,9,10,11,12,1])),"./thermia/thermia/device.vue":()=>e(()=>import("./device-RdsB0ti4.js"),__vite__mapDeps([218,1,2,3])),"./upower/upower/device.vue":()=>e(()=>import("./device-S7xoJYQU.js"),__vite__mapDeps([219,1,2,3])),"./varta/varta/device.vue":()=>e(()=>import("./device-D0qPaH_i.js"),__vite__mapDeps([220,1,2,3])),"./varta/varta/inverter.vue":()=>e(()=>import("./inverter-ByAQHSYq.js"),__vite__mapDeps([221,2,3,5,6,7,8,9,10,11,12,1])),"./victron/victron/bat.vue":()=>e(()=>import("./bat-LNwmKEXJ.js"),__vite__mapDeps([222,2,3,5,6,7,8,9,10,11,12,1])),"./victron/victron/counter.vue":()=>e(()=>import("./counter-DetJvNzo.js"),__vite__mapDeps([223,2,3,5,6,7,8,9,10,11,12,1])),"./victron/victron/device.vue":()=>e(()=>import("./device-DyNIhzeY.js"),__vite__mapDeps([224,1,2,3])),"./victron/victron/inverter.vue":()=>e(()=>import("./inverter-DM70X-Bj.js"),__vite__mapDeps([225,2,3,5,6,7,8,9,10,11,12,1])),"./victron/victron_3p75ct/device.vue":()=>e(()=>import("./device-0R3TseqV.js"),__vite__mapDeps([226,1,2,3])),"./vzlogger/vzlogger/counter.vue":()=>e(()=>import("./counter-DsYC7F_g.js"),__vite__mapDeps([227,2,3,5,6,7,8,9,10,11,12,1])),"./vzlogger/vzlogger/device.vue":()=>e(()=>import("./device-DKtpZs7X.js"),__vite__mapDeps([228,1,2,3])),"./vzlogger/vzlogger/inverter.vue":()=>e(()=>import("./inverter-DegAEuIC.js"),__vite__mapDeps([229,2,3,5,6,7,8,9,10,11,12,1])),"./youless/youless/device.vue":()=>e(()=>import("./device-hKSMI4zZ.js"),__vite__mapDeps([230,1,2,3])),"./youless/youless/inverter.vue":()=>e(()=>import("./inverter-BrPPorIx.js"),__vite__mapDeps([231,2,3,5,6,7,8,9,10,11,12,1])),"./zendure/zendure/bat.vue":()=>e(()=>import("./bat-Bf2-CBXC.js"),__vite__mapDeps([232,2,3,5,6,7,8,9,10,11,12,1])),"./zendure/zendure/counter.vue":()=>e(()=>import("./counter-C25scRMR.js"),__vite__mapDeps([233,2,3,5,6,7,8,9,10,11,12,1])),"./zendure/zendure/device.vue":()=>e(()=>import("./device-CHU8Jgeh.js"),__vite__mapDeps([234,1,2,3])),"./zendure/zendure/inverter.vue":()=>e(()=>import("./inverter-BGBpQiIJ.js"),__vite__mapDeps([235,2,3,5,6,7,8,9,10,11,12,1]))}),`./${this.device?.vendor}/${this.device?.type}/${this.component?.type}.vue`,4),errorComponent:me}):C({loader:()=>z(Object.assign({"./algodue/algodue/device.vue":()=>e(()=>import("./device-DHB2lzzG.js"),__vite__mapDeps([0,1,2,3])),"./alpha_ess/alpha_ess/device.vue":()=>e(()=>import("./device-Bmiwd3r6.js"),__vite__mapDeps([13,1,2,3])),"./ampere/ampere/device.vue":()=>e(()=>import("./device-Chn2mfBF.js"),__vite__mapDeps([14,1,2,3])),"./anker/smartmeter_gen2/device.vue":()=>e(()=>import("./device-Du5x1ttW.js"),__vite__mapDeps([15,1,2,3])),"./anker/solarbank/device.vue":()=>e(()=>import("./device-DCCgNY-n.js"),__vite__mapDeps([16,1,2,3])),"./avm/avm/device.vue":()=>e(()=>import("./device-C-VdYO_S.js"),__vite__mapDeps([18,1,2,3])),"./azzurro_zcs/azzurro_zcs/device.vue":()=>e(()=>import("./device-CUsU7GEo.js"),__vite__mapDeps([19,1,2,3])),"./azzurro_zcs/azzurro_zcs_3p/device.vue":()=>e(()=>import("./device-qM6Ow-QZ.js"),__vite__mapDeps([20,1,2,3])),"./batterx/batterx/device.vue":()=>e(()=>import("./device-D0NVBx3_.js"),__vite__mapDeps([22,1,2,3])),"./benning/benning/device.vue":()=>e(()=>import("./device-CyemJxTG.js"),__vite__mapDeps([23,1,2,3])),"./byd/byd/device.vue":()=>e(()=>import("./device-CWvuKt9H.js"),__vite__mapDeps([25,1,2,3])),"./carlo_gavazzi/carlo_gavazzi/device.vue":()=>e(()=>import("./device-Hl-FIG_-.js"),__vite__mapDeps([27,1,2,3])),"./chint/chint/device.vue":()=>e(()=>import("./device-CwrJywgw.js"),__vite__mapDeps([29,1,2,3])),"./deye/deye/device.vue":()=>e(()=>import("./device-BfuV33Ny.js"),__vite__mapDeps([32,1,2,3])),"./deye/deye_solarman/device.vue":()=>e(()=>import("./device-CME_IE2O.js"),__vite__mapDeps([34,1,2,3])),"./discovergy/discovergy/device.vue":()=>e(()=>import("./device-B2ATC70N.js"),__vite__mapDeps([36,1,2,3])),"./e3dc/e3dc/device.vue":()=>e(()=>import("./device-Drtgd5P3.js"),__vite__mapDeps([38,1,2,3])),"./ecoflow/stream/device.vue":()=>e(()=>import("./device-CnnZ5HDz.js"),__vite__mapDeps([39,1,2,3])),"./elgris/elgris/device.vue":()=>e(()=>import("./device-D93KyX8z.js"),__vite__mapDeps([40,1,2,3])),"./enecess/ecomain/device.vue":()=>e(()=>import("./device-C7upWp-n.js"),__vite__mapDeps([42,1,2,3])),"./enphase/enphase/device.vue":()=>e(()=>import("./device-BeTvjVsI.js"),__vite__mapDeps([45,1,2,3])),"./fems/fems/device.vue":()=>e(()=>import("./device-LwKhWIDy.js"),__vite__mapDeps([48,1,2,3])),"./fox_ess/fox_ess/device.vue":()=>e(()=>import("./device-CX9F2w1R.js"),__vite__mapDeps([51,1,2,3])),"./fox_ess/fox_ess_h3_smart/device.vue":()=>e(()=>import("./device-DFeFqcPa.js"),__vite__mapDeps([55,1,2,3])),"./fronius/fronius_http_api/device.vue":()=>e(()=>import("./device-CpVp0tJY.js"),__vite__mapDeps([59,1,2,3])),"./fronius/fronius_sunspec/device.vue":()=>e(()=>import("./device-h744ldQG.js"),__vite__mapDeps([63,1,2,3])),"./generic/http/device.vue":()=>e(()=>import("./device-DxS-IR5M.js"),__vite__mapDeps([67,1,2,3])),"./generic/json/device.vue":()=>e(()=>import("./device-BjmcAYaW.js"),__vite__mapDeps([71,1,2,3])),"./generic/modbus/device.vue":()=>e(()=>import("./device-D7XDJsSX.js"),__vite__mapDeps([78,1,2,3])),"./generic/mqtt/device.vue":()=>e(()=>import("./device-B7mQquwz.js"),__vite__mapDeps([83,1,2,3])),"./good_we/good_we/device.vue":()=>e(()=>import("./device-D-HB7yYz.js"),__vite__mapDeps([87,1,2,3])),"./growatt/growatt/device.vue":()=>e(()=>import("./device-BjH2i3dR.js"),__vite__mapDeps([88,1,2,3])),"./huawei/huawei/device.vue":()=>e(()=>import("./device-By62nPmK.js"),__vite__mapDeps([89,1,2,3])),"./huawei/huawei_emma/device.vue":()=>e(()=>import("./device-BMh4AbeD.js"),__vite__mapDeps([90,1,2,3])),"./huawei/huawei_smartlogger/device.vue":()=>e(()=>import("./device-D7FS6Gp8.js"),__vite__mapDeps([93,1,2,3])),"./idm/idm/device.vue":()=>e(()=>import("./device-DVfJuzkE.js"),__vite__mapDeps([95,1,2,3])),"./janitza/janitza/device.vue":()=>e(()=>import("./device-CzW27uID.js"),__vite__mapDeps([97,1,2,3])),"./kaco/kaco_nh/device.vue":()=>e(()=>import("./device-CaZSyW6k.js"),__vite__mapDeps([100,1,2,3])),"./kaco/kaco_tx/device.vue":()=>e(()=>import("./device-BKrVP95F.js"),__vite__mapDeps([102,1,2,3])),"./kostal/kostal_piko/device.vue":()=>e(()=>import("./device-BnxKSgH8.js"),__vite__mapDeps([106,1,2,3])),"./kostal/kostal_piko_ci/device.vue":()=>e(()=>import("./device-DLmN6zPE.js"),__vite__mapDeps([109,1,2,3])),"./kostal/kostal_piko_old/device.vue":()=>e(()=>import("./device-Di9i_dA8.js"),__vite__mapDeps([111,1,2,3])),"./kostal/kostal_plenticore/device.vue":()=>e(()=>import("./device-C0xDk0ts.js"),__vite__mapDeps([114,1,2,3])),"./kostal/kostal_sem/device.vue":()=>e(()=>import("./device-BSXhrs1Z.js"),__vite__mapDeps([116,1,2,3])),"./kostal/kostal_steca/device.vue":()=>e(()=>import("./device-Bx-PcB2n.js"),__vite__mapDeps([117,1,2,3])),"./lg/lg/device.vue":()=>e(()=>import("./device-CdePIfdb.js"),__vite__mapDeps([119,1,2,3])),"./marstek/venus_c_e/device.vue":()=>e(()=>import("./device-BnxT8JJ2.js"),__vite__mapDeps([121,1,2,3])),"./mtec/mtec/device.vue":()=>e(()=>import("./device-DA58b9nm.js"),__vite__mapDeps([124,1,2,3])),"./mystrom/mystrom/device.vue":()=>e(()=>import("./device-Bh86b_Z3.js"),__vite__mapDeps([126,1,2,3])),"./nibe/nibe/device.vue":()=>e(()=>import("./device-DdtU9l__.js"),__vite__mapDeps([128,1,2,3])),"./opendtu/opendtu/device.vue":()=>e(()=>import("./device-DQB3GNdG.js"),__vite__mapDeps([129,1,2,3])),"./openwb/openwb_flex/device.vue":()=>e(()=>import("./device-De_utEj4.js"),__vite__mapDeps([138,1,2,3])),"./openwb/openwb_flex_local/device.vue":()=>e(()=>import("./device-DBtCkhyu.js"),__vite__mapDeps([141,1,2,3])),"./orno/orno/device.vue":()=>e(()=>import("./device-DVMfFy_D.js"),__vite__mapDeps([144,1,2,3])),"./powerdog/powerdog/device.vue":()=>e(()=>import("./device-9hZ9C-_o.js"),__vite__mapDeps([146,1,2,3])),"./powerfox/powerfox/device.vue":()=>e(()=>import("./device-BtMlWIlE.js"),__vite__mapDeps([148,1,2,3])),"./qcells/qcells/device.vue":()=>e(()=>import("./device-N4SVn9jC.js"),__vite__mapDeps([151,1,2,3])),"./rct/rct/device.vue":()=>e(()=>import("./device-GN_GKnJc.js"),__vite__mapDeps([152,1,2,3])),"./saxpower/saxpower/device.vue":()=>e(()=>import("./device-BtAcz1pD.js"),__vite__mapDeps([154,1,2,3])),"./shelly/shelly/device.vue":()=>e(()=>import("./device-D8Ube9qm.js"),__vite__mapDeps([156,1,2,3])),"./siemens/siemens/device.vue":()=>e(()=>import("./device-BW_zyWYf.js"),__vite__mapDeps([157,1,2,3])),"./siemens/siemens_sentron/device.vue":()=>e(()=>import("./device-Ct0EL_5c.js"),__vite__mapDeps([158,1,2,3])),"./sigenergy/sigenergy/device.vue":()=>e(()=>import("./device-BObe7-fT.js"),__vite__mapDeps([161,1,2,3])),"./sma/sma_sunny_boy/device.vue":()=>e(()=>import("./device-Cae8kKJA.js"),__vite__mapDeps([167,1,2,3])),"./sma/sma_sunny_island/device.vue":()=>e(()=>import("./device-Bm5lJk-e.js"),__vite__mapDeps([170,1,2,3])),"./sma/sma_webbox/device.vue":()=>e(()=>import("./device-YYGO4kNw.js"),__vite__mapDeps([171,1,2,3])),"./smart_me/smart_me/device.vue":()=>e(()=>import("./device-Dnz-lfZw.js"),__vite__mapDeps([173,1,2,3])),"./smartfox/smartfox/device.vue":()=>e(()=>import("./device-o4cJfonB.js"),__vite__mapDeps([175,1,2,3])),"./sofar/sofar/device.vue":()=>e(()=>import("./device-CBzzuPPX.js"),__vite__mapDeps([176,1,2,3])),"./solakon/solakon_one/device.vue":()=>e(()=>import("./device-Du21jRtu.js"),__vite__mapDeps([178,1,2,3])),"./solar_log/solar_log/device.vue":()=>e(()=>import("./device-DmTp-4Q0.js"),__vite__mapDeps([181,1,2,3])),"./solar_view/solar_view/device.vue":()=>e(()=>import("./device-D97fwZ97.js"),__vite__mapDeps([182,1,2,3])),"./solar_watt/solar_watt/device.vue":()=>e(()=>import("./device-D_Qh4d0E.js"),__vite__mapDeps([184,1,2,3])),"./solar_world/solar_world/device.vue":()=>e(()=>import("./device-B2BXKGVF.js"),__vite__mapDeps([185,1,2,3])),"./solaredge/solaredge/device.vue":()=>e(()=>import("./device-CFv91Hst.js"),__vite__mapDeps([188,1,2,3])),"./solarmax/solarmax/device.vue":()=>e(()=>import("./device--8PbFL3K.js"),__vite__mapDeps([193,1,2,3])),"./solax/solax/device.vue":()=>e(()=>import("./device-BP1KJA6p.js"),__vite__mapDeps([196,1,2,3])),"./solis/solis/device.vue":()=>e(()=>import("./device-DjnKnvxd.js"),__vite__mapDeps([199,1,2,3])),"./sonnen/sonnenbatterie/device.vue":()=>e(()=>import("./device-BQKDm_yK.js"),__vite__mapDeps([204,1,2,3])),"./studer/studer/device.vue":()=>e(()=>import("./device-DMnSEPnd.js"),__vite__mapDeps([206,1,2,3])),"./sunenergyxt/sunenergyxt/device.vue":()=>e(()=>import("./device-CePtNibg.js"),__vite__mapDeps([208,1,2,3])),"./sungrow/sungrow_ihm/device.vue":()=>e(()=>import("./device-1rlXvG7o.js"),__vite__mapDeps([209,1,2,3])),"./sungrow/sungrow_micro/device.vue":()=>e(()=>import("./device-ap_aIxcd.js"),__vite__mapDeps([210,1,2,3])),"./sungrow/sungrow_sg/device.vue":()=>e(()=>import("./device-CZWl8ObD.js"),__vite__mapDeps([211,1,2,3])),"./sungrow/sungrow_sh/device.vue":()=>e(()=>import("./device-CB23bxqx.js"),__vite__mapDeps([212,1,2,3])),"./sunways/sunways/device.vue":()=>e(()=>import("./device-DDCqw8SU.js"),__vite__mapDeps([213,1,2,3])),"./tasmota/tasmota/device.vue":()=>e(()=>import("./device-Wiugpl0X.js"),__vite__mapDeps([214,1,2,3])),"./tesla/tesla/device.vue":()=>e(()=>import("./device-oF88OjWr.js"),__vite__mapDeps([216,1,2,3])),"./thermia/thermia/device.vue":()=>e(()=>import("./device-RdsB0ti4.js"),__vite__mapDeps([218,1,2,3])),"./upower/upower/device.vue":()=>e(()=>import("./device-S7xoJYQU.js"),__vite__mapDeps([219,1,2,3])),"./varta/varta/device.vue":()=>e(()=>import("./device-D0qPaH_i.js"),__vite__mapDeps([220,1,2,3])),"./victron/victron/device.vue":()=>e(()=>import("./device-DyNIhzeY.js"),__vite__mapDeps([224,1,2,3])),"./victron/victron_3p75ct/device.vue":()=>e(()=>import("./device-0R3TseqV.js"),__vite__mapDeps([226,1,2,3])),"./vzlogger/vzlogger/device.vue":()=>e(()=>import("./device-DKtpZs7X.js"),__vite__mapDeps([228,1,2,3])),"./youless/youless/device.vue":()=>e(()=>import("./device-hKSMI4zZ.js"),__vite__mapDeps([230,1,2,3])),"./zendure/zendure/device.vue":()=>e(()=>import("./device-CHU8Jgeh.js"),__vite__mapDeps([234,1,2,3]))}),`./${this.device?.vendor}/${this.device?.type}/device.vue`,4),errorComponent:ie})},updateConfiguration(t){this.$emit("update:configuration",t)}}};function ce(t,o,i,m,u,_){return a(),g(X(_.getComponent()),{device:i.device,component:i.component,"component-id":i.component?i.component.id:void 0,"component-type":i.component?i.component.type:void 0,"onUpdate:configuration":o[0]||(o[0]=c=>_.updateConfiguration(c))},null,40,["device","component","component-id","component-type"])}const le=P(pe,[["render",ce],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/OpenwbConfigProxy.vue"]]);N.add(H,K,G,F,J,Y,Z);const Ee={name:"OpenwbHardwareInstallationView",components:{FontAwesomeIcon:$,OpenwbConfigProxy:le},mixins:[Q],props:{installAssistantActive:{type:Boolean,required:!1,default:!1}},emits:["sendCommand","save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/counter/get/hierarchy",writeable:!1},{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/system/configurable/devices_components",writeable:!1},{topic:"openWB/system/device/+/component/+/config",writeable:!0},{topic:"openWB/system/device/+/config",writeable:!0},{topic:"openWB/chargepoint/+/config",writeable:!1}],selectedVendor:void 0,deviceToAdd:void 0,showDeviceRemoveModal:!1,modalDevice:void 0,modalDeviceName:"",componentToAdd:[],showComponentRemoveModal:!1,modalComponent:void 0,modalComponentName:""}},computed:{installedDevices(){const t=this.getWildcardTopics("openWB/system/device/+/config");return Object.fromEntries(Object.entries(t).filter(([,o])=>o&&typeof o=="object"))},installedComponents(){const t=this.getWildcardTopics("openWB/system/device/+/component/+/config");return Object.fromEntries(Object.entries(t).filter(([,o])=>o&&typeof o=="object"))},gridId(){let t=this.$store.state.mqtt["openWB/counter/get/hierarchy"];if(t!==void 0&&Object.keys(t).length>0){let o=Object.keys(this.$store.state.mqtt["openWB/counter/get/hierarchy"])[0];if(this.$store.state.mqtt["openWB/counter/get/hierarchy"][o].type=="counter")return this.$store.state.mqtt["openWB/counter/get/hierarchy"][o].id}},standaloneOnly(){const t=this.getWildcardTopics("openWB/chargepoint/+/config");return!Object.values(t).some(i=>i&&typeof i=="object"&&i.type==="internal_openwb")},vendorList:{get(){const t=this.$store.state.mqtt["openWB/system/configurable/devices_components"];return t?Object.entries(t).map(([o,i])=>{const m=i?.vendors||{};return{label:i?.group_name||"",options:Object.entries(m).map(([u,_])=>({value:[o,u],text:_?.vendor_name||""})).sort((u,_)=>u.text.localeCompare(_.text))}}).sort((o,i)=>-o.label.localeCompare(i.label)):[]}},deviceList:{get(){if(this.selectedVendor===void 0)return[];let[t,o]=this.selectedVendor;const i=this.$store.state.mqtt["openWB/system/configurable/devices_components"]?.[t]?.vendors?.[o]?.devices;return i?Object.entries(i).filter(([m])=>!this.isHiddenDevice(m)).map(([m,u])=>({value:[o,m],text:u.device_name})).sort((m,u)=>m.text.localeCompare(u.text)):[]}}},methods:{isHiddenDevice(t){return!this.standaloneOnly&&t==="openwb_flex_local"},getComponentTypeClass(t){return t.match(/^(.+_)?counter(_.+)?$/)?"danger":t.match(/^(.+_)?inverter(_.+)?$/)?"success":t.match(/^(.+_)?bat(_.+)?$/)?"warning":"dark"},getComponentDefaultColor(t){if(t.match(/^(.+_)?counter(_.+)?$/))return"#dc3545";if(t.match(/^(.+_)?inverter(_.+)?$/))return"#28a745";if(t.match(/^(.+_)?bat(_.+)?$/))return"#ffc107"},getComponentColorPalette(t){if(t.match(/^(.+_)?counter(_.+)?$/))return["#dc3545","#d32535","#c82333","#c01f2f","#bd2130","#b91f2d","#b21f2d","#ad1d2b","#a71d2a","#8f1923"];if(t.match(/^(.+_)?inverter(_.+)?$/))return["#28a745","#23913c","#218838","#1f8335","#1e7e34","#1d7a32","#1c7430","#186328","#155724","#12491f"];if(t.match(/^(.+_)?bat(_.+)?$/))return["#ffc107","#f2b701","#e0a800","#d9a400","#d39e00","#cd9a00","#c69500","#c08f00","#b8860b","#9d7309"]},getComponentTypeIcon(t){return t.match(/^(.+_)?counter(_.+)?$/)?["fas","fa-gauge-high"]:t.match(/^(.+_)?inverter(_.+)?$/)?["fas","fa-solar-panel"]:t.match(/^(.+_)?bat(_.+)?$/)?["fas","fa-car-battery"]:["fas","fa-microchip"]},getMyInstalledComponents(t){return this.getWildcardTopics("openWB/system/device/"+t+"/component/+/config")},deviceHasConfiguredComponents(t){return Object.keys(this.getMyInstalledComponents(t)).length>0},addDevice(){this.$emit("sendCommand",{command:"addDevice",data:{vendor:this.deviceToAdd[0],type:this.deviceToAdd[1]}})},removeDeviceModal(t,o,i){i.stopPropagation(),this.modalDevice=t,this.modalDeviceName=o,this.showDeviceRemoveModal=!0},removeDevice(t){this.showDeviceRemoveModal=!1,t=="confirm"&&this.$emit("sendCommand",{command:"removeDevice",data:{id:this.modalDevice}})},addComponent(t,o,i,m){this.$emit("sendCommand",{command:"addComponent",data:{deviceId:t,deviceType:i,deviceVendor:o,type:m}})},removeComponentModal(t,o,i,m,u){u.stopPropagation(),this.modalComponent={deviceId:t,id:o,type:i},this.modalComponentName=m,this.showComponentRemoveModal=!0},removeComponent(t){this.showComponentRemoveModal=!1,t=="confirm"&&this.$emit("sendCommand",{command:"removeComponent",data:this.modalComponent})},getComponentList(t,o){if(t===void 0||o===void 0)return[];let i=[];return Object.values(this.$store.state.mqtt["openWB/system/configurable/devices_components"]).every(m=>m.vendors[t]!==void 0?(m.vendors[t].devices[o]!==void 0&&(i=Object.entries(m.vendors[t].devices[o].components).map(([_,c])=>({value:_,text:c.component_name}))),!1):!0),i},updateConfiguration(t,o){console.debug("updateConfiguration",t,o),this.updateState(t,o.value,o.object)}}},ge={class:"hardwareInstallation"},Ve={name:"hardwareInstallationForm"},Oe={key:0},Ie={key:1},De={key:1},Te={key:0};function fe(t,o,i,m,u,_){const c=p("openwb-base-modal-dialog"),T=p("router-link"),D=p("openwb-base-alert"),f=p("font-awesome-icon"),b=p("openwb-base-avatar"),W=p("openwb-base-tooltip"),A=p("openwb-base-text-input"),x=p("openwb-config-proxy"),M=p("openwb-base-heading"),q=p("openwb-base-color-picker"),w=p("openwb-base-card"),h=p("openwb-base-select-input"),U=p("openwb-base-submit-buttons");return a(),V(L,null,[v(c,{show:u.showDeviceRemoveModal,title:"Gerät löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:_.removeDevice},{default:r(()=>[s(' Willst Du das Gerät "'+I(u.modalDeviceName)+'" inklusive aller Komponenten wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ',1)]),_:1},8,["show","onModalResult"]),v(c,{show:u.showComponentRemoveModal,title:"Komponente löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:_.removeComponent},{default:r(()=>[s(' Willst Du die Komponente "'+I(u.modalComponentName)+'" wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ',1)]),_:1},8,["show","onModalResult"]),l("div",ge,[l("form",Ve,[i.installAssistantActive?R("",!0):(a(),g(D,{key:0,subtype:"info"},{default:r(()=>[o[7]||(o[7]=s(" Wenn neue Komponenten - insbesondere Zähler - konfiguriert wurden, ist auch das ",-1)),v(T,{to:"/LoadManagementConfiguration"},{default:r(()=>[...o[6]||(o[6]=[s(" Lastmanagement ",-1)])]),_:1}),o[8]||(o[8]=s(" zu prüfen!",-1)),o[9]||(o[9]=l("br",null,null,-1)),o[10]||(o[10]=s(" Je nach Hersteller muss eventuell die Kommunikation im Wechselrichter freigegeben werden (z.B. Aktivierung von Modbus TCP, Portfreigaben o.Ä.) ",-1))]),_:1})),v(w,{title:"Geräte und Komponenten"},{default:r(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(a(),V("div",Oe,[v(D,{subtype:"info"},{default:r(()=>[...o[11]||(o[11]=[s(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(a(),V("div",Ie,[(a(!0),V(L,null,k(_.installedDevices,(n,y)=>(a(),g(w,{key:y,collapsible:!0,collapsed:!0,subtype:"dark"},{header:r(()=>[v(f,{icon:["fas","network-wired"]}),s(" "+I(n?.name),1)]),actions:r(d=>[d.collapsed?(a(),V("div",De,[(a(!0),V(L,null,k(_.getMyInstalledComponents(n?.id),E=>(a(),g(b,{key:E?.id,class:"ml-1",style:B({backgroundColor:E?.color,color:t.getContrastColor(E?.color)})},{default:r(()=>[v(W,{description:E?.name},{default:r(()=>[v(f,{icon:_.getComponentTypeIcon(E?.type)},null,8,["icon"])]),_:2},1032,["description"])]),_:2},1032,["style"]))),128))])):(a(),g(b,{key:0,class:"bg-danger clickable",onClick:E=>_.removeDeviceModal(n?.id,n?.name,E)},{default:r(()=>[v(f,{icon:["fas","trash"]})]),_:1},8,["onClick"]))]),default:r(()=>[v(A,{title:"Bezeichnung",subtype:"text","model-value":n?.name,"onUpdate:modelValue":d=>t.updateState(y,d,"name")},null,8,["model-value","onUpdate:modelValue"]),o[19]||(o[19]=l("hr",null,null,-1)),v(x,{device:n,"onUpdate:configuration":d=>_.updateConfiguration(y,d)},null,8,["device","onUpdate:configuration"]),o[20]||(o[20]=l("hr",null,null,-1)),v(M,null,{default:r(()=>[...o[12]||(o[12]=[s("Komponenten",-1)])]),_:1}),_.deviceHasConfiguredComponents(n?.id)?R("",!0):(a(),g(D,{key:0,subtype:"warning"},{default:r(()=>[...o[13]||(o[13]=[s(" Es wurden noch keine Komponenten zu diesem Gerät angelegt. ",-1)])]),_:1})),(a(!0),V(L,null,k(_.getMyInstalledComponents(n?.id),(d,E)=>(a(),g(w,{key:d?.id,collapsible:!0,collapsed:!0,subtype:_.getComponentTypeClass(d?.type)},{header:r(()=>[v(f,{icon:_.getComponentTypeIcon(d?.type),class:"fa-border",style:B({backgroundColor:d?.color,color:t.getContrastColor(d?.color),"--fa-border-color":t.getContrastColor(d?.color)})},null,8,["icon","style"]),s(" "+I(d?.name),1)]),actions:r(O=>[O.collapsed?R("",!0):(a(),g(b,{key:0,class:"bg-danger clickable",onClick:S=>_.removeComponentModal(n?.id,d?.id,d?.type,d?.name,S)},{default:r(()=>[v(f,{icon:["fas","trash"]})]),_:1},8,["onClick"]))]),default:r(()=>[v(A,{title:"Bezeichnung",subtype:"text","model-value":d?.name,"onUpdate:modelValue":O=>t.updateState(E,O,"name")},ee({_:2},[d?.type?.toLowerCase().includes("counter")?{name:"append",fn:r(()=>[v(q,{class:"p-1","model-value":d?.color,"default-color":_.getComponentDefaultColor(d?.type),"color-palette":_.getComponentColorPalette(d?.type),disabled:d?.id===_.gridId,"onUpdate:modelValue":O=>t.updateState(E,O,"color")},null,8,["model-value","default-color","color-palette","disabled","onUpdate:modelValue"])]),key:"0"}:void 0]),1032,["model-value","onUpdate:modelValue"]),v(A,{title:"Hersteller",subtype:"text","model-value":d?.info.manufacturer,"onUpdate:modelValue":O=>t.updateState(E,O,"info.manufacturer")},{help:r(()=>[...o[14]||(o[14]=[s(" Optional: zusätzliche Information für den Systembericht. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),v(A,{title:"Modell",subtype:"text","model-value":d?.info.model,"onUpdate:modelValue":O=>t.updateState(E,O,"info.model")},{help:r(()=>[...o[15]||(o[15]=[s(" Optional: zusätzliche Information für den Systembericht. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),o[16]||(o[16]=l("hr",null,null,-1)),v(x,{device:n,component:d,"onUpdate:configuration":O=>_.updateConfiguration(E,O)},null,8,["device","component","onUpdate:configuration"])]),_:2},1032,["subtype"]))),128)),o[21]||(o[21]=l("hr",null,null,-1)),_.getComponentList(n?.vendor,n?.type)?.length?(a(),g(h,{key:1,title:"Verfügbare Komponenten","not-selected":"Bitte auswählen",options:_.getComponentList(n?.vendor,n?.type),"model-value":u.componentToAdd[n?.id],"add-button":!0,"onUpdate:modelValue":d=>u.componentToAdd[n?.id]=d,"onInput:add":d=>_.addComponent(n?.id,n?.vendor,n?.type,u.componentToAdd[n?.id])},{help:r(()=>[...o[17]||(o[17]=[s(" Bitte eine Komponente auswählen, die hinzugefügt werden soll. Für jeden Datensatz, z.B. Wechselrichter- und Batteriedaten, muss eine Wechselrichter- und eine Batteriekomponente hinzugefügt werden. ",-1)])]),_:1},8,["options","model-value","onUpdate:modelValue","onInput:add"])):(a(),g(D,{key:2,subtype:"info"},{default:r(()=>[...o[18]||(o[18]=[s(" Dieses System bietet keine Komponenten zur Installation an. ",-1)])]),_:1}))]),_:2},1024))),128)),Object.keys(_.installedDevices)?.length>0?(a(),V("hr",Te)):R("",!0),v(h,{modelValue:u.selectedVendor,"onUpdate:modelValue":o[0]||(o[0]=n=>u.selectedVendor=n),title:"Hersteller","not-selected":"Bitte auswählen",groups:_.vendorList},null,8,["modelValue","groups"]),v(h,{modelValue:u.deviceToAdd,"onUpdate:modelValue":[o[1]||(o[1]=n=>u.deviceToAdd=n),o[2]||(o[2]=n=>u.deviceToAdd=n)],title:"Verfügbare Geräte","not-selected":"Bitte auswählen",disabled:u.selectedVendor===void 0,options:_.deviceList,"model-value":u.deviceToAdd,"add-button":!0,"onInput:add":_.addDevice},{help:r(()=>[...o[22]||(o[22]=[l("p",null,[s(' Die openWB-Regelung ist auf Werte von Messpunkten (Zähler, Energy Meter usw.) angewiesen. Hierfür werden "Geräte" und "Komponenten" verwendet.'),l("br"),s(' Ein "Gerät" wird hierbei durch seine Verbindungseinstellungen (z.B. IP-Adresse) spezifiziert (häufig durch manuelle Eingabe oder manchmal automatisch ermittelt) und kann über mehrere untergeordnete "Komponenten" verfügen, z.B. einen Messpunkt für PV-Erzeugung, einen Messpunkt für Netzeinspeisung/-bezug am EVU-Punkt usw.. Ein "Gerät" bedingt somit immer mindestens eine zugehörige "Komponente". ')],-1),l("p",null,[s(' Bsp: Werden die Werte von verschiedenen Messpunkten (z.B. PV und EVU) über die gleiche IP-Adresse abgefragt, wird dafür ein "Gerät" mit zwei "Komponenten" für PV- und EVU- Messpunkt angelegt.'),l("br"),s(' Verfügt dagegen jeder Messpunkt über eine eigene IP-Adresse, wird jeder Messpunkt als eigenes "Gerät" mit nur einer "Komponente" angelegt. ')],-1),l("p",null,' Das "Gerät" wird in der Dropdown-Liste ausgewählt und mit "+" der Regelung hinzugefügt. Im Anschluss erfolgt die Konfiguration des "Gerätes" innerhalb des schwarzen "Geräte"-Reiters. ',-1)])]),_:1},8,["modelValue","disabled","options","model-value","onInput:add"])]))]),_:1}),v(U,{"form-name":"hardwareInstallationForm",onSave:o[3]||(o[3]=n=>t.$emit("save",t.mqttTopicsToPublish)),onReset:o[4]||(o[4]=n=>t.$emit("reset")),onDefaults:o[5]||(o[5]=n=>t.$emit("defaults"))})])])],64)}const Pe=P(Ee,[["render",fe],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/HardwareInstallation.vue"]]),he=Object.freeze(Object.defineProperty({__proto__:null,default:Pe},Symbol.toStringTag,{value:"Module"}));export{ue as C,Pe as H,he as a}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/device-DHB2lzzG.js","assets/DeviceConfigMixin-D2g2-xc_.js","assets/vendor-BwGffBs-.js","assets/vendor-Cq9CCOuG.css","assets/bat-CiWshC0s.js","assets/vendor-fortawesome-DplTMxoa.js","assets/index-CE-5DBwq.js","assets/vendor-bootstrap-DxivtUnb.js","assets/vendor-jquery-CEMonh9Y.js","assets/vendor-bootstrap-BJ8HpIhY.css","assets/vendor-axios-C0vEeTtS.js","assets/index-xf6JJloS.css","assets/dynamic-import-helper-BheWnx7M.js","assets/device-Bmiwd3r6.js","assets/device-Chn2mfBF.js","assets/device-Du5x1ttW.js","assets/device-DCCgNY-n.js","assets/counter-B_AdvZLu.js","assets/device-C-VdYO_S.js","assets/device-CUsU7GEo.js","assets/device-qM6Ow-QZ.js","assets/bat-BUfdEwE4.js","assets/device-D0NVBx3_.js","assets/device-CyemJxTG.js","assets/inverter-CvTg-i8P.js","assets/device-CWvuKt9H.js","assets/counter-TLT1z9bP.js","assets/device-Hl-FIG_-.js","assets/counter-oZlZTHAi.js","assets/device-CwrJywgw.js","assets/bat-BAfAQbmI.js","assets/counter-B6SxRJ-V.js","assets/device-BfuV33Ny.js","assets/inverter-BZZcq6as.js","assets/device-CME_IE2O.js","assets/counter-D8mhCeuj.js","assets/device-B2ATC70N.js","assets/inverter-qSzAx1zR.js","assets/device-Drtgd5P3.js","assets/device-CnnZ5HDz.js","assets/device-D93KyX8z.js","assets/counter-LgLPNVAo.js","assets/device-C7upWp-n.js","assets/inverter-CWbg2AmV.js","assets/counter-GbOlAIXk.js","assets/device-BeTvjVsI.js","assets/inverter-BD6-8GhL.js","assets/bat-C4dZsrAz.js","assets/device-LwKhWIDy.js","assets/bat-DjzTmFO3.js","assets/counter-fISm2BAg.js","assets/device-CX9F2w1R.js","assets/inverter-B_6AQnTo.js","assets/bat-C8wwssfL.js","assets/counter-BU9CsBUq.js","assets/device-DFeFqcPa.js","assets/inverter-CD6oD4dy.js","assets/bat-z8e9cnkh.js","assets/counter-C4vWWou3.js","assets/device-CpVp0tJY.js","assets/inverter-80yGCcKd.js","assets/inverter_production_meter-DFCXG47y.js","assets/bat-aqipIrGh.js","assets/device-h744ldQG.js","assets/inverter-CFBN3P6A.js","assets/bat-BoNmQkKQ.js","assets/counter-DGtXWY_C.js","assets/device-DxS-IR5M.js","assets/inverter-C9hQ-qD6.js","assets/bat-BxuAFtRf.js","assets/counter-CWXbWhAY.js","assets/device-BjmcAYaW.js","assets/inverter-TK6MuB-M.js","assets/ModbusRegisterFields-CkQ0333X.js","assets/bat-BY7L9xmm.js","assets/bat-DHMe4o2t.css","assets/counter-AYpWBR1p.js","assets/counter-CZH6UcIq.css","assets/device-D7XDJsSX.js","assets/inverter-CFRhVi2Z.js","assets/inverter-CP1pwHt6.css","assets/bat-P2s6JDzm.js","assets/counter-CcoCYpiA.js","assets/device-B7mQquwz.js","assets/inverter-C1ZmnoCj.js","assets/counter-vd7oTPGe.js","assets/bat-BJmcvZen.js","assets/device-D-HB7yYz.js","assets/device-BjH2i3dR.js","assets/device-By62nPmK.js","assets/device-BMh4AbeD.js","assets/bat-CsgP1xKS.js","assets/counter-Dx3P41SY.js","assets/device-D7FS6Gp8.js","assets/inverter-DWPT4O18.js","assets/device-DVfJuzkE.js","assets/counter-BG4_SQ_c.js","assets/device-CzW27uID.js","assets/bat-D_Evz_Yy.js","assets/counter-D_qxcfeu.js","assets/device-CaZSyW6k.js","assets/inverter-R8XihLvk.js","assets/device-BKrVP95F.js","assets/inverter-m-w_Sb1C.js","assets/counter-DUwvjuC0.js","assets/SystemVersion-eCZ4XHiC.js","assets/device-BnxKSgH8.js","assets/inverter-JP7I-dv9.js","assets/counter-CroYhFKQ.js","assets/device-DLmN6zPE.js","assets/inverter-wOgKFwTd.js","assets/device-Di9i_dA8.js","assets/bat-BwP9LEZe.js","assets/counter-BQpBN1KZ.js","assets/device-C0xDk0ts.js","assets/counter-D73FSNaA.js","assets/device-BSXhrs1Z.js","assets/device-Bx-PcB2n.js","assets/inverter-DyV-lL89.js","assets/device-CdePIfdb.js","assets/bat-C7coTIQY.js","assets/device-BnxT8JJ2.js","assets/bat-CHoGb8Hj.js","assets/counter-Cg2jitX2.js","assets/device-DA58b9nm.js","assets/inverter-syB6JXhR.js","assets/device-Bh86b_Z3.js","assets/counter-C4W1OrRJ.js","assets/device-DdtU9l__.js","assets/device-DQB3GNdG.js","assets/inverter-DUQFRbCE.js","assets/bat-BX9u1onJ.js","assets/bat-Dvt9S3H8.js","assets/counter-B9Zex_N-.js","assets/inverter-Bd2SPbtu.js","assets/bat-BRvYqgpg.js","assets/consumption_counter-CSxdoH_9.js","assets/counter-_4xt7Iez.js","assets/device-De_utEj4.js","assets/inverter-8glg04uQ.js","assets/consumption_counter-DiVLqlI_.js","assets/device-DBtCkhyu.js","assets/inverter-BtwGJEqd.js","assets/counter-C9FMcHBY.js","assets/device-DVMfFy_D.js","assets/counter-VvO2rbw8.js","assets/device-9hZ9C-_o.js","assets/counter-DCfAmTRv.js","assets/device-BtMlWIlE.js","assets/inverter-_cnPWFFm.js","assets/bat-9SDcoKgC.js","assets/device-N4SVn9jC.js","assets/device-GN_GKnJc.js","assets/bat-H25hZ4Cm.js","assets/device-BtAcz1pD.js","assets/counter-lFYAQ5gR.js","assets/device-D8Ube9qm.js","assets/device-BW_zyWYf.js","assets/device-Ct0EL_5c.js","assets/bat-hR7nLV0m.js","assets/counter-CccCcxLV.js","assets/device-BObe7-fT.js","assets/inverter-_GY_UkQu.js","assets/counter-CU0YgyqL.js","assets/inverter-Y1PklCXz.js","assets/bat-BQnwI1OH.js","assets/counter-COe699Ga.js","assets/device-Cae8kKJA.js","assets/inverter-Wr7p7n3V.js","assets/bat-DHmI9tEA.js","assets/device-Bm5lJk-e.js","assets/device-YYGO4kNw.js","assets/counter-lzYJiWN4.js","assets/device-Dnz-lfZw.js","assets/inverter-CTEMEBsb.js","assets/device-o4cJfonB.js","assets/device-CBzzuPPX.js","assets/bat-FQKJgpaM.js","assets/device-Du21jRtu.js","assets/inverter-BamFQOpg.js","assets/counter-B96Rg5H0.js","assets/device-DmTp-4Q0.js","assets/device-D97fwZ97.js","assets/inverter-D9Q2ncuJ.js","assets/device-D_Qh4d0E.js","assets/device-B2BXKGVF.js","assets/bat-DhhpO0HZ.js","assets/counter-CFIj1r_a.js","assets/device-CFv91Hst.js","assets/external_inverter-DswOUFNu.js","assets/inverter-CtXYfZIc.js","assets/bat-Dn2ap8yL.js","assets/counter_maxstorage-BeIa9tEz.js","assets/device--8PbFL3K.js","assets/inverter-C-IPT7iP.js","assets/inverter_maxstorage-DbnWXUyZ.js","assets/device-BP1KJA6p.js","assets/bat-Ch4AmBy2.js","assets/counter-vb8LubPS.js","assets/device-DjnKnvxd.js","assets/inverter-CrSs7KEe.js","assets/bat-kdg96xqY.js","assets/counter-DzMp9bF4.js","assets/counter_consumption-CKJwpn1V.js","assets/device-BQKDm_yK.js","assets/bat-aqbKfMAA.js","assets/device-DMnSEPnd.js","assets/inverter-SRAKxWUU.js","assets/device-CePtNibg.js","assets/device-1rlXvG7o.js","assets/device-ap_aIxcd.js","assets/device-CZWl8ObD.js","assets/device-CB23bxqx.js","assets/device-DDCqw8SU.js","assets/device-Wiugpl0X.js","assets/counter-BqJTf7FZ.js","assets/device-oF88OjWr.js","assets/counter-CyM-43Cx.js","assets/device-RdsB0ti4.js","assets/device-S7xoJYQU.js","assets/device-D0qPaH_i.js","assets/inverter-Bn2pFrXI.js","assets/bat-m8eGk9pU.js","assets/counter-DSstM-sV.js","assets/device-DyNIhzeY.js","assets/inverter-BY4QGubE.js","assets/device-0R3TseqV.js","assets/counter-CmhagnH8.js","assets/device-DKtpZs7X.js","assets/inverter-D5BodfIi.js","assets/device-hKSMI4zZ.js","assets/inverter-B_S53BXW.js","assets/bat-BHkM8d9j.js","assets/counter-DPbtpjhP.js","assets/device-CHU8Jgeh.js","assets/inverter-yd8WQcwg.js"])))=>i.map(i=>d[i]); +import{F as $,l as N,d as H,y as K,av as G,al as F,a4 as J,a3 as Y,a2 as Z}from"./vendor-fortawesome-DplTMxoa.js";import{_ as e,C as Q}from"./index-CE-5DBwq.js";import{_ as z}from"./dynamic-import-helper-BheWnx7M.js";import{_ as P,m as p,l as a,f as V,z as g,u as r,B as s,J as I,q as v,y as l,a7 as C,P as X,x as R,K as L,L as k,D as ee,O as B}from"./vendor-BwGffBs-.js";import{D as j}from"./DeviceConfigMixin-D2g2-xc_.js";const oe={name:"DeviceFallback",mixins:[j]},te={class:"device-fallback"},_e={key:1};function re(t,o,i,m,u,_){const c=p("openwb-base-alert"),T=p("openwb-base-textarea");return a(),V("div",te,[Object.keys(t.device.configuration).length==0?(a(),g(c,{key:0,subtype:"info"},{default:r(()=>[s(' Der Gerät-Typ "'+I(t.device.type)+'" bietet keine Einstellungen. ',1)]),_:1})):(a(),V("div",_e,[v(c,{subtype:"warning"},{default:r(()=>[s(' Es wurde keine Konfigurationsseite für den Geräte-Typ "'+I(t.device.type)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),v(T,{title:"Konfiguration",subtype:"json","model-value":t.device.configuration,"onUpdate:modelValue":o[0]||(o[0]=D=>t.updateConfiguration(D,"configuration"))},{help:r(()=>[...o[1]||(o[1]=[s(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),v(c,{subtype:"info"},{default:r(()=>[l("pre",null,I(JSON.stringify(t.device.configuration,void 0,2)),1)]),_:1})]))])}const ie=P(oe,[["render",re],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/OpenwbDeviceConfigFallback.vue"]]),ne={mixins:[j],props:{component:{type:Object,required:!0}}},ue=P(ne,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/ComponentConfigMixin.vue"]]),de={name:"ComponentFallback",mixins:[ue]},ve={class:"component-fallback"},se={key:1};function ae(t,o,i,m,u,_){const c=p("openwb-base-alert"),T=p("openwb-base-textarea");return a(),V("div",ve,[Object.keys(t.component.configuration).length==0?(a(),g(c,{key:0,subtype:"info"},{default:r(()=>[s(' Der Komponenten-Typ "'+I(t.component.type)+'" bietet keine Einstellungen. ',1)]),_:1})):(a(),V("div",se,[v(c,{subtype:"warning"},{default:r(()=>[s(' Es wurde keine Konfigurationsseite für den Komponenten-Typ "'+I(t.component.type)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),v(T,{title:"Konfiguration",subtype:"json","model-value":t.component.configuration,"onUpdate:modelValue":o[0]||(o[0]=D=>t.updateConfiguration(D,"configuration"))},{help:r(()=>[...o[1]||(o[1]=[s(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),v(c,{subtype:"info"},{default:r(()=>[l("pre",null,I(JSON.stringify(t.component.configuration,void 0,2)),1)]),_:1})]))])}const me=P(de,[["render",ae],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/OpenwbComponentConfigFallback.vue"]]),pe={name:"OpenwbConfigProxy",props:{device:{type:Object,required:!0},component:{type:Object,required:!1,default:void 0}},emits:["update:configuration"],methods:{getComponent(){return console.debug(`loading component: ${this.device?.type} / ${this.component?.type}`),this.component!==void 0?C({loader:()=>z(Object.assign({"./algodue/algodue/device.vue":()=>e(()=>import("./device-DHB2lzzG.js"),__vite__mapDeps([0,1,2,3])),"./alpha_ess/alpha_ess/bat.vue":()=>e(()=>import("./bat-CiWshC0s.js"),__vite__mapDeps([4,2,3,5,6,7,8,9,10,11,12,1])),"./alpha_ess/alpha_ess/device.vue":()=>e(()=>import("./device-Bmiwd3r6.js"),__vite__mapDeps([13,1,2,3])),"./ampere/ampere/device.vue":()=>e(()=>import("./device-Chn2mfBF.js"),__vite__mapDeps([14,1,2,3])),"./anker/smartmeter_gen2/device.vue":()=>e(()=>import("./device-Du5x1ttW.js"),__vite__mapDeps([15,1,2,3])),"./anker/solarbank/device.vue":()=>e(()=>import("./device-DCCgNY-n.js"),__vite__mapDeps([16,1,2,3])),"./avm/avm/counter.vue":()=>e(()=>import("./counter-B_AdvZLu.js"),__vite__mapDeps([17,2,3,5,6,7,8,9,10,11,12,1])),"./avm/avm/device.vue":()=>e(()=>import("./device-C-VdYO_S.js"),__vite__mapDeps([18,1,2,3])),"./azzurro_zcs/azzurro_zcs/device.vue":()=>e(()=>import("./device-CUsU7GEo.js"),__vite__mapDeps([19,1,2,3])),"./azzurro_zcs/azzurro_zcs_3p/device.vue":()=>e(()=>import("./device-qM6Ow-QZ.js"),__vite__mapDeps([20,1,2,3])),"./batterx/batterx/bat.vue":()=>e(()=>import("./bat-BUfdEwE4.js"),__vite__mapDeps([21,2,3,5,6,7,8,9,10,11,12,1])),"./batterx/batterx/device.vue":()=>e(()=>import("./device-D0NVBx3_.js"),__vite__mapDeps([22,1,2,3])),"./benning/benning/device.vue":()=>e(()=>import("./device-CyemJxTG.js"),__vite__mapDeps([23,1,2,3])),"./benning/benning/inverter.vue":()=>e(()=>import("./inverter-CvTg-i8P.js"),__vite__mapDeps([24,2,3,5,6,7,8,9,10,11,12,1])),"./byd/byd/device.vue":()=>e(()=>import("./device-CWvuKt9H.js"),__vite__mapDeps([25,1,2,3])),"./carlo_gavazzi/carlo_gavazzi/counter.vue":()=>e(()=>import("./counter-TLT1z9bP.js"),__vite__mapDeps([26,2,3,5,6,7,8,9,10,11,12,1])),"./carlo_gavazzi/carlo_gavazzi/device.vue":()=>e(()=>import("./device-Hl-FIG_-.js"),__vite__mapDeps([27,1,2,3])),"./chint/chint/counter.vue":()=>e(()=>import("./counter-oZlZTHAi.js"),__vite__mapDeps([28,2,3,5,6,7,8,9,10,11,12,1])),"./chint/chint/device.vue":()=>e(()=>import("./device-CwrJywgw.js"),__vite__mapDeps([29,1,2,3])),"./deye/deye/bat.vue":()=>e(()=>import("./bat-BAfAQbmI.js"),__vite__mapDeps([30,2,3,5,6,7,8,9,10,11,12,1])),"./deye/deye/counter.vue":()=>e(()=>import("./counter-B6SxRJ-V.js"),__vite__mapDeps([31,2,3,5,6,7,8,9,10,11,12,1])),"./deye/deye/device.vue":()=>e(()=>import("./device-BfuV33Ny.js"),__vite__mapDeps([32,1,2,3])),"./deye/deye/inverter.vue":()=>e(()=>import("./inverter-BZZcq6as.js"),__vite__mapDeps([33,2,3,5,6,7,8,9,10,11,12,1])),"./deye/deye_solarman/device.vue":()=>e(()=>import("./device-CME_IE2O.js"),__vite__mapDeps([34,1,2,3])),"./discovergy/discovergy/counter.vue":()=>e(()=>import("./counter-D8mhCeuj.js"),__vite__mapDeps([35,2,3,5,6,7,8,9,10,11,12,1])),"./discovergy/discovergy/device.vue":()=>e(()=>import("./device-B2ATC70N.js"),__vite__mapDeps([36,1,2,3])),"./discovergy/discovergy/inverter.vue":()=>e(()=>import("./inverter-qSzAx1zR.js"),__vite__mapDeps([37,2,3,5,6,7,8,9,10,11,12,1])),"./e3dc/e3dc/device.vue":()=>e(()=>import("./device-Drtgd5P3.js"),__vite__mapDeps([38,1,2,3])),"./ecoflow/stream/device.vue":()=>e(()=>import("./device-CnnZ5HDz.js"),__vite__mapDeps([39,1,2,3])),"./elgris/elgris/device.vue":()=>e(()=>import("./device-D93KyX8z.js"),__vite__mapDeps([40,1,2,3])),"./enecess/ecomain/counter.vue":()=>e(()=>import("./counter-LgLPNVAo.js"),__vite__mapDeps([41,2,3,5,6,7,8,9,10,11,12,1])),"./enecess/ecomain/device.vue":()=>e(()=>import("./device-C7upWp-n.js"),__vite__mapDeps([42,1,2,3])),"./enecess/ecomain/inverter.vue":()=>e(()=>import("./inverter-CWbg2AmV.js"),__vite__mapDeps([43,2,3,5,6,7,8,9,10,11,12,1])),"./enphase/enphase/counter.vue":()=>e(()=>import("./counter-GbOlAIXk.js"),__vite__mapDeps([44,2,3,5,6,7,8,9,10,11,12,1])),"./enphase/enphase/device.vue":()=>e(()=>import("./device-BeTvjVsI.js"),__vite__mapDeps([45,1,2,3])),"./enphase/enphase/inverter.vue":()=>e(()=>import("./inverter-BD6-8GhL.js"),__vite__mapDeps([46,2,3,5,6,7,8,9,10,11,12,1])),"./fems/fems/bat.vue":()=>e(()=>import("./bat-C4dZsrAz.js"),__vite__mapDeps([47,2,3,5,6,7,8,9,10,11,12,1])),"./fems/fems/device.vue":()=>e(()=>import("./device-LwKhWIDy.js"),__vite__mapDeps([48,1,2,3])),"./fox_ess/fox_ess/bat.vue":()=>e(()=>import("./bat-DjzTmFO3.js"),__vite__mapDeps([49,2,3,5,6,7,8,9,10,11,12,1])),"./fox_ess/fox_ess/counter.vue":()=>e(()=>import("./counter-fISm2BAg.js"),__vite__mapDeps([50,2,3,5,6,7,8,9,10,11,12,1])),"./fox_ess/fox_ess/device.vue":()=>e(()=>import("./device-CX9F2w1R.js"),__vite__mapDeps([51,1,2,3])),"./fox_ess/fox_ess/inverter.vue":()=>e(()=>import("./inverter-B_6AQnTo.js"),__vite__mapDeps([52,2,3,5,6,7,8,9,10,11,12,1])),"./fox_ess/fox_ess_h3_smart/bat.vue":()=>e(()=>import("./bat-C8wwssfL.js"),__vite__mapDeps([53,2,3,5,6,7,8,9,10,11,12,1])),"./fox_ess/fox_ess_h3_smart/counter.vue":()=>e(()=>import("./counter-BU9CsBUq.js"),__vite__mapDeps([54,2,3,5,6,7,8,9,10,11,12,1])),"./fox_ess/fox_ess_h3_smart/device.vue":()=>e(()=>import("./device-DFeFqcPa.js"),__vite__mapDeps([55,1,2,3])),"./fox_ess/fox_ess_h3_smart/inverter.vue":()=>e(()=>import("./inverter-CD6oD4dy.js"),__vite__mapDeps([56,2,3,5,6,7,8,9,10,11,12,1])),"./fronius/fronius_http_api/bat.vue":()=>e(()=>import("./bat-z8e9cnkh.js"),__vite__mapDeps([57,2,3,5,6,7,8,9,10,11,12,1])),"./fronius/fronius_http_api/counter.vue":()=>e(()=>import("./counter-C4vWWou3.js"),__vite__mapDeps([58,2,3,5,6,7,8,9,10,11,12,1])),"./fronius/fronius_http_api/device.vue":()=>e(()=>import("./device-CpVp0tJY.js"),__vite__mapDeps([59,1,2,3])),"./fronius/fronius_http_api/inverter.vue":()=>e(()=>import("./inverter-80yGCcKd.js"),__vite__mapDeps([60,2,3,5,6,7,8,9,10,11,12,1])),"./fronius/fronius_http_api/inverter_production_meter.vue":()=>e(()=>import("./inverter_production_meter-DFCXG47y.js"),__vite__mapDeps([61,2,3,5,6,7,8,9,10,11,12,1])),"./fronius/fronius_sunspec/bat.vue":()=>e(()=>import("./bat-aqipIrGh.js"),__vite__mapDeps([62,2,3,5,6,7,8,9,10,11,12,1])),"./fronius/fronius_sunspec/device.vue":()=>e(()=>import("./device-h744ldQG.js"),__vite__mapDeps([63,1,2,3])),"./fronius/fronius_sunspec/inverter.vue":()=>e(()=>import("./inverter-CFBN3P6A.js"),__vite__mapDeps([64,2,3,5,6,7,8,9,10,11,12,1])),"./generic/http/bat.vue":()=>e(()=>import("./bat-BoNmQkKQ.js"),__vite__mapDeps([65,2,3,5,6,7,8,9,10,11,12,1])),"./generic/http/counter.vue":()=>e(()=>import("./counter-DGtXWY_C.js"),__vite__mapDeps([66,2,3,5,6,7,8,9,10,11,12,1])),"./generic/http/device.vue":()=>e(()=>import("./device-DxS-IR5M.js"),__vite__mapDeps([67,1,2,3])),"./generic/http/inverter.vue":()=>e(()=>import("./inverter-C9hQ-qD6.js"),__vite__mapDeps([68,2,3,5,6,7,8,9,10,11,12,1])),"./generic/json/bat.vue":()=>e(()=>import("./bat-BxuAFtRf.js"),__vite__mapDeps([69,2,3,5,6,7,8,9,10,11,12,1])),"./generic/json/counter.vue":()=>e(()=>import("./counter-CWXbWhAY.js"),__vite__mapDeps([70,2,3,5,6,7,8,9,10,11,12,1])),"./generic/json/device.vue":()=>e(()=>import("./device-BjmcAYaW.js"),__vite__mapDeps([71,1,2,3])),"./generic/json/inverter.vue":()=>e(()=>import("./inverter-TK6MuB-M.js"),__vite__mapDeps([72,2,3,5,6,7,8,9,10,11,12,1])),"./generic/modbus/ModbusRegisterFields.vue":()=>e(()=>import("./ModbusRegisterFields-CkQ0333X.js"),__vite__mapDeps([73,2,3])),"./generic/modbus/bat.vue":()=>e(()=>import("./bat-BY7L9xmm.js"),__vite__mapDeps([74,73,2,3,5,6,7,8,9,10,11,12,1,75])),"./generic/modbus/counter.vue":()=>e(()=>import("./counter-AYpWBR1p.js"),__vite__mapDeps([76,73,2,3,5,6,7,8,9,10,11,12,1,77])),"./generic/modbus/device.vue":()=>e(()=>import("./device-D7XDJsSX.js"),__vite__mapDeps([78,1,2,3])),"./generic/modbus/inverter.vue":()=>e(()=>import("./inverter-CFRhVi2Z.js"),__vite__mapDeps([79,73,2,3,5,6,7,8,9,10,11,12,1,80])),"./generic/mqtt/bat.vue":()=>e(()=>import("./bat-P2s6JDzm.js"),__vite__mapDeps([81,2,3,5,6,7,8,9,10,11,12,1])),"./generic/mqtt/counter.vue":()=>e(()=>import("./counter-CcoCYpiA.js"),__vite__mapDeps([82,2,3,5,6,7,8,9,10,11,12,1])),"./generic/mqtt/device.vue":()=>e(()=>import("./device-B7mQquwz.js"),__vite__mapDeps([83,1,2,3])),"./generic/mqtt/inverter.vue":()=>e(()=>import("./inverter-C1ZmnoCj.js"),__vite__mapDeps([84,2,3,5,6,7,8,9,10,11,12,1])),"./generic/virtual/counter.vue":()=>e(()=>import("./counter-vd7oTPGe.js"),__vite__mapDeps([85,2,3,5,6,7,8,9,10,11,12,1])),"./good_we/good_we/bat.vue":()=>e(()=>import("./bat-BJmcvZen.js"),__vite__mapDeps([86,2,3,5,6,7,8,9,10,11,12,1])),"./good_we/good_we/device.vue":()=>e(()=>import("./device-D-HB7yYz.js"),__vite__mapDeps([87,1,2,3])),"./growatt/growatt/device.vue":()=>e(()=>import("./device-BjH2i3dR.js"),__vite__mapDeps([88,1,2,3])),"./huawei/huawei/device.vue":()=>e(()=>import("./device-By62nPmK.js"),__vite__mapDeps([89,1,2,3])),"./huawei/huawei_emma/device.vue":()=>e(()=>import("./device-BMh4AbeD.js"),__vite__mapDeps([90,1,2,3])),"./huawei/huawei_smartlogger/bat.vue":()=>e(()=>import("./bat-CsgP1xKS.js"),__vite__mapDeps([91,2,3,5,6,7,8,9,10,11,12,1])),"./huawei/huawei_smartlogger/counter.vue":()=>e(()=>import("./counter-Dx3P41SY.js"),__vite__mapDeps([92,2,3,5,6,7,8,9,10,11,12,1])),"./huawei/huawei_smartlogger/device.vue":()=>e(()=>import("./device-D7FS6Gp8.js"),__vite__mapDeps([93,1,2,3])),"./huawei/huawei_smartlogger/inverter.vue":()=>e(()=>import("./inverter-DWPT4O18.js"),__vite__mapDeps([94,2,3,5,6,7,8,9,10,11,12,1])),"./idm/idm/device.vue":()=>e(()=>import("./device-DVfJuzkE.js"),__vite__mapDeps([95,1,2,3])),"./janitza/janitza/counter.vue":()=>e(()=>import("./counter-BG4_SQ_c.js"),__vite__mapDeps([96,2,3,5,6,7,8,9,10,11,12,1])),"./janitza/janitza/device.vue":()=>e(()=>import("./device-CzW27uID.js"),__vite__mapDeps([97,1,2,3])),"./kaco/kaco_nh/bat.vue":()=>e(()=>import("./bat-D_Evz_Yy.js"),__vite__mapDeps([98,2,3,5,6,7,8,9,10,11,12,1])),"./kaco/kaco_nh/counter.vue":()=>e(()=>import("./counter-D_qxcfeu.js"),__vite__mapDeps([99,2,3,5,6,7,8,9,10,11,12,1])),"./kaco/kaco_nh/device.vue":()=>e(()=>import("./device-CaZSyW6k.js"),__vite__mapDeps([100,1,2,3])),"./kaco/kaco_nh/inverter.vue":()=>e(()=>import("./inverter-R8XihLvk.js"),__vite__mapDeps([101,2,3,5,6,7,8,9,10,11,12,1])),"./kaco/kaco_tx/device.vue":()=>e(()=>import("./device-BKrVP95F.js"),__vite__mapDeps([102,1,2,3])),"./kaco/kaco_tx/inverter.vue":()=>e(()=>import("./inverter-m-w_Sb1C.js"),__vite__mapDeps([103,2,3,5,6,7,8,9,10,11,12,1])),"./kostal/kostal_piko/counter.vue":()=>e(()=>import("./counter-DUwvjuC0.js"),__vite__mapDeps([104,105,2,3,5,6,7,8,9,10,11,12,1])),"./kostal/kostal_piko/device.vue":()=>e(()=>import("./device-BnxKSgH8.js"),__vite__mapDeps([106,1,2,3])),"./kostal/kostal_piko/inverter.vue":()=>e(()=>import("./inverter-JP7I-dv9.js"),__vite__mapDeps([107,2,3,5,6,7,8,9,10,11,12,1])),"./kostal/kostal_piko_ci/counter.vue":()=>e(()=>import("./counter-CroYhFKQ.js"),__vite__mapDeps([108,2,3,5,6,7,8,9,10,11,12,1])),"./kostal/kostal_piko_ci/device.vue":()=>e(()=>import("./device-DLmN6zPE.js"),__vite__mapDeps([109,1,2,3])),"./kostal/kostal_piko_ci/inverter.vue":()=>e(()=>import("./inverter-wOgKFwTd.js"),__vite__mapDeps([110,2,3,5,6,7,8,9,10,11,12,1])),"./kostal/kostal_piko_old/device.vue":()=>e(()=>import("./device-Di9i_dA8.js"),__vite__mapDeps([111,1,2,3])),"./kostal/kostal_plenticore/bat.vue":()=>e(()=>import("./bat-BwP9LEZe.js"),__vite__mapDeps([112,2,3,5,6,7,8,9,10,11,12,1])),"./kostal/kostal_plenticore/counter.vue":()=>e(()=>import("./counter-BQpBN1KZ.js"),__vite__mapDeps([113,105,2,3,5,6,7,8,9,10,11,12,1])),"./kostal/kostal_plenticore/device.vue":()=>e(()=>import("./device-C0xDk0ts.js"),__vite__mapDeps([114,1,2,3])),"./kostal/kostal_sem/counter.vue":()=>e(()=>import("./counter-D73FSNaA.js"),__vite__mapDeps([115,2,3,5,6,7,8,9,10,11,12,1])),"./kostal/kostal_sem/device.vue":()=>e(()=>import("./device-BSXhrs1Z.js"),__vite__mapDeps([116,1,2,3])),"./kostal/kostal_steca/device.vue":()=>e(()=>import("./device-Bx-PcB2n.js"),__vite__mapDeps([117,1,2,3])),"./kostal/kostal_steca/inverter.vue":()=>e(()=>import("./inverter-DyV-lL89.js"),__vite__mapDeps([118,2,3,5,6,7,8,9,10,11,12,1])),"./lg/lg/device.vue":()=>e(()=>import("./device-CdePIfdb.js"),__vite__mapDeps([119,1,2,3])),"./marstek/venus_c_e/bat.vue":()=>e(()=>import("./bat-C7coTIQY.js"),__vite__mapDeps([120,2,3,5,6,7,8,9,10,11,12,1])),"./marstek/venus_c_e/device.vue":()=>e(()=>import("./device-BnxT8JJ2.js"),__vite__mapDeps([121,1,2,3])),"./mtec/mtec/bat.vue":()=>e(()=>import("./bat-CHoGb8Hj.js"),__vite__mapDeps([122,2,3,5,6,7,8,9,10,11,12,1])),"./mtec/mtec/counter.vue":()=>e(()=>import("./counter-Cg2jitX2.js"),__vite__mapDeps([123,2,3,5,6,7,8,9,10,11,12,1])),"./mtec/mtec/device.vue":()=>e(()=>import("./device-DA58b9nm.js"),__vite__mapDeps([124,1,2,3])),"./mtec/mtec/inverter.vue":()=>e(()=>import("./inverter-syB6JXhR.js"),__vite__mapDeps([125,2,3,5,6,7,8,9,10,11,12,1])),"./mystrom/mystrom/device.vue":()=>e(()=>import("./device-Bh86b_Z3.js"),__vite__mapDeps([126,1,2,3])),"./nibe/nibe/counter.vue":()=>e(()=>import("./counter-C4W1OrRJ.js"),__vite__mapDeps([127,2,3,5,6,7,8,9,10,11,12,1])),"./nibe/nibe/device.vue":()=>e(()=>import("./device-DdtU9l__.js"),__vite__mapDeps([128,1,2,3])),"./opendtu/opendtu/device.vue":()=>e(()=>import("./device-DQB3GNdG.js"),__vite__mapDeps([129,1,2,3])),"./opendtu/opendtu/inverter.vue":()=>e(()=>import("./inverter-DUQFRbCE.js"),__vite__mapDeps([130,2,3,5,6,7,8,9,10,11,12,1])),"./openwb/openwb_bat_kit/bat.vue":()=>e(()=>import("./bat-BX9u1onJ.js"),__vite__mapDeps([131,2,3,5,6,7,8,9,10,11,12,1])),"./openwb/openwb_evu_kit/bat.vue":()=>e(()=>import("./bat-Dvt9S3H8.js"),__vite__mapDeps([132,2,3,5,6,7,8,9,10,11,12,1])),"./openwb/openwb_evu_kit/counter.vue":()=>e(()=>import("./counter-B9Zex_N-.js"),__vite__mapDeps([133,2,3,5,6,7,8,9,10,11,12,1])),"./openwb/openwb_evu_kit/inverter.vue":()=>e(()=>import("./inverter-Bd2SPbtu.js"),__vite__mapDeps([134,2,3,5,6,7,8,9,10,11,12,1])),"./openwb/openwb_flex/bat.vue":()=>e(()=>import("./bat-BRvYqgpg.js"),__vite__mapDeps([135,2,3,5,6,7,8,9,10,11,12,1])),"./openwb/openwb_flex/consumption_counter.vue":()=>e(()=>import("./consumption_counter-CSxdoH_9.js"),__vite__mapDeps([136,2,3,5,6,7,8,9,10,11,12,1])),"./openwb/openwb_flex/counter.vue":()=>e(()=>import("./counter-_4xt7Iez.js"),__vite__mapDeps([137,2,3,5,6,7,8,9,10,11,12,1])),"./openwb/openwb_flex/device.vue":()=>e(()=>import("./device-De_utEj4.js"),__vite__mapDeps([138,1,2,3])),"./openwb/openwb_flex/inverter.vue":()=>e(()=>import("./inverter-8glg04uQ.js"),__vite__mapDeps([139,2,3,5,6,7,8,9,10,11,12,1])),"./openwb/openwb_flex_local/consumption_counter.vue":()=>e(()=>import("./consumption_counter-DiVLqlI_.js"),__vite__mapDeps([140,2,3,5,6,7,8,9,10,11,12,1])),"./openwb/openwb_flex_local/device.vue":()=>e(()=>import("./device-DBtCkhyu.js"),__vite__mapDeps([141,1,2,3])),"./openwb/openwb_pv_kit/inverter.vue":()=>e(()=>import("./inverter-BtwGJEqd.js"),__vite__mapDeps([142,2,3,5,6,7,8,9,10,11,12,1])),"./orno/orno/counter.vue":()=>e(()=>import("./counter-C9FMcHBY.js"),__vite__mapDeps([143,2,3,5,6,7,8,9,10,11,12,1])),"./orno/orno/device.vue":()=>e(()=>import("./device-DVMfFy_D.js"),__vite__mapDeps([144,1,2,3])),"./powerdog/powerdog/counter.vue":()=>e(()=>import("./counter-VvO2rbw8.js"),__vite__mapDeps([145,2,3,5,6,7,8,9,10,11,12,1])),"./powerdog/powerdog/device.vue":()=>e(()=>import("./device-9hZ9C-_o.js"),__vite__mapDeps([146,1,2,3])),"./powerfox/powerfox/counter.vue":()=>e(()=>import("./counter-DCfAmTRv.js"),__vite__mapDeps([147,2,3,5,6,7,8,9,10,11,12,1])),"./powerfox/powerfox/device.vue":()=>e(()=>import("./device-BtMlWIlE.js"),__vite__mapDeps([148,1,2,3])),"./powerfox/powerfox/inverter.vue":()=>e(()=>import("./inverter-_cnPWFFm.js"),__vite__mapDeps([149,2,3,5,6,7,8,9,10,11,12,1])),"./qcells/qcells/bat.vue":()=>e(()=>import("./bat-9SDcoKgC.js"),__vite__mapDeps([150,2,3,5,6,7,8,9,10,11,12,1])),"./qcells/qcells/device.vue":()=>e(()=>import("./device-N4SVn9jC.js"),__vite__mapDeps([151,1,2,3])),"./rct/rct/device.vue":()=>e(()=>import("./device-GN_GKnJc.js"),__vite__mapDeps([152,1,2,3])),"./saxpower/saxpower/bat.vue":()=>e(()=>import("./bat-H25hZ4Cm.js"),__vite__mapDeps([153,2,3,5,6,7,8,9,10,11,12,1])),"./saxpower/saxpower/device.vue":()=>e(()=>import("./device-BtAcz1pD.js"),__vite__mapDeps([154,1,2,3])),"./shelly/shelly/counter.vue":()=>e(()=>import("./counter-lFYAQ5gR.js"),__vite__mapDeps([155,2,3,5,6,7,8,9,10,11,12,1])),"./shelly/shelly/device.vue":()=>e(()=>import("./device-D8Ube9qm.js"),__vite__mapDeps([156,1,2,3])),"./siemens/siemens/device.vue":()=>e(()=>import("./device-BW_zyWYf.js"),__vite__mapDeps([157,1,2,3])),"./siemens/siemens_sentron/device.vue":()=>e(()=>import("./device-Ct0EL_5c.js"),__vite__mapDeps([158,1,2,3])),"./sigenergy/sigenergy/bat.vue":()=>e(()=>import("./bat-hR7nLV0m.js"),__vite__mapDeps([159,2,3,5,6,7,8,9,10,11,12,1])),"./sigenergy/sigenergy/counter.vue":()=>e(()=>import("./counter-CccCcxLV.js"),__vite__mapDeps([160,2,3,5,6,7,8,9,10,11,12,1])),"./sigenergy/sigenergy/device.vue":()=>e(()=>import("./device-BObe7-fT.js"),__vite__mapDeps([161,1,2,3])),"./sigenergy/sigenergy/inverter.vue":()=>e(()=>import("./inverter-_GY_UkQu.js"),__vite__mapDeps([162,2,3,5,6,7,8,9,10,11,12,1])),"./sma/sma_shm/counter.vue":()=>e(()=>import("./counter-CU0YgyqL.js"),__vite__mapDeps([163,2,3,5,6,7,8,9,10,11,12,1])),"./sma/sma_shm/inverter.vue":()=>e(()=>import("./inverter-Y1PklCXz.js"),__vite__mapDeps([164,2,3,5,6,7,8,9,10,11,12,1])),"./sma/sma_sunny_boy/bat.vue":()=>e(()=>import("./bat-BQnwI1OH.js"),__vite__mapDeps([165,2,3,5,6,7,8,9,10,11,12,1])),"./sma/sma_sunny_boy/counter.vue":()=>e(()=>import("./counter-COe699Ga.js"),__vite__mapDeps([166,2,3,5,6,7,8,9,10,11,12,1])),"./sma/sma_sunny_boy/device.vue":()=>e(()=>import("./device-Cae8kKJA.js"),__vite__mapDeps([167,1,2,3])),"./sma/sma_sunny_boy/inverter.vue":()=>e(()=>import("./inverter-Wr7p7n3V.js"),__vite__mapDeps([168,2,3,5,6,7,8,9,10,11,12,1])),"./sma/sma_sunny_island/bat.vue":()=>e(()=>import("./bat-DHmI9tEA.js"),__vite__mapDeps([169,2,3,5,6,7,8,9,10,11,12,1])),"./sma/sma_sunny_island/device.vue":()=>e(()=>import("./device-Bm5lJk-e.js"),__vite__mapDeps([170,1,2,3])),"./sma/sma_webbox/device.vue":()=>e(()=>import("./device-YYGO4kNw.js"),__vite__mapDeps([171,1,2,3])),"./smart_me/smart_me/counter.vue":()=>e(()=>import("./counter-lzYJiWN4.js"),__vite__mapDeps([172,2,3,5,6,7,8,9,10,11,12,1])),"./smart_me/smart_me/device.vue":()=>e(()=>import("./device-Dnz-lfZw.js"),__vite__mapDeps([173,1,2,3])),"./smart_me/smart_me/inverter.vue":()=>e(()=>import("./inverter-CTEMEBsb.js"),__vite__mapDeps([174,2,3,5,6,7,8,9,10,11,12,1])),"./smartfox/smartfox/device.vue":()=>e(()=>import("./device-o4cJfonB.js"),__vite__mapDeps([175,1,2,3])),"./sofar/sofar/device.vue":()=>e(()=>import("./device-CBzzuPPX.js"),__vite__mapDeps([176,1,2,3])),"./solakon/solakon_one/bat.vue":()=>e(()=>import("./bat-FQKJgpaM.js"),__vite__mapDeps([177,2,3,5,6,7,8,9,10,11,12,1])),"./solakon/solakon_one/device.vue":()=>e(()=>import("./device-Du21jRtu.js"),__vite__mapDeps([178,1,2,3])),"./solakon/solakon_one/inverter.vue":()=>e(()=>import("./inverter-BamFQOpg.js"),__vite__mapDeps([179,2,3,5,6,7,8,9,10,11,12,1])),"./solar_log/solar_log/counter.vue":()=>e(()=>import("./counter-B96Rg5H0.js"),__vite__mapDeps([180,105,2,3,5,6,7,8,9,10,11,12,1])),"./solar_log/solar_log/device.vue":()=>e(()=>import("./device-DmTp-4Q0.js"),__vite__mapDeps([181,1,2,3])),"./solar_view/solar_view/device.vue":()=>e(()=>import("./device-D97fwZ97.js"),__vite__mapDeps([182,1,2,3])),"./solar_view/solar_view/inverter.vue":()=>e(()=>import("./inverter-D9Q2ncuJ.js"),__vite__mapDeps([183,2,3,5,6,7,8,9,10,11,12,1])),"./solar_watt/solar_watt/device.vue":()=>e(()=>import("./device-D_Qh4d0E.js"),__vite__mapDeps([184,1,2,3])),"./solar_world/solar_world/device.vue":()=>e(()=>import("./device-B2BXKGVF.js"),__vite__mapDeps([185,1,2,3])),"./solaredge/solaredge/bat.vue":()=>e(()=>import("./bat-DhhpO0HZ.js"),__vite__mapDeps([186,2,3,5,6,7,8,9,10,11,12,1])),"./solaredge/solaredge/counter.vue":()=>e(()=>import("./counter-CFIj1r_a.js"),__vite__mapDeps([187,2,3,5,6,7,8,9,10,11,12,1])),"./solaredge/solaredge/device.vue":()=>e(()=>import("./device-CFv91Hst.js"),__vite__mapDeps([188,1,2,3])),"./solaredge/solaredge/external_inverter.vue":()=>e(()=>import("./external_inverter-DswOUFNu.js"),__vite__mapDeps([189,2,3,5,6,7,8,9,10,11,12,1])),"./solaredge/solaredge/inverter.vue":()=>e(()=>import("./inverter-CtXYfZIc.js"),__vite__mapDeps([190,2,3,5,6,7,8,9,10,11,12,1])),"./solarmax/solarmax/bat.vue":()=>e(()=>import("./bat-Dn2ap8yL.js"),__vite__mapDeps([191,2,3,5,6,7,8,9,10,11,12,1])),"./solarmax/solarmax/counter_maxstorage.vue":()=>e(()=>import("./counter_maxstorage-BeIa9tEz.js"),__vite__mapDeps([192,2,3,5,6,7,8,9,10,11,12,1])),"./solarmax/solarmax/device.vue":()=>e(()=>import("./device--8PbFL3K.js"),__vite__mapDeps([193,1,2,3])),"./solarmax/solarmax/inverter.vue":()=>e(()=>import("./inverter-C-IPT7iP.js"),__vite__mapDeps([194,2,3,5,6,7,8,9,10,11,12,1])),"./solarmax/solarmax/inverter_maxstorage.vue":()=>e(()=>import("./inverter_maxstorage-DbnWXUyZ.js"),__vite__mapDeps([195,2,3,5,6,7,8,9,10,11,12,1])),"./solax/solax/device.vue":()=>e(()=>import("./device-BP1KJA6p.js"),__vite__mapDeps([196,1,2,3])),"./solis/solis/bat.vue":()=>e(()=>import("./bat-Ch4AmBy2.js"),__vite__mapDeps([197,2,3,5,6,7,8,9,10,11,12,1])),"./solis/solis/counter.vue":()=>e(()=>import("./counter-vb8LubPS.js"),__vite__mapDeps([198,2,3,5,6,7,8,9,10,11,12,1])),"./solis/solis/device.vue":()=>e(()=>import("./device-DjnKnvxd.js"),__vite__mapDeps([199,1,2,3])),"./solis/solis/inverter.vue":()=>e(()=>import("./inverter-CrSs7KEe.js"),__vite__mapDeps([200,2,3,5,6,7,8,9,10,11,12,1])),"./sonnen/sonnenbatterie/bat.vue":()=>e(()=>import("./bat-kdg96xqY.js"),__vite__mapDeps([201,2,3,5,6,7,8,9,10,11,12,1])),"./sonnen/sonnenbatterie/counter.vue":()=>e(()=>import("./counter-DzMp9bF4.js"),__vite__mapDeps([202,2,3,5,6,7,8,9,10,11,12,1])),"./sonnen/sonnenbatterie/counter_consumption.vue":()=>e(()=>import("./counter_consumption-CKJwpn1V.js"),__vite__mapDeps([203,2,3,5,6,7,8,9,10,11,12,1])),"./sonnen/sonnenbatterie/device.vue":()=>e(()=>import("./device-BQKDm_yK.js"),__vite__mapDeps([204,1,2,3])),"./studer/studer/bat.vue":()=>e(()=>import("./bat-aqbKfMAA.js"),__vite__mapDeps([205,2,3,5,6,7,8,9,10,11,12,1])),"./studer/studer/device.vue":()=>e(()=>import("./device-DMnSEPnd.js"),__vite__mapDeps([206,1,2,3])),"./studer/studer/inverter.vue":()=>e(()=>import("./inverter-SRAKxWUU.js"),__vite__mapDeps([207,2,3,5,6,7,8,9,10,11,12,1])),"./sunenergyxt/sunenergyxt/device.vue":()=>e(()=>import("./device-CePtNibg.js"),__vite__mapDeps([208,1,2,3])),"./sungrow/sungrow_ihm/device.vue":()=>e(()=>import("./device-1rlXvG7o.js"),__vite__mapDeps([209,1,2,3])),"./sungrow/sungrow_micro/device.vue":()=>e(()=>import("./device-ap_aIxcd.js"),__vite__mapDeps([210,1,2,3])),"./sungrow/sungrow_sg/device.vue":()=>e(()=>import("./device-CZWl8ObD.js"),__vite__mapDeps([211,1,2,3])),"./sungrow/sungrow_sh/device.vue":()=>e(()=>import("./device-CB23bxqx.js"),__vite__mapDeps([212,1,2,3])),"./sunways/sunways/device.vue":()=>e(()=>import("./device-DDCqw8SU.js"),__vite__mapDeps([213,1,2,3])),"./tasmota/tasmota/device.vue":()=>e(()=>import("./device-Wiugpl0X.js"),__vite__mapDeps([214,1,2,3])),"./tesla/tesla/counter.vue":()=>e(()=>import("./counter-BqJTf7FZ.js"),__vite__mapDeps([215,2,3,5,6,7,8,9,10,11,12,1])),"./tesla/tesla/device.vue":()=>e(()=>import("./device-oF88OjWr.js"),__vite__mapDeps([216,1,2,3])),"./thermia/thermia/counter.vue":()=>e(()=>import("./counter-CyM-43Cx.js"),__vite__mapDeps([217,2,3,5,6,7,8,9,10,11,12,1])),"./thermia/thermia/device.vue":()=>e(()=>import("./device-RdsB0ti4.js"),__vite__mapDeps([218,1,2,3])),"./upower/upower/device.vue":()=>e(()=>import("./device-S7xoJYQU.js"),__vite__mapDeps([219,1,2,3])),"./varta/varta/device.vue":()=>e(()=>import("./device-D0qPaH_i.js"),__vite__mapDeps([220,1,2,3])),"./varta/varta/inverter.vue":()=>e(()=>import("./inverter-Bn2pFrXI.js"),__vite__mapDeps([221,2,3,5,6,7,8,9,10,11,12,1])),"./victron/victron/bat.vue":()=>e(()=>import("./bat-m8eGk9pU.js"),__vite__mapDeps([222,2,3,5,6,7,8,9,10,11,12,1])),"./victron/victron/counter.vue":()=>e(()=>import("./counter-DSstM-sV.js"),__vite__mapDeps([223,2,3,5,6,7,8,9,10,11,12,1])),"./victron/victron/device.vue":()=>e(()=>import("./device-DyNIhzeY.js"),__vite__mapDeps([224,1,2,3])),"./victron/victron/inverter.vue":()=>e(()=>import("./inverter-BY4QGubE.js"),__vite__mapDeps([225,2,3,5,6,7,8,9,10,11,12,1])),"./victron/victron_3p75ct/device.vue":()=>e(()=>import("./device-0R3TseqV.js"),__vite__mapDeps([226,1,2,3])),"./vzlogger/vzlogger/counter.vue":()=>e(()=>import("./counter-CmhagnH8.js"),__vite__mapDeps([227,2,3,5,6,7,8,9,10,11,12,1])),"./vzlogger/vzlogger/device.vue":()=>e(()=>import("./device-DKtpZs7X.js"),__vite__mapDeps([228,1,2,3])),"./vzlogger/vzlogger/inverter.vue":()=>e(()=>import("./inverter-D5BodfIi.js"),__vite__mapDeps([229,2,3,5,6,7,8,9,10,11,12,1])),"./youless/youless/device.vue":()=>e(()=>import("./device-hKSMI4zZ.js"),__vite__mapDeps([230,1,2,3])),"./youless/youless/inverter.vue":()=>e(()=>import("./inverter-B_S53BXW.js"),__vite__mapDeps([231,2,3,5,6,7,8,9,10,11,12,1])),"./zendure/zendure/bat.vue":()=>e(()=>import("./bat-BHkM8d9j.js"),__vite__mapDeps([232,2,3,5,6,7,8,9,10,11,12,1])),"./zendure/zendure/counter.vue":()=>e(()=>import("./counter-DPbtpjhP.js"),__vite__mapDeps([233,2,3,5,6,7,8,9,10,11,12,1])),"./zendure/zendure/device.vue":()=>e(()=>import("./device-CHU8Jgeh.js"),__vite__mapDeps([234,1,2,3])),"./zendure/zendure/inverter.vue":()=>e(()=>import("./inverter-yd8WQcwg.js"),__vite__mapDeps([235,2,3,5,6,7,8,9,10,11,12,1]))}),`./${this.device?.vendor}/${this.device?.type}/${this.component?.type}.vue`,4),errorComponent:me}):C({loader:()=>z(Object.assign({"./algodue/algodue/device.vue":()=>e(()=>import("./device-DHB2lzzG.js"),__vite__mapDeps([0,1,2,3])),"./alpha_ess/alpha_ess/device.vue":()=>e(()=>import("./device-Bmiwd3r6.js"),__vite__mapDeps([13,1,2,3])),"./ampere/ampere/device.vue":()=>e(()=>import("./device-Chn2mfBF.js"),__vite__mapDeps([14,1,2,3])),"./anker/smartmeter_gen2/device.vue":()=>e(()=>import("./device-Du5x1ttW.js"),__vite__mapDeps([15,1,2,3])),"./anker/solarbank/device.vue":()=>e(()=>import("./device-DCCgNY-n.js"),__vite__mapDeps([16,1,2,3])),"./avm/avm/device.vue":()=>e(()=>import("./device-C-VdYO_S.js"),__vite__mapDeps([18,1,2,3])),"./azzurro_zcs/azzurro_zcs/device.vue":()=>e(()=>import("./device-CUsU7GEo.js"),__vite__mapDeps([19,1,2,3])),"./azzurro_zcs/azzurro_zcs_3p/device.vue":()=>e(()=>import("./device-qM6Ow-QZ.js"),__vite__mapDeps([20,1,2,3])),"./batterx/batterx/device.vue":()=>e(()=>import("./device-D0NVBx3_.js"),__vite__mapDeps([22,1,2,3])),"./benning/benning/device.vue":()=>e(()=>import("./device-CyemJxTG.js"),__vite__mapDeps([23,1,2,3])),"./byd/byd/device.vue":()=>e(()=>import("./device-CWvuKt9H.js"),__vite__mapDeps([25,1,2,3])),"./carlo_gavazzi/carlo_gavazzi/device.vue":()=>e(()=>import("./device-Hl-FIG_-.js"),__vite__mapDeps([27,1,2,3])),"./chint/chint/device.vue":()=>e(()=>import("./device-CwrJywgw.js"),__vite__mapDeps([29,1,2,3])),"./deye/deye/device.vue":()=>e(()=>import("./device-BfuV33Ny.js"),__vite__mapDeps([32,1,2,3])),"./deye/deye_solarman/device.vue":()=>e(()=>import("./device-CME_IE2O.js"),__vite__mapDeps([34,1,2,3])),"./discovergy/discovergy/device.vue":()=>e(()=>import("./device-B2ATC70N.js"),__vite__mapDeps([36,1,2,3])),"./e3dc/e3dc/device.vue":()=>e(()=>import("./device-Drtgd5P3.js"),__vite__mapDeps([38,1,2,3])),"./ecoflow/stream/device.vue":()=>e(()=>import("./device-CnnZ5HDz.js"),__vite__mapDeps([39,1,2,3])),"./elgris/elgris/device.vue":()=>e(()=>import("./device-D93KyX8z.js"),__vite__mapDeps([40,1,2,3])),"./enecess/ecomain/device.vue":()=>e(()=>import("./device-C7upWp-n.js"),__vite__mapDeps([42,1,2,3])),"./enphase/enphase/device.vue":()=>e(()=>import("./device-BeTvjVsI.js"),__vite__mapDeps([45,1,2,3])),"./fems/fems/device.vue":()=>e(()=>import("./device-LwKhWIDy.js"),__vite__mapDeps([48,1,2,3])),"./fox_ess/fox_ess/device.vue":()=>e(()=>import("./device-CX9F2w1R.js"),__vite__mapDeps([51,1,2,3])),"./fox_ess/fox_ess_h3_smart/device.vue":()=>e(()=>import("./device-DFeFqcPa.js"),__vite__mapDeps([55,1,2,3])),"./fronius/fronius_http_api/device.vue":()=>e(()=>import("./device-CpVp0tJY.js"),__vite__mapDeps([59,1,2,3])),"./fronius/fronius_sunspec/device.vue":()=>e(()=>import("./device-h744ldQG.js"),__vite__mapDeps([63,1,2,3])),"./generic/http/device.vue":()=>e(()=>import("./device-DxS-IR5M.js"),__vite__mapDeps([67,1,2,3])),"./generic/json/device.vue":()=>e(()=>import("./device-BjmcAYaW.js"),__vite__mapDeps([71,1,2,3])),"./generic/modbus/device.vue":()=>e(()=>import("./device-D7XDJsSX.js"),__vite__mapDeps([78,1,2,3])),"./generic/mqtt/device.vue":()=>e(()=>import("./device-B7mQquwz.js"),__vite__mapDeps([83,1,2,3])),"./good_we/good_we/device.vue":()=>e(()=>import("./device-D-HB7yYz.js"),__vite__mapDeps([87,1,2,3])),"./growatt/growatt/device.vue":()=>e(()=>import("./device-BjH2i3dR.js"),__vite__mapDeps([88,1,2,3])),"./huawei/huawei/device.vue":()=>e(()=>import("./device-By62nPmK.js"),__vite__mapDeps([89,1,2,3])),"./huawei/huawei_emma/device.vue":()=>e(()=>import("./device-BMh4AbeD.js"),__vite__mapDeps([90,1,2,3])),"./huawei/huawei_smartlogger/device.vue":()=>e(()=>import("./device-D7FS6Gp8.js"),__vite__mapDeps([93,1,2,3])),"./idm/idm/device.vue":()=>e(()=>import("./device-DVfJuzkE.js"),__vite__mapDeps([95,1,2,3])),"./janitza/janitza/device.vue":()=>e(()=>import("./device-CzW27uID.js"),__vite__mapDeps([97,1,2,3])),"./kaco/kaco_nh/device.vue":()=>e(()=>import("./device-CaZSyW6k.js"),__vite__mapDeps([100,1,2,3])),"./kaco/kaco_tx/device.vue":()=>e(()=>import("./device-BKrVP95F.js"),__vite__mapDeps([102,1,2,3])),"./kostal/kostal_piko/device.vue":()=>e(()=>import("./device-BnxKSgH8.js"),__vite__mapDeps([106,1,2,3])),"./kostal/kostal_piko_ci/device.vue":()=>e(()=>import("./device-DLmN6zPE.js"),__vite__mapDeps([109,1,2,3])),"./kostal/kostal_piko_old/device.vue":()=>e(()=>import("./device-Di9i_dA8.js"),__vite__mapDeps([111,1,2,3])),"./kostal/kostal_plenticore/device.vue":()=>e(()=>import("./device-C0xDk0ts.js"),__vite__mapDeps([114,1,2,3])),"./kostal/kostal_sem/device.vue":()=>e(()=>import("./device-BSXhrs1Z.js"),__vite__mapDeps([116,1,2,3])),"./kostal/kostal_steca/device.vue":()=>e(()=>import("./device-Bx-PcB2n.js"),__vite__mapDeps([117,1,2,3])),"./lg/lg/device.vue":()=>e(()=>import("./device-CdePIfdb.js"),__vite__mapDeps([119,1,2,3])),"./marstek/venus_c_e/device.vue":()=>e(()=>import("./device-BnxT8JJ2.js"),__vite__mapDeps([121,1,2,3])),"./mtec/mtec/device.vue":()=>e(()=>import("./device-DA58b9nm.js"),__vite__mapDeps([124,1,2,3])),"./mystrom/mystrom/device.vue":()=>e(()=>import("./device-Bh86b_Z3.js"),__vite__mapDeps([126,1,2,3])),"./nibe/nibe/device.vue":()=>e(()=>import("./device-DdtU9l__.js"),__vite__mapDeps([128,1,2,3])),"./opendtu/opendtu/device.vue":()=>e(()=>import("./device-DQB3GNdG.js"),__vite__mapDeps([129,1,2,3])),"./openwb/openwb_flex/device.vue":()=>e(()=>import("./device-De_utEj4.js"),__vite__mapDeps([138,1,2,3])),"./openwb/openwb_flex_local/device.vue":()=>e(()=>import("./device-DBtCkhyu.js"),__vite__mapDeps([141,1,2,3])),"./orno/orno/device.vue":()=>e(()=>import("./device-DVMfFy_D.js"),__vite__mapDeps([144,1,2,3])),"./powerdog/powerdog/device.vue":()=>e(()=>import("./device-9hZ9C-_o.js"),__vite__mapDeps([146,1,2,3])),"./powerfox/powerfox/device.vue":()=>e(()=>import("./device-BtMlWIlE.js"),__vite__mapDeps([148,1,2,3])),"./qcells/qcells/device.vue":()=>e(()=>import("./device-N4SVn9jC.js"),__vite__mapDeps([151,1,2,3])),"./rct/rct/device.vue":()=>e(()=>import("./device-GN_GKnJc.js"),__vite__mapDeps([152,1,2,3])),"./saxpower/saxpower/device.vue":()=>e(()=>import("./device-BtAcz1pD.js"),__vite__mapDeps([154,1,2,3])),"./shelly/shelly/device.vue":()=>e(()=>import("./device-D8Ube9qm.js"),__vite__mapDeps([156,1,2,3])),"./siemens/siemens/device.vue":()=>e(()=>import("./device-BW_zyWYf.js"),__vite__mapDeps([157,1,2,3])),"./siemens/siemens_sentron/device.vue":()=>e(()=>import("./device-Ct0EL_5c.js"),__vite__mapDeps([158,1,2,3])),"./sigenergy/sigenergy/device.vue":()=>e(()=>import("./device-BObe7-fT.js"),__vite__mapDeps([161,1,2,3])),"./sma/sma_sunny_boy/device.vue":()=>e(()=>import("./device-Cae8kKJA.js"),__vite__mapDeps([167,1,2,3])),"./sma/sma_sunny_island/device.vue":()=>e(()=>import("./device-Bm5lJk-e.js"),__vite__mapDeps([170,1,2,3])),"./sma/sma_webbox/device.vue":()=>e(()=>import("./device-YYGO4kNw.js"),__vite__mapDeps([171,1,2,3])),"./smart_me/smart_me/device.vue":()=>e(()=>import("./device-Dnz-lfZw.js"),__vite__mapDeps([173,1,2,3])),"./smartfox/smartfox/device.vue":()=>e(()=>import("./device-o4cJfonB.js"),__vite__mapDeps([175,1,2,3])),"./sofar/sofar/device.vue":()=>e(()=>import("./device-CBzzuPPX.js"),__vite__mapDeps([176,1,2,3])),"./solakon/solakon_one/device.vue":()=>e(()=>import("./device-Du21jRtu.js"),__vite__mapDeps([178,1,2,3])),"./solar_log/solar_log/device.vue":()=>e(()=>import("./device-DmTp-4Q0.js"),__vite__mapDeps([181,1,2,3])),"./solar_view/solar_view/device.vue":()=>e(()=>import("./device-D97fwZ97.js"),__vite__mapDeps([182,1,2,3])),"./solar_watt/solar_watt/device.vue":()=>e(()=>import("./device-D_Qh4d0E.js"),__vite__mapDeps([184,1,2,3])),"./solar_world/solar_world/device.vue":()=>e(()=>import("./device-B2BXKGVF.js"),__vite__mapDeps([185,1,2,3])),"./solaredge/solaredge/device.vue":()=>e(()=>import("./device-CFv91Hst.js"),__vite__mapDeps([188,1,2,3])),"./solarmax/solarmax/device.vue":()=>e(()=>import("./device--8PbFL3K.js"),__vite__mapDeps([193,1,2,3])),"./solax/solax/device.vue":()=>e(()=>import("./device-BP1KJA6p.js"),__vite__mapDeps([196,1,2,3])),"./solis/solis/device.vue":()=>e(()=>import("./device-DjnKnvxd.js"),__vite__mapDeps([199,1,2,3])),"./sonnen/sonnenbatterie/device.vue":()=>e(()=>import("./device-BQKDm_yK.js"),__vite__mapDeps([204,1,2,3])),"./studer/studer/device.vue":()=>e(()=>import("./device-DMnSEPnd.js"),__vite__mapDeps([206,1,2,3])),"./sunenergyxt/sunenergyxt/device.vue":()=>e(()=>import("./device-CePtNibg.js"),__vite__mapDeps([208,1,2,3])),"./sungrow/sungrow_ihm/device.vue":()=>e(()=>import("./device-1rlXvG7o.js"),__vite__mapDeps([209,1,2,3])),"./sungrow/sungrow_micro/device.vue":()=>e(()=>import("./device-ap_aIxcd.js"),__vite__mapDeps([210,1,2,3])),"./sungrow/sungrow_sg/device.vue":()=>e(()=>import("./device-CZWl8ObD.js"),__vite__mapDeps([211,1,2,3])),"./sungrow/sungrow_sh/device.vue":()=>e(()=>import("./device-CB23bxqx.js"),__vite__mapDeps([212,1,2,3])),"./sunways/sunways/device.vue":()=>e(()=>import("./device-DDCqw8SU.js"),__vite__mapDeps([213,1,2,3])),"./tasmota/tasmota/device.vue":()=>e(()=>import("./device-Wiugpl0X.js"),__vite__mapDeps([214,1,2,3])),"./tesla/tesla/device.vue":()=>e(()=>import("./device-oF88OjWr.js"),__vite__mapDeps([216,1,2,3])),"./thermia/thermia/device.vue":()=>e(()=>import("./device-RdsB0ti4.js"),__vite__mapDeps([218,1,2,3])),"./upower/upower/device.vue":()=>e(()=>import("./device-S7xoJYQU.js"),__vite__mapDeps([219,1,2,3])),"./varta/varta/device.vue":()=>e(()=>import("./device-D0qPaH_i.js"),__vite__mapDeps([220,1,2,3])),"./victron/victron/device.vue":()=>e(()=>import("./device-DyNIhzeY.js"),__vite__mapDeps([224,1,2,3])),"./victron/victron_3p75ct/device.vue":()=>e(()=>import("./device-0R3TseqV.js"),__vite__mapDeps([226,1,2,3])),"./vzlogger/vzlogger/device.vue":()=>e(()=>import("./device-DKtpZs7X.js"),__vite__mapDeps([228,1,2,3])),"./youless/youless/device.vue":()=>e(()=>import("./device-hKSMI4zZ.js"),__vite__mapDeps([230,1,2,3])),"./zendure/zendure/device.vue":()=>e(()=>import("./device-CHU8Jgeh.js"),__vite__mapDeps([234,1,2,3]))}),`./${this.device?.vendor}/${this.device?.type}/device.vue`,4),errorComponent:ie})},updateConfiguration(t){this.$emit("update:configuration",t)}}};function ce(t,o,i,m,u,_){return a(),g(X(_.getComponent()),{device:i.device,component:i.component,"component-id":i.component?i.component.id:void 0,"component-type":i.component?i.component.type:void 0,"onUpdate:configuration":o[0]||(o[0]=c=>_.updateConfiguration(c))},null,40,["device","component","component-id","component-type"])}const le=P(pe,[["render",ce],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/OpenwbConfigProxy.vue"]]);N.add(H,K,G,F,J,Y,Z);const Ee={name:"OpenwbHardwareInstallationView",components:{FontAwesomeIcon:$,OpenwbConfigProxy:le},mixins:[Q],props:{installAssistantActive:{type:Boolean,required:!1,default:!1}},emits:["sendCommand","save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/counter/get/hierarchy",writeable:!1},{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/system/configurable/devices_components",writeable:!1},{topic:"openWB/system/device/+/component/+/config",writeable:!0},{topic:"openWB/system/device/+/config",writeable:!0},{topic:"openWB/chargepoint/+/config",writeable:!1}],selectedVendor:void 0,deviceToAdd:void 0,showDeviceRemoveModal:!1,modalDevice:void 0,modalDeviceName:"",componentToAdd:[],showComponentRemoveModal:!1,modalComponent:void 0,modalComponentName:""}},computed:{installedDevices(){const t=this.getWildcardTopics("openWB/system/device/+/config");return Object.fromEntries(Object.entries(t).filter(([,o])=>o&&typeof o=="object"))},installedComponents(){const t=this.getWildcardTopics("openWB/system/device/+/component/+/config");return Object.fromEntries(Object.entries(t).filter(([,o])=>o&&typeof o=="object"))},gridId(){let t=this.$store.state.mqtt["openWB/counter/get/hierarchy"];if(t!==void 0&&Object.keys(t).length>0){let o=Object.keys(this.$store.state.mqtt["openWB/counter/get/hierarchy"])[0];if(this.$store.state.mqtt["openWB/counter/get/hierarchy"][o].type=="counter")return this.$store.state.mqtt["openWB/counter/get/hierarchy"][o].id}},standaloneOnly(){const t=this.getWildcardTopics("openWB/chargepoint/+/config");return!Object.values(t).some(i=>i&&typeof i=="object"&&i.type==="internal_openwb")},vendorList:{get(){const t=this.$store.state.mqtt["openWB/system/configurable/devices_components"];return t?Object.entries(t).map(([o,i])=>{const m=i?.vendors||{};return{label:i?.group_name||"",options:Object.entries(m).map(([u,_])=>({value:[o,u],text:_?.vendor_name||""})).sort((u,_)=>u.text.localeCompare(_.text))}}).sort((o,i)=>-o.label.localeCompare(i.label)):[]}},deviceList:{get(){if(this.selectedVendor===void 0)return[];let[t,o]=this.selectedVendor;const i=this.$store.state.mqtt["openWB/system/configurable/devices_components"]?.[t]?.vendors?.[o]?.devices;return i?Object.entries(i).filter(([m])=>!this.isHiddenDevice(m)).map(([m,u])=>({value:[o,m],text:u.device_name})).sort((m,u)=>m.text.localeCompare(u.text)):[]}}},methods:{isHiddenDevice(t){return!this.standaloneOnly&&t==="openwb_flex_local"},getComponentTypeClass(t){return t.match(/^(.+_)?counter(_.+)?$/)?"danger":t.match(/^(.+_)?inverter(_.+)?$/)?"success":t.match(/^(.+_)?bat(_.+)?$/)?"warning":"dark"},getComponentDefaultColor(t){if(t.match(/^(.+_)?counter(_.+)?$/))return"#dc3545";if(t.match(/^(.+_)?inverter(_.+)?$/))return"#28a745";if(t.match(/^(.+_)?bat(_.+)?$/))return"#ffc107"},getComponentColorPalette(t){if(t.match(/^(.+_)?counter(_.+)?$/))return["#dc3545","#d32535","#c82333","#c01f2f","#bd2130","#b91f2d","#b21f2d","#ad1d2b","#a71d2a","#8f1923"];if(t.match(/^(.+_)?inverter(_.+)?$/))return["#28a745","#23913c","#218838","#1f8335","#1e7e34","#1d7a32","#1c7430","#186328","#155724","#12491f"];if(t.match(/^(.+_)?bat(_.+)?$/))return["#ffc107","#f2b701","#e0a800","#d9a400","#d39e00","#cd9a00","#c69500","#c08f00","#b8860b","#9d7309"]},getComponentTypeIcon(t){return t.match(/^(.+_)?counter(_.+)?$/)?["fas","fa-gauge-high"]:t.match(/^(.+_)?inverter(_.+)?$/)?["fas","fa-solar-panel"]:t.match(/^(.+_)?bat(_.+)?$/)?["fas","fa-car-battery"]:["fas","fa-microchip"]},getMyInstalledComponents(t){return this.getWildcardTopics("openWB/system/device/"+t+"/component/+/config")},deviceHasConfiguredComponents(t){return Object.keys(this.getMyInstalledComponents(t)).length>0},addDevice(){this.$emit("sendCommand",{command:"addDevice",data:{vendor:this.deviceToAdd[0],type:this.deviceToAdd[1]}})},removeDeviceModal(t,o,i){i.stopPropagation(),this.modalDevice=t,this.modalDeviceName=o,this.showDeviceRemoveModal=!0},removeDevice(t){this.showDeviceRemoveModal=!1,t=="confirm"&&this.$emit("sendCommand",{command:"removeDevice",data:{id:this.modalDevice}})},addComponent(t,o,i,m){this.$emit("sendCommand",{command:"addComponent",data:{deviceId:t,deviceType:i,deviceVendor:o,type:m}})},removeComponentModal(t,o,i,m,u){u.stopPropagation(),this.modalComponent={deviceId:t,id:o,type:i},this.modalComponentName=m,this.showComponentRemoveModal=!0},removeComponent(t){this.showComponentRemoveModal=!1,t=="confirm"&&this.$emit("sendCommand",{command:"removeComponent",data:this.modalComponent})},getComponentList(t,o){if(t===void 0||o===void 0)return[];let i=[];return Object.values(this.$store.state.mqtt["openWB/system/configurable/devices_components"]).every(m=>m.vendors[t]!==void 0?(m.vendors[t].devices[o]!==void 0&&(i=Object.entries(m.vendors[t].devices[o].components).map(([_,c])=>({value:_,text:c.component_name}))),!1):!0),i},updateConfiguration(t,o){console.debug("updateConfiguration",t,o),this.updateState(t,o.value,o.object)}}},ge={class:"hardwareInstallation"},Ve={name:"hardwareInstallationForm"},Oe={key:0},Ie={key:1},De={key:1},Te={key:0};function fe(t,o,i,m,u,_){const c=p("openwb-base-modal-dialog"),T=p("router-link"),D=p("openwb-base-alert"),f=p("font-awesome-icon"),b=p("openwb-base-avatar"),W=p("openwb-base-tooltip"),A=p("openwb-base-text-input"),x=p("openwb-config-proxy"),M=p("openwb-base-heading"),q=p("openwb-base-color-picker"),w=p("openwb-base-card"),h=p("openwb-base-select-input"),U=p("openwb-base-submit-buttons");return a(),V(L,null,[v(c,{show:u.showDeviceRemoveModal,title:"Gerät löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:_.removeDevice},{default:r(()=>[s(' Willst Du das Gerät "'+I(u.modalDeviceName)+'" inklusive aller Komponenten wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ',1)]),_:1},8,["show","onModalResult"]),v(c,{show:u.showComponentRemoveModal,title:"Komponente löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:_.removeComponent},{default:r(()=>[s(' Willst Du die Komponente "'+I(u.modalComponentName)+'" wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ',1)]),_:1},8,["show","onModalResult"]),l("div",ge,[l("form",Ve,[i.installAssistantActive?R("",!0):(a(),g(D,{key:0,subtype:"info"},{default:r(()=>[o[7]||(o[7]=s(" Wenn neue Komponenten - insbesondere Zähler - konfiguriert wurden, ist auch das ",-1)),v(T,{to:"/LoadManagementConfiguration"},{default:r(()=>[...o[6]||(o[6]=[s(" Lastmanagement ",-1)])]),_:1}),o[8]||(o[8]=s(" zu prüfen!",-1)),o[9]||(o[9]=l("br",null,null,-1)),o[10]||(o[10]=s(" Je nach Hersteller muss eventuell die Kommunikation im Wechselrichter freigegeben werden (z.B. Aktivierung von Modbus TCP, Portfreigaben o.Ä.) ",-1))]),_:1})),v(w,{title:"Geräte und Komponenten"},{default:r(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(a(),V("div",Oe,[v(D,{subtype:"info"},{default:r(()=>[...o[11]||(o[11]=[s(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(a(),V("div",Ie,[(a(!0),V(L,null,k(_.installedDevices,(n,y)=>(a(),g(w,{key:y,collapsible:!0,collapsed:!0,subtype:"dark"},{header:r(()=>[v(f,{icon:["fas","network-wired"]}),s(" "+I(n?.name),1)]),actions:r(d=>[d.collapsed?(a(),V("div",De,[(a(!0),V(L,null,k(_.getMyInstalledComponents(n?.id),E=>(a(),g(b,{key:E?.id,class:"ml-1",style:B({backgroundColor:E?.color,color:t.getContrastColor(E?.color)})},{default:r(()=>[v(W,{description:E?.name},{default:r(()=>[v(f,{icon:_.getComponentTypeIcon(E?.type)},null,8,["icon"])]),_:2},1032,["description"])]),_:2},1032,["style"]))),128))])):(a(),g(b,{key:0,class:"bg-danger clickable",onClick:E=>_.removeDeviceModal(n?.id,n?.name,E)},{default:r(()=>[v(f,{icon:["fas","trash"]})]),_:1},8,["onClick"]))]),default:r(()=>[v(A,{title:"Bezeichnung",subtype:"text","model-value":n?.name,"onUpdate:modelValue":d=>t.updateState(y,d,"name")},null,8,["model-value","onUpdate:modelValue"]),o[19]||(o[19]=l("hr",null,null,-1)),v(x,{device:n,"onUpdate:configuration":d=>_.updateConfiguration(y,d)},null,8,["device","onUpdate:configuration"]),o[20]||(o[20]=l("hr",null,null,-1)),v(M,null,{default:r(()=>[...o[12]||(o[12]=[s("Komponenten",-1)])]),_:1}),_.deviceHasConfiguredComponents(n?.id)?R("",!0):(a(),g(D,{key:0,subtype:"warning"},{default:r(()=>[...o[13]||(o[13]=[s(" Es wurden noch keine Komponenten zu diesem Gerät angelegt. ",-1)])]),_:1})),(a(!0),V(L,null,k(_.getMyInstalledComponents(n?.id),(d,E)=>(a(),g(w,{key:d?.id,collapsible:!0,collapsed:!0,subtype:_.getComponentTypeClass(d?.type)},{header:r(()=>[v(f,{icon:_.getComponentTypeIcon(d?.type),class:"fa-border",style:B({backgroundColor:d?.color,color:t.getContrastColor(d?.color),"--fa-border-color":t.getContrastColor(d?.color)})},null,8,["icon","style"]),s(" "+I(d?.name),1)]),actions:r(O=>[O.collapsed?R("",!0):(a(),g(b,{key:0,class:"bg-danger clickable",onClick:S=>_.removeComponentModal(n?.id,d?.id,d?.type,d?.name,S)},{default:r(()=>[v(f,{icon:["fas","trash"]})]),_:1},8,["onClick"]))]),default:r(()=>[v(A,{title:"Bezeichnung",subtype:"text","model-value":d?.name,"onUpdate:modelValue":O=>t.updateState(E,O,"name")},ee({_:2},[d?.type?.toLowerCase().includes("counter")?{name:"append",fn:r(()=>[v(q,{class:"p-1","model-value":d?.color,"default-color":_.getComponentDefaultColor(d?.type),"color-palette":_.getComponentColorPalette(d?.type),disabled:d?.id===_.gridId,"onUpdate:modelValue":O=>t.updateState(E,O,"color")},null,8,["model-value","default-color","color-palette","disabled","onUpdate:modelValue"])]),key:"0"}:void 0]),1032,["model-value","onUpdate:modelValue"]),v(A,{title:"Hersteller",subtype:"text","model-value":d?.info.manufacturer,"onUpdate:modelValue":O=>t.updateState(E,O,"info.manufacturer")},{help:r(()=>[...o[14]||(o[14]=[s(" Optional: zusätzliche Information für den Systembericht. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),v(A,{title:"Modell",subtype:"text","model-value":d?.info.model,"onUpdate:modelValue":O=>t.updateState(E,O,"info.model")},{help:r(()=>[...o[15]||(o[15]=[s(" Optional: zusätzliche Information für den Systembericht. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),o[16]||(o[16]=l("hr",null,null,-1)),v(x,{device:n,component:d,"onUpdate:configuration":O=>_.updateConfiguration(E,O)},null,8,["device","component","onUpdate:configuration"])]),_:2},1032,["subtype"]))),128)),o[21]||(o[21]=l("hr",null,null,-1)),_.getComponentList(n?.vendor,n?.type)?.length?(a(),g(h,{key:1,title:"Verfügbare Komponenten","not-selected":"Bitte auswählen",options:_.getComponentList(n?.vendor,n?.type),"model-value":u.componentToAdd[n?.id],"add-button":!0,"onUpdate:modelValue":d=>u.componentToAdd[n?.id]=d,"onInput:add":d=>_.addComponent(n?.id,n?.vendor,n?.type,u.componentToAdd[n?.id])},{help:r(()=>[...o[17]||(o[17]=[s(" Bitte eine Komponente auswählen, die hinzugefügt werden soll. Für jeden Datensatz, z.B. Wechselrichter- und Batteriedaten, muss eine Wechselrichter- und eine Batteriekomponente hinzugefügt werden. ",-1)])]),_:1},8,["options","model-value","onUpdate:modelValue","onInput:add"])):(a(),g(D,{key:2,subtype:"info"},{default:r(()=>[...o[18]||(o[18]=[s(" Dieses System bietet keine Komponenten zur Installation an. ",-1)])]),_:1}))]),_:2},1024))),128)),Object.keys(_.installedDevices)?.length>0?(a(),V("hr",Te)):R("",!0),v(h,{modelValue:u.selectedVendor,"onUpdate:modelValue":o[0]||(o[0]=n=>u.selectedVendor=n),title:"Hersteller","not-selected":"Bitte auswählen",groups:_.vendorList},null,8,["modelValue","groups"]),v(h,{modelValue:u.deviceToAdd,"onUpdate:modelValue":[o[1]||(o[1]=n=>u.deviceToAdd=n),o[2]||(o[2]=n=>u.deviceToAdd=n)],title:"Verfügbare Geräte","not-selected":"Bitte auswählen",disabled:u.selectedVendor===void 0,options:_.deviceList,"model-value":u.deviceToAdd,"add-button":!0,"onInput:add":_.addDevice},{help:r(()=>[...o[22]||(o[22]=[l("p",null,[s(' Die openWB-Regelung ist auf Werte von Messpunkten (Zähler, Energy Meter usw.) angewiesen. Hierfür werden "Geräte" und "Komponenten" verwendet.'),l("br"),s(' Ein "Gerät" wird hierbei durch seine Verbindungseinstellungen (z.B. IP-Adresse) spezifiziert (häufig durch manuelle Eingabe oder manchmal automatisch ermittelt) und kann über mehrere untergeordnete "Komponenten" verfügen, z.B. einen Messpunkt für PV-Erzeugung, einen Messpunkt für Netzeinspeisung/-bezug am EVU-Punkt usw.. Ein "Gerät" bedingt somit immer mindestens eine zugehörige "Komponente". ')],-1),l("p",null,[s(' Bsp: Werden die Werte von verschiedenen Messpunkten (z.B. PV und EVU) über die gleiche IP-Adresse abgefragt, wird dafür ein "Gerät" mit zwei "Komponenten" für PV- und EVU- Messpunkt angelegt.'),l("br"),s(' Verfügt dagegen jeder Messpunkt über eine eigene IP-Adresse, wird jeder Messpunkt als eigenes "Gerät" mit nur einer "Komponente" angelegt. ')],-1),l("p",null,' Das "Gerät" wird in der Dropdown-Liste ausgewählt und mit "+" der Regelung hinzugefügt. Im Anschluss erfolgt die Konfiguration des "Gerätes" innerhalb des schwarzen "Geräte"-Reiters. ',-1)])]),_:1},8,["modelValue","disabled","options","model-value","onInput:add"])]))]),_:1}),v(U,{"form-name":"hardwareInstallationForm",onSave:o[3]||(o[3]=n=>t.$emit("save",t.mqttTopicsToPublish)),onReset:o[4]||(o[4]=n=>t.$emit("reset")),onDefaults:o[5]||(o[5]=n=>t.$emit("defaults"))})])])],64)}const Pe=P(Ee,[["render",fe],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/HardwareInstallation.vue"]]),he=Object.freeze(Object.defineProperty({__proto__:null,default:Pe},Symbol.toStringTag,{value:"Module"}));export{ue as C,Pe as H,he as a}; diff --git a/web/settings/assets/IdentificationConfiguration-DeRAwqIq.js b/web/settings/assets/IdentificationConfiguration-BYqaURSL.js similarity index 99% rename from web/settings/assets/IdentificationConfiguration-DeRAwqIq.js rename to web/settings/assets/IdentificationConfiguration-BYqaURSL.js index 7c22e634b2..1fac4cd169 100644 --- a/web/settings/assets/IdentificationConfiguration-DeRAwqIq.js +++ b/web/settings/assets/IdentificationConfiguration-BYqaURSL.js @@ -1,2 +1,2 @@ -import{F as _,l as D,a6 as q}from"./vendor-fortawesome-DplTMxoa.js";import{C as F}from"./index-Bv2WLdLZ.js";import{S as I}from"./SystemVersion-eCZ4XHiC.js";import{_ as L,m,l as o,f as l,y as s,q as r,u as i,B as a,z as u,x as g,K as W,L as w,J as b,O as S}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";D.add(q);const V={name:"IdentificationConfigView",components:{FontAwesomeIcon:_},mixins:[F,I],emits:["save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/chargepoint/+/config",writeable:!1},{topic:"openWB/chargepoint/+/get/rfid",writeable:!1},{topic:"openWB/chargepoint/+/get/rfid_timestamp",writeable:!1},{topic:"openWB/chargepoint/+/get/vehicle_id",writeable:!1},{topic:"openWB/chargepoint/+/set/rfid",writeable:!1},{topic:"openWB/chargepoint/template/+",writeable:!0},{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/optional/rfid/active",writeable:!0},{topic:"openWB/vehicle/+/charge_template",writeable:!1},{topic:"openWB/vehicle/+/color",writeable:!1},{topic:"openWB/vehicle/+/name",writeable:!1},{topic:"openWB/vehicle/+/tag_id",writeable:!0},{topic:"openWB/vehicle/template/charge_template/+",writeable:!0}],tempIdTagList:{}}},computed:{idTagList(){return Object.values(this.updateIdTagList())},chargePointTemplates:{get(){return this.getWildcardTopics("openWB/chargepoint/template/+")}},vehicleIndexes:{get(){return this.getWildcardIndexList("openWB/vehicle/+/name")}}},methods:{getIdFromTopic(e){return e.match(/(?:\/)([0-9]+)(?=\/)*/g)[0].replace(/[^0-9]+/g,"")},updateIdTagList(){return Object.entries(this.getWildcardTopics("^openWB/chargepoint/[^+/]+/[gs]et/(rfid|vehicle_id)$",!0)).forEach(e=>{e[1]!==null&&(this.tempIdTagList[e[1]]=`${e[1]} (${e[0].includes("/set/")?"zugewiesen":"erfasst"} an ${this.getChargePointName(this.getIdFromTopic(e[0]))})`)}),this.tempIdTagList},getChargePointName(e){return this.$store.state.mqtt["openWB/chargepoint/"+e+"/config"]?this.$store.state.mqtt["openWB/chargepoint/"+e+"/config"].name:"Ladepunkt "+e},getChargePointTemplateIndex(e){return parseInt(e.match(/([^/]+)$/)[0])},getVehicleName(e){return this.$store.state.mqtt["openWB/vehicle/"+e+"/name"]?this.$store.state.mqtt["openWB/vehicle/"+e+"/name"]:"Fahrzeug "+e}}},T={class:"optionalComponents"},C={name:"optionalComponentsForm"},E=["href"],A={key:2},P={key:0},N={key:2},U={key:0};function Z(e,t,j,O,R,f){const d=m("openwb-base-alert"),h=m("openwb-base-button-group-input"),z=m("openwb-base-textarea"),v=m("openwb-base-card"),c=m("openwb-base-heading"),B=m("openwb-base-array-input"),$=m("font-awesome-icon"),y=m("openwb-base-submit-buttons");return o(),l("div",T,[s("form",C,[r(v,{title:"Identifikation"},{default:i(()=>[r(d,{subtype:"info"},{default:i(()=>[s("p",null,[t[4]||(t[4]=a(" Eine ausführliche Anleitung findest Du hier: ",-1)),s("a",{href:`https://wiki.openwb.de/doku.php?id=openwb:vc:${e.systemVersion}:software:einstell-konfig:einstellungen:identifikation`,target:"_blank",rel:"noopener noreferrer"}," Wiki-Beitrag zur Identifikation ",8,E)]),t[5]||(t[5]=a(" Die Identifikation kann zum Entsperren von Ladepunkten und/oder zur Zuordnung von Fahrzeugen genutzt werden und kann auf mehreren Wegen erfolgen: ",-1)),t[6]||(t[6]=s("ul",null,[s("li",null,"Über einen RFID-Reader (optional in der openWB verbaut, z.B. anhand des Lieferscheins prüfen)."),s("li",null," Durch die automatische Fahrzeugerkennung der openWB Pro/ Pro+ (in den Einstellungen der openWB Pro aktivieren). "),s("li",null,"Durch manuelle Eingabe einer ID an einer openWB mit Display.")],-1)),t[7]||(t[7]=s("p",null,"Bei openWB Pro/Pro+ werden RFID-Tags nur bei angestecktem Fahrzeug erfasst!",-1)),t[8]||(t[8]=s("p",null,[a(" Für die Erkennung kann auch ein Muster (mittels Wildcards) hinterlegt werden. Ein Fragezeichen (?) entspricht dabei einem Zeichen, ein Stern (*) beliebig vielen Zeichen. So ist bspw. die Erkennung von Fahrzeugen mit wechselnder ID (u.a. Fahrzeuge der VW Gruppe) möglich."),s("br"),a(" Es wird davon abgeraten, Muster für die Entsperrung von öffentlich zugänglichen Ladepunkten zu nutzen, um unbefugten Zugriff zu vermeiden. ")],-1))]),_:1}),r(h,{title:"Identifikation aktivieren","model-value":e.$store.state.mqtt["openWB/optional/rfid/active"],buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":t[0]||(t[0]=n=>e.updateState("openWB/optional/rfid/active",n))},null,8,["model-value"]),e.$store.state.mqtt["openWB/general/extern"]===!0?(o(),u(d,{key:0,subtype:"info",class:"mt-3"},{default:i(()=>[...t[9]||(t[9]=[a(' Weitere Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})):e.$store.state.mqtt["openWB/optional/rfid/active"]===!0?(o(),u(z,{key:1,title:"Erkannte ID-Tags",readonly:"",disabled:"","model-value":f.idTagList.join(` +import{F as _,l as D,a6 as q}from"./vendor-fortawesome-DplTMxoa.js";import{C as F}from"./index-CE-5DBwq.js";import{S as I}from"./SystemVersion-eCZ4XHiC.js";import{_ as L,m,l as o,f as l,y as s,q as r,u as i,B as a,z as u,x as g,K as W,L as w,J as b,O as S}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";D.add(q);const V={name:"IdentificationConfigView",components:{FontAwesomeIcon:_},mixins:[F,I],emits:["save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/chargepoint/+/config",writeable:!1},{topic:"openWB/chargepoint/+/get/rfid",writeable:!1},{topic:"openWB/chargepoint/+/get/rfid_timestamp",writeable:!1},{topic:"openWB/chargepoint/+/get/vehicle_id",writeable:!1},{topic:"openWB/chargepoint/+/set/rfid",writeable:!1},{topic:"openWB/chargepoint/template/+",writeable:!0},{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/optional/rfid/active",writeable:!0},{topic:"openWB/vehicle/+/charge_template",writeable:!1},{topic:"openWB/vehicle/+/color",writeable:!1},{topic:"openWB/vehicle/+/name",writeable:!1},{topic:"openWB/vehicle/+/tag_id",writeable:!0},{topic:"openWB/vehicle/template/charge_template/+",writeable:!0}],tempIdTagList:{}}},computed:{idTagList(){return Object.values(this.updateIdTagList())},chargePointTemplates:{get(){return this.getWildcardTopics("openWB/chargepoint/template/+")}},vehicleIndexes:{get(){return this.getWildcardIndexList("openWB/vehicle/+/name")}}},methods:{getIdFromTopic(e){return e.match(/(?:\/)([0-9]+)(?=\/)*/g)[0].replace(/[^0-9]+/g,"")},updateIdTagList(){return Object.entries(this.getWildcardTopics("^openWB/chargepoint/[^+/]+/[gs]et/(rfid|vehicle_id)$",!0)).forEach(e=>{e[1]!==null&&(this.tempIdTagList[e[1]]=`${e[1]} (${e[0].includes("/set/")?"zugewiesen":"erfasst"} an ${this.getChargePointName(this.getIdFromTopic(e[0]))})`)}),this.tempIdTagList},getChargePointName(e){return this.$store.state.mqtt["openWB/chargepoint/"+e+"/config"]?this.$store.state.mqtt["openWB/chargepoint/"+e+"/config"].name:"Ladepunkt "+e},getChargePointTemplateIndex(e){return parseInt(e.match(/([^/]+)$/)[0])},getVehicleName(e){return this.$store.state.mqtt["openWB/vehicle/"+e+"/name"]?this.$store.state.mqtt["openWB/vehicle/"+e+"/name"]:"Fahrzeug "+e}}},T={class:"optionalComponents"},C={name:"optionalComponentsForm"},E=["href"],A={key:2},P={key:0},N={key:2},U={key:0};function Z(e,t,j,O,R,f){const d=m("openwb-base-alert"),h=m("openwb-base-button-group-input"),z=m("openwb-base-textarea"),v=m("openwb-base-card"),c=m("openwb-base-heading"),B=m("openwb-base-array-input"),$=m("font-awesome-icon"),y=m("openwb-base-submit-buttons");return o(),l("div",T,[s("form",C,[r(v,{title:"Identifikation"},{default:i(()=>[r(d,{subtype:"info"},{default:i(()=>[s("p",null,[t[4]||(t[4]=a(" Eine ausführliche Anleitung findest Du hier: ",-1)),s("a",{href:`https://wiki.openwb.de/doku.php?id=openwb:vc:${e.systemVersion}:software:einstell-konfig:einstellungen:identifikation`,target:"_blank",rel:"noopener noreferrer"}," Wiki-Beitrag zur Identifikation ",8,E)]),t[5]||(t[5]=a(" Die Identifikation kann zum Entsperren von Ladepunkten und/oder zur Zuordnung von Fahrzeugen genutzt werden und kann auf mehreren Wegen erfolgen: ",-1)),t[6]||(t[6]=s("ul",null,[s("li",null,"Über einen RFID-Reader (optional in der openWB verbaut, z.B. anhand des Lieferscheins prüfen)."),s("li",null," Durch die automatische Fahrzeugerkennung der openWB Pro/ Pro+ (in den Einstellungen der openWB Pro aktivieren). "),s("li",null,"Durch manuelle Eingabe einer ID an einer openWB mit Display.")],-1)),t[7]||(t[7]=s("p",null,"Bei openWB Pro/Pro+ werden RFID-Tags nur bei angestecktem Fahrzeug erfasst!",-1)),t[8]||(t[8]=s("p",null,[a(" Für die Erkennung kann auch ein Muster (mittels Wildcards) hinterlegt werden. Ein Fragezeichen (?) entspricht dabei einem Zeichen, ein Stern (*) beliebig vielen Zeichen. So ist bspw. die Erkennung von Fahrzeugen mit wechselnder ID (u.a. Fahrzeuge der VW Gruppe) möglich."),s("br"),a(" Es wird davon abgeraten, Muster für die Entsperrung von öffentlich zugänglichen Ladepunkten zu nutzen, um unbefugten Zugriff zu vermeiden. ")],-1))]),_:1}),r(h,{title:"Identifikation aktivieren","model-value":e.$store.state.mqtt["openWB/optional/rfid/active"],buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":t[0]||(t[0]=n=>e.updateState("openWB/optional/rfid/active",n))},null,8,["model-value"]),e.$store.state.mqtt["openWB/general/extern"]===!0?(o(),u(d,{key:0,subtype:"info",class:"mt-3"},{default:i(()=>[...t[9]||(t[9]=[a(' Weitere Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})):e.$store.state.mqtt["openWB/optional/rfid/active"]===!0?(o(),u(z,{key:1,title:"Erkannte ID-Tags",readonly:"",disabled:"","model-value":f.idTagList.join(` `)},null,8,["model-value"])):g("",!0)]),_:1}),r(c,null,{default:i(()=>[...t[10]||(t[10]=[a(" Entsperren von Ladepunkten (gekoppelt an Ladepunkt-Profil) ",-1)])]),_:1}),r(v,{title:"Ladepunkt-Profile",collapsible:!0,collapsed:!0},{default:i(()=>[e.$store.state.mqtt["openWB/general/extern"]===!0?(o(),u(d,{key:0,subtype:"info"},{default:i(()=>[...t[11]||(t[11]=[a(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet.',-1),s("br",null,null,-1),a(' Die Konfiguration zum Entsperren von Ladepunkten bitte auf der "primary" openWB durchführen. ',-1)])]),_:1})):e.$store.state.mqtt["openWB/optional/rfid/active"]===!1?(o(),u(d,{key:1,subtype:"info"},{default:i(()=>[...t[12]||(t[12]=[a(" Diese Einstellungen sind nur verfügbar, wenn Identifikation aktiviert ist. ",-1)])]),_:1})):(o(),l("div",A,[r(d,{subtype:"info"},{default:i(()=>[...t[13]||(t[13]=[a(" Hier zugeordnete ID-Tags entsperren beim Scannen das jeweilige Ladepunkt-Profil. Der ID-Tag kann an jedem Ladepunkt genutzt werden, dem das entsprechende Ladepunkt-Profil zugeordnet wurde. ",-1)])]),_:1}),(o(!0),l(W,null,w(f.chargePointTemplates,(n,p)=>(o(),l("div",{key:p},[f.getChargePointTemplateIndex(p)!=0?(o(),l("hr",P)):g("",!0),r(c,{class:"mt-0"},{default:i(()=>[a(b(n.name),1)]),_:2},1024),e.$store.state.mqtt["openWB/optional/rfid/active"]===!0?(o(),u(B,{key:1,title:"Zugeordnete ID-Tags","no-elements-message":'"'+n.name+'" sind keine ID-Tags zugeordnet.',pattern:"^[^\\s].*[^\\s]$","model-value":n.valid_tags,"onUpdate:modelValue":k=>e.updateState(p,k,"valid_tags")},null,8,["no-elements-message","model-value","onUpdate:modelValue"])):g("",!0),r(h,{title:"Sperre nach Abstecken",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":n.disable_after_unplug,"onUpdate:modelValue":k=>e.updateState(p,k,"disable_after_unplug")},{help:i(()=>[a(' Ist "Sperre nach Abstecken" aktiviert, wird der Ladepunkt mit Ladepunkt-Profil "'+b(n.name)+'" nach Abstecken eines Fahrzeugs automatisch gesperrt. Ist die Funktion deaktiviert, bleibt der Ladepunkt entsperrt. ',1)]),_:2},1032,["model-value","onUpdate:modelValue"])]))),128))]))]),_:1}),r(c,null,{default:i(()=>[...t[14]||(t[14]=[a(" Zuordnung von Fahrzeugen ",-1)])]),_:1}),r(v,{title:"Fahrzeuge",subtype:"info",collapsible:!0,collapsed:!0},{default:i(()=>[e.$store.state.mqtt["openWB/general/extern"]===!0?(o(),u(d,{key:0,subtype:"info"},{default:i(()=>[...t[15]||(t[15]=[a(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet.',-1),s("br",null,null,-1),a(' Die Konfiguration zur Fahrzeugzuordnung bitte auf der "primary" openWB durchführen. ',-1)])]),_:1})):e.$store.state.mqtt["openWB/optional/rfid/active"]===!1?(o(),u(d,{key:1,subtype:"info"},{default:i(()=>[...t[16]||(t[16]=[a(" Diese Einstellungen sind nur verfügbar, wenn Identifikation aktiviert ist. ",-1)])]),_:1})):(o(),l("div",N,[r(d,{subtype:"info"},{default:i(()=>[...t[17]||(t[17]=[a(" Hier zugeordnete ID-Tags weisen dem Ladepunkt beim Scannen automatisch das jeweilige Fahrzeug zu. Ist bei Scannen des ID-Tags noch kein Fahrzeug angeschlossen muss dies zeitnah erfolgen, da der ID-Tag nach 5 Minuten verworfen wird. ",-1)])]),_:1}),(o(!0),l(W,null,w(f.vehicleIndexes,n=>(o(),l("div",{key:n},[n!=f.vehicleIndexes[0]?(o(),l("hr",U)):g("",!0),r(c,{class:"mt-0"},{default:i(()=>[r($,{icon:["fas","car"],class:"fa-border",size:"xs",style:S({backgroundColor:e.$store.state.mqtt["openWB/vehicle/"+n+"/color"],color:e.getContrastColor(e.$store.state.mqtt["openWB/vehicle/"+n+"/color"])})},null,8,["style"]),a(" "+b(e.$store.state.mqtt["openWB/vehicle/"+n+"/name"]),1)]),_:2},1024),e.$store.state.mqtt["openWB/optional/rfid/active"]===!0?(o(),u(B,{key:1,title:"Zugeordnete ID-Tags","no-elements-message":'"'+e.$store.state.mqtt["openWB/vehicle/"+n+"/name"]+'" sind keine ID-Tags zugeordnet.',pattern:"^[^\\s].*[^\\s]$","model-value":e.$store.state.mqtt["openWB/vehicle/"+n+"/tag_id"],"onUpdate:modelValue":p=>e.updateState("openWB/vehicle/"+n+"/tag_id",p)},null,8,["no-elements-message","model-value","onUpdate:modelValue"])):g("",!0),n!=0?(o(),u(h,{key:2,title:"Standard-Fahrzeug nach Abstecken zuordnen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":e.$store.state.mqtt["openWB/vehicle/template/charge_template/"+e.$store.state.mqtt["openWB/vehicle/"+n+"/charge_template"]].load_default,"onUpdate:modelValue":p=>e.updateState("openWB/vehicle/template/charge_template/"+e.$store.state.mqtt["openWB/vehicle/"+n+"/charge_template"],p,"load_default")},{help:i(()=>[a(' Ist diese Option aktiviert, wird am Ladepunkt nach Abstecken auf das Standard-Fahrzeug zurückgesetzt. Die Option ist im Lade-Profil "'+b(e.$store.state.mqtt["openWB/vehicle/template/charge_template/"+e.$store.state.mqtt["openWB/vehicle/"+n+"/charge_template"]].name)+'" gespeichert.',1),t[18]||(t[18]=s("br",null,null,-1)),a(' "Standard-Fahrzeug nach Abstecken" ist für alle Fahrzeuge '+b(e.$store.state.mqtt["openWB/vehicle/template/charge_template/"+e.$store.state.mqtt["openWB/vehicle/"+n+"/charge_template"]].load_default===!0?"aktiviert":"deaktiviert")+" , denen dieses Lade-Profil zugeordnet wurde. ",1)]),_:2},1032,["model-value","onUpdate:modelValue"])):g("",!0)]))),128))]))]),_:1}),r(y,{"form-name":"optionalComponentsForm",onSave:t[1]||(t[1]=n=>e.$emit("save",e.mqttTopicsToPublish)),onReset:t[2]||(t[2]=n=>e.$emit("reset")),onDefaults:t[3]||(t[3]=n=>e.$emit("defaults"))})])])}const Y=L(V,[["render",Z],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/IdentificationConfiguration.vue"]]);export{Y as default}; diff --git a/web/settings/assets/InstallAssistant-MPSFE3Da.js b/web/settings/assets/InstallAssistant-ght3LRFR.js similarity index 65% rename from web/settings/assets/InstallAssistant-MPSFE3Da.js rename to web/settings/assets/InstallAssistant-ght3LRFR.js index 7fa4099101..f19b0a13cf 100644 --- a/web/settings/assets/InstallAssistant-MPSFE3Da.js +++ b/web/settings/assets/InstallAssistant-ght3LRFR.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/InstallAssistantStep0-D3VUwas2.js","assets/index-Bv2WLdLZ.js","assets/vendor-BwGffBs-.js","assets/vendor-Cq9CCOuG.css","assets/vendor-fortawesome-DplTMxoa.js","assets/vendor-bootstrap-DxivtUnb.js","assets/vendor-jquery-CEMonh9Y.js","assets/vendor-bootstrap-BJ8HpIhY.css","assets/vendor-axios-C0vEeTtS.js","assets/index-xf6JJloS.css","assets/InstallAssistantStepTemplate-B5w7xDgW.js","assets/InstallAssistantStepTemplate-DIMIp8sn.css","assets/InstallAssistantStep1-Etg3ur_E.js","assets/DataManagement-CkfxmcJu.js","assets/SystemVersion-eCZ4XHiC.js","assets/dynamic-import-helper-BheWnx7M.js","assets/InstallAssistantStep10-BsSxzOwX.js","assets/InstallAssistantStep2-CzbdVmQ4.js","assets/SystemConfiguration-Clo1_d0_.js","assets/SystemConfiguration-BWslT2W-.css","assets/InstallAssistantStep20-s4xJv2Qr.js","assets/ChargePointInstallation-u7kPgCv5.js","assets/ChargePointInstallation-37TSBtDo.css","assets/InstallAssistantStep3-BgvaUa7O.js","assets/GeneralConfiguration-BiYqLhF0.js","assets/InstallAssistantStep4-T_45YWNd.js","assets/IoConfiguration-p0bHlEKR.js","assets/InstallAssistantStep5-5MsTd5Et.js","assets/HardwareInstallation-Ln-RWgHD.js","assets/DeviceConfigMixin-D2g2-xc_.js","assets/InstallAssistantStep6-BDDVU7mU.js","assets/InstallAssistantStep7-BOfFk4sK.js","assets/LoadManagementConfiguration-KljkkYHP.js","assets/OpenwbSortableList-CQO_8Mps.js","assets/OpenwbSortableList-BkrTk2sD.css","assets/InstallAssistantStep8-B40wENux.js","assets/VehicleConfiguration-CDk_8xEa.js","assets/InstallAssistantStep9-DcVM4qRZ.js"])))=>i.map(i=>d[i]); -import{C as r,_ as t}from"./index-Bv2WLdLZ.js";import{_}from"./dynamic-import-helper-BheWnx7M.js";import{_ as m,m as p,l as i,f as d,q as u,u as A,B as v,z as E,P as I,a7 as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";const P={name:"InstallAssistantView",mixins:[r],emits:["sendCommand","save","reset","defaults"],data(){return{currentPage:0,lastPage:10,showEndAssistantModal:!1}},methods:{getInstallAssistantStepComponent(){return console.debug(`loading assistant page: ${this.currentPage}`),c({loader:()=>_(Object.assign({"../components/install_assistant/InstallAssistantStep0.vue":()=>t(()=>import("./InstallAssistantStep0-D3VUwas2.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])),"../components/install_assistant/InstallAssistantStep1.vue":()=>t(()=>import("./InstallAssistantStep1-Etg3ur_E.js"),__vite__mapDeps([12,1,2,3,4,5,6,7,8,9,10,11,13,14,15])),"../components/install_assistant/InstallAssistantStep10.vue":()=>t(()=>import("./InstallAssistantStep10-BsSxzOwX.js"),__vite__mapDeps([16,1,2,3,4,5,6,7,8,9,10,11])),"../components/install_assistant/InstallAssistantStep2.vue":()=>t(()=>import("./InstallAssistantStep2-CzbdVmQ4.js"),__vite__mapDeps([17,1,2,3,4,5,6,7,8,9,10,11,18,19])),"../components/install_assistant/InstallAssistantStep20.vue":()=>t(()=>import("./InstallAssistantStep20-s4xJv2Qr.js"),__vite__mapDeps([20,1,2,3,4,5,6,7,8,9,10,11,21,14,15,22])),"../components/install_assistant/InstallAssistantStep3.vue":()=>t(()=>import("./InstallAssistantStep3-BgvaUa7O.js"),__vite__mapDeps([23,1,2,3,4,5,6,7,8,9,10,11,24,14,15])),"../components/install_assistant/InstallAssistantStep4.vue":()=>t(()=>import("./InstallAssistantStep4-T_45YWNd.js"),__vite__mapDeps([25,1,2,3,4,5,6,7,8,9,10,11,26,15])),"../components/install_assistant/InstallAssistantStep5.vue":()=>t(()=>import("./InstallAssistantStep5-5MsTd5Et.js"),__vite__mapDeps([27,1,2,3,4,5,6,7,8,9,10,11,28,15,29])),"../components/install_assistant/InstallAssistantStep6.vue":()=>t(()=>import("./InstallAssistantStep6-BDDVU7mU.js"),__vite__mapDeps([30,1,2,3,4,5,6,7,8,9,10,11,21,14,15,22])),"../components/install_assistant/InstallAssistantStep7.vue":()=>t(()=>import("./InstallAssistantStep7-BOfFk4sK.js"),__vite__mapDeps([31,1,2,3,4,5,6,7,8,9,10,11,32,14,33,34])),"../components/install_assistant/InstallAssistantStep8.vue":()=>t(()=>import("./InstallAssistantStep8-B40wENux.js"),__vite__mapDeps([35,1,2,3,4,5,6,7,8,9,10,11,36,15])),"../components/install_assistant/InstallAssistantStep9.vue":()=>t(()=>import("./InstallAssistantStep9-DcVM4qRZ.js"),__vite__mapDeps([37,1,2,3,4,5,6,7,8,9,10,11,13,14,15])),"../components/install_assistant/InstallAssistantStepTemplate.vue":()=>t(()=>import("./InstallAssistantStepTemplate-B5w7xDgW.js"),__vite__mapDeps([10,1,2,3,4,5,6,7,8,9,11]))}),`../components/install_assistant/InstallAssistantStep${this.currentPage}.vue`,4)})},switchPage(s){s>=0&&s<=this.lastPage?this.currentPage=s:console.error(`invalid assistant page number: ${s}`)},endAssistantModal(){this.currentPage!=this.lastPage?this.showEndAssistantModal=!0:this.endAssistant("confirm")},endAssistant(s){this.showEndAssistantModal=!1,s=="confirm"&&(this.updateState("openWB/system/installAssistantDone",!0),this.$root.doPublish("openWB/set/system/installAssistantDone",!0),this.$router.push("/Status"))}}};function f(s,n,S,g,o,a){const l=p("openwb-base-modal-dialog");return i(),d("div",null,[u(l,{show:o.showEndAssistantModal,title:"Assistent beenden",subtype:"danger",buttons:[{text:"Beenden",event:"confirm",subtype:"danger"}],onModalResult:a.endAssistant},{default:A(()=>[...n[4]||(n[4]=[v(" Willst Du den Assistenten wirklich vorzeitig beenden? ",-1)])]),_:1},8,["show","onModalResult"]),(i(),E(I(a.getInstallAssistantStepComponent()),{onSendCommand:n[0]||(n[0]=e=>s.$emit("sendCommand",e)),onSave:n[1]||(n[1]=e=>s.$emit("save",e)),onReset:n[2]||(n[2]=e=>s.$emit("reset")),onDefaults:n[3]||(n[3]=e=>s.$emit("defaults")),onSwitchPage:a.switchPage,onEndAssistant:a.endAssistantModal},null,40,["onSwitchPage","onEndAssistant"]))])}const O=m(P,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/InstallAssistant.vue"]]);export{O as default}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/InstallAssistantStep0-aE9I1LRD.js","assets/index-CE-5DBwq.js","assets/vendor-BwGffBs-.js","assets/vendor-Cq9CCOuG.css","assets/vendor-fortawesome-DplTMxoa.js","assets/vendor-bootstrap-DxivtUnb.js","assets/vendor-jquery-CEMonh9Y.js","assets/vendor-bootstrap-BJ8HpIhY.css","assets/vendor-axios-C0vEeTtS.js","assets/index-xf6JJloS.css","assets/InstallAssistantStepTemplate-1RoKBQwk.js","assets/InstallAssistantStepTemplate-DIMIp8sn.css","assets/InstallAssistantStep1-0Apw2--J.js","assets/DataManagement-CnuBQnBT.js","assets/SystemVersion-eCZ4XHiC.js","assets/dynamic-import-helper-BheWnx7M.js","assets/InstallAssistantStep10-BVA3Z9lW.js","assets/InstallAssistantStep2-DLFdiM2D.js","assets/SystemConfiguration-DJZWiSkw.js","assets/SystemConfiguration-BWslT2W-.css","assets/InstallAssistantStep20-ClY9THyn.js","assets/ChargePointInstallation-CmmRvfWj.js","assets/ChargePointInstallation-37TSBtDo.css","assets/InstallAssistantStep3-CnCklya0.js","assets/GeneralConfiguration-D0B_yW_W.js","assets/InstallAssistantStep4-vdVisENj.js","assets/IoConfiguration-DWzY_z-Z.js","assets/InstallAssistantStep5-LCyW2hS4.js","assets/HardwareInstallation-M-k9qNJb.js","assets/DeviceConfigMixin-D2g2-xc_.js","assets/InstallAssistantStep6-DM-0_myH.js","assets/InstallAssistantStep7-Djq01FHf.js","assets/LoadManagementConfiguration-Rty2qCw0.js","assets/OpenwbSortableList-yQzkYwAQ.js","assets/OpenwbSortableList-BkrTk2sD.css","assets/InstallAssistantStep8-C_AsSOUv.js","assets/VehicleConfiguration-848lVEbG.js","assets/InstallAssistantStep9-DOtuUWQv.js"])))=>i.map(i=>d[i]); +import{C as r,_ as t}from"./index-CE-5DBwq.js";import{_}from"./dynamic-import-helper-BheWnx7M.js";import{_ as m,m as p,l as i,f as d,q as u,u as A,B as v,z as E,P as I,a7 as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";const P={name:"InstallAssistantView",mixins:[r],emits:["sendCommand","save","reset","defaults"],data(){return{currentPage:0,lastPage:10,showEndAssistantModal:!1}},methods:{getInstallAssistantStepComponent(){return console.debug(`loading assistant page: ${this.currentPage}`),c({loader:()=>_(Object.assign({"../components/install_assistant/InstallAssistantStep0.vue":()=>t(()=>import("./InstallAssistantStep0-aE9I1LRD.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])),"../components/install_assistant/InstallAssistantStep1.vue":()=>t(()=>import("./InstallAssistantStep1-0Apw2--J.js"),__vite__mapDeps([12,1,2,3,4,5,6,7,8,9,10,11,13,14,15])),"../components/install_assistant/InstallAssistantStep10.vue":()=>t(()=>import("./InstallAssistantStep10-BVA3Z9lW.js"),__vite__mapDeps([16,1,2,3,4,5,6,7,8,9,10,11])),"../components/install_assistant/InstallAssistantStep2.vue":()=>t(()=>import("./InstallAssistantStep2-DLFdiM2D.js"),__vite__mapDeps([17,1,2,3,4,5,6,7,8,9,10,11,18,19])),"../components/install_assistant/InstallAssistantStep20.vue":()=>t(()=>import("./InstallAssistantStep20-ClY9THyn.js"),__vite__mapDeps([20,1,2,3,4,5,6,7,8,9,10,11,21,14,15,22])),"../components/install_assistant/InstallAssistantStep3.vue":()=>t(()=>import("./InstallAssistantStep3-CnCklya0.js"),__vite__mapDeps([23,1,2,3,4,5,6,7,8,9,10,11,24,14,15])),"../components/install_assistant/InstallAssistantStep4.vue":()=>t(()=>import("./InstallAssistantStep4-vdVisENj.js"),__vite__mapDeps([25,1,2,3,4,5,6,7,8,9,10,11,26,15])),"../components/install_assistant/InstallAssistantStep5.vue":()=>t(()=>import("./InstallAssistantStep5-LCyW2hS4.js"),__vite__mapDeps([27,1,2,3,4,5,6,7,8,9,10,11,28,15,29])),"../components/install_assistant/InstallAssistantStep6.vue":()=>t(()=>import("./InstallAssistantStep6-DM-0_myH.js"),__vite__mapDeps([30,1,2,3,4,5,6,7,8,9,10,11,21,14,15,22])),"../components/install_assistant/InstallAssistantStep7.vue":()=>t(()=>import("./InstallAssistantStep7-Djq01FHf.js"),__vite__mapDeps([31,1,2,3,4,5,6,7,8,9,10,11,32,14,33,34])),"../components/install_assistant/InstallAssistantStep8.vue":()=>t(()=>import("./InstallAssistantStep8-C_AsSOUv.js"),__vite__mapDeps([35,1,2,3,4,5,6,7,8,9,10,11,36,15])),"../components/install_assistant/InstallAssistantStep9.vue":()=>t(()=>import("./InstallAssistantStep9-DOtuUWQv.js"),__vite__mapDeps([37,1,2,3,4,5,6,7,8,9,10,11,13,14,15])),"../components/install_assistant/InstallAssistantStepTemplate.vue":()=>t(()=>import("./InstallAssistantStepTemplate-1RoKBQwk.js"),__vite__mapDeps([10,1,2,3,4,5,6,7,8,9,11]))}),`../components/install_assistant/InstallAssistantStep${this.currentPage}.vue`,4)})},switchPage(s){s>=0&&s<=this.lastPage?this.currentPage=s:console.error(`invalid assistant page number: ${s}`)},endAssistantModal(){this.currentPage!=this.lastPage?this.showEndAssistantModal=!0:this.endAssistant("confirm")},endAssistant(s){this.showEndAssistantModal=!1,s=="confirm"&&(this.updateState("openWB/system/installAssistantDone",!0),this.$root.doPublish("openWB/set/system/installAssistantDone",!0),this.$router.push("/Status"))}}};function f(s,n,S,g,o,a){const l=p("openwb-base-modal-dialog");return i(),d("div",null,[u(l,{show:o.showEndAssistantModal,title:"Assistent beenden",subtype:"danger",buttons:[{text:"Beenden",event:"confirm",subtype:"danger"}],onModalResult:a.endAssistant},{default:A(()=>[...n[4]||(n[4]=[v(" Willst Du den Assistenten wirklich vorzeitig beenden? ",-1)])]),_:1},8,["show","onModalResult"]),(i(),E(I(a.getInstallAssistantStepComponent()),{onSendCommand:n[0]||(n[0]=e=>s.$emit("sendCommand",e)),onSave:n[1]||(n[1]=e=>s.$emit("save",e)),onReset:n[2]||(n[2]=e=>s.$emit("reset")),onDefaults:n[3]||(n[3]=e=>s.$emit("defaults")),onSwitchPage:a.switchPage,onEndAssistant:a.endAssistantModal},null,40,["onSwitchPage","onEndAssistant"]))])}const O=m(P,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/InstallAssistant.vue"]]);export{O as default}; diff --git a/web/settings/assets/InstallAssistantStep0-D3VUwas2.js b/web/settings/assets/InstallAssistantStep0-aE9I1LRD.js similarity index 95% rename from web/settings/assets/InstallAssistantStep0-D3VUwas2.js rename to web/settings/assets/InstallAssistantStep0-aE9I1LRD.js index 9f52e94dea..9c5485dfd2 100644 --- a/web/settings/assets/InstallAssistantStep0-D3VUwas2.js +++ b/web/settings/assets/InstallAssistantStep0-aE9I1LRD.js @@ -1 +1 @@ -import{C as m}from"./index-Bv2WLdLZ.js";import g from"./InstallAssistantStepTemplate-B5w7xDgW.js";import{F as f}from"./vendor-fortawesome-DplTMxoa.js";import{_ as h,m as i,l as c,z as w,u as r,q as a,B as o,y as n}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";const A={name:"InstallAssistantStep0",components:{InstallAssistantStepTemplate:g,FontAwesomeIcon:f},mixins:[m],emits:["switchPage","endAssistant"],data:()=>({mqttTopics:[],showModalWarning:!1}),methods:{requestNextPage(){this.showModalWarning=!0},nextPage(s){this.showModalWarning=!1,s==="confirm"&&this.$emit("switchPage",1)},previousPage(){},endAssistant(){this.$emit("endAssistant")}}},b={class:"font-weight-bold"};function k(s,e,B,P,v,t){const l=i("openwb-base-modal-dialog"),d=i("FontAwesomeIcon"),u=i("InstallAssistantStepTemplate");return c(),w(u,{title:"Start","hide-previous":!0,onNextPage:t.requestNextPage,onPreviousPage:t.previousPage,onEndAssistant:t.endAssistant},{content:r(()=>[a(l,{show:s.showModalWarning,title:"Achtung!",subtype:"danger",buttons:[{text:"Ok",event:"confirm",subtype:"success"}],onModalResult:e[0]||(e[0]=p=>t.nextPage(p))},{default:r(()=>[...e[1]||(e[1]=[o(" Bevor der Assistent gestartet wird, ist sicherzustellen, dass kein Ladevorgang aktiv ist! Zur Sicherheit bitte zusätzlich alle Fahrzeuge von der Ladestation / den Ladestationen abstecken! ",-1)])]),_:1},8,["show"]),e[4]||(e[4]=n("h2",null,"Vielen Dank, dass Du Dich für openWB entschieden hast.",-1)),e[5]||(e[5]=n("p",null,"Dieser Assistent führt durch die Konfiguration der einzelnen Module:",-1)),e[6]||(e[6]=n("ol",null,[n("li",null,"Datensicherung der bestehenden Konfiguration"),n("li",null,"Aktualisierung des openWB-Systems"),n("li",null,"Allgemeine Einstellungen: Auswahl des Betriebsmodus primary (steuernd) bzw. secondary (gesteuerte WB)")],-1)),e[7]||(e[7]=n("p",null," Wird diese openWB als secondary betrieben, so werden nur die lokalen Ladepunkte eingerichtet. Im Betriebsmodus primary werden die folgenden zusätzlichen Schritte durchlaufen: ",-1)),e[8]||(e[8]=n("ol",{start:"4"},[n("li",null,"Ein- und Ausgänge konfigurieren"),n("li",null,"Energiesystem - Geräte und Komponenten einrichten"),n("li",null,"Einrichten der Ladepunkte (openWB als primary)"),n("li",null,"Konfiguration des Lastmanagements"),n("li",null,"Einrichten der Fahrzeuge"),n("li",null,"Datensicherung der neuen Konfiguration")],-1)),e[9]||(e[9]=n("p",null,"Danach ist die Grundkonfiguration abgeschlossen.",-1)),n("p",b,[e[2]||(e[2]=o(" Bitte während der Einrichtung auch die jeweiligen Hilfstexte lesen, welche durch Klick auf ",-1)),a(d,{icon:["far","question-circle"]}),e[3]||(e[3]=o(" erscheinen. Hier sind weiterführende Informationen zu den Eingabefeldern zu finden. ",-1))])]),_:1},8,["onNextPage","onPreviousPage","onEndAssistant"])}const D=h(A,[["render",k],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStep0.vue"]]);export{D as default}; +import{C as m}from"./index-CE-5DBwq.js";import g from"./InstallAssistantStepTemplate-1RoKBQwk.js";import{F as f}from"./vendor-fortawesome-DplTMxoa.js";import{_ as h,m as i,l as c,z as w,u as r,q as a,B as o,y as n}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";const A={name:"InstallAssistantStep0",components:{InstallAssistantStepTemplate:g,FontAwesomeIcon:f},mixins:[m],emits:["switchPage","endAssistant"],data:()=>({mqttTopics:[],showModalWarning:!1}),methods:{requestNextPage(){this.showModalWarning=!0},nextPage(s){this.showModalWarning=!1,s==="confirm"&&this.$emit("switchPage",1)},previousPage(){},endAssistant(){this.$emit("endAssistant")}}},b={class:"font-weight-bold"};function k(s,e,B,P,v,t){const l=i("openwb-base-modal-dialog"),d=i("FontAwesomeIcon"),u=i("InstallAssistantStepTemplate");return c(),w(u,{title:"Start","hide-previous":!0,onNextPage:t.requestNextPage,onPreviousPage:t.previousPage,onEndAssistant:t.endAssistant},{content:r(()=>[a(l,{show:s.showModalWarning,title:"Achtung!",subtype:"danger",buttons:[{text:"Ok",event:"confirm",subtype:"success"}],onModalResult:e[0]||(e[0]=p=>t.nextPage(p))},{default:r(()=>[...e[1]||(e[1]=[o(" Bevor der Assistent gestartet wird, ist sicherzustellen, dass kein Ladevorgang aktiv ist! Zur Sicherheit bitte zusätzlich alle Fahrzeuge von der Ladestation / den Ladestationen abstecken! ",-1)])]),_:1},8,["show"]),e[4]||(e[4]=n("h2",null,"Vielen Dank, dass Du Dich für openWB entschieden hast.",-1)),e[5]||(e[5]=n("p",null,"Dieser Assistent führt durch die Konfiguration der einzelnen Module:",-1)),e[6]||(e[6]=n("ol",null,[n("li",null,"Datensicherung der bestehenden Konfiguration"),n("li",null,"Aktualisierung des openWB-Systems"),n("li",null,"Allgemeine Einstellungen: Auswahl des Betriebsmodus primary (steuernd) bzw. secondary (gesteuerte WB)")],-1)),e[7]||(e[7]=n("p",null," Wird diese openWB als secondary betrieben, so werden nur die lokalen Ladepunkte eingerichtet. Im Betriebsmodus primary werden die folgenden zusätzlichen Schritte durchlaufen: ",-1)),e[8]||(e[8]=n("ol",{start:"4"},[n("li",null,"Ein- und Ausgänge konfigurieren"),n("li",null,"Energiesystem - Geräte und Komponenten einrichten"),n("li",null,"Einrichten der Ladepunkte (openWB als primary)"),n("li",null,"Konfiguration des Lastmanagements"),n("li",null,"Einrichten der Fahrzeuge"),n("li",null,"Datensicherung der neuen Konfiguration")],-1)),e[9]||(e[9]=n("p",null,"Danach ist die Grundkonfiguration abgeschlossen.",-1)),n("p",b,[e[2]||(e[2]=o(" Bitte während der Einrichtung auch die jeweiligen Hilfstexte lesen, welche durch Klick auf ",-1)),a(d,{icon:["far","question-circle"]}),e[3]||(e[3]=o(" erscheinen. Hier sind weiterführende Informationen zu den Eingabefeldern zu finden. ",-1))])]),_:1},8,["onNextPage","onPreviousPage","onEndAssistant"])}const D=h(A,[["render",k],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStep0.vue"]]);export{D as default}; diff --git a/web/settings/assets/InstallAssistantStep1-Etg3ur_E.js b/web/settings/assets/InstallAssistantStep1-0Apw2--J.js similarity index 89% rename from web/settings/assets/InstallAssistantStep1-Etg3ur_E.js rename to web/settings/assets/InstallAssistantStep1-0Apw2--J.js index 4e81703a17..0ecf95008f 100644 --- a/web/settings/assets/InstallAssistantStep1-Etg3ur_E.js +++ b/web/settings/assets/InstallAssistantStep1-0Apw2--J.js @@ -1 +1 @@ -import{C as m}from"./index-Bv2WLdLZ.js";import p from"./InstallAssistantStepTemplate-B5w7xDgW.js";import{D as l}from"./DataManagement-CkfxmcJu.js";import{_ as d,m as a,l as u,z as g,u as o,q as f,y as v}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const A={name:"InstallAssistantStep1",components:{InstallAssistantStepTemplate:p,DataManagement:l},mixins:[m],emits:["save","reset","defaults","sendCommand","switchPage","endAssistant"],data:()=>({mqttTopics:[]}),methods:{nextPage(){this.$emit("switchPage",2)},previousPage(){this.$emit("switchPage",0)},endAssistant(){this.$emit("endAssistant")}}};function P(s,e,c,w,S,n){const i=a("DataManagement"),r=a("InstallAssistantStepTemplate");return u(),g(r,{title:"1. Datensicherung der bestehenden Konfiguration",onNextPage:n.nextPage,onPreviousPage:n.previousPage,onEndAssistant:n.endAssistant},{help:o(()=>[...e[4]||(e[4]=[v("p",null," Wir empfehlen an dieser Stelle eine Sicherung der openWB zu erstellen, auf welche später zurückgegriffen werden kann, insbesondere, wenn die openWB schon konfiguriert war und der Assistent nun erneut ausgeführt wird. ",-1)])]),content:o(()=>[f(i,{"install-assistant-active":!0,"show-backup-cloud-section":!1,onSendCommand:e[0]||(e[0]=t=>s.$emit("sendCommand",t)),onSave:e[1]||(e[1]=t=>s.$emit("save",t)),onReset:e[2]||(e[2]=t=>s.$emit("reset")),onDefaults:e[3]||(e[3]=t=>s.$emit("defaults"))})]),_:1},8,["onNextPage","onPreviousPage","onEndAssistant"])}const T=d(A,[["render",P],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStep1.vue"]]);export{T as default}; +import{C as m}from"./index-CE-5DBwq.js";import p from"./InstallAssistantStepTemplate-1RoKBQwk.js";import{D as l}from"./DataManagement-CnuBQnBT.js";import{_ as d,m as a,l as u,z as g,u as o,q as f,y as v}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const A={name:"InstallAssistantStep1",components:{InstallAssistantStepTemplate:p,DataManagement:l},mixins:[m],emits:["save","reset","defaults","sendCommand","switchPage","endAssistant"],data:()=>({mqttTopics:[]}),methods:{nextPage(){this.$emit("switchPage",2)},previousPage(){this.$emit("switchPage",0)},endAssistant(){this.$emit("endAssistant")}}};function P(s,e,c,w,S,n){const i=a("DataManagement"),r=a("InstallAssistantStepTemplate");return u(),g(r,{title:"1. Datensicherung der bestehenden Konfiguration",onNextPage:n.nextPage,onPreviousPage:n.previousPage,onEndAssistant:n.endAssistant},{help:o(()=>[...e[4]||(e[4]=[v("p",null," Wir empfehlen an dieser Stelle eine Sicherung der openWB zu erstellen, auf welche später zurückgegriffen werden kann, insbesondere, wenn die openWB schon konfiguriert war und der Assistent nun erneut ausgeführt wird. ",-1)])]),content:o(()=>[f(i,{"install-assistant-active":!0,"show-backup-cloud-section":!1,onSendCommand:e[0]||(e[0]=t=>s.$emit("sendCommand",t)),onSave:e[1]||(e[1]=t=>s.$emit("save",t)),onReset:e[2]||(e[2]=t=>s.$emit("reset")),onDefaults:e[3]||(e[3]=t=>s.$emit("defaults"))})]),_:1},8,["onNextPage","onPreviousPage","onEndAssistant"])}const T=d(A,[["render",P],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStep1.vue"]]);export{T as default}; diff --git a/web/settings/assets/InstallAssistantStep10-BsSxzOwX.js b/web/settings/assets/InstallAssistantStep10-BVA3Z9lW.js similarity index 91% rename from web/settings/assets/InstallAssistantStep10-BsSxzOwX.js rename to web/settings/assets/InstallAssistantStep10-BVA3Z9lW.js index d04f83992a..fde3acbd64 100644 --- a/web/settings/assets/InstallAssistantStep10-BsSxzOwX.js +++ b/web/settings/assets/InstallAssistantStep10-BVA3Z9lW.js @@ -1 +1 @@ -import{C as a}from"./index-Bv2WLdLZ.js";import o from"./InstallAssistantStepTemplate-B5w7xDgW.js";import{_ as r,m as l,l as m,z as p,u as d,y as n}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";const g={name:"InstallAssistantStep10",components:{InstallAssistantStepTemplate:o},mixins:[a],emits:["switchPage","endAssistant","sendCommand"],data:()=>({mqttTopics:[]}),methods:{nextPage(){},previousPage(){this.$emit("switchPage",9)},sendCommand(t){this.$emit("sendCommand",t)},endAssistant(){this.$emit("endAssistant")}}};function u(t,s,c,f,A,e){const i=l("InstallAssistantStepTemplate");return m(),p(i,{title:"Abgeschlossen","hide-next":!0,onNextPage:e.nextPage,onPreviousPage:e.previousPage,onEndAssistant:e.endAssistant},{content:d(()=>[...s[0]||(s[0]=[n("h2",null,"Die Grundkonfiguration ist abgeschlossen.",-1),n("p",null," Die grundlegende Konfiguration der openWB ist abgeschlossen. Du wirst mit Beendigung dieses Assistenten auf die Statusseite weitergeleitet. Bitte überprüfe die dargestellten Informationen und passe bei Unstimmigkeiten die Einstellungen in den jeweiligen Konfigurationsseiten an (openWB -> Einstellungen -> Konfiguration). ",-1)])]),_:1},8,["onNextPage","onPreviousPage","onEndAssistant"])}const w=r(g,[["render",u],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStep10.vue"]]);export{w as default}; +import{C as a}from"./index-CE-5DBwq.js";import o from"./InstallAssistantStepTemplate-1RoKBQwk.js";import{_ as r,m as l,l as m,z as p,u as d,y as n}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";const g={name:"InstallAssistantStep10",components:{InstallAssistantStepTemplate:o},mixins:[a],emits:["switchPage","endAssistant","sendCommand"],data:()=>({mqttTopics:[]}),methods:{nextPage(){},previousPage(){this.$emit("switchPage",9)},sendCommand(t){this.$emit("sendCommand",t)},endAssistant(){this.$emit("endAssistant")}}};function u(t,s,c,f,A,e){const i=l("InstallAssistantStepTemplate");return m(),p(i,{title:"Abgeschlossen","hide-next":!0,onNextPage:e.nextPage,onPreviousPage:e.previousPage,onEndAssistant:e.endAssistant},{content:d(()=>[...s[0]||(s[0]=[n("h2",null,"Die Grundkonfiguration ist abgeschlossen.",-1),n("p",null," Die grundlegende Konfiguration der openWB ist abgeschlossen. Du wirst mit Beendigung dieses Assistenten auf die Statusseite weitergeleitet. Bitte überprüfe die dargestellten Informationen und passe bei Unstimmigkeiten die Einstellungen in den jeweiligen Konfigurationsseiten an (openWB -> Einstellungen -> Konfiguration). ",-1)])]),_:1},8,["onNextPage","onPreviousPage","onEndAssistant"])}const w=r(g,[["render",u],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStep10.vue"]]);export{w as default}; diff --git a/web/settings/assets/InstallAssistantStep2-CzbdVmQ4.js b/web/settings/assets/InstallAssistantStep2-DLFdiM2D.js similarity index 89% rename from web/settings/assets/InstallAssistantStep2-CzbdVmQ4.js rename to web/settings/assets/InstallAssistantStep2-DLFdiM2D.js index 993f056943..9d133d5f80 100644 --- a/web/settings/assets/InstallAssistantStep2-CzbdVmQ4.js +++ b/web/settings/assets/InstallAssistantStep2-DLFdiM2D.js @@ -1 +1 @@ -import{C as l}from"./index-Bv2WLdLZ.js";import p from"./InstallAssistantStepTemplate-B5w7xDgW.js";import d from"./SystemConfiguration-Clo1_d0_.js";import{_ as u,m as i,l as f,z as g,u as o,q as S,y as a}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";const w={name:"InstallAssistantStep2",components:{InstallAssistantStepTemplate:p,SystemView:d},mixins:[l],emits:["save","reset","defaults","sendCommand","switchPage","endAssistant"],data:()=>({mqttTopics:[]}),methods:{nextPage(){this.$emit("switchPage",3)},previousPage(){this.$emit("switchPage",1)},endAssistant(){this.$emit("endAssistant")}}};function A(s,t,v,P,c,n){const r=i("SystemView"),m=i("InstallAssistantStepTemplate");return f(),g(m,{title:"2. Aktualisierung des openWB-Systems",onNextPage:n.nextPage,onPreviousPage:n.previousPage,onEndAssistant:n.endAssistant},{help:o(()=>[...t[4]||(t[4]=[a("p",null,"Bitte ein System-Update durchführen, um die Software auf den neuesten Stand zu bringen.",-1),a("p",null," Bitte warten, bis die Versionsliste aktualisiert wurde. Falls ein Update verfügbar ist, wird der Update-Button grün (zum Update bereit). ",-1),a("p",null,' Ein Klick auf "Update" startet die Aktualisierung, welche auch einen automatischen Reboot initiiert (bitte ca. 5 Minuten warten). Danach muss der Assistent neu gestartet werden. ',-1)])]),content:o(()=>[S(r,{"install-assistant-active":!0,onSendCommand:t[0]||(t[0]=e=>s.$emit("sendCommand",e)),onSave:t[1]||(t[1]=e=>s.$emit("save",e)),onReset:t[2]||(t[2]=e=>s.$emit("reset")),onDefaults:t[3]||(t[3]=e=>s.$emit("defaults"))})]),_:1},8,["onNextPage","onPreviousPage","onEndAssistant"])}const V=u(w,[["render",A],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStep2.vue"]]);export{V as default}; +import{C as l}from"./index-CE-5DBwq.js";import p from"./InstallAssistantStepTemplate-1RoKBQwk.js";import d from"./SystemConfiguration-DJZWiSkw.js";import{_ as u,m as i,l as f,z as g,u as o,q as S,y as a}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";const w={name:"InstallAssistantStep2",components:{InstallAssistantStepTemplate:p,SystemView:d},mixins:[l],emits:["save","reset","defaults","sendCommand","switchPage","endAssistant"],data:()=>({mqttTopics:[]}),methods:{nextPage(){this.$emit("switchPage",3)},previousPage(){this.$emit("switchPage",1)},endAssistant(){this.$emit("endAssistant")}}};function A(s,t,v,P,c,n){const r=i("SystemView"),m=i("InstallAssistantStepTemplate");return f(),g(m,{title:"2. Aktualisierung des openWB-Systems",onNextPage:n.nextPage,onPreviousPage:n.previousPage,onEndAssistant:n.endAssistant},{help:o(()=>[...t[4]||(t[4]=[a("p",null,"Bitte ein System-Update durchführen, um die Software auf den neuesten Stand zu bringen.",-1),a("p",null," Bitte warten, bis die Versionsliste aktualisiert wurde. Falls ein Update verfügbar ist, wird der Update-Button grün (zum Update bereit). ",-1),a("p",null,' Ein Klick auf "Update" startet die Aktualisierung, welche auch einen automatischen Reboot initiiert (bitte ca. 5 Minuten warten). Danach muss der Assistent neu gestartet werden. ',-1)])]),content:o(()=>[S(r,{"install-assistant-active":!0,onSendCommand:t[0]||(t[0]=e=>s.$emit("sendCommand",e)),onSave:t[1]||(t[1]=e=>s.$emit("save",e)),onReset:t[2]||(t[2]=e=>s.$emit("reset")),onDefaults:t[3]||(t[3]=e=>s.$emit("defaults"))})]),_:1},8,["onNextPage","onPreviousPage","onEndAssistant"])}const V=u(w,[["render",A],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStep2.vue"]]);export{V as default}; diff --git a/web/settings/assets/InstallAssistantStep20-s4xJv2Qr.js b/web/settings/assets/InstallAssistantStep20-ClY9THyn.js similarity index 91% rename from web/settings/assets/InstallAssistantStep20-s4xJv2Qr.js rename to web/settings/assets/InstallAssistantStep20-ClY9THyn.js index f5a21d658e..be44a111ae 100644 --- a/web/settings/assets/InstallAssistantStep20-s4xJv2Qr.js +++ b/web/settings/assets/InstallAssistantStep20-ClY9THyn.js @@ -1 +1 @@ -import{C as l}from"./index-Bv2WLdLZ.js";import d from"./InstallAssistantStepTemplate-B5w7xDgW.js";import{b as m}from"./ChargePointInstallation-u7kPgCv5.js";import{_ as u,m as a,l as g,z as f,u as o,q as w,y as t}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const P={name:"InstallAssistantStep4",components:{InstallAssistantStepTemplate:d,ChargePointInstallationView:m},mixins:[l],emits:["save","reset","defaults","sendCommand","switchPage","endAssistant"],data:()=>({mqttTopics:[]}),methods:{nextPage(){this.$emit("switchPage",9)},previousPage(){this.$emit("switchPage",3)},endAssistant(){this.$emit("endAssistant")}}};function v(s,e,B,k,c,i){const r=a("ChargePointInstallationView"),p=a("InstallAssistantStepTemplate");return g(),f(p,{title:"4. Einrichten der Ladepunkte (openWB als secondary)",onNextPage:i.nextPage,onPreviousPage:i.previousPage,onEndAssistant:i.endAssistant},{help:o(()=>[...e[4]||(e[4]=[t("p",null,' Diese openWB wurde als "secondary" eingestellt und wird von einer anderen openWB oder standalone ferngesteuert. ',-1),t("p",null," Bei vorkonfigurierten openWBs ist ab Werk bereits ein (zwei bei einer Duo) interner Ladepunkt eingetragen. Es müssen keine weiteren Ladepunkte hinzugefügt werden. ",-1),t("p",null,' Trage unter Ladepunkte bei verfügbare Ladepunkte "Interne openWB" ein und wähle die Bauart der openWB (z.B. openWB series 1/2 custom, Standard (+), Buchse oder Pro+) aus. ',-1),t("p",null,"Wenn eine openWB Duo gewählt wird, so sind zwei Ladepunkte mit Ladepunkt-Nummer 1 und 2 zu konfigurieren.",-1),t("p",{class:"font-weight-bold"},"Änderungen werden nur durch Klicken auf Speichern wirksam!",-1)])]),content:o(()=>[w(r,{"install-assistant-active":!0,onSendCommand:e[0]||(e[0]=n=>s.$emit("sendCommand",n)),onSave:e[1]||(e[1]=n=>s.$emit("save",n)),onReset:e[2]||(e[2]=n=>s.$emit("reset")),onDefaults:e[3]||(e[3]=n=>s.$emit("defaults"))})]),_:1},8,["onNextPage","onPreviousPage","onEndAssistant"])}const x=u(P,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStep20.vue"]]);export{x as default}; +import{C as l}from"./index-CE-5DBwq.js";import d from"./InstallAssistantStepTemplate-1RoKBQwk.js";import{b as m}from"./ChargePointInstallation-CmmRvfWj.js";import{_ as u,m as a,l as g,z as f,u as o,q as w,y as t}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const P={name:"InstallAssistantStep4",components:{InstallAssistantStepTemplate:d,ChargePointInstallationView:m},mixins:[l],emits:["save","reset","defaults","sendCommand","switchPage","endAssistant"],data:()=>({mqttTopics:[]}),methods:{nextPage(){this.$emit("switchPage",9)},previousPage(){this.$emit("switchPage",3)},endAssistant(){this.$emit("endAssistant")}}};function v(s,e,B,k,c,i){const r=a("ChargePointInstallationView"),p=a("InstallAssistantStepTemplate");return g(),f(p,{title:"4. Einrichten der Ladepunkte (openWB als secondary)",onNextPage:i.nextPage,onPreviousPage:i.previousPage,onEndAssistant:i.endAssistant},{help:o(()=>[...e[4]||(e[4]=[t("p",null,' Diese openWB wurde als "secondary" eingestellt und wird von einer anderen openWB oder standalone ferngesteuert. ',-1),t("p",null," Bei vorkonfigurierten openWBs ist ab Werk bereits ein (zwei bei einer Duo) interner Ladepunkt eingetragen. Es müssen keine weiteren Ladepunkte hinzugefügt werden. ",-1),t("p",null,' Trage unter Ladepunkte bei verfügbare Ladepunkte "Interne openWB" ein und wähle die Bauart der openWB (z.B. openWB series 1/2 custom, Standard (+), Buchse oder Pro+) aus. ',-1),t("p",null,"Wenn eine openWB Duo gewählt wird, so sind zwei Ladepunkte mit Ladepunkt-Nummer 1 und 2 zu konfigurieren.",-1),t("p",{class:"font-weight-bold"},"Änderungen werden nur durch Klicken auf Speichern wirksam!",-1)])]),content:o(()=>[w(r,{"install-assistant-active":!0,onSendCommand:e[0]||(e[0]=n=>s.$emit("sendCommand",n)),onSave:e[1]||(e[1]=n=>s.$emit("save",n)),onReset:e[2]||(e[2]=n=>s.$emit("reset")),onDefaults:e[3]||(e[3]=n=>s.$emit("defaults"))})]),_:1},8,["onNextPage","onPreviousPage","onEndAssistant"])}const x=u(P,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStep20.vue"]]);export{x as default}; diff --git a/web/settings/assets/InstallAssistantStep3-BgvaUa7O.js b/web/settings/assets/InstallAssistantStep3-CnCklya0.js similarity index 91% rename from web/settings/assets/InstallAssistantStep3-BgvaUa7O.js rename to web/settings/assets/InstallAssistantStep3-CnCklya0.js index 2108dad7f4..edca45a16c 100644 --- a/web/settings/assets/InstallAssistantStep3-BgvaUa7O.js +++ b/web/settings/assets/InstallAssistantStep3-CnCklya0.js @@ -1 +1 @@ -import{C as p}from"./index-Bv2WLdLZ.js";import d from"./InstallAssistantStepTemplate-B5w7xDgW.js";import{G as u}from"./GeneralConfiguration-BiYqLhF0.js";import{_ as m,m as i,l as g,z as f,u as r,q as w,y as a}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const P={name:"InstallAssistantStep3",components:{InstallAssistantStepTemplate:d,GeneralConfigurationView:u},mixins:[p],emits:["save","reset","defaults","sendCommand","switchPage","endAssistant"],data:()=>({mqttTopics:[{topic:"openWB/general/extern",writeable:!1}]}),methods:{nextPage(){this.$emit("switchPage",this.$store.state.mqtt["openWB/general/extern"]?20:4)},previousPage(){this.$emit("switchPage",2)},endAssistant(){this.$emit("endAssistant")}}};function S(n,e,k,A,c,s){const o=i("GeneralConfigurationView"),l=i("InstallAssistantStepTemplate");return g(),f(l,{title:"3. Auswahl des Steuerungsmodus",onNextPage:s.nextPage,onPreviousPage:s.previousPage,onEndAssistant:s.endAssistant},{help:r(()=>[...e[4]||(e[4]=[a("p",null,' Hier festlegen, ob die openWB als "steuernd" (primary) oder als ferngesteuert (secondary) arbeiten soll. Die Einstellung gilt für genau die WB, auf der aktuell konfiguriert wird (korrekte IP-Adresse beachten). ',-1),a("p",null," Eine openWB standalone hat keinen Ladepunkt und arbeitet nur als Steuerteil (primary). Eine openWB Standard(+), custom, Duo (2 Ladepunkte) und Buchse können sowohl als steuernde primary oder als ferngesteuerte secondary betrieben werden. Eine openWB Pro und Satellit können nur als s.g. Ladepunkt genutzt werden und benötigen zwingend einen separaten primary als Steuerteil. ",-1),a("p",{class:"font-weight-bold"},"Änderungen werden nur durch Klicken auf Speichern wirksam!",-1)])]),content:r(()=>[w(o,{"install-assistant-active":!0,onSendCommand:e[0]||(e[0]=t=>n.$emit("sendCommand",t)),onSave:e[1]||(e[1]=t=>n.$emit("save",t)),onReset:e[2]||(e[2]=t=>n.$emit("reset")),onDefaults:e[3]||(e[3]=t=>n.$emit("defaults"))})]),_:1},8,["onNextPage","onPreviousPage","onEndAssistant"])}const E=m(P,[["render",S],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStep3.vue"]]);export{E as default}; +import{C as p}from"./index-CE-5DBwq.js";import d from"./InstallAssistantStepTemplate-1RoKBQwk.js";import{G as u}from"./GeneralConfiguration-D0B_yW_W.js";import{_ as m,m as i,l as g,z as f,u as r,q as w,y as a}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const P={name:"InstallAssistantStep3",components:{InstallAssistantStepTemplate:d,GeneralConfigurationView:u},mixins:[p],emits:["save","reset","defaults","sendCommand","switchPage","endAssistant"],data:()=>({mqttTopics:[{topic:"openWB/general/extern",writeable:!1}]}),methods:{nextPage(){this.$emit("switchPage",this.$store.state.mqtt["openWB/general/extern"]?20:4)},previousPage(){this.$emit("switchPage",2)},endAssistant(){this.$emit("endAssistant")}}};function S(n,e,k,A,c,s){const o=i("GeneralConfigurationView"),l=i("InstallAssistantStepTemplate");return g(),f(l,{title:"3. Auswahl des Steuerungsmodus",onNextPage:s.nextPage,onPreviousPage:s.previousPage,onEndAssistant:s.endAssistant},{help:r(()=>[...e[4]||(e[4]=[a("p",null,' Hier festlegen, ob die openWB als "steuernd" (primary) oder als ferngesteuert (secondary) arbeiten soll. Die Einstellung gilt für genau die WB, auf der aktuell konfiguriert wird (korrekte IP-Adresse beachten). ',-1),a("p",null," Eine openWB standalone hat keinen Ladepunkt und arbeitet nur als Steuerteil (primary). Eine openWB Standard(+), custom, Duo (2 Ladepunkte) und Buchse können sowohl als steuernde primary oder als ferngesteuerte secondary betrieben werden. Eine openWB Pro und Satellit können nur als s.g. Ladepunkt genutzt werden und benötigen zwingend einen separaten primary als Steuerteil. ",-1),a("p",{class:"font-weight-bold"},"Änderungen werden nur durch Klicken auf Speichern wirksam!",-1)])]),content:r(()=>[w(o,{"install-assistant-active":!0,onSendCommand:e[0]||(e[0]=t=>n.$emit("sendCommand",t)),onSave:e[1]||(e[1]=t=>n.$emit("save",t)),onReset:e[2]||(e[2]=t=>n.$emit("reset")),onDefaults:e[3]||(e[3]=t=>n.$emit("defaults"))})]),_:1},8,["onNextPage","onPreviousPage","onEndAssistant"])}const E=m(P,[["render",S],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStep3.vue"]]);export{E as default}; diff --git a/web/settings/assets/InstallAssistantStep4-T_45YWNd.js b/web/settings/assets/InstallAssistantStep4-vdVisENj.js similarity index 91% rename from web/settings/assets/InstallAssistantStep4-T_45YWNd.js rename to web/settings/assets/InstallAssistantStep4-vdVisENj.js index 6b2e8e379d..9b6de6428d 100644 --- a/web/settings/assets/InstallAssistantStep4-T_45YWNd.js +++ b/web/settings/assets/InstallAssistantStep4-vdVisENj.js @@ -1 +1 @@ -import{C as l}from"./index-Bv2WLdLZ.js";import p from"./InstallAssistantStepTemplate-B5w7xDgW.js";import{I as d}from"./IoConfiguration-p0bHlEKR.js";import{_ as u,m as a,l as g,z as f,u as o,q as w,y as t,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const S={name:"InstallAssistantStep4",components:{InstallAssistantStepTemplate:p,IoConfigView:d},mixins:[l],emits:["save","reset","defaults","sendCommand","switchPage","endAssistant"],data:()=>({mqttTopics:[]}),methods:{nextPage(){this.$emit("switchPage",5)},previousPage(){this.$emit("switchPage",3)},endAssistant(){this.$emit("endAssistant")}}};function v(s,e,h,A,P,i){const r=a("IoConfigView"),m=a("InstallAssistantStepTemplate");return g(),f(m,{title:"4. Ein- und Ausgänge konfigurieren",onNextPage:i.nextPage,onPreviousPage:i.previousPage,onEndAssistant:i.endAssistant},{help:o(()=>[...e[4]||(e[4]=[t("p",null,'Diese openWB ist als "primary" konfiguriert und übernimmt die Regelung des Systems.',-1),t("p",{class:"font-weight-bold"},"Optional:",-1),t("p",null,[c(" Wird die openWB nicht als Energiemanagementsystem für steuerbare Verbrauchseinrichtungen (SteuVE) gemäß §14a EnWG verwendet, "),t("span",{class:"font-weight-bold"},"kann dieser Schritt übersprungen werden.")],-1),t("p",null," Soll die openWB als Energiemanagementsystem für steuerbare Verbrauchseinrichtungen (SteuVE) gemäß §14a EnWG verwendet werden, so ist für die VNB-Signaleingänge die entsprechende Hardware auszuwählen. ",-1),t("p",{class:"font-weight-bold"},"Änderungen werden nur durch Klicken auf Speichern wirksam!",-1)])]),content:o(()=>[w(r,{"install-assistant-active":!0,onSendCommand:e[0]||(e[0]=n=>s.$emit("sendCommand",n)),onSave:e[1]||(e[1]=n=>s.$emit("save",n)),onReset:e[2]||(e[2]=n=>s.$emit("reset")),onDefaults:e[3]||(e[3]=n=>s.$emit("defaults"))})]),_:1},8,["onNextPage","onPreviousPage","onEndAssistant"])}const x=u(S,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStep4.vue"]]);export{x as default}; +import{C as l}from"./index-CE-5DBwq.js";import p from"./InstallAssistantStepTemplate-1RoKBQwk.js";import{I as d}from"./IoConfiguration-DWzY_z-Z.js";import{_ as u,m as a,l as g,z as f,u as o,q as w,y as t,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const S={name:"InstallAssistantStep4",components:{InstallAssistantStepTemplate:p,IoConfigView:d},mixins:[l],emits:["save","reset","defaults","sendCommand","switchPage","endAssistant"],data:()=>({mqttTopics:[]}),methods:{nextPage(){this.$emit("switchPage",5)},previousPage(){this.$emit("switchPage",3)},endAssistant(){this.$emit("endAssistant")}}};function v(s,e,h,A,P,i){const r=a("IoConfigView"),m=a("InstallAssistantStepTemplate");return g(),f(m,{title:"4. Ein- und Ausgänge konfigurieren",onNextPage:i.nextPage,onPreviousPage:i.previousPage,onEndAssistant:i.endAssistant},{help:o(()=>[...e[4]||(e[4]=[t("p",null,'Diese openWB ist als "primary" konfiguriert und übernimmt die Regelung des Systems.',-1),t("p",{class:"font-weight-bold"},"Optional:",-1),t("p",null,[c(" Wird die openWB nicht als Energiemanagementsystem für steuerbare Verbrauchseinrichtungen (SteuVE) gemäß §14a EnWG verwendet, "),t("span",{class:"font-weight-bold"},"kann dieser Schritt übersprungen werden.")],-1),t("p",null," Soll die openWB als Energiemanagementsystem für steuerbare Verbrauchseinrichtungen (SteuVE) gemäß §14a EnWG verwendet werden, so ist für die VNB-Signaleingänge die entsprechende Hardware auszuwählen. ",-1),t("p",{class:"font-weight-bold"},"Änderungen werden nur durch Klicken auf Speichern wirksam!",-1)])]),content:o(()=>[w(r,{"install-assistant-active":!0,onSendCommand:e[0]||(e[0]=n=>s.$emit("sendCommand",n)),onSave:e[1]||(e[1]=n=>s.$emit("save",n)),onReset:e[2]||(e[2]=n=>s.$emit("reset")),onDefaults:e[3]||(e[3]=n=>s.$emit("defaults"))})]),_:1},8,["onNextPage","onPreviousPage","onEndAssistant"])}const x=u(S,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStep4.vue"]]);export{x as default}; diff --git a/web/settings/assets/InstallAssistantStep5-5MsTd5Et.js b/web/settings/assets/InstallAssistantStep5-LCyW2hS4.js similarity index 92% rename from web/settings/assets/InstallAssistantStep5-5MsTd5Et.js rename to web/settings/assets/InstallAssistantStep5-LCyW2hS4.js index 3744f39809..0d28c21f94 100644 --- a/web/settings/assets/InstallAssistantStep5-5MsTd5Et.js +++ b/web/settings/assets/InstallAssistantStep5-LCyW2hS4.js @@ -1 +1 @@ -import{C as d}from"./index-Bv2WLdLZ.js";import m from"./InstallAssistantStepTemplate-B5w7xDgW.js";import{H as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as u,m as r,l as g,z as w,u as a,q as f,y as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const h={name:"InstallAssistantStep5",components:{InstallAssistantStepTemplate:m,HardwareInstallationView:p},mixins:[d],emits:["save","reset","defaults","sendCommand","switchPage","endAssistant"],data:()=>({mqttTopics:[]}),methods:{nextPage(){this.$emit("switchPage",6)},previousPage(){this.$emit("switchPage",3)},endAssistant(){this.$emit("endAssistant")}}};function v(n,e,c,A,P,i){const o=r("HardwareInstallationView"),l=r("InstallAssistantStepTemplate");return g(),w(l,{title:"5. Energiesystem - Geräte und Komponenten einrichten",onNextPage:i.nextPage,onPreviousPage:i.previousPage,onEndAssistant:i.endAssistant},{help:a(()=>[...e[4]||(e[4]=[s("p",null," Für die Regelung werden aktuelle Leistungswerte des EVU-Zählers, der PV-Anlage und ggf. eines Speichers benötigt. ",-1),s("p",null," Sofern das System nicht zurückgesetzt wurde, ist im Auslieferungszustand für erste Ladetests ein virtueller Zähler vorkonfiguriert. Dieser muss zuerst gelöscht werden, wenn das im Gebäude installierte Energiesystem konfiguriert wird. ",-1),s("p",null," Alle Komponenten, welche über die gleiche IP-Adresse erreichbar sind werden als ein Gerät verstanden. Dieses Gerät ist über den Herstellernamen des Energiesystems im Auswahlmenü der verfügbaren Geräte auszuwählen. Unterhalb des Gerätes werden die zugehörigen Komponenten EVU-Zähler, WR und Speicher konfiguriert. Es können je nach Bedarf beliebig viele Geräte und Komponenten miteinander kombiniert werden. ",-1),s("p",{class:"font-weight-bold"},"Änderungen werden nur durch Klicken auf Speichern wirksam!",-1)])]),content:a(()=>[f(o,{"install-assistant-active":!0,onSendCommand:e[0]||(e[0]=t=>n.$emit("sendCommand",t)),onSave:e[1]||(e[1]=t=>n.$emit("save",t)),onReset:e[2]||(e[2]=t=>n.$emit("reset")),onDefaults:e[3]||(e[3]=t=>n.$emit("defaults"))})]),_:1},8,["onNextPage","onPreviousPage","onEndAssistant"])}const x=u(h,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStep5.vue"]]);export{x as default}; +import{C as d}from"./index-CE-5DBwq.js";import m from"./InstallAssistantStepTemplate-1RoKBQwk.js";import{H as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as u,m as r,l as g,z as w,u as a,q as f,y as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const h={name:"InstallAssistantStep5",components:{InstallAssistantStepTemplate:m,HardwareInstallationView:p},mixins:[d],emits:["save","reset","defaults","sendCommand","switchPage","endAssistant"],data:()=>({mqttTopics:[]}),methods:{nextPage(){this.$emit("switchPage",6)},previousPage(){this.$emit("switchPage",3)},endAssistant(){this.$emit("endAssistant")}}};function v(n,e,c,A,P,i){const o=r("HardwareInstallationView"),l=r("InstallAssistantStepTemplate");return g(),w(l,{title:"5. Energiesystem - Geräte und Komponenten einrichten",onNextPage:i.nextPage,onPreviousPage:i.previousPage,onEndAssistant:i.endAssistant},{help:a(()=>[...e[4]||(e[4]=[s("p",null," Für die Regelung werden aktuelle Leistungswerte des EVU-Zählers, der PV-Anlage und ggf. eines Speichers benötigt. ",-1),s("p",null," Sofern das System nicht zurückgesetzt wurde, ist im Auslieferungszustand für erste Ladetests ein virtueller Zähler vorkonfiguriert. Dieser muss zuerst gelöscht werden, wenn das im Gebäude installierte Energiesystem konfiguriert wird. ",-1),s("p",null," Alle Komponenten, welche über die gleiche IP-Adresse erreichbar sind werden als ein Gerät verstanden. Dieses Gerät ist über den Herstellernamen des Energiesystems im Auswahlmenü der verfügbaren Geräte auszuwählen. Unterhalb des Gerätes werden die zugehörigen Komponenten EVU-Zähler, WR und Speicher konfiguriert. Es können je nach Bedarf beliebig viele Geräte und Komponenten miteinander kombiniert werden. ",-1),s("p",{class:"font-weight-bold"},"Änderungen werden nur durch Klicken auf Speichern wirksam!",-1)])]),content:a(()=>[f(o,{"install-assistant-active":!0,onSendCommand:e[0]||(e[0]=t=>n.$emit("sendCommand",t)),onSave:e[1]||(e[1]=t=>n.$emit("save",t)),onReset:e[2]||(e[2]=t=>n.$emit("reset")),onDefaults:e[3]||(e[3]=t=>n.$emit("defaults"))})]),_:1},8,["onNextPage","onPreviousPage","onEndAssistant"])}const x=u(h,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStep5.vue"]]);export{x as default}; diff --git a/web/settings/assets/InstallAssistantStep6-BDDVU7mU.js b/web/settings/assets/InstallAssistantStep6-DM-0_myH.js similarity index 94% rename from web/settings/assets/InstallAssistantStep6-BDDVU7mU.js rename to web/settings/assets/InstallAssistantStep6-DM-0_myH.js index f40de29bcb..110b8f2581 100644 --- a/web/settings/assets/InstallAssistantStep6-BDDVU7mU.js +++ b/web/settings/assets/InstallAssistantStep6-DM-0_myH.js @@ -1 +1 @@ -import{C as d}from"./index-Bv2WLdLZ.js";import p from"./InstallAssistantStepTemplate-B5w7xDgW.js";import{b as u}from"./ChargePointInstallation-u7kPgCv5.js";import{_ as m,m as a,l as h,z as g,u as r,q as w,y as n}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const P={name:"InstallAssistantStep6",components:{InstallAssistantStepTemplate:p,ChargePointInstallationView:u},mixins:[d],emits:["save","reset","defaults","sendCommand","switchPage","endAssistant"],data:()=>({mqttTopics:[]}),methods:{nextPage(){this.$emit("switchPage",7)},previousPage(){this.$emit("switchPage",5)},endAssistant(){this.$emit("endAssistant")}}};function f(s,e,c,b,k,i){const o=a("ChargePointInstallationView"),l=a("InstallAssistantStepTemplate");return h(),g(l,{title:"6. Einrichten der Ladepunkte (openWB als primary)",onNextPage:i.nextPage,onPreviousPage:i.previousPage,onEndAssistant:i.endAssistant},{help:r(()=>[...e[4]||(e[4]=[n("p",null,' Enthält die steuernde openWB (primary) Ladetechnik, wird bei "Verfügbare Ladepunkte" "Interne openWB" ausgewählt. Weitere LP werden im primary als "Secondary openWB" oder andere WB-Typen wie "openWB Pro", "openwB Satellit" eingebunden. ',-1),n("p",null,"Bei openWBs ab Werk ist hier bereits ein Ladepunkt eingetragen.",-1),n("p",null," Nachfolgend werden die Eigenschaften des Ladepunktes wie IP-Adresse und elektrischer Anschluss definiert. Die meisten openWB werden 3-phasig angeschlossen! Bei mehreren Ladepunkten ist auf phasenrotierten Anschluss der openWB-Zuleitung zu achten! Abschließend wird die korrekte Zuordnung der Phase 1 des Ladekabels zur zugehörigen EVU-Zählerphase konfiguriert. Dies ist sehr wichtig, um optimales Lastmanagement sicherzustellen! ",-1),n("p",null," Tipp zur Zuordnung: Verwende ein nur 1-phasig ladendes Auto (z.B. Hybrid) oder stelle bei openWB mit 1p3p-Phasenumschaltung temporär unter Sofortladen (s. Einstellungen -> Ladeeinstellungen) auf einphasig, um eine 1-phasige Ladung zu erzwingen. Gehe unter Status und vergleiche die Leistungen bzw. Ströme der 3 Phasen am EVU-Zähler (rot) beim und nach dem Autoladen (Sofortladen mit 16A/ Stop). Diejenige EVU-Phase, die deutlich erhöhte Werte anzeigt, ist die auszuwählende EVU-Phase. ",-1),n("p",null,' Im grauen Abschnitt "Ladepunkt-Profile" können neben dem Standard-Ladepunkt-Profil auch weitere Ladepunkt-Profile, die andere WB-Typen abbilden, erstellt werden. Dort sind Eintragungen bzgl. des Ladepunkt-Maximalstroms bei einer Phase bzw. mehreren Phasen vorzunehmen. Die Profile werden abschließend im jeweiligen blauen Ladepunkt mittels Auswahlmenü zugeordnet. ',-1),n("p",{class:"font-weight-bold"},"Änderungen werden nur durch Klicken auf Speichern wirksam!",-1)])]),content:r(()=>[w(o,{"install-assistant-active":!0,onSendCommand:e[0]||(e[0]=t=>s.$emit("sendCommand",t)),onSave:e[1]||(e[1]=t=>s.$emit("save",t)),onReset:e[2]||(e[2]=t=>s.$emit("reset")),onDefaults:e[3]||(e[3]=t=>s.$emit("defaults"))})]),_:1},8,["onNextPage","onPreviousPage","onEndAssistant"])}const C=m(P,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStep6.vue"]]);export{C as default}; +import{C as d}from"./index-CE-5DBwq.js";import p from"./InstallAssistantStepTemplate-1RoKBQwk.js";import{b as u}from"./ChargePointInstallation-CmmRvfWj.js";import{_ as m,m as a,l as h,z as g,u as r,q as w,y as n}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const P={name:"InstallAssistantStep6",components:{InstallAssistantStepTemplate:p,ChargePointInstallationView:u},mixins:[d],emits:["save","reset","defaults","sendCommand","switchPage","endAssistant"],data:()=>({mqttTopics:[]}),methods:{nextPage(){this.$emit("switchPage",7)},previousPage(){this.$emit("switchPage",5)},endAssistant(){this.$emit("endAssistant")}}};function f(s,e,c,b,k,i){const o=a("ChargePointInstallationView"),l=a("InstallAssistantStepTemplate");return h(),g(l,{title:"6. Einrichten der Ladepunkte (openWB als primary)",onNextPage:i.nextPage,onPreviousPage:i.previousPage,onEndAssistant:i.endAssistant},{help:r(()=>[...e[4]||(e[4]=[n("p",null,' Enthält die steuernde openWB (primary) Ladetechnik, wird bei "Verfügbare Ladepunkte" "Interne openWB" ausgewählt. Weitere LP werden im primary als "Secondary openWB" oder andere WB-Typen wie "openWB Pro", "openwB Satellit" eingebunden. ',-1),n("p",null,"Bei openWBs ab Werk ist hier bereits ein Ladepunkt eingetragen.",-1),n("p",null," Nachfolgend werden die Eigenschaften des Ladepunktes wie IP-Adresse und elektrischer Anschluss definiert. Die meisten openWB werden 3-phasig angeschlossen! Bei mehreren Ladepunkten ist auf phasenrotierten Anschluss der openWB-Zuleitung zu achten! Abschließend wird die korrekte Zuordnung der Phase 1 des Ladekabels zur zugehörigen EVU-Zählerphase konfiguriert. Dies ist sehr wichtig, um optimales Lastmanagement sicherzustellen! ",-1),n("p",null," Tipp zur Zuordnung: Verwende ein nur 1-phasig ladendes Auto (z.B. Hybrid) oder stelle bei openWB mit 1p3p-Phasenumschaltung temporär unter Sofortladen (s. Einstellungen -> Ladeeinstellungen) auf einphasig, um eine 1-phasige Ladung zu erzwingen. Gehe unter Status und vergleiche die Leistungen bzw. Ströme der 3 Phasen am EVU-Zähler (rot) beim und nach dem Autoladen (Sofortladen mit 16A/ Stop). Diejenige EVU-Phase, die deutlich erhöhte Werte anzeigt, ist die auszuwählende EVU-Phase. ",-1),n("p",null,' Im grauen Abschnitt "Ladepunkt-Profile" können neben dem Standard-Ladepunkt-Profil auch weitere Ladepunkt-Profile, die andere WB-Typen abbilden, erstellt werden. Dort sind Eintragungen bzgl. des Ladepunkt-Maximalstroms bei einer Phase bzw. mehreren Phasen vorzunehmen. Die Profile werden abschließend im jeweiligen blauen Ladepunkt mittels Auswahlmenü zugeordnet. ',-1),n("p",{class:"font-weight-bold"},"Änderungen werden nur durch Klicken auf Speichern wirksam!",-1)])]),content:r(()=>[w(o,{"install-assistant-active":!0,onSendCommand:e[0]||(e[0]=t=>s.$emit("sendCommand",t)),onSave:e[1]||(e[1]=t=>s.$emit("save",t)),onReset:e[2]||(e[2]=t=>s.$emit("reset")),onDefaults:e[3]||(e[3]=t=>s.$emit("defaults"))})]),_:1},8,["onNextPage","onPreviousPage","onEndAssistant"])}const C=m(P,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStep6.vue"]]);export{C as default}; diff --git a/web/settings/assets/InstallAssistantStep7-BOfFk4sK.js b/web/settings/assets/InstallAssistantStep7-Djq01FHf.js similarity index 91% rename from web/settings/assets/InstallAssistantStep7-BOfFk4sK.js rename to web/settings/assets/InstallAssistantStep7-Djq01FHf.js index 003844d162..bedc33e154 100644 --- a/web/settings/assets/InstallAssistantStep7-BOfFk4sK.js +++ b/web/settings/assets/InstallAssistantStep7-Djq01FHf.js @@ -1 +1 @@ -import{C as l}from"./index-Bv2WLdLZ.js";import m from"./InstallAssistantStepTemplate-B5w7xDgW.js";import u from"./LoadManagementConfiguration-KljkkYHP.js";import{_ as p,m as a,l as g,z as h,u as r,q as c,y as n}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./OpenwbSortableList-CQO_8Mps.js";const f={name:"InstallAssistantStep7",components:{InstallAssistantStepTemplate:m,LoadManagementConfigurationView:u},mixins:[l],emits:["save","reset","defaults","sendCommand","switchPage","endAssistant"],data:()=>({mqttTopics:[]}),methods:{nextPage(){this.$emit("switchPage",8)},previousPage(){this.$emit("switchPage",6)},endAssistant(){this.$emit("endAssistant")}}};function b(s,e,S,w,A,i){const o=a("LoadManagementConfigurationView"),d=a("InstallAssistantStepTemplate");return g(),h(d,{title:"7. Konfiguration des Lastmanagements",onNextPage:i.nextPage,onPreviousPage:i.previousPage,onEndAssistant:i.endAssistant},{help:r(()=>[...e[4]||(e[4]=[n("p",null," Im Lastmanagement werden die maximale Leistung sowie die maximalen Ströme für jede Phase des Zählermoduls sowie bei Hybrid-Systemen (per DC-angebundener Speicher) die maximale Ausgangsleistung des Wechselrichters der PV-Anlage eingetragen, falls eine solche vorhanden ist. ",-1),n("p",null,' Der erste Zähler ist in der Regel der Zähler am EVU-Punkt (Position des PV/Speicher-Smartmeters direkt hinter dem VNB-Zähler). In openWB ist hierzu auf die unterhalb der "Vorhandene Zählermodule" liegende (rote) EVU-Zähler-Komponente zu klicken, in welche die maximale EVU-Leistung sowie die Phasenströme eingetragen werden, für die der Hausanschluss abgesichert ist (Elektriker fragen, typisch f. EFH: 24kW/3x35A, 43kW/3x63A). ',-1),n("p",null," Ist ein Wechselrichter mit DC-angebundenem Speicher unter Geräte hinzugefügt worden, dann ist unter der (grünen) WR-Komponente noch die maximale Ausgangsleistung des WR einzutragen. ",-1),n("p",null,' Der EVU-Zähler (rot) schließt alle weiteren Komponenten wie WR und Speicher unter sich ein. Bei AC-eingebundenen Speichern befinden sich WR und Speicher in derselben Ebene, bei DC-eingebundenen Speichern (Hybrid) der Speicher unterhalb des WR. Die Ladepunkte (z.B. "secondary openWB") befinden sich auf derselben Ebene wie der WR und unterhalb des EVU-Zählers. Anpassungen der Anordnungen sind über die Pfeil-Bereiche der Komponenten durch einfaches Verschieben mit der Maus oder am Smartphone möglich. ',-1),n("p",null,null,-1),n("p",{class:"font-weight-bold"},"Änderungen werden nur durch Klicken auf Speichern wirksam!",-1)])]),content:r(()=>[c(o,{"install-assistant-active":!0,onSendCommand:e[0]||(e[0]=t=>s.$emit("sendCommand",t)),onSave:e[1]||(e[1]=t=>s.$emit("save",t)),onReset:e[2]||(e[2]=t=>s.$emit("reset")),onDefaults:e[3]||(e[3]=t=>s.$emit("defaults"))})]),_:1},8,["onNextPage","onPreviousPage","onEndAssistant"])}const I=p(f,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStep7.vue"]]);export{I as default}; +import{C as l}from"./index-CE-5DBwq.js";import m from"./InstallAssistantStepTemplate-1RoKBQwk.js";import u from"./LoadManagementConfiguration-Rty2qCw0.js";import{_ as p,m as a,l as g,z as h,u as r,q as c,y as n}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./OpenwbSortableList-yQzkYwAQ.js";const f={name:"InstallAssistantStep7",components:{InstallAssistantStepTemplate:m,LoadManagementConfigurationView:u},mixins:[l],emits:["save","reset","defaults","sendCommand","switchPage","endAssistant"],data:()=>({mqttTopics:[]}),methods:{nextPage(){this.$emit("switchPage",8)},previousPage(){this.$emit("switchPage",6)},endAssistant(){this.$emit("endAssistant")}}};function b(s,e,S,w,A,i){const o=a("LoadManagementConfigurationView"),d=a("InstallAssistantStepTemplate");return g(),h(d,{title:"7. Konfiguration des Lastmanagements",onNextPage:i.nextPage,onPreviousPage:i.previousPage,onEndAssistant:i.endAssistant},{help:r(()=>[...e[4]||(e[4]=[n("p",null," Im Lastmanagement werden die maximale Leistung sowie die maximalen Ströme für jede Phase des Zählermoduls sowie bei Hybrid-Systemen (per DC-angebundener Speicher) die maximale Ausgangsleistung des Wechselrichters der PV-Anlage eingetragen, falls eine solche vorhanden ist. ",-1),n("p",null,' Der erste Zähler ist in der Regel der Zähler am EVU-Punkt (Position des PV/Speicher-Smartmeters direkt hinter dem VNB-Zähler). In openWB ist hierzu auf die unterhalb der "Vorhandene Zählermodule" liegende (rote) EVU-Zähler-Komponente zu klicken, in welche die maximale EVU-Leistung sowie die Phasenströme eingetragen werden, für die der Hausanschluss abgesichert ist (Elektriker fragen, typisch f. EFH: 24kW/3x35A, 43kW/3x63A). ',-1),n("p",null," Ist ein Wechselrichter mit DC-angebundenem Speicher unter Geräte hinzugefügt worden, dann ist unter der (grünen) WR-Komponente noch die maximale Ausgangsleistung des WR einzutragen. ",-1),n("p",null,' Der EVU-Zähler (rot) schließt alle weiteren Komponenten wie WR und Speicher unter sich ein. Bei AC-eingebundenen Speichern befinden sich WR und Speicher in derselben Ebene, bei DC-eingebundenen Speichern (Hybrid) der Speicher unterhalb des WR. Die Ladepunkte (z.B. "secondary openWB") befinden sich auf derselben Ebene wie der WR und unterhalb des EVU-Zählers. Anpassungen der Anordnungen sind über die Pfeil-Bereiche der Komponenten durch einfaches Verschieben mit der Maus oder am Smartphone möglich. ',-1),n("p",null,null,-1),n("p",{class:"font-weight-bold"},"Änderungen werden nur durch Klicken auf Speichern wirksam!",-1)])]),content:r(()=>[c(o,{"install-assistant-active":!0,onSendCommand:e[0]||(e[0]=t=>s.$emit("sendCommand",t)),onSave:e[1]||(e[1]=t=>s.$emit("save",t)),onReset:e[2]||(e[2]=t=>s.$emit("reset")),onDefaults:e[3]||(e[3]=t=>s.$emit("defaults"))})]),_:1},8,["onNextPage","onPreviousPage","onEndAssistant"])}const I=p(f,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStep7.vue"]]);export{I as default}; diff --git a/web/settings/assets/InstallAssistantStep8-B40wENux.js b/web/settings/assets/InstallAssistantStep8-C_AsSOUv.js similarity index 93% rename from web/settings/assets/InstallAssistantStep8-B40wENux.js rename to web/settings/assets/InstallAssistantStep8-C_AsSOUv.js index 648fcd5d69..67375d8cac 100644 --- a/web/settings/assets/InstallAssistantStep8-B40wENux.js +++ b/web/settings/assets/InstallAssistantStep8-C_AsSOUv.js @@ -1 +1 @@ -import{C as g}from"./index-Bv2WLdLZ.js";import p from"./InstallAssistantStepTemplate-B5w7xDgW.js";import{a as h}from"./VehicleConfiguration-CDk_8xEa.js";import{F as f}from"./vendor-fortawesome-DplTMxoa.js";import{_ as z,m as r,l as w,z as P,u as a,q as o,y as n,B as d}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const F={name:"InstallAssistantStep8",components:{InstallAssistantStepTemplate:p,VehicleConfigurationView:h,FontAwesomeIcon:f},mixins:[g],emits:["save","reset","defaults","sendCommand","switchPage","endAssistant"],data:()=>({mqttTopics:[]}),methods:{nextPage(){this.$emit("switchPage",9)},previousPage(){this.$emit("switchPage",7)},endAssistant(){this.$emit("endAssistant")}}},A={class:"font-weight-bold"};function v(s,e,c,S,V,i){const u=r("FontAwesomeIcon"),l=r("VehicleConfigurationView"),m=r("InstallAssistantStepTemplate");return w(),P(m,{title:"8. Einrichten der Fahrzeuge",onNextPage:i.nextPage,onPreviousPage:i.previousPage,onEndAssistant:i.endAssistant},{help:a(()=>[e[6]||(e[6]=n("p",null,"Vor dem eigentlichen Fahrzeug werden zuerst die Fahrzeug- und Lade-Profile konfiguriert.",-1)),e[7]||(e[7]=n("p",null," Bei nur einem Fahrzeug reicht das Standard-Fahrzeug-Profil aus. Bei mehreren Fahrzeugtypen werden weitere Fahrzeug-Profile hinzugefügt. Im Anschluss werden die Fahrzeug-Profile mit den passenden Einstellungen des Fahrzeugtyps versehen (Mindeststromstärke, Maximalstromstärke bei einer/mehreren Phase/n sowie Angaben zur Batterie und Handhabung der Phasen entsprechend den Daten des Automobilherstellers. Im Zweifelsfall den Hersteller des Autos oder im openWB-Forum nachfragen). ",-1)),n("p",A,[e[4]||(e[4]=d(' Wichtig: Die "Angaben zur Handhabung von Phasen" des Fahrzeugs sind richtig einzutragen! Beachte die Hilfstexte, die Du durch Klick auf ',-1)),o(u,{icon:["far","question-circle"]}),e[5]||(e[5]=d(" anzeigen kannst. ",-1))]),e[8]||(e[8]=n("p",null," Bei nur einem Fahrzeug reicht das Standard-Lade-Profil aus. Bei mehreren Fahrzeugen können weitere Lade-Profile hinzugefügt werden. Dies erlaubt die Nutzung unterschiedlicher Lademodi je Fahrzeug (z.B. EV1 = Sofortladen, EV2 = PV-Laden). Im Anschluss werden die Voreinstellungen zu den verschiedenen Lademodi konfiguriert. ",-1)),e[9]||(e[9]=n("p",null," Nun wird das eigentliche Fahrzeug angelegt und mit dem gewünschten Fahrzeug-Profil / Lade-Profil versehen. Ist nur ein Fahrzeug vorhanden, reicht das Standard-Fahrzeug aus. ",-1)),e[10]||(e[10]=n("p",{class:"font-weight-bold"},"Änderungen werden nur durch Klicken auf Speichern wirksam!",-1))]),content:a(()=>[o(l,{"install-assistant-active":!0,onSendCommand:e[0]||(e[0]=t=>s.$emit("sendCommand",t)),onSave:e[1]||(e[1]=t=>s.$emit("save",t)),onReset:e[2]||(e[2]=t=>s.$emit("reset")),onDefaults:e[3]||(e[3]=t=>s.$emit("defaults"))})]),_:1},8,["onNextPage","onPreviousPage","onEndAssistant"])}const E=z(F,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStep8.vue"]]);export{E as default}; +import{C as g}from"./index-CE-5DBwq.js";import p from"./InstallAssistantStepTemplate-1RoKBQwk.js";import{a as h}from"./VehicleConfiguration-848lVEbG.js";import{F as f}from"./vendor-fortawesome-DplTMxoa.js";import{_ as z,m as r,l as w,z as P,u as a,q as o,y as n,B as d}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const F={name:"InstallAssistantStep8",components:{InstallAssistantStepTemplate:p,VehicleConfigurationView:h,FontAwesomeIcon:f},mixins:[g],emits:["save","reset","defaults","sendCommand","switchPage","endAssistant"],data:()=>({mqttTopics:[]}),methods:{nextPage(){this.$emit("switchPage",9)},previousPage(){this.$emit("switchPage",7)},endAssistant(){this.$emit("endAssistant")}}},A={class:"font-weight-bold"};function v(s,e,c,S,V,i){const u=r("FontAwesomeIcon"),l=r("VehicleConfigurationView"),m=r("InstallAssistantStepTemplate");return w(),P(m,{title:"8. Einrichten der Fahrzeuge",onNextPage:i.nextPage,onPreviousPage:i.previousPage,onEndAssistant:i.endAssistant},{help:a(()=>[e[6]||(e[6]=n("p",null,"Vor dem eigentlichen Fahrzeug werden zuerst die Fahrzeug- und Lade-Profile konfiguriert.",-1)),e[7]||(e[7]=n("p",null," Bei nur einem Fahrzeug reicht das Standard-Fahrzeug-Profil aus. Bei mehreren Fahrzeugtypen werden weitere Fahrzeug-Profile hinzugefügt. Im Anschluss werden die Fahrzeug-Profile mit den passenden Einstellungen des Fahrzeugtyps versehen (Mindeststromstärke, Maximalstromstärke bei einer/mehreren Phase/n sowie Angaben zur Batterie und Handhabung der Phasen entsprechend den Daten des Automobilherstellers. Im Zweifelsfall den Hersteller des Autos oder im openWB-Forum nachfragen). ",-1)),n("p",A,[e[4]||(e[4]=d(' Wichtig: Die "Angaben zur Handhabung von Phasen" des Fahrzeugs sind richtig einzutragen! Beachte die Hilfstexte, die Du durch Klick auf ',-1)),o(u,{icon:["far","question-circle"]}),e[5]||(e[5]=d(" anzeigen kannst. ",-1))]),e[8]||(e[8]=n("p",null," Bei nur einem Fahrzeug reicht das Standard-Lade-Profil aus. Bei mehreren Fahrzeugen können weitere Lade-Profile hinzugefügt werden. Dies erlaubt die Nutzung unterschiedlicher Lademodi je Fahrzeug (z.B. EV1 = Sofortladen, EV2 = PV-Laden). Im Anschluss werden die Voreinstellungen zu den verschiedenen Lademodi konfiguriert. ",-1)),e[9]||(e[9]=n("p",null," Nun wird das eigentliche Fahrzeug angelegt und mit dem gewünschten Fahrzeug-Profil / Lade-Profil versehen. Ist nur ein Fahrzeug vorhanden, reicht das Standard-Fahrzeug aus. ",-1)),e[10]||(e[10]=n("p",{class:"font-weight-bold"},"Änderungen werden nur durch Klicken auf Speichern wirksam!",-1))]),content:a(()=>[o(l,{"install-assistant-active":!0,onSendCommand:e[0]||(e[0]=t=>s.$emit("sendCommand",t)),onSave:e[1]||(e[1]=t=>s.$emit("save",t)),onReset:e[2]||(e[2]=t=>s.$emit("reset")),onDefaults:e[3]||(e[3]=t=>s.$emit("defaults"))})]),_:1},8,["onNextPage","onPreviousPage","onEndAssistant"])}const E=z(F,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStep8.vue"]]);export{E as default}; diff --git a/web/settings/assets/InstallAssistantStep9-DcVM4qRZ.js b/web/settings/assets/InstallAssistantStep9-DOtuUWQv.js similarity index 90% rename from web/settings/assets/InstallAssistantStep9-DcVM4qRZ.js rename to web/settings/assets/InstallAssistantStep9-DOtuUWQv.js index f1b4977447..f1f618aed0 100644 --- a/web/settings/assets/InstallAssistantStep9-DcVM4qRZ.js +++ b/web/settings/assets/InstallAssistantStep9-DOtuUWQv.js @@ -1 +1 @@ -import{C as l}from"./index-Bv2WLdLZ.js";import p from"./InstallAssistantStepTemplate-B5w7xDgW.js";import{D as u}from"./DataManagement-CkfxmcJu.js";import{_ as d,m as a,l as g,z as f,u as i,q as v,y as o}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const P={name:"InstallAssistantStep9",components:{InstallAssistantStepTemplate:p,DataManagement:u},mixins:[l],emits:["save","reset","defaults","sendCommand","switchPage","endAssistant"],data:()=>({mqttTopics:[{topic:"openWB/general/extern",writeable:!1}]}),computed:{stepNumber(){return this.$store.state.mqtt["openWB/general/extern"]?5:9}},methods:{nextPage(){this.$emit("switchPage",10)},previousPage(){this.$emit("switchPage",this.$store.state.mqtt["openWB/general/extern"]?20:8)},endAssistant(){this.$emit("endAssistant")}}};function A(n,e,$,S,c,s){const r=a("DataManagement"),m=a("InstallAssistantStepTemplate");return g(),f(m,{title:`${s.stepNumber}. Datensicherung der neuen Konfiguration`,onNextPage:s.nextPage,onPreviousPage:s.previousPage,onEndAssistant:s.endAssistant},{help:i(()=>[...e[4]||(e[4]=[o("p",null," Wir empfehlen an dieser Stelle eine manuell initiierte Sicherung der neu konfigurierten openWB zu erstellen. ",-1),o("p",null," Dieser Vorgang sollte im Betrieb regelmäßig wiederholt werden (mindestens vor Updates), um sowohl die individuellen Log-Daten als auch auf ältere Konfigurationen zurückgreifen zu können (Backups). ",-1)])]),content:i(()=>[v(r,{"install-assistant-active":!0,onSendCommand:e[0]||(e[0]=t=>n.$emit("sendCommand",t)),onSave:e[1]||(e[1]=t=>n.$emit("save",t)),onReset:e[2]||(e[2]=t=>n.$emit("reset")),onDefaults:e[3]||(e[3]=t=>n.$emit("defaults"))})]),_:1},8,["title","onNextPage","onPreviousPage","onEndAssistant"])}const b=d(P,[["render",A],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStep9.vue"]]);export{b as default}; +import{C as l}from"./index-CE-5DBwq.js";import p from"./InstallAssistantStepTemplate-1RoKBQwk.js";import{D as u}from"./DataManagement-CnuBQnBT.js";import{_ as d,m as a,l as g,z as f,u as i,q as v,y as o}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const P={name:"InstallAssistantStep9",components:{InstallAssistantStepTemplate:p,DataManagement:u},mixins:[l],emits:["save","reset","defaults","sendCommand","switchPage","endAssistant"],data:()=>({mqttTopics:[{topic:"openWB/general/extern",writeable:!1}]}),computed:{stepNumber(){return this.$store.state.mqtt["openWB/general/extern"]?5:9}},methods:{nextPage(){this.$emit("switchPage",10)},previousPage(){this.$emit("switchPage",this.$store.state.mqtt["openWB/general/extern"]?20:8)},endAssistant(){this.$emit("endAssistant")}}};function A(n,e,$,S,c,s){const r=a("DataManagement"),m=a("InstallAssistantStepTemplate");return g(),f(m,{title:`${s.stepNumber}. Datensicherung der neuen Konfiguration`,onNextPage:s.nextPage,onPreviousPage:s.previousPage,onEndAssistant:s.endAssistant},{help:i(()=>[...e[4]||(e[4]=[o("p",null," Wir empfehlen an dieser Stelle eine manuell initiierte Sicherung der neu konfigurierten openWB zu erstellen. ",-1),o("p",null," Dieser Vorgang sollte im Betrieb regelmäßig wiederholt werden (mindestens vor Updates), um sowohl die individuellen Log-Daten als auch auf ältere Konfigurationen zurückgreifen zu können (Backups). ",-1)])]),content:i(()=>[v(r,{"install-assistant-active":!0,onSendCommand:e[0]||(e[0]=t=>n.$emit("sendCommand",t)),onSave:e[1]||(e[1]=t=>n.$emit("save",t)),onReset:e[2]||(e[2]=t=>n.$emit("reset")),onDefaults:e[3]||(e[3]=t=>n.$emit("defaults"))})]),_:1},8,["title","onNextPage","onPreviousPage","onEndAssistant"])}const b=d(P,[["render",A],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStep9.vue"]]);export{b as default}; diff --git a/web/settings/assets/InstallAssistantStepTemplate-B5w7xDgW.js b/web/settings/assets/InstallAssistantStepTemplate-1RoKBQwk.js similarity index 97% rename from web/settings/assets/InstallAssistantStepTemplate-B5w7xDgW.js rename to web/settings/assets/InstallAssistantStepTemplate-1RoKBQwk.js index d74b60fc67..41e138a510 100644 --- a/web/settings/assets/InstallAssistantStepTemplate-B5w7xDgW.js +++ b/web/settings/assets/InstallAssistantStepTemplate-1RoKBQwk.js @@ -1 +1 @@ -import{C as g}from"./index-Bv2WLdLZ.js";import{F as v,l as y,aI as w,aJ as x}from"./vendor-fortawesome-DplTMxoa.js";import{_ as k,m as r,l as a,f as i,q as t,u as s,y as n,j as _,B as c,x as p}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";const B="/openWB/web/settings/img/openWB_logo_light.png";y.add(w,x);const h={name:"InstallAssistantStepTemplate",components:{FontAwesomeIcon:v},mixins:[g],props:{title:{type:String,required:!0},hidePrevious:{type:Boolean,required:!1,default:!1},hideNext:{type:Boolean,required:!1,default:!1},hideEnd:{type:Boolean,required:!1,default:!1}},emits:["previousPage","nextPage","endAssistant"],methods:{nextPage(){window.scrollTo(0,0),this.$emit("nextPage")},previousPage(){window.scrollTo(0,0),this.$emit("previousPage")},endAssistant(){this.$emit("endAssistant")}}},C={class:"row justify-content-center mb-1"},P={key:0,class:"col-md-4 d-flex py-1 justify-content-center"},A={key:1,class:"col-md-4 d-flex py-1 justify-content-center"},j={key:2,class:"col-md-4 d-flex py-1 justify-content-center"},I={class:"row justify-content-center"},N={class:"page-help-text col-md-3 py-2"},S={class:"col py-2"};function T(u,e,o,$,q,l){const m=r("font-awesome-icon"),d=r("openwb-base-click-button"),b=r("openwb-base-card");return a(),i("div",null,[t(b,{title:o.title,"body-bg":"white",class:"p-0 mx-3"},{footer:s(()=>[n("div",C,[o.hidePrevious?p("",!0):(a(),i("div",P,[t(d,{class:"btn-block btn-warning",onButtonClicked:e[0]||(e[0]=f=>l.previousPage())},{default:s(()=>[t(m,{icon:["fas","caret-left"]}),e[3]||(e[3]=c(" Zurück ",-1))]),_:1})])),o.hideNext?p("",!0):(a(),i("div",A,[t(d,{class:"btn-block btn-success",onButtonClicked:e[1]||(e[1]=f=>l.nextPage())},{default:s(()=>[e[4]||(e[4]=c(" Weiter ",-1)),t(m,{icon:["fas","caret-right"]})]),_:1})])),o.hideEnd?p("",!0):(a(),i("div",j,[t(d,{class:"btn-block btn-danger",onButtonClicked:e[2]||(e[2]=f=>l.endAssistant())},{default:s(()=>[...e[5]||(e[5]=[c(" Assistent beenden ",-1)])]),_:1})]))])]),default:s(()=>[n("div",I,[n("div",N,[_(u.$slots,"help",{},()=>[e[6]||(e[6]=n("img",{src:B,alt:"openWB Logo",class:"w-100"},null,-1))],!0)]),n("div",S,[_(u.$slots,"content",{},void 0,!0)])])]),_:3},8,["title"])])}const R=k(h,[["render",T],["__scopeId","data-v-db9e78cb"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStepTemplate.vue"]]);export{R as default}; +import{C as g}from"./index-CE-5DBwq.js";import{F as v,l as y,aI as w,aJ as x}from"./vendor-fortawesome-DplTMxoa.js";import{_ as k,m as r,l as a,f as i,q as t,u as s,y as n,j as _,B as c,x as p}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";const B="/openWB/web/settings/img/openWB_logo_light.png";y.add(w,x);const h={name:"InstallAssistantStepTemplate",components:{FontAwesomeIcon:v},mixins:[g],props:{title:{type:String,required:!0},hidePrevious:{type:Boolean,required:!1,default:!1},hideNext:{type:Boolean,required:!1,default:!1},hideEnd:{type:Boolean,required:!1,default:!1}},emits:["previousPage","nextPage","endAssistant"],methods:{nextPage(){window.scrollTo(0,0),this.$emit("nextPage")},previousPage(){window.scrollTo(0,0),this.$emit("previousPage")},endAssistant(){this.$emit("endAssistant")}}},C={class:"row justify-content-center mb-1"},P={key:0,class:"col-md-4 d-flex py-1 justify-content-center"},A={key:1,class:"col-md-4 d-flex py-1 justify-content-center"},j={key:2,class:"col-md-4 d-flex py-1 justify-content-center"},I={class:"row justify-content-center"},N={class:"page-help-text col-md-3 py-2"},S={class:"col py-2"};function T(u,e,o,$,q,l){const m=r("font-awesome-icon"),d=r("openwb-base-click-button"),b=r("openwb-base-card");return a(),i("div",null,[t(b,{title:o.title,"body-bg":"white",class:"p-0 mx-3"},{footer:s(()=>[n("div",C,[o.hidePrevious?p("",!0):(a(),i("div",P,[t(d,{class:"btn-block btn-warning",onButtonClicked:e[0]||(e[0]=f=>l.previousPage())},{default:s(()=>[t(m,{icon:["fas","caret-left"]}),e[3]||(e[3]=c(" Zurück ",-1))]),_:1})])),o.hideNext?p("",!0):(a(),i("div",A,[t(d,{class:"btn-block btn-success",onButtonClicked:e[1]||(e[1]=f=>l.nextPage())},{default:s(()=>[e[4]||(e[4]=c(" Weiter ",-1)),t(m,{icon:["fas","caret-right"]})]),_:1})])),o.hideEnd?p("",!0):(a(),i("div",j,[t(d,{class:"btn-block btn-danger",onButtonClicked:e[2]||(e[2]=f=>l.endAssistant())},{default:s(()=>[...e[5]||(e[5]=[c(" Assistent beenden ",-1)])]),_:1})]))])]),default:s(()=>[n("div",I,[n("div",N,[_(u.$slots,"help",{},()=>[e[6]||(e[6]=n("img",{src:B,alt:"openWB Logo",class:"w-100"},null,-1))],!0)]),n("div",S,[_(u.$slots,"content",{},void 0,!0)])])]),_:3},8,["title"])])}const R=k(h,[["render",T],["__scopeId","data-v-db9e78cb"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/install_assistant/InstallAssistantStepTemplate.vue"]]);export{R as default}; diff --git a/web/settings/assets/IoConfiguration-p0bHlEKR.js b/web/settings/assets/IoConfiguration-DWzY_z-Z.js similarity index 94% rename from web/settings/assets/IoConfiguration-p0bHlEKR.js rename to web/settings/assets/IoConfiguration-DWzY_z-Z.js index c51a26c616..45a42bf82b 100644 --- a/web/settings/assets/IoConfiguration-p0bHlEKR.js +++ b/web/settings/assets/IoConfiguration-DWzY_z-Z.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/io_device-B9VauT5h.js","assets/index-Bv2WLdLZ.js","assets/vendor-BwGffBs-.js","assets/vendor-Cq9CCOuG.css","assets/vendor-fortawesome-DplTMxoa.js","assets/vendor-bootstrap-DxivtUnb.js","assets/vendor-jquery-CEMonh9Y.js","assets/vendor-bootstrap-BJ8HpIhY.css","assets/vendor-axios-C0vEeTtS.js","assets/index-xf6JJloS.css","assets/dynamic-import-helper-BheWnx7M.js","assets/io_device-CcaG1xZb.js","assets/io_device-BQVrxO7a.js","assets/io_action-l8MF-fIU.js","assets/OpenwbIoSinglePattern-Bacb85Zu.js","assets/io_action-DRS7-ewM.js","assets/io_action-BJjfa9Ux.js","assets/io_action-BhHdRCsk.js","assets/OpenwbIoPattern-eN9BCLqK.js","assets/OpenwbIoPattern-01UVkHjE.css","assets/io_action-CgPzOu6J.js"])))=>i.map(i=>d[i]); -import{F as q,l as L,al as z}from"./vendor-fortawesome-DplTMxoa.js";import{_ as D,C as W}from"./index-Bv2WLdLZ.js";import{_ as j}from"./dynamic-import-helper-BheWnx7M.js";import{_ as I,m as d,l as o,f as c,z as f,u as i,B as r,J as p,q as a,y as v,a7 as T,K as C,L as B,x as h,P as M}from"./vendor-BwGffBs-.js";const U={props:{ioDevice:{type:Object,required:!0}},emits:["update:configuration","sendCommand"],methods:{updateConfiguration(t,e=void 0){this.$emit("update:configuration",{value:t,object:e})},sendSystemCommand(t,e){this.$emit("sendCommand",{command:t,data:e})}}},F=I(U,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_devices/OpenwbIoDeviceConfigMixin.vue"]]),R={name:"OpenwbIoDeviceConfigFallback",mixins:[F]},$={class:"io-device-config-fallback"},N={key:1};function G(t,e,l,A,u,n){const m=d("openwb-base-alert"),y=d("openwb-base-textarea");return o(),c("div",$,[Object.keys(t.ioDevice.configuration).length==0?(o(),f(m,{key:0,subtype:"info"},{default:i(()=>[r(' Das I/O-Modul "'+p(t.ioDevice.name)+'" bietet keine Einstellungen. ',1)]),_:1})):(o(),c("div",N,[a(m,{subtype:"warning"},{default:i(()=>[r(' Es wurde keine Konfigurationsseite für das I/O-Modul "'+p(t.ioDevice.name)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),a(y,{title:"Konfiguration",subtype:"json","model-value":t.ioDevice.configuration,"onUpdate:modelValue":e[0]||(e[0]=b=>t.updateConfiguration(b,"configuration"))},{help:i(()=>[...e[1]||(e[1]=[r(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),a(m,{subtype:"info"},{default:i(()=>[v("pre",null,p(JSON.stringify(t.ioDevice.configuration,void 0,2)),1)]),_:1})]))])}const J=I(R,[["render",G],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_devices/OpenwbIoDeviceConfigFallback.vue"]]),Q={name:"OpenwbIoDeviceProxy",props:{ioDevice:{type:Object,required:!0}},emits:["update:configuration","sendCommand"],computed:{myComponent(){return console.debug(`loading io device: ${this.ioDevice.type}`),T({loader:()=>j(Object.assign({"./add_on/io_device.vue":()=>D(()=>import("./io_device-B9VauT5h.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])),"./dimm_kit/io_device.vue":()=>D(()=>import("./io_device-CcaG1xZb.js"),__vite__mapDeps([11,2,3,4,1,5,6,7,8,9,10])),"./eebus/io_device.vue":()=>D(()=>import("./io_device-BQVrxO7a.js"),__vite__mapDeps([12,2,3,4,1,5,6,7,8,9,10]))}),`./${this.ioDevice.type}/io_device.vue`,3),errorComponent:J})},outputs(){const t=[];if(this.ioDevice.output){if(this.ioDevice.output.analog)for(const e in this.ioDevice.output.analog)t.push(`openWB/set/system/io/${this.ioDevice.id}/set/manual/analog_output/${e}`);if(this.ioDevice.output.digital)for(const e in this.ioDevice.output.digital)t.push(`openWB/set/system/io/${this.ioDevice.id}/set/manual/digital_output/${e}`)}return t}},methods:{updateConfiguration(t){this.$emit("update:configuration",t)},sendCommand(t){this.$emit("sendCommand",t)}}};function H(t,e,l,A,u,n){const m=d("openwb-base-heading"),y=d("openwb-base-copy-to-clipboard"),b=d("openwb-base-alert");return o(),c("div",null,[a(m,null,{default:i(()=>[r(' Einstellungen für I/O-Modul "'+p(l.ioDevice.name)+'" ',1)]),_:1}),n.outputs.length?(o(),f(b,{key:0,subtype:"info"},{default:i(()=>[e[2]||(e[2]=r(" Die Ausgänge können über die folgenden Topics manuell per MQTT geschaltet werden. Falls Ausgänge in Aktionen konfiguriert werden, überschreibt das manuelle Setzen den Status. ",-1)),v("ul",null,[(o(!0),c(C,null,B(n.outputs,_=>(o(),c("li",{key:_},[a(y,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[r(p(_),1)]),_:2},1024)]))),128))]),e[3]||(e[3]=r(" Als Wert wird ein boolean als json oder 0/1 akzeptiert.",-1)),e[4]||(e[4]=v("br",null,null,-1)),e[5]||(e[5]=r(" Beispiel: ",-1)),e[6]||(e[6]=v("span",{class:"text-info"},"false",-1))]),_:1})):h("",!0),a(b,{subtype:"warning"},{default:i(()=>[e[7]||(e[7]=r(" Ist die ",-1)),e[8]||(e[8]=v("strong",null,"Benutzerverwaltung",-1)),e[9]||(e[9]=r(" aktiviert und sollen die Ausgänge über MQTT gesteuert werden, dann muss ein Benutzer mit Schreibrechten für die entsprechenden Topics angelegt werden, damit openWB die Daten akzeptiert. Hierfür werden automatisch die benötigten Berechtigungen in der Rolle ",-1)),v("strong",null,`"Daten: Ein-/Ausgangs Gerät '`+p(l.ioDevice.name)+"' ("+p(l.ioDevice.id)+') MQTT-Input"',1),e[10]||(e[10]=r(" angelegt, die einem Benutzer zugewiesen werden kann. ",-1))]),_:1}),(o(),f(M(n.myComponent),{"io-device":l.ioDevice,"onUpdate:configuration":e[0]||(e[0]=_=>n.updateConfiguration(_)),onSendCommand:e[1]||(e[1]=_=>n.sendCommand(_))},null,40,["io-device"]))])}const X=I(Q,[["render",H],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_devices/OpenwbIoDeviceProxy.vue"]]),Y={mixins:[W],props:{ioAction:{type:Object,required:!0},ioDevice:{type:Object,required:!0},availableChargePoints:{type:Array,required:!1,default:()=>[]},availableComponents:{type:Array,required:!1,default:()=>[]},availableIoDevices:{type:Array,required:!1,default:()=>[]}},emits:["update:configuration","sendCommand"],methods:{updateConfiguration(t,e=void 0){this.$emit("update:configuration",{value:t,object:e})}}},Z=I(Y,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_actions/OpenwbIoActionConfigMixin.vue"]]),K={name:"OpenwbIoActionConfigFallback",mixins:[Z]},ee={class:"io-action-config-fallback"},te={key:1};function ne(t,e,l,A,u,n){const m=d("openwb-base-alert"),y=d("openwb-base-textarea");return o(),c("div",ee,[Object.keys(t.ioAction?.configuration).length==0?(o(),f(m,{key:0,subtype:"info"},{default:i(()=>[r(' Die I/O-Aktion "'+p(t.ioAction?.name)+'" bietet keine Einstellungen. ',1)]),_:1})):(o(),c("div",te,[a(m,{subtype:"warning"},{default:i(()=>[r(' Es wurde keine Konfigurationsseite für die I/O-Aktion "'+p(t.ioAction?.name)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),a(y,{title:"Konfiguration",subtype:"json","model-value":t.ioAction?.configuration,"onUpdate:modelValue":e[0]||(e[0]=b=>t.updateConfiguration(b,"configuration"))},{help:i(()=>[...e[1]||(e[1]=[r(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),a(m,{subtype:"info"},{default:i(()=>[v("pre",null,p(JSON.stringify(t.ioAction?.configuration,void 0,2)),1)]),_:1})]))])}const oe=I(K,[["render",ne],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_actions/OpenwbIoActionConfigFallback.vue"]]),ie={name:"OpenwbIoActionProxy",props:{ioAction:{type:Object,required:!0},ioDevices:{type:Object,required:!0},installedChargePoints:{type:Object,required:!0},installedComponents:{type:Object,required:!0}},emits:["update:configuration","sendCommand"],computed:{myComponent(){return console.debug(`loading io action: ${this.ioAction?.group} / ${this.ioAction?.type}`),T({loader:()=>j(Object.assign({"./controllable_consumers/dimming/io_action.vue":()=>D(()=>import("./io_action-l8MF-fIU.js"),__vite__mapDeps([13,14,2,3,4,1,5,6,7,8,9,10])),"./controllable_consumers/dimming_direct_control/io_action.vue":()=>D(()=>import("./io_action-DRS7-ewM.js"),__vite__mapDeps([15,14,2,3,4,1,5,6,7,8,9,10])),"./controllable_consumers/load_manager/io_action.vue":()=>D(()=>import("./io_action-BJjfa9Ux.js"),__vite__mapDeps([16,2,3,4,1,5,6,7,8,9,10])),"./controllable_consumers/ripple_control_receiver/io_action.vue":()=>D(()=>import("./io_action-BhHdRCsk.js"),__vite__mapDeps([17,18,4,2,3,19,1,5,6,7,8,9,10])),"./generator_systems/stepwise_control/io_action.vue":()=>D(()=>import("./io_action-CgPzOu6J.js"),__vite__mapDeps([20,18,4,2,3,19,1,5,6,7,8,9,10]))}),`./${this.ioAction?.group}/${this.ioAction?.type}/io_action.vue`,4),errorComponent:oe})},ioDeviceList(){return Object.keys(this.ioDevices).map(t=>({value:this.ioDevices[t]?.id,text:this.ioDevices[t]?.name}))},availableIoDevices(){return Object.values(this.ioDevices)},availableChargePoints(){return Object.values(this.installedChargePoints).map(t=>({value:t?.id,text:t?.name}))},availableComponents(){return Object.values(this.installedComponents).map(t=>({value:t?.id,text:t?.name,type:t?.type}))}},methods:{updateConfiguration(t,e=void 0){e?this.$emit("update:configuration",{value:t,object:e}):this.$emit("update:configuration",t)},updateIoDevice(t){if(this.updateConfiguration(t,"configuration.io_device"),Array.isArray(this.ioAction.configuration?.input_pattern)){let e=this.ioAction.configuration.input_pattern.map(l=>({value:l.value,matrix:{}}));this.updateConfiguration(e,"configuration.input_pattern")}Object.prototype.hasOwnProperty.call(this.ioAction.configuration,"digital_input")&&this.updateConfiguration(null,"configuration.digital_input")}}},ae={key:0};function se(t,e,l,A,u,n){const m=d("openwb-base-heading"),y=d("openwb-base-select-input");return o(),c(C,null,[a(m,null,{default:i(()=>[r(' Einstellungen für I/O-Aktion "'+p(l.ioAction?.name)+'" ',1)]),_:1}),a(y,{title:"Eingangs-Gerät","not-selected":"Bitte auswählen","empty-value":null,required:"",options:n.ioDeviceList,"model-value":l.ioAction?.configuration.io_device,"onUpdate:modelValue":e[0]||(e[0]=b=>n.updateIoDevice(b))},{help:i(()=>[...e[2]||(e[2]=[r(" Bitte das Gerät auswählen, über das der Schaltbefehl empfangen werden soll. Für jede Aktion kann nur ein Gerät ausgewählt werden. ",-1)])]),_:1},8,["options","model-value"]),l.ioAction?.configuration.io_device!==null?(o(),c("div",ae,[e[3]||(e[3]=v("hr",null,null,-1)),(o(),f(M(n.myComponent),{"io-action":l.ioAction,"io-device":l.ioDevices[`openWB/system/io/${l.ioAction.configuration.io_device}/config`],"available-charge-points":n.availableChargePoints,"available-components":n.availableComponents,"available-io-devices":n.availableIoDevices,"onUpdate:configuration":e[1]||(e[1]=b=>n.updateConfiguration(b))},null,40,["io-action","io-device","available-charge-points","available-components","available-io-devices"]))])):h("",!0)],64)}const re=I(ie,[["render",se],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_actions/OpenwbIoActionProxy.vue"]]);L.add(z);const le={name:"OpenwbIoConfigView",components:{FontAwesomeIcon:q,OpenwbIoDeviceProxy:X,OpenwbIoActionProxy:re},mixins:[W],props:{installAssistantActive:{type:Boolean,required:!1,default:!1}},emits:["save","reset","defaults","send-command"],data(){return{mqttTopics:[{topic:"openWB/chargepoint/+/config",writeable:!1},{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/io/action/+/config",writeable:!0},{topic:"openWB/system/configurable/io_actions",writeable:!1},{topic:"openWB/system/configurable/io_devices",writeable:!1},{topic:"openWB/system/device/+/component/+/config",writeable:!1},{topic:"openWB/system/io/+/config",writeable:!0}],showIoDeviceDeleteModal:!1,modalIoDeviceIndex:void 0,ioDeviceToAdd:void 0,showIoActionDeleteModal:!1,modalIoActionIndex:void 0,ioActionToAdd:void 0}},computed:{ioDeviceList:{get(){let t=this.$store.state.mqtt["openWB/system/configurable/io_devices"];return this.$store.state.mqtt["openWB/general/extern"]===!0?t?.filter(e=>e.value=="add_on"):t}},installedIoDevices(){const t=this.getWildcardTopics("openWB/system/io/+/config");return Object.fromEntries(Object.entries(t).filter(([,e])=>e&&typeof e=="object"))},ioActionList:{get(){return this.$store.state.mqtt["openWB/system/configurable/io_actions"]===void 0?[]:Object.entries(this.$store.state.mqtt["openWB/system/configurable/io_actions"]).map(([t,e])=>({label:e.group_name,options:e.actions.map(l=>({value:[t,l.value],text:l.text})).sort((l,A)=>l.text.localeCompare(A.text))})).sort((t,e)=>t.label.localeCompare(e.label))}},installedIoActions:{get(){return this.getWildcardTopics("openWB/io/action/+/config")}},installedChargePoints:{get(){return this.getWildcardTopics("openWB/chargepoint/+/config")}},installedComponents:{get(){return this.getWildcardTopics("openWB/system/device/+/component/+/config")}}},methods:{getIoDeviceName(t){return this.$store.state.mqtt["openWB/system/io/"+t+"/config"]?this.$store.state.mqtt["openWB/system/io/"+t+"/config"].name:"I/O-Gerät "+t},addIoDevice(){this.sendSystemCommand("addIoDevice",{type:this.ioDeviceToAdd})},removeIoDeviceModal(t,e){e.stopPropagation(),this.modalIoDeviceIndex=parseInt(t.match(/(?:\/)(\d+)(?=\/)/)[1]),this.showIoDeviceDeleteModal=!0},removeIoDevice(t,e){this.showIoDeviceDeleteModal=!1,e=="confirm"&&this.sendSystemCommand("removeIoDevice",{id:t})},addIoAction(){this.sendSystemCommand("addIoAction",{type:this.ioActionToAdd})},removeIoActionModal(t,e){e.stopPropagation(),this.modalIoActionIndex=parseInt(t.match(/(?:\/)(\d+)(?=\/)/)[1]),this.showIoActionDeleteModal=!0},removeIoAction(t,e){this.showIoActionDeleteModal=!1,e=="confirm"&&this.sendSystemCommand("removeIoAction",{id:t})},sendSystemCommand(t,e){this.$emit("send-command",{command:t,data:e})},updateConfiguration(t,e){console.debug("updateConfiguration",t,e),this.updateState(t,e.value,e.object)}}},de={class:"ioConfig"},ue={name:"ioConfigForm"},ce={key:0},pe={key:1},me={key:0};function ge(t,e,l,A,u,n){const m=d("openwb-base-modal-dialog"),y=d("font-awesome-icon"),b=d("openwb-base-avatar"),_=d("openwb-base-text-input"),P=d("openwb-io-device-proxy"),k=d("openwb-base-card"),x=d("openwb-base-select-input"),E=d("openwb-base-alert"),V=d("openwb-io-action-proxy"),S=d("openwb-base-submit-buttons");return o(),c(C,null,[a(m,{show:u.showIoDeviceDeleteModal,title:"Modul löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:e[0]||(e[0]=s=>n.removeIoDevice(u.modalIoDeviceIndex,s))},{default:i(()=>[r(' Willst Du das Ein-/Ausgangs-Gerät "'+p(n.getIoDeviceName(u.modalIoDeviceIndex))+'" (ID: '+p(u.modalIoDeviceIndex)+") wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ",1)]),_:1},8,["show"]),a(m,{show:u.showIoActionDeleteModal,title:"Aktion löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:e[1]||(e[1]=s=>n.removeIoAction(u.modalIoActionIndex,s))},{default:i(()=>[r(' Willst Du die Aktion "'+p(n.getIoDeviceName(u.modalIoActionIndex))+'" (ID: '+p(u.modalIoActionIndex)+") wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ",1)]),_:1},8,["show"]),v("div",de,[v("form",ue,[a(k,{title:"Ein-/Ausgangs-Geräte"},{default:i(()=>[(o(!0),c(C,null,B(n.installedIoDevices,(s,w)=>(o(),f(k,{key:w,title:s?.name+" (ID: "+s?.id+")",collapsible:!0,collapsed:!0,subtype:"primary"},{actions:i(g=>[g.collapsed?h("",!0):(o(),f(b,{key:0,class:"bg-danger clickable",onClick:O=>n.removeIoDeviceModal(w,O)},{default:i(()=>[a(y,{icon:["fas","trash"]})]),_:1},8,["onClick"]))]),default:i(()=>[a(_,{title:"Bezeichnung",subtype:"text","model-value":s.name,"onUpdate:modelValue":g=>t.updateState(w,g,"name")},null,8,["model-value","onUpdate:modelValue"]),a(_,{title:"Modul",subtype:"text",disabled:"",readonly:"","model-value":t.$store.state.mqtt[w].type},null,8,["model-value"]),e[8]||(e[8]=v("hr",null,null,-1)),a(P,{"io-device":s,"onUpdate:configuration":g=>n.updateConfiguration(w,g),onSendCommand:e[2]||(e[2]=g=>n.sendSystemCommand(g.command,g.data))},null,8,["io-device","onUpdate:configuration"])]),_:2},1032,["title"]))),128)),Object.keys(n.installedIoDevices).length>0?(o(),c("hr",ce)):h("",!0),a(x,{title:"Verfügbare Geräte","not-selected":"Bitte auswählen",options:n.ioDeviceList,"model-value":u.ioDeviceToAdd,"add-button":!0,"onUpdate:modelValue":e[3]||(e[3]=s=>u.ioDeviceToAdd=s),"onInput:add":n.addIoDevice},{help:i(()=>[...e[9]||(e[9]=[r(" Bitte ein Ein-/Ausgangs-Modul auswählen, das hinzugefügt werden soll. ",-1)])]),_:1},8,["options","model-value","onInput:add"])]),_:1}),a(k,{title:"Ein-/Ausgangs-Aktionen"},{default:i(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(o(),f(E,{key:0,subtype:"info"},{default:i(()=>[...e[10]||(e[10]=[r(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})):(o(),c("div",pe,[(o(!0),c(C,null,B(n.installedIoActions,(s,w)=>(o(),f(k,{key:w,title:s?.name+" (ID: "+s?.id+")",collapsible:!0,collapsed:!0,subtype:"primary"},{actions:i(g=>[g.collapsed?h("",!0):(o(),f(b,{key:0,class:"bg-danger clickable",onClick:O=>n.removeIoActionModal(w,O)},{default:i(()=>[a(y,{icon:["fas","trash"]})]),_:1},8,["onClick"]))]),default:i(()=>[a(_,{title:"Bezeichnung",subtype:"text","model-value":s?.name,"onUpdate:modelValue":g=>t.updateState(w,g,"name")},null,8,["model-value","onUpdate:modelValue"]),a(_,{title:"Modul",subtype:"text",disabled:"",readonly:"","model-value":[s?.group,s?.type].join(" / ")},null,8,["model-value"]),e[11]||(e[11]=v("hr",null,null,-1)),s!==void 0?(o(),f(V,{key:0,"io-action":s,"io-devices":n.installedIoDevices,"installed-charge-points":n.installedChargePoints,"installed-components":n.installedComponents,"onUpdate:configuration":g=>n.updateConfiguration(w,g)},null,8,["io-action","io-devices","installed-charge-points","installed-components","onUpdate:configuration"])):h("",!0)]),_:2},1032,["title"]))),128)),Object.keys(n.installedIoActions).length>0?(o(),c("hr",me)):h("",!0),Object.keys(n.installedIoDevices).length>0?(o(),f(x,{key:1,title:"Verfügbare Aktionen","not-selected":"Bitte auswählen",groups:n.ioActionList,"model-value":u.ioActionToAdd,"add-button":!0,"onUpdate:modelValue":e[4]||(e[4]=s=>u.ioActionToAdd=s),"onInput:add":n.addIoAction},{help:i(()=>[...e[12]||(e[12]=[r(" Bitte eine Ein-/Ausgangs-Aktion auswählen, die hinzugefügt werden soll. ",-1)])]),_:1},8,["groups","model-value","onInput:add"])):(o(),f(E,{key:2,subtype:"warning"},{default:i(()=>[...e[13]||(e[13]=[r(" Keine Ein-/Ausgangs-Geräte vorhanden!",-1),v("br",null,null,-1),r(" Bitte füge zuerst ein Ein-/Ausgangs-Gerät hinzu, bevor Du Aktionen konfigurierst. ",-1)])]),_:1}))]))]),_:1}),a(S,{"form-name":"ioConfigForm",onSave:e[5]||(e[5]=s=>t.$emit("save",t.mqttTopicsToPublish)),onReset:e[6]||(e[6]=s=>t.$emit("reset")),onDefaults:e[7]||(e[7]=s=>t.$emit("defaults"))})])])],64)}const be=I(le,[["render",ge],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/IoConfiguration.vue"]]),we=Object.freeze(Object.defineProperty({__proto__:null,default:be},Symbol.toStringTag,{value:"Module"}));export{be as I,F as O,Z as a,we as b}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/io_device-BMg8FqtU.js","assets/index-CE-5DBwq.js","assets/vendor-BwGffBs-.js","assets/vendor-Cq9CCOuG.css","assets/vendor-fortawesome-DplTMxoa.js","assets/vendor-bootstrap-DxivtUnb.js","assets/vendor-jquery-CEMonh9Y.js","assets/vendor-bootstrap-BJ8HpIhY.css","assets/vendor-axios-C0vEeTtS.js","assets/index-xf6JJloS.css","assets/dynamic-import-helper-BheWnx7M.js","assets/io_device-CNwYX7pQ.js","assets/io_device-C5cnwx0W.js","assets/io_action-CaULNlPp.js","assets/OpenwbIoSinglePattern-Bacb85Zu.js","assets/io_action-DCPf-V2m.js","assets/io_action-CSe0TL5K.js","assets/io_action-DdUO_cY2.js","assets/OpenwbIoPattern-eN9BCLqK.js","assets/OpenwbIoPattern-01UVkHjE.css","assets/io_action-CZ8ZhCvu.js"])))=>i.map(i=>d[i]); +import{F as q,l as L,al as z}from"./vendor-fortawesome-DplTMxoa.js";import{_ as D,C as W}from"./index-CE-5DBwq.js";import{_ as j}from"./dynamic-import-helper-BheWnx7M.js";import{_ as I,m as d,l as o,f as c,z as f,u as i,B as r,J as p,q as a,y as v,a7 as T,K as C,L as B,x as h,P as M}from"./vendor-BwGffBs-.js";const U={props:{ioDevice:{type:Object,required:!0}},emits:["update:configuration","sendCommand"],methods:{updateConfiguration(t,e=void 0){this.$emit("update:configuration",{value:t,object:e})},sendSystemCommand(t,e){this.$emit("sendCommand",{command:t,data:e})}}},F=I(U,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_devices/OpenwbIoDeviceConfigMixin.vue"]]),R={name:"OpenwbIoDeviceConfigFallback",mixins:[F]},$={class:"io-device-config-fallback"},N={key:1};function G(t,e,l,A,u,n){const m=d("openwb-base-alert"),y=d("openwb-base-textarea");return o(),c("div",$,[Object.keys(t.ioDevice.configuration).length==0?(o(),f(m,{key:0,subtype:"info"},{default:i(()=>[r(' Das I/O-Modul "'+p(t.ioDevice.name)+'" bietet keine Einstellungen. ',1)]),_:1})):(o(),c("div",N,[a(m,{subtype:"warning"},{default:i(()=>[r(' Es wurde keine Konfigurationsseite für das I/O-Modul "'+p(t.ioDevice.name)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),a(y,{title:"Konfiguration",subtype:"json","model-value":t.ioDevice.configuration,"onUpdate:modelValue":e[0]||(e[0]=b=>t.updateConfiguration(b,"configuration"))},{help:i(()=>[...e[1]||(e[1]=[r(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),a(m,{subtype:"info"},{default:i(()=>[v("pre",null,p(JSON.stringify(t.ioDevice.configuration,void 0,2)),1)]),_:1})]))])}const J=I(R,[["render",G],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_devices/OpenwbIoDeviceConfigFallback.vue"]]),Q={name:"OpenwbIoDeviceProxy",props:{ioDevice:{type:Object,required:!0}},emits:["update:configuration","sendCommand"],computed:{myComponent(){return console.debug(`loading io device: ${this.ioDevice.type}`),T({loader:()=>j(Object.assign({"./add_on/io_device.vue":()=>D(()=>import("./io_device-BMg8FqtU.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])),"./dimm_kit/io_device.vue":()=>D(()=>import("./io_device-CNwYX7pQ.js"),__vite__mapDeps([11,2,3,4,1,5,6,7,8,9,10])),"./eebus/io_device.vue":()=>D(()=>import("./io_device-C5cnwx0W.js"),__vite__mapDeps([12,2,3,4,1,5,6,7,8,9,10]))}),`./${this.ioDevice.type}/io_device.vue`,3),errorComponent:J})},outputs(){const t=[];if(this.ioDevice.output){if(this.ioDevice.output.analog)for(const e in this.ioDevice.output.analog)t.push(`openWB/set/system/io/${this.ioDevice.id}/set/manual/analog_output/${e}`);if(this.ioDevice.output.digital)for(const e in this.ioDevice.output.digital)t.push(`openWB/set/system/io/${this.ioDevice.id}/set/manual/digital_output/${e}`)}return t}},methods:{updateConfiguration(t){this.$emit("update:configuration",t)},sendCommand(t){this.$emit("sendCommand",t)}}};function H(t,e,l,A,u,n){const m=d("openwb-base-heading"),y=d("openwb-base-copy-to-clipboard"),b=d("openwb-base-alert");return o(),c("div",null,[a(m,null,{default:i(()=>[r(' Einstellungen für I/O-Modul "'+p(l.ioDevice.name)+'" ',1)]),_:1}),n.outputs.length?(o(),f(b,{key:0,subtype:"info"},{default:i(()=>[e[2]||(e[2]=r(" Die Ausgänge können über die folgenden Topics manuell per MQTT geschaltet werden. Falls Ausgänge in Aktionen konfiguriert werden, überschreibt das manuelle Setzen den Status. ",-1)),v("ul",null,[(o(!0),c(C,null,B(n.outputs,_=>(o(),c("li",{key:_},[a(y,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[r(p(_),1)]),_:2},1024)]))),128))]),e[3]||(e[3]=r(" Als Wert wird ein boolean als json oder 0/1 akzeptiert.",-1)),e[4]||(e[4]=v("br",null,null,-1)),e[5]||(e[5]=r(" Beispiel: ",-1)),e[6]||(e[6]=v("span",{class:"text-info"},"false",-1))]),_:1})):h("",!0),a(b,{subtype:"warning"},{default:i(()=>[e[7]||(e[7]=r(" Ist die ",-1)),e[8]||(e[8]=v("strong",null,"Benutzerverwaltung",-1)),e[9]||(e[9]=r(" aktiviert und sollen die Ausgänge über MQTT gesteuert werden, dann muss ein Benutzer mit Schreibrechten für die entsprechenden Topics angelegt werden, damit openWB die Daten akzeptiert. Hierfür werden automatisch die benötigten Berechtigungen in der Rolle ",-1)),v("strong",null,`"Daten: Ein-/Ausgangs Gerät '`+p(l.ioDevice.name)+"' ("+p(l.ioDevice.id)+') MQTT-Input"',1),e[10]||(e[10]=r(" angelegt, die einem Benutzer zugewiesen werden kann. ",-1))]),_:1}),(o(),f(M(n.myComponent),{"io-device":l.ioDevice,"onUpdate:configuration":e[0]||(e[0]=_=>n.updateConfiguration(_)),onSendCommand:e[1]||(e[1]=_=>n.sendCommand(_))},null,40,["io-device"]))])}const X=I(Q,[["render",H],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_devices/OpenwbIoDeviceProxy.vue"]]),Y={mixins:[W],props:{ioAction:{type:Object,required:!0},ioDevice:{type:Object,required:!0},availableChargePoints:{type:Array,required:!1,default:()=>[]},availableComponents:{type:Array,required:!1,default:()=>[]},availableIoDevices:{type:Array,required:!1,default:()=>[]}},emits:["update:configuration","sendCommand"],methods:{updateConfiguration(t,e=void 0){this.$emit("update:configuration",{value:t,object:e})}}},Z=I(Y,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_actions/OpenwbIoActionConfigMixin.vue"]]),K={name:"OpenwbIoActionConfigFallback",mixins:[Z]},ee={class:"io-action-config-fallback"},te={key:1};function ne(t,e,l,A,u,n){const m=d("openwb-base-alert"),y=d("openwb-base-textarea");return o(),c("div",ee,[Object.keys(t.ioAction?.configuration).length==0?(o(),f(m,{key:0,subtype:"info"},{default:i(()=>[r(' Die I/O-Aktion "'+p(t.ioAction?.name)+'" bietet keine Einstellungen. ',1)]),_:1})):(o(),c("div",te,[a(m,{subtype:"warning"},{default:i(()=>[r(' Es wurde keine Konfigurationsseite für die I/O-Aktion "'+p(t.ioAction?.name)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),a(y,{title:"Konfiguration",subtype:"json","model-value":t.ioAction?.configuration,"onUpdate:modelValue":e[0]||(e[0]=b=>t.updateConfiguration(b,"configuration"))},{help:i(()=>[...e[1]||(e[1]=[r(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),a(m,{subtype:"info"},{default:i(()=>[v("pre",null,p(JSON.stringify(t.ioAction?.configuration,void 0,2)),1)]),_:1})]))])}const oe=I(K,[["render",ne],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_actions/OpenwbIoActionConfigFallback.vue"]]),ie={name:"OpenwbIoActionProxy",props:{ioAction:{type:Object,required:!0},ioDevices:{type:Object,required:!0},installedChargePoints:{type:Object,required:!0},installedComponents:{type:Object,required:!0}},emits:["update:configuration","sendCommand"],computed:{myComponent(){return console.debug(`loading io action: ${this.ioAction?.group} / ${this.ioAction?.type}`),T({loader:()=>j(Object.assign({"./controllable_consumers/dimming/io_action.vue":()=>D(()=>import("./io_action-CaULNlPp.js"),__vite__mapDeps([13,14,2,3,4,1,5,6,7,8,9,10])),"./controllable_consumers/dimming_direct_control/io_action.vue":()=>D(()=>import("./io_action-DCPf-V2m.js"),__vite__mapDeps([15,14,2,3,4,1,5,6,7,8,9,10])),"./controllable_consumers/load_manager/io_action.vue":()=>D(()=>import("./io_action-CSe0TL5K.js"),__vite__mapDeps([16,2,3,4,1,5,6,7,8,9,10])),"./controllable_consumers/ripple_control_receiver/io_action.vue":()=>D(()=>import("./io_action-DdUO_cY2.js"),__vite__mapDeps([17,18,4,2,3,19,1,5,6,7,8,9,10])),"./generator_systems/stepwise_control/io_action.vue":()=>D(()=>import("./io_action-CZ8ZhCvu.js"),__vite__mapDeps([20,18,4,2,3,19,1,5,6,7,8,9,10]))}),`./${this.ioAction?.group}/${this.ioAction?.type}/io_action.vue`,4),errorComponent:oe})},ioDeviceList(){return Object.keys(this.ioDevices).map(t=>({value:this.ioDevices[t]?.id,text:this.ioDevices[t]?.name}))},availableIoDevices(){return Object.values(this.ioDevices)},availableChargePoints(){return Object.values(this.installedChargePoints).map(t=>({value:t?.id,text:t?.name}))},availableComponents(){return Object.values(this.installedComponents).map(t=>({value:t?.id,text:t?.name,type:t?.type}))}},methods:{updateConfiguration(t,e=void 0){e?this.$emit("update:configuration",{value:t,object:e}):this.$emit("update:configuration",t)},updateIoDevice(t){if(this.updateConfiguration(t,"configuration.io_device"),Array.isArray(this.ioAction.configuration?.input_pattern)){let e=this.ioAction.configuration.input_pattern.map(l=>({value:l.value,matrix:{}}));this.updateConfiguration(e,"configuration.input_pattern")}Object.prototype.hasOwnProperty.call(this.ioAction.configuration,"digital_input")&&this.updateConfiguration(null,"configuration.digital_input")}}},ae={key:0};function se(t,e,l,A,u,n){const m=d("openwb-base-heading"),y=d("openwb-base-select-input");return o(),c(C,null,[a(m,null,{default:i(()=>[r(' Einstellungen für I/O-Aktion "'+p(l.ioAction?.name)+'" ',1)]),_:1}),a(y,{title:"Eingangs-Gerät","not-selected":"Bitte auswählen","empty-value":null,required:"",options:n.ioDeviceList,"model-value":l.ioAction?.configuration.io_device,"onUpdate:modelValue":e[0]||(e[0]=b=>n.updateIoDevice(b))},{help:i(()=>[...e[2]||(e[2]=[r(" Bitte das Gerät auswählen, über das der Schaltbefehl empfangen werden soll. Für jede Aktion kann nur ein Gerät ausgewählt werden. ",-1)])]),_:1},8,["options","model-value"]),l.ioAction?.configuration.io_device!==null?(o(),c("div",ae,[e[3]||(e[3]=v("hr",null,null,-1)),(o(),f(M(n.myComponent),{"io-action":l.ioAction,"io-device":l.ioDevices[`openWB/system/io/${l.ioAction.configuration.io_device}/config`],"available-charge-points":n.availableChargePoints,"available-components":n.availableComponents,"available-io-devices":n.availableIoDevices,"onUpdate:configuration":e[1]||(e[1]=b=>n.updateConfiguration(b))},null,40,["io-action","io-device","available-charge-points","available-components","available-io-devices"]))])):h("",!0)],64)}const re=I(ie,[["render",se],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_actions/OpenwbIoActionProxy.vue"]]);L.add(z);const le={name:"OpenwbIoConfigView",components:{FontAwesomeIcon:q,OpenwbIoDeviceProxy:X,OpenwbIoActionProxy:re},mixins:[W],props:{installAssistantActive:{type:Boolean,required:!1,default:!1}},emits:["save","reset","defaults","send-command"],data(){return{mqttTopics:[{topic:"openWB/chargepoint/+/config",writeable:!1},{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/io/action/+/config",writeable:!0},{topic:"openWB/system/configurable/io_actions",writeable:!1},{topic:"openWB/system/configurable/io_devices",writeable:!1},{topic:"openWB/system/device/+/component/+/config",writeable:!1},{topic:"openWB/system/io/+/config",writeable:!0}],showIoDeviceDeleteModal:!1,modalIoDeviceIndex:void 0,ioDeviceToAdd:void 0,showIoActionDeleteModal:!1,modalIoActionIndex:void 0,ioActionToAdd:void 0}},computed:{ioDeviceList:{get(){let t=this.$store.state.mqtt["openWB/system/configurable/io_devices"];return this.$store.state.mqtt["openWB/general/extern"]===!0?t?.filter(e=>e.value=="add_on"):t}},installedIoDevices(){const t=this.getWildcardTopics("openWB/system/io/+/config");return Object.fromEntries(Object.entries(t).filter(([,e])=>e&&typeof e=="object"))},ioActionList:{get(){return this.$store.state.mqtt["openWB/system/configurable/io_actions"]===void 0?[]:Object.entries(this.$store.state.mqtt["openWB/system/configurable/io_actions"]).map(([t,e])=>({label:e.group_name,options:e.actions.map(l=>({value:[t,l.value],text:l.text})).sort((l,A)=>l.text.localeCompare(A.text))})).sort((t,e)=>t.label.localeCompare(e.label))}},installedIoActions:{get(){return this.getWildcardTopics("openWB/io/action/+/config")}},installedChargePoints:{get(){return this.getWildcardTopics("openWB/chargepoint/+/config")}},installedComponents:{get(){return this.getWildcardTopics("openWB/system/device/+/component/+/config")}}},methods:{getIoDeviceName(t){return this.$store.state.mqtt["openWB/system/io/"+t+"/config"]?this.$store.state.mqtt["openWB/system/io/"+t+"/config"].name:"I/O-Gerät "+t},addIoDevice(){this.sendSystemCommand("addIoDevice",{type:this.ioDeviceToAdd})},removeIoDeviceModal(t,e){e.stopPropagation(),this.modalIoDeviceIndex=parseInt(t.match(/(?:\/)(\d+)(?=\/)/)[1]),this.showIoDeviceDeleteModal=!0},removeIoDevice(t,e){this.showIoDeviceDeleteModal=!1,e=="confirm"&&this.sendSystemCommand("removeIoDevice",{id:t})},addIoAction(){this.sendSystemCommand("addIoAction",{type:this.ioActionToAdd})},removeIoActionModal(t,e){e.stopPropagation(),this.modalIoActionIndex=parseInt(t.match(/(?:\/)(\d+)(?=\/)/)[1]),this.showIoActionDeleteModal=!0},removeIoAction(t,e){this.showIoActionDeleteModal=!1,e=="confirm"&&this.sendSystemCommand("removeIoAction",{id:t})},sendSystemCommand(t,e){this.$emit("send-command",{command:t,data:e})},updateConfiguration(t,e){console.debug("updateConfiguration",t,e),this.updateState(t,e.value,e.object)}}},de={class:"ioConfig"},ue={name:"ioConfigForm"},ce={key:0},pe={key:1},me={key:0};function ge(t,e,l,A,u,n){const m=d("openwb-base-modal-dialog"),y=d("font-awesome-icon"),b=d("openwb-base-avatar"),_=d("openwb-base-text-input"),P=d("openwb-io-device-proxy"),k=d("openwb-base-card"),x=d("openwb-base-select-input"),E=d("openwb-base-alert"),V=d("openwb-io-action-proxy"),S=d("openwb-base-submit-buttons");return o(),c(C,null,[a(m,{show:u.showIoDeviceDeleteModal,title:"Modul löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:e[0]||(e[0]=s=>n.removeIoDevice(u.modalIoDeviceIndex,s))},{default:i(()=>[r(' Willst Du das Ein-/Ausgangs-Gerät "'+p(n.getIoDeviceName(u.modalIoDeviceIndex))+'" (ID: '+p(u.modalIoDeviceIndex)+") wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ",1)]),_:1},8,["show"]),a(m,{show:u.showIoActionDeleteModal,title:"Aktion löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:e[1]||(e[1]=s=>n.removeIoAction(u.modalIoActionIndex,s))},{default:i(()=>[r(' Willst Du die Aktion "'+p(n.getIoDeviceName(u.modalIoActionIndex))+'" (ID: '+p(u.modalIoActionIndex)+") wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ",1)]),_:1},8,["show"]),v("div",de,[v("form",ue,[a(k,{title:"Ein-/Ausgangs-Geräte"},{default:i(()=>[(o(!0),c(C,null,B(n.installedIoDevices,(s,w)=>(o(),f(k,{key:w,title:s?.name+" (ID: "+s?.id+")",collapsible:!0,collapsed:!0,subtype:"primary"},{actions:i(g=>[g.collapsed?h("",!0):(o(),f(b,{key:0,class:"bg-danger clickable",onClick:O=>n.removeIoDeviceModal(w,O)},{default:i(()=>[a(y,{icon:["fas","trash"]})]),_:1},8,["onClick"]))]),default:i(()=>[a(_,{title:"Bezeichnung",subtype:"text","model-value":s.name,"onUpdate:modelValue":g=>t.updateState(w,g,"name")},null,8,["model-value","onUpdate:modelValue"]),a(_,{title:"Modul",subtype:"text",disabled:"",readonly:"","model-value":t.$store.state.mqtt[w].type},null,8,["model-value"]),e[8]||(e[8]=v("hr",null,null,-1)),a(P,{"io-device":s,"onUpdate:configuration":g=>n.updateConfiguration(w,g),onSendCommand:e[2]||(e[2]=g=>n.sendSystemCommand(g.command,g.data))},null,8,["io-device","onUpdate:configuration"])]),_:2},1032,["title"]))),128)),Object.keys(n.installedIoDevices).length>0?(o(),c("hr",ce)):h("",!0),a(x,{title:"Verfügbare Geräte","not-selected":"Bitte auswählen",options:n.ioDeviceList,"model-value":u.ioDeviceToAdd,"add-button":!0,"onUpdate:modelValue":e[3]||(e[3]=s=>u.ioDeviceToAdd=s),"onInput:add":n.addIoDevice},{help:i(()=>[...e[9]||(e[9]=[r(" Bitte ein Ein-/Ausgangs-Modul auswählen, das hinzugefügt werden soll. ",-1)])]),_:1},8,["options","model-value","onInput:add"])]),_:1}),a(k,{title:"Ein-/Ausgangs-Aktionen"},{default:i(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(o(),f(E,{key:0,subtype:"info"},{default:i(()=>[...e[10]||(e[10]=[r(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})):(o(),c("div",pe,[(o(!0),c(C,null,B(n.installedIoActions,(s,w)=>(o(),f(k,{key:w,title:s?.name+" (ID: "+s?.id+")",collapsible:!0,collapsed:!0,subtype:"primary"},{actions:i(g=>[g.collapsed?h("",!0):(o(),f(b,{key:0,class:"bg-danger clickable",onClick:O=>n.removeIoActionModal(w,O)},{default:i(()=>[a(y,{icon:["fas","trash"]})]),_:1},8,["onClick"]))]),default:i(()=>[a(_,{title:"Bezeichnung",subtype:"text","model-value":s?.name,"onUpdate:modelValue":g=>t.updateState(w,g,"name")},null,8,["model-value","onUpdate:modelValue"]),a(_,{title:"Modul",subtype:"text",disabled:"",readonly:"","model-value":[s?.group,s?.type].join(" / ")},null,8,["model-value"]),e[11]||(e[11]=v("hr",null,null,-1)),s!==void 0?(o(),f(V,{key:0,"io-action":s,"io-devices":n.installedIoDevices,"installed-charge-points":n.installedChargePoints,"installed-components":n.installedComponents,"onUpdate:configuration":g=>n.updateConfiguration(w,g)},null,8,["io-action","io-devices","installed-charge-points","installed-components","onUpdate:configuration"])):h("",!0)]),_:2},1032,["title"]))),128)),Object.keys(n.installedIoActions).length>0?(o(),c("hr",me)):h("",!0),Object.keys(n.installedIoDevices).length>0?(o(),f(x,{key:1,title:"Verfügbare Aktionen","not-selected":"Bitte auswählen",groups:n.ioActionList,"model-value":u.ioActionToAdd,"add-button":!0,"onUpdate:modelValue":e[4]||(e[4]=s=>u.ioActionToAdd=s),"onInput:add":n.addIoAction},{help:i(()=>[...e[12]||(e[12]=[r(" Bitte eine Ein-/Ausgangs-Aktion auswählen, die hinzugefügt werden soll. ",-1)])]),_:1},8,["groups","model-value","onInput:add"])):(o(),f(E,{key:2,subtype:"warning"},{default:i(()=>[...e[13]||(e[13]=[r(" Keine Ein-/Ausgangs-Geräte vorhanden!",-1),v("br",null,null,-1),r(" Bitte füge zuerst ein Ein-/Ausgangs-Gerät hinzu, bevor Du Aktionen konfigurierst. ",-1)])]),_:1}))]))]),_:1}),a(S,{"form-name":"ioConfigForm",onSave:e[5]||(e[5]=s=>t.$emit("save",t.mqttTopicsToPublish)),onReset:e[6]||(e[6]=s=>t.$emit("reset")),onDefaults:e[7]||(e[7]=s=>t.$emit("defaults"))})])])],64)}const be=I(le,[["render",ge],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/IoConfiguration.vue"]]),we=Object.freeze(Object.defineProperty({__proto__:null,default:be},Symbol.toStringTag,{value:"Module"}));export{be as I,F as O,Z as a,we as b}; diff --git a/web/settings/assets/LegalSettings-DeM9kqbo.js b/web/settings/assets/LegalSettings-B0CerJ1j.js similarity index 98% rename from web/settings/assets/LegalSettings-DeM9kqbo.js rename to web/settings/assets/LegalSettings-B0CerJ1j.js index a704bb0ab1..595eabdca3 100644 --- a/web/settings/assets/LegalSettings-DeM9kqbo.js +++ b/web/settings/assets/LegalSettings-B0CerJ1j.js @@ -1 +1 @@ -import{F as k,l as y,aq as v}from"./vendor-fortawesome-DplTMxoa.js";import{C as B}from"./index-Bv2WLdLZ.js";import{_ as $,m as n,l as u,f as W,y as o,q as s,u as a,z as g,B as d,x as b}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";y.add(v);const S={name:"OpenwbDataProtectionView",components:{FontAwesomeIcon:k},mixins:[B],emits:["sendCommand","save"],data(){return{mqttTopics:[{topic:"openWB/system/dataprotection_acknowledged",writeable:!0},{topic:"openWB/system/usage_terms_acknowledged",writeable:!0}]}},methods:{sendSystemCommand(t,e={}){this.$emit("sendCommand",{command:t,data:e})},async onSaveLegal(){this.$emit("save",this.mqttTopicsToPublish),await new Promise(e=>{const i=this.$watch(()=>this.$store.state.local.savingData,r=>{r===!1&&(i(),e())})}),this.$store.state.mqtt["openWB/system/usage_terms_acknowledged"]||await new Promise(e=>{const i=this.$watch(()=>this.$store.state.mqtt["openWB/system/usage_terms_acknowledged"],r=>{r&&(i(),e())})}),await this.$store.getters.installAssistantDone||this.$router.push({name:"InstallAssistant"})}}},z={class:"dataProtection"},C={name:"dataProtectionForm"},V={class:"row justify-content-center"},q={class:"col-md-4 d-flex justify-content-center"};function A(t,e,i,r,D,m){const p=n("openwb-base-button-group-input"),w=n("font-awesome-icon"),_=n("openwb-base-click-button"),c=n("openwb-base-alert"),f=n("openwb-base-submit-buttons"),h=n("openwb-base-card");return u(),W("div",z,[o("form",C,[s(h,{title:"Nutzungsbedingungen & Datenschutzerklärung"},{footer:a(()=>[s(f,{"form-name":"dataProtectionForm","hide-reset":!0,"hide-defaults":!0,onSave:m.onSaveLegal},null,8,["onSave"])]),default:a(()=>[e[6]||(e[6]=o("iframe",{src:"dataProtection-usageTerms.html",width:"100%",height:"400px",class:"bg-light"},null,-1)),e[7]||(e[7]=o("hr",null,null,-1)),s(p,{title:"Nutzungsbedingungen",buttons:[{buttonValue:!1,text:"Ablehnen",class:"btn-outline-danger"},{buttonValue:!0,text:"Akzeptieren",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/system/usage_terms_acknowledged"],"onUpdate:modelValue":e[0]||(e[0]=l=>t.updateState("openWB/system/usage_terms_acknowledged",l))},null,8,["model-value"]),t.$store.state.mqtt["openWB/system/usage_terms_acknowledged"]?b("",!0):(u(),g(c,{key:0,subtype:"danger",class:"mb-1"},{default:a(()=>[e[4]||(e[4]=d(" Du musst die Nutzungsbedingungen akzeptieren, bevor openWB eingesetzt werden kann. ",-1)),o("div",V,[o("div",q,[s(_,{class:"btn-danger",onButtonClicked:e[1]||(e[1]=l=>m.sendSystemCommand("systemShutdown"))},{default:a(()=>[e[3]||(e[3]=d(" Nicht akzeptieren und ausschalten ",-1)),s(w,{icon:["fas","power-off"]})]),_:1})])])]),_:1})),s(p,{title:"Datenschutzerklärung",buttons:[{buttonValue:!1,text:"Ablehnen",class:"btn-outline-danger"},{buttonValue:!0,text:"Akzeptieren",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/system/dataprotection_acknowledged"],"onUpdate:modelValue":e[2]||(e[2]=l=>t.updateState("openWB/system/dataprotection_acknowledged",l))},null,8,["model-value"]),t.$store.state.mqtt["openWB/system/dataprotection_acknowledged"]?b("",!0):(u(),g(c,{key:1,subtype:"warning"},{default:a(()=>[...e[5]||(e[5]=[d(" Wenn Du nicht einwilligst, wird eine ggf. konfigurierte Cloud-Anbindung gelöscht. Die openWB arbeitet autark wie gewohnt weiter. Fernzugriff und Remote-Support sind dann nicht mehr möglich! ",-1)])]),_:1}))]),_:1})])])}const j=$(S,[["render",A],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/LegalSettings.vue"]]);export{j as default}; +import{F as k,l as y,aq as v}from"./vendor-fortawesome-DplTMxoa.js";import{C as B}from"./index-CE-5DBwq.js";import{_ as $,m as n,l as u,f as W,y as o,q as s,u as a,z as g,B as d,x as b}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";y.add(v);const S={name:"OpenwbDataProtectionView",components:{FontAwesomeIcon:k},mixins:[B],emits:["sendCommand","save"],data(){return{mqttTopics:[{topic:"openWB/system/dataprotection_acknowledged",writeable:!0},{topic:"openWB/system/usage_terms_acknowledged",writeable:!0}]}},methods:{sendSystemCommand(t,e={}){this.$emit("sendCommand",{command:t,data:e})},async onSaveLegal(){this.$emit("save",this.mqttTopicsToPublish),await new Promise(e=>{const i=this.$watch(()=>this.$store.state.local.savingData,r=>{r===!1&&(i(),e())})}),this.$store.state.mqtt["openWB/system/usage_terms_acknowledged"]||await new Promise(e=>{const i=this.$watch(()=>this.$store.state.mqtt["openWB/system/usage_terms_acknowledged"],r=>{r&&(i(),e())})}),await this.$store.getters.installAssistantDone||this.$router.push({name:"InstallAssistant"})}}},z={class:"dataProtection"},C={name:"dataProtectionForm"},V={class:"row justify-content-center"},q={class:"col-md-4 d-flex justify-content-center"};function A(t,e,i,r,D,m){const p=n("openwb-base-button-group-input"),w=n("font-awesome-icon"),_=n("openwb-base-click-button"),c=n("openwb-base-alert"),f=n("openwb-base-submit-buttons"),h=n("openwb-base-card");return u(),W("div",z,[o("form",C,[s(h,{title:"Nutzungsbedingungen & Datenschutzerklärung"},{footer:a(()=>[s(f,{"form-name":"dataProtectionForm","hide-reset":!0,"hide-defaults":!0,onSave:m.onSaveLegal},null,8,["onSave"])]),default:a(()=>[e[6]||(e[6]=o("iframe",{src:"dataProtection-usageTerms.html",width:"100%",height:"400px",class:"bg-light"},null,-1)),e[7]||(e[7]=o("hr",null,null,-1)),s(p,{title:"Nutzungsbedingungen",buttons:[{buttonValue:!1,text:"Ablehnen",class:"btn-outline-danger"},{buttonValue:!0,text:"Akzeptieren",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/system/usage_terms_acknowledged"],"onUpdate:modelValue":e[0]||(e[0]=l=>t.updateState("openWB/system/usage_terms_acknowledged",l))},null,8,["model-value"]),t.$store.state.mqtt["openWB/system/usage_terms_acknowledged"]?b("",!0):(u(),g(c,{key:0,subtype:"danger",class:"mb-1"},{default:a(()=>[e[4]||(e[4]=d(" Du musst die Nutzungsbedingungen akzeptieren, bevor openWB eingesetzt werden kann. ",-1)),o("div",V,[o("div",q,[s(_,{class:"btn-danger",onButtonClicked:e[1]||(e[1]=l=>m.sendSystemCommand("systemShutdown"))},{default:a(()=>[e[3]||(e[3]=d(" Nicht akzeptieren und ausschalten ",-1)),s(w,{icon:["fas","power-off"]})]),_:1})])])]),_:1})),s(p,{title:"Datenschutzerklärung",buttons:[{buttonValue:!1,text:"Ablehnen",class:"btn-outline-danger"},{buttonValue:!0,text:"Akzeptieren",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/system/dataprotection_acknowledged"],"onUpdate:modelValue":e[2]||(e[2]=l=>t.updateState("openWB/system/dataprotection_acknowledged",l))},null,8,["model-value"]),t.$store.state.mqtt["openWB/system/dataprotection_acknowledged"]?b("",!0):(u(),g(c,{key:1,subtype:"warning"},{default:a(()=>[...e[5]||(e[5]=[d(" Wenn Du nicht einwilligst, wird eine ggf. konfigurierte Cloud-Anbindung gelöscht. Die openWB arbeitet autark wie gewohnt weiter. Fernzugriff und Remote-Support sind dann nicht mehr möglich! ",-1)])]),_:1}))]),_:1})])])}const j=$(S,[["render",A],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/LegalSettings.vue"]]);export{j as default}; diff --git a/web/settings/assets/LoadManagementConfiguration-KljkkYHP.js b/web/settings/assets/LoadManagementConfiguration-Rty2qCw0.js similarity index 56% rename from web/settings/assets/LoadManagementConfiguration-KljkkYHP.js rename to web/settings/assets/LoadManagementConfiguration-Rty2qCw0.js index 42d4bc17e1..bee237ac75 100644 --- a/web/settings/assets/LoadManagementConfiguration-KljkkYHP.js +++ b/web/settings/assets/LoadManagementConfiguration-Rty2qCw0.js @@ -1 +1 @@ -import{F as V,l as x,a3 as A,a2 as P}from"./vendor-fortawesome-DplTMxoa.js";import{C as Z}from"./index-Bv2WLdLZ.js";import{S as q}from"./SystemVersion-eCZ4XHiC.js";import{S as E}from"./OpenwbSortableList-CQO_8Mps.js";import{_ as D,m as c,l as p,f as g,y as m,q as a,u as s,B as o,z as w,x as G,K as v,L as _,O as W,J as B}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";x.add(A,P);const $={name:"OpenwbLoadManagementConfigView",components:{SortableList:E,FontAwesomeIcon:V},mixins:[Z,q],props:{installAssistantActive:{type:Boolean,required:!1,default:!1}},emits:["sendCommand","save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/bat/+/config/max_power",writeable:!0},{topic:"openWB/chargepoint/+/config",writeable:!1},{topic:"openWB/consumer/+/module",writeable:!1},{topic:"openWB/consumer/+/extra_meter",writeable:!1},{topic:"openWB/counter/+/config/is_home_consumption_counter",writeable:!0},{topic:"openWB/counter/+/config/max_currents",writeable:!0},{topic:"openWB/counter/+/config/max_power_errorcase",writeable:!0},{topic:"openWB/counter/+/config/max_total_power",writeable:!0},{topic:"openWB/counter/config/consider_less_charging",writeable:!0},{topic:"openWB/counter/get/hierarchy",writeable:!0},{topic:"openWB/counter/get/loadmanagement_prios",writeable:!0},{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/pv/+/config/max_ac_out",writeable:!0},{topic:"openWB/vehicle/+/name",writeable:!1},{topic:"openWB/system/device/+/component/+/config",writeable:!1}],newGroupName:null}},computed:{componentConfigurations(){return this.getWildcardTopics("openWB/system/device/+/component/+/config")||{}},componentConfigs:{get(){return n=>{let e=this.componentConfigurations||{};return Object.keys(e).filter(t=>e[t]?.type.includes(n)).reduce((t,l)=>({...t,[l]:e[l]}),{})}}},counterConfigs:{get(){return this.componentConfigs("counter")}},counterOptions(){var n=[];for(const e of Object.values(this.componentConfigurations))this.isComponentType(e?.type,"counter")&&n.push({value:e.id,text:e.name});return n.sort((e,t)=>e.text==t.text?0:e.text>t.text?1:-1)},inverterConfigs:{get(){return this.componentConfigs("inverter")}},batConfigs:{get(){return this.componentConfigs("bat")}},hierarchyLabels:{get(){let n={};const e=this.$store.state.mqtt["openWB/counter/get/hierarchy"];if(!Array.isArray(e))return n;for(const t of e)n={...n,...this.getElementTreeNames(t)};return n}},extraMeterLinks(){const n=this.getWildcardTopics("openWB/consumer/+/extra_meter")||{},e=[];for(const[t,l]of Object.entries(n)){if(l==null)continue;const u=t.match(/^openWB\/consumer\/([^/]+)\/extra_meter$/);u&&e.push({consumerId:String(u[1]),counterId:String(l)})}return e},hiddenCounterIds(){return Array.from(new Set(this.extraMeterLinks.map(n=>n.counterId)))},consumerLinkedMeterNames(){const n={};for(const{consumerId:e,counterId:t}of this.extraMeterLinks){const l=this.getComponent(t);n[e]=l?.name??t}return n},loadManagementPriorityList:{get(){const n=this.$store.state.mqtt["openWB/counter/get/loadmanagement_prios"]||[];return Array.isArray(n)?n:[]},set(n){this.updateState("openWB/counter/get/loadmanagement_prios",n)}},loadManagementPriorityLabels:{get(){const n={},e=t=>{t.forEach(l=>{switch(l.type){case"group":{l.label&&(n[`group-${l.id}`]=l.label),Array.isArray(l.children)&&e(l.children);break}case"vehicle":{const u=String(l.id),i=this.$store.state.mqtt[`openWB/vehicle/${u}/name`];i&&(n[`vehicle-${l.id}`]=i);break}case"consumer":{const u=this.$store.state.mqtt[`openWB/consumer/${l.id}/module`]?.name;u&&(n[`consumer-${l.id}`]=u);break}}})};return e(this.loadManagementPriorityList),n}},getHcSourceIdOptions(){let n=[{value:null,text:"von openWB berechnen (in 99% der Fälle die richtige Einstellung)"}],e=[{label:"Eingerichtete Zähler-Komponenten",options:[...this.counterOptions]}];return{options:n,groups:e}}},methods:{getElementTreeNames(n){let e={};switch(n.type){case"cp":{const t=this.getChargePoint(n.id);t&&(e[n.id]=t.name);break}case"consumer":{const t=this.$store.state.mqtt[`openWB/consumer/${n.id}/module`];t?.name&&(e[n.id]=t.name);break}default:{const t=this.getComponent(n.id);t?.name&&(e[n.id]=t.name)}}return n.children.forEach(t=>{e={...e,...this.getElementTreeNames(t)}}),e},getComponent(n){let e;return Object.keys(this.$store.state.mqtt).forEach(t=>{t.match("^openWB/system/device/[0-9]+/component/"+n+"/config$")&&(e=this.$store.state.mqtt[t])}),e},getChargePoint(n){let e;return Object.keys(this.$store.state.mqtt).forEach(t=>{t.match("^openWB/chargepoint/"+n+"/config$")&&(e=this.$store.state.mqtt[t])}),e},isComponentType(n,e){return n?.split("_").includes(e)},validateGroupName(n){return n&&n.trim().length>0&&!this.loadManagementPriorityList.some(e=>e.type==="group"&&e.label===n.trim())},addLoadManagementPriorityGroup(){const n=this.newGroupName?.trim();if(!n)return;const e={type:"group",label:n,id:`group-${Date.now()}`,children:[]},t=[...this.loadManagementPriorityList,e];this.loadManagementPriorityList=t,this.newGroupName=null},deleteLoadManagementPriorityGroup(n){const e=l=>{const u=[];return l.forEach(i=>{i.type==="group"&&i.id===n?Array.isArray(i.children)&&u.push(...i.children):i.type==="group"&&Array.isArray(i.children)?u.push({...i,children:e(i.children)}):u.push(i)}),u},t=e(this.loadManagementPriorityList);this.loadManagementPriorityList=t},renameLoadManagementPriorityGroup({id:n,label:e}){const t=l=>l.map(u=>u.type==="group"&&u.id===n?{...u,label:e}:u.children?{...u,children:t(u.children)}:u);this.loadManagementPriorityList=t(this.loadManagementPriorityList)},getHomeConsumptionCounterMode(n){const e=`openWB/counter/${n}/config/is_home_consumption_counter`,t=this.$store.state.mqtt[e];return t==null?"auto_home_consumption":t==="home_consumption"?"home_consumption":t==="no_home_consumption"?"no_home_consumption":"auto_home_consumption"},setHomeConsumptionCounterMode(n,e){const t=`openWB/counter/${n}/config/is_home_consumption_counter`;if(e==="home_consumption"){this.updateState(t,"home_consumption");return}else if(e==="no_home_consumption"){this.updateState(t,"no_home_consumption");return}this.updateState(t,"auto_home_consumption")}}},N={class:"loadManagementConfig"},U={name:"loadManagementConfigForm"},F={key:0},I={key:1},H={key:0},T={key:1};function O(n,e,t,l,u,i){const b=c("openwb-base-alert"),S=c("router-link"),C=c("openwb-base-button-group-input"),y=c("openwb-base-heading"),k=c("font-awesome-icon"),h=c("openwb-base-number-input"),f=c("openwb-base-card"),L=c("sortable-list"),z=c("openwb-base-text-input"),M=c("openwb-base-submit-buttons");return p(),g("div",N,[m("form",U,[a(f,{title:"Einstellungen",collapsible:!0,collapsed:!1},{default:s(()=>[n.$store.state.mqtt["openWB/general/extern"]===!0?(p(),g("div",F,[a(b,{subtype:"info"},{default:s(()=>[...e[7]||(e[7]=[o(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(p(),g("div",I,[t.installAssistantActive?G("",!0):(p(),w(b,{key:0,subtype:"info"},{default:s(()=>[e[9]||(e[9]=o(" Die Konfiguration für die externe Steuerung durch den Netzbetreiber (RSE, EMS, §14a) erfolgt in den ",-1)),a(S,{to:"/IoConfiguration"},{default:s(()=>[...e[8]||(e[8]=[o("Einstellungen der Ein-/Ausgänge",-1)])]),_:1}),e[10]||(e[10]=o(" im Bereich der Aktionen. ",-1))]),_:1})),a(C,{title:"Fahrzeuge, die nicht mit Sollstrom laden",buttons:[{buttonValue:!1,text:"nicht berücksichtigen",class:"btn-outline-danger"},{buttonValue:!0,text:"berücksichtigen",class:"btn-outline-success"}],"model-value":n.$store.state.mqtt["openWB/counter/config/consider_less_charging"],"onUpdate:modelValue":e[0]||(e[0]=r=>n.updateState("openWB/counter/config/consider_less_charging",r))},{help:s(()=>[...e[11]||(e[11]=[m("p",null," Wenn angesteckte Fahrzeuge, die nicht oder nicht mit der Sollstromstärke laden, im Lastmanagement berücksichtigt werden, wird für diese der Sollstrom reserviert. Dadurch können bei Eingreifen des Lastmanagements andere Fahrzeuge möglicherweise nur mit reduzierter Stromstärke laden und der reservierte Strom wird nicht genutzt. Wenn die Fahrzeuge wieder Leistung beziehen, z.B. um zu klimatisieren, nutzen sie den für sie reservierten Strom. ",-1),m("p",null," Wenn angesteckte Fahrzeuge, die nicht oder nicht mit der Sollstromstärke laden, nicht im Lastmanagement berücksichtigt werden, wird für diese auch kein Strom bei vorliegender Ladefreigabe reserviert bzw. es wird nur der tatsächlich genutzte Strom im Lastmanagement berücksichtigt. Andere Fahrzeuge können dadurch mit höherer Stromstärke laden. Wenn die maximalen Lastmanagement-Grenzen fast erreicht sind und die Fahrzeuge wieder Leistung beziehen, z.B. um zu klimatisieren, kann es zu einer kurzzeitigen Überschreitung der Lastmanagement-Grenzen kommen, bis im nächsten Zyklus die Stromstärken aller Ladepunkte an die neue Situation angepasst wurden. Das kurzzeitige Überschreiten der Maximal-Werte stellt für die Sicherungen in der Regel kein Problem dar. ",-1)])]),_:1},8,["model-value"]),a(y,null,{default:s(()=>[...e[12]||(e[12]=[o(" Vorhandene Zählermodule ",-1)])]),_:1}),a(b,{subtype:"info"},{default:s(()=>[...e[13]||(e[13]=[o(" Die maximale Leistung wird nur für den EVU-Zähler berücksichtigt. Bei Zwischenzählern begrenzt das Lastmanagement rein anhand der maximalen Phasenströme.",-1),m("br",null,null,-1),o(" Wenn ein Zähler nicht auslesbar ist, wird weiterhin versucht, diesen auszulesen und nach 60s die angenommene Leistung im Fehlerfall verwendet, die unten für jeden Zähler eingestellt wird, um eine Überlast zu vermeiden. Die angenommene Leistung wird gleichmäßig auf die Phasen verteilt.",-1),m("br",null,null,-1),o(" Üblicherweise sind Hausanschlüsse mit 24kW und 3*35A bzw. 43kW und 3*63A abgesichert. ",-1)])]),_:1}),(p(!0),g(v,null,_(i.counterConfigs,r=>(p(),w(f,{key:r.id,collapsible:!0,collapsed:!0,subtype:"danger"},{header:s(()=>[a(k,{icon:["fas","gauge-high"],class:"fa-border",style:W({backgroundColor:r.color,color:n.getContrastColor(r.color),"--fa-border-color":n.getContrastColor(r.color)})},null,8,["style"]),o(" "+B(r.name),1)]),default:s(()=>[a(h,{title:"Maximale Leistung",min:1,step:.1,required:"",unit:"kW","model-value":n.$store.state.mqtt["openWB/counter/"+r.id+"/config/max_total_power"]/1e3,"onUpdate:modelValue":d=>n.updateState("openWB/counter/"+r.id+"/config/max_total_power",d*1e3)},{help:s(()=>[...e[14]||(e[14]=[o(" Maximal zulässige Leistung für diesen (Zwischen-)Zähler. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(h,{title:"Maximaler Strom L1",min:6,step:1,unit:"A",required:"","model-value":n.$store.state.mqtt["openWB/counter/"+r.id+"/config/max_currents"][0],"onUpdate:modelValue":d=>n.updateState("openWB/counter/"+r.id+"/config/max_currents",d,"0")},{help:s(()=>[...e[15]||(e[15]=[o(" Maximal zulässiger Strom für die Phase 1 dieses (Zwischen-)Zählers. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(h,{title:"Maximaler Strom L2",min:6,step:1,unit:"A",required:"","model-value":n.$store.state.mqtt["openWB/counter/"+r.id+"/config/max_currents"][1],"onUpdate:modelValue":d=>n.updateState("openWB/counter/"+r.id+"/config/max_currents",d,"1")},{help:s(()=>[...e[16]||(e[16]=[o(" Maximal zulässiger Strom für die Phase 2 dieses (Zwischen-)Zählers. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(h,{title:"Maximaler Strom L3",min:6,step:1,unit:"A",required:"","model-value":n.$store.state.mqtt["openWB/counter/"+r.id+"/config/max_currents"][2],"onUpdate:modelValue":d=>n.updateState("openWB/counter/"+r.id+"/config/max_currents",d,"2")},{help:s(()=>[...e[17]||(e[17]=[o(" Maximal zulässiger Strom für die Phase 3 dieses (Zwischen-)Zählers. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(h,{title:"Maximale Leistung im Fehlerfall",min:0,step:.1,unit:"kW","model-value":n.$store.state.mqtt["openWB/counter/"+r.id+"/config/max_power_errorcase"]/1e3,"onUpdate:modelValue":d=>n.updateState("openWB/counter/"+r.id+"/config/max_power_errorcase",d*1e3)},{help:s(()=>[...e[18]||(e[18]=[o(" Angenommen Leistung für diesen (Zwischen-)Zähler, falls vom Zähler keine Werte abgefragt werden können. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(C,{title:"Im Hausverbrauch berücksichtigen?",buttons:[{buttonValue:"home_consumption",text:"Ja",class:"btn-outline-success"},{buttonValue:"auto_home_consumption",text:"Automatisch",class:"btn-outline-info"},{buttonValue:"no_home_consumption",text:"Nein",class:"btn-outline-danger"}],"model-value":i.getHomeConsumptionCounterMode(r.id),"onUpdate:modelValue":d=>i.setHomeConsumptionCounterMode(r.id,d)},{help:s(()=>[...e[19]||(e[19]=[o(" Mit dieser Einstellung legen Sie fest, ob ein Zähler in die Hausverbrauchsberechnung einfließt. ",-1),m("br",null,null,-1),o(" Ja: Der lokale Verbrauch dieses Zählers wird als Hausverbrauch berücksichtigt. ",-1),m("br",null,null,-1),o(" Nein: Der Zähler wird nicht als Hausverbrauch berücksichtigt. ",-1),m("br",null,null,-1),o(" Automatisch: Der Zähler übernimmt die Einstellung des übergeordneten Zählers. ",-1),m("br",null,null,-1),o(' Der Hausverbrauch entspricht dem Verbrauch am jeweiligen Zähler abzüglich der Leistungen von Batterien, Ladepunkten, Wechselrichtern und Unterzählern. "Automatisch" ist die Standardeinstellung und eignet sich, wenn die Einstellung für mehrere Zähler übernommen werden soll. Wichtig: Wenn alle Zähler auf "Automatisch" stehen, wird die Einstellung entlang der Zählerhierarchie weitervererbt. Für den obersten Zähler wird "Automatisch" wie "Nein" behandelt. Dadurch wird zunächst kein Hausverbrauch erfasst. Daher muss mindestens ein relevanter Zähler explizit auf "Ja" gesetzt werden, damit der Hausverbrauch erfasst wird. ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"])]),_:2},1024))),128)),a(y,null,{default:s(()=>[...e[20]||(e[20]=[o(" Vorhandene Wechselrichtermodule ",-1)])]),_:1}),(p(!0),g(v,null,_(i.inverterConfigs,r=>(p(),w(f,{key:r.id,collapsible:!0,collapsed:!0,subtype:"success"},{header:s(()=>[a(k,{icon:["fas","solar-panel"],class:"fa-border",style:W({backgroundColor:r.color,color:n.getContrastColor(r.color),"--fa-border-color":n.getContrastColor(r.color)})},null,8,["style"]),o(" "+B(r.name),1)]),default:s(()=>[a(h,{title:"Maximale Ausgangsleistung des Wechselrichters",min:0,step:.1,unit:"kW",required:"","model-value":n.$store.state.mqtt["openWB/pv/"+r.id+"/config/max_ac_out"]/1e3,"onUpdate:modelValue":d=>n.updateState("openWB/pv/"+r.id+"/config/max_ac_out",d*1e3)},{help:s(()=>[...e[21]||(e[21]=[o(" Bei 0 kW erfolgt keine Berücksichtigung der maximalen Ausgangsleistung. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"])]),_:2},1024))),128)),a(y,null,{default:s(()=>[...e[22]||(e[22]=[o(" Vorhandene Speichermodule ",-1)])]),_:1}),(p(!0),g(v,null,_(i.batConfigs,r=>(p(),w(f,{key:r.id,collapsible:!0,collapsed:!0,subtype:"warning"},{header:s(()=>[a(k,{icon:["fas","car-battery"],class:"fa-border",style:W({backgroundColor:r.color,color:n.getContrastColor(r.color),"--fa-border-color":n.getContrastColor(r.color)})},null,8,["style"]),o(" "+B(r.name),1)]),default:s(()=>[a(h,{title:"Maximale Leistung des Speichers",min:0,step:.1,unit:"kW",required:"","model-value":n.$store.state.mqtt["openWB/bat/"+r.id+"/config/max_power"]/1e3,"onUpdate:modelValue":d=>n.updateState("openWB/bat/"+r.id+"/config/max_power",d*1e3)},{help:s(()=>[...e[23]||(e[23]=[o(" Die maximale Leistung wird lediglich für eine Plausibilitätsprüfung der Speicherwerte genutzt. Bei 0kW erfolgt keine Prüfung. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"])]),_:2},1024))),128))]))]),_:1}),a(f,{title:"Struktur",collapsible:!0,collapsed:!0},{default:s(()=>[n.$store.state.mqtt["openWB/general/extern"]===!0?(p(),g("div",H,[a(b,{subtype:"info"},{default:s(()=>[...e[24]||(e[24]=[o(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(p(),g("div",T,[a(L,{title:"Anordnung der Komponenten","model-value":n.$store.state.mqtt["openWB/counter/get/hierarchy"],labels:i.hierarchyLabels,"linked-meters":i.consumerLinkedMeterNames,"hidden-ids":i.hiddenCounterIds,"onUpdate:modelValue":e[1]||(e[1]=r=>n.updateState("openWB/counter/get/hierarchy",r))},{help:s(()=>[...e[25]||(e[25]=[o(" Durch die Anordnung der Komponenten werden Abhängigkeiten abgebildet.",-1),m("br",null,null,-1),o(" An erster Stelle muss eine Zählerkomponente stehen, die den Netzanschlusspunkt erfasst. Dafür kann auch ein virtueller Zähler genutzt werden.",-1),m("br",null,null,-1),o(" Die weiteren Komponenten müssen hierarchisch so angeordnet werden, wie sie auch physisch im Stromnetz angeschlossen werden.",-1),m("br",null,null,-1),o(" Bei DC-gekoppelten Speichern sind diese hinter dem zugehörigen Wechselrichter zu platzieren, damit die Abhängigkeit in der Regelung berücksichtigt werden kann. ",-1)])]),_:1},8,["model-value","labels","linked-meters","hidden-ids"]),e[28]||(e[28]=m("hr",null,null,-1)),a(L,{modelValue:i.loadManagementPriorityList,"onUpdate:modelValue":e[2]||(e[2]=r=>i.loadManagementPriorityList=r),title:"Prioritätenliste",labels:i.loadManagementPriorityLabels,nesting:!0,"max-nesting-depth":1,"show-priority":!0,onDeleteGroup:i.deleteLoadManagementPriorityGroup,onRenameGroup:i.renameLoadManagementPriorityGroup},{help:s(()=>[...e[26]||(e[26]=[o(" Reihenfolge der Fahrzeug- und Verbraucher-Prioritäten für das Lastmanagement.",-1),m("br",null,null,-1),o(" Die Reihenfolge kann durch Drag & Drop geändert werden.",-1),m("br",null,null,-1),o(" Elemente können in Gruppen zusammengefasst werden. Alle Elemente innerhalb einer Gruppe erhalten die gleiche Priorität und werden im Lastmanagement gleichrangig behandelt. ",-1)])]),_:1},8,["modelValue","labels","onDeleteGroup","onRenameGroup"]),a(z,{modelValue:u.newGroupName,"onUpdate:modelValue":e[3]||(e[3]=r=>u.newGroupName=r),title:"Gruppe hinzufügen",subtype:"group",validator:i.validateGroupName,"empty-value":null,"add-button":!0,"onInput:add":i.addLoadManagementPriorityGroup},{help:s(()=>[...e[27]||(e[27]=[o(" Gruppen ermöglichen das Zusammenfassen von Fahrzeugen oder Verbrauchern für die Prioritäten-Steuerung. Elemente können per Drag & Drop in eine Gruppe verschoben werden (maximal eine Verschachtelungsebene). Gruppen können umbenannt (Stift-Symbol oder Klick auf den Namen) und gelöscht werden. Beim Löschen bleiben die enthaltenen Elemente erhalten und werden eine Ebene nach oben verschoben. ",-1)])]),_:1},8,["modelValue","validator","onInput:add"])]))]),_:1}),a(M,{"form-name":"loadManagementConfigForm",onSave:e[4]||(e[4]=r=>n.$emit("save",n.mqttTopicsToPublish)),onReset:e[5]||(e[5]=r=>n.$emit("reset")),onDefaults:e[6]||(e[6]=r=>n.$emit("defaults"))})])])}const ne=D($,[["render",O],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/LoadManagementConfiguration.vue"]]);export{ne as default}; +import{F as V,l as A,a3 as P,a2 as x}from"./vendor-fortawesome-DplTMxoa.js";import{C as q}from"./index-CE-5DBwq.js";import{S as Z}from"./SystemVersion-eCZ4XHiC.js";import{S as E}from"./OpenwbSortableList-yQzkYwAQ.js";import{_ as D,m as g,l as p,f as c,y as m,q as a,u as s,B as o,z as w,x as G,K as _,L as v,O as W,J as B}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";A.add(P,x);const $={name:"OpenwbLoadManagementConfigView",components:{SortableList:E,FontAwesomeIcon:V},mixins:[q,Z],props:{installAssistantActive:{type:Boolean,required:!1,default:!1}},emits:["sendCommand","save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/bat/+/config/max_power",writeable:!0},{topic:"openWB/chargepoint/+/config",writeable:!1},{topic:"openWB/consumer/+/module",writeable:!1},{topic:"openWB/consumer/+/extra_meter",writeable:!1},{topic:"openWB/counter/+/config/is_home_consumption_counter",writeable:!0},{topic:"openWB/counter/+/config/max_currents",writeable:!0},{topic:"openWB/counter/+/config/max_power_errorcase",writeable:!0},{topic:"openWB/counter/+/config/max_total_power",writeable:!0},{topic:"openWB/counter/config/consider_less_charging",writeable:!0},{topic:"openWB/counter/get/hierarchy",writeable:!0},{topic:"openWB/counter/get/loadmanagement_prios",writeable:!0},{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/pv/+/config/max_ac_out",writeable:!0},{topic:"openWB/vehicle/+/name",writeable:!1},{topic:"openWB/system/device/+/component/+/config",writeable:!1}],newGroupName:null}},computed:{componentConfigurations(){return this.getWildcardTopics("openWB/system/device/+/component/+/config")||{}},componentConfigs:{get(){return n=>{let e=this.componentConfigurations||{};return Object.keys(e).filter(t=>e[t]?.type.includes(n)).reduce((t,l)=>({...t,[l]:e[l]}),{})}}},counterConfigs:{get(){return this.componentConfigs("counter")}},counterOptions(){var n=[];for(const e of Object.values(this.componentConfigurations))this.isComponentType(e?.type,"counter")&&n.push({value:e.id,text:e.name});return n.sort((e,t)=>e.text==t.text?0:e.text>t.text?1:-1)},inverterConfigs:{get(){return this.componentConfigs("inverter")}},batConfigs:{get(){return this.componentConfigs("bat")}},hierarchyLabels:{get(){let n={};const e=this.$store.state.mqtt["openWB/counter/get/hierarchy"];if(!Array.isArray(e))return n;for(const t of e)n={...n,...this.getElementTreeNames(t)};return n}},extraMeterLinks(){const n=this.getWildcardTopics("openWB/consumer/+/extra_meter")||{},e=[];for(const[t,l]of Object.entries(n)){if(l==null)continue;const u=t.match(/^openWB\/consumer\/([^/]+)\/extra_meter$/);u&&e.push({consumerId:String(u[1]),counterId:String(l)})}return e},hiddenCounterIds(){return Array.from(new Set(this.extraMeterLinks.map(n=>n.counterId)))},consumerLinkedMeterNames(){const n={};for(const{consumerId:e,counterId:t}of this.extraMeterLinks){const l=this.getComponent(t);n[e]=l?.name??t}return n},loadManagementPriorityList:{get(){const n=this.$store.state.mqtt["openWB/counter/get/loadmanagement_prios"]||[];return Array.isArray(n)?n:[]},set(n){this.updateState("openWB/counter/get/loadmanagement_prios",n)}},loadManagementPriorityLabels:{get(){const n={},e=t=>{t.forEach(l=>{switch(l.type){case"group":{l.label&&(n[`group-${l.id}`]=l.label),Array.isArray(l.children)&&e(l.children);break}case"vehicle":{const u=String(l.id),i=this.$store.state.mqtt[`openWB/vehicle/${u}/name`];i&&(n[`vehicle-${l.id}`]=i);break}case"consumer":{const u=this.$store.state.mqtt[`openWB/consumer/${l.id}/module`]?.name;u&&(n[`consumer-${l.id}`]=u);break}}})};return e(this.loadManagementPriorityList),n}},getHcSourceIdOptions(){let n=[{value:null,text:"von openWB berechnen (in 99% der Fälle die richtige Einstellung)"}],e=[{label:"Eingerichtete Zähler-Komponenten",options:[...this.counterOptions]}];return{options:n,groups:e}}},methods:{getElementTreeNames(n){let e={};switch(n.type){case"cp":{const t=this.getChargePoint(n.id);t&&(e[n.id]=t.name);break}case"consumer":{const t=this.$store.state.mqtt[`openWB/consumer/${n.id}/module`];t?.name&&(e[n.id]=t.name);break}default:{const t=this.getComponent(n.id);t?.name&&(e[n.id]=t.name)}}return n.children.forEach(t=>{e={...e,...this.getElementTreeNames(t)}}),e},getComponent(n){let e;return Object.keys(this.$store.state.mqtt).forEach(t=>{t.match("^openWB/system/device/[0-9]+/component/"+n+"/config$")&&(e=this.$store.state.mqtt[t])}),e},getChargePoint(n){let e;return Object.keys(this.$store.state.mqtt).forEach(t=>{t.match("^openWB/chargepoint/"+n+"/config$")&&(e=this.$store.state.mqtt[t])}),e},isComponentType(n,e){return n?.split("_").includes(e)},validateGroupName(n){return n&&n.trim().length>0&&!this.loadManagementPriorityList.some(e=>e.type==="group"&&e.label===n.trim())},addLoadManagementPriorityGroup(){const n=this.newGroupName?.trim();if(!n)return;const e={type:"group",label:n,id:`group-${Date.now()}`,children:[]},t=[...this.loadManagementPriorityList,e];this.loadManagementPriorityList=t,this.newGroupName=null},deleteLoadManagementPriorityGroup(n){const e=l=>{const u=[];return l.forEach(i=>{i.type==="group"&&i.id===n?Array.isArray(i.children)&&u.push(...i.children):i.type==="group"&&Array.isArray(i.children)?u.push({...i,children:e(i.children)}):u.push(i)}),u},t=e(this.loadManagementPriorityList);this.loadManagementPriorityList=t},renameLoadManagementPriorityGroup({id:n,label:e}){const t=l=>l.map(u=>u.type==="group"&&u.id===n?{...u,label:e}:u.children?{...u,children:t(u.children)}:u);this.loadManagementPriorityList=t(this.loadManagementPriorityList)},getHomeConsumptionCounterMode(n){const e=`openWB/counter/${n}/config/is_home_consumption_counter`,t=this.$store.state.mqtt[e];return t==null?"auto_home_consumption":t==="home_consumption"?"home_consumption":t==="no_home_consumption"?"no_home_consumption":"auto_home_consumption"},setHomeConsumptionCounterMode(n,e){const t=`openWB/counter/${n}/config/is_home_consumption_counter`;if(e==="home_consumption"){this.updateState(t,"home_consumption");return}else if(e==="no_home_consumption"){this.updateState(t,"no_home_consumption");return}this.updateState(t,"auto_home_consumption")}}},N={class:"loadManagementConfig"},U={name:"loadManagementConfigForm"},F={key:0},I={key:1},H={key:0},T={key:1};function O(n,e,t,l,u,i){const b=g("openwb-base-alert"),C=g("router-link"),L=g("openwb-base-button-group-input"),y=g("openwb-base-heading"),k=g("font-awesome-icon"),h=g("openwb-base-number-input"),f=g("openwb-base-card"),S=g("sortable-list"),z=g("openwb-base-text-input"),M=g("openwb-base-submit-buttons");return p(),c("div",N,[m("form",U,[a(f,{title:"Einstellungen",collapsible:!0,collapsed:!1},{default:s(()=>[n.$store.state.mqtt["openWB/general/extern"]===!0?(p(),c("div",F,[a(b,{subtype:"info"},{default:s(()=>[...e[7]||(e[7]=[o(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(p(),c("div",I,[t.installAssistantActive?G("",!0):(p(),w(b,{key:0,subtype:"info"},{default:s(()=>[e[9]||(e[9]=o(" Die Konfiguration für die externe Steuerung durch den Netzbetreiber (RSE, EMS, §14a) erfolgt in den ",-1)),a(C,{to:"/IoConfiguration"},{default:s(()=>[...e[8]||(e[8]=[o("Einstellungen der Ein-/Ausgänge",-1)])]),_:1}),e[10]||(e[10]=o(" im Bereich der Aktionen. ",-1))]),_:1})),a(L,{title:"Fahrzeuge, die nicht mit Sollstrom laden",buttons:[{buttonValue:!1,text:"nicht berücksichtigen",class:"btn-outline-danger"},{buttonValue:!0,text:"berücksichtigen",class:"btn-outline-success"}],"model-value":n.$store.state.mqtt["openWB/counter/config/consider_less_charging"],"onUpdate:modelValue":e[0]||(e[0]=r=>n.updateState("openWB/counter/config/consider_less_charging",r))},{help:s(()=>[...e[11]||(e[11]=[m("p",null," Wenn angesteckte Fahrzeuge, die nicht oder nicht mit der Sollstromstärke laden, im Lastmanagement berücksichtigt werden, wird für diese der Sollstrom reserviert. Dadurch können bei Eingreifen des Lastmanagements andere Fahrzeuge möglicherweise nur mit reduzierter Stromstärke laden und der reservierte Strom wird nicht genutzt. Wenn die Fahrzeuge wieder Leistung beziehen, z.B. um zu klimatisieren, nutzen sie den für sie reservierten Strom. ",-1),m("p",null," Wenn angesteckte Fahrzeuge, die nicht oder nicht mit der Sollstromstärke laden, nicht im Lastmanagement berücksichtigt werden, wird für diese auch kein Strom bei vorliegender Ladefreigabe reserviert bzw. es wird nur der tatsächlich genutzte Strom im Lastmanagement berücksichtigt. Andere Fahrzeuge können dadurch mit höherer Stromstärke laden. Wenn die maximalen Lastmanagement-Grenzen fast erreicht sind und die Fahrzeuge wieder Leistung beziehen, z.B. um zu klimatisieren, kann es zu einer kurzzeitigen Überschreitung der Lastmanagement-Grenzen kommen, bis im nächsten Zyklus die Stromstärken aller Ladepunkte an die neue Situation angepasst wurden. Das kurzzeitige Überschreiten der Maximal-Werte stellt für die Sicherungen in der Regel kein Problem dar. ",-1)])]),_:1},8,["model-value"]),a(y,null,{default:s(()=>[...e[12]||(e[12]=[o(" Vorhandene Zählermodule ",-1)])]),_:1}),a(b,{subtype:"info"},{default:s(()=>[...e[13]||(e[13]=[o(" Die maximale Leistung wird nur für den EVU-Zähler berücksichtigt. Bei Zwischenzählern begrenzt das Lastmanagement rein anhand der maximalen Phasenströme.",-1),m("br",null,null,-1),o(" Wenn ein Zähler nicht auslesbar ist, wird weiterhin versucht, diesen auszulesen und nach 60s die angenommene Leistung im Fehlerfall verwendet, die unten für jeden Zähler eingestellt wird, um eine Überlast zu vermeiden. Die angenommene Leistung wird gleichmäßig auf die Phasen verteilt.",-1),m("br",null,null,-1),o(" Üblicherweise sind Hausanschlüsse mit 24kW und 3*35A bzw. 43kW und 3*63A abgesichert. ",-1)])]),_:1}),(p(!0),c(_,null,v(i.counterConfigs,r=>(p(),w(f,{key:r.id,collapsible:!0,collapsed:!0,subtype:"danger"},{header:s(()=>[a(k,{icon:["fas","gauge-high"],class:"fa-border",style:W({backgroundColor:r.color,color:n.getContrastColor(r.color),"--fa-border-color":n.getContrastColor(r.color)})},null,8,["style"]),o(" "+B(r.name),1)]),default:s(()=>[a(h,{title:"Maximale Leistung",min:1,step:.1,required:"",unit:"kW","model-value":n.$store.state.mqtt["openWB/counter/"+r.id+"/config/max_total_power"]/1e3,"onUpdate:modelValue":d=>n.updateState("openWB/counter/"+r.id+"/config/max_total_power",d*1e3)},{help:s(()=>[...e[14]||(e[14]=[o(" Maximal zulässige Leistung für diesen (Zwischen-)Zähler. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(h,{title:"Maximaler Strom L1",min:6,step:1,unit:"A",required:"","model-value":n.$store.state.mqtt["openWB/counter/"+r.id+"/config/max_currents"][0],"onUpdate:modelValue":d=>n.updateState("openWB/counter/"+r.id+"/config/max_currents",d,"0")},{help:s(()=>[...e[15]||(e[15]=[o(" Maximal zulässiger Strom für die Phase 1 dieses (Zwischen-)Zählers. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(h,{title:"Maximaler Strom L2",min:6,step:1,unit:"A",required:"","model-value":n.$store.state.mqtt["openWB/counter/"+r.id+"/config/max_currents"][1],"onUpdate:modelValue":d=>n.updateState("openWB/counter/"+r.id+"/config/max_currents",d,"1")},{help:s(()=>[...e[16]||(e[16]=[o(" Maximal zulässiger Strom für die Phase 2 dieses (Zwischen-)Zählers. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(h,{title:"Maximaler Strom L3",min:6,step:1,unit:"A",required:"","model-value":n.$store.state.mqtt["openWB/counter/"+r.id+"/config/max_currents"][2],"onUpdate:modelValue":d=>n.updateState("openWB/counter/"+r.id+"/config/max_currents",d,"2")},{help:s(()=>[...e[17]||(e[17]=[o(" Maximal zulässiger Strom für die Phase 3 dieses (Zwischen-)Zählers. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(h,{title:"Verfügbare Leistung im Fehlerfall",min:0,step:.1,unit:"kW","model-value":n.$store.state.mqtt["openWB/counter/"+r.id+"/config/max_power_errorcase"]/1e3,"onUpdate:modelValue":d=>n.updateState("openWB/counter/"+r.id+"/config/max_power_errorcase",d*1e3)},{help:s(()=>[...e[18]||(e[18]=[o(" Leistung, die im Fehlerfall dieses (Zwischen-)Zählers für die darunter angeschlossenen Ladepunkte und Verbraucher als verfügbar angenommen wird. Die Leistung wird als gleicher Strom auf allen 3 Phasen angenommen: Bei einphasiger Ladung steht daher nur ca. 1/3 dieser Leistung zur Verfügung. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(L,{title:"Als Hausverbrauch berücksichtigen?",buttons:[{buttonValue:"home_consumption",text:"Ja",class:"btn-outline-success"},{buttonValue:"auto_home_consumption",text:"Automatisch",class:"btn-outline-info"},{buttonValue:"no_home_consumption",text:"Nein",class:"btn-outline-danger"}],"model-value":i.getHomeConsumptionCounterMode(r.id),"onUpdate:modelValue":d=>i.setHomeConsumptionCounterMode(r.id,d)},{help:s(()=>[...e[19]||(e[19]=[o(" Mit dieser Einstellung legen Sie fest, ob ein Zähler in die Hausverbrauchsberechnung einfließt. ",-1),m("br",null,null,-1),o(" Ja: Der lokale Verbrauch dieses Zählers wird als Hausverbrauch berücksichtigt. ",-1),m("br",null,null,-1),o(" Nein: Der Zähler wird nicht als Hausverbrauch berücksichtigt. ",-1),m("br",null,null,-1),o(" Automatisch: Der Zähler übernimmt die Einstellung des übergeordneten Zählers. ",-1),m("br",null,null,-1),o(' Der Hausverbrauch entspricht dem Verbrauch am jeweiligen Zähler abzüglich der Leistungen von Batterien, Ladepunkten, Wechselrichtern und Unterzählern. "Automatisch" ist die Standardeinstellung und eignet sich, wenn die Einstellung für mehrere Zähler übernommen werden soll. Wichtig: Wenn alle Zähler auf "Automatisch" stehen, wird die Einstellung entlang der Zählerhierarchie weitervererbt. Für den obersten Zähler wird "Automatisch" wie "Ja" behandelt. Dadurch wird standardmäßig der Hausverbrauch erfasst. ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"])]),_:2},1024))),128)),a(y,null,{default:s(()=>[...e[20]||(e[20]=[o(" Vorhandene Wechselrichtermodule ",-1)])]),_:1}),(p(!0),c(_,null,v(i.inverterConfigs,r=>(p(),w(f,{key:r.id,collapsible:!0,collapsed:!0,subtype:"success"},{header:s(()=>[a(k,{icon:["fas","solar-panel"],class:"fa-border",style:W({backgroundColor:r.color,color:n.getContrastColor(r.color),"--fa-border-color":n.getContrastColor(r.color)})},null,8,["style"]),o(" "+B(r.name),1)]),default:s(()=>[a(h,{title:"Maximale Ausgangsleistung des Wechselrichters",min:0,step:.1,unit:"kW",required:"","model-value":n.$store.state.mqtt["openWB/pv/"+r.id+"/config/max_ac_out"]/1e3,"onUpdate:modelValue":d=>n.updateState("openWB/pv/"+r.id+"/config/max_ac_out",d*1e3)},{help:s(()=>[...e[21]||(e[21]=[o(" Bei 0 kW erfolgt keine Berücksichtigung der maximalen Ausgangsleistung. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"])]),_:2},1024))),128)),a(y,null,{default:s(()=>[...e[22]||(e[22]=[o(" Vorhandene Speichermodule ",-1)])]),_:1}),(p(!0),c(_,null,v(i.batConfigs,r=>(p(),w(f,{key:r.id,collapsible:!0,collapsed:!0,subtype:"warning"},{header:s(()=>[a(k,{icon:["fas","car-battery"],class:"fa-border",style:W({backgroundColor:r.color,color:n.getContrastColor(r.color),"--fa-border-color":n.getContrastColor(r.color)})},null,8,["style"]),o(" "+B(r.name),1)]),default:s(()=>[a(h,{title:"Maximale Leistung des Speichers",min:0,step:.1,unit:"kW",required:"","model-value":n.$store.state.mqtt["openWB/bat/"+r.id+"/config/max_power"]/1e3,"onUpdate:modelValue":d=>n.updateState("openWB/bat/"+r.id+"/config/max_power",d*1e3)},{help:s(()=>[...e[23]||(e[23]=[o(" Die maximale Leistung wird lediglich für eine Plausibilitätsprüfung der Speicherwerte genutzt. Bei 0kW erfolgt keine Prüfung. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"])]),_:2},1024))),128))]))]),_:1}),a(f,{title:"Struktur",collapsible:!0,collapsed:!0},{default:s(()=>[n.$store.state.mqtt["openWB/general/extern"]===!0?(p(),c("div",H,[a(b,{subtype:"info"},{default:s(()=>[...e[24]||(e[24]=[o(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(p(),c("div",T,[a(S,{title:"Anordnung der Komponenten","model-value":n.$store.state.mqtt["openWB/counter/get/hierarchy"],labels:i.hierarchyLabels,"linked-meters":i.consumerLinkedMeterNames,"hidden-ids":i.hiddenCounterIds,"onUpdate:modelValue":e[1]||(e[1]=r=>n.updateState("openWB/counter/get/hierarchy",r))},{help:s(()=>[...e[25]||(e[25]=[o(" Durch die Anordnung der Komponenten werden Abhängigkeiten abgebildet.",-1),m("br",null,null,-1),o(" An erster Stelle muss eine Zählerkomponente stehen, die den Netzanschlusspunkt erfasst. Dafür kann auch ein virtueller Zähler genutzt werden.",-1),m("br",null,null,-1),o(" Die weiteren Komponenten müssen hierarchisch so angeordnet werden, wie sie auch physisch im Stromnetz angeschlossen werden.",-1),m("br",null,null,-1),o(" Bei DC-gekoppelten Speichern sind diese hinter dem zugehörigen Wechselrichter zu platzieren, damit die Abhängigkeit in der Regelung berücksichtigt werden kann. ",-1)])]),_:1},8,["model-value","labels","linked-meters","hidden-ids"]),e[28]||(e[28]=m("hr",null,null,-1)),a(S,{modelValue:i.loadManagementPriorityList,"onUpdate:modelValue":e[2]||(e[2]=r=>i.loadManagementPriorityList=r),title:"Prioritätenliste",labels:i.loadManagementPriorityLabels,nesting:!0,"max-nesting-depth":1,"show-priority":!0,onDeleteGroup:i.deleteLoadManagementPriorityGroup,onRenameGroup:i.renameLoadManagementPriorityGroup},{help:s(()=>[...e[26]||(e[26]=[o(" Reihenfolge der Fahrzeug- und Verbraucher-Prioritäten für das Lastmanagement.",-1),m("br",null,null,-1),o(" Die Reihenfolge kann durch Drag & Drop geändert werden.",-1),m("br",null,null,-1),o(" Elemente können in Gruppen zusammengefasst werden. Alle Elemente innerhalb einer Gruppe erhalten die gleiche Priorität und werden im Lastmanagement gleichrangig behandelt. ",-1)])]),_:1},8,["modelValue","labels","onDeleteGroup","onRenameGroup"]),a(z,{modelValue:u.newGroupName,"onUpdate:modelValue":e[3]||(e[3]=r=>u.newGroupName=r),title:"Gruppe hinzufügen",subtype:"group",validator:i.validateGroupName,"empty-value":null,"add-button":!0,"onInput:add":i.addLoadManagementPriorityGroup},{help:s(()=>[...e[27]||(e[27]=[o(" Gruppen ermöglichen das Zusammenfassen von Fahrzeugen oder Verbrauchern für die Prioritäten-Steuerung. Elemente können per Drag & Drop in eine Gruppe verschoben werden (maximal eine Verschachtelungsebene). Gruppen können umbenannt (Stift-Symbol oder Klick auf den Namen) und gelöscht werden. Beim Löschen bleiben die enthaltenen Elemente erhalten und werden eine Ebene nach oben verschoben. ",-1)])]),_:1},8,["modelValue","validator","onInput:add"])]))]),_:1}),a(M,{"form-name":"loadManagementConfigForm",onSave:e[4]||(e[4]=r=>n.$emit("save",n.mqttTopicsToPublish)),onReset:e[5]||(e[5]=r=>n.$emit("reset")),onDefaults:e[6]||(e[6]=r=>n.$emit("defaults"))})])])}const ne=D($,[["render",O],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/LoadManagementConfiguration.vue"]]);export{ne as default}; diff --git a/web/settings/assets/MqttBridgeConfiguration-Bt8St25W.js b/web/settings/assets/MqttBridgeConfiguration-CQOhLDHm.js similarity index 99% rename from web/settings/assets/MqttBridgeConfiguration-Bt8St25W.js rename to web/settings/assets/MqttBridgeConfiguration-CQOhLDHm.js index d34c9f5b1d..2957fc483e 100644 --- a/web/settings/assets/MqttBridgeConfiguration-Bt8St25W.js +++ b/web/settings/assets/MqttBridgeConfiguration-CQOhLDHm.js @@ -1 +1 @@ -import{F as z,l as D,d as C,al as A}from"./vendor-fortawesome-DplTMxoa.js";import{C as W}from"./index-Bv2WLdLZ.js";import{_ as q,m as u,l as m,f as b,q as a,u as o,B as s,J as L,y as g,z as _,x as B,K as T,L as Q}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";D.add(C,A);const Z={name:"OpenwbMqttBridgeConfigurationView",components:{FontAwesomeIcon:z},mixins:[W],emits:["sendCommand","save","reset"],data(){return{mqttTopics:[{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/system/mqtt/bridge/+",writeable:!0}],showMqttBridgeModal:!1,modalMqttBridgeIndex:void 0}},computed:{configuredMqttBridges:{get(){const t=this.getWildcardTopics("openWB/system/mqtt/bridge/+");if(!t||typeof t!="object")return{};const e={...t};for(const[v,h]of Object.entries(e))h?.remote?.is_openwb_cloud&&delete e[v];return e}}},methods:{addMqttBridge(t){t.stopPropagation(),this.$emit("sendCommand",{command:"addMqttBridge",data:{}})},getMqttBridgeIndex(t){return parseInt(t.match(/(?:\/)(\d+)$/)[1])},removeMqttBridgeModal(t,e){e.stopPropagation(),this.modalMqttBridgeIndex=this.getMqttBridgeIndex(t),this.showMqttBridgeModal=!0},removeMqttBridge(t,e){this.showMqttBridgeModal=!1,e=="confirm"&&this.$emit("sendCommand",{command:"removeMqttBridge",data:{bridge:t}})},getMqttBridgeName(t){return this.$store.state.mqtt["openWB/system/mqtt/bridge/"+t]?this.$store.state.mqtt["openWB/system/mqtt/bridge/"+t].name:t}}},y={class:"mqttBridgeConfiguration"},E={key:0},I={key:1},N=["name"];function P(t,e,v,h,f,i){const S=u("openwb-base-modal-dialog"),c=u("openwb-base-alert"),w=u("font-awesome-icon"),k=u("openwb-base-avatar"),p=u("openwb-base-text-input"),d=u("openwb-base-button-group-input"),V=u("openwb-base-heading"),U=u("openwb-base-number-input"),x=u("openwb-base-submit-buttons"),M=u("openwb-base-card");return m(),b(T,null,[a(S,{show:f.showMqttBridgeModal,title:"MQTT-Brücke löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:e[0]||(e[0]=l=>i.removeMqttBridge(f.modalMqttBridgeIndex,l))},{default:o(()=>[s(' Willst Du die MQTT-Brücke "'+L(i.getMqttBridgeName(f.modalMqttBridgeIndex))+'" wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ',1)]),_:1},8,["show"]),g("div",y,[a(c,{subtype:"danger"},{default:o(()=>[...e[1]||(e[1]=[s(" ACHTUNG: Die Konfiguration einer MQTT-Brücke erlaubt allen Nutzern mit Zugang zum entfernten MQTT-Server alle weitergeleiteten Daten dieser openWB einzusehen!",-1),g("br",null,null,-1),s(' Es wird dringend empfohlen, dies nur für nicht-öffentliche MQTT-Server unter Verwendung starker Transport-Verschlüsselung (TLS) mit persönlichem Login und strenger Zugriffskontrolle (zumindest für die MQTT-Themen unterhalb von "Entfernter Präfix") zu aktivieren! ',-1)])]),_:1}),a(M,{title:"Konfigurierte MQTT-Brücken"},{actions:o(()=>[t.$store.state.mqtt["openWB/general/extern"]===!1?(m(),_(k,{key:0,class:"bg-success clickable",onClick:i.addMqttBridge},{default:o(()=>[a(w,{icon:["fas","plus"]})]),_:1},8,["onClick"])):B("",!0)]),default:o(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(m(),b("div",E,[a(c,{subtype:"info"},{default:o(()=>[...e[2]||(e[2]=[s(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(m(),b("div",I,[Object.keys(i.configuredMqttBridges).length===0?(m(),_(c,{key:0,subtype:"info"},{default:o(()=>[...e[3]||(e[3]=[s(" Es wurde noch keine MQTT-Brücke konfiguriert. ",-1)])]),_:1})):B("",!0),(m(!0),b(T,null,Q(i.configuredMqttBridges,(l,r)=>(m(),b("form",{key:r,name:"mqttBridgeConfigurationForm"+i.getMqttBridgeIndex(r)},[a(M,{title:l?.name,collapsible:!0,collapsed:!0,subtype:"primary"},{actions:o(()=>[a(k,{class:"bg-danger clickable",onClick:n=>i.removeMqttBridgeModal(r,n)},{default:o(()=>[a(w,{icon:["fas","trash"]})]),_:1},8,["onClick"])]),footer:o(()=>[a(x,{"form-name":"mqttBridgeConfigurationForm"+i.getMqttBridgeIndex(r),"hide-defaults":!0,onSave:n=>t.$emit("save",[r]),onReset:n=>t.$emit("reset",[r])},null,8,["form-name","onSave","onReset"])]),default:o(()=>[a(p,{title:"Bezeichnung",subtype:"text",required:"",pattern:"[A-Za-z0-9]+","model-value":l?.name,"onUpdate:modelValue":n=>t.updateState(r,n,"name")},{help:o(()=>[...e[4]||(e[4]=[s(" Die Bezeichnung darf nur aus Buchstaben ohne Umlaute und Zahlen bestehen. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(d,{title:"Brücke aktivieren",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":l?.active,"onUpdate:modelValue":n=>t.updateState(r,n,"active")},null,8,["model-value","onUpdate:modelValue"]),e[14]||(e[14]=g("hr",null,null,-1)),a(V,null,{default:o(()=>[...e[5]||(e[5]=[s(" Einstellungen zur Verbindung ",-1)])]),_:1}),a(p,{title:"Entfernter Server",subtype:"host",required:"","model-value":l?.remote?.host,"onUpdate:modelValue":n=>t.updateState(r,n,"remote.host")},null,8,["model-value","onUpdate:modelValue"]),a(U,{title:"Entfernter Port",required:"",min:1,max:65535,"model-value":l?.remote?.port,"onUpdate:modelValue":n=>t.updateState(r,n,"remote.port")},null,8,["model-value","onUpdate:modelValue"]),a(p,{title:"Benutzername",subtype:"user",required:"",pattern:"[a-zA-Z0-9_\\-+.]+","model-value":l?.remote?.username,"onUpdate:modelValue":n=>t.updateState(r,n,"remote.username")},null,8,["model-value","onUpdate:modelValue"]),a(p,{title:"Passwort",subtype:"password",required:"","model-value":l?.remote?.password,"onUpdate:modelValue":n=>t.updateState(r,n,"remote.password")},null,8,["model-value","onUpdate:modelValue"]),a(p,{title:"Präfix",subtype:"text",pattern:"[A-Za-z0-9_\\-]+(\\/[A-Za-z0-9_\\-]+)?\\/","model-value":l?.remote?.prefix,"onUpdate:modelValue":n=>t.updateState(r,n,"remote.prefix")},{help:o(()=>[...e[6]||(e[6]=[s(' Das Präfix darf nur aus Buchstaben ohne Umlaute, Zahlen, Binde- und Unterstrichen bestehen. Optional kann mit einem Schrägstrich "/" eine Topic-Struktur abgebildet werden. Am Ende des Präfixes muss ein Schrägstrich "/" stehen. ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(p,{title:"Client ID",subtype:"text",required:"",pattern:"[A-Za-z0-9_\\-]+","model-value":l?.remote?.client_id,"onUpdate:modelValue":n=>t.updateState(r,n,"remote.client_id")},{help:o(()=>[...e[7]||(e[7]=[s(" Die Client ID darf nur aus Buchstaben ohne Umlaute, Zahlen, Binde- und Unterstrichen bestehen. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(d,{title:"MQTT Protokoll",required:"required",buttons:[{buttonValue:"mqttv31",text:"v3.1"},{buttonValue:"mqttv311",text:"v3.1.1"}],"model-value":l?.remote?.protocol,"onUpdate:modelValue":n=>t.updateState(r,n,"remote.protocol")},null,8,["model-value","onUpdate:modelValue"]),a(d,{title:"TLS Version",buttons:[{buttonValue:"auto",text:"Automatisch",class:"btn-outline-success"},{buttonValue:"tlsv1.0",text:"v1.0",class:"btn-outline-warning"},{buttonValue:"tlsv1.1",text:"v1.1",class:"btn-outline-warning"},{buttonValue:"tlsv1.2",text:"v1.2"}],"model-value":l?.remote?.tls_version,"onUpdate:modelValue":n=>t.updateState(r,n,"remote.tls_version")},{help:o(()=>[...e[8]||(e[8]=[s(' In der Einstellung "Automatisch" wird die Version zwischen Client und Server ausgehandelt. Wenn erforderlich, kann eine spezielle Version erzwungen werden. Versionen kleiner 1.2 gelten als veraltet und sollten nicht mehr verwendet werden. ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(d,{title:"Brücke signalisieren",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"model-value":l?.remote?.try_private,"onUpdate:modelValue":n=>t.updateState(r,n,"remote.try_private")},{help:o(()=>[...e[9]||(e[9]=[s(" Aktiviert eine proprietäre Protokoll-Erweiterung des Mosquitto Brokers, welche dem entfernten Broker signalisiert, dass es sich um eine MQTT Brücke handelt. Ergibt bessere Leistung mit Mosquitto-Brokern, ist jedoch inkompatibel mit vielen anderen MQTT-Brokern. Daher bitte nur aktivieren, wenn der Ziel-Broker sicher ein Mosquitto-Broker ist. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),e[15]||(e[15]=g("hr",null,null,-1)),a(V,null,{default:o(()=>[...e[10]||(e[10]=[s(" Datenübertragung ",-1)])]),_:1}),a(d,{title:"Alle Statusdaten",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"model-value":l?.data_transfer?.status,"onUpdate:modelValue":n=>t.updateState(r,n,"data_transfer.status")},{help:o(()=>[...e[11]||(e[11]=[s(" Wenn aktiviert, werden alle Statusdaten (z.B. Ladezustand, Leistung, Spannungen, Ströme, etc.) der angeschlossenen Komponenten und Ladepunkte übertragen. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(d,{title:"Datenserien für Diagramme",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"model-value":l?.data_transfer?.graph,"onUpdate:modelValue":n=>t.updateState(r,n,"data_transfer.graph")},{help:o(()=>[...e[12]||(e[12]=[s(" Wenn aktiviert, werden alle Datenserien für die Diagramme (z.B. Leistung über Zeit) der angeschlossenen Komponenten und Ladepunkte übertragen. Dies sind deutlich mehr Daten als bei den Statusdaten allein.",-1),g("br",null,null,-1),s(" Diese Einstellung sollte nur aktiviert werden, wenn die Daten auch tatsächlich benötigt und interpretiert werden können. In der Regel werden die Daten nur für die Web- und Display-Themes benötigt und können daher bei einer MQTT-Brücke deaktiviert bleiben. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(d,{title:"Fernkonfiguration ermöglichen",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"model-value":l?.data_transfer?.configuration,"onUpdate:modelValue":n=>t.updateState(r,n,"data_transfer.configuration")},{help:o(()=>[...e[13]||(e[13]=[s(' Wenn aktiviert, können über die MQTT-Brücke auch Konfigurationsänderungen (z.B. Ladeleistung, Zeitsteuerungen, etc.) an die openWB über die Topics "openWB/set/*" gesendet werden. Dies sollte nur aktiviert werden, wenn der entfernte MQTT-Server und alle Nutzer, welche darauf Zugriff haben, absolut vertrauenswürdig sind. Ansonsten besteht die Gefahr, dass unbefugte Nutzer die Konfiguration der openWB verändern und z.B. den Ladevorgang manipulieren. ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"])]),_:2},1032,["title"])],8,N))),128))]))]),_:1})])],64)}const J=q(Z,[["render",P],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/MqttBridgeConfiguration.vue"]]);export{J as default}; +import{F as z,l as D,d as C,al as A}from"./vendor-fortawesome-DplTMxoa.js";import{C as W}from"./index-CE-5DBwq.js";import{_ as q,m as u,l as m,f as b,q as a,u as o,B as s,J as L,y as g,z as _,x as B,K as T,L as Q}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";D.add(C,A);const Z={name:"OpenwbMqttBridgeConfigurationView",components:{FontAwesomeIcon:z},mixins:[W],emits:["sendCommand","save","reset"],data(){return{mqttTopics:[{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/system/mqtt/bridge/+",writeable:!0}],showMqttBridgeModal:!1,modalMqttBridgeIndex:void 0}},computed:{configuredMqttBridges:{get(){const t=this.getWildcardTopics("openWB/system/mqtt/bridge/+");if(!t||typeof t!="object")return{};const e={...t};for(const[v,h]of Object.entries(e))h?.remote?.is_openwb_cloud&&delete e[v];return e}}},methods:{addMqttBridge(t){t.stopPropagation(),this.$emit("sendCommand",{command:"addMqttBridge",data:{}})},getMqttBridgeIndex(t){return parseInt(t.match(/(?:\/)(\d+)$/)[1])},removeMqttBridgeModal(t,e){e.stopPropagation(),this.modalMqttBridgeIndex=this.getMqttBridgeIndex(t),this.showMqttBridgeModal=!0},removeMqttBridge(t,e){this.showMqttBridgeModal=!1,e=="confirm"&&this.$emit("sendCommand",{command:"removeMqttBridge",data:{bridge:t}})},getMqttBridgeName(t){return this.$store.state.mqtt["openWB/system/mqtt/bridge/"+t]?this.$store.state.mqtt["openWB/system/mqtt/bridge/"+t].name:t}}},y={class:"mqttBridgeConfiguration"},E={key:0},I={key:1},N=["name"];function P(t,e,v,h,f,i){const S=u("openwb-base-modal-dialog"),c=u("openwb-base-alert"),w=u("font-awesome-icon"),k=u("openwb-base-avatar"),p=u("openwb-base-text-input"),d=u("openwb-base-button-group-input"),V=u("openwb-base-heading"),U=u("openwb-base-number-input"),x=u("openwb-base-submit-buttons"),M=u("openwb-base-card");return m(),b(T,null,[a(S,{show:f.showMqttBridgeModal,title:"MQTT-Brücke löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:e[0]||(e[0]=l=>i.removeMqttBridge(f.modalMqttBridgeIndex,l))},{default:o(()=>[s(' Willst Du die MQTT-Brücke "'+L(i.getMqttBridgeName(f.modalMqttBridgeIndex))+'" wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ',1)]),_:1},8,["show"]),g("div",y,[a(c,{subtype:"danger"},{default:o(()=>[...e[1]||(e[1]=[s(" ACHTUNG: Die Konfiguration einer MQTT-Brücke erlaubt allen Nutzern mit Zugang zum entfernten MQTT-Server alle weitergeleiteten Daten dieser openWB einzusehen!",-1),g("br",null,null,-1),s(' Es wird dringend empfohlen, dies nur für nicht-öffentliche MQTT-Server unter Verwendung starker Transport-Verschlüsselung (TLS) mit persönlichem Login und strenger Zugriffskontrolle (zumindest für die MQTT-Themen unterhalb von "Entfernter Präfix") zu aktivieren! ',-1)])]),_:1}),a(M,{title:"Konfigurierte MQTT-Brücken"},{actions:o(()=>[t.$store.state.mqtt["openWB/general/extern"]===!1?(m(),_(k,{key:0,class:"bg-success clickable",onClick:i.addMqttBridge},{default:o(()=>[a(w,{icon:["fas","plus"]})]),_:1},8,["onClick"])):B("",!0)]),default:o(()=>[t.$store.state.mqtt["openWB/general/extern"]===!0?(m(),b("div",E,[a(c,{subtype:"info"},{default:o(()=>[...e[2]||(e[2]=[s(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(m(),b("div",I,[Object.keys(i.configuredMqttBridges).length===0?(m(),_(c,{key:0,subtype:"info"},{default:o(()=>[...e[3]||(e[3]=[s(" Es wurde noch keine MQTT-Brücke konfiguriert. ",-1)])]),_:1})):B("",!0),(m(!0),b(T,null,Q(i.configuredMqttBridges,(l,r)=>(m(),b("form",{key:r,name:"mqttBridgeConfigurationForm"+i.getMqttBridgeIndex(r)},[a(M,{title:l?.name,collapsible:!0,collapsed:!0,subtype:"primary"},{actions:o(()=>[a(k,{class:"bg-danger clickable",onClick:n=>i.removeMqttBridgeModal(r,n)},{default:o(()=>[a(w,{icon:["fas","trash"]})]),_:1},8,["onClick"])]),footer:o(()=>[a(x,{"form-name":"mqttBridgeConfigurationForm"+i.getMqttBridgeIndex(r),"hide-defaults":!0,onSave:n=>t.$emit("save",[r]),onReset:n=>t.$emit("reset",[r])},null,8,["form-name","onSave","onReset"])]),default:o(()=>[a(p,{title:"Bezeichnung",subtype:"text",required:"",pattern:"[A-Za-z0-9]+","model-value":l?.name,"onUpdate:modelValue":n=>t.updateState(r,n,"name")},{help:o(()=>[...e[4]||(e[4]=[s(" Die Bezeichnung darf nur aus Buchstaben ohne Umlaute und Zahlen bestehen. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(d,{title:"Brücke aktivieren",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":l?.active,"onUpdate:modelValue":n=>t.updateState(r,n,"active")},null,8,["model-value","onUpdate:modelValue"]),e[14]||(e[14]=g("hr",null,null,-1)),a(V,null,{default:o(()=>[...e[5]||(e[5]=[s(" Einstellungen zur Verbindung ",-1)])]),_:1}),a(p,{title:"Entfernter Server",subtype:"host",required:"","model-value":l?.remote?.host,"onUpdate:modelValue":n=>t.updateState(r,n,"remote.host")},null,8,["model-value","onUpdate:modelValue"]),a(U,{title:"Entfernter Port",required:"",min:1,max:65535,"model-value":l?.remote?.port,"onUpdate:modelValue":n=>t.updateState(r,n,"remote.port")},null,8,["model-value","onUpdate:modelValue"]),a(p,{title:"Benutzername",subtype:"user",required:"",pattern:"[a-zA-Z0-9_\\-+.]+","model-value":l?.remote?.username,"onUpdate:modelValue":n=>t.updateState(r,n,"remote.username")},null,8,["model-value","onUpdate:modelValue"]),a(p,{title:"Passwort",subtype:"password",required:"","model-value":l?.remote?.password,"onUpdate:modelValue":n=>t.updateState(r,n,"remote.password")},null,8,["model-value","onUpdate:modelValue"]),a(p,{title:"Präfix",subtype:"text",pattern:"[A-Za-z0-9_\\-]+(\\/[A-Za-z0-9_\\-]+)?\\/","model-value":l?.remote?.prefix,"onUpdate:modelValue":n=>t.updateState(r,n,"remote.prefix")},{help:o(()=>[...e[6]||(e[6]=[s(' Das Präfix darf nur aus Buchstaben ohne Umlaute, Zahlen, Binde- und Unterstrichen bestehen. Optional kann mit einem Schrägstrich "/" eine Topic-Struktur abgebildet werden. Am Ende des Präfixes muss ein Schrägstrich "/" stehen. ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(p,{title:"Client ID",subtype:"text",required:"",pattern:"[A-Za-z0-9_\\-]+","model-value":l?.remote?.client_id,"onUpdate:modelValue":n=>t.updateState(r,n,"remote.client_id")},{help:o(()=>[...e[7]||(e[7]=[s(" Die Client ID darf nur aus Buchstaben ohne Umlaute, Zahlen, Binde- und Unterstrichen bestehen. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(d,{title:"MQTT Protokoll",required:"required",buttons:[{buttonValue:"mqttv31",text:"v3.1"},{buttonValue:"mqttv311",text:"v3.1.1"}],"model-value":l?.remote?.protocol,"onUpdate:modelValue":n=>t.updateState(r,n,"remote.protocol")},null,8,["model-value","onUpdate:modelValue"]),a(d,{title:"TLS Version",buttons:[{buttonValue:"auto",text:"Automatisch",class:"btn-outline-success"},{buttonValue:"tlsv1.0",text:"v1.0",class:"btn-outline-warning"},{buttonValue:"tlsv1.1",text:"v1.1",class:"btn-outline-warning"},{buttonValue:"tlsv1.2",text:"v1.2"}],"model-value":l?.remote?.tls_version,"onUpdate:modelValue":n=>t.updateState(r,n,"remote.tls_version")},{help:o(()=>[...e[8]||(e[8]=[s(' In der Einstellung "Automatisch" wird die Version zwischen Client und Server ausgehandelt. Wenn erforderlich, kann eine spezielle Version erzwungen werden. Versionen kleiner 1.2 gelten als veraltet und sollten nicht mehr verwendet werden. ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(d,{title:"Brücke signalisieren",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"model-value":l?.remote?.try_private,"onUpdate:modelValue":n=>t.updateState(r,n,"remote.try_private")},{help:o(()=>[...e[9]||(e[9]=[s(" Aktiviert eine proprietäre Protokoll-Erweiterung des Mosquitto Brokers, welche dem entfernten Broker signalisiert, dass es sich um eine MQTT Brücke handelt. Ergibt bessere Leistung mit Mosquitto-Brokern, ist jedoch inkompatibel mit vielen anderen MQTT-Brokern. Daher bitte nur aktivieren, wenn der Ziel-Broker sicher ein Mosquitto-Broker ist. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),e[15]||(e[15]=g("hr",null,null,-1)),a(V,null,{default:o(()=>[...e[10]||(e[10]=[s(" Datenübertragung ",-1)])]),_:1}),a(d,{title:"Alle Statusdaten",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"model-value":l?.data_transfer?.status,"onUpdate:modelValue":n=>t.updateState(r,n,"data_transfer.status")},{help:o(()=>[...e[11]||(e[11]=[s(" Wenn aktiviert, werden alle Statusdaten (z.B. Ladezustand, Leistung, Spannungen, Ströme, etc.) der angeschlossenen Komponenten und Ladepunkte übertragen. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(d,{title:"Datenserien für Diagramme",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"model-value":l?.data_transfer?.graph,"onUpdate:modelValue":n=>t.updateState(r,n,"data_transfer.graph")},{help:o(()=>[...e[12]||(e[12]=[s(" Wenn aktiviert, werden alle Datenserien für die Diagramme (z.B. Leistung über Zeit) der angeschlossenen Komponenten und Ladepunkte übertragen. Dies sind deutlich mehr Daten als bei den Statusdaten allein.",-1),g("br",null,null,-1),s(" Diese Einstellung sollte nur aktiviert werden, wenn die Daten auch tatsächlich benötigt und interpretiert werden können. In der Regel werden die Daten nur für die Web- und Display-Themes benötigt und können daher bei einer MQTT-Brücke deaktiviert bleiben. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),a(d,{title:"Fernkonfiguration ermöglichen",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"model-value":l?.data_transfer?.configuration,"onUpdate:modelValue":n=>t.updateState(r,n,"data_transfer.configuration")},{help:o(()=>[...e[13]||(e[13]=[s(' Wenn aktiviert, können über die MQTT-Brücke auch Konfigurationsänderungen (z.B. Ladeleistung, Zeitsteuerungen, etc.) an die openWB über die Topics "openWB/set/*" gesendet werden. Dies sollte nur aktiviert werden, wenn der entfernte MQTT-Server und alle Nutzer, welche darauf Zugriff haben, absolut vertrauenswürdig sind. Ansonsten besteht die Gefahr, dass unbefugte Nutzer die Konfiguration der openWB verändern und z.B. den Ladevorgang manipulieren. ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"])]),_:2},1032,["title"])],8,N))),128))]))]),_:1})])],64)}const J=q(Z,[["render",P],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/MqttBridgeConfiguration.vue"]]);export{J as default}; diff --git a/web/settings/assets/OpenwbSortableList-CQO_8Mps.js b/web/settings/assets/OpenwbSortableList-yQzkYwAQ.js similarity index 99% rename from web/settings/assets/OpenwbSortableList-CQO_8Mps.js rename to web/settings/assets/OpenwbSortableList-yQzkYwAQ.js index 1ef9ca4f14..ac40d94ce8 100644 --- a/web/settings/assets/OpenwbSortableList-CQO_8Mps.js +++ b/web/settings/assets/OpenwbSortableList-yQzkYwAQ.js @@ -1 +1 @@ -import{O as I}from"./index-Bv2WLdLZ.js";import{_ as N,a9 as S,m as g,l as s,z as m,u as y,E as k,aa as B,y as l,k as D,f as u,B as V,J as b,x as p,q as h,G as E,I as x,A as _,D as C,j as v}from"./vendor-BwGffBs-.js";import{F as M,l as O,aw as q,ax as A,X as P,a4 as L,a3 as K,a2 as U,al as j,ay as T,a6 as H,Y as W,Q as z}from"./vendor-fortawesome-DplTMxoa.js";O.add(q,A,P,L,K,U,j,T,H,W,z);let F=0;const R={name:"OpenwbNestedList",components:{draggable:S,FontAwesomeIcon:M},props:{modelValue:{type:Array,required:!1,default:()=>[]},labels:{type:Object,required:!1,default:void 0},linkedMeters:{type:Object,required:!1,default:void 0},hiddenIds:{type:Array,required:!1,default:void 0},nesting:{type:Boolean,default:!0},maxNestingDepth:{type:Number,default:1/0},currentNestingDepth:{type:Number,default:0},showPriority:{type:Boolean,default:!1},groupName:{type:String,required:!1,default:void 0}},emits:["update:modelValue","delete-group","rename-group"],data(){return{editingGroupId:null,editingValue:"",ownGroupName:`openwb-sortable-${++F}`}},computed:{list:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},resolvedGroupName(){return this.groupName??this.ownGroupName},dragGroup(){return this.currentNestingDepth===0?{name:this.resolvedGroupName,pull:!0,put:[this.resolvedGroupName]}:{name:this.resolvedGroupName,pull:!0,put:(e,t,n)=>{if(e.options.group.name!==t.options.group.name)return!1;const f=n?.__draggable_context?.element;return f?f.type!=="group":!0}}}},methods:{classes(e){var t="";switch(e.type){case"bat":t+="battery";break;case"cp":t+="charge-point";break;default:t+=e.type;break}return t},elementKey(e){return e.type===void 0?String(e.id):`${e.type}-${e.id}`},lookupByElement(e,t){if(!e)return;const n=this.elementKey(t);return n in e?e[n]:e[t.id]},getElementLabel(e){return this.lookupByElement(this.labels,e)??e.id},linkedMeterName(e){return this.lookupByElement(this.linkedMeters,e)??void 0},isHidden(e){return e.type==="counter"&&!!this.hiddenIds?.some(t=>String(t)===String(e.id))},getElementIcon(e){switch(e.type){case"bat":return["fas","car-battery"];case"counter":return["fas","gauge-high"];case"cp":return["fas","charging-station"];case"vehicle":return["fas","car"];case"consumer":return["fas","plug"];case"inverter":return["fas","solar-panel"];default:return}},startEditing(e){e.type==="group"&&(this.editingGroupId=e.id,this.editingValue=e.label,this.$nextTick(()=>{const t=this.$el.querySelector(".group-rename-input");t?.focus(),t?.select()}))},finishEditing(e){if(!this.editingValue.trim()){this.editingGroupId=null;return}this.$emit("rename-group",{id:e,label:this.editingValue.trim()}),this.editingGroupId=null}}},J={key:0,class:"badge badge-pill badge-light mr-1"},Q={key:2},X=["onClick"],Y=["onKeyup","onBlur"],Z={key:0,class:"element-actions"},$=["title"],ee={class:"linked-meter-name"};function te(e,t,n,f,c,i){const d=g("font-awesome-icon"),w=g("openwb-nested-list",!0),o=g("draggable");return s(),m(o,{modelValue:i.list,"onUpdate:modelValue":t[3]||(t[3]=a=>i.list=a),class:"dragArea w-100 mb-0",tag:"ul",group:i.dragGroup,"item-key":i.elementKey,handle:".handle"},{item:y(({element:a,index:G})=>[k(l("li",null,[l("div",{class:D(["element-titel",i.classes(a)])},[l("span",null,[n.showPriority&&n.currentNestingDepth===0?(s(),u("span",J,[t[4]||(t[4]=l("span",{class:"priority-prefix"},"Prio ",-1)),V(b(G+1),1)])):p("",!0),h(d,{class:"handle",icon:["fas",n.nesting?"arrows-alt":"arrows-up-down"]},null,8,["icon"]),i.getElementIcon(a)?(s(),m(d,{key:1,icon:i.getElementIcon(a)},null,8,["icon"])):p("",!0),c.editingGroupId!==a.id?(s(),u("span",Q,[l("span",{style:{cursor:"pointer"},onClick:r=>i.startEditing(a)},b(i.getElementLabel(a)),9,X)])):k((s(),u("input",{key:3,"onUpdate:modelValue":t[0]||(t[0]=r=>c.editingValue=r),class:"group-rename-input",onKeyup:E(r=>i.finishEditing(a.id),["enter"]),onBlur:r=>i.finishEditing(a.id)},null,40,Y)),[[x,c.editingValue]])]),a.type==="group"?(s(),u("span",Z,[h(d,{class:"mr-2",icon:["fas","pen"],onClick:_(r=>i.startEditing(a),["stop"])},null,8,["onClick"]),h(d,{icon:["fas","trash"],onClick:_(r=>e.$emit("delete-group",a.id),["stop"])},null,8,["onClick"])])):i.linkedMeterName(a)?(s(),u("span",{key:1,class:"element-linked-meter",title:i.linkedMeterName(a)},[l("span",ee,b(i.linkedMeterName(a)),1),h(d,{icon:["fas","link"]})],8,$)):p("",!0)],2),n.nesting&&a.children&&n.currentNestingDeptha.children=r,labels:n.labels,"linked-meters":n.linkedMeters,"hidden-ids":n.hiddenIds,nesting:n.nesting,"max-nesting-depth":n.maxNestingDepth,"current-nesting-depth":n.currentNestingDepth+1,"show-priority":n.showPriority,"group-name":i.resolvedGroupName,onDeleteGroup:t[1]||(t[1]=r=>e.$emit("delete-group",r)),onRenameGroup:t[2]||(t[2]=r=>e.$emit("rename-group",r))},null,8,["modelValue","onUpdate:modelValue","labels","linked-meters","hidden-ids","nesting","max-nesting-depth","current-nesting-depth","show-priority","group-name"])):p("",!0)],512),[[B,!i.isHidden(a)]])]),_:1},8,["modelValue","group","item-key"])}const ne=N(R,[["render",te],["__scopeId","data-v-82c9421a"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbNestedList.vue"]]),ie={name:"OpenwbSortableList",components:{OpenwbBaseSettingElement:I,OpenwbNestedList:ne},props:{id:{type:String,required:!1,default:void 0},title:{type:String,required:!1,default:""},modelValue:{type:Array,required:!1,default:void 0},labels:{type:Object,default:void 0},linkedMeters:{type:Object,default:void 0},hiddenIds:{type:Array,default:void 0},nesting:{type:Boolean,default:!0},maxNestingDepth:{type:Number,default:1/0},showPriority:{type:Boolean,default:!1}},emits:["update:modelValue","delete-group","rename-group"],computed:{value:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}}}},ae={class:"input-group"},re={key:0,class:"input-group-prepend"},se={key:2};function le(e,t,n,f,c,i){const d=g("openwb-nested-list"),w=g("openwb-base-setting-element");return s(),m(w,null,C({title:y(()=>[v(e.$slots,"title",{},()=>[V(b(n.title),1)],!0)]),default:y(()=>[l("div",ae,[n.showPriority&&i.value!==void 0?(s(),u("div",re,[...t[3]||(t[3]=[l("div",{class:"input-group-text priority-arrow"},[l("span",{class:"priority-arrow-shaft"}),l("span",{class:"priority-arrow-head"})],-1)])])):p("",!0),i.value!==void 0?(s(),m(d,{key:1,modelValue:i.value,"onUpdate:modelValue":t[0]||(t[0]=o=>i.value=o),class:"form-control variable-height",labels:n.labels,"linked-meters":n.linkedMeters,"hidden-ids":n.hiddenIds,nesting:n.nesting,"max-nesting-depth":n.maxNestingDepth,"show-priority":n.showPriority,onDeleteGroup:t[1]||(t[1]=o=>e.$emit("delete-group",o)),onRenameGroup:t[2]||(t[2]=o=>e.$emit("rename-group",o))},null,8,["modelValue","labels","linked-meters","hidden-ids","nesting","max-nesting-depth","show-priority"])):(s(),u("div",se,"Warte auf Daten..."))])]),_:2},[e.$slots.help?{name:"help",fn:y(()=>[v(e.$slots,"help",{},void 0,!0)]),key:"0"}:void 0]),1024)}const pe=N(ie,[["render",le],["__scopeId","data-v-1dac57c1"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbSortableList.vue"]]);export{pe as S}; +import{O as I}from"./index-CE-5DBwq.js";import{_ as N,a9 as S,m as g,l as s,z as m,u as y,E as k,aa as B,y as l,k as D,f as u,B as V,J as b,x as p,q as h,G as E,I as x,A as _,D as C,j as v}from"./vendor-BwGffBs-.js";import{F as M,l as O,aw as q,ax as A,X as P,a4 as L,a3 as K,a2 as U,al as j,ay as T,a6 as H,Y as W,Q as z}from"./vendor-fortawesome-DplTMxoa.js";O.add(q,A,P,L,K,U,j,T,H,W,z);let F=0;const R={name:"OpenwbNestedList",components:{draggable:S,FontAwesomeIcon:M},props:{modelValue:{type:Array,required:!1,default:()=>[]},labels:{type:Object,required:!1,default:void 0},linkedMeters:{type:Object,required:!1,default:void 0},hiddenIds:{type:Array,required:!1,default:void 0},nesting:{type:Boolean,default:!0},maxNestingDepth:{type:Number,default:1/0},currentNestingDepth:{type:Number,default:0},showPriority:{type:Boolean,default:!1},groupName:{type:String,required:!1,default:void 0}},emits:["update:modelValue","delete-group","rename-group"],data(){return{editingGroupId:null,editingValue:"",ownGroupName:`openwb-sortable-${++F}`}},computed:{list:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},resolvedGroupName(){return this.groupName??this.ownGroupName},dragGroup(){return this.currentNestingDepth===0?{name:this.resolvedGroupName,pull:!0,put:[this.resolvedGroupName]}:{name:this.resolvedGroupName,pull:!0,put:(e,t,n)=>{if(e.options.group.name!==t.options.group.name)return!1;const f=n?.__draggable_context?.element;return f?f.type!=="group":!0}}}},methods:{classes(e){var t="";switch(e.type){case"bat":t+="battery";break;case"cp":t+="charge-point";break;default:t+=e.type;break}return t},elementKey(e){return e.type===void 0?String(e.id):`${e.type}-${e.id}`},lookupByElement(e,t){if(!e)return;const n=this.elementKey(t);return n in e?e[n]:e[t.id]},getElementLabel(e){return this.lookupByElement(this.labels,e)??e.id},linkedMeterName(e){return this.lookupByElement(this.linkedMeters,e)??void 0},isHidden(e){return e.type==="counter"&&!!this.hiddenIds?.some(t=>String(t)===String(e.id))},getElementIcon(e){switch(e.type){case"bat":return["fas","car-battery"];case"counter":return["fas","gauge-high"];case"cp":return["fas","charging-station"];case"vehicle":return["fas","car"];case"consumer":return["fas","plug"];case"inverter":return["fas","solar-panel"];default:return}},startEditing(e){e.type==="group"&&(this.editingGroupId=e.id,this.editingValue=e.label,this.$nextTick(()=>{const t=this.$el.querySelector(".group-rename-input");t?.focus(),t?.select()}))},finishEditing(e){if(!this.editingValue.trim()){this.editingGroupId=null;return}this.$emit("rename-group",{id:e,label:this.editingValue.trim()}),this.editingGroupId=null}}},J={key:0,class:"badge badge-pill badge-light mr-1"},Q={key:2},X=["onClick"],Y=["onKeyup","onBlur"],Z={key:0,class:"element-actions"},$=["title"],ee={class:"linked-meter-name"};function te(e,t,n,f,c,i){const d=g("font-awesome-icon"),w=g("openwb-nested-list",!0),o=g("draggable");return s(),m(o,{modelValue:i.list,"onUpdate:modelValue":t[3]||(t[3]=a=>i.list=a),class:"dragArea w-100 mb-0",tag:"ul",group:i.dragGroup,"item-key":i.elementKey,handle:".handle"},{item:y(({element:a,index:G})=>[k(l("li",null,[l("div",{class:D(["element-titel",i.classes(a)])},[l("span",null,[n.showPriority&&n.currentNestingDepth===0?(s(),u("span",J,[t[4]||(t[4]=l("span",{class:"priority-prefix"},"Prio ",-1)),V(b(G+1),1)])):p("",!0),h(d,{class:"handle",icon:["fas",n.nesting?"arrows-alt":"arrows-up-down"]},null,8,["icon"]),i.getElementIcon(a)?(s(),m(d,{key:1,icon:i.getElementIcon(a)},null,8,["icon"])):p("",!0),c.editingGroupId!==a.id?(s(),u("span",Q,[l("span",{style:{cursor:"pointer"},onClick:r=>i.startEditing(a)},b(i.getElementLabel(a)),9,X)])):k((s(),u("input",{key:3,"onUpdate:modelValue":t[0]||(t[0]=r=>c.editingValue=r),class:"group-rename-input",onKeyup:E(r=>i.finishEditing(a.id),["enter"]),onBlur:r=>i.finishEditing(a.id)},null,40,Y)),[[x,c.editingValue]])]),a.type==="group"?(s(),u("span",Z,[h(d,{class:"mr-2",icon:["fas","pen"],onClick:_(r=>i.startEditing(a),["stop"])},null,8,["onClick"]),h(d,{icon:["fas","trash"],onClick:_(r=>e.$emit("delete-group",a.id),["stop"])},null,8,["onClick"])])):i.linkedMeterName(a)?(s(),u("span",{key:1,class:"element-linked-meter",title:i.linkedMeterName(a)},[l("span",ee,b(i.linkedMeterName(a)),1),h(d,{icon:["fas","link"]})],8,$)):p("",!0)],2),n.nesting&&a.children&&n.currentNestingDeptha.children=r,labels:n.labels,"linked-meters":n.linkedMeters,"hidden-ids":n.hiddenIds,nesting:n.nesting,"max-nesting-depth":n.maxNestingDepth,"current-nesting-depth":n.currentNestingDepth+1,"show-priority":n.showPriority,"group-name":i.resolvedGroupName,onDeleteGroup:t[1]||(t[1]=r=>e.$emit("delete-group",r)),onRenameGroup:t[2]||(t[2]=r=>e.$emit("rename-group",r))},null,8,["modelValue","onUpdate:modelValue","labels","linked-meters","hidden-ids","nesting","max-nesting-depth","current-nesting-depth","show-priority","group-name"])):p("",!0)],512),[[B,!i.isHidden(a)]])]),_:1},8,["modelValue","group","item-key"])}const ne=N(R,[["render",te],["__scopeId","data-v-82c9421a"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbNestedList.vue"]]),ie={name:"OpenwbSortableList",components:{OpenwbBaseSettingElement:I,OpenwbNestedList:ne},props:{id:{type:String,required:!1,default:void 0},title:{type:String,required:!1,default:""},modelValue:{type:Array,required:!1,default:void 0},labels:{type:Object,default:void 0},linkedMeters:{type:Object,default:void 0},hiddenIds:{type:Array,default:void 0},nesting:{type:Boolean,default:!0},maxNestingDepth:{type:Number,default:1/0},showPriority:{type:Boolean,default:!1}},emits:["update:modelValue","delete-group","rename-group"],computed:{value:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}}}},ae={class:"input-group"},re={key:0,class:"input-group-prepend"},se={key:2};function le(e,t,n,f,c,i){const d=g("openwb-nested-list"),w=g("openwb-base-setting-element");return s(),m(w,null,C({title:y(()=>[v(e.$slots,"title",{},()=>[V(b(n.title),1)],!0)]),default:y(()=>[l("div",ae,[n.showPriority&&i.value!==void 0?(s(),u("div",re,[...t[3]||(t[3]=[l("div",{class:"input-group-text priority-arrow"},[l("span",{class:"priority-arrow-shaft"}),l("span",{class:"priority-arrow-head"})],-1)])])):p("",!0),i.value!==void 0?(s(),m(d,{key:1,modelValue:i.value,"onUpdate:modelValue":t[0]||(t[0]=o=>i.value=o),class:"form-control variable-height",labels:n.labels,"linked-meters":n.linkedMeters,"hidden-ids":n.hiddenIds,nesting:n.nesting,"max-nesting-depth":n.maxNestingDepth,"show-priority":n.showPriority,onDeleteGroup:t[1]||(t[1]=o=>e.$emit("delete-group",o)),onRenameGroup:t[2]||(t[2]=o=>e.$emit("rename-group",o))},null,8,["modelValue","labels","linked-meters","hidden-ids","nesting","max-nesting-depth","show-priority"])):(s(),u("div",se,"Warte auf Daten..."))])]),_:2},[e.$slots.help?{name:"help",fn:y(()=>[v(e.$slots,"help",{},void 0,!0)]),key:"0"}:void 0]),1024)}const pe=N(ie,[["render",le],["__scopeId","data-v-1dac57c1"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbSortableList.vue"]]);export{pe as S}; diff --git a/web/settings/assets/SecurityConfiguration-BzxouWX6.js b/web/settings/assets/SecurityConfiguration-DvVm9CBI.js similarity index 99% rename from web/settings/assets/SecurityConfiguration-BzxouWX6.js rename to web/settings/assets/SecurityConfiguration-DvVm9CBI.js index 5edaa06aaf..a3936116fa 100644 --- a/web/settings/assets/SecurityConfiguration-BzxouWX6.js +++ b/web/settings/assets/SecurityConfiguration-DvVm9CBI.js @@ -1,2 +1,2 @@ -import{F as x,l as q,A as _,af as E,B as P,ar as L,d as T,al as Z}from"./vendor-fortawesome-DplTMxoa.js";import{C as I}from"./index-Bv2WLdLZ.js";import{_ as O,m as w,l as u,f,q as i,u as r,B as l,y as d,z as g,J as k,x as b,K as U,L as W,A as N,k as H}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";q.add(_,E,P,L,T,Z);const F={name:"OpenwbSecurityView",components:{FontAwesomeIcon:x},mixins:[I],props:{installAssistantActive:{type:Boolean,required:!1,default:!1}},emits:["save","reset","defaults","sendCommand"],data(){return{mqttTopics:[{topic:"$CONTROL/dynamic-security/v1/response",writeable:!1},{topic:"openWB/chargepoint/+/config",writeable:!1},{topic:"openWB/general/allow_unencrypted_access",writeable:!0},{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/general/web_theme",writeable:!1},{topic:"openWB/io/action/+/config",writeable:!1},{topic:"openWB/optional/int_display/theme",writeable:!1},{topic:"openWB/system/dataprotection_acknowledged",writeable:!1},{topic:"openWB/system/device/+/component/+/config",writeable:!1},{topic:"openWB/system/io/+/config",writeable:!1},{topic:"openWB/system/security/user_management_active",writeable:!0},{topic:"openWB/vehicle/+/name",writeable:!1}],activeControlCommand:null,controlCommandsQueue:[],clients:[],clientDetails:{},groups:[],groupDetails:{},rawRoles:[],roleDetails:{},rolesVersion:null,showAddUserModal:!1,newClientName:null,newClientEmail:null,newClientPassword:null,newClientPasswordConfirmation:null,showAddGroupModal:!1,newGroupName:null,anonymousGroupName:null,dynSecAdminRoleName:"dynsec-admin",userGroupName:"user",displayGroupName:"display",defaultAclAccess:[],showResetModal:!1,skipInit:!1}},computed:{dynSecResponse(){return this.$store.state.mqtt["$CONTROL/dynamic-security/v1/response"]},loggedInUser(){return this.$store.state.local.username||null},userManagementActive:{get(){return this.$store.state.mqtt["openWB/system/security/user_management_active"]===!0},set(t){this.skipInit=!0,this.updateState("openWB/system/security/user_management_active",t)}},addUserDisabled(){return!this.newClientName||!this.newClientEmail||!this.newClientPassword||!this.newClientPasswordConfirmation||this.newClientPassword!==this.newClientPasswordConfirmation||this.clients.includes(this.newClientName)},addGroupDisabled(){return!this.newGroupName||this.groups.includes(this.newGroupName)},readableAcls(){return t=>!t||!Array.isArray(t)?"":t.sort((e,h)=>e.topich.topic?1:0).map(e=>{const v={publishClientSend:"Veröffentlichen",publishClientReceive:"Empfangen",subscribe:"Abonnieren",unsubscribe:"Abonnement aufheben",subscribeLiteral:"Abonnieren (exakt)",unsubscribeLiteral:"Abonnement aufheben (exakt)",subscribePattern:"Abonnieren (Muster)",unsubscribePattern:"Abonnement aufheben (Muster)"}[e.acltype]||e.acltype,s=e.allow===!0?"erlaubt":e.allow===!1?"verboten":"unbekannt";return`${e.topic?'"'+e.topic+'"':""} -> ${v} ${s}`}).join(` +import{F as x,l as q,A as _,af as E,B as P,ar as L,d as T,al as Z}from"./vendor-fortawesome-DplTMxoa.js";import{C as I}from"./index-CE-5DBwq.js";import{_ as O,m as w,l as u,f,q as i,u as r,B as l,y as d,z as g,J as k,x as b,K as U,L as W,A as N,k as H}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";q.add(_,E,P,L,T,Z);const F={name:"OpenwbSecurityView",components:{FontAwesomeIcon:x},mixins:[I],props:{installAssistantActive:{type:Boolean,required:!1,default:!1}},emits:["save","reset","defaults","sendCommand"],data(){return{mqttTopics:[{topic:"$CONTROL/dynamic-security/v1/response",writeable:!1},{topic:"openWB/chargepoint/+/config",writeable:!1},{topic:"openWB/general/allow_unencrypted_access",writeable:!0},{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/general/web_theme",writeable:!1},{topic:"openWB/io/action/+/config",writeable:!1},{topic:"openWB/optional/int_display/theme",writeable:!1},{topic:"openWB/system/dataprotection_acknowledged",writeable:!1},{topic:"openWB/system/device/+/component/+/config",writeable:!1},{topic:"openWB/system/io/+/config",writeable:!1},{topic:"openWB/system/security/user_management_active",writeable:!0},{topic:"openWB/vehicle/+/name",writeable:!1}],activeControlCommand:null,controlCommandsQueue:[],clients:[],clientDetails:{},groups:[],groupDetails:{},rawRoles:[],roleDetails:{},rolesVersion:null,showAddUserModal:!1,newClientName:null,newClientEmail:null,newClientPassword:null,newClientPasswordConfirmation:null,showAddGroupModal:!1,newGroupName:null,anonymousGroupName:null,dynSecAdminRoleName:"dynsec-admin",userGroupName:"user",displayGroupName:"display",defaultAclAccess:[],showResetModal:!1,skipInit:!1}},computed:{dynSecResponse(){return this.$store.state.mqtt["$CONTROL/dynamic-security/v1/response"]},loggedInUser(){return this.$store.state.local.username||null},userManagementActive:{get(){return this.$store.state.mqtt["openWB/system/security/user_management_active"]===!0},set(t){this.skipInit=!0,this.updateState("openWB/system/security/user_management_active",t)}},addUserDisabled(){return!this.newClientName||!this.newClientEmail||!this.newClientPassword||!this.newClientPasswordConfirmation||this.newClientPassword!==this.newClientPasswordConfirmation||this.clients.includes(this.newClientName)},addGroupDisabled(){return!this.newGroupName||this.groups.includes(this.newGroupName)},readableAcls(){return t=>!t||!Array.isArray(t)?"":t.sort((e,h)=>e.topich.topic?1:0).map(e=>{const v={publishClientSend:"Veröffentlichen",publishClientReceive:"Empfangen",subscribe:"Abonnieren",unsubscribe:"Abonnement aufheben",subscribeLiteral:"Abonnieren (exakt)",unsubscribeLiteral:"Abonnement aufheben (exakt)",subscribePattern:"Abonnieren (Muster)",unsubscribePattern:"Abonnement aufheben (Muster)"}[e.acltype]||e.acltype,s=e.allow===!0?"erlaubt":e.allow===!1?"verboten":"unbekannt";return`${e.topic?'"'+e.topic+'"':""} -> ${v} ${s}`}).join(` `)},componentName(){return t=>{const e=`openWB/system/device/+/component/${t}/config`;return Object.values(this.getWildcardTopics(e))[0]?.name||void 0}},chargePointName(){return t=>{const e=`openWB/chargepoint/${t}/config`;return this.$store.state.mqtt[e]?.name||void 0}},vehicleName(){return t=>{const e=`openWB/vehicle/${t}/name`;return this.$store.state.mqtt[e]||void 0}},ioDeviceName(){return t=>{const e=`openWB/system/io/${t}/config`;return this.$store.state.mqtt[e]?.name||void 0}},ioActionName(){return t=>{const e=`openWB/io/action/${t}/config`;return this.$store.state.mqtt[e]?.name||void 0}},routes(){return this.$router.getRoutes()},routeName(){return t=>{const e=t.split("-").map(v=>v.charAt(0).toUpperCase()+v.slice(1)).join(""),h=this.routes.find(v=>v.name===e);if(h===void 0){console.warn("No route found for view:",t,"(searched for route name:",e+")");return}return h.meta.heading}},friendlyRoleName(){return t=>{const e=a=>{switch(a[0]){case"counter":return"Zähler";case"inverter":return"Wechselrichter";case"bat":return"Speicher";case"chargepoint":return"Ladepunkt";case"vehicle":return"Fahrzeug";case"io":switch(a[1]){case"device":return"Ein-/Ausgangs Gerät";case"action":return"Ein-/Ausgangs Aktion"}break;default:return a[0]}},h=a=>{let c=a[1],p=e(a),m="",z;switch(a[0]){case"counter":case"inverter":case"bat":m=this.componentName(c)||c;break;case"chargepoint":m=this.chargePointName(c)||c;break;case"vehicle":m=this.vehicleName(c)||c;break;case"io":switch(c=a[2],a[1]){case"device":m=this.ioDeviceName(c)||c;break;case"action":m=this.ioActionName(c)||c;break;default:m=c}break}return s[s.length-2]=="write"?z="MQTT-Input":(z="lesen",["chargepoint","vehicle"].includes(a[0])&&(z+=" und bedienen")),`Daten: ${p} '${m}' (${c}) ${z}`};let v=null;switch(t){case"charge-log-access":case"install-assistant-access":case"data-management-access":case"legal-settings-access":v=t.replace("-access","");break;case"settings-access":return"Einstellungen: Zugang ermöglichen";case"legacy-smart-home-configuration-access":return"Einstellungen: Konfiguration - SmartHome";case"full-access":return"Voller Zugang lesen und schreiben";case this.dynSecAdminRoleName:return"Sicherheits-Administrator";case"basic-display-data":return"Basisdaten: Display";case"basic-system-data":return"Basisdaten: System";case"basic-theme-data":return"Basisdaten: Hauptseite/Theme";case"basic-user-data":return"Basisdaten: Benutzer";case"other-data":return"Daten: Externe Anwendungen lesen und schreiben";case"electricity-price-access":return"Daten: Strompreise lesen";case"graph-access":return"Daten: Verlaufsdiagramm lesen";case"home-consumption-access":return"Daten: Hausverbrauch lesen"}const s=t.split("-");if((t.endsWith("-configuration-access")||t.endsWith("-installation-access")||t.endsWith("-access")&&s.length==2)&&(v=t.replace("-access","")),v!==null){const a=this.routeName(v);if(a!==void 0)return`Einstellungen: ${a}`}if(s[1]=="sum")switch(s[0]){case"inverter":return"Daten: Wechselrichter Summendaten lesen";case"bat":return"Daten: Speicher Summendaten lesen";case"chargepoint":return"Daten: Ladepunkt Summendaten lesen"}if(!isNaN(s[1])&&["counter","inverter","bat","chargepoint","vehicle"].includes(s[0]))return h(s);switch(s[0]){case"vehicle":if(s[1]==="configuration")return"Einstellungen: Fahrzeuge";break;case"io":return s[1]==="configuration"?"Einstellungen: Ein-/Ausgänge":h(s)}return`*${t}*`}},rolesList(){return this.roles.map(t=>({name:t,friendlyName:this.friendlyRoleName(t)})).sort((t,e)=>t.friendlyNamee.friendlyName?1:0)},webThemeSupported(){return this.$store.state.mqtt["openWB/general/web_theme"]?.userManagementSupported===!0},displayThemeSupported(){return this.$store.state.mqtt["openWB/optional/int_display/theme"]?.userManagementSupported===!0}},watch:{dynSecResponse(t){t&&t.responses&&t.responses.forEach(e=>{switch(e.command){case"listClients":this.clients=JSON.parse(JSON.stringify(e.data.clients));break;case"getClient":this.clientDetails[e.data.client.username]=JSON.parse(JSON.stringify(e.data.client));break;case"createClient":case"disableClient":case"enableClient":this.$root.postClientMessage("Änderungen wurden übernommen.","success"),this.getClientList();break;case"modifyClient":case"deleteClient":this.$root.postClientMessage("Änderungen wurden übernommen.","success"),this.getClientList(),this.getGroupsDetails();break;case"listGroups":this.groups=JSON.parse(JSON.stringify(e.data.groups));break;case"getAnonymousGroup":this.anonymousGroupName=e.data.group.groupname;break;case"getGroup":this.groupDetails[e.data.group.groupname]=JSON.parse(JSON.stringify(e.data.group));break;case"createGroup":this.$root.postClientMessage("Änderungen wurden übernommen.","success"),this.getGroupList();break;case"modifyGroup":case"deleteGroup":this.$root.postClientMessage("Änderungen wurden übernommen.","success"),this.getGroupList(),this.getClientsDetails();break;case"listRoles":this.roles=JSON.parse(JSON.stringify(e.data.roles)).filter(h=>h.startsWith("openwb-version:")?(this.rolesVersion=h.split(":")[1],!1):!0);break;case"getRole":this.roleDetails[e.data.role.rolename]=JSON.parse(JSON.stringify(e.data.role));break;case"getDefaultACLAccess":this.defaultAclAccess=JSON.parse(JSON.stringify(e.data.acls));break;default:console.warn("Unhandled dynamic security response:",e);break}}),this.activeControlCommand=null,this.processControlCommandQueue()},loggedInUser(t,e){t!==e&&this.$router.go()},userManagementActive(t,e){t!==e&&this.init()}},mounted(){this.init()},methods:{init(){if(this.skipInit){console.debug("Skipping initialization of Security view."),this.skipInit=!1;return}this.clients=[],this.clientDetails={},this.groups=[],this.groupDetails={},this.roles=[],this.roleDetails={},this.userManagementActive&&(console.debug("Initializing Security view for user:",this.loggedInUser),this.getAnonymousGroupName(),this.getDefaultAclAccess(),this.getClientList(),this.getGroupList(),this.getRoleList())},handleResetModal(t){this.showResetModal=!1,t==="confirm"&&this.$emit("sendCommand",{command:"resetUserManagement"})},saveSecuritySettings(){this.userManagementActive||(console.info("User management deactivated, removing mqtt cookie."),this.$cookies.remove("mqtt")),this.$emit("save",this.mqttTopicsToPublish)},sendControlCommand(t,e={}){if(this.activeControlCommand!==null){console.warn("Control command already running, please wait.");return}this.activeControlCommand=t;const h={commands:[{command:t,...e}]};console.debug("$CONTROL command:",h),this.$root.doPublish("$CONTROL/dynamic-security/v1",h)},queueControlCommand(t,e={}){this.controlCommandsQueue.push({command:t,payload:e}),this.processControlCommandQueue()},processControlCommandQueue(){if(this.activeControlCommand!==null||this.controlCommandsQueue.length===0)return;const{command:t,payload:e}=this.controlCommandsQueue.shift();this.sendControlCommand(t,e)},getClientList(){this.queueControlCommand("listClients")},getClientsDetails(){this.clients.forEach(t=>{this.queueControlCommand("getClient",{username:t})})},getClient(t){this.queueControlCommand("getClient",{username:t})},createClient(t){if(t==="confirm"){if(!this.newClientName||!this.newClientEmail||!this.newClientPassword||this.newClientPassword!==this.newClientPasswordConfirmation){this.$root.postClientMessage("Ungültige Eingaben. Bitte stelle sicher, dass der Benutzername, die E-Mail-Adresse und das Passwort ausgefüllt sind und die Passwortbestätigung übereinstimmt.","danger");return}this.queueControlCommand("createClient",{username:this.newClientName,password:this.newClientPassword,textname:this.newClientEmail})}this.showAddUserModal=!1,this.newClientName=null,this.newClientEmail=null,this.newClientPassword=null,this.newClientPasswordConfirmation=null},deleteClient(t){if(t===this.loggedInUser){console.error("Cannot delete currently logged in user:",t),this.$root.postClientMessage("Der aktuell angemeldete Benutzer kann nicht gelöscht werden.","danger");return}this.queueControlCommand("deleteClient",{username:t})},toggleClientDisabled(t){const e=this.clientDetails[t]?.disabled||!1;if(t===this.loggedInUser&&e===!1){console.error("Cannot disable currently logged in user:",t),this.$root.postClientMessage("Der aktuell angemeldete Benutzer kann nicht deaktiviert werden.","danger");return}this.queueControlCommand(e?"enableClient":"disableClient",{username:t}),this.queueControlCommand("getClient",{username:t})},modifyClient(t){if(t===this.loggedInUser&&!this.clientDetails[t]?.roles.map(e=>e.rolename).includes(this.dynSecAdminRoleName)&&(console.error(`Cannot remove ${this.dynSecAdminRoleName} role from currently logged in user:`,t),this.$root.postClientMessage(`Die Rolle '${this.friendlyRoleName(this.dynSecAdminRoleName)}' kann vom aktuell angemeldeten Benutzer nicht entfernt werden und wird automatisch wieder hinzugefügt, da sie für die Verwaltung der Benutzerrechte benötigt wird. Bitte wechsle vor der Bearbeitung zu einem anderen Benutzer, um die Rolle zu entfernen.`,"warning"),this.clientDetails[t].roles.push({rolename:this.dynSecAdminRoleName})),[null,void 0,""].includes(this.clientDetails[t].password))delete this.clientDetails[t].password;else if(this.clientDetails[t].username==="admin"){console.warn("Admin password change requested, sending updateAdminPassword command to openWB."),this.$emit("sendCommand",{command:"updateAdminPassword",data:{newPassword:this.clientDetails[t].password}}),setTimeout(()=>{console.warn("Admin password updated via openWB command, updating dynamic security plugin with new password."),this.queueControlCommand("modifyClient",{username:t,...this.clientDetails[t]})},500);return}this.queueControlCommand("modifyClient",{username:t,...this.clientDetails[t]})},getGroupList(){this.queueControlCommand("listGroups")},getAnonymousGroupName(){this.queueControlCommand("getAnonymousGroup")},getGroupsDetails(){this.groups.forEach(t=>{this.queueControlCommand("getGroup",{groupname:t})})},getGroup(t){this.queueControlCommand("getGroup",{groupname:t})},createGroup(t){if(t==="confirm"){if(!this.newGroupName||this.groups.includes(this.newGroupName)){this.$root.postClientMessage("Ungültige Eingabe. Bitte stelle sicher, dass der Gruppenname ausgefüllt ist und noch nicht existiert.","danger");return}this.queueControlCommand("createGroup",{groupname:this.newGroupName})}this.showAddGroupModal=!1,this.newGroupName=null},deleteGroup(t){this.queueControlCommand("deleteGroup",{groupname:t})},modifyGroup(t){this.queueControlCommand("modifyGroup",{groupname:t,...this.groupDetails[t]})},getRoleList(){this.queueControlCommand("listRoles")},getRole(t){this.queueControlCommand("getRole",{rolename:t})},getDefaultAclAccess(){this.queueControlCommand("getDefaultACLAccess")}}},J={class:"security"},Q={name:"addUserForm"},K={name:"addGroupForm"},j={key:1},X={name:"accessForm"},Y={key:0},$={key:1},ee=["title","onClick"],ne={key:0},te=["name"],se={key:1},re={key:1},ie={key:0},le=["name"],oe={key:1},ae={key:1},ue={key:0},de=["name"],me={key:1},pe={key:1};function ge(t,e,h,v,s,a){const c=w("openwb-base-modal-dialog"),p=w("openwb-base-alert"),m=w("openwb-base-text-input"),z=w("openwb-base-button-group-input"),G=w("router-link"),M=w("openwb-base-button-input"),R=w("openwb-base-submit-buttons"),B=w("openwb-base-card"),D=w("FontAwesomeIcon"),y=w("font-awesome-icon"),A=w("openwb-base-avatar"),V=w("openwb-base-array-input"),S=w("openwb-base-textarea");return u(),f("div",J,[i(c,{show:s.showResetModal,title:"Benutzerverwaltung zurücksetzen",subtype:"danger",buttons:[{text:"Alles zurücksetzen!",event:"confirm",subtype:"danger"}],onModalResult:e[0]||(e[0]=n=>a.handleResetModal(n))},{default:r(()=>[...e[16]||(e[16]=[l(" Bist Du sicher, dass Du die openWB Benutzerverwaltung zurücksetzen möchtest? Hiermit werden alle Benutzer, Gruppen und Rollen gelöscht und auf die Werkseinstellungen zurückgesetzt. Diese Aktion ist irreversibel! ",-1)])]),_:1},8,["show"]),i(c,{show:s.showAddUserModal,title:"Benutzer hinzufügen",subtype:"success",buttons:[{text:"Benutzer hinzufügen",event:"confirm",subtype:"success",disabled:a.addUserDisabled}],onModalResult:e[5]||(e[5]=n=>a.createClient(n))},{default:r(()=>[d("form",Q,[i(p,{subtype:"info"},{default:r(()=>[...e[17]||(e[17]=[l(" Der Benutzername kann nicht mehr geändert werden! ",-1)])]),_:1}),i(m,{modelValue:s.newClientName,"onUpdate:modelValue":e[1]||(e[1]=n=>s.newClientName=n),title:"Benutzername",subtype:"user",required:"",validator:n=>s.clients.includes(n)?"Dieser Benutzername ist bereits vergeben":!0},null,8,["modelValue","validator"]),i(m,{modelValue:s.newClientEmail,"onUpdate:modelValue":e[2]||(e[2]=n=>s.newClientEmail=n),title:"E-Mail",subtype:"email",required:""},null,8,["modelValue"]),i(m,{modelValue:s.newClientPassword,"onUpdate:modelValue":e[3]||(e[3]=n=>s.newClientPassword=n),title:"Passwort",subtype:"password",required:""},null,8,["modelValue"]),i(m,{modelValue:s.newClientPasswordConfirmation,"onUpdate:modelValue":e[4]||(e[4]=n=>s.newClientPasswordConfirmation=n),title:"Passwort bestätigen",subtype:"password",required:"",validator:n=>n===s.newClientPassword||"Kennwörter stimmen nicht überein"},null,8,["modelValue","validator"])])]),_:1},8,["show","buttons"]),i(c,{show:s.showAddGroupModal,title:"Gruppe hinzufügen",subtype:"success",buttons:[{text:"Gruppe hinzufügen",event:"confirm",subtype:"success",disabled:a.addGroupDisabled}],onModalResult:e[7]||(e[7]=n=>a.createGroup(n))},{default:r(()=>[d("form",K,[i(p,{subtype:"info"},{default:r(()=>[...e[18]||(e[18]=[l(" Der Gruppenname kann nicht mehr geändert werden! ",-1)])]),_:1}),i(m,{modelValue:s.newGroupName,"onUpdate:modelValue":e[6]||(e[6]=n=>s.newGroupName=n),title:"Gruppenname",subtype:"user",required:"",validator:n=>s.groups.includes(n)?"Dieser Gruppenname ist bereits vergeben":!0},null,8,["modelValue","validator"])])]),_:1},8,["show","buttons"]),t.$store.state.mqtt["openWB/general/extern"]!==!1?(u(),g(p,{key:0,subtype:"info"},{default:r(()=>[...e[19]||(e[19]=[l(" Die Einstellungen zur Sicherheit und Benutzerverwaltung werden aktuell nur für primary openWB unterstützt! ",-1)])]),_:1})):(u(),f("div",j,[d("form",X,[i(B,{title:"Allgemein"},{footer:r(()=>[i(R,{"form-name":"accessForm",onSave:a.saveSecuritySettings,onReset:e[11]||(e[11]=n=>t.$emit("reset")),onDefaults:e[12]||(e[12]=n=>t.$emit("defaults"))},null,8,["onSave"])]),default:r(()=>[i(p,{subtype:"danger"},{default:r(()=>[...e[20]||(e[20]=[l(" Der ",-1),d("strong",null,"Safari Browser",-1),l(" hat in der aktuellen ",-1),d("strong",null,"MacOS/iOS Version 26.x",-1),l(" Probleme mit Websocket-Verbindungen über HTTPs, wenn eine IP anstelle des Hostnamens verwendet wird. Das äußert sich darin, dass die Verbindung nicht zuverlässig hergestellt werden kann. Häufig sind mehrere Verbindungsversuche (Seite neu laden) notwendig, damit die Verbindung steht. Sobald die Verbindung hergestellt werden konnte, funktioniert der Zugriff für die aktuelle Sitzung auch mit Safari zuverlässig. Es wird empfohlen, einen anderen Browser zu verwenden oder die openWB über einen Hostnamen aufzurufen, um dieses Problem zu umgehen. ",-1)])]),_:1}),i(z,{title:"Unverschlüsselten Zugang erlauben","model-value":t.$store.state.mqtt["openWB/general/allow_unencrypted_access"],disabled:a.userManagementActive,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[8]||(e[8]=n=>t.updateState("openWB/general/allow_unencrypted_access",n))},{help:r(()=>[...e[21]||(e[21]=[d("p",null," Hier kann eingestellt werden, ob unverschlüsselter Zugang zu openWB erlaubt ist. Dies betrifft sowohl den Zugriff über MQTT (Ports 1883 und 9001) als auch über HTTP (Port 80) (Weboberfläche). ",-1),d("p",null,[d("strong",null,"Hinweis:"),l(" Aus Sicherheitsgründen sollte der unverschlüsselte Zugang nur in geschützten Netzwerken aktiviert werden. Um die Benutzerverwaltung zu aktivieren, muss der unverschlüsselte Zugang zuerst deaktiviert werden. ")],-1)])]),_:1},8,["model-value","disabled"]),i(z,{title:"Benutzerverwaltung","model-value":a.userManagementActive,disabled:t.$store.state.mqtt["openWB/general/allow_unencrypted_access"]===!0||!a.webThemeSupported||!a.displayThemeSupported,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[9]||(e[9]=n=>a.userManagementActive=n)},{help:r(()=>[...e[22]||(e[22]=[d("p",null," Hier kann die integrierte Benutzerverwaltung von openWB aktiviert oder deaktiviert werden. Mit aktivierter Benutzerverwaltung ist der Zugriff auf den Mosquitto Broker (MQTT) und davon abhängige Dienste (Weboberfläche, API) nur mit einem gültigen Benutzerkonto (oder anonym ohne Anmeldung, falls erlaubt) möglich. ",-1)])]),_:1},8,["model-value","disabled"]),a.webThemeSupported?b("",!0):(u(),g(p,{key:0,subtype:"danger",class:"mt-2"},{default:r(()=>[l(' Das ausgewählte Theme "'+k(t.$store.state.mqtt["openWB/general/web_theme"]?.name)+'" für die ',1),i(G,{to:"/GeneralConfiguration"},{default:r(()=>[...e[23]||(e[23]=[l("Hauptseite",-1)])]),_:1}),e[24]||(e[24]=l(" unterstützt die Benutzerverwaltung nicht. ",-1))]),_:1})),a.displayThemeSupported?b("",!0):(u(),g(p,{key:1,subtype:"danger",class:"mt-2"},{default:r(()=>[l(' Das ausgewählte Theme "'+k(t.$store.state.mqtt["openWB/optional/int_display/theme"]?.name)+'" für das ',1),i(G,{to:"/DisplayConfiguration"},{default:r(()=>[...e[25]||(e[25]=[l("Display",-1)])]),_:1}),e[26]||(e[26]=l(" unterstützt die Benutzerverwaltung nicht. ",-1))]),_:1})),i(p,{subtype:"warning",class:"mt-2"},{default:r(()=>[e[30]||(e[30]=d("p",null,[d("strong",null,"Die Benutzerverwaltung erfordert zwingend die Abschaltung des unverschlüsselten Zugangs!")],-1)),d("p",null,[e[28]||(e[28]=l(" Werden Änderungen an dem unverschlüsselten Zugang oder dem Status der Benutzerverwaltung vorgenommen, so ist zwingend ein ",-1)),i(G,{to:"/System/SystemConfiguration"},{default:r(()=>[...e[27]||(e[27]=[l("Neustart dieser openWB",-1)])]),_:1}),e[29]||(e[29]=l(" erforderlich, damit die Änderungen wirksam werden! Erst danach können Benutzer, Gruppen und Rollen angelegt und verwaltet werden. ",-1))]),e[31]||(e[31]=d("p",null,"Standard-Admin-Benutzer nach der ersten Aktivierung oder dem Zurücksetzen:",-1)),e[32]||(e[32]=d("ul",null,[d("li",null,[l("Benutzername: "),d("strong",null,"admin")]),d("li",null,[l("Passwort: "),d("strong",null,"openwb")])],-1))]),_:1}),i(p,{subtype:"danger"},{default:r(()=>[...e[33]||(e[33]=[l(" Einige Bereiche sind noch nicht kompatibel mit der Benutzerverwaltung. Bitte überprüfe vor der Aktivierung, ob Du eine oder mehrere dieser Funktionen nutzt: ",-1),d("ul",null,[d("li",null,"SmartHome"),d("li",null,"SimpleAPI")],-1)])]),_:1}),e[35]||(e[35]=d("hr",null,null,-1)),i(M,{title:"Benutzerverwaltung zurücksetzen","button-text":"Zurücksetzen",subtype:"danger",disabled:a.userManagementActive||a.loggedInUser!==null,onButtonClicked:e[10]||(e[10]=n=>s.showResetModal=!0)},{help:r(()=>[...e[34]||(e[34]=[l(" Hiermit werden alle Benutzer, Gruppen und Rollen der openWB Benutzerverwaltung gelöscht und auf die Werkseinstellungen zurückgesetzt. Diese Aktion ist irreversibel!",-1),d("br",null,null,-1),d("strong",null,"Hinweis:",-1),l(" Die Benutzerverwaltung muss deaktiviert sein und danach ein erforderlicher Neustart durchgeführt werden, um die Benutzerverwaltung zurücksetzen zu können. ",-1)])]),_:1},8,["disabled"])]),_:1})]),a.userManagementActive&&s.anonymousGroupName!==null?(u(),f("div",Y,[t.$store.state.mqtt["openWB/system/dataprotection_acknowledged"]!==!0?(u(),g(p,{key:0,subtype:"warning"},{default:r(()=>[e[37]||(e[37]=l(" Sie müssen der ",-1)),i(G,{to:"/System/LegalSettings"},{default:r(()=>[...e[36]||(e[36]=[l("Datenschutzerklärung",-1)])]),_:1}),e[38]||(e[38]=l(' zustimmen, um die Funktion "Kennwort vergessen" nutzen zu können! ',-1))]),_:1})):b("",!0),i(B,{collapsible:!0,collapsed:!0,onExpanded:e[14]||(e[14]=n=>a.getClientsDetails())},{header:r(()=>[i(D,{icon:["fas","user"]}),e[39]||(e[39]=l(" Benutzer ",-1))]),actions:r(n=>[n.collapsed?b("",!0):(u(),g(A,{key:0,class:"bg-success clickable",title:"Neuen Benutzer erstellen",onClick:e[13]||(e[13]=N(o=>s.showAddUserModal=!0,["stop"]))},{default:r(()=>[i(y,{icon:["fas","plus"]})]),_:1}))]),default:r(()=>[s.clients.length===0?(u(),g(p,{key:0,subtype:"info"},{default:r(()=>[...e[40]||(e[40]=[l(" Es sind noch keine Benutzer angelegt oder Du hast nicht die benötigten Rechte, Daten anzuzeigen. ",-1)])]),_:1})):(u(),f("div",$,[(u(!0),f(U,null,W(s.clients,n=>(u(),g(B,{key:n,collapsible:!0,collapsed:!0,onExpanded:o=>a.getClient(n)},{header:r(()=>[i(D,{icon:["fas",s.clientDetails[n]?.disabled?"user-slash":"user"]},null,8,["icon"]),l(" "+k(n),1)]),actions:r(o=>[o.collapsed?b("",!0):(u(),f("span",{key:0,class:H(["pill mr-2",[s.clientDetails[n]?.disabled?"bg-danger":"bg-success",{clickable:a.loggedInUser!==n}]]),title:a.loggedInUser!==n?`Benutzer ${s.clientDetails[n]?.disabled?"aktivieren":"deaktivieren"}`:"Der aktuell angemeldete Benutzer kann nicht deaktiviert werden.",onClick:N(C=>{a.loggedInUser!==n&&a.toggleClientDisabled(n)},["stop"])},k(s.clientDetails[n]?.disabled?"Deaktiviert":"Aktiv"),11,ee)),!o.collapsed&&a.loggedInUser!==n&&!n.startsWith("Display-")?(u(),g(A,{key:1,class:"bg-danger clickable",title:"Benutzer löschen",onClick:N(C=>{a.loggedInUser!==n&&a.deleteClient(n)},["stop"])},{default:r(()=>[i(y,{icon:["fas","trash"]})]),_:1},8,["onClick"])):b("",!0)]),footer:r(()=>[i(R,{"form-name":`clientForm-${n}`,"save-id":`saveClientBtn-${n}`,"hide-reset":!0,"hide-defaults":!0,onSave:o=>a.modifyClient(n)},null,8,["form-name","save-id","onSave"])]),default:r(()=>[s.clientDetails[n]?(u(),f("div",ne,[d("form",{name:`clientForm-${n}`},[i(m,{modelValue:s.clientDetails[n].username,"onUpdate:modelValue":o=>s.clientDetails[n].username=o,title:"Benutzername",subtype:"user",disabled:""},null,8,["modelValue","onUpdate:modelValue"]),s.clientDetails[n].username.startsWith("Display-")?b("",!0):(u(),g(m,{key:0,modelValue:s.clientDetails[n].textname,"onUpdate:modelValue":o=>s.clientDetails[n].textname=o,title:"E-Mail",subtype:"email",required:!s.clientDetails[n].username.startsWith("Display-")},{help:r(()=>[...e[41]||(e[41]=[l(' Die hier angegebene E-Mail wird für die Funktion "Kennwort vergessen" verwendet. ',-1)])]),_:1},8,["modelValue","onUpdate:modelValue","required"])),s.clientDetails[n].username.startsWith("Display-")?b("",!0):(u(),g(m,{key:1,modelValue:s.clientDetails[n].password,"onUpdate:modelValue":o=>s.clientDetails[n].password=o,title:"Passwort",subtype:"password"},{help:r(()=>[...e[42]||(e[42]=[l(" Bereits festgelegte Passwörter werden nicht angezeigt!",-1),d("br",null,null,-1),l(" Um das Passwort zu ändern, bitte ein neues Passwort eingeben und speichern, andernfalls das Feld leer lassen. ",-1)])]),_:1},8,["modelValue","onUpdate:modelValue"])),i(V,{title:"Zugewiesene Gruppen","valid-elements":s.groups,"model-value":s.clientDetails[n].groups.map(o=>o.groupname),"onUpdate:modelValue":o=>{s.clientDetails[n].groups=o.map(C=>({groupname:C}))}},{"input-prefix":r(()=>[i(y,{icon:["fas","users"]})]),"element-prefix":r(()=>[i(y,{icon:["fas","users"]})]),help:r(()=>[...e[43]||(e[43]=[l(" Hier können Gruppen zugewiesen werden, denen der Benutzer angehört. Über die Gruppen werden Rollen und damit verbundene Zugriffsrechte (ACLs) vererbt. Es wird empfohlen, Berechtigungen über Gruppen zu verwalten, damit bei mehreren Benutzern mit ähnlichen Rechten die Verwaltung einfacher und übersichtlicher bleibt. Es können aber auch direkt Rollen zugewiesen werden, um Ergänzungen zu den Gruppenrechten abzubilden. ",-1)])]),_:1},8,["valid-elements","model-value","onUpdate:modelValue"]),i(V,{title:"Zugewiesene Rollen","valid-elements":a.rolesList.map(o=>({value:o.name,label:o.friendlyName})),"model-value":s.clientDetails[n].roles.map(o=>o.rolename),"onUpdate:modelValue":o=>{s.clientDetails[n].roles=o.map(C=>({rolename:C}))}},{"input-prefix":r(()=>[i(y,{icon:["fas","file-shield"]})]),"element-prefix":r(()=>[i(y,{icon:["fas","file-shield"]})]),help:r(()=>[...e[44]||(e[44]=[l(" Hier können Rollen zugewiesen werden, die dem Benutzer direkt zugeordnet werden. Über die Rollen werden Zugriffsrechte (ACLs) vererbt. Es wird empfohlen, Berechtigungen über Gruppen zu verwalten und hier nur ergänzende Rollen zuzuweisen, um die Übersicht zu behalten. ",-1)])]),_:1},8,["valid-elements","model-value","onUpdate:modelValue"]),i(S,{modelValue:s.clientDetails[n].textdescription,"onUpdate:modelValue":o=>s.clientDetails[n].textdescription=o,title:"Zusatzinformationen",subtype:"text"},{help:r(()=>[...e[45]||(e[45]=[l(" Hier können zusätzliche Informationen zum Benutzer hinterlegt werden. ",-1)])]),_:1},8,["modelValue","onUpdate:modelValue"])],8,te)])):(u(),f("div",se,"Lade Benutzerdetails..."))]),_:2},1032,["onExpanded"]))),128))]))]),_:1}),i(B,{collapsible:!0,collapsed:!0},{header:r(()=>[i(D,{icon:["fas","users"]}),e[46]||(e[46]=l(" Gruppen ",-1))]),actions:r(n=>[n.collapsed?b("",!0):(u(),g(A,{key:0,class:"bg-success clickable",title:"Neue Gruppe erstellen",onClick:e[15]||(e[15]=N(o=>s.showAddGroupModal=!0,["stop"]))},{default:r(()=>[i(y,{icon:["fas","plus"]})]),_:1}))]),default:r(()=>[s.groups.length===0?(u(),g(p,{key:0,subtype:"info"},{default:r(()=>[...e[47]||(e[47]=[l(" Es sind noch keine Gruppen angelegt oder Du hast nicht die benötigten Rechte, Daten anzuzeigen. ",-1)])]),_:1})):(u(),f("div",re,[(u(!0),f(U,null,W(s.groups,n=>(u(),g(B,{key:n,collapsible:!0,collapsed:!0,onExpanded:o=>a.getGroup(n)},{header:r(()=>[i(D,{icon:["fas","users"]}),l(" "+k(n),1)]),actions:r(o=>[!o.collapsed&&![s.anonymousGroupName,s.userGroupName,s.displayGroupName].includes(n)?(u(),g(A,{key:0,class:"bg-danger clickable",title:"Gruppe löschen",onClick:N(C=>a.deleteGroup(n),["stop"])},{default:r(()=>[i(y,{icon:["fas","trash"]})]),_:1},8,["onClick"])):b("",!0)]),footer:r(()=>[i(R,{"form-name":`groupForm-${n}`,"save-id":`saveGroupBtn-${n}`,"hide-reset":!0,"hide-defaults":!0,onSave:o=>a.modifyGroup(n)},null,8,["form-name","save-id","onSave"])]),default:r(()=>[s.groupDetails[n]?(u(),f("div",ie,[n===s.anonymousGroupName?(u(),g(p,{key:0,subtype:"info"},{default:r(()=>[l(' Die Gruppe "'+k(n)+'" kann nicht gelöscht werden, da sie für den anonymen Zugriff (ohne Anmeldung) auf openWB benötigt wird. ',1)]),_:2},1024)):b("",!0),n===s.userGroupName?(u(),g(p,{key:1,subtype:"info"},{default:r(()=>[l(' Die Gruppe "'+k(n)+'" kann nicht bearbeitet werden, da sie von openWB für reguläre Benutzer verwendet wird. Es wird empfohlen, diese Gruppe allen Benutzern zuzuweisen und weitere Rollen durch separate Gruppen oder direkt bei den Benutzern zu hinterlegen. ',1)]),_:2},1024)):b("",!0),n===s.displayGroupName?(u(),g(p,{key:2,subtype:"info"},{default:r(()=>[l(' Die Gruppe "'+k(n)+'" kann nicht bearbeitet werden, da sie von openWB für integrierte Displays verwendet wird. Es wird empfohlen, diese Gruppe allen Displays zuzuweisen und weitere Rollen durch separate Gruppen oder direkt bei den Display-Benutzern zu hinterlegen. ',1)]),_:2},1024)):b("",!0),d("form",{name:`groupForm-${n}`},[i(m,{modelValue:s.groupDetails[n].groupname,"onUpdate:modelValue":o=>s.groupDetails[n].groupname=o,title:"Gruppenname",subtype:"text",disabled:""},null,8,["modelValue","onUpdate:modelValue"]),i(m,{modelValue:s.groupDetails[n].textname,"onUpdate:modelValue":o=>s.groupDetails[n].textname=o,title:"Beschreibung",subtype:"text",disabled:[s.anonymousGroupName,s.userGroupName,s.displayGroupName].includes(n)},null,8,["modelValue","onUpdate:modelValue","disabled"]),i(V,{title:"Zugewiesene Benutzer","valid-elements":s.clients,"model-value":s.groupDetails[n].clients.map(o=>o.username),"onUpdate:modelValue":o=>{s.groupDetails[n].clients=o.map(C=>({username:C}))}},{"input-prefix":r(()=>[i(y,{icon:["fas","circle-user"]})]),"element-prefix":r(()=>[i(y,{icon:["fas","circle-user"]})]),_:1},8,["valid-elements","model-value","onUpdate:modelValue"]),i(V,{title:"Zugewiesene Rollen","valid-elements":a.rolesList.map(o=>({value:o.name,label:o.friendlyName})),disabled:[s.anonymousGroupName,s.userGroupName,s.displayGroupName].includes(n),readonly:[s.anonymousGroupName,s.userGroupName,s.displayGroupName].includes(n),"model-value":s.groupDetails[n].roles.map(o=>o.rolename),"onUpdate:modelValue":o=>{s.groupDetails[n].roles=o.map(C=>({rolename:C}))}},{"input-prefix":r(()=>[i(y,{icon:["fas","file-shield"]})]),"element-prefix":r(()=>[i(y,{icon:["fas","file-shield"]})]),_:1},8,["valid-elements","disabled","readonly","model-value","onUpdate:modelValue"]),i(S,{modelValue:s.groupDetails[n].textdescription,"onUpdate:modelValue":o=>s.groupDetails[n].textdescription=o,title:"Zusatzinformationen",subtype:"text",disabled:[s.anonymousGroupName,s.userGroupName,s.displayGroupName].includes(n)},{help:r(()=>[...e[48]||(e[48]=[l(" Hier können zusätzliche Informationen zur Gruppe hinterlegt werden. ",-1)])]),_:1},8,["modelValue","onUpdate:modelValue","disabled"])],8,le)])):(u(),f("div",oe,"Lade Gruppendetails..."))]),_:2},1032,["onExpanded"]))),128))]))]),_:1}),i(B,{collapsible:!0,collapsed:!0},{header:r(()=>[i(D,{icon:["fas","file-shield"]}),e[49]||(e[49]=l(" Rollen ",-1))]),default:r(()=>[t.roles.length===0?(u(),g(p,{key:0,subtype:"info"},{default:r(()=>[...e[50]||(e[50]=[l(" Es sind noch keine Rollen angelegt oder Du hast nicht die benötigten Rechte, Daten anzuzeigen. ",-1)])]),_:1})):(u(),f("div",ae,[i(p,{subtype:"info"},{default:r(()=>[...e[51]||(e[51]=[l(" Rollen definieren die Zugriffsrechte (Access Control Lists, ACLs) für Benutzer und Gruppen. Jeder Benutzer oder jede Gruppe kann mehrere Rollen zugewiesen bekommen, wodurch sich die effektiven Zugriffsrechte zusammensetzen.",-1),d("br",null,null,-1),l(" openWB erstellt automatisch relevante Rollen während der Installation und bei der Aktivierung bestimmter Funktionen oder Bearbeitung von Ladepunkten, Geräten und Komponenten etc. Rollen können hier nicht bearbeitet oder gelöscht werden. ",-1)])]),_:1}),i(m,{"model-value":s.rolesVersion,title:"Versionsnummer der Rollendefinitionen",disabled:""},{help:r(()=>[...e[52]||(e[52]=[l(" Hier wird die aktuell verwendete Rollen-Version der openWB Benutzerverwaltung angezeigt. Diese Version gibt an, welche vordefinierten Rollen und Zugriffsrechte (ACLs) von openWB generiert werden. Bei einem Update von openWB kann sich die Rollen-Version ändern, wodurch neue Rollen hinzugefügt oder bestehende Rollen angepasst werden können. ",-1)])]),_:1},8,["model-value"]),i(S,{title:"Standard-Zugriffsrechte","model-value":a.readableAcls(s.defaultAclAccess),disabled:""},{help:r(()=>[...e[53]||(e[53]=[l(" Hier werden die Standard Zugriffsrechte (Access Control Lists, ACLs) angezeigt. Diese werden verwendet, wenn keine spezifischen ACLs für einen Benutzer oder eine Gruppe definiert sind oder die Topics nicht explizit abgedeckt werden. ",-1)])]),_:1},8,["model-value"]),e[55]||(e[55]=d("hr",null,null,-1)),(u(!0),f(U,null,W(a.rolesList,n=>(u(),g(B,{key:n.name,collapsible:!0,collapsed:!0,onExpanded:o=>a.getRole(n.name)},{header:r(()=>[i(D,{icon:["fas","file-shield"]}),l(" "+k(n.friendlyName),1)]),default:r(()=>[s.roleDetails[n.name]?(u(),f("div",ue,[d("form",{name:`roleForm-${n.name}`},[i(m,{modelValue:s.roleDetails[n.name].rolename,"onUpdate:modelValue":o=>s.roleDetails[n.name].rolename=o,title:"Rollenname",subtype:"text",disabled:""},null,8,["modelValue","onUpdate:modelValue"]),i(m,{modelValue:s.roleDetails[n.name].textname,"onUpdate:modelValue":o=>s.roleDetails[n.name].textname=o,title:"Beschreibung",subtype:"text",disabled:""},null,8,["modelValue","onUpdate:modelValue"]),s.roleDetails[n.name].textdescription?(u(),g(p,{key:0,subtype:"info"},{default:r(()=>[l(k(s.roleDetails[n.name].textdescription),1)]),_:2},1024)):b("",!0),i(S,{title:"Zugriffsrechte (ACLs)","model-value":a.readableAcls(s.roleDetails[n.name].acls),disabled:""},{help:r(()=>[...e[54]||(e[54]=[l(" Hier werden die Zugriffsrechte (Access Control Lists, ACLs) für diese Rolle angezeigt. ",-1)])]),_:1},8,["model-value"])],8,de)])):(u(),f("div",me,"Lade Rollendetails..."))]),_:2},1032,["onExpanded"]))),128))]))]),_:1})])):(u(),f("div",pe,[i(p,{subtype:"info"},{default:r(()=>[e[57]||(e[57]=l(" Die Benutzerverwaltung ist deaktiviert. In diesem Modus hat jeder uneingeschränkten Zugriff auf openWB.",-1)),e[58]||(e[58]=d("br",null,null,-1)),e[59]||(e[59]=l(" Um Benutzer, Gruppen und Rollen zu verwalten, muss die Benutzerverwaltung zuerst aktiviert werden. Dazu ist nach der Aktivierung zwingend ein ",-1)),i(G,{to:"/System/SystemConfiguration"},{default:r(()=>[...e[56]||(e[56]=[l("Neustart dieser openWB",-1)])]),_:1}),e[60]||(e[60]=l(" erforderlich, damit die Änderungen wirksam werden. ",-1))]),_:1})]))]))])}const ye=O(F,[["render",ge],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/SecurityConfiguration.vue"]]);export{ye as default}; diff --git a/web/settings/assets/Status-ZxRyfX38.js b/web/settings/assets/Status-DadyXc3Z.js similarity index 99% rename from web/settings/assets/Status-ZxRyfX38.js rename to web/settings/assets/Status-DadyXc3Z.js index 99011e21c5..85e6326f29 100644 --- a/web/settings/assets/Status-ZxRyfX38.js +++ b/web/settings/assets/Status-DadyXc3Z.js @@ -1,3 +1,3 @@ -import{C as B}from"./index-Bv2WLdLZ.js";import{F as $,l as q,V as H,W as Z,c as K,f as F,X as O,Y as I,Z as J,M as U,_ as Q,$ as X,a0 as Y,a1 as tt,a2 as et,a3 as L,a4 as M,a5 as st,n as ot,o as rt,p as at,q as it,a6 as nt,a7 as ct}from"./vendor-fortawesome-DplTMxoa.js";import{_ as C,m as c,l as i,z as g,D as j,u as a,y as t,f as m,q as l,B as _,x as f,J as r,j as N,k as lt,O as S,L as W,K as x}from"./vendor-BwGffBs-.js";import{L as dt,C as pt,p as ut,a as mt,b as gt,c as ht,P as bt,d as ft,T as _t,i as vt,e as yt}from"./vendor-chartjs-C4FabExn.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./vendor-luxon-BDx6lZXm.js";q.add(H,Z,K,F);const wt={name:"StatusCard",components:{FontAwesomeIcon:$},props:{subtype:{type:String,required:!0},state:{type:Number,required:!1,default:0},stateMessage:{type:String,required:!1,default:void 0},componentId:{type:Number,required:!1,default:void 0}},computed:{stateClass(){switch(this.state){case 0:return"success";case 1:return"warning";case 2:return"danger";default:return"dark"}},stateIcon(){switch(this.state){case 0:return["fas","check-circle"];case 1:return["fas","exclamation-triangle"];case 2:return["fas","times-circle"];default:return["fas","question-circle"]}},stateLabel(){switch(this.state){case 0:return"OK";case 1:return"Warnung";case 2:return"Fehler";default:return"Unbekannt"}},hasMessageLineBreaks(){return this.stateMessage.includes(` +import{C as B}from"./index-CE-5DBwq.js";import{F as $,l as q,V as H,W as Z,c as K,f as F,X as O,Y as I,Z as J,M as U,_ as Q,$ as X,a0 as Y,a1 as tt,a2 as et,a3 as L,a4 as M,a5 as st,n as ot,o as rt,p as at,q as it,a6 as nt,a7 as ct}from"./vendor-fortawesome-DplTMxoa.js";import{_ as C,m as c,l as i,z as g,D as j,u as a,y as t,f as m,q as l,B as _,x as f,J as r,j as N,k as lt,O as S,L as W,K as x}from"./vendor-BwGffBs-.js";import{L as dt,C as pt,p as ut,a as mt,b as gt,c as ht,P as bt,d as ft,T as _t,i as vt,e as yt}from"./vendor-chartjs-C4FabExn.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./vendor-luxon-BDx6lZXm.js";q.add(H,Z,K,F);const wt={name:"StatusCard",components:{FontAwesomeIcon:$},props:{subtype:{type:String,required:!0},state:{type:Number,required:!1,default:0},stateMessage:{type:String,required:!1,default:void 0},componentId:{type:Number,required:!1,default:void 0}},computed:{stateClass(){switch(this.state){case 0:return"success";case 1:return"warning";case 2:return"danger";default:return"dark"}},stateIcon(){switch(this.state){case 0:return["fas","check-circle"];case 1:return["fas","exclamation-triangle"];case 2:return["fas","times-circle"];default:return["fas","question-circle"]}},stateLabel(){switch(this.state){case 0:return"OK";case 1:return"Warnung";case 2:return"Fehler";default:return"Unbekannt"}},hasMessageLineBreaks(){return this.stateMessage.includes(` `)}}},Tt={class:"container"},xt={class:"row justify-content-end"},Wt={key:0,class:"col px-0"},kt={key:0},Ct={style:{"white-space":"pre-wrap"}},Bt={key:1,class:"col col-auto pr-0"},$t={class:"text-right"};function qt(e,o,n,w,v,s){const u=c("font-awesome-icon"),p=c("openwb-base-avatar"),d=c("openwb-base-alert"),h=c("openwb-base-card");return i(),g(h,{subtype:n.subtype,collapsible:!0,collapsed:!0},j({header:a(()=>[N(e.$slots,"header-left")]),actions:a(()=>[N(e.$slots,"header-right"),l(p,{class:lt(["ml-2",`bg-${s.stateClass}`]),title:s.stateLabel},{default:a(()=>[l(u,{icon:s.stateIcon},null,8,["icon"])]),_:1},8,["class","title"])]),default:a(()=>[N(e.$slots,"default")]),_:2},[n.componentId!==void 0||n.stateMessage?{name:"footer",fn:a(()=>[t("div",Tt,[t("div",xt,[n.stateMessage?(i(),m("div",Wt,[l(d,{subtype:s.stateClass},{default:a(()=>[l(u,{icon:s.stateIcon},null,8,["icon"]),o[0]||(o[0]=_(" Modulmeldung: ",-1)),s.hasMessageLineBreaks?(i(),m("br",kt)):f("",!0),t("span",Ct,r(n.stateMessage),1)]),_:1},8,["subtype"])])):f("",!0),n.componentId!==void 0?(i(),m("div",Bt,[t("div",$t,"ID: "+r(n.componentId),1)])):f("",!0)])])]),key:"0"}:void 0]),1032,["subtype"])}const P=C(wt,[["render",qt],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/status/StatusCard.vue"]]);q.add(O);const Pt={name:"ChargePointSumCard",components:{StatusCard:P,FontAwesomeIcon:$},mixins:[B],data(){return{mqttTopics:[{topic:"openWB/chargepoint/get/daily_exported",writeable:!1},{topic:"openWB/chargepoint/get/daily_imported",writeable:!1},{topic:"openWB/chargepoint/get/exported",writeable:!1},{topic:"openWB/chargepoint/get/imported",writeable:!1},{topic:"openWB/chargepoint/get/power",writeable:!1}]}},computed:{baseTopic:{get(){return"openWB/chargepoint"}}}},St={class:"text-right"},Nt={class:"row"},At={class:"col text-right text-monospace"},It={class:"row"},Ot={class:"col-4 text-right text-monospace"},Lt={class:"col-4 text-right text-monospace"},Mt={class:"row"},jt={class:"col-4 text-right text-monospace"},Et={class:"col-4 text-right text-monospace"};function Dt(e,o,n,w,v,s){const u=c("font-awesome-icon"),p=c("openwb-base-card"),d=c("status-card");return i(),g(d,{subtype:"primary"},{"header-left":a(()=>[l(u,{icon:["fas","charging-station"]}),o[0]||(o[0]=_(" Alle Ladepunkte ",-1))]),"header-right":a(()=>[t("span",St,r(e.formatNumberTopic(s.baseTopic+"/get/power",3,3,.001))+" kW ",1)]),default:a(()=>[l(p,{subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[o[1]||(o[1]=t("div",{class:"row py-2"},[t("div",{class:"col font-weight-bold"},"Ladevorgang"),t("div",{class:"col text-right"},"Leistung")],-1)),t("div",Nt,[t("div",At,r(e.formatNumberTopic(s.baseTopic+"/get/power",3,3,.001)),1)])]),_:1}),l(p,{subtype:"white","body-bg":"white",class:"py-1 mb-2",title:"Zählerstände"},{default:a(()=>[o[4]||(o[4]=t("div",{class:"row justify-content-end"},[t("div",{class:"col-4 text-right"},"Geladen"),t("div",{class:"col-4 text-right"},"Entladen")],-1)),t("div",It,[o[2]||(o[2]=t("div",{class:"col text-right"},"Heute",-1)),t("div",Ot,r(e.formatNumberTopic(s.baseTopic+"/get/daily_imported",3,3,.001)+" kWh"),1),t("div",Lt,r(e.formatNumberTopic(s.baseTopic+"/get/daily_exported",3,3,.001)+" kWh"),1)]),t("div",Mt,[o[3]||(o[3]=t("div",{class:"col text-right"},"Gesamt",-1)),t("div",jt,r(e.formatNumberTopic(s.baseTopic+"/get/imported",3,3,.001)+" kWh"),1),t("div",Et,r(e.formatNumberTopic(s.baseTopic+"/get/exported",3,3,.001)+" kWh"),1)])]),_:1})]),_:1})}const zt=C(Pt,[["render",Dt],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/status/ChargePointSumCard.vue"]]);q.add(O,I,J,U,Q,X,Y,tt);const Gt={name:"ChargePointCard",components:{StatusCard:P,FontAwesomeIcon:$},mixins:[B],props:{chargePointId:{type:Number,required:!0}},data(){return{mqttTopics:[{topic:`openWB/chargepoint/${this.chargePointId}/config`,writeable:!1},{topic:`openWB/chargepoint/${this.chargePointId}/get/+`,writeable:!1},{topic:`openWB/chargepoint/${this.chargePointId}/set/+`,writeable:!1},{topic:`openWB/internal_chargepoint/${this.chargePointId}/data/phases_to_use`,writeable:!1}]}},computed:{baseTopic:{get(){return"openWB/chargepoint/"+this.chargePointId}},chargePointConfig:{get(){return this.$store.state.mqtt[`${this.baseTopic}/config`]}},chargingStatus:{get(){let e=this.$store.state.mqtt[this.baseTopic+"/get/plug_state"],o=this.$store.state.mqtt[this.baseTopic+"/get/charge_state"];return e==1&&o==1?{icon:["fas","plug-circle-bolt"],text:"Fahrzeug angesteckt, Ladevorgang aktiv"}:e==1?{icon:["fas","plug-circle-check"],text:"Fahrzeug angesteckt, kein Ladevorgang aktiv"}:{icon:["fas","plug-circle-minus"],text:"Kein Fahrzeug angesteckt"}}}}},Rt={class:"row py-2"},Vt={class:"col text-right"},Ht={style:{"white-space":"pre-wrap"}},Zt={class:"row"},Kt={class:"col text-right text-monospace"},Ft={class:"col text-right text-monospace"},Jt={class:"row"},Ut={key:0,class:"col text-right text-monospace"},Qt={key:1,class:"col text-right text-monospace"},Xt={class:"col text-right text-monospace"},Yt={class:"row"},te={class:"col-4 text-right text-monospace"},ee={class:"col-4 text-right text-monospace"},se={class:"row"},oe={class:"col-4 text-right text-monospace"},re={class:"col-4 text-right text-monospace"},ae={class:"row"},ie={class:"col text-right text-monospace"},ne={class:"col text-right text-monospace"},ce={class:"col text-right text-monospace"},le={class:"row"},de={class:"col text-right text-monospace"},pe={class:"col text-right text-monospace"},ue={class:"col text-right text-monospace"},me={class:"row"},ge={class:"col text-right text-monospace"},he={class:"col text-right text-monospace"},be={class:"col text-right text-monospace"},fe={class:"row"},_e={class:"col text-right text-monospace"},ve={class:"col text-right text-monospace"},ye={class:"col text-right text-monospace"},we={class:"row"},Te={class:"col text-center text-monospace"};function xe(e,o,n,w,v,s){const u=c("font-awesome-icon"),p=c("openwb-base-alert"),d=c("openwb-base-card"),h=c("status-card");return s.chargePointConfig?(i(),g(h,{key:0,subtype:"primary","component-id":n.chargePointId,state:e.$store.state.mqtt[s.baseTopic+"/get/fault_state"],"state-message":e.$store.state.mqtt[s.baseTopic+"/get/fault_str"]},{"header-left":a(()=>[l(u,{icon:["fas","charging-station"],class:"fa-border",style:S({backgroundColor:e.$store.state.mqtt[s.baseTopic+"/config"].color,color:e.getContrastColor(e.$store.state.mqtt[s.baseTopic+"/config"].color),"--fa-border-color":e.getContrastColor(e.$store.state.mqtt[s.baseTopic+"/config"].color)})},null,8,["style"]),_(" "+r(s.chargePointConfig.name),1)]),"header-right":a(()=>[_(r(e.formatNumberTopic(s.baseTopic+"/get/power",3,3,.001))+" kW",1)]),default:a(()=>[l(d,{subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[t("div",Rt,[o[0]||(o[0]=t("div",{class:"col col-auto font-weight-bold"},"Status",-1)),t("div",Vt,[l(u,{icon:s.chargingStatus.icon,title:s.chargingStatus.text},null,8,["icon","title"]),_(" "+r(s.chargingStatus.text),1)])]),l(p,{subtype:"info"},{default:a(()=>[o[1]||(o[1]=_(" Statusmeldung: ",-1)),t("span",Ht,r(e.$store.state.mqtt[s.baseTopic+"/get/state_str"]),1)]),_:1}),t("div",null," max. Ladeleistung: "+r((e.max_power=e.formatNumberTopic(s.baseTopic+"/get/max_evse_current",0))=="-"?e.max_power:(()=>{const b=Math.floor(e.max_power*3*230/1e3);return b===13?"20A 1-phasig, 16A 3-phasig":b+" kW"})()),1)]),_:1}),l(d,{subtype:"white","body-bg":"white",class:"py-1 mb-2",title:"Ladevorgang"},{default:a(()=>[o[2]||(o[2]=t("div",{class:"row"},[t("div",{class:"col text-right"},"Ladestrom Vorgabe"),t("div",{class:"col text-right"},"Leistung")],-1)),t("div",Zt,[t("div",Kt,r(e.formatNumberTopic(s.baseTopic+"/set/current",2))+" A",1),t("div",Ft,r(e.formatNumberTopic(s.baseTopic+"/get/power",3,3,.001))+" kW ",1)]),o[3]||(o[3]=t("div",{class:"row"},[t("div",{class:"col text-right"},"Phasen Vorgabe"),t("div",{class:"col text-right"},"Phasen Aktuell")],-1)),t("div",Jt,[e.$store.state.mqtt["openWB/general/extern"]===!0?(i(),m("div",Ut,r(e.formatNumberTopic("openWB/internal_chargepoint/"+n.chargePointId+"/data/phases_to_use")),1)):(i(),m("div",Qt,r(e.formatNumberTopic(s.baseTopic+"/set/phases_to_use")),1)),t("div",Xt,r(e.formatNumberTopic(s.baseTopic+"/get/phases_in_use")),1)])]),_:1}),l(d,{subtype:"white","body-bg":"white",class:"py-1 mb-2",title:"Zählerstände"},{default:a(()=>[o[6]||(o[6]=t("div",{class:"row justify-content-end"},[t("div",{class:"col-4 text-right"},"Geladen"),t("div",{class:"col-4 text-right"},"Entladen")],-1)),t("div",Yt,[o[4]||(o[4]=t("div",{class:"col text-right"},"Heute",-1)),t("div",te,r(e.formatNumberTopic(s.baseTopic+"/get/daily_imported",3,3,.001))+" kWh ",1),t("div",ee,r(e.formatNumberTopic(s.baseTopic+"/get/daily_exported",3,3,.001))+" kWh ",1)]),t("div",se,[o[5]||(o[5]=t("div",{class:"col text-right"},"Gesamt",-1)),t("div",oe,r(e.formatNumberTopic(s.baseTopic+"/get/imported",3,3,.001))+" kWh ",1),t("div",re,r(e.formatNumberTopic(s.baseTopic+"/get/exported",3,3,.001))+" kWh ",1)])]),_:1}),l(d,{subtype:"white","body-bg":"white",class:"py-1 mb-2",title:"Werte pro Phase"},{default:a(()=>[t("div",ae,[o[7]||(o[7]=t("div",{class:"col-md-4 pr-1 text-center text-md-right"},"Spannung [V]",-1)),t("div",ie,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/voltages",1)[0]),1),t("div",ne,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/voltages",1)[1]),1),t("div",ce,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/voltages",1)[2]),1)]),t("div",le,[o[8]||(o[8]=t("div",{class:"col-md-4 pr-1 text-center text-md-right"},"Strom [A]",-1)),t("div",de,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/currents",2)[0]),1),t("div",pe,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/currents",2)[1]),1),t("div",ue,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/currents",2)[2]),1)]),t("div",me,[o[9]||(o[9]=t("div",{class:"col-md-4 pr-1 text-center text-md-right"},"Wirkleistung [kW]",-1)),t("div",ge,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/powers",3,3,.001)[0]),1),t("div",he,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/powers",3,3,.001)[1]),1),t("div",be,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/powers",3,3,.001)[2]),1)]),t("div",fe,[o[10]||(o[10]=t("div",{class:"col-md-4 pr-1 text-center text-md-right"},"Leistungsfaktor",-1)),t("div",_e,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/power_factors",2)[0]),1),t("div",ve,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/power_factors",2)[1]),1),t("div",ye,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/power_factors",2)[2]),1)]),t("div",we,[o[11]||(o[11]=t("div",{class:"col-md-4 pr-1 text-center text-md-right"},"Netzfrequenz",-1)),t("div",Te,r(e.formatNumberTopic(s.baseTopic+"/get/frequency",3))+" Hz ",1)])]),_:1})]),_:1},8,["component-id","state","state-message"])):f("",!0)}const We=C(Gt,[["render",xe],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/status/ChargePointCard.vue"]]);q.add(et);const ke={name:"CounterCard",components:{StatusCard:P,FontAwesomeIcon:$},mixins:[B],props:{counter:{type:Object,required:!0}},data(){return{mqttTopics:[{topic:`openWB/counter/${this.counter.id}/get/+`,writeable:!1}]}},computed:{baseTopic:{get(){return"openWB/counter/"+this.counter.id}}}},Ce={class:"row"},Be={class:"col text-right text-monospace pl-0"},$e={class:"col text-right text-monospace pl-0"},qe={class:"row"},Pe={class:"col text-right text-monospace pl-0"},Se={class:"col text-right text-monospace pl-0"},Ne={class:"row"},Ae={class:"col"},Ie={class:"row"},Oe={class:"col text-right text-monospace pl-0"},Le={class:"col text-right text-monospace pl-0"},Me={class:"col text-right text-monospace pl-0"},je={class:"row"},Ee={class:"col"},De={class:"row"},ze={class:"col text-right text-monospace pl-0"},Ge={class:"col text-right text-monospace pl-0"},Re={class:"col text-right text-monospace pl-0"},Ve={class:"row"},He={class:"col"},Ze={class:"row"},Ke={class:"col text-right text-monospace pl-0"},Fe={class:"col text-right text-monospace pl-0"},Je={class:"col text-right text-monospace pl-0"},Ue={class:"row"},Qe={class:"col"},Xe={class:"row"},Ye={class:"col text-right text-monospace pl-0"},ts={class:"col text-right text-monospace pl-0"},es={class:"col text-right text-monospace pl-0"};function ss(e,o,n,w,v,s){const u=c("font-awesome-icon"),p=c("openwb-base-card"),d=c("status-card");return i(),g(d,{subtype:"danger","component-id":n.counter.id,state:e.$store.state.mqtt[s.baseTopic+"/get/fault_state"],"state-message":e.$store.state.mqtt[s.baseTopic+"/get/fault_str"]},{"header-left":a(()=>[l(u,{icon:["fas","gauge-high"],class:"fa-border",style:S({backgroundColor:n.counter.color,color:e.getContrastColor(n.counter.color),"--fa-border-color":e.getContrastColor(n.counter.color)})},null,8,["style"]),_(" "+r(n.counter.name),1)]),"header-right":a(()=>[_(r(e.formatNumberTopic(s.baseTopic+"/get/power",3,3,.001))+" kW",1)]),default:a(()=>[l(p,{title:"Aktuelle Werte",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[o[0]||(o[0]=t("div",{class:"row"},[t("div",{class:"col-6 text-right"},"Leistung"),t("div",{class:"col-6 text-right"},"Netzfrequenz")],-1)),t("div",Ce,[t("div",Be,r(e.formatNumberTopic(s.baseTopic+"/get/power",3,3,.001)+" kW"),1),t("div",$e,r(e.formatNumberTopic(s.baseTopic+"/get/frequency",3)+" Hz"),1)])]),_:1}),l(p,{title:"Zählerstände",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[o[1]||(o[1]=t("div",{class:"row"},[t("div",{class:"col-6 text-right"},"Export"),t("div",{class:"col-6 text-right"},"Import")],-1)),t("div",qe,[t("div",Pe,r(e.formatNumberTopic(s.baseTopic+"/get/exported",3,3,.001)+" kWh"),1),t("div",Se,r(e.formatNumberTopic(s.baseTopic+"/get/imported",3,3,.001)+" kWh"),1)])]),_:1}),l(p,{title:"Werte pro Phase",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[t("div",Ne,[o[2]||(o[2]=t("div",{class:"col-md-4 pr-0 text-center text-md-right"},"Spannung [V]",-1)),t("div",Ae,[t("div",Ie,[t("div",Oe,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/voltages",1)[0]),1),t("div",Le,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/voltages",1)[1]),1),t("div",Me,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/voltages",1)[2]),1)])])]),t("div",je,[o[3]||(o[3]=t("div",{class:"col-md-4 pr-0 text-center text-md-right"},"Strom [A]",-1)),t("div",Ee,[t("div",De,[t("div",ze,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/currents",2)[0]),1),t("div",Ge,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/currents",2)[1]),1),t("div",Re,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/currents",2)[2]),1)])])]),t("div",Ve,[o[4]||(o[4]=t("div",{class:"col-md-4 pr-0 text-center text-md-right"},"Wirkleistung [kW]",-1)),t("div",He,[t("div",Ze,[t("div",Ke,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/powers",3,3,.001)[0]),1),t("div",Fe,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/powers",3,3,.001)[1]),1),t("div",Je,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/powers",3,3,.001)[2]),1)])])]),t("div",Ue,[o[5]||(o[5]=t("div",{class:"col-md-4 pr-0 text-center text-md-right"},"Leistungsfaktor",-1)),t("div",Qe,[t("div",Xe,[t("div",Ye,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/power_factors",2)[0]),1),t("div",ts,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/power_factors",2)[1]),1),t("div",es,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/power_factors",2)[2]),1)])])])]),_:1})]),_:1},8,["component-id","state","state-message"])}const os=C(ke,[["render",ss],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/status/CounterCard.vue"]]);q.add(L);const rs={name:"InverterSumCard",components:{StatusCard:P,FontAwesomeIcon:$},mixins:[B],data(){return{mqttTopics:[{topic:"openWB/pv/get/+",writeable:!1}]}},computed:{baseTopic:{get(){return"openWB/pv"}}}},as={class:"row"},is={class:"col text-right text-monospace"},ns={class:"col text-right text-monospace"},cs={class:"row"},ls={class:"col text-right text-monospace"},ds={class:"col text-right text-monospace"},ps={class:"col text-right text-monospace"};function us(e,o,n,w,v,s){const u=c("font-awesome-icon"),p=c("openwb-base-card"),d=c("status-card");return i(),g(d,{subtype:"success",state:e.$store.state.mqtt[s.baseTopic+"/get/fault_state"],"state-message":e.$store.state.mqtt[s.baseTopic+"/get/fault_str"]},{"header-left":a(()=>[l(u,{icon:["fas","solar-panel"]}),o[0]||(o[0]=_(" Alle Wechselrichter ",-1))]),"header-right":a(()=>[_(r(e.formatNumberTopic(s.baseTopic+"/get/power",3,3,.001))+" kW",1)]),default:a(()=>[l(p,{title:"Aktuelle Werte",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[o[1]||(o[1]=t("div",{class:"row"},[t("div",{class:"col text-right"},"Leistung"),t("div",{class:"col text-right"},"Zählerstand")],-1)),t("div",as,[t("div",is,r(e.formatNumberTopic(s.baseTopic+"/get/power",3,3,.001))+" kW ",1),t("div",ns,r(e.formatNumberTopic(s.baseTopic+"/get/exported",3,3,.001))+" kWh ",1)])]),_:1}),l(p,{title:"Erträge",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[o[2]||(o[2]=t("div",{class:"row"},[t("div",{class:"col text-right"},"Heute"),t("div",{class:"col text-right"},"Monat"),t("div",{class:"col text-right"},"Jahr")],-1)),t("div",cs,[t("div",ls,r(e.formatNumberTopic(s.baseTopic+"/get/daily_exported",3,3,.001))+" kWh ",1),t("div",ds,r(e.formatNumberTopic(s.baseTopic+"/get/monthly_exported",1,1,.001))+" kWh ",1),t("div",ps,r(e.formatNumberTopic(s.baseTopic+"/get/yearly_exported",0,0,.001))+" kWh ",1)])]),_:1})]),_:1},8,["state","state-message"])}const ms=C(rs,[["render",us],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/status/InverterSumCard.vue"]]);q.add(L);const gs={name:"InverterCard",components:{StatusCard:P,FontAwesomeIcon:$},mixins:[B],props:{inverter:{type:Object,required:!0}},data(){return{mqttTopics:[{topic:`openWB/pv/${this.inverter.id}/get/+`,writeable:!1}]}},computed:{baseTopic:{get(){return"openWB/pv/"+this.inverter.id}}}},hs={class:"row"},bs={class:"col text-right text-monospace"},fs={class:"col text-right text-monospace"},_s={class:"row"},vs={class:"col text-right text-monospace"},ys={class:"col text-right text-monospace"},ws={class:"col text-right text-monospace"},Ts={class:"row"},xs={class:"col"},Ws={class:"row"},ks={class:"col text-right text-monospace pl-0"},Cs={class:"col text-right text-monospace pl-0"},Bs={class:"col text-right text-monospace pl-0"};function $s(e,o,n,w,v,s){const u=c("font-awesome-icon"),p=c("openwb-base-card"),d=c("status-card");return i(),g(d,{subtype:"success","component-id":n.inverter.id,state:e.$store.state.mqtt[s.baseTopic+"/get/fault_state"],"state-message":e.$store.state.mqtt[s.baseTopic+"/get/fault_str"]},{"header-left":a(()=>[l(u,{icon:["fas","solar-panel"],class:"fa-border",style:S({backgroundColor:n.inverter.color,color:e.getContrastColor(n.inverter.color),"--fa-border-color":e.getContrastColor(n.inverter.color)})},null,8,["style"]),_(" "+r(n.inverter.name),1)]),"header-right":a(()=>[_(r(e.formatNumberTopic(s.baseTopic+"/get/power",3,3,.001))+" kW",1)]),default:a(()=>[l(p,{title:"Aktuelle Werte",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[o[0]||(o[0]=t("div",{class:"row"},[t("div",{class:"col text-right"},"Leistung"),t("div",{class:"col text-right"},"Zählerstand")],-1)),t("div",hs,[t("div",bs,r(e.formatNumberTopic(s.baseTopic+"/get/power",3,3,.001))+" kW ",1),t("div",fs,r(e.formatNumberTopic(s.baseTopic+"/get/exported",3,3,.001))+" kWh ",1)])]),_:1}),l(p,{title:"Erträge",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[o[1]||(o[1]=t("div",{class:"row"},[t("div",{class:"col text-right"},"Heute"),t("div",{class:"col text-right"},"Monat"),t("div",{class:"col text-right"},"Jahr")],-1)),t("div",_s,[t("div",vs,r(e.formatNumberTopic(s.baseTopic+"/get/daily_exported",3,3,.001))+" kWh ",1),t("div",ys,r(e.formatNumberTopic(s.baseTopic+"/get/monthly_exported",1,1,.001))+" kWh ",1),t("div",ws,r(e.formatNumberTopic(s.baseTopic+"/get/yearly_exported",0,0,.001))+" kWh ",1)])]),_:1}),l(p,{title:"Werte pro Phase",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[t("div",Ts,[o[2]||(o[2]=t("div",{class:"col-md-4 pr-0 text-center text-md-right"},"Strom [A]",-1)),t("div",xs,[t("div",Ws,[t("div",ks,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/currents",2)[0]),1),t("div",Cs,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/currents",2)[1]),1),t("div",Bs,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/currents",2)[2]),1)])])])]),_:1})]),_:1},8,["component-id","state","state-message"])}const qs=C(gs,[["render",$s],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/status/InverterCard.vue"]]);q.add(M);const Ps={name:"BatterySumCard",components:{StatusCard:P,FontAwesomeIcon:$},mixins:[B],data(){return{mqttTopics:[{topic:"openWB/bat/get/+",writeable:!1}]}},computed:{baseTopic:{get(){return"openWB/bat"}}}},Ss={class:"row"},Ns={class:"col text-right text-monospace pl-0"},As={class:"col text-right text-monospace pl-0"},Is={class:"row"},Os={class:"col text-right text-monospace"},Ls={class:"col text-right text-monospace"},Ms={class:"row"},js={class:"col text-right text-monospace"},Es={class:"col text-right text-monospace"};function Ds(e,o,n,w,v,s){const u=c("font-awesome-icon"),p=c("openwb-base-card"),d=c("status-card");return i(),g(d,{subtype:"warning",state:e.$store.state.mqtt[s.baseTopic+"/get/fault_state"],"state-message":e.$store.state.mqtt[s.baseTopic+"/get/fault_str"]},{"header-left":a(()=>[l(u,{icon:["fas","car-battery"]}),o[0]||(o[0]=_(" Alle Speicher ",-1))]),"header-right":a(()=>[_(r(e.formatNumberTopic(s.baseTopic+"/get/power",1,1,.001))+" kW / "+r(e.$store.state.mqtt[s.baseTopic+"/get/soc"])+" % ",1)]),default:a(()=>[l(p,{title:"Aktuelle Werte",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[o[1]||(o[1]=t("div",{class:"row"},[t("div",{class:"col-6 text-right"},"Leistung"),t("div",{class:"col-6 text-right"},"Ladestand")],-1)),t("div",Ss,[t("div",Ns,r(e.formatNumberTopic(s.baseTopic+"/get/power",3,3,.001))+" kW ",1),t("div",As,r(e.$store.state.mqtt[s.baseTopic+"/get/soc"])+" %",1)])]),_:1}),l(p,{title:"Zählerstände",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[o[4]||(o[4]=t("div",{class:"row"},[t("div",{class:"col"}),t("div",{class:"col text-right"},"Geladen"),t("div",{class:"col text-right"},"Entladen")],-1)),t("div",Is,[o[2]||(o[2]=t("div",{class:"col text-right"},"Heute",-1)),t("div",Os,r(e.formatNumberTopic(s.baseTopic+"/get/daily_imported",3,3,.001))+" kWh ",1),t("div",Ls,r(e.formatNumberTopic(s.baseTopic+"/get/daily_exported",3,3,.001))+" kWh ",1)]),t("div",Ms,[o[3]||(o[3]=t("div",{class:"col text-right"},"Gesamt",-1)),t("div",js,r(e.formatNumberTopic(s.baseTopic+"/get/imported",3,3,.001))+" kWh ",1),t("div",Es,r(e.formatNumberTopic(s.baseTopic+"/get/exported",3,3,.001))+" kWh ",1)])]),_:1})]),_:1},8,["state","state-message"])}const zs=C(Ps,[["render",Ds],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/status/BatterySumCard.vue"]]);q.add(M);const Gs={name:"BatteryCard",components:{StatusCard:P,FontAwesomeIcon:$},mixins:[B],props:{battery:{type:Object,required:!0}},data(){return{mqttTopics:[{topic:`openWB/bat/${this.battery.id}/get/+`,writeable:!1}]}},computed:{baseTopic:{get(){return"openWB/bat/"+this.battery.id}}}},Rs={class:"row"},Vs={class:"col text-right text-monospace pl-0"},Hs={class:"col text-right text-monospace pl-0"},Zs={class:"row"},Ks={class:"col text-right text-monospace"},Fs={class:"col text-right text-monospace"},Js={class:"row"},Us={class:"col text-right text-monospace"},Qs={class:"col text-right text-monospace"},Xs={class:"row"},Ys={class:"col"},to={class:"row"},eo={class:"col text-right text-monospace pl-0"},so={class:"col text-right text-monospace pl-0"},oo={class:"col text-right text-monospace pl-0"};function ro(e,o,n,w,v,s){const u=c("font-awesome-icon"),p=c("openwb-base-card"),d=c("status-card");return i(),g(d,{subtype:"warning","component-id":n.battery.id,state:e.$store.state.mqtt[s.baseTopic+"/get/fault_state"],"state-message":e.$store.state.mqtt[s.baseTopic+"/get/fault_str"]},{"header-left":a(()=>[l(u,{icon:["fas","car-battery"],class:"fa-border",style:S({backgroundColor:n.battery.color,color:e.getContrastColor(n.battery.color),"--fa-border-color":e.getContrastColor(n.battery.color)})},null,8,["style"]),_(" "+r(n.battery.name),1)]),"header-right":a(()=>[_(r(e.formatNumberTopic(s.baseTopic+"/get/power",1,1,.001))+" kW / "+r(e.$store.state.mqtt[s.baseTopic+"/get/soc"])+" % ",1)]),default:a(()=>[e.$store.state.mqtt[s.baseTopic+"/get/state_str"]?.length>0?(i(),g(p,{key:0,title:"Status der aktiven Speichersteuerung",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[_(r(e.$store.state.mqtt[s.baseTopic+"/get/state_str"]),1)]),_:1})):f("",!0),l(p,{title:"Aktuelle Werte",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[o[0]||(o[0]=t("div",{class:"row"},[t("div",{class:"col-6 text-right"},"Leistung"),t("div",{class:"col-6 text-right"},"Ladestand")],-1)),t("div",Rs,[t("div",Vs,r(e.formatNumberTopic(s.baseTopic+"/get/power",3,3,.001))+" kW ",1),t("div",Hs,r(e.$store.state.mqtt[s.baseTopic+"/get/soc"])+" %",1)])]),_:1}),l(p,{title:"Zählerstände",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[o[3]||(o[3]=t("div",{class:"row"},[t("div",{class:"col"}),t("div",{class:"col text-right"},"Geladen"),t("div",{class:"col text-right"},"Entladen")],-1)),t("div",Zs,[o[1]||(o[1]=t("div",{class:"col text-right"},"Heute",-1)),t("div",Ks,r(e.formatNumberTopic(s.baseTopic+"/get/daily_imported",3,3,.001))+" kWh ",1),t("div",Fs,r(e.formatNumberTopic(s.baseTopic+"/get/daily_exported",3,3,.001))+" kWh ",1)]),t("div",Js,[o[2]||(o[2]=t("div",{class:"col text-right"},"Gesamt",-1)),t("div",Us,r(e.formatNumberTopic(s.baseTopic+"/get/imported",3,3,.001))+" kWh ",1),t("div",Qs,r(e.formatNumberTopic(s.baseTopic+"/get/exported",3,3,.001))+" kWh ",1)])]),_:1}),l(p,{title:"Werte pro Phase",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[t("div",Xs,[o[4]||(o[4]=t("div",{class:"col-md-4 pr-0 text-center text-md-right"},"Strom [A]",-1)),t("div",Ys,[t("div",to,[t("div",eo,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/currents",2)[0]),1),t("div",so,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/currents",2)[1]),1),t("div",oo,r(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/currents",2)[2]),1)])])])]),_:1})]),_:1},8,["component-id","state","state-message"])}const ao=C(Gs,[["render",ro],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/status/BatteryCard.vue"]]);q.add(st,ot,rt,at,it);const io={name:"IoDeviceCard",components:{StatusCard:P,FontAwesomeIcon:$},mixins:[B],props:{ioDevice:{type:Object,required:!0}},data(){return{mqttTopics:[{topic:"openWB/io/action/+/config",writeable:!1},{topic:"openWB/io/action/+/timestamp",writeable:!1},{topic:`openWB/io/states/${this.ioDevice.id}/get/+`,writeable:!1}],state:{true:{icon:["fas","square"],title:"Geschlossen",actionTitle:"Aktiv"},false:{icon:["far","square"],title:"Offen",actionTitle:"Inaktiv"}}}},computed:{baseTopic(){return`openWB/io/states/${this.ioDevice.id}`},hasDigitalInputs(){return Object.keys(this.$store.state.mqtt[`${this.baseTopic}/get/digital_input`]||{}).length>0},hasDigitalOutputs(){return Object.keys(this.$store.state.mqtt[`${this.baseTopic}/get/digital_output`]||{}).length>0},hasAnalogInputs(){return Object.keys(this.$store.state.mqtt[`${this.baseTopic}/get/analog_input`]||{}).length>0},hasAnalogOutputs(){return Object.keys(this.$store.state.mqtt[`${this.baseTopic}/get/analog_output`]||{}).length>0},digitalInputStates(){return this.$store.state.mqtt[`${this.baseTopic}/get/digital_input`]},digitalOutputStates(){return this.$store.state.mqtt[`${this.baseTopic}/get/digital_output`]},analogInputStates(){return this.$store.state.mqtt[`${this.baseTopic}/get/analog_input`]},analogOutputStates(){return this.$store.state.mqtt[`${this.baseTopic}/get/analog_output`]},ioActionConfigs(){return Object.fromEntries(Object.entries(this.getWildcardTopics("openWB/io/action/+/config")).filter(([,e])=>e.configuration.io_device===this.ioDevice.id))},ioActionState(){return e=>{const o=this.$store.state.mqtt[`openWB/io/action/${e}/timestamp`];return o&&new Date(o*1e3).toLocaleString()}}},methods:{getIcon(e){return this.state[e].icon},getTitle(e){return this.state[e].title},getActionTitle(e){return this.state[e].actionTitle}}},no={class:"col-auto"},co={class:"col text-right"},lo={class:"row"},po={class:"row"},uo={class:"row"},mo={class:"row"};function go(e,o,n,w,v,s){const u=c("font-awesome-icon"),p=c("openwb-base-alert"),d=c("openwb-base-tooltip"),h=c("openwb-base-card"),b=c("status-card");return i(),g(b,{subtype:"secondary",state:e.$store.state.mqtt[`${s.baseTopic}/get/fault_state`],"state-message":e.$store.state.mqtt[`${s.baseTopic}/get/fault_str`],"component-id":n.ioDevice.id},{"header-left":a(()=>[l(u,{icon:["fas","tower-broadcast"]}),_(" "+r(n.ioDevice.name),1)]),default:a(()=>[l(h,{title:"Zugehörige Aktionen",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[Object.keys(s.ioActionConfigs).length===0?(i(),g(p,{key:0,subtype:"info",class:"mb-2"},{default:a(()=>[...o[0]||(o[0]=[_(" Es wurden noch keine Aktionen erstellt, welche dieses IO-Gerät als Signalquelle verwenden. ",-1)])]),_:1})):(i(!0),m(x,{key:1},W(s.ioActionConfigs,(y,k)=>(i(),m("div",{key:k,class:"row"},[t("div",no,[l(d,{description:s.getActionTitle(![void 0,null].includes(s.ioActionState(y.id)))},{default:a(()=>[l(u,{icon:s.getIcon(![void 0,null].includes(s.ioActionState(y.id))),class:"fa-fw"},null,8,["icon"])]),_:2},1032,["description"]),_(" "+r(y.name),1)]),t("div",co,r(s.ioActionState(y.id)),1)]))),128))]),_:1}),s.hasDigitalInputs?(i(),g(h,{key:0,title:"Digitale Eingänge",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[t("div",lo,[(i(!0),m(x,null,W(s.digitalInputStates,(y,k)=>(i(),m("div",{key:k,class:"col io-state"},[_(r(k)+": ",1),l(d,{description:s.getTitle(y)},{default:a(()=>[l(u,{icon:s.getIcon(y),class:"fa-fw"},null,8,["icon"])]),_:2},1032,["description"])]))),128))])]),_:1})):f("",!0),s.hasDigitalOutputs?(i(),g(h,{key:1,title:"Digitale Ausgänge",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[t("div",po,[(i(!0),m(x,null,W(s.digitalOutputStates,(y,k)=>(i(),m("div",{key:k,class:"col io-state"},[_(r(k)+": ",1),l(d,{description:s.getTitle(y)},{default:a(()=>[l(u,{icon:s.getIcon(y),class:"fa-fw"},null,8,["icon"])]),_:2},1032,["description"])]))),128))])]),_:1})):f("",!0),s.hasAnalogInputs?(i(),g(h,{key:2,title:"Analoge Eingänge",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[t("div",uo,[(i(!0),m(x,null,W(s.analogInputStates,(y,k)=>(i(),m("div",{key:k,class:"col io-state"},r(k)+": "+r(y),1))),128))])]),_:1})):f("",!0),s.hasAnalogOutputs?(i(),g(h,{key:3,title:"Analoge Ausgänge",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[t("div",mo,[(i(!0),m(x,null,W(s.analogOutputStates,(y,k)=>(i(),m("div",{key:k,class:"col io-state"},r(k)+": "+r(y),1))),128))])]),_:1})):f("",!0)]),_:1},8,["state","state-message","component-id"])}const ho=C(io,[["render",go],["__scopeId","data-v-356761d0"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/status/IoDeviceCard.vue"]]),A="openWB/counter/get/loadmanagement_prios",bo={name:"LoadManagementPriority",computed:{loadManagementPriorityList(){const e=this.$store.state.mqtt[A];return Array.isArray(e)?e:[]}},mounted(){this.$root.doSubscribe([A])},unmounted(){this.$root.doUnsubscribe([A])},methods:{matchesPriorityEntry(e,o,n){return e.type===o&&String(e.id)===String(n)},loadManagementPriority(e,o){const n=this.loadManagementPriorityList;for(let w=0;wthis.matchesPriorityEntry(s,e,o)))return w+1}else if(this.matchesPriorityEntry(v,e,o))return w+1}return null},loadManagementPriorityShared(e,o){const n=this.loadManagementPriorityList;for(const w of n)if(w.type==="group"){const v=w.children??[];if(v.some(s=>this.matchesPriorityEntry(s,e,o)))return v.length>1}return!1}}},E=C(bo,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/mixins/LoadManagementPriority.vue"]]);q.add(nt);const fo={name:"VehicleCard",components:{StatusCard:P,FontAwesomeIcon:$},mixins:[B,E],props:{vehicleId:{type:Number,required:!0}},data(){return{mqttTopics:[{topic:`openWB/vehicle/${this.vehicleId}/get/+`,writeable:!1},{topic:`openWB/vehicle/${this.vehicleId}/info`,writeable:!1},{topic:`openWB/vehicle/${this.vehicleId}/name`,writeable:!1},{topic:`openWB/vehicle/${this.vehicleId}/color`,writeable:!1}]}},computed:{information:{get(){return this.$store.state.mqtt[this.baseTopic+"/info"]}},name:{get(){const e=this.baseTopic+"/name";return this.$store.state.mqtt[e]!==void 0?this.$store.state.mqtt[e]:`Fahrzeug ${this.vehicleId}`}},color:{get(){const e=this.baseTopic+"/color";return this.$store.state.mqtt[e]!==void 0?this.$store.state.mqtt[e]:"#17a2b8"}},soc:{get(){return this.formatNumberTopic(this.baseTopic+"/get/soc")}},socTimestamp:{get(){return this.$store.state.mqtt[this.baseTopic+"/get/soc_timestamp"]!==void 0?new Date(this.$store.state.mqtt[this.baseTopic+"/get/soc_timestamp"]*1e3).toLocaleString():"-"}},socRange:{get(){return this.$store.state.mqtt[this.baseTopic+"/get/range"]!==void 0?Math.round(this.$store.state.mqtt[this.baseTopic+"/get/range"]):0}},socOdometer:{get(){return this.$store.state.mqtt[this.baseTopic+"/get/odometer"]!==void 0&&this.$store.state.mqtt[this.baseTopic+"/get/odometer"]!==null?Math.round(this.$store.state.mqtt[this.baseTopic+"/get/odometer"]):"-"}},baseTopic:{get(){return"openWB/vehicle/"+this.vehicleId}},priority:{get(){return this.loadManagementPriority("vehicle",this.vehicleId)}},prioritySharedGroup:{get(){return this.loadManagementPriorityShared("vehicle",this.vehicleId)}}}},_o={key:0,class:"badge badge-pill badge-light mr-2",title:"Rangfolge in der Prioritäten-Steuerung"},vo={class:"row"},yo={class:"col text-monospace"},wo={class:"row"},To={class:"col text-monospace"},xo={class:"row"},Wo={class:"col text-right text-monospace"},ko={class:"row"},Co={class:"col text-right text-monospace"},Bo={class:"row"},$o={class:"col text-right text-monospace"},qo={class:"row"},Po={class:"col text-right text-monospace"},So={class:"row"},No={class:"col text-right text-monospace"},Ao={key:0,class:"row"};function Io(e,o,n,w,v,s){const u=c("font-awesome-icon"),p=c("openwb-base-card"),d=c("status-card");return i(),g(d,{subtype:"info","component-id":n.vehicleId,state:e.$store.state.mqtt[s.baseTopic+"/get/fault_state"],"state-message":e.$store.state.mqtt[s.baseTopic+"/get/fault_str"]},j({"header-left":a(()=>[l(u,{icon:["fas","car"],class:"fa-border",style:S({backgroundColor:s.color,color:e.getContrastColor(s.color),"--fa-border-color":e.getContrastColor(s.color)})},null,8,["style"]),_(" "+r(s.name),1)]),default:a(()=>[s.information!==void 0?(i(),g(p,{key:0,title:"Fahrzeuginformationen",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[t("div",vo,[o[0]||(o[0]=t("div",{class:"col pr-0"},"Hersteller",-1)),t("div",yo,r(s.information.manufacturer),1)]),t("div",wo,[o[1]||(o[1]=t("div",{class:"col pr-0"},"Modell",-1)),t("div",To,r(s.information.model),1)])]),_:1})):f("",!0),l(p,{title:"Fahrzeugdaten",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[t("div",xo,[o[2]||(o[2]=t("div",{class:"col pr-0 text-right"},"Ladestand",-1)),t("div",Wo,r(s.soc)+" %",1)]),t("div",ko,[o[3]||(o[3]=t("div",{class:"col pr-0 text-right"},"Reichweite",-1)),t("div",Co,r(s.socRange)+" km",1)]),t("div",Bo,[o[4]||(o[4]=t("div",{class:"col pr-0 text-right"},"Letzter Zeitstempel",-1)),t("div",$o,r(s.socTimestamp),1)]),t("div",qo,[o[5]||(o[5]=t("div",{class:"col pr-0 text-right"},"Kilometerstand",-1)),t("div",Po,r(s.socOdometer)+" km",1)])]),_:1}),s.priority!==null?(i(),g(p,{key:1,title:"Priorität",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[t("div",So,[o[6]||(o[6]=t("div",{class:"col pr-0 text-right"},"Rangfolge",-1)),t("div",No,"Prio "+r(s.priority),1)]),s.prioritySharedGroup?(i(),m("div",Ao,[...o[7]||(o[7]=[t("div",{class:"col text-right"},[t("small",null,"Gleichrangig mit anderen Geräten der selben Gruppe.")],-1)])])):f("",!0),o[8]||(o[8]=t("div",{class:"row"},[t("div",{class:"col text-right"},[t("small",null,"Die Rangfolge lässt sich unter „Lastmanagement“ anpassen.")])],-1))]),_:1})):f("",!0)]),_:2},[s.soc!="-"||s.priority!==null?{name:"header-right",fn:a(()=>[s.priority!==null?(i(),m("span",_o," Prio "+r(s.priority),1)):f("",!0),s.soc!="-"?(i(),m(x,{key:1},[_(r(s.soc)+" %",1)],64)):f("",!0)]),key:"0"}:void 0]),1032,["component-id","state","state-message"])}const Oo=C(fo,[["render",Io],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/status/VehicleCard.vue"]]);q.add(I);const Lo={name:"ConsumerSumCard",components:{StatusCard:P,FontAwesomeIcon:$},mixins:[B],data(){return{mqttTopics:[{topic:"openWB/consumer/get/power",writeable:!1}]}},computed:{baseTopic:{get(){return"openWB/consumer"}}}},Mo={class:"text-right"},jo={class:"row"},Eo={class:"col text-right text-monospace"};function Do(e,o,n,w,v,s){const u=c("font-awesome-icon"),p=c("openwb-base-card"),d=c("status-card");return i(),g(d,{subtype:"purple"},{"header-left":a(()=>[l(u,{icon:["fas","plug"]}),o[0]||(o[0]=_(" Alle Verbraucher ",-1))]),"header-right":a(()=>[t("span",Mo,r(e.formatNumberTopic(s.baseTopic+"/get/power",3,3,.001))+" kW ",1)]),default:a(()=>[l(p,{subtype:"white","body-bg":"white",class:"py-1 mb-2",title:"Aktuelle Werte"},{default:a(()=>[t("div",jo,[o[1]||(o[1]=t("div",{class:"col pr-0 text-right"},"Leistung",-1)),t("div",Eo,r(e.formatNumberTopic(s.baseTopic+"/get/power",3,3,.001))+" kW ",1)])]),_:1})]),_:1})}const zo=C(Lo,[["render",Do],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/status/ConsumerSumCard.vue"]]);q.add(I);const Go={name:"ConsumerCard",components:{StatusCard:P,FontAwesomeIcon:$},mixins:[B,E],props:{consumerId:{type:Number,required:!0}},data(){return{mqttTopics:[{topic:`openWB/consumer/${this.consumerId}/module`,writeable:!1},{topic:`openWB/consumer/${this.consumerId}/usage`,writeable:!1},{topic:`openWB/consumer/${this.consumerId}/get/+`,writeable:!1},{topic:`openWB/consumer/${this.consumerId}/extra_meter`,writeable:!1},{topic:"openWB/system/device/+/component/+/config",writeable:!1}]}},computed:{baseTopic:{get(){return`openWB/consumer/${this.consumerId}`}},name:{get(){return this.$store.state.mqtt[this.baseTopic+"/module"]?.name??`Verbraucher ${this.consumerId}`}},color:{get(){return this.$store.state.mqtt[this.baseTopic+"/module"]?.color??"#6f42c1"}},power:{get(){return this.formatNumberTopic(this.baseTopic+"/get/power",3,3,.001)}},statusMessage:{get(){return this.$store.state.mqtt[this.baseTopic+"/get/state_str"]??null}},chargemode:{get(){const e=this.$store.state.mqtt[this.baseTopic+"/usage"];return!e||e.chargemode===void 0?null:this.translateChargeMode(e.chargemode)}},priority:{get(){return this.loadManagementPriority("consumer",this.consumerId)}},prioritySharedGroup:{get(){return this.loadManagementPriorityShared("consumer",this.consumerId)}},temperatureReadingCount:{get(){const e=this.$store.state.mqtt[this.baseTopic+"/get/temperatures"];return Array.isArray(e)?e.length:0}},temperatures:{get(){const e=this.$store.state.mqtt[this.baseTopic+"/get/temperatures"];return Array.isArray(e)?e.map((o,n)=>({index:n,value:o})).filter(o=>typeof o.value=="number").map(o=>({index:o.index,value:this.formatNumber(o.value,1)})):[]}},hasPhaseData:{get(){const e=this.$store.state.mqtt[this.baseTopic+"/get/currents"];return Array.isArray(e)&&e.length>0}},extraMeterId:{get(){return this.$store.state.mqtt[this.baseTopic+"/extra_meter"]??null}},hasExtraMeter:{get(){return this.extraMeterId!==null}},extraMeterName:{get(){if(this.extraMeterId===null)return null;const e=this.getWildcardTopics("openWB/system/device/+/component/+/config");return Object.values(e).find(n=>n&&n.id===this.extraMeterId)?.name??`Zähler ${this.extraMeterId}`}}}},Ro={key:0,class:"badge badge-pill badge-light mr-2",title:"Rangfolge in der Prioritäten-Steuerung"},Vo={style:{"white-space":"pre-wrap"}},Ho={class:"row"},Zo={class:"col text-right text-monospace"},Ko={key:0,class:"row"},Fo={class:"col text-right text-monospace"},Jo={class:"col pr-0 text-right"},Uo={class:"col text-right text-monospace"},Qo={class:"row"},Xo={class:"col text-right text-monospace"},Yo={key:0,class:"row"},tr={class:"row"},er={class:"col text-right text-monospace"},sr={key:0,class:"row"},or={class:"row"},rr={class:"col"},ar={class:"row"},ir={class:"row"},nr={class:"col"},cr={class:"row"},lr={class:"row"},dr={class:"col"},pr={class:"row"};function ur(e,o,n,w,v,s){const u=c("font-awesome-icon"),p=c("openwb-base-alert"),d=c("openwb-base-card"),h=c("status-card");return i(),g(h,{subtype:"purple","component-id":n.consumerId,state:e.$store.state.mqtt[s.baseTopic+"/get/fault_state"],"state-message":e.$store.state.mqtt[s.baseTopic+"/get/fault_str"]},{"header-left":a(()=>[l(u,{icon:["fas","plug"],class:"fa-border",style:S({backgroundColor:s.color,color:e.getContrastColor(s.color),"--fa-border-color":e.getContrastColor(s.color)})},null,8,["style"]),_(" "+r(s.name),1)]),"header-right":a(()=>[s.priority!==null?(i(),m("span",Ro," Prio "+r(s.priority),1)):f("",!0),_(" "+r(s.power)+" kW ",1)]),default:a(()=>[s.statusMessage?(i(),g(d,{key:0,title:"Status",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[l(p,{subtype:"info",class:"mb-0"},{default:a(()=>[o[0]||(o[0]=_(" Statusmeldung: ",-1)),t("span",Vo,r(s.statusMessage),1)]),_:1})]),_:1})):f("",!0),l(d,{title:"Aktuelle Werte",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[t("div",Ho,[o[1]||(o[1]=t("div",{class:"col pr-0 text-right"},"Leistung",-1)),t("div",Zo,r(s.power)+" kW",1)]),s.chargemode!==null?(i(),m("div",Ko,[o[2]||(o[2]=t("div",{class:"col pr-0 text-right"},"Betriebsmodus",-1)),t("div",Fo,r(s.chargemode),1)])):f("",!0)]),_:1}),s.temperatures.length>0?(i(),g(d,{key:1,title:"Temperaturen",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[(i(!0),m(x,null,W(s.temperatures,b=>(i(),m("div",{key:b.index,class:"row"},[t("div",Jo,r(s.temperatureReadingCount>1?`Sensor ${b.index+1}`:"Temperatur"),1),t("div",Uo,r(b.value)+" °C",1)]))),128))]),_:1})):f("",!0),s.priority!==null?(i(),g(d,{key:2,title:"Priorität",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[t("div",Qo,[o[3]||(o[3]=t("div",{class:"col pr-0 text-right"},"Rangfolge",-1)),t("div",Xo,"Prio "+r(s.priority),1)]),s.prioritySharedGroup?(i(),m("div",Yo,[...o[4]||(o[4]=[t("div",{class:"col text-right"},[t("small",null,"Gleichrangig mit anderen Geräten der selben Gruppe.")],-1)])])):f("",!0),o[5]||(o[5]=t("div",{class:"row"},[t("div",{class:"col text-right"},[t("small",null,"Die Rangfolge lässt sich unter „Lastmanagement“ anpassen.")])],-1))]),_:1})):f("",!0),l(d,{title:"Separate Leistungsmessung",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[t("div",tr,[o[6]||(o[6]=t("div",{class:"col pr-0 text-right"},"Zähler",-1)),t("div",er,r(s.hasExtraMeter?s.extraMeterName:"keiner"),1)]),s.hasExtraMeter?(i(),m("div",sr,[...o[7]||(o[7]=[t("div",{class:"col text-right"},[t("small",null,"Die angezeigten Leistungswerte stammen von diesem Zähler.")],-1)])])):f("",!0)]),_:1}),s.hasPhaseData?(i(),g(d,{key:3,title:"Werte pro Phase",subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[t("div",or,[o[8]||(o[8]=t("div",{class:"col-md-4 pr-0 text-center text-md-right"},"Spannung [V]",-1)),t("div",rr,[t("div",ar,[(i(!0),m(x,null,W(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/voltages",1),(b,y)=>(i(),m("div",{key:y,class:"col text-right text-monospace pl-0"},r(b),1))),128))])])]),t("div",ir,[o[9]||(o[9]=t("div",{class:"col-md-4 pr-0 text-center text-md-right"},"Strom [A]",-1)),t("div",nr,[t("div",cr,[(i(!0),m(x,null,W(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/currents",2),(b,y)=>(i(),m("div",{key:y,class:"col text-right text-monospace pl-0"},r(b),1))),128))])])]),t("div",lr,[o[10]||(o[10]=t("div",{class:"col-md-4 pr-0 text-center text-md-right"},"Leistung [kW]",-1)),t("div",dr,[t("div",pr,[(i(!0),m(x,null,W(e.formatPhaseArrayNumberTopic(s.baseTopic+"/get/powers",3,3,.001),(b,y)=>(i(),m("div",{key:y,class:"col text-right text-monospace pl-0"},r(b),1))),128))])])])]),_:1})):f("",!0)]),_:1},8,["component-id","state","state-message"])}const mr=C(Go,[["render",ur],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/status/ConsumerCard.vue"]]);q.add(ct);pt.register(ut,mt,gt,ht,bt,ft,_t,vt,yt);const gr={name:"ElectricityPricingCard",components:{StatusCard:P,FontAwesomeIcon:$,ChartjsLine:dt},mixins:[B],data(){return{mqttTopics:[{topic:"openWB/optional/ep/configured",writeable:!1},{topic:"openWB/optional/ep/flexible_tariff/get/fault_state",writeable:!1},{topic:"openWB/optional/ep/flexible_tariff/get/fault_str",writeable:!1},{topic:"openWB/optional/ep/flexible_tariff/get/prices",writeable:!1},{topic:"openWB/optional/ep/flexible_tariff/provider",writeable:!1},{topic:"openWB/optional/ep/get/prices",writeable:!1},{topic:"openWB/optional/ep/grid_fee/get/fault_state",writeable:!1},{topic:"openWB/optional/ep/grid_fee/get/fault_str",writeable:!1},{topic:"openWB/optional/ep/grid_fee/get/prices",writeable:!1},{topic:"openWB/optional/ep/grid_fee/provider",writeable:!1}],chartDatasets:{datasets:[{label:"Gesamtpreis",unit:"ct/kWh",type:"line",stepped:!0,borderColor:"rgba(0, 149, 0, 0.9)",backgroundColor:"rgba(0, 149, 0, 0.7)",fill:!1,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!1,borderWidth:1,data:void 0,yAxisID:"y",parsing:{xAxisKey:"timestamp",yAxisKey:"price"}},{label:"Stromtarif",unit:"ct/kWh",type:"line",stepped:!0,borderColor:"rgba(139, 0, 0, 0.9)",backgroundColor:"rgba(139, 0, 0, 0.9)",fill:!1,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!1,borderWidth:1,data:void 0,yAxisID:"y",parsing:{xAxisKey:"timestamp",yAxisKey:"price"}},{label:"Netzentgelt",unit:"ct/kWh",type:"line",stepped:!0,borderColor:"rgba(255, 0, 0, 0.4)",backgroundColor:"rgba(255, 0, 0, 0.4)",fill:!1,pointStyle:"circle",pointRadius:0,pointHoverRadius:4,cubicInterpolationMode:"monotone",hidden:!1,borderWidth:1,data:void 0,yAxisID:"y",parsing:{xAxisKey:"timestamp",yAxisKey:"price"}}]},chartOptions:{plugins:{title:{display:!1},tooltip:{enabled:!0},legend:{display:!0,position:"top",labels:{filter:function(e,o){return!o.datasets[e.datasetIndex].hidden}}}},elements:{point:{radius:2}},responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},scales:{x:{type:"time",time:{unit:"hour",text:"Zeit",maxTicksLimit:24},display:!0,title:{display:!0,text:"Uhrzeit"},ticks:{font:{size:12},callback:this.formatTickLabel,maxTicksLimit:0},grid:{}},y:{position:"left",type:"linear",display:"auto",title:{font:{size:12},display:!0,text:"Preis [ct/kWh]"},grid:{},ticks:{font:{size:12},stepSize:.01,maxTicksLimit:11}}}}}},computed:{electricityPricingConfigured(){return this.$store.state.mqtt["openWB/optional/ep/configured"]},chartDataRead(){return this.chartDataObject.datasets.some(o=>o.data!==void 0&&!o.hidden)},chartDataObject(){const e=JSON.parse(JSON.stringify(this.chartDatasets)),o=this.getEndOfToday();let n=null;if(this.$store.state.mqtt["openWB/optional/ep/get/prices"]){var w=this.$store.state.mqtt["openWB/optional/ep/get/prices"],v=[];for(const[h,b]of Object.entries(w))v.push({timestamp:h*1e3,price:b*1e5});if(v.length>0){const h=v.slice(-1)[0];let b=o;if(v.length>1){const y=v.slice(-2,-1)[0];b=h.timestamp+h.timestamp-y.timestamp-1}v.push({timestamp:b,price:h.price})}e.datasets[0].data=v,n=e.datasets[0].data.slice(-1)[0].timestamp}else e.datasets[0].hidden=!0;if(this.$store.state.mqtt["openWB/optional/ep/flexible_tariff/provider"]?.type&&this.$store.state.mqtt["openWB/optional/ep/flexible_tariff/get/prices"]){var s=this.$store.state.mqtt["openWB/optional/ep/flexible_tariff/get/prices"],u=[];for(const[h,b]of Object.entries(s))n&&h*1e3>n||u.push({timestamp:h*1e3,price:b*1e5});if(u.length>0){const h=u.slice(-1)[0];let b=o;if(u.length>1){const y=u.slice(-2,-1)[0];b=h.timestamp+h.timestamp-y.timestamp-1}u.push({timestamp:b,price:h.price})}e.datasets[1].data=u}else e.datasets[1].hidden=!0;if(this.$store.state.mqtt["openWB/optional/ep/grid_fee/provider"]?.type&&this.$store.state.mqtt["openWB/optional/ep/grid_fee/get/prices"]){var p=this.$store.state.mqtt["openWB/optional/ep/grid_fee/get/prices"],d=[];for(const[h,b]of Object.entries(p))n&&h*1e3>n||d.push({timestamp:h*1e3,price:b*1e5});if(d.length>0){const h=d.slice(-1)[0];let b=o;if(d.length>1){const y=d.slice(-2,-1)[0];b=h.timestamp+h.timestamp-y.timestamp-1}d.push({timestamp:b,price:h.price})}e.datasets[2].data=d}else e.datasets[2].hidden=!0;return e},currentPrice(){return this.chartDataObject.datasets[0].data===void 0||this.chartDataObject.datasets[0].data.length===0?this.formatNumber(0,2):this.formatNumber(this.chartDataObject.datasets[0].data[0].price||0,2)},baseTopic:{get(){return"openWB/optional/ep/flexible_tariff"}},combinedState(){const e=this.$store.state.mqtt["openWB/optional/ep/flexible_tariff/get/fault_state"]||0,o=this.$store.state.mqtt["openWB/optional/ep/grid_fee/get/fault_state"]||0;return Math.max(e,o)},combinedStateMessage(){const e=[];if(this.$store.state.mqtt["openWB/optional/ep/flexible_tariff/provider"]?.type){const n=(this.$store.state.mqtt["openWB/optional/ep/flexible_tariff/get/fault_state"]||0)>0?this.$store.state.mqtt["openWB/optional/ep/flexible_tariff/get/fault_str"]:"Kein Fehler.";e.push(`Stromtarif: ${n}`)}if(this.$store.state.mqtt["openWB/optional/ep/grid_fee/provider"]?.type){const n=(this.$store.state.mqtt["openWB/optional/ep/grid_fee/get/fault_state"]||0)>0?this.$store.state.mqtt["openWB/optional/ep/grid_fee/get/fault_str"]:"Kein Fehler.";e.push(`Netzentgelt: ${n}`)}return e.length>0?e.join(` `):void 0},tariffProvider(){return this.$store.state.mqtt["openWB/optional/ep/flexible_tariff/provider"]?.name||null},gridFeeProvider(){return this.$store.state.mqtt["openWB/optional/ep/grid_fee/provider"]?.name||null},showLegend(){const e=this.$store.state.mqtt["openWB/optional/ep/flexible_tariff/provider"]?.type,o=this.$store.state.mqtt["openWB/optional/ep/grid_fee/provider"]?.type;return e&&o},dynamicChartOptions(){const e=JSON.parse(JSON.stringify(this.chartOptions));return e.plugins.legend.display=this.showLegend,e.scales.x.ticks.callback=this.formatTickLabel,e}},methods:{getEndOfToday(){return new Date().setHours(23,59,59,999).valueOf()},formatTickLabel(e){const o=new Date(e);return`${this.getEndOfToday()[l(u,{icon:["fas","ranking-star"]}),o[0]||(o[0]=_(" Variable Strompreise ",-1))]),"header-right":a(()=>[_(r(s.currentPrice)+" ct/kWh",1)]),default:a(()=>[l(p,{subtype:"white","body-bg":"white",class:"py-1 mb-2"},{header:a(()=>[...o[1]||(o[1]=[_("Tarifinformationen",-1)])]),default:a(()=>[s.tariffProvider?(i(),m("div",hr,[o[2]||(o[2]=t("div",{class:"col-xl-3 pr-0"},"Stromtarif:",-1)),t("div",br,r(s.tariffProvider),1)])):f("",!0),s.gridFeeProvider?(i(),m("div",fr,[o[3]||(o[3]=t("div",{class:"col-xl-3 pr-0"},"Netzentgelte:",-1)),t("div",_r,r(s.gridFeeProvider),1)])):f("",!0)]),_:1}),l(p,{subtype:"white","body-bg":"white",class:"py-1 mb-2"},{default:a(()=>[t("div",vr,[s.chartDataRead?(i(),g(d,{key:0,ref:"myChart",data:s.chartDataObject,options:s.dynamicChartOptions},null,8,["data","options"])):f("",!0)])]),_:1})]),_:1},8,["state","state-message"])):f("",!0)}const wr=C(gr,[["render",yr],["__scopeId","data-v-6a18833c"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/status/ElectricityPricingCard.vue"]]),Tr={name:"OpenwbStatusView",components:{ChargePointSumCard:zt,ChargePointCard:We,CounterCard:os,InverterSumCard:ms,InverterCard:qs,BatterySumCard:zs,BatteryCard:ao,IoDeviceCard:ho,VehicleCard:Oo,ConsumerSumCard:zo,ConsumerCard:mr,ElectricityPricingCard:wr},mixins:[B],data(){return{mqttTopics:[{topic:"openWB/bat/get/power",writeable:!1},{topic:"openWB/chargepoint/+/config",writeable:!1},{topic:"openWB/chargepoint/get/power",writeable:!1},{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/optional/ep/configured",writeable:!1},{topic:"openWB/pv/get/power",writeable:!1},{topic:"openWB/system/device/+/component/+/config",writeable:!1},{topic:"openWB/system/io/+/config",writeable:!1},{topic:"openWB/vehicle/+/info",writeable:!1},{topic:"openWB/consumer/+/module",writeable:!1}]}},computed:{installedChargePoints:{get(){return Object.keys(this.getWildcardTopics("openWB/chargepoint/+/config")).map(e=>{let o=e.match(/^openWB\/chargepoint\/(\d+)\/config$/);return o?parseInt(o[1]):null}).filter(e=>e!==null)}},showChargePointSumCard:{get(){return this.$store.state.mqtt["openWB/chargepoint/get/power"]!==void 0&&this.$store.state.mqtt["openWB/general/extern"]===!1&&this.installedChargePoints.length>1}},counterConfigs:{get(){return this.$store.state.mqtt["openWB/general/extern"]===!0?{}:this.filterComponentsByType(this.getWildcardTopics("openWB/system/device/+/component/+/config"),"counter")}},showInverterSumCard:{get(){return this.$store.state.mqtt["openWB/pv/get/power"]!==void 0&&this.$store.state.mqtt["openWB/general/extern"]===!1&&Object.keys(this.inverterConfigs).length>1}},inverterConfigs:{get(){return this.$store.state.mqtt["openWB/general/extern"]===!0?{}:this.filterComponentsByType(this.getWildcardTopics("openWB/system/device/+/component/+/config"),"inverter")}},showBatterySumCard:{get(){return this.$store.state.mqtt["openWB/bat/get/power"]!==void 0&&this.$store.state.mqtt["openWB/general/extern"]===!1&&Object.keys(this.batteryConfigs).length>1}},batteryConfigs:{get(){return this.$store.state.mqtt["openWB/general/extern"]===!0?{}:this.filterComponentsByType(this.getWildcardTopics("openWB/system/device/+/component/+/config"),"bat")}},vehicles:{get(){if(this.$store.state.mqtt["openWB/general/extern"]===!0)return[];let e=this.getWildcardTopics("openWB/vehicle/+/info");return Object.keys(e).map(o=>{let n=o.match(/^openWB\/vehicle\/(\d+)\/info$/);return n?parseInt(n[1]):null})}},installedConsumers:{get(){return this.$store.state.mqtt["openWB/general/extern"]===!0?[]:Object.keys(this.getWildcardTopics("openWB/consumer/+/module")).map(e=>{let o=e.match(/^openWB\/consumer\/(\d+)\/module$/);return o?parseInt(o[1]):null}).filter(e=>e!==null)}},showConsumerSumCard:{get(){return this.$store.state.mqtt["openWB/general/extern"]===!1&&this.installedConsumers.length>1}},ioDeviceConfigs:{get(){return this.getWildcardTopics("openWB/system/io/+/config")}},showElectricityPricingCard:{get(){return this.$store.state.mqtt["openWB/optional/ep/configured"]===!0&&this.$store.state.mqtt["openWB/general/extern"]===!1}}},methods:{filterComponentsByType(e,o){return Object.keys(e).filter(n=>e[n].type.includes(o)).reduce((n,w)=>({...n,[w]:e[w]}),{})}}},xr={class:"status"};function Wr(e,o,n,w,v,s){const u=c("charge-point-sum-card"),p=c("charge-point-card"),d=c("counter-card"),h=c("inverter-sum-card"),b=c("inverter-card"),y=c("battery-sum-card"),k=c("battery-card"),D=c("vehicle-card"),z=c("consumer-sum-card"),G=c("consumer-card"),R=c("io-device-card"),V=c("electricity-pricing-card");return i(),m("div",xr,[s.showChargePointSumCard?(i(),g(u,{key:0})):f("",!0),(i(!0),m(x,null,W(s.installedChargePoints,T=>(i(),g(p,{key:T,"charge-point-id":T},null,8,["charge-point-id"]))),128)),(i(!0),m(x,null,W(s.counterConfigs,T=>(i(),g(d,{key:T.id,counter:T},null,8,["counter"]))),128)),s.showInverterSumCard?(i(),g(h,{key:1})):f("",!0),(i(!0),m(x,null,W(s.inverterConfigs,T=>(i(),g(b,{key:T.id,inverter:T},null,8,["inverter"]))),128)),s.showBatterySumCard?(i(),g(y,{key:2})):f("",!0),(i(!0),m(x,null,W(s.batteryConfigs,T=>(i(),g(k,{key:T.id,battery:T},null,8,["battery"]))),128)),(i(!0),m(x,null,W(s.vehicles,T=>(i(),g(D,{key:T,"vehicle-id":T},null,8,["vehicle-id"]))),128)),s.showConsumerSumCard?(i(),g(z,{key:3})):f("",!0),(i(!0),m(x,null,W(s.installedConsumers,T=>(i(),g(G,{key:T,"consumer-id":T},null,8,["consumer-id"]))),128)),(i(!0),m(x,null,W(s.ioDeviceConfigs,T=>(i(),g(R,{key:T.id,"io-device":T},null,8,["io-device"]))),128)),s.showElectricityPricingCard?(i(),g(V,{key:4})):f("",!0)])}const Ar=C(Tr,[["render",Wr],["__scopeId","data-v-051028a3"],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/Status.vue"]]);export{Ar as default}; diff --git a/web/settings/assets/Support-kYroR_AI.js b/web/settings/assets/Support-BL8bu-Sw.js similarity index 99% rename from web/settings/assets/Support-kYroR_AI.js rename to web/settings/assets/Support-BL8bu-Sw.js index e892d036cd..e551949def 100644 --- a/web/settings/assets/Support-kYroR_AI.js +++ b/web/settings/assets/Support-BL8bu-Sw.js @@ -1,3 +1,3 @@ -import{F as V,l as W,g as F}from"./vendor-fortawesome-DplTMxoa.js";import{C as z}from"./index-Bv2WLdLZ.js";import{_ as A,m as d,l as b,f as h,q as s,u as n,B as t,y as o,z as w,D as C,x as k,k as M,K as q}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";W.add(F);const x={name:"OpenwbSupportView",components:{FontAwesomeIcon:V},mixins:[z],emits:["sendCommand"],data(){return{mqttTopics:[{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/system/current_branch_commit",writeable:!1},{topic:"openWB/system/current_commit",writeable:!1},{topic:"openWB/system/dataprotection_acknowledged",writeable:!1},{topic:"openWB/system/device/+/component/+/config",writeable:!1},{topic:"openWB/system/device/+/config",writeable:!1},{topic:"openWB/system/security/user_management_active",writeable:!1},{topic:"openWB/system/serial_number",writeable:!1},{topic:"openWB/vehicle/+/info",writeable:!1},{topic:"openWB/vehicle/+/name",writeable:!1}],showDeprecatedFirmwareModal:!1,email:void 0,components:void 0,subject:void 0,ticketNumber:void 0,vehicles:void 0,message:void 0,enableSendDebugButton:!0}},computed:{userManagementActive(){return this.$store.state.mqtt["openWB/system/security/user_management_active"]||!1},debugData(){return{email:this.email,subject:this.subject,ticketNumber:this.ticketNumber,serialNumber:this.$store.state.mqtt["openWB/system/serial_number"],installedComponents:this.installedComponents,vehicles:this.vehicleInfo,message:this.message}},installedComponents(){if(this.components!==void 0)return this.components;let i="";const e=this.getWildcardTopics("openWB/system/device/+/component/+/config");for(const m of Object.values(e)){const f=m.id,r=m.info?.manufacturer||"N/A",u=m.info?.model||"N/A";i+=`(${f}) Hersteller: ${r}, Modell: ${u} +import{F as V,l as W,g as F}from"./vendor-fortawesome-DplTMxoa.js";import{C as z}from"./index-CE-5DBwq.js";import{_ as A,m as d,l as b,f as h,q as s,u as n,B as t,y as o,z as w,D as C,x as k,k as M,K as q}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";W.add(F);const x={name:"OpenwbSupportView",components:{FontAwesomeIcon:V},mixins:[z],emits:["sendCommand"],data(){return{mqttTopics:[{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/system/current_branch_commit",writeable:!1},{topic:"openWB/system/current_commit",writeable:!1},{topic:"openWB/system/dataprotection_acknowledged",writeable:!1},{topic:"openWB/system/device/+/component/+/config",writeable:!1},{topic:"openWB/system/device/+/config",writeable:!1},{topic:"openWB/system/security/user_management_active",writeable:!1},{topic:"openWB/system/serial_number",writeable:!1},{topic:"openWB/vehicle/+/info",writeable:!1},{topic:"openWB/vehicle/+/name",writeable:!1}],showDeprecatedFirmwareModal:!1,email:void 0,components:void 0,subject:void 0,ticketNumber:void 0,vehicles:void 0,message:void 0,enableSendDebugButton:!0}},computed:{userManagementActive(){return this.$store.state.mqtt["openWB/system/security/user_management_active"]||!1},debugData(){return{email:this.email,subject:this.subject,ticketNumber:this.ticketNumber,serialNumber:this.$store.state.mqtt["openWB/system/serial_number"],installedComponents:this.installedComponents,vehicles:this.vehicleInfo,message:this.message}},installedComponents(){if(this.components!==void 0)return this.components;let i="";const e=this.getWildcardTopics("openWB/system/device/+/component/+/config");for(const m of Object.values(e)){const f=m.id,r=m.info?.manufacturer||"N/A",u=m.info?.model||"N/A";i+=`(${f}) Hersteller: ${r}, Modell: ${u} `}return i.trim()},vehicleInfo(){if(this.vehicles!==void 0)return this.vehicles;let i="";const e=this.getWildcardTopics("openWB/vehicle/+/info");for(const[m,f]of Object.entries(e)){const r=parseInt(m.split("/")[2]);if(r!==0){const u=f.manufacturer||"N/A",a=f.model||"N/A";i+=`(${r}) Hersteller: ${u}, Modell: ${a} `}}return i.trim()},updateAvailable(){return this.$store.state.mqtt["openWB/system/current_branch_commit"]&&this.$store.state.mqtt["openWB/system/current_branch_commit"]!=this.$store.state.mqtt["openWB/system/current_commit"]}},beforeMount(){this.sendSystemCommand("systemFetchVersions")},methods:{sendDebugMessage(){if(document.forms.supportForm.reportValidity())this.sendSystemCommand("sendDebug",this.debugData),this.enableSendDebugButton=!1;else{console.warn("form invalid");return}},checkFirmware(){this.updateAvailable?this.showDeprecatedFirmwareModal=!0:this.sendDebugMessage()},verifyModalInput(i){this.showDeprecatedFirmwareModal=!1,i=="confirm"&&this.sendDebugMessage()},sendSystemCommand(i,e={}){this.$emit("sendCommand",{command:i,data:e})}}},N={class:"support"},I={name:"supportForm"},T={key:1},U={key:0},j={class:"row justify-content-center"};function H(i,e,m,f,r,u){const a=d("router-link"),v=d("openwb-base-modal-dialog"),p=d("openwb-base-alert"),y=d("FontAwesomeIcon"),g=d("openwb-base-text-input"),c=d("openwb-base-textarea"),B=d("openwb-base-click-button"),S=d("openwb-base-card"),D=d("font-awesome-icon");return b(),h(q,null,[s(v,{show:r.showDeprecatedFirmwareModal,title:"Achtung: Veraltete Software!",subtype:"danger","prevent-close":!0,buttons:[{text:"Trotzdem versenden",event:"confirm",subtype:"danger"},{text:"Nicht versenden",event:"closeDialog"}],onModalResult:e[0]||(e[0]=l=>u.verifyModalInput(l))},{default:n(()=>[e[9]||(e[9]=t(" Möglicherweise wurde das Problem bereits behoben.",-1)),e[10]||(e[10]=o("br",null,null,-1)),e[11]||(e[11]=t(" Bitte führe vor dem Absenden ein ",-1)),s(a,{to:"/System/SystemConfiguration"},{default:n(()=>[...e[8]||(e[8]=[t(" Update ",-1)])]),_:1}),e[12]||(e[12]=t(" durch.",-1)),e[13]||(e[13]=o("br",null,null,-1)),e[14]||(e[14]=t(" Falls ein Update nicht möglich ist, kann der Systembericht dennoch versendet werden. Falls kein Update gewünscht ist, bieten wir auch über unseren Partner WB Solution GmbH ",-1)),e[15]||(e[15]=o("a",{href:"https://wb-solution.de/produkt/support-token-aeltere-version/",target:"_blank",rel:"noopener noreferrer"},"Support für ältere Softwareversionen",-1)),e[16]||(e[16]=t(" an. ",-1))]),_:1},8,["show"]),o("div",N,[o("form",I,[i.$store.state.mqtt["openWB/system/dataprotection_acknowledged"]!==!0?(b(),w(p,{key:0,subtype:"danger"},{default:n(()=>[e[18]||(e[18]=t(" Du musst der ",-1)),s(a,{to:"/System/LegalSettings"},{default:n(()=>[...e[17]||(e[17]=[t(" Datenschutzerklärung ",-1)])]),_:1}),e[19]||(e[19]=t(" zustimmen, um einen Systembericht senden zu können. ",-1))]),_:1})):(b(),h("div",T,[s(p,{subtype:"success"},{default:n(()=>[e[21]||(e[21]=t(" Du hast der ",-1)),s(a,{to:"/System/LegalSettings"},{default:n(()=>[...e[20]||(e[20]=[t(" Datenschutzerklärung ",-1)])]),_:1}),e[22]||(e[22]=t(" zugestimmt und kannst Systemberichte senden. ",-1))]),_:1}),s(S,{title:"Systembericht"},C({default:n(()=>[i.$store.state.mqtt["openWB/system/dataprotection_acknowledged"]===!0?(b(),h("div",U,[s(p,{subtype:"danger"},{default:n(()=>[...e[23]||(e[23]=[t(' Vergewissere Dich, dass mindestens die aktuelle "Release" Version installiert ist. ',-1)])]),_:1}),s(p,{subtype:"info"},{default:n(()=>[o("ul",null,[o("li",null,[e[24]||(e[24]=t(" Lies bitte den Hilfetext, der durch Klick auf das ",-1)),s(y,{icon:["far","question-circle"]}),e[25]||(e[25]=t(" angezeigt wird. Nimm das Wiki zur Hilfe. ",-1))]),e[26]||(e[26]=o("li",null," Stelle beim Absenden des Berichtes die Fehlerkonditionen her. Lädt ein Fahrzeug nicht, sollte es angeschlossen und nicht voll geladen sein. Ist PV laden betroffen, sollte die Sonne auch scheinen. Der Systembericht muss dann versendet werden, wenn der Fehler aktuell vorliegt. ",-1)),e[27]||(e[27]=o("li",null," Stelle sicher, dass der richtige Lademodus gewählt ist und im Falle von nicht ladenden Fahrzeugen, dass der Ladepunkt auch entsperrt wurde. ",-1)),e[28]||(e[28]=o("li",null," Das Auslesen der Systemkonfiguration erfolgt direkt nach den Klick auf Absenden und kann einige Zeit in Anspruch nehmen. Du erhältst ca. 15 bis 30 Minuten nach Versand des Systemberichtes von uns automatisch eine E-Mail mit der Ticketnummer unter der die Anfrage bei uns registriert wurde. Wir melden uns bei Dir. Bitte kontrolliere daher immer auch den Spam Ordner auf eingehende Nachrichten. Erhältst Du trotzdem keine Ticketnummer, ist das Versenden des Systemberichtes vermutlich fehlgeschlagen. ",-1))])]),_:1}),s(g,{modelValue:r.email,"onUpdate:modelValue":e[1]||(e[1]=l=>r.email=l),title:"E-Mail",required:"",subtype:"email"},{help:n(()=>[...e[29]||(e[29]=[t(" Deine E-Mail-Adresse, an die der Support Dir antwortet. ",-1)])]),_:1},8,["modelValue"]),s(g,{modelValue:r.subject,"onUpdate:modelValue":e[2]||(e[2]=l=>r.subject=l),title:"Betreff",required:"",minlength:"15",maxlength:"100"},{help:n(()=>[...e[30]||(e[30]=[t(" Du kannst hier einen kurzen Titel für dein Problem angeben. ",-1)])]),_:1},8,["modelValue"]),s(g,{modelValue:r.ticketNumber,"onUpdate:modelValue":e[3]||(e[3]=l=>r.ticketNumber=l),title:"Bestehende Ticketnummer",maxlength:"8",pattern:"[1-9][0-9]{7}"},{help:n(()=>[...e[31]||(e[31]=[t(" Hier kann eine bereits bestehende Ticketnummer eingegeben werden, damit das Ticket schneller zugeordnet werden kann. ",-1)])]),_:1},8,["modelValue"]),s(g,{title:"openWB Seriennummer",required:"","model-value":i.$store.state.mqtt["openWB/system/serial_number"],"onUpdate:modelValue":e[4]||(e[4]=l=>i.updateState("openWB/system/serial_number",l))},{help:n(()=>[...e[32]||(e[32]=[t(" Die Seriennummer der openWB findest Du außen am, bei älteren Installationen innen im Gehäuse. Du kannst uns aber auch eine Bestellnummer oder Rechnungsnummer übermitteln. Das Gehäuse muss nicht extra geöffnet werden!",-1),o("br",null,null,-1),t(" Bei einer gekauften openWB wird die Seriennummer automatisch ermittelt. ",-1)])]),_:1},8,["model-value"]),s(c,{title:"Verwendete Komponenten",required:"",minlength:"3",maxlength:"500","model-value":u.installedComponents,"onUpdate:modelValue":e[5]||(e[5]=l=>r.components=l)},{help:n(()=>[e[34]||(e[34]=t(" Gib hier möglichst detailliert an, welche Anlagenkomponenten (EVU, PV, Speicher) angebunden sind.",-1)),e[35]||(e[35]=o("br",null,null,-1)),s(a,{to:"/HardwareInstallation"},{default:n(()=>[...e[33]||(e[33]=[t(" Die Angaben können auch direkt in der Konfiguration der Komponenten dauerhaft gespeichert werden. ",-1)])]),_:1})]),_:1},8,["model-value"]),s(c,{title:"Fahrzeuge",required:"",minlength:"3",maxlength:"500","model-value":u.vehicleInfo,"onUpdate:modelValue":e[6]||(e[6]=l=>r.vehicles=l)},{help:n(()=>[e[37]||(e[37]=t(" Gib hier an, welche Fahrzeuge geladen (Hersteller, Modell, Baujahr).",-1)),e[38]||(e[38]=o("br",null,null,-1)),s(a,{to:"/VehicleConfiguration"},{default:n(()=>[...e[36]||(e[36]=[t(" Die Angaben können auch direkt in der Konfiguration der Fahrzeuge dauerhaft gespeichert werden. ",-1)])]),_:1})]),_:1},8,["model-value"]),s(c,{modelValue:r.message,"onUpdate:modelValue":e[7]||(e[7]=l=>r.message=l),title:"Problembeschreibung",required:"",minlength:"20",maxlength:"500"},null,8,["modelValue"])])):k("",!0)]),_:2},[i.$store.state.mqtt["openWB/system/dataprotection_acknowledged"]===!0?{name:"footer",fn:n(()=>[u.userManagementActive?(b(),w(p,{key:0,subtype:"warning"},{default:n(()=>[...e[39]||(e[39]=[o("strong",null,"Die Benutzerverwaltung ist aktiv!",-1),o("br",null,null,-1),t(" Bitte teile uns Zugangsdaten mit ausreichenden Rechten mit, um eine ggf. erforderliche Analyse über den Fernzugriff zu ermöglichen. Ohne Zugangsdaten ist ein Zugriff durch unseren Support nicht möglich und der Prozess wird unnötig erschwert und verzögert. ",-1)])]),_:1})):k("",!0),o("div",j,[s(B,{class:M(["col-4",r.enableSendDebugButton?"btn-success":"btn-outline-success"]),disabled:!r.enableSendDebugButton,onButtonClicked:u.checkFirmware},{default:n(()=>[...e[40]||(e[40]=[t(" Absenden ",-1)])]),_:1},8,["class","disabled","onButtonClicked"])])]),key:"0"}:void 0]),1024),r.enableSendDebugButton?k("",!0):(b(),w(p,{key:0,subtype:"success"},{default:n(()=>[e[41]||(e[41]=t(" Die Daten für den Fehlerbericht werden im Hintergrund zusammengestellt. Du kannst diese Seite jetzt verlassen. ",-1)),s(D,{icon:["fas","check"]})]),_:1}))]))])])],64)}const O=A(x,[["render",H],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/Support.vue"]]);export{O as default}; diff --git a/web/settings/assets/SurplusChargeConfiguration-BuCou0oD.js b/web/settings/assets/SurplusChargeConfiguration-D6tHbDfg.js similarity index 99% rename from web/settings/assets/SurplusChargeConfiguration-BuCou0oD.js rename to web/settings/assets/SurplusChargeConfiguration-D6tHbDfg.js index 1c51952711..428a29b867 100644 --- a/web/settings/assets/SurplusChargeConfiguration-BuCou0oD.js +++ b/web/settings/assets/SurplusChargeConfiguration-D6tHbDfg.js @@ -1 +1 @@ -import{C as _}from"./index-Bv2WLdLZ.js";import{S as z}from"./SystemVersion-eCZ4XHiC.js";import{l as B,a4 as y,ag as k,ah as S}from"./vendor-fortawesome-DplTMxoa.js";import{_ as V,m as g,l as a,f as u,y as s,q as i,u as l,B as t,x as c,J as q}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";B.add(y,k,S);const E={name:"OpenwbSurplusChargeConfigView",components:{},mixins:[_,z],emits:["save","reset","defaults"],data(){return{showFeedInHelp:!1,mqttTopics:[{topic:"openWB/general/chargemode_config/surplus/control_range",writeable:!0},{topic:"openWB/general/chargemode_config/surplus/feed_in_limit",writeable:!0},{topic:"openWB/general/chargemode_config/surplus/feed_in_yield",writeable:!0},{topic:"openWB/general/chargemode_config/surplus/vehicle/phase_switch_delay",writeable:!0},{topic:"openWB/general/chargemode_config/surplus/vehicle/retry_failed_phase_switches",writeable:!0},{topic:"openWB/general/chargemode_config/surplus/vehicle/switch_off_delay",writeable:!0},{topic:"openWB/general/chargemode_config/surplus/vehicle/switch_off_threshold",writeable:!0},{topic:"openWB/general/chargemode_config/surplus/vehicle/switch_on_delay",writeable:!0},{topic:"openWB/general/chargemode_config/surplus/vehicle/switch_on_threshold",writeable:!0},{topic:"openWB/general/chargemode_config/surplus/consumer/switch_off_delay",writeable:!0},{topic:"openWB/general/chargemode_config/surplus/consumer/switch_off_threshold",writeable:!0},{topic:"openWB/general/chargemode_config/surplus/consumer/switch_on_delay",writeable:!0},{topic:"openWB/general/extern",writeable:!1}],calculatedControlMode:void 0}},computed:{controlMode:{get(){if(this.calculatedControlMode!==void 0)return this.calculatedControlMode;let e=this.$store.state.mqtt["openWB/general/chargemode_config/surplus/control_range"];var h="individual";return typeof e<"u"&&(e[0]===-230&&e[1]===0?h="export":e[0]===0&&e[1]===230?h="import":e[0]===-115&&e[1]===115?h="balanced":h="individual"),h},set(n){const e="openWB/general/chargemode_config/surplus/control_range";switch(this.calculatedControlMode=n,n){case"export":this.updateState(e,[-230,0]);break;case"import":this.updateState(e,[0,230]);break;case"balanced":this.updateState(e,[-115,115]);break}}},chargingSwitchRange:{get(){return this.$store.state.mqtt["openWB/general/chargemode_config/surplus/vehicle/switch_on_threshold"]+this.$store.state.mqtt["openWB/general/chargemode_config/surplus/vehicle/switch_off_threshold"]}}},watch:{controlMode(n){this.calculatedControlMode=n}}},L={class:"pvChargeConfig"},U={name:"pvChargeConfigForm"},C={key:0},P={key:1},$=["href"],A={key:0,class:"form-row mb-2"},D={class:"col"},M={class:"form-label d-flex align-items-center flex-wrap"},N=["value"],R={key:0,class:"form-text alert alert-info mt-2 small"},F=["href"],I={key:0},Z={key:1},H={key:0},O={key:1};function T(n,e,h,G,m,d){const p=g("openwb-base-alert"),f=g("openwb-base-button-group-input"),w=g("font-awesome-icon"),v=g("openwb-base-tooltip"),o=g("openwb-base-number-input"),b=g("openwb-base-card"),W=g("openwb-base-submit-buttons");return a(),u("div",L,[s("form",U,[i(b,{title:"Allgemein"},{default:l(()=>[n.$store.state.mqtt["openWB/general/extern"]===!0?(a(),u("div",C,[i(p,{subtype:"info"},{default:l(()=>[...e[18]||(e[18]=[t(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(a(),u("div",P,[i(f,{title:"Überschusseinspeisung ins Netz maximieren",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":n.$store.state.mqtt["openWB/general/chargemode_config/surplus/feed_in_limit"],"onUpdate:modelValue":e[0]||(e[0]=r=>n.updateState("openWB/general/chargemode_config/surplus/feed_in_limit",r))},{help:l(()=>[e[19]||(e[19]=t(" Die Nutzung dieser Option ergibt nur Sinn, wenn ein Wechselrichter in irgendeiner Form abgeregelt wird Weitere Infos dazu im ",-1)),s("a",{href:`https://wiki.openwb.de/doku.php?id=openwb:vc:${n.systemVersion}:software:einstell-konfig:ladeeinstellungen:pv-laden-speicherbeachtung#regelpunkt_einspeisegrenze`,target:"_blank",rel:"noopener noreferrer"}," Wiki-Beitrag zur Beachtung der Einspeisegrenze ",8,$),e[20]||(e[20]=t(".",-1)),e[21]||(e[21]=s("br",null,null,-1))]),_:1},8,["model-value"]),n.$store.state.mqtt["openWB/general/chargemode_config/surplus/feed_in_limit"]?(a(),u("div",A,[s("div",D,[s("label",M,[e[22]||(e[22]=t(" Einspeisung von ",-1)),s("input",{type:"number",min:-1e3,step:.05,required:"",class:"form-control d-inline-block mx-2",style:{width:"120px"},value:n.$store.state.mqtt["openWB/general/chargemode_config/surplus/feed_in_yield"]/1e3,onInput:e[1]||(e[1]=r=>n.updateState("openWB/general/chargemode_config/surplus/feed_in_yield",parseFloat(r.target.value)*1e3))},null,40,N),e[23]||(e[23]=t(" kW des Überschusses ins Netz forcieren ",-1)),i(v,{description:"Hilfe anzeigen"},{default:l(()=>[i(w,{icon:["far","question-circle"],class:"clickable ml-2",onClick:e[2]||(e[2]=r=>m.showFeedInHelp=!m.showFeedInHelp)})]),_:1})]),m.showFeedInHelp?(a(),u("div",R,[e[24]||(e[24]=t(" Ein Wert größer 0kW bewirkt, dass weniger PV-Leistung zum Laden benutzt wird.",-1)),e[25]||(e[25]=s("br",null,null,-1)),e[26]||(e[26]=t(" Die Nutzung dieser Option ergibt nur Sinn, wenn ein Wechselrichter in irgendeiner Form abgeregelt wird. Weitere Infos dazu im ",-1)),s("a",{href:`https://wiki.openwb.de/doku.php?id=openwb:vc:${n.systemVersion}:software:einstell-konfig:ladeeinstellungen:pv-laden-speicherbeachtung#regelpunkt_einspeisegrenze`,target:"_blank",rel:"noopener noreferrer"}," Wiki-Beitrag zur Beachtung der Einspeisegrenze ",8,F),e[27]||(e[27]=t(".",-1)),e[28]||(e[28]=s("br",null,null,-1)),e[29]||(e[29]=t(" Bei Erreichen dieses Werts wird die PV-Ladung nacheinander für jedes Fahrzeug im PV-Modus gestartet. Dies setzt die Einschaltschwelle außer Kraft!",-1)),e[30]||(e[30]=s("br",null,null,-1)),e[31]||(e[31]=t(" Zur optimalen Eigenverbrauchssteuerung sollte der Wert einige hundert Watt UNTER der im Wechselrichter hinterlegten EVU-Einspeiseleistungsgrenze liegen, damit openWB die Ladung freigibt, BEVOR der Wechselrichter begrenzt wird. ",-1))])):c("",!0)])])):c("",!0),e[35]||(e[35]=s("hr",null,null,-1)),i(f,{modelValue:d.controlMode,"onUpdate:modelValue":e[3]||(e[3]=r=>d.controlMode=r),title:"Regelmodus",buttons:[{buttonValue:"export",text:"Einspeisung"},{buttonValue:"import",text:"Bezug"},{buttonValue:"balanced",text:"Ausgewogen"},{buttonValue:"individual",text:"Individuell"}]},{help:l(()=>[...e[32]||(e[32]=[t(" Die Ladeleistung kann nicht mit absoluter Genauigkeit eingestellt werden, sodass am EVU-Punkt nicht auf exakt 0W geregelt werden kann. Der Regelmodus legt fest, ob diese Differenz am EVU-Punkt (ca. 200-300W) zu geringem Netzbezug oder geringer Netzeinspeisung führen soll. Liegt die Leistung am EVU-Punkt innerhalb des Regelbereichs, wird nicht nachgeregelt.",-1),s("br",null,null,-1),t(" Bei Speichervorrang erzeugt die Regelung bei Bedarf unabhängig vom eingestellten Regelmodus Einspeisung, damit der Speicher seine Ladeleistung erhöht.",-1),s("br",null,null,-1),t(" Achtung: bei unlogischen Einstellungen kann die Regelung gestört werden! Im Zweifel bitte unsere vordefinierten Modi verwenden. ",-1)])]),_:1},8,["modelValue"]),i(o,{disabled:d.controlMode!=="individual",readonly:d.controlMode!=="individual",title:"Minimum",step:.005,unit:"kW",required:"","model-value":Array.isArray(n.$store.state.mqtt["openWB/general/chargemode_config/surplus/control_range"])?n.$store.state.mqtt["openWB/general/chargemode_config/surplus/control_range"][0]/1e3:void 0,"onUpdate:modelValue":e[4]||(e[4]=r=>n.updateState("openWB/general/chargemode_config/surplus/control_range",r*1e3,"0"))},{help:l(()=>[...e[33]||(e[33]=[t(" Untere Grenze des Regelbereichs. ",-1)])]),_:1},8,["disabled","readonly","model-value"]),i(o,{disabled:d.controlMode!=="individual",readonly:d.controlMode!=="individual",title:"Maximum",step:.005,unit:"kW",required:"","model-value":Array.isArray(n.$store.state.mqtt["openWB/general/chargemode_config/surplus/control_range"])?n.$store.state.mqtt["openWB/general/chargemode_config/surplus/control_range"][1]/1e3:void 0,"onUpdate:modelValue":e[5]||(e[5]=r=>n.updateState("openWB/general/chargemode_config/surplus/control_range",r*1e3,"1"))},{help:l(()=>[...e[34]||(e[34]=[t(" Obere Grenze des Regelbereichs. ",-1)])]),_:1},8,["disabled","readonly","model-value"])]))]),_:1}),i(b,{title:"Fahrzeuge"},{default:l(()=>[n.$store.state.mqtt["openWB/general/extern"]===!0?(a(),u("div",I,[i(p,{subtype:"info"},{default:l(()=>[...e[36]||(e[36]=[t(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(a(),u("div",Z,[i(p,{subtype:d.chargingSwitchRange<1400?"danger":"info"},{default:l(()=>[t(" Die Differenzleistung zw. Ein- und Abschaltschwelle sollte mind. 1,4 kW (230V x 6A) betragen. (Konfiguriert: "+q((d.chargingSwitchRange/1e3).toLocaleString(void 0))+" kW) ",1)]),_:1},8,["subtype"]),i(o,{title:"Einschaltschwelle",min:0,step:.05,unit:"kW",required:"","model-value":n.$store.state.mqtt["openWB/general/chargemode_config/surplus/vehicle/switch_on_threshold"]/1e3,"onUpdate:modelValue":e[6]||(e[6]=r=>n.updateState("openWB/general/chargemode_config/surplus/vehicle/switch_on_threshold",r*1e3))},{help:l(()=>[...e[37]||(e[37]=[t(" Wird der Regelbereich in Richtung Einspeisung um diese Leistung überschritten, so wird der Ladevorgang gestartet.",-1),s("br",null,null,-1),t(" Dieser Wert wird pro Phase genutzt und ist daher immer für eine Phase anzugeben. ",-1)])]),_:1},8,["model-value"]),i(o,{title:"Wartezeit Ladestart & Phasenzuschaltung",min:0,step:1,unit:"s",required:"","model-value":n.$store.state.mqtt["openWB/general/chargemode_config/surplus/vehicle/switch_on_delay"],"onUpdate:modelValue":e[7]||(e[7]=r=>n.updateState("openWB/general/chargemode_config/surplus/vehicle/switch_on_delay",r))},{help:l(()=>[...e[38]||(e[38]=[t(" Die Einschaltschwelle muss für die hier angegebene Zeit dauerhaft überschritten werden, bevor ein Ladevorgang gestartet wird.",-1),s("br",null,null,-1),t(" Wenn ein Ladevorgang aktiv ist und auf PV-Laden umgeschaltet wird, wird weiter geladen, wenn die Abschaltschwelle nicht unterschritten wird.",-1),s("br",null,null,-1),t(" Wenn die Pufferzeit zwischen zwei automatischen Phasenumschaltungen abgelaufen ist, wird die hier eingestellte Wartezeit abgewartet. Wenn die Pufferzeit zwischen zwei Umschaltungen noch nicht erreicht ist, wird die längere der beiden Zeiten abgewartet: entweder die verbleibende Pufferzeit oder die Wartezeit. ",-1)])]),_:1},8,["model-value"]),e[44]||(e[44]=s("hr",null,null,-1)),i(p,{subtype:n.$store.state.mqtt["openWB/general/chargemode_config/surplus/vehicle/switch_off_threshold"]/1e3>0?"danger":"info"},{default:l(()=>[...e[39]||(e[39]=[t(" Ist ein Speicher im System vorhanden, kann eine Abschaltschwelle größer Null zur Speicherentladung führen. (Siehe Fragezeichentext) ",-1)])]),_:1},8,["subtype"]),i(o,{title:"Abschaltschwelle",step:.05,unit:"kW",required:"","model-value":n.$store.state.mqtt["openWB/general/chargemode_config/surplus/vehicle/switch_off_threshold"]/1e3,"onUpdate:modelValue":e[8]||(e[8]=r=>n.updateState("openWB/general/chargemode_config/surplus/vehicle/switch_off_threshold",r*1e3))},{help:l(()=>[...e[40]||(e[40]=[t(" Übersteigt der Netzbezug die Abschaltschwelle, wird die Ladung beendet. Eine Abschaltschwelle, die Netzbezug erlaubt, führt in einem System ohne steuerbaren Speicher zur Entladung des Speichers. Der Speicher wird dann auch über den eingestellten Mindest-SoC hinaus entladen (siehe Speicherbeachtung unten). ",-1)])]),_:1},8,["model-value"]),i(o,{title:"Wartezeit Ladeende & Phasenreduktion",min:0,step:1,unit:"s",required:"","model-value":n.$store.state.mqtt["openWB/general/chargemode_config/surplus/vehicle/switch_off_delay"],"onUpdate:modelValue":e[9]||(e[9]=r=>n.updateState("openWB/general/chargemode_config/surplus/vehicle/switch_off_delay",r))},{help:l(()=>[...e[41]||(e[41]=[t(" Die Abschaltschwelle muss für die hier angegebene Zeit dauerhaft unterschritten werden, bevor ein Ladevorgang beendet wird.",-1),s("br",null,null,-1),t(" Wenn ein Ladevorgang aktiv ist und auf PV-Laden umgeschaltet wird, wird die Ladung sofort beendet, wenn die Abschaltschwelle unterschritten wird.",-1),s("br",null,null,-1),t(" Wenn die Pufferzeit zwischen zwei automatischen Phasenumschaltungen abgelaufen ist, wird die hier eingestellte Wartezeit abgewartet. Wenn die Pufferzeit zwischen zwei Umschaltungen noch nicht erreicht ist, wird die längere der beiden Zeiten abgewartet: entweder die verbleibende Pufferzeit oder die Wartezeit. ",-1)])]),_:1},8,["model-value"]),e[45]||(e[45]=s("hr",null,null,-1)),i(f,{title:"Phasenumschaltung wiederholt anstoßen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":n.$store.state.mqtt["openWB/general/chargemode_config/surplus/vehicle/retry_failed_phase_switches"],"onUpdate:modelValue":e[10]||(e[10]=r=>n.updateState("openWB/general/chargemode_config/surplus/vehicle/retry_failed_phase_switches",r))},{help:l(()=>[...e[42]||(e[42]=[t(" Phasenumschaltungen werden zum Schutz der EV- und WB-Hardware begrenzt.",-1),s("br",null,null,-1),t(" Wenn diese Option aktiviert ist, werden bis zu zwei Umschaltversuche vorgenommen, wenn die vorgegebene und genutzte Phasenzahl nicht übereinstimmen. Wird die Option deaktiviert, wird nur eine Umschaltung durchgeführt.",-1),s("br",null,null,-1),t(" Die gezählten Fehlversuche werden beim nächsten Wechsel des Lademodus oder mit dem Abstecken zurückgesetzt. ",-1)])]),_:1},8,["model-value"]),i(o,{title:"Pufferzeit zwischen automat. Phasenumschaltungen",unit:"Min.",min:5,max:180,step:1,"model-value":n.$store.state.mqtt["openWB/general/chargemode_config/surplus/vehicle/phase_switch_delay"],"onUpdate:modelValue":e[11]||(e[11]=r=>n.updateState("openWB/general/chargemode_config/surplus/vehicle/phase_switch_delay",r))},{help:l(()=>[...e[43]||(e[43]=[t(" Um zu viele Umschaltungen zu vermeiden, wird mindestens die hier eingestellte Zeit zwischen zwei Umschaltungen abgewartet. Das Umschalten auf mehrphasiges Laden erfolgt nur, wenn mit der maximalen Stromstärke geladen wird und genug Leistung für mehrphasiges Laden zur Verfügung steht. Auf einphasiges Laden wird zurückgeschaltet, wenn auf die minimale Stromstärke heruntergeregelt wurde. Die Verzögerung wird nur bei der automatischen Phasenumschaltung bei Überschuss-Laden abgewartet.",-1),s("br",null,null,-1),t(" Ist ausreichend Überschuss vorhanden, wird beim Ladestart die Umschaltverzögerung nicht abgewartet, sondern direkt mit mehrphasiger Ladung begonnen. ",-1)])]),_:1},8,["model-value"])]))]),_:1}),i(b,{title:"Verbraucher"},{default:l(()=>[n.$store.state.mqtt["openWB/general/extern"]===!0?(a(),u("div",H,[i(p,{subtype:"info"},{default:l(()=>[...e[46]||(e[46]=[t(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(a(),u("div",O,[i(o,{title:"Wartezeit Einschalten",min:0,step:1,unit:"s",required:"","model-value":n.$store.state.mqtt["openWB/general/chargemode_config/surplus/consumer/switch_on_delay"],"onUpdate:modelValue":e[12]||(e[12]=r=>n.updateState("openWB/general/chargemode_config/surplus/consumer/switch_on_delay",r))},{help:l(()=>[...e[47]||(e[47]=[t(" Der Überschuss muss für die hier angegebene Zeit dauerhaft über der minimalen Betriebsleistung liegen, bevor ein Verbraucher eingeschaltet wird. ",-1)])]),_:1},8,["model-value"]),e[51]||(e[51]=s("hr",null,null,-1)),i(p,{subtype:n.$store.state.mqtt["openWB/general/chargemode_config/surplus/consumer/switch_off_threshold"]/1e3>0?"danger":"info"},{default:l(()=>[...e[48]||(e[48]=[t(" Ist ein Speicher im System vorhanden, kann eine Abschaltschwelle größer Null zur Speicherentladung führen. (Siehe Fragezeichentext) ",-1)])]),_:1},8,["subtype"]),i(o,{title:"Abschaltschwelle",step:.05,unit:"kW",required:"","model-value":n.$store.state.mqtt["openWB/general/chargemode_config/surplus/consumer/switch_off_threshold"]/1e3,"onUpdate:modelValue":e[13]||(e[13]=r=>n.updateState("openWB/general/chargemode_config/surplus/consumer/switch_off_threshold",r*1e3))},{help:l(()=>[...e[49]||(e[49]=[t(" Übersteigt der Netzbezug die Abschaltschwelle, wird der Betrieb beendet, sofern das minimale Regelintervall überschritten wurde. Eine Abschaltschwelle, die Netzbezug erlaubt, führt in einem System ohne steuerbaren Speicher zur Entladung des Speichers. Der Speicher wird dann auch über den eingestellten Mindest-SoC hinaus entladen (siehe Speicherbeachtung unten). ",-1)])]),_:1},8,["model-value"]),i(o,{title:"Wartezeit Ausschalten",min:0,step:1,unit:"s",required:"","model-value":n.$store.state.mqtt["openWB/general/chargemode_config/surplus/consumer/switch_off_delay"],"onUpdate:modelValue":e[14]||(e[14]=r=>n.updateState("openWB/general/chargemode_config/surplus/consumer/switch_off_delay",r))},{help:l(()=>[...e[50]||(e[50]=[t(" Die Abschaltschwelle muss für die hier angegebene Zeit dauerhaft unterschritten werden, bevor der Betrieb beendet wird. ",-1)])]),_:1},8,["model-value"])]))]),_:1}),i(W,{"form-name":"pvChargeConfigForm",onSave:e[15]||(e[15]=r=>n.$emit("save",n.mqttTopicsToPublish)),onReset:e[16]||(e[16]=r=>n.$emit("reset")),onDefaults:e[17]||(e[17]=r=>n.$emit("defaults"))})])])}const ee=V(E,[["render",T],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/SurplusChargeConfiguration.vue"]]);export{ee as default}; +import{C as _}from"./index-CE-5DBwq.js";import{S as z}from"./SystemVersion-eCZ4XHiC.js";import{l as B,a4 as y,ag as k,ah as S}from"./vendor-fortawesome-DplTMxoa.js";import{_ as V,m as g,l as a,f as u,y as s,q as i,u as l,B as t,x as c,J as q}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";B.add(y,k,S);const E={name:"OpenwbSurplusChargeConfigView",components:{},mixins:[_,z],emits:["save","reset","defaults"],data(){return{showFeedInHelp:!1,mqttTopics:[{topic:"openWB/general/chargemode_config/surplus/control_range",writeable:!0},{topic:"openWB/general/chargemode_config/surplus/feed_in_limit",writeable:!0},{topic:"openWB/general/chargemode_config/surplus/feed_in_yield",writeable:!0},{topic:"openWB/general/chargemode_config/surplus/vehicle/phase_switch_delay",writeable:!0},{topic:"openWB/general/chargemode_config/surplus/vehicle/retry_failed_phase_switches",writeable:!0},{topic:"openWB/general/chargemode_config/surplus/vehicle/switch_off_delay",writeable:!0},{topic:"openWB/general/chargemode_config/surplus/vehicle/switch_off_threshold",writeable:!0},{topic:"openWB/general/chargemode_config/surplus/vehicle/switch_on_delay",writeable:!0},{topic:"openWB/general/chargemode_config/surplus/vehicle/switch_on_threshold",writeable:!0},{topic:"openWB/general/chargemode_config/surplus/consumer/switch_off_delay",writeable:!0},{topic:"openWB/general/chargemode_config/surplus/consumer/switch_off_threshold",writeable:!0},{topic:"openWB/general/chargemode_config/surplus/consumer/switch_on_delay",writeable:!0},{topic:"openWB/general/extern",writeable:!1}],calculatedControlMode:void 0}},computed:{controlMode:{get(){if(this.calculatedControlMode!==void 0)return this.calculatedControlMode;let e=this.$store.state.mqtt["openWB/general/chargemode_config/surplus/control_range"];var h="individual";return typeof e<"u"&&(e[0]===-230&&e[1]===0?h="export":e[0]===0&&e[1]===230?h="import":e[0]===-115&&e[1]===115?h="balanced":h="individual"),h},set(n){const e="openWB/general/chargemode_config/surplus/control_range";switch(this.calculatedControlMode=n,n){case"export":this.updateState(e,[-230,0]);break;case"import":this.updateState(e,[0,230]);break;case"balanced":this.updateState(e,[-115,115]);break}}},chargingSwitchRange:{get(){return this.$store.state.mqtt["openWB/general/chargemode_config/surplus/vehicle/switch_on_threshold"]+this.$store.state.mqtt["openWB/general/chargemode_config/surplus/vehicle/switch_off_threshold"]}}},watch:{controlMode(n){this.calculatedControlMode=n}}},L={class:"pvChargeConfig"},U={name:"pvChargeConfigForm"},C={key:0},P={key:1},$=["href"],A={key:0,class:"form-row mb-2"},D={class:"col"},M={class:"form-label d-flex align-items-center flex-wrap"},N=["value"],R={key:0,class:"form-text alert alert-info mt-2 small"},F=["href"],I={key:0},Z={key:1},H={key:0},O={key:1};function T(n,e,h,G,m,d){const p=g("openwb-base-alert"),f=g("openwb-base-button-group-input"),w=g("font-awesome-icon"),v=g("openwb-base-tooltip"),o=g("openwb-base-number-input"),b=g("openwb-base-card"),W=g("openwb-base-submit-buttons");return a(),u("div",L,[s("form",U,[i(b,{title:"Allgemein"},{default:l(()=>[n.$store.state.mqtt["openWB/general/extern"]===!0?(a(),u("div",C,[i(p,{subtype:"info"},{default:l(()=>[...e[18]||(e[18]=[t(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(a(),u("div",P,[i(f,{title:"Überschusseinspeisung ins Netz maximieren",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":n.$store.state.mqtt["openWB/general/chargemode_config/surplus/feed_in_limit"],"onUpdate:modelValue":e[0]||(e[0]=r=>n.updateState("openWB/general/chargemode_config/surplus/feed_in_limit",r))},{help:l(()=>[e[19]||(e[19]=t(" Die Nutzung dieser Option ergibt nur Sinn, wenn ein Wechselrichter in irgendeiner Form abgeregelt wird Weitere Infos dazu im ",-1)),s("a",{href:`https://wiki.openwb.de/doku.php?id=openwb:vc:${n.systemVersion}:software:einstell-konfig:ladeeinstellungen:pv-laden-speicherbeachtung#regelpunkt_einspeisegrenze`,target:"_blank",rel:"noopener noreferrer"}," Wiki-Beitrag zur Beachtung der Einspeisegrenze ",8,$),e[20]||(e[20]=t(".",-1)),e[21]||(e[21]=s("br",null,null,-1))]),_:1},8,["model-value"]),n.$store.state.mqtt["openWB/general/chargemode_config/surplus/feed_in_limit"]?(a(),u("div",A,[s("div",D,[s("label",M,[e[22]||(e[22]=t(" Einspeisung von ",-1)),s("input",{type:"number",min:-1e3,step:.05,required:"",class:"form-control d-inline-block mx-2",style:{width:"120px"},value:n.$store.state.mqtt["openWB/general/chargemode_config/surplus/feed_in_yield"]/1e3,onInput:e[1]||(e[1]=r=>n.updateState("openWB/general/chargemode_config/surplus/feed_in_yield",parseFloat(r.target.value)*1e3))},null,40,N),e[23]||(e[23]=t(" kW des Überschusses ins Netz forcieren ",-1)),i(v,{description:"Hilfe anzeigen"},{default:l(()=>[i(w,{icon:["far","question-circle"],class:"clickable ml-2",onClick:e[2]||(e[2]=r=>m.showFeedInHelp=!m.showFeedInHelp)})]),_:1})]),m.showFeedInHelp?(a(),u("div",R,[e[24]||(e[24]=t(" Ein Wert größer 0kW bewirkt, dass weniger PV-Leistung zum Laden benutzt wird.",-1)),e[25]||(e[25]=s("br",null,null,-1)),e[26]||(e[26]=t(" Die Nutzung dieser Option ergibt nur Sinn, wenn ein Wechselrichter in irgendeiner Form abgeregelt wird. Weitere Infos dazu im ",-1)),s("a",{href:`https://wiki.openwb.de/doku.php?id=openwb:vc:${n.systemVersion}:software:einstell-konfig:ladeeinstellungen:pv-laden-speicherbeachtung#regelpunkt_einspeisegrenze`,target:"_blank",rel:"noopener noreferrer"}," Wiki-Beitrag zur Beachtung der Einspeisegrenze ",8,F),e[27]||(e[27]=t(".",-1)),e[28]||(e[28]=s("br",null,null,-1)),e[29]||(e[29]=t(" Bei Erreichen dieses Werts wird die PV-Ladung nacheinander für jedes Fahrzeug im PV-Modus gestartet. Dies setzt die Einschaltschwelle außer Kraft!",-1)),e[30]||(e[30]=s("br",null,null,-1)),e[31]||(e[31]=t(" Zur optimalen Eigenverbrauchssteuerung sollte der Wert einige hundert Watt UNTER der im Wechselrichter hinterlegten EVU-Einspeiseleistungsgrenze liegen, damit openWB die Ladung freigibt, BEVOR der Wechselrichter begrenzt wird. ",-1))])):c("",!0)])])):c("",!0),e[35]||(e[35]=s("hr",null,null,-1)),i(f,{modelValue:d.controlMode,"onUpdate:modelValue":e[3]||(e[3]=r=>d.controlMode=r),title:"Regelmodus",buttons:[{buttonValue:"export",text:"Einspeisung"},{buttonValue:"import",text:"Bezug"},{buttonValue:"balanced",text:"Ausgewogen"},{buttonValue:"individual",text:"Individuell"}]},{help:l(()=>[...e[32]||(e[32]=[t(" Die Ladeleistung kann nicht mit absoluter Genauigkeit eingestellt werden, sodass am EVU-Punkt nicht auf exakt 0W geregelt werden kann. Der Regelmodus legt fest, ob diese Differenz am EVU-Punkt (ca. 200-300W) zu geringem Netzbezug oder geringer Netzeinspeisung führen soll. Liegt die Leistung am EVU-Punkt innerhalb des Regelbereichs, wird nicht nachgeregelt.",-1),s("br",null,null,-1),t(" Bei Speichervorrang erzeugt die Regelung bei Bedarf unabhängig vom eingestellten Regelmodus Einspeisung, damit der Speicher seine Ladeleistung erhöht.",-1),s("br",null,null,-1),t(" Achtung: bei unlogischen Einstellungen kann die Regelung gestört werden! Im Zweifel bitte unsere vordefinierten Modi verwenden. ",-1)])]),_:1},8,["modelValue"]),i(o,{disabled:d.controlMode!=="individual",readonly:d.controlMode!=="individual",title:"Minimum",step:.005,unit:"kW",required:"","model-value":Array.isArray(n.$store.state.mqtt["openWB/general/chargemode_config/surplus/control_range"])?n.$store.state.mqtt["openWB/general/chargemode_config/surplus/control_range"][0]/1e3:void 0,"onUpdate:modelValue":e[4]||(e[4]=r=>n.updateState("openWB/general/chargemode_config/surplus/control_range",r*1e3,"0"))},{help:l(()=>[...e[33]||(e[33]=[t(" Untere Grenze des Regelbereichs. ",-1)])]),_:1},8,["disabled","readonly","model-value"]),i(o,{disabled:d.controlMode!=="individual",readonly:d.controlMode!=="individual",title:"Maximum",step:.005,unit:"kW",required:"","model-value":Array.isArray(n.$store.state.mqtt["openWB/general/chargemode_config/surplus/control_range"])?n.$store.state.mqtt["openWB/general/chargemode_config/surplus/control_range"][1]/1e3:void 0,"onUpdate:modelValue":e[5]||(e[5]=r=>n.updateState("openWB/general/chargemode_config/surplus/control_range",r*1e3,"1"))},{help:l(()=>[...e[34]||(e[34]=[t(" Obere Grenze des Regelbereichs. ",-1)])]),_:1},8,["disabled","readonly","model-value"])]))]),_:1}),i(b,{title:"Fahrzeuge"},{default:l(()=>[n.$store.state.mqtt["openWB/general/extern"]===!0?(a(),u("div",I,[i(p,{subtype:"info"},{default:l(()=>[...e[36]||(e[36]=[t(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(a(),u("div",Z,[i(p,{subtype:d.chargingSwitchRange<1400?"danger":"info"},{default:l(()=>[t(" Die Differenzleistung zw. Ein- und Abschaltschwelle sollte mind. 1,4 kW (230V x 6A) betragen. (Konfiguriert: "+q((d.chargingSwitchRange/1e3).toLocaleString(void 0))+" kW) ",1)]),_:1},8,["subtype"]),i(o,{title:"Einschaltschwelle",min:0,step:.05,unit:"kW",required:"","model-value":n.$store.state.mqtt["openWB/general/chargemode_config/surplus/vehicle/switch_on_threshold"]/1e3,"onUpdate:modelValue":e[6]||(e[6]=r=>n.updateState("openWB/general/chargemode_config/surplus/vehicle/switch_on_threshold",r*1e3))},{help:l(()=>[...e[37]||(e[37]=[t(" Wird der Regelbereich in Richtung Einspeisung um diese Leistung überschritten, so wird der Ladevorgang gestartet.",-1),s("br",null,null,-1),t(" Dieser Wert wird pro Phase genutzt und ist daher immer für eine Phase anzugeben. ",-1)])]),_:1},8,["model-value"]),i(o,{title:"Wartezeit Ladestart & Phasenzuschaltung",min:0,step:1,unit:"s",required:"","model-value":n.$store.state.mqtt["openWB/general/chargemode_config/surplus/vehicle/switch_on_delay"],"onUpdate:modelValue":e[7]||(e[7]=r=>n.updateState("openWB/general/chargemode_config/surplus/vehicle/switch_on_delay",r))},{help:l(()=>[...e[38]||(e[38]=[t(" Die Einschaltschwelle muss für die hier angegebene Zeit dauerhaft überschritten werden, bevor ein Ladevorgang gestartet wird.",-1),s("br",null,null,-1),t(" Wenn ein Ladevorgang aktiv ist und auf PV-Laden umgeschaltet wird, wird weiter geladen, wenn die Abschaltschwelle nicht unterschritten wird.",-1),s("br",null,null,-1),t(" Wenn die Pufferzeit zwischen zwei automatischen Phasenumschaltungen abgelaufen ist, wird die hier eingestellte Wartezeit abgewartet. Wenn die Pufferzeit zwischen zwei Umschaltungen noch nicht erreicht ist, wird die längere der beiden Zeiten abgewartet: entweder die verbleibende Pufferzeit oder die Wartezeit. ",-1)])]),_:1},8,["model-value"]),e[44]||(e[44]=s("hr",null,null,-1)),i(p,{subtype:n.$store.state.mqtt["openWB/general/chargemode_config/surplus/vehicle/switch_off_threshold"]/1e3>0?"danger":"info"},{default:l(()=>[...e[39]||(e[39]=[t(" Ist ein Speicher im System vorhanden, kann eine Abschaltschwelle größer Null zur Speicherentladung führen. (Siehe Fragezeichentext) ",-1)])]),_:1},8,["subtype"]),i(o,{title:"Abschaltschwelle",step:.05,unit:"kW",required:"","model-value":n.$store.state.mqtt["openWB/general/chargemode_config/surplus/vehicle/switch_off_threshold"]/1e3,"onUpdate:modelValue":e[8]||(e[8]=r=>n.updateState("openWB/general/chargemode_config/surplus/vehicle/switch_off_threshold",r*1e3))},{help:l(()=>[...e[40]||(e[40]=[t(" Übersteigt der Netzbezug die Abschaltschwelle, wird die Ladung beendet. Eine Abschaltschwelle, die Netzbezug erlaubt, führt in einem System ohne steuerbaren Speicher zur Entladung des Speichers. Der Speicher wird dann auch über den eingestellten Mindest-SoC hinaus entladen (siehe Speicherbeachtung unten). ",-1)])]),_:1},8,["model-value"]),i(o,{title:"Wartezeit Ladeende & Phasenreduktion",min:0,step:1,unit:"s",required:"","model-value":n.$store.state.mqtt["openWB/general/chargemode_config/surplus/vehicle/switch_off_delay"],"onUpdate:modelValue":e[9]||(e[9]=r=>n.updateState("openWB/general/chargemode_config/surplus/vehicle/switch_off_delay",r))},{help:l(()=>[...e[41]||(e[41]=[t(" Die Abschaltschwelle muss für die hier angegebene Zeit dauerhaft unterschritten werden, bevor ein Ladevorgang beendet wird.",-1),s("br",null,null,-1),t(" Wenn ein Ladevorgang aktiv ist und auf PV-Laden umgeschaltet wird, wird die Ladung sofort beendet, wenn die Abschaltschwelle unterschritten wird.",-1),s("br",null,null,-1),t(" Wenn die Pufferzeit zwischen zwei automatischen Phasenumschaltungen abgelaufen ist, wird die hier eingestellte Wartezeit abgewartet. Wenn die Pufferzeit zwischen zwei Umschaltungen noch nicht erreicht ist, wird die längere der beiden Zeiten abgewartet: entweder die verbleibende Pufferzeit oder die Wartezeit. ",-1)])]),_:1},8,["model-value"]),e[45]||(e[45]=s("hr",null,null,-1)),i(f,{title:"Phasenumschaltung wiederholt anstoßen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":n.$store.state.mqtt["openWB/general/chargemode_config/surplus/vehicle/retry_failed_phase_switches"],"onUpdate:modelValue":e[10]||(e[10]=r=>n.updateState("openWB/general/chargemode_config/surplus/vehicle/retry_failed_phase_switches",r))},{help:l(()=>[...e[42]||(e[42]=[t(" Phasenumschaltungen werden zum Schutz der EV- und WB-Hardware begrenzt.",-1),s("br",null,null,-1),t(" Wenn diese Option aktiviert ist, werden bis zu zwei Umschaltversuche vorgenommen, wenn die vorgegebene und genutzte Phasenzahl nicht übereinstimmen. Wird die Option deaktiviert, wird nur eine Umschaltung durchgeführt.",-1),s("br",null,null,-1),t(" Die gezählten Fehlversuche werden beim nächsten Wechsel des Lademodus oder mit dem Abstecken zurückgesetzt. ",-1)])]),_:1},8,["model-value"]),i(o,{title:"Pufferzeit zwischen automat. Phasenumschaltungen",unit:"Min.",min:5,max:180,step:1,"model-value":n.$store.state.mqtt["openWB/general/chargemode_config/surplus/vehicle/phase_switch_delay"],"onUpdate:modelValue":e[11]||(e[11]=r=>n.updateState("openWB/general/chargemode_config/surplus/vehicle/phase_switch_delay",r))},{help:l(()=>[...e[43]||(e[43]=[t(" Um zu viele Umschaltungen zu vermeiden, wird mindestens die hier eingestellte Zeit zwischen zwei Umschaltungen abgewartet. Das Umschalten auf mehrphasiges Laden erfolgt nur, wenn mit der maximalen Stromstärke geladen wird und genug Leistung für mehrphasiges Laden zur Verfügung steht. Auf einphasiges Laden wird zurückgeschaltet, wenn auf die minimale Stromstärke heruntergeregelt wurde. Die Verzögerung wird nur bei der automatischen Phasenumschaltung bei Überschuss-Laden abgewartet.",-1),s("br",null,null,-1),t(" Ist ausreichend Überschuss vorhanden, wird beim Ladestart die Umschaltverzögerung nicht abgewartet, sondern direkt mit mehrphasiger Ladung begonnen. ",-1)])]),_:1},8,["model-value"])]))]),_:1}),i(b,{title:"Verbraucher"},{default:l(()=>[n.$store.state.mqtt["openWB/general/extern"]===!0?(a(),u("div",H,[i(p,{subtype:"info"},{default:l(()=>[...e[46]||(e[46]=[t(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(a(),u("div",O,[i(o,{title:"Wartezeit Einschalten",min:0,step:1,unit:"s",required:"","model-value":n.$store.state.mqtt["openWB/general/chargemode_config/surplus/consumer/switch_on_delay"],"onUpdate:modelValue":e[12]||(e[12]=r=>n.updateState("openWB/general/chargemode_config/surplus/consumer/switch_on_delay",r))},{help:l(()=>[...e[47]||(e[47]=[t(" Der Überschuss muss für die hier angegebene Zeit dauerhaft über der minimalen Betriebsleistung liegen, bevor ein Verbraucher eingeschaltet wird. ",-1)])]),_:1},8,["model-value"]),e[51]||(e[51]=s("hr",null,null,-1)),i(p,{subtype:n.$store.state.mqtt["openWB/general/chargemode_config/surplus/consumer/switch_off_threshold"]/1e3>0?"danger":"info"},{default:l(()=>[...e[48]||(e[48]=[t(" Ist ein Speicher im System vorhanden, kann eine Abschaltschwelle größer Null zur Speicherentladung führen. (Siehe Fragezeichentext) ",-1)])]),_:1},8,["subtype"]),i(o,{title:"Abschaltschwelle",step:.05,unit:"kW",required:"","model-value":n.$store.state.mqtt["openWB/general/chargemode_config/surplus/consumer/switch_off_threshold"]/1e3,"onUpdate:modelValue":e[13]||(e[13]=r=>n.updateState("openWB/general/chargemode_config/surplus/consumer/switch_off_threshold",r*1e3))},{help:l(()=>[...e[49]||(e[49]=[t(" Übersteigt der Netzbezug die Abschaltschwelle, wird der Betrieb beendet, sofern das minimale Regelintervall überschritten wurde. Eine Abschaltschwelle, die Netzbezug erlaubt, führt in einem System ohne steuerbaren Speicher zur Entladung des Speichers. Der Speicher wird dann auch über den eingestellten Mindest-SoC hinaus entladen (siehe Speicherbeachtung unten). ",-1)])]),_:1},8,["model-value"]),i(o,{title:"Wartezeit Ausschalten",min:0,step:1,unit:"s",required:"","model-value":n.$store.state.mqtt["openWB/general/chargemode_config/surplus/consumer/switch_off_delay"],"onUpdate:modelValue":e[14]||(e[14]=r=>n.updateState("openWB/general/chargemode_config/surplus/consumer/switch_off_delay",r))},{help:l(()=>[...e[50]||(e[50]=[t(" Die Abschaltschwelle muss für die hier angegebene Zeit dauerhaft unterschritten werden, bevor der Betrieb beendet wird. ",-1)])]),_:1},8,["model-value"])]))]),_:1}),i(W,{"form-name":"pvChargeConfigForm",onSave:e[15]||(e[15]=r=>n.$emit("save",n.mqttTopicsToPublish)),onReset:e[16]||(e[16]=r=>n.$emit("reset")),onDefaults:e[17]||(e[17]=r=>n.$emit("defaults"))})])])}const ee=V(E,[["render",T],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/SurplusChargeConfiguration.vue"]]);export{ee as default}; diff --git a/web/settings/assets/SystemConfiguration-Clo1_d0_.js b/web/settings/assets/SystemConfiguration-DJZWiSkw.js similarity index 99% rename from web/settings/assets/SystemConfiguration-Clo1_d0_.js rename to web/settings/assets/SystemConfiguration-DJZWiSkw.js index bc12fe5616..93ed8eddc0 100644 --- a/web/settings/assets/SystemConfiguration-Clo1_d0_.js +++ b/web/settings/assets/SystemConfiguration-DJZWiSkw.js @@ -1 +1 @@ -import{F as $,l as E,aC as I,u as U,aq as D,a9 as F,aD as L}from"./vendor-fortawesome-DplTMxoa.js";import{C as N}from"./index-Bv2WLdLZ.js";import{_ as P,m as w,l as p,f as g,z as B,u as o,y as a,q as r,x as y,k as W,K as q,L as S,J as k,B as l}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";E.add(I,U,D,F,L);const j={name:"OpenwbSystemView",components:{FontAwesomeIcon:$},mixins:[N],props:{installAssistantActive:{type:Boolean,required:!1,default:!1}},emits:["save","reset","sendCommand"],data(){return{mqttTopics:[{topic:"openWB/chargepoint/+/config",writeable:!1},{topic:"openWB/chargepoint/+/get/current_branch",writeable:!1},{topic:"openWB/chargepoint/+/get/version",writeable:!1},{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/system/available_branches",writeable:!1},{topic:"openWB/system/current_branch",writeable:!1},{topic:"openWB/system/current_branch_commit",writeable:!1},{topic:"openWB/system/current_commit",writeable:!1},{topic:"openWB/system/current_missing_commits",writeable:!1},{topic:"openWB/system/hostname",writeable:!1},{topic:"openWB/system/ip_address",writeable:!1},{topic:"openWB/system/mac_address",writeable:!1},{topic:"openWB/system/pnp_ip",writeable:!0},{topic:"openWB/system/secondary_auto_update",writeable:!1},{topic:"openWB/system/serial_number",writeable:!1},{topic:"openWB/system/version",writeable:!1}],warningAcknowledged:!1,selectedTag:"*HEAD*"}},computed:{pnpIp:{get(){return this.$store.state.mqtt["openWB/system/pnp_ip"]||{address:"",prefix:8}},set(t){this.updateState("openWB/system/pnp_ip",t)}},pnpIpAddress:{get(){return this.pnpIp.address},set(t){this.pnpIp={...this.pnpIp,address:t}}},pnpIpPrefix:{get(){return this.pnpIp.prefix},set(t){this.pnpIp={...this.pnpIp,prefix:t}}},pnpSubnetMask(){return this.cidrPrefixToSubnetMask(this.pnpIpPrefix)},externalChargePoints:{get(){let t=this.getWildcardTopics("openWB/chargepoint/+/config"),e={};for(const[i,f]of Object.entries(t))f.type==="external_openwb"&&(e[i]=f);return e}},updateAvailable(){return this.$store.state.mqtt["openWB/system/current_branch_commit"]&&this.$store.state.mqtt["openWB/system/current_branch_commit"]!=this.$store.state.mqtt["openWB/system/current_commit"]},releaseChangeValid(){return this.$store.state.mqtt["openWB/system/current_branch"]!==void 0&&this.$store.state.mqtt["openWB/system/available_branches"]!==void 0&&this.$store.state.mqtt["openWB/system/current_branch"]in this.$store.state.mqtt["openWB/system/available_branches"]&&"tags"in this.$store.state.mqtt["openWB/system/available_branches"][this.$store.state.mqtt["openWB/system/current_branch"]]&&this.selectedTag in this.$store.state.mqtt["openWB/system/available_branches"][this.$store.state.mqtt["openWB/system/current_branch"]].tags},branchGroups(){const t="Release",e="Beta",i="master",f=[t,e],b=(s,m)=>s.value==m.value?0:s.value==t?-1:m.value==t?1:s.value==e?-1:m.value==e?1:s.value==i?-1:m.value==i||s.value>m.value?1:s.value{const u=m=>{const c=m.split("-"),v=c[0].split(".");let h;return c.length>1?h=c[1].split("."):h=["release","0"],{semver:v,suffix:h}},d=u(f.value),s=u(b.value);if(d.semver[0]=="*HEAD*")return-1;if(s.semver[0]=="*HEAD*")return 1;if(d.semver[0]>s.semver[0])return-1;if(d.semver[0]s.semver[1])return-1;if(d.semver[1]s.semver[2])return-1;if(d.semver[2]s.suffix[1])return-1;if(d.suffix[1]s.suffix[1])return-1;if(d.suffix[1]s.suffix[1])return-1;if(d.suffix[1]s.suffix[1])return-1;if(d.suffix[1]32)return"";if(e===0)return"0.0.0.0";const i=4294967295<<32-e>>>0;return[i>>>24&255,i>>>16&255,i>>>8&255,i&255].join(".")},sendSystemCommand(t,e={}){this.$emit("sendCommand",{command:t,data:e})},updateConfiguration(t,e){console.debug("updateConfiguration",t,e),this.updateState(t,e.value,e.object)},systemReboot(){this.sendSystemCommand("systemReboot")},systemShutdown(){this.sendSystemCommand("systemShutdown")},systemUpdate(){this.sendSystemCommand("systemUpdate",{})},switchBranch(){this.sendSystemCommand("systemUpdate",{branch:this.$store.state.mqtt["openWB/system/current_branch"],tag:this.selectedTag})},filterComponentsByType(t,e){return Object.keys(t).filter(i=>t[i].type.includes(e)).reduce((i,f)=>({...i,[f]:t[f]}),{})}}},R={class:"system"},T={key:1},O={name:"systemInfoForm"},Z={name:"versionInfoForm"},G={class:"missing-commits"},M={class:"row justify-content-center"},H={class:"col-md-4 d-flex py-1 justify-content-center"},J={key:3},K={key:0},Q={class:"table table-striped"},X={key:1},Y={key:0,name:"powerForm"},ee={class:"row justify-content-center"},te={class:"col-md-4 d-flex py-1 justify-content-center"},se={class:"col-md-4 d-flex py-1 justify-content-center"},ne={key:1,name:"releaseChangeForm"},re={class:"row justify-content-center"},ae={class:"col-md-4 d-flex py-1 justify-content-center"},ie={key:2,name:"networkForm"},le={class:"row justify-content-center w-100"};function oe(t,e,i,f,b,u){const d=w("openwb-base-button-group-input"),s=w("openwb-base-alert"),m=w("openwb-base-text-input"),c=w("openwb-base-card"),v=w("font-awesome-icon"),h=w("openwb-base-click-button"),_=w("openwb-base-heading"),V=w("openwb-base-submit-buttons"),C=w("router-link"),A=w("openwb-base-select-input"),z=w("openwb-base-number-input");return p(),g("div",R,[i.installAssistantActive?y("",!0):(p(),B(s,{key:0,subtype:"danger"},{default:o(()=>[e[22]||(e[22]=a("h2",null,"Achtung!",-1)),e[23]||(e[23]=a("p",null," Vor allen Aktionen auf dieser Seite ist sicherzustellen, dass kein Ladevorgang aktiv ist! Zur Sicherheit bitte zusätzlich alle Fahrzeuge von der Ladestation / den Ladestationen abstecken! ",-1)),r(d,{modelValue:b.warningAcknowledged,"onUpdate:modelValue":e[0]||(e[0]=n=>b.warningAcknowledged=n),title:"Ich habe die Warnung verstanden",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}]},null,8,["modelValue"])]),_:1})),b.warningAcknowledged||i.installAssistantActive?(p(),g("div",T,[r(c,{title:"System Information",subtype:"info",collapsible:!0,collapsed:!i.installAssistantActive},{default:o(()=>[a("form",O,[r(m,{modelValue:t.$store.state.mqtt["openWB/system/serial_number"],"onUpdate:modelValue":e[1]||(e[1]=n=>t.$store.state.mqtt["openWB/system/serial_number"]=n),title:"Seriennummer",readonly:""},null,8,["modelValue"]),r(m,{modelValue:t.$store.state.mqtt["openWB/system/ip_address"],"onUpdate:modelValue":e[2]||(e[2]=n=>t.$store.state.mqtt["openWB/system/ip_address"]=n),title:"IP-Adresse",subtype:"host",readonly:""},null,8,["modelValue"]),r(m,{modelValue:t.$store.state.mqtt["openWB/system/mac_address"],"onUpdate:modelValue":e[3]||(e[3]=n=>t.$store.state.mqtt["openWB/system/mac_address"]=n),title:"MAC-Adresse",readonly:""},null,8,["modelValue"]),r(m,{modelValue:t.$store.state.mqtt["openWB/system/hostname"],"onUpdate:modelValue":e[4]||(e[4]=n=>t.$store.state.mqtt["openWB/system/hostname"]=n),title:"Hostname",subtype:"host",required:"",readonly:""},null,8,["modelValue"])])]),_:1},8,["collapsed"]),r(c,{title:"Versions-Informationen / Aktualisierung",subtype:"success",collapsible:!0,collapsed:!i.installAssistantActive},{default:o(()=>[a("form",Z,[r(m,{modelValue:t.$store.state.mqtt["openWB/system/current_branch"],"onUpdate:modelValue":e[5]||(e[5]=n=>t.$store.state.mqtt["openWB/system/current_branch"]=n),title:"Entwicklungszweig",readonly:""},null,8,["modelValue"]),r(m,{modelValue:t.$store.state.mqtt["openWB/system/version"],"onUpdate:modelValue":e[6]||(e[6]=n=>t.$store.state.mqtt["openWB/system/version"]=n),title:"Bezeichnung",readonly:""},null,8,["modelValue"]),r(m,{modelValue:t.$store.state.mqtt["openWB/system/current_commit"],"onUpdate:modelValue":e[7]||(e[7]=n=>t.$store.state.mqtt["openWB/system/current_commit"]=n),title:"installierte Version",readonly:"",class:W(u.updateAvailable?"text-danger":"text-success")},null,8,["modelValue","class"]),r(m,{modelValue:t.$store.state.mqtt["openWB/system/current_branch_commit"],"onUpdate:modelValue":e[8]||(e[8]=n=>t.$store.state.mqtt["openWB/system/current_branch_commit"]=n),title:"aktuellste Version",readonly:""},null,8,["modelValue"]),u.updateAvailable?(p(),B(c,{key:0,title:"Änderungen",subtype:"info",collapsible:!0,collapsed:!0},{default:o(()=>[a("ul",G,[(p(!0),g(q,null,S(t.$store.state.mqtt["openWB/system/current_missing_commits"],(n,x)=>(p(),g("li",{key:x},k(n),1))),128))])]),_:1})):y("",!0),i.installAssistantActive?y("",!0):(p(),B(s,{key:1,subtype:"danger"},{default:o(()=>[...e[24]||(e[24]=[l(" Nach einem Update wird die Ladestation direkt neu gestartet! Es werden alle eventuell vorhandenen lokalen Änderungen am Programmcode mit dem Update verworfen! ",-1)])]),_:1})),t.$store.state.mqtt["openWB/system/current_branch"]!="Release"&&!i.installAssistantActive?(p(),B(s,{key:2,subtype:"danger"},{default:o(()=>[...e[25]||(e[25]=[l(' Du bist nicht auf dem für den normalen Gebrauch empfohlenen Entwicklungszweig "Release". Wir empfehlen, auf diesen Zweig zu wechseln, sobald dort eine neue Version verfügbar ist.',-1),a("br",null,null,-1),l(" Bevor ein Update angestoßen wird, sollte immer eine Sicherung erstellt werden! Es kann zwar wieder auf eine ältere Version gewechselt werden, jedoch ist nicht sichergestellt, dass es dabei keine Probleme gibt. Gerade wenn das Datenformat in der neuen Version angepasst wurde, wird eine ältere damit Fehler produzieren. ",-1)])]),_:1})):y("",!0),a("div",M,[a("div",H,[r(h,{class:W(u.updateAvailable?"btn-success clickable":"btn-outline-success"),disabled:!u.updateAvailable,onButtonClicked:e[9]||(e[9]=n=>u.systemUpdate())},{default:o(()=>[e[26]||(e[26]=l(" Update ",-1)),r(v,{icon:["fas","arrow-alt-circle-up"]})]),_:1},8,["class","disabled"])])]),t.$store.state.mqtt["openWB/general/extern"]!=!0&&!i.installAssistantActive&&Object.keys(u.externalChargePoints).length>0?(p(),g("div",J,[e[31]||(e[31]=a("hr",null,null,-1)),r(_,null,{default:o(()=>[...e[27]||(e[27]=[l("Automatisches Update von Secondary openWBs",-1)])]),_:1}),r(s,{subtype:"info"},{default:o(()=>[...e[28]||(e[28]=[l(' Die automatische Aktualisierung für Secondary openWBs ist nur verfügbar, wenn sich die Primary openWB auf dem Entwicklungszweig "Release" befindet. Das Update wird nur auf Secondary openWBs durchgeführt, welche sich ebenfalls auf dem Entwicklungszweig "Release" befinden. Ist die dort installierte Release-Version zu alt, muss ein einmaliges Update auf die aktuelle Version manuell auf der betroffenen openWB durchgeführt werden. ',-1)])]),_:1}),t.$store.state.mqtt["openWB/system/current_branch"]=="Release"?(p(),g("div",K,[r(d,{title:"Secondary openWBs automatisch mit der Primary updaten",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/system/secondary_auto_update"],"onUpdate:modelValue":e[10]||(e[10]=n=>t.updateState("openWB/system/secondary_auto_update",n))},{help:o(()=>[...e[29]||(e[29]=[l(' Diese Option ist nur auf dem Entwicklungszweig "Release" verfügbar. Ist diese Option aktiviert, dann werden Secondary openWBs, welche sich ebenfalls auf dem Entwicklungszweig "Release" befinden gleichzeitig mit der Primary openWB aktualisiert. ',-1)])]),_:1},8,["model-value"])])):y("",!0),a("table",Q,[e[30]||(e[30]=a("thead",null,[a("tr",null,[a("th",null,"Secondary"),a("th",null,"Software-Status"),a("th",null,"IP-Adresse")])],-1)),a("tbody",null,[(p(!0),g(q,null,S(u.externalChargePoints,n=>(p(),g("tr",{key:n.id},[a("td",null,k(n.name),1),a("td",null,k(t.$store.state.mqtt["openWB/chargepoint/"+n.id+"/get/current_branch"]===void 0?"Version zu alt oder openWB ist nicht erreichbar. Bitte manuell updaten bzw. prüfen.":t.$store.state.mqtt["openWB/chargepoint/"+n.id+"/get/current_branch"]!="Release"?"Secondary ist nicht auf dem Release-Zweig. Bitte manuell updaten.":t.$store.state.mqtt["openWB/chargepoint/"+n.id+"/get/current_branch"]+" "+t.$store.state.mqtt["openWB/chargepoint/"+n.id+"/get/version"]),1),a("td",null,k(n.configuration.ip_address),1)]))),128))])]),t.$store.state.mqtt["openWB/system/current_branch"]=="Release"?(p(),g("div",X,[r(V,{"form-name":"versionInfoForm","hide-defaults":!0,onSave:e[11]||(e[11]=n=>t.$emit("save",["openWB/system/secondary_auto_update"])),onReset:e[12]||(e[12]=n=>t.$emit("reset"))})])):y("",!0)])):y("",!0)])]),_:1},8,["collapsed"]),i.installAssistantActive?y("",!0):(p(),g("form",Y,[r(c,{title:"Betrieb",collapsible:!0,collapsed:!0},{footer:o(()=>[a("div",ee,[a("div",te,[r(h,{class:"btn-warning",onButtonClicked:e[13]||(e[13]=n=>u.systemReboot())},{default:o(()=>[e[38]||(e[38]=l(" Neustart ",-1)),r(v,{icon:["fas","undo"]})]),_:1})]),a("div",se,[r(h,{class:"btn-danger",onButtonClicked:e[14]||(e[14]=n=>u.systemShutdown())},{default:o(()=>[e[39]||(e[39]=l(" Ausschalten ",-1)),r(v,{icon:["fas","power-off"]})]),_:1})])])]),default:o(()=>[r(s,{subtype:"danger"},{default:o(()=>[...e[32]||(e[32]=[l(" Wenn die Ladestation ausgeschaltet wird, muss sie komplett spannungsfrei geschaltet werden. Erst beim erneuten Zuschalten der Spannung fährt das System wieder hoch. ",-1)])]),_:1}),r(s,{subtype:"info"},{default:o(()=>[e[34]||(e[34]=l(" Ein Neustart löscht wichtige Protokolle, die bei der Fehlersuche helfen können. ",-1)),e[35]||(e[35]=a("br",null,null,-1)),e[36]||(e[36]=l("Tipp: Erstelle stattdessen zuerst einen ",-1)),r(C,{to:"/System/Support"},{default:o(()=>[...e[33]||(e[33]=[l(" Systembericht ",-1)])]),_:1}),e[37]||(e[37]=l(" – das hilft oft mehr und bewahrt alle relevanten Logs. ",-1))]),_:1})]),_:1})])),i.installAssistantActive?y("",!0):(p(),g("form",ne,[r(c,{title:"Entwicklungszweig",subtype:"danger",collapsible:!0,collapsed:!0},{footer:o(()=>[a("div",re,[a("div",ae,[r(h,{class:W(u.releaseChangeValid?"btn-danger clickable":"btn-outline-danger"),disabled:!u.releaseChangeValid,onButtonClicked:e[17]||(e[17]=n=>u.switchBranch())},{default:o(()=>[r(v,{icon:["fas","skull-crossbones"]}),e[42]||(e[42]=l(" Branch und Tag wechseln ",-1)),r(v,{icon:["fas","skull-crossbones"]})]),_:1},8,["class","disabled"])])])]),default:o(()=>[r(s,{subtype:"danger"},{default:o(()=>[...e[40]||(e[40]=[l(" Nach einem Wechsel wird die Ladestation direkt neu gestartet! Es werden alle lokalen Änderungen mit dem Wechsel verworfen! ",-1)])]),_:1}),r(s,{subtype:"warning"},{default:o(()=>[...e[41]||(e[41]=[l(" Bevor auf einen neuen Entwicklungszweig gewechselt wird sollte immer eine Sicherung erstellt werden! Es kann zwar wieder auf eine ältere Version gewechselt werden, jedoch ist nicht sichergestellt, dass es dabei keine Probleme gibt. Gerade wenn das Datenformat in der neuen Version angepasst wurde, wird eine ältere damit Fehler produzieren.",-1),a("br",null,null,-1),l(' Für den normalen Betrieb wird der Zweig "Release" empfohlen. Der Softwarestand wurde ausgiebig getestet, sodass ein Fehlverhalten relativ unwahrscheinlich ist.',-1),a("br",null,null,-1),l(' Der "Beta" Zweig beinhaltet Vorabversionen, bei denen die Entwicklung soweit abgeschlossen ist. Die enthaltenen Anpassungen wurden rudimentär getestet, können aber durchaus noch Fehler enthalten.',-1),a("br",null,null,-1),l(' Die aktuelle Softwareentwicklung findet im Zweig "master" statt. Die enthaltenen Anpassungen sind teilweise noch nicht getestet und enthalten potentiell Fehler.',-1),a("br",null,null,-1),l(' Einträge, die mit "feature" beginnen, sind experimentelle Entwicklungszweige, die nicht für den allgemeinen Gebrauch gedacht sind. ',-1)])]),_:1}),r(A,{title:"Entwicklungszweig",groups:u.branchGroups,"model-value":t.$store.state.mqtt["openWB/system/current_branch"],"onUpdate:modelValue":e[15]||(e[15]=n=>t.updateState("openWB/system/current_branch",n))},null,8,["groups","model-value"]),r(A,{modelValue:b.selectedTag,"onUpdate:modelValue":e[16]||(e[16]=n=>b.selectedTag=n),title:"Tag",options:u.branchTagOptions},null,8,["modelValue","options"])]),_:1})])),i.installAssistantActive?y("",!0):(p(),g("form",ie,[r(c,{title:"Netzwerk",collapsible:!0,collapsed:!0},{footer:o(()=>[a("div",le,[r(V,{"form-name":"networkForm","hide-defaults":!0,"save-id":"saveNetworkSettings",onSave:e[20]||(e[20]=n=>t.$emit("save",["openWB/system/pnp_ip"])),onReset:e[21]||(e[21]=n=>t.$emit("reset",["openWB/system/pnp_ip"]))})])]),default:o(()=>[r(s,{subtype:"info"},{default:o(()=>[...e[43]||(e[43]=[l(" Änderungen an diesen Einstellungen werden erst nach einem Neustart der Ladestation aktiv. ",-1)])]),_:1}),r(_,null,{help:o(()=>[...e[44]||(e[44]=[l(" Diese Einstellungen werden für die Erkennung von Zähler-Kits und anderen openWB-Netzwerkkomponenten verwendet.",-1),a("br",null,null,-1),l(" Eine Änderung ist nur in Ausnahmefällen erforderlich, wenn es im Netzwerk mehrere primary openWB-Systeme gibt.",-1),a("br",null,null,-1),l(" Die Standardeinstellung ist ",-1),a("strong",null,"192.168.193.250",-1),l(" mit dem Präfix ",-1),a("strong",null,"24",-1),l(". ",-1)])]),default:o(()=>[e[45]||(e[45]=l(" Plug&Play Einstellungen ",-1))]),_:1}),r(m,{modelValue:u.pnpIpAddress,"onUpdate:modelValue":e[18]||(e[18]=n=>u.pnpIpAddress=n),title:"IP-Adresse",subtype:"ipv4",required:""},null,8,["modelValue"]),r(z,{modelValue:u.pnpIpPrefix,"onUpdate:modelValue":e[19]||(e[19]=n=>u.pnpIpPrefix=n),title:"Netzwerkpräfix",min:8,max:32,step:1,required:""},null,8,["modelValue"]),r(m,{"model-value":u.pnpSubnetMask,title:"Subnetzmaske",subtype:"ipv4",readonly:""},null,8,["model-value"])]),_:1})]))])):y("",!0)])}const ce=P(j,[["render",oe],["__scopeId","data-v-e5e73130"],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/SystemConfiguration.vue"]]);export{ce as default}; +import{F as $,l as E,aC as I,u as U,aq as D,a9 as F,aD as L}from"./vendor-fortawesome-DplTMxoa.js";import{C as N}from"./index-CE-5DBwq.js";import{_ as P,m as w,l as p,f as g,z as B,u as o,y as a,q as r,x as y,k as W,K as q,L as S,J as k,B as l}from"./vendor-BwGffBs-.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";E.add(I,U,D,F,L);const j={name:"OpenwbSystemView",components:{FontAwesomeIcon:$},mixins:[N],props:{installAssistantActive:{type:Boolean,required:!1,default:!1}},emits:["save","reset","sendCommand"],data(){return{mqttTopics:[{topic:"openWB/chargepoint/+/config",writeable:!1},{topic:"openWB/chargepoint/+/get/current_branch",writeable:!1},{topic:"openWB/chargepoint/+/get/version",writeable:!1},{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/system/available_branches",writeable:!1},{topic:"openWB/system/current_branch",writeable:!1},{topic:"openWB/system/current_branch_commit",writeable:!1},{topic:"openWB/system/current_commit",writeable:!1},{topic:"openWB/system/current_missing_commits",writeable:!1},{topic:"openWB/system/hostname",writeable:!1},{topic:"openWB/system/ip_address",writeable:!1},{topic:"openWB/system/mac_address",writeable:!1},{topic:"openWB/system/pnp_ip",writeable:!0},{topic:"openWB/system/secondary_auto_update",writeable:!1},{topic:"openWB/system/serial_number",writeable:!1},{topic:"openWB/system/version",writeable:!1}],warningAcknowledged:!1,selectedTag:"*HEAD*"}},computed:{pnpIp:{get(){return this.$store.state.mqtt["openWB/system/pnp_ip"]||{address:"",prefix:8}},set(t){this.updateState("openWB/system/pnp_ip",t)}},pnpIpAddress:{get(){return this.pnpIp.address},set(t){this.pnpIp={...this.pnpIp,address:t}}},pnpIpPrefix:{get(){return this.pnpIp.prefix},set(t){this.pnpIp={...this.pnpIp,prefix:t}}},pnpSubnetMask(){return this.cidrPrefixToSubnetMask(this.pnpIpPrefix)},externalChargePoints:{get(){let t=this.getWildcardTopics("openWB/chargepoint/+/config"),e={};for(const[i,f]of Object.entries(t))f.type==="external_openwb"&&(e[i]=f);return e}},updateAvailable(){return this.$store.state.mqtt["openWB/system/current_branch_commit"]&&this.$store.state.mqtt["openWB/system/current_branch_commit"]!=this.$store.state.mqtt["openWB/system/current_commit"]},releaseChangeValid(){return this.$store.state.mqtt["openWB/system/current_branch"]!==void 0&&this.$store.state.mqtt["openWB/system/available_branches"]!==void 0&&this.$store.state.mqtt["openWB/system/current_branch"]in this.$store.state.mqtt["openWB/system/available_branches"]&&"tags"in this.$store.state.mqtt["openWB/system/available_branches"][this.$store.state.mqtt["openWB/system/current_branch"]]&&this.selectedTag in this.$store.state.mqtt["openWB/system/available_branches"][this.$store.state.mqtt["openWB/system/current_branch"]].tags},branchGroups(){const t="Release",e="Beta",i="master",f=[t,e],b=(s,m)=>s.value==m.value?0:s.value==t?-1:m.value==t?1:s.value==e?-1:m.value==e?1:s.value==i?-1:m.value==i||s.value>m.value?1:s.value{const u=m=>{const c=m.split("-"),v=c[0].split(".");let h;return c.length>1?h=c[1].split("."):h=["release","0"],{semver:v,suffix:h}},d=u(f.value),s=u(b.value);if(d.semver[0]=="*HEAD*")return-1;if(s.semver[0]=="*HEAD*")return 1;if(d.semver[0]>s.semver[0])return-1;if(d.semver[0]s.semver[1])return-1;if(d.semver[1]s.semver[2])return-1;if(d.semver[2]s.suffix[1])return-1;if(d.suffix[1]s.suffix[1])return-1;if(d.suffix[1]s.suffix[1])return-1;if(d.suffix[1]s.suffix[1])return-1;if(d.suffix[1]32)return"";if(e===0)return"0.0.0.0";const i=4294967295<<32-e>>>0;return[i>>>24&255,i>>>16&255,i>>>8&255,i&255].join(".")},sendSystemCommand(t,e={}){this.$emit("sendCommand",{command:t,data:e})},updateConfiguration(t,e){console.debug("updateConfiguration",t,e),this.updateState(t,e.value,e.object)},systemReboot(){this.sendSystemCommand("systemReboot")},systemShutdown(){this.sendSystemCommand("systemShutdown")},systemUpdate(){this.sendSystemCommand("systemUpdate",{})},switchBranch(){this.sendSystemCommand("systemUpdate",{branch:this.$store.state.mqtt["openWB/system/current_branch"],tag:this.selectedTag})},filterComponentsByType(t,e){return Object.keys(t).filter(i=>t[i].type.includes(e)).reduce((i,f)=>({...i,[f]:t[f]}),{})}}},R={class:"system"},T={key:1},O={name:"systemInfoForm"},Z={name:"versionInfoForm"},G={class:"missing-commits"},M={class:"row justify-content-center"},H={class:"col-md-4 d-flex py-1 justify-content-center"},J={key:3},K={key:0},Q={class:"table table-striped"},X={key:1},Y={key:0,name:"powerForm"},ee={class:"row justify-content-center"},te={class:"col-md-4 d-flex py-1 justify-content-center"},se={class:"col-md-4 d-flex py-1 justify-content-center"},ne={key:1,name:"releaseChangeForm"},re={class:"row justify-content-center"},ae={class:"col-md-4 d-flex py-1 justify-content-center"},ie={key:2,name:"networkForm"},le={class:"row justify-content-center w-100"};function oe(t,e,i,f,b,u){const d=w("openwb-base-button-group-input"),s=w("openwb-base-alert"),m=w("openwb-base-text-input"),c=w("openwb-base-card"),v=w("font-awesome-icon"),h=w("openwb-base-click-button"),_=w("openwb-base-heading"),V=w("openwb-base-submit-buttons"),C=w("router-link"),A=w("openwb-base-select-input"),z=w("openwb-base-number-input");return p(),g("div",R,[i.installAssistantActive?y("",!0):(p(),B(s,{key:0,subtype:"danger"},{default:o(()=>[e[22]||(e[22]=a("h2",null,"Achtung!",-1)),e[23]||(e[23]=a("p",null," Vor allen Aktionen auf dieser Seite ist sicherzustellen, dass kein Ladevorgang aktiv ist! Zur Sicherheit bitte zusätzlich alle Fahrzeuge von der Ladestation / den Ladestationen abstecken! ",-1)),r(d,{modelValue:b.warningAcknowledged,"onUpdate:modelValue":e[0]||(e[0]=n=>b.warningAcknowledged=n),title:"Ich habe die Warnung verstanden",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}]},null,8,["modelValue"])]),_:1})),b.warningAcknowledged||i.installAssistantActive?(p(),g("div",T,[r(c,{title:"System Information",subtype:"info",collapsible:!0,collapsed:!i.installAssistantActive},{default:o(()=>[a("form",O,[r(m,{modelValue:t.$store.state.mqtt["openWB/system/serial_number"],"onUpdate:modelValue":e[1]||(e[1]=n=>t.$store.state.mqtt["openWB/system/serial_number"]=n),title:"Seriennummer",readonly:""},null,8,["modelValue"]),r(m,{modelValue:t.$store.state.mqtt["openWB/system/ip_address"],"onUpdate:modelValue":e[2]||(e[2]=n=>t.$store.state.mqtt["openWB/system/ip_address"]=n),title:"IP-Adresse",subtype:"host",readonly:""},null,8,["modelValue"]),r(m,{modelValue:t.$store.state.mqtt["openWB/system/mac_address"],"onUpdate:modelValue":e[3]||(e[3]=n=>t.$store.state.mqtt["openWB/system/mac_address"]=n),title:"MAC-Adresse",readonly:""},null,8,["modelValue"]),r(m,{modelValue:t.$store.state.mqtt["openWB/system/hostname"],"onUpdate:modelValue":e[4]||(e[4]=n=>t.$store.state.mqtt["openWB/system/hostname"]=n),title:"Hostname",subtype:"host",required:"",readonly:""},null,8,["modelValue"])])]),_:1},8,["collapsed"]),r(c,{title:"Versions-Informationen / Aktualisierung",subtype:"success",collapsible:!0,collapsed:!i.installAssistantActive},{default:o(()=>[a("form",Z,[r(m,{modelValue:t.$store.state.mqtt["openWB/system/current_branch"],"onUpdate:modelValue":e[5]||(e[5]=n=>t.$store.state.mqtt["openWB/system/current_branch"]=n),title:"Entwicklungszweig",readonly:""},null,8,["modelValue"]),r(m,{modelValue:t.$store.state.mqtt["openWB/system/version"],"onUpdate:modelValue":e[6]||(e[6]=n=>t.$store.state.mqtt["openWB/system/version"]=n),title:"Bezeichnung",readonly:""},null,8,["modelValue"]),r(m,{modelValue:t.$store.state.mqtt["openWB/system/current_commit"],"onUpdate:modelValue":e[7]||(e[7]=n=>t.$store.state.mqtt["openWB/system/current_commit"]=n),title:"installierte Version",readonly:"",class:W(u.updateAvailable?"text-danger":"text-success")},null,8,["modelValue","class"]),r(m,{modelValue:t.$store.state.mqtt["openWB/system/current_branch_commit"],"onUpdate:modelValue":e[8]||(e[8]=n=>t.$store.state.mqtt["openWB/system/current_branch_commit"]=n),title:"aktuellste Version",readonly:""},null,8,["modelValue"]),u.updateAvailable?(p(),B(c,{key:0,title:"Änderungen",subtype:"info",collapsible:!0,collapsed:!0},{default:o(()=>[a("ul",G,[(p(!0),g(q,null,S(t.$store.state.mqtt["openWB/system/current_missing_commits"],(n,x)=>(p(),g("li",{key:x},k(n),1))),128))])]),_:1})):y("",!0),i.installAssistantActive?y("",!0):(p(),B(s,{key:1,subtype:"danger"},{default:o(()=>[...e[24]||(e[24]=[l(" Nach einem Update wird die Ladestation direkt neu gestartet! Es werden alle eventuell vorhandenen lokalen Änderungen am Programmcode mit dem Update verworfen! ",-1)])]),_:1})),t.$store.state.mqtt["openWB/system/current_branch"]!="Release"&&!i.installAssistantActive?(p(),B(s,{key:2,subtype:"danger"},{default:o(()=>[...e[25]||(e[25]=[l(' Du bist nicht auf dem für den normalen Gebrauch empfohlenen Entwicklungszweig "Release". Wir empfehlen, auf diesen Zweig zu wechseln, sobald dort eine neue Version verfügbar ist.',-1),a("br",null,null,-1),l(" Bevor ein Update angestoßen wird, sollte immer eine Sicherung erstellt werden! Es kann zwar wieder auf eine ältere Version gewechselt werden, jedoch ist nicht sichergestellt, dass es dabei keine Probleme gibt. Gerade wenn das Datenformat in der neuen Version angepasst wurde, wird eine ältere damit Fehler produzieren. ",-1)])]),_:1})):y("",!0),a("div",M,[a("div",H,[r(h,{class:W(u.updateAvailable?"btn-success clickable":"btn-outline-success"),disabled:!u.updateAvailable,onButtonClicked:e[9]||(e[9]=n=>u.systemUpdate())},{default:o(()=>[e[26]||(e[26]=l(" Update ",-1)),r(v,{icon:["fas","arrow-alt-circle-up"]})]),_:1},8,["class","disabled"])])]),t.$store.state.mqtt["openWB/general/extern"]!=!0&&!i.installAssistantActive&&Object.keys(u.externalChargePoints).length>0?(p(),g("div",J,[e[31]||(e[31]=a("hr",null,null,-1)),r(_,null,{default:o(()=>[...e[27]||(e[27]=[l("Automatisches Update von Secondary openWBs",-1)])]),_:1}),r(s,{subtype:"info"},{default:o(()=>[...e[28]||(e[28]=[l(' Die automatische Aktualisierung für Secondary openWBs ist nur verfügbar, wenn sich die Primary openWB auf dem Entwicklungszweig "Release" befindet. Das Update wird nur auf Secondary openWBs durchgeführt, welche sich ebenfalls auf dem Entwicklungszweig "Release" befinden. Ist die dort installierte Release-Version zu alt, muss ein einmaliges Update auf die aktuelle Version manuell auf der betroffenen openWB durchgeführt werden. ',-1)])]),_:1}),t.$store.state.mqtt["openWB/system/current_branch"]=="Release"?(p(),g("div",K,[r(d,{title:"Secondary openWBs automatisch mit der Primary updaten",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.$store.state.mqtt["openWB/system/secondary_auto_update"],"onUpdate:modelValue":e[10]||(e[10]=n=>t.updateState("openWB/system/secondary_auto_update",n))},{help:o(()=>[...e[29]||(e[29]=[l(' Diese Option ist nur auf dem Entwicklungszweig "Release" verfügbar. Ist diese Option aktiviert, dann werden Secondary openWBs, welche sich ebenfalls auf dem Entwicklungszweig "Release" befinden gleichzeitig mit der Primary openWB aktualisiert. ',-1)])]),_:1},8,["model-value"])])):y("",!0),a("table",Q,[e[30]||(e[30]=a("thead",null,[a("tr",null,[a("th",null,"Secondary"),a("th",null,"Software-Status"),a("th",null,"IP-Adresse")])],-1)),a("tbody",null,[(p(!0),g(q,null,S(u.externalChargePoints,n=>(p(),g("tr",{key:n.id},[a("td",null,k(n.name),1),a("td",null,k(t.$store.state.mqtt["openWB/chargepoint/"+n.id+"/get/current_branch"]===void 0?"Version zu alt oder openWB ist nicht erreichbar. Bitte manuell updaten bzw. prüfen.":t.$store.state.mqtt["openWB/chargepoint/"+n.id+"/get/current_branch"]!="Release"?"Secondary ist nicht auf dem Release-Zweig. Bitte manuell updaten.":t.$store.state.mqtt["openWB/chargepoint/"+n.id+"/get/current_branch"]+" "+t.$store.state.mqtt["openWB/chargepoint/"+n.id+"/get/version"]),1),a("td",null,k(n.configuration.ip_address),1)]))),128))])]),t.$store.state.mqtt["openWB/system/current_branch"]=="Release"?(p(),g("div",X,[r(V,{"form-name":"versionInfoForm","hide-defaults":!0,onSave:e[11]||(e[11]=n=>t.$emit("save",["openWB/system/secondary_auto_update"])),onReset:e[12]||(e[12]=n=>t.$emit("reset"))})])):y("",!0)])):y("",!0)])]),_:1},8,["collapsed"]),i.installAssistantActive?y("",!0):(p(),g("form",Y,[r(c,{title:"Betrieb",collapsible:!0,collapsed:!0},{footer:o(()=>[a("div",ee,[a("div",te,[r(h,{class:"btn-warning",onButtonClicked:e[13]||(e[13]=n=>u.systemReboot())},{default:o(()=>[e[38]||(e[38]=l(" Neustart ",-1)),r(v,{icon:["fas","undo"]})]),_:1})]),a("div",se,[r(h,{class:"btn-danger",onButtonClicked:e[14]||(e[14]=n=>u.systemShutdown())},{default:o(()=>[e[39]||(e[39]=l(" Ausschalten ",-1)),r(v,{icon:["fas","power-off"]})]),_:1})])])]),default:o(()=>[r(s,{subtype:"danger"},{default:o(()=>[...e[32]||(e[32]=[l(" Wenn die Ladestation ausgeschaltet wird, muss sie komplett spannungsfrei geschaltet werden. Erst beim erneuten Zuschalten der Spannung fährt das System wieder hoch. ",-1)])]),_:1}),r(s,{subtype:"info"},{default:o(()=>[e[34]||(e[34]=l(" Ein Neustart löscht wichtige Protokolle, die bei der Fehlersuche helfen können. ",-1)),e[35]||(e[35]=a("br",null,null,-1)),e[36]||(e[36]=l("Tipp: Erstelle stattdessen zuerst einen ",-1)),r(C,{to:"/System/Support"},{default:o(()=>[...e[33]||(e[33]=[l(" Systembericht ",-1)])]),_:1}),e[37]||(e[37]=l(" – das hilft oft mehr und bewahrt alle relevanten Logs. ",-1))]),_:1})]),_:1})])),i.installAssistantActive?y("",!0):(p(),g("form",ne,[r(c,{title:"Entwicklungszweig",subtype:"danger",collapsible:!0,collapsed:!0},{footer:o(()=>[a("div",re,[a("div",ae,[r(h,{class:W(u.releaseChangeValid?"btn-danger clickable":"btn-outline-danger"),disabled:!u.releaseChangeValid,onButtonClicked:e[17]||(e[17]=n=>u.switchBranch())},{default:o(()=>[r(v,{icon:["fas","skull-crossbones"]}),e[42]||(e[42]=l(" Branch und Tag wechseln ",-1)),r(v,{icon:["fas","skull-crossbones"]})]),_:1},8,["class","disabled"])])])]),default:o(()=>[r(s,{subtype:"danger"},{default:o(()=>[...e[40]||(e[40]=[l(" Nach einem Wechsel wird die Ladestation direkt neu gestartet! Es werden alle lokalen Änderungen mit dem Wechsel verworfen! ",-1)])]),_:1}),r(s,{subtype:"warning"},{default:o(()=>[...e[41]||(e[41]=[l(" Bevor auf einen neuen Entwicklungszweig gewechselt wird sollte immer eine Sicherung erstellt werden! Es kann zwar wieder auf eine ältere Version gewechselt werden, jedoch ist nicht sichergestellt, dass es dabei keine Probleme gibt. Gerade wenn das Datenformat in der neuen Version angepasst wurde, wird eine ältere damit Fehler produzieren.",-1),a("br",null,null,-1),l(' Für den normalen Betrieb wird der Zweig "Release" empfohlen. Der Softwarestand wurde ausgiebig getestet, sodass ein Fehlverhalten relativ unwahrscheinlich ist.',-1),a("br",null,null,-1),l(' Der "Beta" Zweig beinhaltet Vorabversionen, bei denen die Entwicklung soweit abgeschlossen ist. Die enthaltenen Anpassungen wurden rudimentär getestet, können aber durchaus noch Fehler enthalten.',-1),a("br",null,null,-1),l(' Die aktuelle Softwareentwicklung findet im Zweig "master" statt. Die enthaltenen Anpassungen sind teilweise noch nicht getestet und enthalten potentiell Fehler.',-1),a("br",null,null,-1),l(' Einträge, die mit "feature" beginnen, sind experimentelle Entwicklungszweige, die nicht für den allgemeinen Gebrauch gedacht sind. ',-1)])]),_:1}),r(A,{title:"Entwicklungszweig",groups:u.branchGroups,"model-value":t.$store.state.mqtt["openWB/system/current_branch"],"onUpdate:modelValue":e[15]||(e[15]=n=>t.updateState("openWB/system/current_branch",n))},null,8,["groups","model-value"]),r(A,{modelValue:b.selectedTag,"onUpdate:modelValue":e[16]||(e[16]=n=>b.selectedTag=n),title:"Tag",options:u.branchTagOptions},null,8,["modelValue","options"])]),_:1})])),i.installAssistantActive?y("",!0):(p(),g("form",ie,[r(c,{title:"Netzwerk",collapsible:!0,collapsed:!0},{footer:o(()=>[a("div",le,[r(V,{"form-name":"networkForm","hide-defaults":!0,"save-id":"saveNetworkSettings",onSave:e[20]||(e[20]=n=>t.$emit("save",["openWB/system/pnp_ip"])),onReset:e[21]||(e[21]=n=>t.$emit("reset",["openWB/system/pnp_ip"]))})])]),default:o(()=>[r(s,{subtype:"info"},{default:o(()=>[...e[43]||(e[43]=[l(" Änderungen an diesen Einstellungen werden erst nach einem Neustart der Ladestation aktiv. ",-1)])]),_:1}),r(_,null,{help:o(()=>[...e[44]||(e[44]=[l(" Diese Einstellungen werden für die Erkennung von Zähler-Kits und anderen openWB-Netzwerkkomponenten verwendet.",-1),a("br",null,null,-1),l(" Eine Änderung ist nur in Ausnahmefällen erforderlich, wenn es im Netzwerk mehrere primary openWB-Systeme gibt.",-1),a("br",null,null,-1),l(" Die Standardeinstellung ist ",-1),a("strong",null,"192.168.193.250",-1),l(" mit dem Präfix ",-1),a("strong",null,"24",-1),l(". ",-1)])]),default:o(()=>[e[45]||(e[45]=l(" Plug&Play Einstellungen ",-1))]),_:1}),r(m,{modelValue:u.pnpIpAddress,"onUpdate:modelValue":e[18]||(e[18]=n=>u.pnpIpAddress=n),title:"IP-Adresse",subtype:"ipv4",required:""},null,8,["modelValue"]),r(z,{modelValue:u.pnpIpPrefix,"onUpdate:modelValue":e[19]||(e[19]=n=>u.pnpIpPrefix=n),title:"Netzwerkpräfix",min:8,max:32,step:1,required:""},null,8,["modelValue"]),r(m,{"model-value":u.pnpSubnetMask,title:"Subnetzmaske",subtype:"ipv4",readonly:""},null,8,["model-value"])]),_:1})]))])):y("",!0)])}const ce=P(j,[["render",oe],["__scopeId","data-v-e5e73130"],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/SystemConfiguration.vue"]]);export{ce as default}; diff --git a/web/settings/assets/TenantEnergyBilling-UAAw2hP7.js b/web/settings/assets/TenantEnergyBilling-D7pVN5MV.js similarity index 99% rename from web/settings/assets/TenantEnergyBilling-UAAw2hP7.js rename to web/settings/assets/TenantEnergyBilling-D7pVN5MV.js index 4852b4904e..26c2f0a24c 100644 --- a/web/settings/assets/TenantEnergyBilling-UAAw2hP7.js +++ b/web/settings/assets/TenantEnergyBilling-D7pVN5MV.js @@ -1 +1 @@ -import{a as A}from"./vendor-axios-C0vEeTtS.js";import{_ as k,m,l as i,z as _,u as r,y as s,B as a,q as d,f as b,J as p,x as w,k as y,K as x,L as C}from"./vendor-BwGffBs-.js";import{C as M}from"./index-Bv2WLdLZ.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";const N={name:"TenantBillingShop"},T={class:"d-flex justify-content-end"};function W(t,e,n,c,o,f){const g=m("openwb-base-click-button"),l=m("openwb-base-card");return i(),_(l,{title:"OpenWB Shop"},{default:r(()=>[e[1]||(e[1]=s("div",{class:"font-weight-bold mb-2"},"Noch kein Mieterstrom-Kunde?",-1)),e[2]||(e[2]=s("div",{class:"mb-3"},[a(" Mit openWB können"),s("strong",null,"Vermieter den Stromverbrauch ihrer Mieter"),a(" erfassen und direkt abrechnen, "),s("strong",null,"egal ob mit oder ohne PV-Anlage."),a(" Auch gespeicherter Strom (z.B. aus einem Batteriespeicher) kann berücksichtigt werden. ")],-1)),e[3]||(e[3]=s("div",{class:"font-weight-bold"},"Vorteile:",-1)),e[4]||(e[4]=s("ul",{class:"mb-2 pl-3"},[s("li",null,"Günstiger Strom durch Wegfall von Netzentgelten"),s("li",null,"Abrechnung pro Wohneinheit"),s("li",null,"Klare Zuordnung von PV-/Netz-/Speicherstrom"),s("li",null,"RFID Ladefreigabe"),s("li",null,"Monatliche oder jährliche Abrechnung")],-1)),s("div",T,[d(g,{class:"btn btn-outline-secondary order-button",href:"https://wb-solution.de/produkt/mieterstromabrechnung/"},{default:r(()=>[...e[0]||(e[0]=[a(" JETZT BESTELLEN > ",-1)])]),_:1})])]),_:1})}const z=k(N,[["render",W],["__scopeId","data-v-6ef6e3ad"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/billing/tenantBillingShop.vue"]]),E={name:"VehicleBillingShop"},K={class:"d-flex justify-content-end"};function j(t,e,n,c,o,f){const g=m("openwb-base-click-button"),l=m("openwb-base-card");return i(),_(l,{title:"OpenWB Shop"},{default:r(()=>[e[1]||(e[1]=s("div",{class:"font-weight-bold mb-2"},"Noch kein Dienstwagenabrechnungs-Kunde?",-1)),e[2]||(e[2]=s("div",{class:"mb-3"},[a(" openWB ermöglicht die Abrechnung von zu Hause geladenem Strom für "),s("strong",null,"Dienstwagen, mit oder ohne Abrechnungsdienstleister."),a(" Voraussetzung: openWB mit software2. ")],-1)),e[3]||(e[3]=s("div",{class:"font-weight-bold"},"Mögliche Modelle:",-1)),e[4]||(e[4]=s("ul",{class:"mb-2 pl-3"},[s("li",null,"Manuelle Übermittlung (bei eigener oder geteilter Nutzung)"),s("li",null,"Automatischer Datenexport durch Ladelog (z.B. per RFID oder Fahrzeug-Zuordnung)"),s("li",null,"Anbindung an OCPP-Abrechnungsdienstleister"),s("li",null,"Komplettabrechnung durch openWB")],-1)),s("div",K,[d(g,{class:"btn btn-outline-secondary order-button",href:"https://wb-solution.de/produkt/dienstwagenabrechnung/"},{default:r(()=>[...e[0]||(e[0]=[a(" JETZT BESTELLEN > ",-1)])]),_:1})])]),_:1})}const P=k(E,[["render",j],["__scopeId","data-v-ca38ab27"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/billing/VehicleBillingShop.vue"]]),L={name:"BaseStatusPage",components:{TenantBillingShop:z,VehicleBillingShop:P},props:{billingService:{type:String,required:!0},username:{type:String,default:""},password:{type:String,default:""},connectionState:{type:String,default:""},contractStatus:{type:String,default:""},lastSync:{type:String,default:""},assignments:{type:Array,default:()=>[]},contractDetails:{type:Object,default:()=>({})},errorMessage:{type:String,default:""},wasConnected:Boolean,titleText:{type:String,default:""},tableColumns:{type:Array,default:()=>[]}},emits:["connect","disconnect","update:username","update:password"]},O={class:"form-row mt-2 justify-content-end"},Z={class:"col-md-8"},U={key:0,class:"form-row mt-3 justify-content-end"},F={class:"col-md-8"},I={class:"row"},q={class:"col"},J={class:"col"},R={class:"row"},G={class:"col text-right"},H={class:"row"},Q={class:"col text-right"},X={class:"row"},Y={class:"col text-right"},$={key:0,class:"mt-3"},ee={class:"table table-sm table-bordered"},te={key:2};function ne(t,e,n,c,o,f){const g=m("openwb-base-text-input"),l=m("openwb-base-click-button"),S=m("openwb-base-card"),B=m("openwb-base-alert"),h=m("tenant-billing-shop"),D=m("vehicle-billing-shop");return i(),b("div",null,[d(S,null,{header:r(()=>[a(" Verbindung "+p(n.titleText),1)]),default:r(()=>[d(g,{title:"Benutzername",subtype:"user","model-value":n.username,"onUpdate:modelValue":e[0]||(e[0]=u=>t.$emit("update:username",u))},{help:r(()=>[...e[5]||(e[5]=[a(" Eingabefeld für Benutzernamen ",-1)])]),_:1},8,["model-value"]),d(g,{title:"Passwort",subtype:"password","model-value":n.password,"onUpdate:modelValue":e[1]||(e[1]=u=>t.$emit("update:password",u))},{help:r(()=>[...e[6]||(e[6]=[a(" Das Passwort kann per Klick auf das Auge angezeigt werden. ",-1)])]),_:1},8,["model-value"]),s("div",O,[s("div",Z,[d(l,{class:"btn btn-info w-100",disabled:n.connectionState==="loading",onButtonClicked:e[2]||(e[2]=u=>t.$emit("connect"))},{default:r(()=>[a(p(n.connectionState==="loading"?"wird verbunden...":"Verbinden"),1)]),_:1},8,["disabled"])])]),n.wasConnected?(i(),b("div",U,[s("div",F,[s("div",I,[s("div",q,[d(l,{class:"btn btn-success w-100",disabled:n.connectionState==="loading",onButtonClicked:e[3]||(e[3]=u=>t.$emit("connect"))},{default:r(()=>[a(p(n.connectionState==="loading"?"wird aktualisiert...":"Aktualisieren"),1)]),_:1},8,["disabled"])]),s("div",J,[d(l,{class:"btn btn-danger w-100",onButtonClicked:e[4]||(e[4]=u=>t.$emit("disconnect"))},{default:r(()=>[...e[7]||(e[7]=[a(" Trennen ",-1)])]),_:1})])])])])):w("",!0)]),_:1}),d(S,{title:"Status"},{default:r(()=>[s("div",R,[e[8]||(e[8]=s("div",{class:"col"},"Verbindungsstatus",-1)),s("div",G,[s("span",{class:y(n.connectionState==="success"?"text-success":n.connectionState==="loading"?"text-warning":"text-danger")},p(n.connectionState==="loading"?"Wird verbunden...":n.connectionState==="success"?"Verbunden":"Nicht verbunden"),3)])]),e[11]||(e[11]=s("hr",null,null,-1)),s("div",H,[e[9]||(e[9]=s("div",{class:"col"},"Vertragsstatus",-1)),s("div",Q,[s("span",{class:y(n.contractStatus==="active"?"text-success":"text-danger")},p(n.contractStatus),3)])]),e[12]||(e[12]=s("hr",null,null,-1)),s("div",X,[e[10]||(e[10]=s("div",{class:"col"},"Letzte Synchronisation",-1)),s("div",Y,p(n.lastSync),1)]),e[13]||(e[13]=s("hr",null,null,-1)),n.connectionState==="success"||n.connectionState==="error"?(i(),b("div",$,[d(B,{subtype:n.connectionState==="error"?"danger":"success"},{default:r(()=>[a(p(n.connectionState==="error"?n.errorMessage:"Verbindung erfolgreich"),1)]),_:1},8,["subtype"])])):w("",!0)]),_:1}),n.wasConnected?(i(),_(S,{key:0,title:"Portal"},{default:r(()=>[d(l,{class:"btn btn-info w-100",href:"https://mieterstrom.openwb.de/"},{default:r(()=>[...e[14]||(e[14]=[a(" Mieterstrom Portal öffnen ",-1)])]),_:1}),d(l,{class:"btn btn-info w-100",href:n.contractDetails?.downloadUrl||"https://mieterstrom.openwb.de/"},{default:r(()=>[...e[15]||(e[15]=[a(" Abrechnung Download Portal öffnen ",-1)])]),_:1},8,["href"])]),_:1})):w("",!0),n.wasConnected&&n.assignments.length?(i(),_(S,{key:1},{header:r(()=>[a(" Verbraucher - Zuordnung "+p(n.titleText),1)]),default:r(()=>[s("table",ee,[s("thead",null,[s("tr",null,[(i(!0),b(x,null,C(n.tableColumns,u=>(i(),b("th",{key:u.label,class:y(u.align==="right"?"text-right":u.align==="center"?"text-center":"")},p(u.label),3))),128))])]),s("tbody",null,[(i(!0),b(x,null,C(n.assignments,(u,V)=>(i(),b("tr",{key:V},[(i(!0),b(x,null,C(n.tableColumns,v=>(i(),b("td",{key:v.label,class:y(v.align==="right"?"text-right":v.align==="center"?"text-center":"")},p(u[v.field]),3))),128))]))),128))])])]),_:1})):w("",!0),["success","loading"].includes(n.connectionState)?w("",!0):(i(),b("div",te,[n.billingService==="tenant"?(i(),_(h,{key:0})):w("",!0),n.billingService==="vehicle"?(i(),_(D,{key:1})):w("",!0)]))])}const se=k(L,[["render",ne],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/billing/BaseStatusPage.vue"]]),oe={components:{BaseStatusPage:se},mixins:[M],data(){return{apiUrl:"https://mieterstrom-management.wb-solution.de/api/v1/mieterstrom-main",mqttTopics:[{topic:"openWB/system/device/+/component/+/config",writeable:!1}],username:"",password:"",name:"",contractStatus:"",lastSync:"",rawAssignments:[],contractDetails:{},errorMessage:"",connectionState:"idle",wasConnected:!1,tableColumns:[{label:"Zähler",field:"device"},{label:"Zugeordnet zu",field:"assigned_to",align:"right"}]}},computed:{assignments(){return this.rawAssignments.map(([t,e])=>{const n=t.match(/\d+/),c=n?Number(n[0]):null,o=this.counterNameMap[c];return{device:this.getCounterDisplayName(t,o),assigned_to:e,sortKey:c??9999}}).sort((t,e)=>t.sortKey-e.sortKey)},counterNameMap(){const t=this.getWildcardTopics("openWB/system/device/+/component/+/config"),e={};return Object.values(t).forEach(n=>{n?.type==="counter"&&(e[n.id]=n.name)}),e},titleText(){if(!this.name)return"";const t=this.name,e=this.contractDetails?.installation;return`- ${t} - ${e}`}},methods:{async fetchStatus(){this.errorMessage="",this.connectionState="loading";try{const e=(await A.post(this.apiUrl,{username:this.username,password:this.password})).data;if(!e.success){this.errorMessage=e.error||"Login fehlgeschlagen",this.connectionState="error",this.clearData();return}const n=this.transformApiData(e.data);this.applyStatus(n)}catch(t){console.error(t);let e="Serverfehler";t.response?.data?.error?e=t.response.data.error:t.message&&(e=t.message),this.errorMessage=e,this.connectionState="error",this.clearData()}},transformApiData(t){const e=Object.keys(t).find(h=>h.includes("/stammdaten/name")),n=t[e]||"Unbekannt",c=Object.keys(t).find(h=>h.includes("/stammdaten/pdftoken")),o=t[c]||{},f=t.contract_active,g=Object.keys(t).find(h=>h.includes("/stammdaten/lastdata")),l=t[g],S=Object.keys(t).find(h=>h.includes("/stammdaten/counters")),B=t[S]||{};return{name:n,contractStatus:f,lastSync:l?l*1e3:null,counters:B,contractDetails:o,error:null}},getCounterDisplayName(t,e){const n=t.match(/\d+/),c=n?Number(n[0]):null;return e&&c!==null?`Zähler ${c}: ${e}`:c!==null?`Zähler ${c}`:t},applyStatus(t){this.name=t.name,this.contractStatus=t.contractStatus,this.lastSync=this.formatDate(t.lastSync),this.rawAssignments=Object.entries(t.counters||{}),this.contractDetails=t.contractDetails||{},this.connectionState=t.error?"error":"success",this.wasConnected=!t.error,this.errorMessage=t.error||""},formatDate(t){return t?new Date(t).toLocaleString():null},clearData(){this.name=void 0,this.contractStatus="",this.rawAssignments=[],this.contractDetails={},this.lastSync=null},disconnect(){this.connectionState="idle",this.wasConnected=!1,this.errorMessage="",this.password="",this.clearData()}}};function re(t,e,n,c,o,f){const g=m("base-status-page");return i(),_(g,{"billing-service":"tenant",username:o.username,password:o.password,"connection-state":o.connectionState,"contract-status":o.contractStatus,"last-sync":o.lastSync,assignments:f.assignments,"contract-details":o.contractDetails,"error-message":o.errorMessage,"was-connected":o.wasConnected,"table-columns":o.tableColumns,"title-text":f.titleText,onConnect:f.fetchStatus,onDisconnect:f.disconnect,"onUpdate:username":e[0]||(e[0]=l=>o.username=l),"onUpdate:password":e[1]||(e[1]=l=>o.password=l)},null,8,["username","password","connection-state","contract-status","last-sync","assignments","contract-details","error-message","was-connected","table-columns","title-text","onConnect","onDisconnect"])}const me=k(oe,[["render",re],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/TenantEnergyBilling.vue"]]);export{me as default}; +import{a as A}from"./vendor-axios-C0vEeTtS.js";import{_ as k,m,l as i,z as _,u as r,y as s,B as a,q as d,f as b,J as p,x as w,k as y,K as x,L as C}from"./vendor-BwGffBs-.js";import{C as M}from"./index-CE-5DBwq.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";const N={name:"TenantBillingShop"},T={class:"d-flex justify-content-end"};function W(t,e,n,c,o,f){const g=m("openwb-base-click-button"),l=m("openwb-base-card");return i(),_(l,{title:"OpenWB Shop"},{default:r(()=>[e[1]||(e[1]=s("div",{class:"font-weight-bold mb-2"},"Noch kein Mieterstrom-Kunde?",-1)),e[2]||(e[2]=s("div",{class:"mb-3"},[a(" Mit openWB können"),s("strong",null,"Vermieter den Stromverbrauch ihrer Mieter"),a(" erfassen und direkt abrechnen, "),s("strong",null,"egal ob mit oder ohne PV-Anlage."),a(" Auch gespeicherter Strom (z.B. aus einem Batteriespeicher) kann berücksichtigt werden. ")],-1)),e[3]||(e[3]=s("div",{class:"font-weight-bold"},"Vorteile:",-1)),e[4]||(e[4]=s("ul",{class:"mb-2 pl-3"},[s("li",null,"Günstiger Strom durch Wegfall von Netzentgelten"),s("li",null,"Abrechnung pro Wohneinheit"),s("li",null,"Klare Zuordnung von PV-/Netz-/Speicherstrom"),s("li",null,"RFID Ladefreigabe"),s("li",null,"Monatliche oder jährliche Abrechnung")],-1)),s("div",T,[d(g,{class:"btn btn-outline-secondary order-button",href:"https://wb-solution.de/produkt/mieterstromabrechnung/"},{default:r(()=>[...e[0]||(e[0]=[a(" JETZT BESTELLEN > ",-1)])]),_:1})])]),_:1})}const z=k(N,[["render",W],["__scopeId","data-v-6ef6e3ad"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/billing/tenantBillingShop.vue"]]),E={name:"VehicleBillingShop"},K={class:"d-flex justify-content-end"};function j(t,e,n,c,o,f){const g=m("openwb-base-click-button"),l=m("openwb-base-card");return i(),_(l,{title:"OpenWB Shop"},{default:r(()=>[e[1]||(e[1]=s("div",{class:"font-weight-bold mb-2"},"Noch kein Dienstwagenabrechnungs-Kunde?",-1)),e[2]||(e[2]=s("div",{class:"mb-3"},[a(" openWB ermöglicht die Abrechnung von zu Hause geladenem Strom für "),s("strong",null,"Dienstwagen, mit oder ohne Abrechnungsdienstleister."),a(" Voraussetzung: openWB mit software2. ")],-1)),e[3]||(e[3]=s("div",{class:"font-weight-bold"},"Mögliche Modelle:",-1)),e[4]||(e[4]=s("ul",{class:"mb-2 pl-3"},[s("li",null,"Manuelle Übermittlung (bei eigener oder geteilter Nutzung)"),s("li",null,"Automatischer Datenexport durch Ladelog (z.B. per RFID oder Fahrzeug-Zuordnung)"),s("li",null,"Anbindung an OCPP-Abrechnungsdienstleister"),s("li",null,"Komplettabrechnung durch openWB")],-1)),s("div",K,[d(g,{class:"btn btn-outline-secondary order-button",href:"https://wb-solution.de/produkt/dienstwagenabrechnung/"},{default:r(()=>[...e[0]||(e[0]=[a(" JETZT BESTELLEN > ",-1)])]),_:1})])]),_:1})}const P=k(E,[["render",j],["__scopeId","data-v-ca38ab27"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/billing/VehicleBillingShop.vue"]]),L={name:"BaseStatusPage",components:{TenantBillingShop:z,VehicleBillingShop:P},props:{billingService:{type:String,required:!0},username:{type:String,default:""},password:{type:String,default:""},connectionState:{type:String,default:""},contractStatus:{type:String,default:""},lastSync:{type:String,default:""},assignments:{type:Array,default:()=>[]},contractDetails:{type:Object,default:()=>({})},errorMessage:{type:String,default:""},wasConnected:Boolean,titleText:{type:String,default:""},tableColumns:{type:Array,default:()=>[]}},emits:["connect","disconnect","update:username","update:password"]},O={class:"form-row mt-2 justify-content-end"},Z={class:"col-md-8"},U={key:0,class:"form-row mt-3 justify-content-end"},F={class:"col-md-8"},I={class:"row"},q={class:"col"},J={class:"col"},R={class:"row"},G={class:"col text-right"},H={class:"row"},Q={class:"col text-right"},X={class:"row"},Y={class:"col text-right"},$={key:0,class:"mt-3"},ee={class:"table table-sm table-bordered"},te={key:2};function ne(t,e,n,c,o,f){const g=m("openwb-base-text-input"),l=m("openwb-base-click-button"),S=m("openwb-base-card"),B=m("openwb-base-alert"),h=m("tenant-billing-shop"),D=m("vehicle-billing-shop");return i(),b("div",null,[d(S,null,{header:r(()=>[a(" Verbindung "+p(n.titleText),1)]),default:r(()=>[d(g,{title:"Benutzername",subtype:"user","model-value":n.username,"onUpdate:modelValue":e[0]||(e[0]=u=>t.$emit("update:username",u))},{help:r(()=>[...e[5]||(e[5]=[a(" Eingabefeld für Benutzernamen ",-1)])]),_:1},8,["model-value"]),d(g,{title:"Passwort",subtype:"password","model-value":n.password,"onUpdate:modelValue":e[1]||(e[1]=u=>t.$emit("update:password",u))},{help:r(()=>[...e[6]||(e[6]=[a(" Das Passwort kann per Klick auf das Auge angezeigt werden. ",-1)])]),_:1},8,["model-value"]),s("div",O,[s("div",Z,[d(l,{class:"btn btn-info w-100",disabled:n.connectionState==="loading",onButtonClicked:e[2]||(e[2]=u=>t.$emit("connect"))},{default:r(()=>[a(p(n.connectionState==="loading"?"wird verbunden...":"Verbinden"),1)]),_:1},8,["disabled"])])]),n.wasConnected?(i(),b("div",U,[s("div",F,[s("div",I,[s("div",q,[d(l,{class:"btn btn-success w-100",disabled:n.connectionState==="loading",onButtonClicked:e[3]||(e[3]=u=>t.$emit("connect"))},{default:r(()=>[a(p(n.connectionState==="loading"?"wird aktualisiert...":"Aktualisieren"),1)]),_:1},8,["disabled"])]),s("div",J,[d(l,{class:"btn btn-danger w-100",onButtonClicked:e[4]||(e[4]=u=>t.$emit("disconnect"))},{default:r(()=>[...e[7]||(e[7]=[a(" Trennen ",-1)])]),_:1})])])])])):w("",!0)]),_:1}),d(S,{title:"Status"},{default:r(()=>[s("div",R,[e[8]||(e[8]=s("div",{class:"col"},"Verbindungsstatus",-1)),s("div",G,[s("span",{class:y(n.connectionState==="success"?"text-success":n.connectionState==="loading"?"text-warning":"text-danger")},p(n.connectionState==="loading"?"Wird verbunden...":n.connectionState==="success"?"Verbunden":"Nicht verbunden"),3)])]),e[11]||(e[11]=s("hr",null,null,-1)),s("div",H,[e[9]||(e[9]=s("div",{class:"col"},"Vertragsstatus",-1)),s("div",Q,[s("span",{class:y(n.contractStatus==="active"?"text-success":"text-danger")},p(n.contractStatus),3)])]),e[12]||(e[12]=s("hr",null,null,-1)),s("div",X,[e[10]||(e[10]=s("div",{class:"col"},"Letzte Synchronisation",-1)),s("div",Y,p(n.lastSync),1)]),e[13]||(e[13]=s("hr",null,null,-1)),n.connectionState==="success"||n.connectionState==="error"?(i(),b("div",$,[d(B,{subtype:n.connectionState==="error"?"danger":"success"},{default:r(()=>[a(p(n.connectionState==="error"?n.errorMessage:"Verbindung erfolgreich"),1)]),_:1},8,["subtype"])])):w("",!0)]),_:1}),n.wasConnected?(i(),_(S,{key:0,title:"Portal"},{default:r(()=>[d(l,{class:"btn btn-info w-100",href:"https://mieterstrom.openwb.de/"},{default:r(()=>[...e[14]||(e[14]=[a(" Mieterstrom Portal öffnen ",-1)])]),_:1}),d(l,{class:"btn btn-info w-100",href:n.contractDetails?.downloadUrl||"https://mieterstrom.openwb.de/"},{default:r(()=>[...e[15]||(e[15]=[a(" Abrechnung Download Portal öffnen ",-1)])]),_:1},8,["href"])]),_:1})):w("",!0),n.wasConnected&&n.assignments.length?(i(),_(S,{key:1},{header:r(()=>[a(" Verbraucher - Zuordnung "+p(n.titleText),1)]),default:r(()=>[s("table",ee,[s("thead",null,[s("tr",null,[(i(!0),b(x,null,C(n.tableColumns,u=>(i(),b("th",{key:u.label,class:y(u.align==="right"?"text-right":u.align==="center"?"text-center":"")},p(u.label),3))),128))])]),s("tbody",null,[(i(!0),b(x,null,C(n.assignments,(u,V)=>(i(),b("tr",{key:V},[(i(!0),b(x,null,C(n.tableColumns,v=>(i(),b("td",{key:v.label,class:y(v.align==="right"?"text-right":v.align==="center"?"text-center":"")},p(u[v.field]),3))),128))]))),128))])])]),_:1})):w("",!0),["success","loading"].includes(n.connectionState)?w("",!0):(i(),b("div",te,[n.billingService==="tenant"?(i(),_(h,{key:0})):w("",!0),n.billingService==="vehicle"?(i(),_(D,{key:1})):w("",!0)]))])}const se=k(L,[["render",ne],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/billing/BaseStatusPage.vue"]]),oe={components:{BaseStatusPage:se},mixins:[M],data(){return{apiUrl:"https://mieterstrom-management.wb-solution.de/api/v1/mieterstrom-main",mqttTopics:[{topic:"openWB/system/device/+/component/+/config",writeable:!1}],username:"",password:"",name:"",contractStatus:"",lastSync:"",rawAssignments:[],contractDetails:{},errorMessage:"",connectionState:"idle",wasConnected:!1,tableColumns:[{label:"Zähler",field:"device"},{label:"Zugeordnet zu",field:"assigned_to",align:"right"}]}},computed:{assignments(){return this.rawAssignments.map(([t,e])=>{const n=t.match(/\d+/),c=n?Number(n[0]):null,o=this.counterNameMap[c];return{device:this.getCounterDisplayName(t,o),assigned_to:e,sortKey:c??9999}}).sort((t,e)=>t.sortKey-e.sortKey)},counterNameMap(){const t=this.getWildcardTopics("openWB/system/device/+/component/+/config"),e={};return Object.values(t).forEach(n=>{n?.type==="counter"&&(e[n.id]=n.name)}),e},titleText(){if(!this.name)return"";const t=this.name,e=this.contractDetails?.installation;return`- ${t} - ${e}`}},methods:{async fetchStatus(){this.errorMessage="",this.connectionState="loading";try{const e=(await A.post(this.apiUrl,{username:this.username,password:this.password})).data;if(!e.success){this.errorMessage=e.error||"Login fehlgeschlagen",this.connectionState="error",this.clearData();return}const n=this.transformApiData(e.data);this.applyStatus(n)}catch(t){console.error(t);let e="Serverfehler";t.response?.data?.error?e=t.response.data.error:t.message&&(e=t.message),this.errorMessage=e,this.connectionState="error",this.clearData()}},transformApiData(t){const e=Object.keys(t).find(h=>h.includes("/stammdaten/name")),n=t[e]||"Unbekannt",c=Object.keys(t).find(h=>h.includes("/stammdaten/pdftoken")),o=t[c]||{},f=t.contract_active,g=Object.keys(t).find(h=>h.includes("/stammdaten/lastdata")),l=t[g],S=Object.keys(t).find(h=>h.includes("/stammdaten/counters")),B=t[S]||{};return{name:n,contractStatus:f,lastSync:l?l*1e3:null,counters:B,contractDetails:o,error:null}},getCounterDisplayName(t,e){const n=t.match(/\d+/),c=n?Number(n[0]):null;return e&&c!==null?`Zähler ${c}: ${e}`:c!==null?`Zähler ${c}`:t},applyStatus(t){this.name=t.name,this.contractStatus=t.contractStatus,this.lastSync=this.formatDate(t.lastSync),this.rawAssignments=Object.entries(t.counters||{}),this.contractDetails=t.contractDetails||{},this.connectionState=t.error?"error":"success",this.wasConnected=!t.error,this.errorMessage=t.error||""},formatDate(t){return t?new Date(t).toLocaleString():null},clearData(){this.name=void 0,this.contractStatus="",this.rawAssignments=[],this.contractDetails={},this.lastSync=null},disconnect(){this.connectionState="idle",this.wasConnected=!1,this.errorMessage="",this.password="",this.clearData()}}};function re(t,e,n,c,o,f){const g=m("base-status-page");return i(),_(g,{"billing-service":"tenant",username:o.username,password:o.password,"connection-state":o.connectionState,"contract-status":o.contractStatus,"last-sync":o.lastSync,assignments:f.assignments,"contract-details":o.contractDetails,"error-message":o.errorMessage,"was-connected":o.wasConnected,"table-columns":o.tableColumns,"title-text":f.titleText,onConnect:f.fetchStatus,onDisconnect:f.disconnect,"onUpdate:username":e[0]||(e[0]=l=>o.username=l),"onUpdate:password":e[1]||(e[1]=l=>o.password=l)},null,8,["username","password","connection-state","contract-status","last-sync","assignments","contract-details","error-message","was-connected","table-columns","title-text","onConnect","onDisconnect"])}const me=k(oe,[["render",re],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/TenantEnergyBilling.vue"]]);export{me as default}; diff --git a/web/settings/assets/TestingStore-DDIFpUgY.js b/web/settings/assets/TestingStore-2DRxZG6Y.js similarity index 98% rename from web/settings/assets/TestingStore-DDIFpUgY.js rename to web/settings/assets/TestingStore-2DRxZG6Y.js index 3b9fe03c59..1f867ac3be 100644 --- a/web/settings/assets/TestingStore-DDIFpUgY.js +++ b/web/settings/assets/TestingStore-2DRxZG6Y.js @@ -1 +1 @@ -import{C as B}from"./index-Bv2WLdLZ.js";import{S as O}from"./OpenwbSortableList-CQO_8Mps.js";import{_ as T,m as u,l as D,f as N,y as s,q as o,u as n,B as a,J as b}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";const Z={name:"OpenwbTestingStoreView",components:{SortableList:O},mixins:[B],emits:["save","reset","defaults"],data(){return{mqttTopics:[]}}},A={class:"testingStore"},L={name:"testingStoreForm"};function G(t,e,J,j,F,W){const v=u("OpenwbBaseHeading"),E=u("OpenwbBaseSettingElement"),x=u("openwb-base-button-input"),f=u("openwb-base-button-group-input"),i=u("openwb-base-card"),g=u("openwb-base-color-picker"),p=u("openwb-base-text-input"),d=u("openwb-base-number-input"),V=u("openwb-base-textarea"),S=u("openwb-base-range-input"),m=u("openwb-base-select-input"),w=u("openwb-base-heading"),y=u("openwb-base-checkbox-input"),$=u("openwb-base-array-input"),U=u("openwb-base-copy-to-clipboard"),r=u("openwb-base-alert"),k=u("sortable-list"),z=u("openwb-base-submit-buttons");return D(),N("div",A,[s("form",L,[o(i,{title:"Elemente mit BaseSettingElement"},{default:n(()=>[o(v,null,{default:n(()=>[...e[34]||(e[34]=[a(" Basiselement ",-1)])]),_:1}),o(E,null,{title:n(()=>[...e[35]||(e[35]=[s("span",{style:{"font-style":"italic"}},[a(" Styled "),s("span",{style:{"font-weight":"bold"}},"Title"),a(" Slot ")],-1)])]),help:n(()=>[...e[36]||(e[36]=[a(" Basis-Element für alle weiteren Elemente. Das ist ein ",-1),s("a",{href:"test"},"Link",-1),a(". ",-1)])]),_:1}),o(v,null,{default:n(()=>[...e[37]||(e[37]=[a(" Abgeleitete Elemente ",-1)])]),_:1}),o(x,{title:"Button Input","button-text":"Klick mich",subtype:"info"},{help:n(()=>[...e[38]||(e[38]=[a(" Einfacher Click-Button für Aktionen. ",-1)])]),_:1}),o(f,{title:"Button Group Input",buttons:[{buttonValue:1,text:"Eins"},{buttonValue:2,text:"Zwei"}],"model-value":t.$store.state.examples.buttonGroup1,"onUpdate:modelValue":e[0]||(e[0]=l=>t.updateState("buttonGroup1",l))},{help:n(()=>[...e[39]||(e[39]=[a(" Button-Group Element zur Auswahl weniger Optionen. Bei vielen Optionen besser ein Dropdown verwenden. ",-1),s("a",{href:"test"},"Link",-1),a(". ",-1)])]),_:1},8,["model-value"])]),_:1}),o(i,{title:"Einfache Eingabefelder"},{default:n(()=>[o(p,{title:"1. Text","model-value":t.$store.state.examples.text1,"onUpdate:modelValue":e[2]||(e[2]=l=>t.updateState("text1",l))},{help:n(()=>[...e[40]||(e[40]=[a(" Einfacher Text",-1),s("br",null,null,-1),a(' Diese Komponente hat einen Slot "append" für zusätzliche Elemente, die rechts vom Eingabefeld angezeigt werden sollen. Das ist hier z.B. ein Farbauswahl-Element. Die Farbe kann zurückgesetzt werden, weil eine Standardfarbe gesetzt ist. Das ist hier z.B. rot (#ff0000). ',-1)])]),append:n(()=>[o(g,{class:"p-1","model-value":t.$store.state.examples.color1,"default-color":"#ff0000","onUpdate:modelValue":e[1]||(e[1]=l=>t.updateState("color1",l))},null,8,["model-value"])]),_:1},8,["model-value"]),o(p,{title:"2. Text (E-Mail)",subtype:"email","model-value":t.$store.state.examples.text2,"onUpdate:modelValue":e[3]||(e[3]=l=>t.updateState("text2",l))},{help:n(()=>[...e[41]||(e[41]=[a(" Eingabefeld für E-Mailadressen ",-1)])]),_:1},8,["model-value"]),o(p,{title:"3. Text (Host)",subtype:"host","model-value":t.$store.state.examples.text3,"onUpdate:modelValue":e[4]||(e[4]=l=>t.updateState("text3",l))},{help:n(()=>[...e[42]||(e[42]=[a(" Eingabefeld für Hosts (IP oder Namen) ",-1)])]),_:1},8,["model-value"]),o(p,{title:"4. Text (URL)",subtype:"url","model-value":t.$store.state.examples.text4,"onUpdate:modelValue":e[5]||(e[5]=l=>t.updateState("text4",l))},{help:n(()=>[...e[43]||(e[43]=[a(" Eingabefeld für URLs ",-1)])]),_:1},8,["model-value"]),o(p,{title:"5. Text (User)",subtype:"user","model-value":t.$store.state.examples.text5,"onUpdate:modelValue":e[6]||(e[6]=l=>t.updateState("text5",l))},{help:n(()=>[...e[44]||(e[44]=[a(" Eingabefeld für Benutzernamen ",-1)])]),_:1},8,["model-value"]),o(p,{title:"6. Text (Time)",subtype:"time","model-value":t.$store.state.examples.text6,"onUpdate:modelValue":e[7]||(e[7]=l=>t.updateState("text6",l))},{help:n(()=>[...e[45]||(e[45]=[a(" Eingabefeld für Zeiten ",-1)])]),_:1},8,["model-value"]),o(p,{title:"7. Text (Date)",subtype:"date","model-value":t.$store.state.examples.text7,"onUpdate:modelValue":e[8]||(e[8]=l=>t.updateState("text7",l))},{help:n(()=>[...e[46]||(e[46]=[a(" Eingabefeld für ein Datum ",-1)])]),_:1},8,["model-value"]),o(p,{title:"8. Text (mit Add-Button)",subtype:"text","add-button":"",class:"mb-2","model-value":t.$store.state.examples.text8,"onUpdate:modelValue":e[9]||(e[9]=l=>t.updateState("text8",l)),"onInput:add":e[10]||(e[10]=l=>t.alert("Add button clicked!"))},{help:n(()=>[...e[47]||(e[47]=[a(" Eingabefeld mit einem Add-Button ",-1)])]),_:1},8,["model-value"]),e[53]||(e[53]=s("hr",null,null,-1)),o(d,{title:"1. Zahl",min:5,max:9,step:2,unit:"kW","model-value":t.$store.state.examples.number1,"onUpdate:modelValue":e[12]||(e[12]=l=>t.updateState("number1",l))},{help:n(()=>[...e[48]||(e[48]=[a(" Zahl mit Einheit.",-1),s("br",null,null,-1),a(' Diese Komponente hat einen Slot "append" für zusätzliche Elemente, die rechts vom Eingabefeld angezeigt werden sollen. Das ist hier z.B. ein Farbauswahl-Element. Ohne Standardfarbe kann die Farbe nicht zurückgesetzt werden. ',-1)])]),append:n(()=>[o(g,{class:"p-1",disabled:"","model-value":t.$store.state.examples.color2,"onUpdate:modelValue":e[11]||(e[11]=l=>t.updateState("color2",l))},null,8,["model-value"])]),_:1},8,["model-value"]),o(d,{title:"2. Zahl",min:10,max:32,step:2,"model-value":t.$store.state.examples.number2,"onUpdate:modelValue":e[13]||(e[13]=l=>t.updateState("number2",l))},{help:n(()=>[...e[49]||(e[49]=[a(" Eingabefeld für Zahlen ohne Einheit ",-1)])]),_:1},8,["model-value"]),o(d,{title:"3. Zahl",min:-30,max:30,step:.01,precision:2,unit:"ct/kWh","model-value":t.$store.state.examples.number3*1e5,"onUpdate:modelValue":e[14]||(e[14]=l=>t.updateState("number3",parseFloat((l/1e5).toFixed(7))))},{help:n(()=>[...e[50]||(e[50]=[a(" Eingabefeld für Zahlen mit Einheit und Nachkommastellen",-1),s("br",null,null,-1),a(' Zusätzlich zum optionalen Parameter "step" sollte immer auch "precision" gesetzt sein, um unvermeidbare Darstellungsfehler zu vermeiden.',-1),s("br",null,null,-1),a(" Wenn der dargestellte Wert eine andere Genauigkeit/Einheit als der Wert im Backend hat (z.B. €/Wh <-> ct/kWh), dann ist bei der Umrechnung darauf zu achten, dass es nicht erneut zu Ungenauigkeiten bei Dezimalzahlen kommt. ",-1)])]),_:1},8,["model-value"]),o(p,{title:"1. Passwort",subtype:"password","model-value":t.$store.state.examples.password1,"onUpdate:modelValue":e[15]||(e[15]=l=>t.updateState("password1",l))},{help:n(()=>[...e[51]||(e[51]=[a(" Das Passwort kann per Klick auf das Auge angezeigt werden. ",-1)])]),_:1},8,["model-value"]),e[54]||(e[54]=s("hr",null,null,-1)),o(V,{title:"1. Textarea",maxlength:"50","model-value":t.$store.state.examples.textarea1,"onUpdate:modelValue":e[16]||(e[16]=l=>t.updateState("textarea1",l))},{help:n(()=>[...e[52]||(e[52]=[a(" Textarea mit maximaler Länge von 50 Zeichen. ",-1)])]),_:1},8,["model-value"])]),_:1}),o(i,{title:"Spezielle Elemente"},{default:n(()=>[o(S,{title:"1. Range",min:6,max:32,step:1,unit:"A","model-value":t.$store.state.examples.range1,"onUpdate:modelValue":e[17]||(e[17]=l=>t.updateState("range1",l))},{help:n(()=>[...e[55]||(e[55]=[a(" Range ohne spezielle Labels ",-1)])]),_:1},8,["model-value"]),o(S,{title:"2. Range",min:0,max:11,step:1,unit:"A",labels:[{label:"Aus",value:0},{label:6,value:6},{label:7,value:7},{label:8,value:8},{label:9,value:9},{label:10,value:10},{label:11,value:11},{label:12,value:12},{label:13,value:13},{label:14,value:14},{label:15,value:15},{label:16,value:16}],"model-value":t.$store.state.examples.range2,"onUpdate:modelValue":e[18]||(e[18]=l=>t.updateState("range2",l))},{help:n(()=>[...e[56]||(e[56]=[a(" Range mit speziellen Labels ",-1)])]),_:1},8,["model-value"]),e[62]||(e[62]=s("hr",null,null,-1)),o(m,{title:"1. Select","not-selected":"Bitte auswählen",options:[{value:1,text:"Eins"},{value:2,text:"Zwei"}],"model-value":t.$store.state.examples.select1,"onUpdate:modelValue":e[19]||(e[19]=l=>t.updateState("select1",l))},{help:n(()=>[...e[57]||(e[57]=[a(" Select mit einfachen Optionen ",-1)])]),_:1},8,["model-value"]),o(m,{title:"2. Select",groups:[{label:"Gruppe 1 (Number)",options:[{value:1,text:"Eins"},{value:2,text:"Zwei"}]},{label:"Gruppe 2 (String)",options:[{value:"three",text:"Drei"},{value:"four",text:"Vier"}]}],"not-selected":"Bitte auswählen","add-button":!0,"model-value":t.$store.state.examples.select2,"onUpdate:modelValue":e[20]||(e[20]=l=>t.updateState("select2",l)),"onInput:add":e[21]||(e[21]=l=>t.alert("add button pressed"))},{help:n(()=>[...e[58]||(e[58]=[a(" Select mit Gruppen und Add-Button. ",-1)])]),_:1},8,["model-value"]),e[63]||(e[63]=s("hr",null,null,-1)),o(f,{title:"1. Button-Group",buttons:[{buttonValue:1,text:"Eins"},{buttonValue:2,text:"Zwei"}],"model-value":t.$store.state.examples.buttonGroup1,"onUpdate:modelValue":e[22]||(e[22]=l=>t.updateState("buttonGroup1",l))},{help:n(()=>[...e[59]||(e[59]=[a(" Hilfetext ",-1)])]),_:1},8,["model-value"]),o(w,null,{default:n(()=>[e[60]||(e[60]=a(" Select Element ohne Label: ",-1)),o(m,{class:"mb-1","not-selected":"Bitte auswählen",options:[{value:1,text:"Eins"},{value:2,text:"Zwei"}],"model-value":t.$store.state.examples.select1,"onUpdate:modelValue":e[23]||(e[23]=l=>t.updateState("select1",l))},null,8,["model-value"])]),_:1}),e[64]||(e[64]=s("hr",null,null,-1)),o(y,{title:"1. Checkbox","model-value":t.$store.state.examples.checkbox1,"onUpdate:modelValue":e[24]||(e[24]=l=>t.updateState("checkbox1",l))},{help:n(()=>[...e[61]||(e[61]=[a(" Hilfetext ",-1)])]),_:1},8,["model-value"])]),_:1}),o(i,{title:"JSON Gruppe"},{default:n(()=>[o(p,{title:"JSON 1",subtype:"json","model-value":t.$store.state.examples.json1,"onUpdate:modelValue":e[25]||(e[25]=l=>t.updateState("json1",l))},{help:n(()=>[...e[65]||(e[65]=[a(" JSON Objekt ",-1)])]),_:1},8,["model-value"]),o(p,{title:"JSON 1 Text","model-value":t.$store.state.examples.json1.text,"onUpdate:modelValue":e[26]||(e[26]=l=>t.updateState("json1",l,"text"))},{help:n(()=>[...e[66]||(e[66]=[a(" Text im JSON Objekt ",-1)])]),_:1},8,["model-value"]),o(d,{title:"JSON 1 Zahl","model-value":t.$store.state.examples.json1.number,"onUpdate:modelValue":e[27]||(e[27]=l=>t.updateState("json1",l,"number"))},{help:n(()=>[...e[67]||(e[67]=[a(" Zahl im JSON Objekt ",-1)])]),_:1},8,["model-value"]),o($,{title:"Tag Array","model-value":t.$store.state.examples.tags,"onUpdate:modelValue":e[28]||(e[28]=l=>t.updateState("tags",l))},{help:n(()=>[s("pre",null,b(JSON.stringify(t.$store.state.examples.tags,void 0,2)),1)]),_:1},8,["model-value"]),o($,{title:"Tag Array mit Vorgaben","valid-elements":["1234","5678"],"model-value":t.$store.state.examples.tags,"onUpdate:modelValue":e[29]||(e[29]=l=>t.updateState("tags",l))},{help:n(()=>[s("pre",null,b(JSON.stringify(t.$store.state.examples.tags,void 0,2)),1)]),_:1},8,["model-value"])]),_:1}),o(i,{title:"Meldungen"},{header:n(()=>[...e[68]||(e[68]=[s("span",{style:{"text-decoration":"underline","font-style":"italic"}},[a(" Styled "),s("span",{style:{"font-weight":"initial"}},"Header"),a(" Slot ")],-1)])]),default:n(()=>[o(w,null,{help:n(()=>[...e[69]||(e[69]=[a(" Es sind auch Hilfetexte im #help Slot möglich. ",-1),s("a",{href:"test"},"Link",-1)])]),default:n(()=>[e[70]||(e[70]=a(" Das ist eine Überschrift ",-1))]),_:1}),o(r,null,{default:n(()=>[e[72]||(e[72]=a(" Meldung ohne speziellen Subtype. ",-1)),o(U,null,{default:n(()=>[...e[71]||(e[71]=[a("Kopiere mich!",-1)])]),_:1})]),_:1}),o(r,{subtype:"info"},{default:n(()=>[...e[73]||(e[73]=[a(" Infomeldung ",-1)])]),_:1}),o(r,{subtype:"warning"},{default:n(()=>[...e[74]||(e[74]=[a(" Warnmeldung ",-1)])]),_:1}),o(r,{subtype:"danger"},{default:n(()=>[...e[75]||(e[75]=[a(" Fehlermeldung ",-1)])]),_:1})]),_:1}),o(i,{title:"Listen"},{default:n(()=>[o(k,{modelValue:t.$store.state.examples.hierarchy1,"onUpdate:modelValue":e[30]||(e[30]=l=>t.$store.state.examples.hierarchy1=l),title:"Liste 1",labels:t.$store.state.examples.hierarchy1Labels},{help:n(()=>[s("pre",null,b(JSON.stringify(t.$store.state.examples.hierarchy1,void 0,2)),1)]),_:1},8,["modelValue","labels"])]),_:1}),o(z,{"form-name":"testingStoreForm",onSave:e[31]||(e[31]=l=>t.$emit("save",[])),onReset:e[32]||(e[32]=l=>t.$emit("reset")),onDefaults:e[33]||(e[33]=l=>t.$emit("defaults"))})])])}const q=T(Z,[["render",G],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/TestingStore.vue"]]);export{q as default}; +import{C as B}from"./index-CE-5DBwq.js";import{S as O}from"./OpenwbSortableList-yQzkYwAQ.js";import{_ as T,m as u,l as D,f as N,y as s,q as o,u as n,B as a,J as b}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";const Z={name:"OpenwbTestingStoreView",components:{SortableList:O},mixins:[B],emits:["save","reset","defaults"],data(){return{mqttTopics:[]}}},A={class:"testingStore"},L={name:"testingStoreForm"};function G(t,e,J,j,F,W){const v=u("OpenwbBaseHeading"),E=u("OpenwbBaseSettingElement"),x=u("openwb-base-button-input"),f=u("openwb-base-button-group-input"),i=u("openwb-base-card"),g=u("openwb-base-color-picker"),p=u("openwb-base-text-input"),d=u("openwb-base-number-input"),V=u("openwb-base-textarea"),S=u("openwb-base-range-input"),m=u("openwb-base-select-input"),w=u("openwb-base-heading"),y=u("openwb-base-checkbox-input"),$=u("openwb-base-array-input"),U=u("openwb-base-copy-to-clipboard"),r=u("openwb-base-alert"),k=u("sortable-list"),z=u("openwb-base-submit-buttons");return D(),N("div",A,[s("form",L,[o(i,{title:"Elemente mit BaseSettingElement"},{default:n(()=>[o(v,null,{default:n(()=>[...e[34]||(e[34]=[a(" Basiselement ",-1)])]),_:1}),o(E,null,{title:n(()=>[...e[35]||(e[35]=[s("span",{style:{"font-style":"italic"}},[a(" Styled "),s("span",{style:{"font-weight":"bold"}},"Title"),a(" Slot ")],-1)])]),help:n(()=>[...e[36]||(e[36]=[a(" Basis-Element für alle weiteren Elemente. Das ist ein ",-1),s("a",{href:"test"},"Link",-1),a(". ",-1)])]),_:1}),o(v,null,{default:n(()=>[...e[37]||(e[37]=[a(" Abgeleitete Elemente ",-1)])]),_:1}),o(x,{title:"Button Input","button-text":"Klick mich",subtype:"info"},{help:n(()=>[...e[38]||(e[38]=[a(" Einfacher Click-Button für Aktionen. ",-1)])]),_:1}),o(f,{title:"Button Group Input",buttons:[{buttonValue:1,text:"Eins"},{buttonValue:2,text:"Zwei"}],"model-value":t.$store.state.examples.buttonGroup1,"onUpdate:modelValue":e[0]||(e[0]=l=>t.updateState("buttonGroup1",l))},{help:n(()=>[...e[39]||(e[39]=[a(" Button-Group Element zur Auswahl weniger Optionen. Bei vielen Optionen besser ein Dropdown verwenden. ",-1),s("a",{href:"test"},"Link",-1),a(". ",-1)])]),_:1},8,["model-value"])]),_:1}),o(i,{title:"Einfache Eingabefelder"},{default:n(()=>[o(p,{title:"1. Text","model-value":t.$store.state.examples.text1,"onUpdate:modelValue":e[2]||(e[2]=l=>t.updateState("text1",l))},{help:n(()=>[...e[40]||(e[40]=[a(" Einfacher Text",-1),s("br",null,null,-1),a(' Diese Komponente hat einen Slot "append" für zusätzliche Elemente, die rechts vom Eingabefeld angezeigt werden sollen. Das ist hier z.B. ein Farbauswahl-Element. Die Farbe kann zurückgesetzt werden, weil eine Standardfarbe gesetzt ist. Das ist hier z.B. rot (#ff0000). ',-1)])]),append:n(()=>[o(g,{class:"p-1","model-value":t.$store.state.examples.color1,"default-color":"#ff0000","onUpdate:modelValue":e[1]||(e[1]=l=>t.updateState("color1",l))},null,8,["model-value"])]),_:1},8,["model-value"]),o(p,{title:"2. Text (E-Mail)",subtype:"email","model-value":t.$store.state.examples.text2,"onUpdate:modelValue":e[3]||(e[3]=l=>t.updateState("text2",l))},{help:n(()=>[...e[41]||(e[41]=[a(" Eingabefeld für E-Mailadressen ",-1)])]),_:1},8,["model-value"]),o(p,{title:"3. Text (Host)",subtype:"host","model-value":t.$store.state.examples.text3,"onUpdate:modelValue":e[4]||(e[4]=l=>t.updateState("text3",l))},{help:n(()=>[...e[42]||(e[42]=[a(" Eingabefeld für Hosts (IP oder Namen) ",-1)])]),_:1},8,["model-value"]),o(p,{title:"4. Text (URL)",subtype:"url","model-value":t.$store.state.examples.text4,"onUpdate:modelValue":e[5]||(e[5]=l=>t.updateState("text4",l))},{help:n(()=>[...e[43]||(e[43]=[a(" Eingabefeld für URLs ",-1)])]),_:1},8,["model-value"]),o(p,{title:"5. Text (User)",subtype:"user","model-value":t.$store.state.examples.text5,"onUpdate:modelValue":e[6]||(e[6]=l=>t.updateState("text5",l))},{help:n(()=>[...e[44]||(e[44]=[a(" Eingabefeld für Benutzernamen ",-1)])]),_:1},8,["model-value"]),o(p,{title:"6. Text (Time)",subtype:"time","model-value":t.$store.state.examples.text6,"onUpdate:modelValue":e[7]||(e[7]=l=>t.updateState("text6",l))},{help:n(()=>[...e[45]||(e[45]=[a(" Eingabefeld für Zeiten ",-1)])]),_:1},8,["model-value"]),o(p,{title:"7. Text (Date)",subtype:"date","model-value":t.$store.state.examples.text7,"onUpdate:modelValue":e[8]||(e[8]=l=>t.updateState("text7",l))},{help:n(()=>[...e[46]||(e[46]=[a(" Eingabefeld für ein Datum ",-1)])]),_:1},8,["model-value"]),o(p,{title:"8. Text (mit Add-Button)",subtype:"text","add-button":"",class:"mb-2","model-value":t.$store.state.examples.text8,"onUpdate:modelValue":e[9]||(e[9]=l=>t.updateState("text8",l)),"onInput:add":e[10]||(e[10]=l=>t.alert("Add button clicked!"))},{help:n(()=>[...e[47]||(e[47]=[a(" Eingabefeld mit einem Add-Button ",-1)])]),_:1},8,["model-value"]),e[53]||(e[53]=s("hr",null,null,-1)),o(d,{title:"1. Zahl",min:5,max:9,step:2,unit:"kW","model-value":t.$store.state.examples.number1,"onUpdate:modelValue":e[12]||(e[12]=l=>t.updateState("number1",l))},{help:n(()=>[...e[48]||(e[48]=[a(" Zahl mit Einheit.",-1),s("br",null,null,-1),a(' Diese Komponente hat einen Slot "append" für zusätzliche Elemente, die rechts vom Eingabefeld angezeigt werden sollen. Das ist hier z.B. ein Farbauswahl-Element. Ohne Standardfarbe kann die Farbe nicht zurückgesetzt werden. ',-1)])]),append:n(()=>[o(g,{class:"p-1",disabled:"","model-value":t.$store.state.examples.color2,"onUpdate:modelValue":e[11]||(e[11]=l=>t.updateState("color2",l))},null,8,["model-value"])]),_:1},8,["model-value"]),o(d,{title:"2. Zahl",min:10,max:32,step:2,"model-value":t.$store.state.examples.number2,"onUpdate:modelValue":e[13]||(e[13]=l=>t.updateState("number2",l))},{help:n(()=>[...e[49]||(e[49]=[a(" Eingabefeld für Zahlen ohne Einheit ",-1)])]),_:1},8,["model-value"]),o(d,{title:"3. Zahl",min:-30,max:30,step:.01,precision:2,unit:"ct/kWh","model-value":t.$store.state.examples.number3*1e5,"onUpdate:modelValue":e[14]||(e[14]=l=>t.updateState("number3",parseFloat((l/1e5).toFixed(7))))},{help:n(()=>[...e[50]||(e[50]=[a(" Eingabefeld für Zahlen mit Einheit und Nachkommastellen",-1),s("br",null,null,-1),a(' Zusätzlich zum optionalen Parameter "step" sollte immer auch "precision" gesetzt sein, um unvermeidbare Darstellungsfehler zu vermeiden.',-1),s("br",null,null,-1),a(" Wenn der dargestellte Wert eine andere Genauigkeit/Einheit als der Wert im Backend hat (z.B. €/Wh <-> ct/kWh), dann ist bei der Umrechnung darauf zu achten, dass es nicht erneut zu Ungenauigkeiten bei Dezimalzahlen kommt. ",-1)])]),_:1},8,["model-value"]),o(p,{title:"1. Passwort",subtype:"password","model-value":t.$store.state.examples.password1,"onUpdate:modelValue":e[15]||(e[15]=l=>t.updateState("password1",l))},{help:n(()=>[...e[51]||(e[51]=[a(" Das Passwort kann per Klick auf das Auge angezeigt werden. ",-1)])]),_:1},8,["model-value"]),e[54]||(e[54]=s("hr",null,null,-1)),o(V,{title:"1. Textarea",maxlength:"50","model-value":t.$store.state.examples.textarea1,"onUpdate:modelValue":e[16]||(e[16]=l=>t.updateState("textarea1",l))},{help:n(()=>[...e[52]||(e[52]=[a(" Textarea mit maximaler Länge von 50 Zeichen. ",-1)])]),_:1},8,["model-value"])]),_:1}),o(i,{title:"Spezielle Elemente"},{default:n(()=>[o(S,{title:"1. Range",min:6,max:32,step:1,unit:"A","model-value":t.$store.state.examples.range1,"onUpdate:modelValue":e[17]||(e[17]=l=>t.updateState("range1",l))},{help:n(()=>[...e[55]||(e[55]=[a(" Range ohne spezielle Labels ",-1)])]),_:1},8,["model-value"]),o(S,{title:"2. Range",min:0,max:11,step:1,unit:"A",labels:[{label:"Aus",value:0},{label:6,value:6},{label:7,value:7},{label:8,value:8},{label:9,value:9},{label:10,value:10},{label:11,value:11},{label:12,value:12},{label:13,value:13},{label:14,value:14},{label:15,value:15},{label:16,value:16}],"model-value":t.$store.state.examples.range2,"onUpdate:modelValue":e[18]||(e[18]=l=>t.updateState("range2",l))},{help:n(()=>[...e[56]||(e[56]=[a(" Range mit speziellen Labels ",-1)])]),_:1},8,["model-value"]),e[62]||(e[62]=s("hr",null,null,-1)),o(m,{title:"1. Select","not-selected":"Bitte auswählen",options:[{value:1,text:"Eins"},{value:2,text:"Zwei"}],"model-value":t.$store.state.examples.select1,"onUpdate:modelValue":e[19]||(e[19]=l=>t.updateState("select1",l))},{help:n(()=>[...e[57]||(e[57]=[a(" Select mit einfachen Optionen ",-1)])]),_:1},8,["model-value"]),o(m,{title:"2. Select",groups:[{label:"Gruppe 1 (Number)",options:[{value:1,text:"Eins"},{value:2,text:"Zwei"}]},{label:"Gruppe 2 (String)",options:[{value:"three",text:"Drei"},{value:"four",text:"Vier"}]}],"not-selected":"Bitte auswählen","add-button":!0,"model-value":t.$store.state.examples.select2,"onUpdate:modelValue":e[20]||(e[20]=l=>t.updateState("select2",l)),"onInput:add":e[21]||(e[21]=l=>t.alert("add button pressed"))},{help:n(()=>[...e[58]||(e[58]=[a(" Select mit Gruppen und Add-Button. ",-1)])]),_:1},8,["model-value"]),e[63]||(e[63]=s("hr",null,null,-1)),o(f,{title:"1. Button-Group",buttons:[{buttonValue:1,text:"Eins"},{buttonValue:2,text:"Zwei"}],"model-value":t.$store.state.examples.buttonGroup1,"onUpdate:modelValue":e[22]||(e[22]=l=>t.updateState("buttonGroup1",l))},{help:n(()=>[...e[59]||(e[59]=[a(" Hilfetext ",-1)])]),_:1},8,["model-value"]),o(w,null,{default:n(()=>[e[60]||(e[60]=a(" Select Element ohne Label: ",-1)),o(m,{class:"mb-1","not-selected":"Bitte auswählen",options:[{value:1,text:"Eins"},{value:2,text:"Zwei"}],"model-value":t.$store.state.examples.select1,"onUpdate:modelValue":e[23]||(e[23]=l=>t.updateState("select1",l))},null,8,["model-value"])]),_:1}),e[64]||(e[64]=s("hr",null,null,-1)),o(y,{title:"1. Checkbox","model-value":t.$store.state.examples.checkbox1,"onUpdate:modelValue":e[24]||(e[24]=l=>t.updateState("checkbox1",l))},{help:n(()=>[...e[61]||(e[61]=[a(" Hilfetext ",-1)])]),_:1},8,["model-value"])]),_:1}),o(i,{title:"JSON Gruppe"},{default:n(()=>[o(p,{title:"JSON 1",subtype:"json","model-value":t.$store.state.examples.json1,"onUpdate:modelValue":e[25]||(e[25]=l=>t.updateState("json1",l))},{help:n(()=>[...e[65]||(e[65]=[a(" JSON Objekt ",-1)])]),_:1},8,["model-value"]),o(p,{title:"JSON 1 Text","model-value":t.$store.state.examples.json1.text,"onUpdate:modelValue":e[26]||(e[26]=l=>t.updateState("json1",l,"text"))},{help:n(()=>[...e[66]||(e[66]=[a(" Text im JSON Objekt ",-1)])]),_:1},8,["model-value"]),o(d,{title:"JSON 1 Zahl","model-value":t.$store.state.examples.json1.number,"onUpdate:modelValue":e[27]||(e[27]=l=>t.updateState("json1",l,"number"))},{help:n(()=>[...e[67]||(e[67]=[a(" Zahl im JSON Objekt ",-1)])]),_:1},8,["model-value"]),o($,{title:"Tag Array","model-value":t.$store.state.examples.tags,"onUpdate:modelValue":e[28]||(e[28]=l=>t.updateState("tags",l))},{help:n(()=>[s("pre",null,b(JSON.stringify(t.$store.state.examples.tags,void 0,2)),1)]),_:1},8,["model-value"]),o($,{title:"Tag Array mit Vorgaben","valid-elements":["1234","5678"],"model-value":t.$store.state.examples.tags,"onUpdate:modelValue":e[29]||(e[29]=l=>t.updateState("tags",l))},{help:n(()=>[s("pre",null,b(JSON.stringify(t.$store.state.examples.tags,void 0,2)),1)]),_:1},8,["model-value"])]),_:1}),o(i,{title:"Meldungen"},{header:n(()=>[...e[68]||(e[68]=[s("span",{style:{"text-decoration":"underline","font-style":"italic"}},[a(" Styled "),s("span",{style:{"font-weight":"initial"}},"Header"),a(" Slot ")],-1)])]),default:n(()=>[o(w,null,{help:n(()=>[...e[69]||(e[69]=[a(" Es sind auch Hilfetexte im #help Slot möglich. ",-1),s("a",{href:"test"},"Link",-1)])]),default:n(()=>[e[70]||(e[70]=a(" Das ist eine Überschrift ",-1))]),_:1}),o(r,null,{default:n(()=>[e[72]||(e[72]=a(" Meldung ohne speziellen Subtype. ",-1)),o(U,null,{default:n(()=>[...e[71]||(e[71]=[a("Kopiere mich!",-1)])]),_:1})]),_:1}),o(r,{subtype:"info"},{default:n(()=>[...e[73]||(e[73]=[a(" Infomeldung ",-1)])]),_:1}),o(r,{subtype:"warning"},{default:n(()=>[...e[74]||(e[74]=[a(" Warnmeldung ",-1)])]),_:1}),o(r,{subtype:"danger"},{default:n(()=>[...e[75]||(e[75]=[a(" Fehlermeldung ",-1)])]),_:1})]),_:1}),o(i,{title:"Listen"},{default:n(()=>[o(k,{modelValue:t.$store.state.examples.hierarchy1,"onUpdate:modelValue":e[30]||(e[30]=l=>t.$store.state.examples.hierarchy1=l),title:"Liste 1",labels:t.$store.state.examples.hierarchy1Labels},{help:n(()=>[s("pre",null,b(JSON.stringify(t.$store.state.examples.hierarchy1,void 0,2)),1)]),_:1},8,["modelValue","labels"])]),_:1}),o(z,{"form-name":"testingStoreForm",onSave:e[31]||(e[31]=l=>t.$emit("save",[])),onReset:e[32]||(e[32]=l=>t.$emit("reset")),onDefaults:e[33]||(e[33]=l=>t.$emit("defaults"))})])])}const q=T(Z,[["render",G],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/TestingStore.vue"]]);export{q as default}; diff --git a/web/settings/assets/VehicleConfiguration-CDk_8xEa.js b/web/settings/assets/VehicleConfiguration-848lVEbG.js similarity index 73% rename from web/settings/assets/VehicleConfiguration-CDk_8xEa.js rename to web/settings/assets/VehicleConfiguration-848lVEbG.js index de3db26df4..e5e38c5e8b 100644 --- a/web/settings/assets/VehicleConfiguration-CDk_8xEa.js +++ b/web/settings/assets/VehicleConfiguration-848lVEbG.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vehicle-DERZuDMD.js","assets/vendor-BwGffBs-.js","assets/vendor-Cq9CCOuG.css","assets/vendor-fortawesome-DplTMxoa.js","assets/index-Bv2WLdLZ.js","assets/vendor-bootstrap-DxivtUnb.js","assets/vendor-jquery-CEMonh9Y.js","assets/vendor-bootstrap-BJ8HpIhY.css","assets/vendor-axios-C0vEeTtS.js","assets/index-xf6JJloS.css","assets/dynamic-import-helper-BheWnx7M.js","assets/vehicle-CO4-BD2n.js","assets/vehicle-CDGTUfuy.js","assets/vehicle-DIpqULEt.js","assets/vehicle-CS4L8UkR.js","assets/vehicle-Dws-gOo2.js","assets/vehicle-CMYRNHSe.js","assets/vehicle-BFTlCCmN.js","assets/vehicle-BTd1rrQA.js","assets/vehicle-DBcTnZxE.js","assets/SystemVersion-eCZ4XHiC.js","assets/vehicle-DgJ8MTZf.js","assets/vehicle-BshhPeos.js","assets/vehicle-BSiBNQ9u.js","assets/vehicle-B8TuinsQ.js","assets/vehicle-pEaX82JV.js","assets/vehicle-CU9E07u1.js","assets/vehicle-DUyc8QHW.js","assets/vehicle-BNauWjS9.js","assets/vehicle-Dn1HsCTy.js","assets/vehicle-BpfOe2gD.js","assets/vehicle--I9xDm5i.js"])))=>i.map(i=>d[i]); -import{F as O,l as N,ac as ie,ad as re,a4 as R,Z as I,G as j,H,ai as J,aj as G,aA as ue,aB as oe,at as $,ak as Y,al as Q,P as de,d as se,a6 as me,az as ge,Y as pe}from"./vendor-fortawesome-DplTMxoa.js";import{_ as V,C as X}from"./index-Bv2WLdLZ.js";import{_ as he}from"./dynamic-import-helper-BheWnx7M.js";import{_ as Z,m as c,l as d,f as g,z as b,u as a,B as i,J as w,q as l,y as m,a7 as ce,P as be,K as F,x as s,L as q,A as T,k as ee,D as x,O as fe}from"./vendor-BwGffBs-.js";const ve={props:{vehicleId:{required:!0,type:Number},vehicle:{required:!0,type:Object}},emits:["update:configuration"],methods:{updateConfiguration(n,e=void 0){this.$emit("update:configuration",{value:n,object:e})}}},_e=Z(ve,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/VehicleConfigMixin.vue"]]),we={name:"VehicleConfigFallback",mixins:[_e]},Ve={class:"vehicle-fallback"},ke={key:1};function ze(n,e,v,W,S,t){const y=c("openwb-base-alert"),h=c("openwb-base-textarea");return d(),g("div",Ve,[Object.keys(n.vehicle.configuration).length==0?(d(),b(y,{key:0,subtype:"info"},{default:a(()=>[i(' Der Fahrzeug-Typ "'+w(n.vehicle.type)+'" bietet keine Einstellungen. ',1)]),_:1})):(d(),g("div",ke,[l(y,{subtype:"warning"},{default:a(()=>[i(' Es wurde keine Konfigurationsseite für den Fahrzeug-Typ "'+w(n.vehicle.type)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),l(h,{title:"Konfiguration",subtype:"json","model-value":n.vehicle.configuration,"onUpdate:modelValue":e[0]||(e[0]=k=>n.updateConfiguration(k,"configuration"))},{help:a(()=>[...e[1]||(e[1]=[i(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),l(y,{subtype:"info"},{default:a(()=>[m("pre",null,w(JSON.stringify(n.vehicle.configuration,void 0,2)),1)]),_:1})]))])}const Ce=Z(we,[["render",ze],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/OpenwbVehicleConfigFallback.vue"]]);N.add(ie,re);const Se={name:"OpenwbVehicleProxy",components:{FontAwesomeIcon:O},props:{vehicleId:{type:Number,required:!0},vehicle:{type:Object,required:!0}},emits:["update:configuration"],methods:{getVehicleComponent(){return console.debug(`loading vehicle: ${this.vehicle.type}`),ce({loader:()=>he(Object.assign({"./bmw_cardata/vehicle.vue":()=>V(()=>import("./vehicle-DERZuDMD.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])),"./evcc/vehicle.vue":()=>V(()=>import("./vehicle-CO4-BD2n.js"),__vite__mapDeps([11,1,2,3,4,5,6,7,8,9,10])),"./evnotify/vehicle.vue":()=>V(()=>import("./vehicle-CDGTUfuy.js"),__vite__mapDeps([12,1,2,3,4,5,6,7,8,9,10])),"./homeassistant/vehicle.vue":()=>V(()=>import("./vehicle-DIpqULEt.js"),__vite__mapDeps([13,1,2,3,4,5,6,7,8,9,10])),"./http/vehicle.vue":()=>V(()=>import("./vehicle-CS4L8UkR.js"),__vite__mapDeps([14,1,2,3,4,5,6,7,8,9,10])),"./iobroker/vehicle.vue":()=>V(()=>import("./vehicle-Dws-gOo2.js"),__vite__mapDeps([15,1,2,3,4,5,6,7,8,9,10])),"./json/vehicle.vue":()=>V(()=>import("./vehicle-CMYRNHSe.js"),__vite__mapDeps([16,1,2,3,4,5,6,7,8,9,10])),"./kia/vehicle.vue":()=>V(()=>import("./vehicle-BFTlCCmN.js"),__vite__mapDeps([17,1,2,3,4,5,6,7,8,9,10])),"./leaf/vehicle.vue":()=>V(()=>import("./vehicle-BTd1rrQA.js"),__vite__mapDeps([18,1,2,3,4,5,6,7,8,9,10])),"./manual/vehicle.vue":()=>V(()=>import("./vehicle-DBcTnZxE.js"),__vite__mapDeps([19,20,1,2,3,4,5,6,7,8,9,10])),"./mercedeseq/vehicle.vue":()=>V(()=>import("./vehicle-DgJ8MTZf.js"),__vite__mapDeps([21,1,2,3,4,5,6,7,8,9,10])),"./mqtt/vehicle.vue":()=>V(()=>import("./vehicle-BshhPeos.js"),__vite__mapDeps([22,1,2,3,4,5,6,7,8,9,10])),"./myskoda/vehicle.vue":()=>V(()=>import("./vehicle-BSiBNQ9u.js"),__vite__mapDeps([23,1,2,3,4,5,6,7,8,9,10])),"./ovms/vehicle.vue":()=>V(()=>import("./vehicle-B8TuinsQ.js"),__vite__mapDeps([24,20,1,2,3,4,5,6,7,8,9,10])),"./porsche/vehicle.vue":()=>V(()=>import("./vehicle-pEaX82JV.js"),__vite__mapDeps([25,1,2,3,4,5,6,7,8,9,10])),"./psacc/vehicle.vue":()=>V(()=>import("./vehicle-CU9E07u1.js"),__vite__mapDeps([26,1,2,3,4,5,6,7,8,9,10])),"./renault/vehicle.vue":()=>V(()=>import("./vehicle-DUyc8QHW.js"),__vite__mapDeps([27,1,2,3,4,5,6,7,8,9,10])),"./smarthello/vehicle.vue":()=>V(()=>import("./vehicle-BNauWjS9.js"),__vite__mapDeps([28,1,2,3,4,5,6,7,8,9,10])),"./tesla/vehicle.vue":()=>V(()=>import("./vehicle-Dn1HsCTy.js"),__vite__mapDeps([29,4,1,2,3,5,6,7,8,9,10])),"./tronity/vehicle.vue":()=>V(()=>import("./vehicle-BpfOe2gD.js"),__vite__mapDeps([30,1,2,3,4,5,6,7,8,9,10])),"./vweuda/vehicle.vue":()=>V(()=>import("./vehicle--I9xDm5i.js"),__vite__mapDeps([31,1,2,3,4,5,6,7,8,9,10]))}),`./${this.vehicle.type}/vehicle.vue`,3),errorComponent:Ce})},updateConfiguration(n){this.$emit("update:configuration",n)}}};function ye(n,e,v,W,S,t){const y=c("font-awesome-icon"),h=c("openwb-base-alert"),k=c("openwb-base-heading");return d(),g(F,null,[v.vehicle.official?(d(),b(h,{key:0,subtype:"info"},{default:a(()=>[l(y,{icon:["fas","certificate"]}),i(' Das ausgewählte Fahrzeug-Modul "'+w(v.vehicle.name)+'" wird von openWB gepflegt. ',1)]),_:1})):(d(),b(h,{key:1,subtype:"info"},{default:a(()=>[l(y,{icon:["fas","people-group"]}),i(' Das ausgewählte Fahrzeug-Modul "'+w(v.vehicle.name)+'" wird in unserer Community gepflegt. Rückfragen oder Probleme bitte im Forum diskutieren. ',1)]),_:1})),l(k,null,{default:a(()=>[i(' Einstellungen für SoC-Modul "'+w(v.vehicle.name)+'" ',1)]),_:1}),(d(),b(be(t.getVehicleComponent()),{"vehicle-id":v.vehicleId,vehicle:v.vehicle,"onUpdate:configuration":e[0]||(e[0]=z=>t.updateConfiguration(z))},null,40,["vehicle-id","vehicle"]))],64)}const Ee=Z(Se,[["render",ye],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/OpenwbVehicleProxy.vue"]]);N.add(R,I,j,H,J,G,ue,oe,$,Y,Q);const Ue={name:"VehicleScheduledChargingPlan",components:{FontAwesomeIcon:O},mixins:[X],props:{modelValue:{type:Object,required:!0},templateId:{type:Number,required:!0},dcChargingEnabled:{type:Boolean,default:!1}},emits:["update:modelValue","sendCommand"],data(){return{mqttTopics:[{topic:"openWB/optional/ep/configured",writeable:!1}],showRemoveModal:!1}},computed:{plan(){return this.modelValue}},watch:{plan:{handler(n){this.$emit("update:modelValue",n)},deep:!0}},methods:{copyPlan(){this.$emit("sendCommand",{command:"addChargeTemplateSchedulePlan",data:{template:this.templateId,changed_in_theme:!1,copy:this.modelValue.id}})},removePlanModal(){this.showRemoveModal=!0},removePlan(n){this.showRemoveModal=!1,n=="confirm"&&this.$emit("sendCommand",{command:"removeChargeTemplateSchedulePlan",data:{template:this.templateId,plan:this.modelValue.id,changed_in_theme:!1}})}}},Le={key:0},Pe={key:1},Ae={key:2},We={key:3},Be={key:4},Fe={key:5},Me={key:1},Te={key:1},De={key:7};function qe(n,e,v,W,S,t){const y=c("openwb-base-modal-dialog"),h=c("font-awesome-icon"),k=c("openwb-base-avatar"),z=c("openwb-base-text-input"),E=c("openwb-base-button-group-input"),L=c("openwb-base-range-input"),M=c("openwb-base-number-input"),U=c("openwb-base-alert"),f=c("openwb-base-card");return d(),g(F,null,[l(y,{show:S.showRemoveModal,title:"Zielladen Zeitplan löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:t.removePlan},{default:a(()=>[i(' Willst Du den Zielladen Zeitplan "'+w(t.plan.name)+'" wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ',1)]),_:1},8,["show","onModalResult"]),l(f,{title:t.plan.name,collapsible:!0,collapsed:!0},{actions:a(p=>[p.collapsed==!0?(d(),g("span",{key:0,class:ee(["pill clickable",t.plan.active?"bg-success":"bg-danger"]),onClick:e[0]||(e[0]=T(_=>t.plan.active=!t.plan.active,["stop"]))},[t.plan.limit.selected=="soc"?(d(),g("span",Le,[l(h,{icon:["fas","car-battery"]}),i(" "+w(t.plan.limit.soc_scheduled)+"% ",1),l(h,{icon:["fas",t.plan.bidi_charging_enabled?"right-left":"right-long"]},null,8,["icon"]),i(" "+w(t.plan.limit.soc_limit)+"% ",1)])):s("",!0),t.plan.limit.selected=="amount"?(d(),g("span",Pe,[l(h,{icon:["fas","bolt"]}),i(" "+w(t.plan.limit.amount/1e3)+"kWh ",1)])):s("",!0),l(h,{icon:["fas","clock"]}),i(" "+w(t.plan.time)+" ",1),t.plan.frequency.selected=="once"?(d(),g("span",Ae,[l(h,{icon:["fas","calendar-day"]}),i(" "+w(n.formatDate(t.plan.frequency.once)),1)])):s("",!0),t.plan.frequency.selected=="daily"?(d(),g("span",We,[l(h,{icon:["fas","calendar-week"]})])):s("",!0),t.plan.frequency.selected=="weekly"?(d(),g("span",Be,[l(h,{icon:["fas","calendar-alt"]})])):s("",!0),t.plan.et_active?(d(),g("span",Fe,[l(h,{icon:["fas","coins"]})])):s("",!0)],2)):s("",!0),p.collapsed==!1?(d(),g("span",Me,[l(k,{class:"bg-success clickable ml-1",title:"Zielladen-Plan duplizieren",onClick:e[1]||(e[1]=T(_=>t.copyPlan(),["stop"]))},{default:a(()=>[l(h,{icon:["fas","copy"]})]),_:1}),l(k,{class:"bg-danger clickable ml-1",title:"Zielladen-Plan löschen",onClick:e[2]||(e[2]=T(_=>t.removePlanModal(),["stop"]))},{default:a(()=>[l(h,{icon:["fas","trash"]})]),_:1})])):s("",!0)]),default:a(()=>[l(z,{modelValue:t.plan.name,"onUpdate:modelValue":e[3]||(e[3]=p=>t.plan.name=p),title:"Bezeichnung"},null,8,["modelValue"]),l(E,{modelValue:t.plan.active,"onUpdate:modelValue":e[4]||(e[4]=p=>t.plan.active=p),title:"Zeitpunkt aktiv",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}]},null,8,["modelValue"]),l(z,{modelValue:t.plan.time,"onUpdate:modelValue":e[5]||(e[5]=p=>t.plan.time=p),title:"Ziel-Termin",subtype:"time"},{help:a(()=>[...e[18]||(e[18]=[i(" Hier ist die gewünschte Uhrzeit einzustellen, zu welcher das Fahrzeug den gewünschten SoC bzw. die zu ladende Energiemenge BEREITS ERREICHT haben soll. ",-1)])]),_:1},8,["modelValue"]),l(E,{modelValue:t.plan.frequency.selected,"onUpdate:modelValue":e[6]||(e[6]=p=>t.plan.frequency.selected=p),title:"Wiederholungen",buttons:[{buttonValue:"once",text:"Einmalig",class:"btn-outline-info"},{buttonValue:"daily",text:"Täglich",class:"btn-outline-info"},{buttonValue:"weekly",text:"Wöchentlich",class:"btn-outline-info"}]},null,8,["modelValue"]),t.plan.frequency.selected=="once"?(d(),b(z,{key:0,modelValue:t.plan.frequency.once,"onUpdate:modelValue":e[7]||(e[7]=p=>t.plan.frequency.once=p),title:"Datum",subtype:"date"},null,8,["modelValue"])):s("",!0),t.plan.frequency.selected=="weekly"?(d(),g("div",Te,[(d(!0),g(F,null,q(n.weekdays,(p,_)=>(d(),b(E,{key:_,modelValue:t.plan.frequency.weekly[_],"onUpdate:modelValue":C=>t.plan.frequency.weekly[_]=C,title:p,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}]},null,8,["modelValue","onUpdate:modelValue","title"]))),128))])):s("",!0),e[30]||(e[30]=m("hr",null,null,-1)),l(L,{modelValue:t.plan.current,"onUpdate:modelValue":e[8]||(e[8]=p=>t.plan.current=p),title:`Ladestrom${v.dcChargingEnabled?" (AC)":""}`,min:6,max:32,step:1,unit:"A"},{help:a(()=>[...e[19]||(e[19]=[i(" Mit dieser Stromstärke wird der Zeitpunkt berechnet, wann die Ladung mit Netzbezug gestartet werden muss. Wird der Ziel-SoC nicht zum angegebenen Termin erreicht, weil z.B. das Auto erst später angesteckt wurde, wird auch mit einer höheren Stromstärke geladen. Um etwas Puffer zu haben, empfiehlt es sich, etwas weniger als die Maximalstromstärke des Fahrzeugs zu wählen. ",-1)])]),_:1},8,["modelValue","title"]),v.dcChargingEnabled===!0?(d(),b(M,{key:2,title:"Ladeleistung (DC)",unit:"kW",min:0,"model-value":n.ac_current2dc_power(t.plan.dc_current),"onUpdate:modelValue":e[9]||(e[9]=p=>t.plan.dc_current=n.dc_power2ac_current(p))},null,8,["model-value"])):s("",!0),l(E,{modelValue:t.plan.phases_to_use,"onUpdate:modelValue":e[10]||(e[10]=p=>t.plan.phases_to_use=p),title:"Anzahl Phasen Zielladen",buttons:[{buttonValue:1,text:"1"},{buttonValue:3,text:"Maximum"},{buttonValue:0,text:"Automatik"}]},{help:a(()=>[...e[20]||(e[20]=[i(' Hier kann eingestellt werden, ob Ladevorgänge im Modus "Zielladen" mit nur einer Phase oder dem möglichen Maximum in Abhängigkeit der "Ladepunkt"- und "Fahrzeug"-Einstellungen durchgeführt werden. Im Modus "Automatik" entscheidet die Regelung, welche Einstellung genutzt wird, um das Ziel zu erreichen. Voraussetzung ist die verbaute Umschaltmöglichkeit zwischen 1- und 3-phasig (sog. 1p3p). ',-1)])]),_:1},8,["modelValue"]),l(E,{modelValue:t.plan.phases_to_use_pv,"onUpdate:modelValue":e[11]||(e[11]=p=>t.plan.phases_to_use_pv=p),title:"Anzahl Phasen bei PV-Überschuss",buttons:[{buttonValue:1,text:"1"},{buttonValue:3,text:"Maximum"},{buttonValue:0,text:"Automatik"}]},{help:a(()=>[...e[21]||(e[21]=[i(' Hier kann eingestellt werden, ob Ladevorgänge im Modus "Zielladen" bei Laden mit PV-Überschuss mit nur einer Phase oder dem möglichen Maximum in Abhängigkeit der "Ladepunkt"- und "Fahrzeug"-Einstellungen durchgeführt werden. Im Modus "Automatik" entscheidet die Regelung, welche Einstellung genutzt wird, um das Ziel zu erreichen. Voraussetzung ist die verbaute Umschaltmöglichkeit zwischen 1- und 3-phasig (sog. 1p3p). ',-1)])]),_:1},8,["modelValue"]),e[31]||(e[31]=m("hr",null,null,-1)),l(E,{modelValue:t.plan.limit.selected,"onUpdate:modelValue":e[12]||(e[12]=p=>t.plan.limit.selected=p),title:"Ziel",buttons:[{buttonValue:"soc",text:"Fahrzeug-SoC"},{buttonValue:"amount",text:"Energie"}]},{help:a(()=>[...e[22]||(e[22]=[i(" Bestimmt die Art der Grenze für den Ladevorgang. ",-1)])]),_:1},8,["modelValue"]),t.plan.limit.selected=="soc"?(d(),b(L,{key:3,modelValue:t.plan.limit.soc_scheduled,"onUpdate:modelValue":e[13]||(e[13]=p=>t.plan.limit.soc_scheduled=p),title:"Fahrzeug-SoC zum Zielzeitpunkt",min:5,max:100,step:5,unit:"%"},{help:a(()=>[...e[23]||(e[23]=[i(" SoC, der zum angegebenen Zeitpunkt erreicht werden soll (Ziel-SoC). ",-1)])]),_:1},8,["modelValue"])):s("",!0),t.plan.limit.selected=="soc"?(d(),b(L,{key:4,modelValue:t.plan.limit.soc_limit,"onUpdate:modelValue":e[14]||(e[14]=p=>t.plan.limit.soc_limit=p),title:"Fahrzeug-SoC mit Überschuss",min:5,max:100,step:5,unit:"%"},{help:a(()=>[...e[24]||(e[24]=[i(" Nach Erreichen des Ziel-SoCs wird mit Überschuss weiter geladen, bis das SoC-Limit erreicht wird. Sobald das SoC-Limit erreicht wurde, findet keine Ladung mehr mit Überschuss statt! ",-1)])]),_:1},8,["modelValue"])):s("",!0),t.plan.limit.selected=="amount"?(d(),b(M,{key:5,title:"Ziel-Energie",unit:"kWh",min:1,step:.5,"model-value":t.plan.limit.amount/1e3,"onUpdate:modelValue":e[15]||(e[15]=p=>t.plan.limit.amount=p*1e3)},{help:a(()=>[...e[25]||(e[25]=[i(" Die geladene Energiemenge wird beim Wechsel des Lademodus, Wechsel des Plans oder nach dem Anstecken, wenn Zielladen schon ausgewählt ist, neu gezählt. ",-1)])]),_:1},8,["model-value"])):s("",!0),e[32]||(e[32]=m("hr",null,null,-1)),l(E,{modelValue:t.plan.et_active,"onUpdate:modelValue":e[16]||(e[16]=p=>t.plan.et_active=p),title:"Strompreisbasiert Laden",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}]},null,8,["modelValue"]),t.plan.et_active==!0&&!n.$store.state.mqtt["openWB/optional/ep/configured"]?(d(),b(U,{key:6,subtype:"danger"},{default:a(()=>[...e[26]||(e[26]=[i(" Bitte in den übergreifenden Ladeeinstellungen einen Strompreis-Anbieter konfigurieren. ",-1)])]),_:1})):s("",!0),t.plan.limit.selected=="soc"?(d(),g("div",De,[e[29]||(e[29]=m("hr",null,null,-1)),l(E,{modelValue:t.plan.bidi_charging_enabled,"onUpdate:modelValue":e[17]||(e[17]=p=>t.plan.bidi_charging_enabled=p),title:"Bidirektionales Überschussladen bei kompatiblem Ladepunkt&Fahrzeug",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}]},{help:a(()=>[...e[27]||(e[27]=[i(" Wenn Ladepunkt und Fahrzeug bidirektionales Laden unterstützen, wird bis zum Fahrzug-SoC zum Zielzeitpunkt wie gewohnt mit Zielladen geladen. Ist der eingestellte SoC erreicht, wird eine Nullpunktausregelung gemacht, dh das Auto wird so ge- und entladen, dass möglichst weder Bezug noch Einspeisung entsteht. Der SoC wird dabei immer zwischen Fahrzeug-SoC zum Zielzeitpunkt und Fahrzeug-SoC mit Überschuss gehalten. ",-1),m("br",null,null,-1),i(" Unterstützen das Fahrzeug und/oder der Ladepunkt kein bidirektionales Laden, hat diese Einstellung keine Auswirkung. ",-1)])]),_:1},8,["modelValue"]),t.plan.bidi_charging_enabled===!0?(d(),b(U,{key:0,subtype:"info"},{default:a(()=>[...e[28]||(e[28]=[i(" Die Norm IEC 61851-1 und ISO 15118 benötigen als Parameter eine Stromstärke und die Phasenzahl. Die Norm ISO 15118-20, die das bidirektionale Laden definiert, benötigt als Parameter eine Ladeleistung. Die Phasenzahl legt das Fahrzeug fest. Wenn Fahrzeug und Ladepunkt bidirektionales Laden nach ISO 15118-20 unterstützen, wird die eingestellte Ladeleistung verwendet. Unterstützen das Fahrzeug und/oder der Ladepunkt die Norm nicht, wird der Ladestrom und die vorgegebene Phasenzahl angewendet. ",-1)])]),_:1})):s("",!0)])):s("",!0)]),_:1},8,["title"])],64)}const Ze=Z(Ue,[["render",qe],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/ChargeTemplateScheduledChargingPlan.vue"]]);N.add(R,I,j,H,J,G,Y,Q);const xe={name:"ChargeTemplateTimeChargingPlan",components:{FontAwesomeIcon:O},mixins:[X],props:{modelValue:{type:Object,required:!0},templateId:{type:Number,required:!0},dcChargingEnabled:{type:Boolean,default:!1}},emits:["update:modelValue","sendCommand"],data(){return{mqttTopics:[{topic:"openWB/optional/dc_charging",writeable:!1}],showRemoveModal:!1}},computed:{plan(){return this.modelValue}},watch:{plan:{handler(n){this.$emit("update:modelValue",n)},deep:!0}},methods:{copyPlan(){this.$emit("sendCommand",{command:"addChargeTemplateTimeChargingPlan",data:{template:this.templateId,changed_in_theme:!1,copy:this.modelValue.id}})},removePlanModal(){this.showRemoveModal=!0},removePlan(n){this.showRemoveModal=!1,n=="confirm"&&this.$emit("sendCommand",{command:"removeChargeTemplateTimeChargingPlan",data:{template:this.templateId,plan:this.modelValue.id,changed_in_theme:!1}})}}},Oe={key:0},Ne={key:1},Re={key:2},Ie={key:3},je={key:4},He={key:1},Je={key:2};function Ge(n,e,v,W,S,t){const y=c("openwb-base-modal-dialog"),h=c("font-awesome-icon"),k=c("openwb-base-avatar"),z=c("openwb-base-text-input"),E=c("openwb-base-button-group-input"),L=c("openwb-base-range-input"),M=c("openwb-base-number-input"),U=c("openwb-base-card");return d(),g(F,null,[l(y,{show:S.showRemoveModal,title:"Zeitladen Zeitplan löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:t.removePlan},{default:a(()=>[i(' Willst Du den Zeitladen Zeitplan "'+w(t.plan.name)+'" wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ',1)]),_:1},8,["show","onModalResult"]),l(U,{title:t.plan.name,collapsible:!0,collapsed:!0},{actions:a(f=>[f.collapsed==!0?(d(),g("span",{key:0,class:ee(["pill clickable",t.plan.active?"bg-success":"bg-danger"]),onClick:e[0]||(e[0]=T(p=>t.plan.active=!t.plan.active,["stop"]))},[t.plan.limit.selected=="soc"?(d(),g("span",Oe,[l(h,{icon:["fas","car-battery"]}),i(" "+w(t.plan.limit.soc)+"% ",1)])):s("",!0),t.plan.limit.selected=="amount"?(d(),g("span",Ne,[l(h,{icon:["fas","bolt"]}),i(" "+w(t.plan.limit.amount/1e3)+"kWh ",1)])):s("",!0),l(h,{icon:["fas","clock"]}),i(" "+w(t.plan.time[0])+" - "+w(t.plan.time[1])+" ",1),t.plan.frequency.selected=="once"?(d(),g("span",Re,[l(h,{icon:["fas","calendar-day"]}),i(" "+w(n.formatDate(t.plan.frequency.once[0])==n.formatDate(t.plan.frequency.once[1])?n.formatDate(t.plan.frequency.once[0]):n.formatDate(t.plan.frequency.once[0])+" - "+n.formatDate(t.plan.frequency.once[1])),1)])):s("",!0),t.plan.frequency.selected=="daily"?(d(),g("span",Ie,[l(h,{icon:["fas","calendar-week"]})])):s("",!0),t.plan.frequency.selected=="weekly"?(d(),g("span",je,[l(h,{icon:["fas","calendar-alt"]})])):s("",!0)],2)):s("",!0),f.collapsed==!1?(d(),g("span",He,[l(k,{class:"bg-success clickable",title:"Zeitladen-Plan duplizieren",onClick:e[1]||(e[1]=T(p=>t.copyPlan(),["stop"]))},{default:a(()=>[l(h,{icon:["fas","copy"]})]),_:1}),l(k,{class:"bg-danger clickable ml-1",title:"Zeitladen-Plan löschen",onClick:e[2]||(e[2]=T(p=>t.removePlanModal(),["stop"]))},{default:a(()=>[l(h,{icon:["fas","trash"]})]),_:1})])):s("",!0)]),default:a(()=>[l(z,{modelValue:t.plan.name,"onUpdate:modelValue":e[3]||(e[3]=f=>t.plan.name=f),title:"Bezeichnung"},null,8,["modelValue"]),l(E,{modelValue:t.plan.active,"onUpdate:modelValue":e[4]||(e[4]=f=>t.plan.active=f),title:"Zeitplan aktiv",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}]},null,8,["modelValue"]),l(z,{modelValue:t.plan.time[0],"onUpdate:modelValue":e[5]||(e[5]=f=>t.plan.time[0]=f),title:"Zeitpunkt des Ladebeginns",subtype:"time"},null,8,["modelValue"]),l(z,{modelValue:t.plan.time[1],"onUpdate:modelValue":e[6]||(e[6]=f=>t.plan.time[1]=f),title:"Zeitpunkt des Ladeendes",subtype:"time"},null,8,["modelValue"]),l(E,{modelValue:t.plan.frequency.selected,"onUpdate:modelValue":e[7]||(e[7]=f=>t.plan.frequency.selected=f),title:"Wiederholungen",buttons:[{buttonValue:"once",text:"Einmalig",class:"btn-outline-info"},{buttonValue:"daily",text:"Täglich",class:"btn-outline-info"},{buttonValue:"weekly",text:"Wöchentlich",class:"btn-outline-info"}]},null,8,["modelValue"]),t.plan.frequency.selected=="once"?(d(),b(z,{key:0,modelValue:t.plan.frequency.once[0],"onUpdate:modelValue":e[8]||(e[8]=f=>t.plan.frequency.once[0]=f),title:"Gültig ab",subtype:"date"},null,8,["modelValue"])):s("",!0),t.plan.frequency.selected=="once"?(d(),b(z,{key:1,modelValue:t.plan.frequency.once[1],"onUpdate:modelValue":e[9]||(e[9]=f=>t.plan.frequency.once[1]=f),title:"Gültig bis",subtype:"date",min:t.plan.frequency.once[0]},null,8,["modelValue","min"])):s("",!0),t.plan.frequency.selected=="weekly"?(d(),g("div",Je,[(d(!0),g(F,null,q(n.weekdays,(f,p)=>(d(),b(E,{key:p,modelValue:t.plan.frequency.weekly[p],"onUpdate:modelValue":_=>t.plan.frequency.weekly[p]=_,title:f,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}]},null,8,["modelValue","onUpdate:modelValue","title"]))),128))])):s("",!0),e[22]||(e[22]=m("hr",null,null,-1)),l(L,{modelValue:t.plan.current,"onUpdate:modelValue":e[10]||(e[10]=f=>t.plan.current=f),title:`Ladestrom${v.dcChargingEnabled?" (AC)":""}`,min:6,max:32,step:1,unit:"A"},null,8,["modelValue","title"]),v.dcChargingEnabled===!0?(d(),b(M,{key:3,title:"Ladeleistung (DC)",unit:"kW",min:0,"model-value":n.ac_current2dc_power(t.plan.dc_current),"onUpdate:modelValue":e[11]||(e[11]=f=>t.plan.dc_current=n.dc_power2ac_current(f))},null,8,["model-value"])):s("",!0),l(E,{modelValue:t.plan.phases_to_use,"onUpdate:modelValue":e[12]||(e[12]=f=>t.plan.phases_to_use=f),title:"Anzahl Phasen",buttons:[{buttonValue:1,text:"1"},{buttonValue:3,text:"Maximum"}]},{help:a(()=>[...e[17]||(e[17]=[i(' Hier kann eingestellt werden, ob Ladevorgänge mit einer Phase oder dem möglichen Maximum in Abhängigkeit der "Ladepunkt"- und "Fahrzeug"-Einstellungen durchgeführt werden. Voraussetzung ist die verbaute Umschaltmöglichkeit zwischen 1- und 3-phasig (sog. 1p3p). ',-1)])]),_:1},8,["modelValue"]),e[23]||(e[23]=m("hr",null,null,-1)),l(E,{modelValue:t.plan.limit.selected,"onUpdate:modelValue":e[13]||(e[13]=f=>t.plan.limit.selected=f),title:"Begrenzung",buttons:[{buttonValue:"none",text:"Keine"},{buttonValue:"soc",text:"Fahrzeug-SoC"},{buttonValue:"amount",text:"Energie"}]},{help:a(()=>[...e[18]||(e[18]=[i(" Bestimmt die Art der Grenze für den Ladevorgang. ",-1)])]),_:1},8,["modelValue"]),l(L,{modelValue:t.plan.limit.soc,"onUpdate:modelValue":e[14]||(e[14]=f=>t.plan.limit.soc=f),title:"SoC-Limit für das Fahrzeug",min:5,max:100,step:5,unit:"%"},{help:a(()=>[...e[19]||(e[19]=[i(" Ladestand des Akku (State of Charge, SoC), bis zu welchem maximal geladen werden soll. ",-1)])]),_:1},8,["modelValue"]),l(M,{title:"Energie-Limit",unit:"kWh",min:1,step:.5,"model-value":t.plan.limit.amount/1e3,"onUpdate:modelValue":e[15]||(e[15]=f=>t.plan.limit.amount=f*1e3)},{help:a(()=>[...e[20]||(e[20]=[i(" Maximal zu ladende Energie innerhalb des Zeitfensters. Eignet sich immer dann wenn kein SoC zur Verfügung steht. Die geladene Energiemenge wird beim Wechsel des Lademodus, Wechsel des Plans oder nach dem Anstecken, wenn Zeitladen schon aktiv ist, neu gezählt. ",-1)])]),_:1},8,["model-value"]),e[24]||(e[24]=m("hr",null,null,-1)),l(L,{modelValue:t.plan.min_bat_soc,"onUpdate:modelValue":e[16]||(e[16]=f=>t.plan.min_bat_soc=f),title:"Zeitladen bis Speicher entladen auf",min:0,max:19,step:1,unit:"%",labels:[{label:"0",value:0},{label:5,value:5},{label:10,value:10},{label:15,value:15},{label:20,value:20},{label:25,value:25},{label:30,value:30},{label:35,value:35},{label:40,value:40},{label:45,value:45},{label:50,value:50},{label:55,value:55},{label:60,value:60},{label:65,value:65},{label:70,value:70},{label:75,value:75},{label:80,value:80},{label:85,value:85},{label:90,value:90},{label:95,value:95},{label:"Aus",value:null}]},{help:a(()=>[...e[21]||(e[21]=[i(" Zeitladen wird nur aktiviert, wenn der SoC des Hausspeichers über dem hier eingestellten SoC liegt. Lädt die aktive Speichersteuerung gerade aktive den Speicher, wird kein Zeitladen gestartet. Da der Speicher nicht gleichzeitig aktiv geladen und vom Fahrzeug entladen werden kann. ",-1)])]),_:1},8,["modelValue"])]),_:1},8,["title"])],64)}const Ye=Z(xe,[["render",Ge],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/ChargeTemplateTimeChargingPlan.vue"]]);N.add(se,Q,H,G,J,j,R,I,me,ge,pe,$,Y);const Qe={name:"OpenwbVehicleConfigView",components:{FontAwesomeIcon:O,FontAwesomeLayers:de,OpenwbVehicleProxy:Ee,ChargeTemplateScheduledChargingPlan:Ze,ChargeTemplateTimeChargingPlan:Ye},mixins:[X],props:{installAssistantActive:{type:Boolean,required:!1,default:!1}},emits:["sendCommand","save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/optional/dc_charging",writeable:!1},{topic:"openWB/optional/ep/configured",writeable:!1},{topic:"openWB/optional/rfid/active",writeable:!1},{topic:"openWB/system/configurable/soc_modules",writeable:!1},{topic:"openWB/vehicle/+/charge_template",writeable:!0},{topic:"openWB/vehicle/+/color",writeable:!0},{topic:"openWB/vehicle/+/ev_template",writeable:!0},{topic:"openWB/vehicle/+/info",writeable:!0},{topic:"openWB/vehicle/+/name",writeable:!0},{topic:"openWB/vehicle/+/soc_module/config",writeable:!0},{topic:"openWB/vehicle/+/soc_module/general_config",writeable:!0},{topic:"openWB/vehicle/+/tag_id",writeable:!0},{topic:"openWB/vehicle/template/charge_template/+",writeable:!0},{topic:"openWB/vehicle/template/ev_template/+",writeable:!0}],showVehicleModal:!1,modalVehicleIndex:void 0,showEvTemplateModal:!1,modalEvTemplateIndex:void 0,showChargeTemplateModal:!1,modalChargeTemplateIndex:void 0}},computed:{dcChargingEnabled:{get(){return this.$store.state.mqtt["openWB/optional/dc_charging"]}},vehicleIndexes:{get(){return this.getWildcardIndexList("openWB/vehicle/+/info")}},evTemplates(){const n=this.getWildcardTopics("openWB/vehicle/template/ev_template/+");return Object.fromEntries(Object.entries(n).filter(([,e])=>e&&typeof e=="object"))},evTemplateList:{get(){let n=[];return Object.keys(this.evTemplates).forEach(e=>{let v=parseInt(e.match(/([0-9]+)$/g)[0]),W=this.$store.state.mqtt["openWB/vehicle/template/ev_template/"+v].name;n.push({value:v,text:W})}),n}},chargeTemplates(){const n=this.getWildcardTopics("openWB/vehicle/template/charge_template/+");return Object.fromEntries(Object.entries(n).filter(([,e])=>e&&typeof e=="object"))},chargeTemplateList:{get(){let n=[];return Object.keys(this.chargeTemplates).forEach(e=>{let v=parseInt(e.match(/([0-9]+)$/g)[0]),W=this.$store.state.mqtt["openWB/vehicle/template/charge_template/"+v].name;n.push({value:v,text:W})}),n}},socModuleList:{get(){return this.$store.state.mqtt["openWB/system/configurable/soc_modules"]}}},methods:{updateConfiguration(n,e){console.debug("updateConfiguration",n,e),this.updateState(n,e.value,e.object)},addVehicle(n){n.stopPropagation(),this.$emit("sendCommand",{command:"addVehicle",data:{}})},removeVehicleModal(n,e){n.stopPropagation(),this.modalVehicleIndex=e,this.showVehicleModal=!0},removeVehicle(n,e){this.showVehicleModal=!1,n=="confirm"&&this.$emit("sendCommand",{command:"removeVehicle",data:{id:e}})},getVehicleName(n){return this.$store.state.mqtt["openWB/vehicle/"+n+"/name"]?this.$store.state.mqtt["openWB/vehicle/"+n+"/name"]:"Fahrzeug "+n},getSocDefaultConfiguration(n){const e=this.socModuleList.find(v=>v.value==n);return Object.prototype.hasOwnProperty.call(e,"defaults")?{...JSON.parse(JSON.stringify(e.defaults))}:(console.warn("no default configuration found for soc type!",n),{})},updateSelectedSocModule(n,e){this.updateState("openWB/vehicle/"+n+"/soc_module/config",e,"type"),this.updateState("openWB/vehicle/"+n+"/soc_module/config",this.getSocDefaultConfiguration(e))},addEvTemplate(n,e){n.stopPropagation();let v={};e&&e.match(/([^/]+)$/)&&(v.copy=parseInt(e.match(/([^/]+)$/)[0])),this.$emit("sendCommand",{command:"addEvTemplate",data:v})},removeEvTemplateModal(n,e){n.stopPropagation(),this.modalEvTemplateIndex=parseInt(e.match(/([^/]+)$/)[0]),this.showEvTemplateModal=!0},removeEvTemplate(n,e){this.showEvTemplateModal=!1,n=="confirm"&&this.$emit("sendCommand",{command:"removeEvTemplate",data:{id:e}})},getEvTemplateName(n){return this.$store.state.mqtt["openWB/vehicle/template/ev_template/"+n]?this.$store.state.mqtt["openWB/vehicle/template/ev_template/"+n].name:"Fahrzeug-Profil "+n},addChargeTemplate(n,e){n.stopPropagation();let v={};e&&e.match(/([^/]+)$/)&&(v.copy=parseInt(e.match(/([^/]+)$/)[0])),this.$emit("sendCommand",{command:"addChargeTemplate",data:v})},removeChargeTemplateModal(n,e){this.modalChargeTemplateIndex=e,this.showChargeTemplateModal=!0},removeChargeTemplate(n,e){this.showChargeTemplateModal=!1,n=="confirm"&&this.$emit("sendCommand",{command:"removeChargeTemplate",data:{id:e}})},getChargeTemplateName(n){return this.$store.state.mqtt["openWB/vehicle/template/charge_template/"+n]?this.$store.state.mqtt["openWB/vehicle/template/charge_template/"+n].name:"Lade-Profil "+n},addChargeTemplateSchedulePlan(n){this.$emit("sendCommand",{command:"addChargeTemplateSchedulePlan",data:{template:n,changed_in_theme:!1}})},addChargeTemplateTimeChargingPlan(n){this.$emit("sendCommand",{command:"addChargeTemplateTimeChargingPlan",data:{template:n,changed_in_theme:!1}})},openActiveChargeModeCard(n,e){this.$nextTick(()=>{["instant_charging","pv_charging","eco_charging","scheduled_charging"].forEach(W=>{const S=`card-${n}-${W}`,t=this.$refs[S],y=Array.isArray(t)?t[0]:t;y&&(y.isCollapsed=W!==e)})})}}},Xe={class:"vehicleConfig"},Ke={name:"vehicleConfigForm"},$e={key:0},en={key:1},nn={key:2},tn={key:0},ln={key:0},an={key:1},rn={key:1},un={key:3},on={key:0},dn={key:1},sn={key:0},mn={key:1},gn={key:0},pn={key:0},hn={key:4},cn={key:0},bn={key:1},fn={key:0},vn={key:1};function _n(n,e,v,W,S,t){const y=c("openwb-base-modal-dialog"),h=c("font-awesome-icon"),k=c("openwb-base-avatar"),z=c("openwb-base-alert"),E=c("openwb-base-color-picker"),L=c("openwb-base-text-input"),M=c("openwb-base-select-input"),U=c("openwb-base-heading"),f=c("router-link"),p=c("openwb-base-array-input"),_=c("openwb-base-button-group-input"),C=c("openwb-base-number-input"),ne=c("openwb-vehicle-proxy"),B=c("openwb-base-card"),K=c("font-awesome-layers"),A=c("openwb-base-range-input"),te=c("charge-template-scheduled-charging-plan"),le=c("charge-template-time-charging-plan"),ae=c("openwb-base-submit-buttons");return d(),g(F,null,[l(y,{show:S.showVehicleModal,title:"Fahrzeug löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:e[0]||(e[0]=r=>t.removeVehicle(r,S.modalVehicleIndex))},{default:a(()=>[i(' Willst Du das Fahrzeug "'+w(t.getVehicleName(S.modalVehicleIndex))+'" wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ',1)]),_:1},8,["show"]),l(y,{show:S.showEvTemplateModal,title:"Fahrzeug-Profil löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:e[1]||(e[1]=r=>t.removeEvTemplate(r,S.modalEvTemplateIndex))},{default:a(()=>[i(' Willst Du das Fahrzeug-Profil "'+w(t.getEvTemplateName(S.modalEvTemplateIndex))+'" wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ',1)]),_:1},8,["show"]),l(y,{show:S.showChargeTemplateModal,title:"Lade-Profil löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:e[2]||(e[2]=r=>t.removeChargeTemplate(r,S.modalChargeTemplateIndex))},{default:a(()=>[i(' Willst Du das Lade-Profil "'+w(t.getChargeTemplateName(S.modalChargeTemplateIndex))+'" wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ',1)]),_:1},8,["show"]),m("div",Xe,[m("form",Ke,[l(B,{subtype:"info",collapsible:!0,collapsed:n.$route.params.section!="vehicle"},{header:a(()=>[l(h,{icon:["fas","car"]}),e[8]||(e[8]=i(" Fahrzeuge ",-1))]),actions:a(()=>[n.$store.state.mqtt["openWB/general/extern"]===!1?(d(),b(k,{key:0,class:"bg-success clickable",title:"Neues Fahrzeug hinzufügen",onClick:t.addVehicle},{default:a(()=>[l(h,{icon:["fas","plus"]})]),_:1},8,["onClick"])):s("",!0)]),default:a(()=>[n.$store.state.mqtt["openWB/general/extern"]===!0?(d(),g("div",$e,[l(z,{subtype:"info"},{default:a(()=>[...e[9]||(e[9]=[i(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(d(),g("div",en,[(d(!0),g(F,null,q(t.vehicleIndexes,r=>(d(),b(B,{key:r,title:t.getVehicleName(r),collapsible:!0,collapsed:!(n.$route.params.section=="vehicle"&&parseInt(n.$route.params.section_index)==r),subtype:"info"},x({header:a(()=>[l(h,{icon:["fas","car"],class:"fa-border",style:fe({backgroundColor:n.$store.state.mqtt["openWB/vehicle/"+r+"/color"],color:n.getContrastColor(n.$store.state.mqtt["openWB/vehicle/"+r+"/color"]),"--fa-border-color":n.getContrastColor(n.$store.state.mqtt["openWB/vehicle/"+r+"/color"])})},null,8,["style"]),i(" "+w(t.getVehicleName(r)),1)]),default:a(()=>[l(L,{title:"Bezeichnung","model-value":n.$store.state.mqtt["openWB/vehicle/"+r+"/name"],disabled:r===0,"onUpdate:modelValue":o=>n.updateState("openWB/vehicle/"+r+"/name",o)},x({append:a(()=>[l(E,{class:"p-1","model-value":n.$store.state.mqtt["openWB/vehicle/"+r+"/color"],"default-color":"#17a2b8","onUpdate:modelValue":o=>n.updateState("openWB/vehicle/"+r+"/color",o)},null,8,["model-value","onUpdate:modelValue"])]),_:2},[r===0?{name:"help",fn:a(()=>[e[10]||(e[10]=i(" Das Standard-Fahrzeug kann nicht umbenannt werden. ",-1))]),key:"0"}:void 0]),1032,["model-value","disabled","onUpdate:modelValue"]),r!==0?(d(),b(L,{key:0,title:"Fahrzeughersteller ","model-value":n.$store.state.mqtt["openWB/vehicle/"+r+"/info"]?.manufacturer,"onUpdate:modelValue":o=>n.updateState("openWB/vehicle/"+r+"/info",o,"manufacturer")},{help:a(()=>[...e[11]||(e[11]=[i(" Optional: zusätzliche Information für den Systembericht. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"])):s("",!0),r!==0?(d(),b(L,{key:1,title:"Fahrzeugmodell","model-value":n.$store.state.mqtt["openWB/vehicle/"+r+"/info"]?.model,"onUpdate:modelValue":o=>n.updateState("openWB/vehicle/"+r+"/info",o,"model")},{help:a(()=>[...e[12]||(e[12]=[i(" Optional: zusätzliche Information für den Systembericht.",-1),m("br",null,null,-1),i(" Nach Möglichkeit auch Angabe des Baujahres, da es durchaus beim Verhalten des Fahrzeugs Unterschiede geben kann. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"])):s("",!0),l(M,{title:"Fahrzeug-Profil",options:t.evTemplateList,"model-value":n.$store.state.mqtt["openWB/vehicle/"+r+"/ev_template"],"onUpdate:modelValue":o=>n.updateState("openWB/vehicle/"+r+"/ev_template",o)},null,8,["options","model-value","onUpdate:modelValue"]),l(M,{title:"Lade-Profil",options:t.chargeTemplateList,"model-value":n.$store.state.mqtt["openWB/vehicle/"+r+"/charge_template"],"onUpdate:modelValue":o=>n.updateState("openWB/vehicle/"+r+"/charge_template",o)},null,8,["options","model-value","onUpdate:modelValue"]),e[31]||(e[31]=m("hr",null,null,-1)),v.installAssistantActive?s("",!0):(d(),g("div",nn,[l(U,null,{default:a(()=>[...e[13]||(e[13]=[i(" Fahrzeugzuordnung per ID-Tags ",-1)])]),_:1}),(n.$store.state.mqtt["openWB/vehicle/"+r+"/tag_id"]?.length??0)>0?(d(),g("div",tn,[l(z,{subtype:"info"},{default:a(()=>[e[15]||(e[15]=i(" Einstellungen zur Fahrzeugzuordnung finden sich unter ",-1)),l(f,{to:"/IdentificationConfiguration"},{default:a(()=>[...e[14]||(e[14]=[i(" Einstellungen - Identifikation ",-1)])]),_:1}),e[16]||(e[16]=i(". ",-1)),n.$store.state.mqtt["openWB/optional/rfid/active"]===!1?(d(),g("div",ln," Aktuell ist die Identifikation in den Einstellungen deaktiviert. ")):(d(),g("div",an," Die Identifikation ist aktiv. Das Fahrzeug lässt sich per ID-Tag automatisch einem Ladepunkt zuordnen. "))]),_:1}),l(p,{title:"Zugeordnete ID-Tags","no-elements-message":"Keine keine ID-Tags zugeordnet.",readonly:!0,"model-value":n.$store.state.mqtt["openWB/vehicle/"+r+"/tag_id"]},{help:a(()=>[...e[17]||(e[17]=[i(" Hier werden die ID-Tags aufgelistet, welche diesem Fahrzeug zugeordnet sind. Mit diesen ID-Tags kann dieses Fahrzeug an Ladepunkten automatisch zugeordnet werden. ",-1)])]),_:1},8,["model-value"])])):(d(),g("div",rn,[l(z,{subtype:"info"},{default:a(()=>[e[19]||(e[19]=i(" Einstellungen zur Fahrzeugzuordnung finden sich unter ",-1)),l(f,{to:"/IdentificationConfiguration"},{default:a(()=>[...e[18]||(e[18]=[i(" Einstellungen - Identifikation ",-1)])]),_:1}),e[20]||(e[20]=i(".",-1)),e[21]||(e[21]=m("br",null,null,-1)),e[22]||(e[22]=i(" Dem Fahrzeug sind aktuell keine ID-Tags zum Entsperren zugeordnet. ",-1))]),_:1})])),e[23]||(e[23]=m("hr",null,null,-1))])),l(M,{class:"mb-2",title:"SoC-Modul des Fahrzeugs",options:t.socModuleList,"model-value":n.$store.state.mqtt["openWB/vehicle/"+r+"/soc_module/config"]?.type,"onUpdate:modelValue":o=>t.updateSelectedSocModule(r,o)},{help:a(()=>[...e[24]||(e[24]=[i(" Mit einem SoC-Modul kann der Ladestand des Fahrzeugs ermittelt und geregelt werden. Z.B. lassen sich unabhängig vom Fahrzeug bestimmte SoC-Werte einstellen, um den Fahrzeugakku zu schonen. Aktuell werden die SoC-Werte mittels der App-Zugangsdaten aus dem Herstellerserver des Fahrzeuges ausgelesen. Zukünftig soll auch eine direkte SoC-Auslesung aus dem Fahrzeug möglich werden (openWB Pro).",-1),m("br",null,null,-1),i(" Die SoC-Abfrage erfolgt automatisch beim Anstecken des Fahrzeuges und zusätzlich über einstellbare Abfrageintervalle während des Ladens und Nichtladens. Die Abfrage kann auch manuell durch Klick auf den Reload-Pfeil auf der Hauptseite ausgelöst werden.",-1),m("br",null,null,-1),i(" Während des Ladevorgangs wird der Zeitstempel der SoC-Abfrage geprüft. Ist dieser älter als der Zeitstempel der vorherigen Abfrage, wird das Ergebnis verworfen, stattdessen eine Berechnung durchgeführt und auch so im Fahrzeugstatus vermerkt.",-1),m("br",null,null,-1),i(" Wenn eine Abfrage fehlschlägt, wird noch drei weitere Male im Abstand von 5 Minuten versucht, den SoC abzufragen. Wenn dies nicht erfolgreich ist, wird der SoC auf 0% gesetzt um zu vermeiden, dass ein Auto beim SoC-basierten Laden nicht geladen wird. Die Abfrage erfolgt dann wieder in den oben genannten Intervallen.",-1),m("br",null,null,-1),i(" Da aktuell die SoC-Abfragen über Onlineserver der Fahrzeughersteller laufen, ist infolge möglicher Umstellungen/Wartungen keine 100%-ig sichere SoC-Abfrage garantiert. Auch kann es zu SoC-Abweichungen infolge von zeitlicher Verzögerungen kommen. Hilfestellung erfolgt primär im openWB-Forum. ",-1)])]),_:1},8,["options","model-value","onUpdate:modelValue"]),n.$store.state.mqtt["openWB/vehicle/"+r+"/soc_module/config"]?.type?(d(),g("div",un,[l(_,{title:"SoC direkt aus Fahrzeug auslesen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":n.$store.state.mqtt["openWB/vehicle/"+r+"/soc_module/general_config"]?.use_soc_from_cp,"onUpdate:modelValue":o=>n.updateState("openWB/vehicle/"+r+"/soc_module/general_config",o,"use_soc_from_cp")},{help:a(()=>[...e[25]||(e[25]=[i(" Wenn Ladepunkt und Fahrzeug das direkte Auslesen des SoCs über das Ladekabel unterstützen, wird der SoC nach dem Anstecken aus dem Fahrzeug ausgelesen und während der Ladung berechnet. Das direkte Auslesen des SoC aus dem Fahrzeug ist aktuell nur mit einer openWB Pro möglich. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(U,null,{help:a(()=>[...e[26]||(e[26]=[i(" Einige Hersteller begrenzen die möglichen Abfragen. Sobald ein gewisses Limit in einem Zeitraum überschritten wird, werden weitere Anfragen blockiert. Die Zeitintervalle sollten daher nicht zu klein gewählt werden. ",-1)])]),default:a(()=>[e[27]||(e[27]=i(" Aktualisierung der Fahrzeugdaten ",-1))]),_:1}),l(C,{title:"Während der Ladung",unit:"Min.",min:1,max:60,required:"","model-value":n.$store.state.mqtt["openWB/vehicle/"+r+"/soc_module/general_config"]?.request_interval_charging/60,"onUpdate:modelValue":o=>n.updateState("openWB/vehicle/"+r+"/soc_module/general_config",o*60,"request_interval_charging")},{help:a(()=>[...e[28]||(e[28]=[i(" Der Ladestand des Fahrzeugs (SoC) wird bei einem laufenden Ladevorgang in dem hier eingestellten Intervall in Minuten abgefragt. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(C,{title:"Ohne laufende Ladung",unit:"Min.",min:5,required:"","model-value":n.$store.state.mqtt["openWB/vehicle/"+r+"/soc_module/general_config"].request_interval_not_charging/60,"onUpdate:modelValue":o=>n.updateState("openWB/vehicle/"+r+"/soc_module/general_config",o*60,"request_interval_not_charging")},{help:a(()=>[...e[29]||(e[29]=[i(" Der Ladestand des Fahrzeugs (SoC) wird in dem hier eingestellten Intervall in Minuten abgefragt, falls kein Ladevorgang aktiv ist. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(_,{title:"Nur aktualisieren wenn angesteckt",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":n.$store.state.mqtt["openWB/vehicle/"+r+"/soc_module/general_config"].request_only_plugged,"onUpdate:modelValue":o=>n.updateState("openWB/vehicle/"+r+"/soc_module/general_config",o,"request_only_plugged")},{help:a(()=>[...e[30]||(e[30]=[i(' Wird hier "Ja" ausgewählt, dann wird der Ladestand des Fahrzeugs nur abgefragt, wenn das Ladekabel angesteckt ist. ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(ne,{"vehicle-id":r,vehicle:n.$store.state.mqtt["openWB/vehicle/"+r+"/soc_module/config"],"onUpdate:configuration":o=>t.updateConfiguration("openWB/vehicle/"+r+"/soc_module/config",o)},null,8,["vehicle-id","vehicle","onUpdate:configuration"])])):s("",!0)]),_:2},[r!==0?{name:"actions",fn:a(o=>[o.collapsed?s("",!0):(d(),b(k,{key:0,class:"bg-danger clickable",title:"Fahrzeug löschen",onClick:u=>t.removeVehicleModal(u,r)},{default:a(()=>[l(h,{icon:["fas","trash"]})]),_:1},8,["onClick"]))]),key:"0"}:void 0]),1032,["title","collapsed"]))),128))]))]),_:1},8,["collapsed"]),e[91]||(e[91]=m("hr",{class:"border-secondary"},null,-1)),l(U,null,{default:a(()=>[...e[32]||(e[32]=[i("Profile",-1)])]),_:1}),l(B,{collapsible:!0,collapsed:!0},{header:a(()=>[l(K,{class:"fa-lg"},{default:a(()=>[l(h,{icon:["far","file"]}),l(h,{icon:["fas","car"],transform:"shrink-8"})]),_:1}),e[33]||(e[33]=i(" Fahrzeug-Profile ",-1))]),actions:a(()=>[n.$store.state.mqtt["openWB/general/extern"]===!1?(d(),b(k,{key:0,class:"bg-success clickable",title:"Neues Fahrzeug-Profil hinzufügen",onClick:t.addEvTemplate},{default:a(()=>[l(h,{icon:["fas","plus"]})]),_:1},8,["onClick"])):s("",!0)]),default:a(()=>[n.$store.state.mqtt["openWB/general/extern"]===!0?(d(),g("div",on,[l(z,{subtype:"info"},{default:a(()=>[...e[34]||(e[34]=[i(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(d(),g("div",dn,[(d(!0),g(F,null,q(t.evTemplates,(r,o)=>(d(),b(B,{key:o,title:r.name?r.name:o,collapsible:!0,collapsed:!0},x({default:a(()=>[l(L,{title:"Bezeichnung","model-value":r.name,disabled:o.endsWith("/0"),"onUpdate:modelValue":u=>n.updateState(o,u,"name")},x({_:2},[o.endsWith("/0")?{name:"help",fn:a(()=>[e[35]||(e[35]=i(" Das Standard-Profil kann nicht umbenannt werden. ",-1))]),key:"0"}:void 0]),1032,["model-value","disabled","onUpdate:modelValue"]),l(U,null,{default:a(()=>[...e[36]||(e[36]=[i(" Angaben zur Batterie ",-1)])]),_:1}),l(C,{title:"Kapazität der Batterie",unit:"kWh",min:1,step:1,required:"","model-value":r.battery_capacity/1e3,"onUpdate:modelValue":u=>n.updateState(o,u*1e3,"battery_capacity")},{help:a(()=>[...e[37]||(e[37]=[i(" Angabe der Netto-Kapazität der Fahrzeugbatterie. Dient zur Berechnung des manuellen SoC und der geladenen Reichweite. Die Netto-Kapazität unterscheidet sich meist von den Angaben der Fahrzeughersteller. So besitzt ein Tesla Model S 90 z. B. nur ca. 83kWh und nicht die durch die Typenbezeichnung suggerierten 90kWh. Andere Hersteller begrenzen die nutzbare Kapazität absichtlich, um eine höhere Lebensdauer der Akkus zu erreichen. Gängig sind eine Drosselung auf 90% der angegebenen Brutto-Kapazität. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),v.installAssistantActive?s("",!0):(d(),g("div",sn,[l(C,{title:"Wirkungsgrad der Ladeelektronik",unit:"%",min:1,max:100,required:"","model-value":r.efficiency,"onUpdate:modelValue":u=>n.updateState(o,u,"efficiency")},{help:a(()=>[...e[38]||(e[38]=[i(" Durch Verluste in der Ladeelektronik (z. B. Umwandlung Wechselspannung in Gleichspannung) gelangt nicht die komplette Energie, welche durch den Zähler in der Wallbox gemessen wird, in den Akku des Fahrzeugs. Der anzugebende Wert liegt bei gängigen Fahrzeugen im Bereich 90-95%. Eine Ausnahme stellt der Zoe dar, dessen Chameleon-Lader je nach Modellversion und freigegebener Leistung der Wallbox teilweise nur auf ca. 50% kommt.",-1),m("br",null,null,-1),i(" Liegen die Angaben der Wallbox und des Fahrzeugs nach der Ladung mehrere Prozent auseinander, dann kann mit dieser Einstellung eine Feinabstimmung erfolgen: ",-1),m("br",null,null,-1),i(" SoC an der Wallbox zu hoch: Wirkungsgrad um ein paar Prozent reduzieren",-1),m("br",null,null,-1),i(" SoC an der Wallbox zu gering: Wirkungsgrad um ein paar Prozent erhöhen",-1),m("br",null,null,-1)])]),_:1},8,["model-value","onUpdate:modelValue"])])),l(C,{title:"Durchschnittsverbrauch",unit:"kWh / 100km",min:1,step:.1,required:"","model-value":r.average_consump/1e3,"onUpdate:modelValue":u=>n.updateState(o,u*1e3,"average_consump")},null,8,["model-value","onUpdate:modelValue"]),l(_,{title:"Bidirektionales Laden",buttons:[{buttonValue:!1,text:"Nicht unterstützt",class:"btn-outline-danger"},{buttonValue:!0,text:"AC nach ISO15118-20",class:"btn-outline-success"}],"model-value":r.bidi,"onUpdate:modelValue":u=>n.updateState(o,u,"bidi")},{help:a(()=>[...e[39]||(e[39]=[i(' Für bidirektionales Laden wird eine openWB Pro benötigt. Die openWB Pro muss auf den Modus "Bidi" gestellt werden.',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),t.dcChargingEnabled===!0?(d(),g("div",mn,[l(U,null,{default:a(()=>[...e[40]||(e[40]=[i(" Angaben zur Ladeleistung (DC) ",-1)])]),_:1}),l(C,{title:"Mindestleistung",min:0,unit:"kW","model-value":n.ac_current2dc_power(r.dc_min_current),"onUpdate:modelValue":u=>n.updateState(o,n.dc_power2ac_current(u),"dc_min_current")},null,8,["model-value","onUpdate:modelValue"]),l(C,{title:"Maximalleistung",unit:"kW","model-value":n.ac_current2dc_power(r.dc_max_current),"onUpdate:modelValue":u=>n.updateState(o,n.dc_power2ac_current(u),"dc_max_current")},null,8,["model-value","onUpdate:modelValue"])])):s("",!0),l(U,null,{default:a(()=>[e[41]||(e[41]=i(" Angaben zum Ladestrom ",-1)),t.dcChargingEnabled===!0?(d(),g("span",gn," (AC) ")):s("",!0)]),_:1}),l(A,{title:"Mindeststrom",min:6,max:16,step:1,unit:"A","model-value":r.min_current,"onUpdate:modelValue":u=>n.updateState(o,u,"min_current")},null,8,["model-value","onUpdate:modelValue"]),l(A,{title:"Maximalstrom bei einer Phase",min:6,max:32,step:1,unit:"A","model-value":r.max_current_single_phase,"onUpdate:modelValue":u=>n.updateState(o,u,"max_current_single_phase")},null,8,["model-value","onUpdate:modelValue"]),l(A,{title:"Maximalstrom mehrere Phasen",min:6,max:32,step:1,unit:"A","model-value":r.max_current_multi_phases,"onUpdate:modelValue":u=>n.updateState(o,u,"max_current_multi_phases")},null,8,["model-value","onUpdate:modelValue"]),l(C,{title:"Erlaubte Stromabweichung",step:.1,min:0,max:5,unit:"A","model-value":r.nominal_difference,"onUpdate:modelValue":u=>n.updateState(o,u,"nominal_difference")},{help:a(()=>[...e[42]||(e[42]=[i(" In manchen Lademodi, z.B. bei der automatischen Phasenumschaltung, wird geprüft, ob das Fahrzeug mit der vorgegebenen Stromstärke lädt. Manche Fahrzeuge laden nicht exakt mit der vorgegebenen Stromstärke. Die erlaubte Abweichung kann hier eingestellt werden. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(U,null,{default:a(()=>[e[43]||(e[43]=i(" Angaben zur Handhabung von Phasen ",-1)),t.dcChargingEnabled===!0?(d(),g("span",pn," (AC) ")):s("",!0)]),_:1}),l(_,{title:"Unterstützte Phasen",buttons:[{buttonValue:1,text:"1"},{buttonValue:2,text:"2"},{buttonValue:3,text:"3"}],"model-value":r.max_phases,"onUpdate:modelValue":u=>n.updateState(o,u,"max_phases")},{help:a(()=>[...e[44]||(e[44]=[i(" Anzahl der Phasen, die der Fahrzeuglader (s.g. OBC - OnboardCharger) verwendet. Plugin-Hybride nutzen meist nur eine Phase, reine E-Autos meist 3, manche nur 2 Phasen. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(_,{title:"CP-Unterbrechung",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"model-value":r.control_pilot_interruption,"onUpdate:modelValue":u=>n.updateState(o,u,"control_pilot_interruption")},{help:a(()=>[...e[45]||(e[45]=[i(' Erläuterung siehe "Konfiguration - Ladepunkte" -> Hardware-Optionen ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),r.control_pilot_interruption?(d(),b(C,{key:2,title:"Dauer der CP-Unterbrechung",min:4,step:1,unit:"s","model-value":r.control_pilot_interruption_duration,"onUpdate:modelValue":u=>n.updateState(o,u,"control_pilot_interruption_duration")},null,8,["model-value","onUpdate:modelValue"])):s("",!0),r.control_pilot_interruption?(d(),b(A,{key:3,title:"Wiederholung der CP-Unterbrechung",min:0,max:20,step:1,unit:"min",labels:[{label:"Aus",value:0},{label:1,value:60},{label:2,value:120},{label:3,value:180},{label:4,value:240},{label:5,value:300},{label:6,value:360},{label:7,value:420},{label:8,value:480},{label:9,value:540},{label:10,value:600},{label:11,value:660},{label:12,value:720},{label:13,value:780},{label:14,value:840},{label:15,value:900},{label:16,value:960},{label:17,value:1020},{label:18,value:1080},{label:19,value:1140},{label:20,value:1200}],"model-value":r.control_pilot_interruption_retry_interval,"onUpdate:modelValue":u=>n.updateState(o,u,"control_pilot_interruption_retry_interval")},{help:a(()=>[...e[46]||(e[46]=[i(' Wiederholt die CP-Unterbrechung, wenn das Fahrzeug trotz freigegebenem Ladestrom nach dieser Zeit immer noch nicht lädt. "Aus" deaktiviert die Wiederholung. Empfehlenswert sind 3 bis 5 Minuten. ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"])):s("",!0),l(_,{title:"Phasenumschaltung blockieren",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"model-value":r.prevent_phase_switch,"onUpdate:modelValue":u=>n.updateState(o,u,"prevent_phase_switch")},{help:a(()=>[...e[47]||(e[47]=[i(' Erläuterung zu 1p3p siehe "Ladeeinstellungen" ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(_,{title:"Ladung aktiv halten",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"model-value":r.prevent_charge_stop,"onUpdate:modelValue":u=>n.updateState(o,u,"prevent_charge_stop")},{help:a(()=>[...e[48]||(e[48]=[i(" Der Ladevorgang wird in den Lademodi PV- und Zielladen nach Ladebeginn nicht unterbrochen, selbst wenn nicht mehr genug Überschuss vorhanden ist. Diese Einstellung sollte bei Fahrzeugen aktiviert werden, die nach einer Ladungsunterbrechung keine Ladung mehr starten. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),v.installAssistantActive?s("",!0):(d(),g("div",hn,[l(C,{title:"Mindestzeit zwischen Umschaltungen",unit:"s",min:2,step:1,required:"","model-value":r.keep_charge_active_duration,"onUpdate:modelValue":u=>n.updateState(o,u,"keep_charge_active_duration")},{help:a(()=>[...e[49]||(e[49]=[i(" Manche Fahrzeuge benötigen nach der Umschaltung einige Zeit, bis sie mit der vorgegebenen Phasenzahl laden. In dieser Zeit wird keine neue Phasenumschaltung angestoßen. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"])]))]),_:2},[n.$store.state.mqtt["openWB/general/extern"]===!1?{name:"actions",fn:a(u=>[u.collapsed?s("",!0):(d(),b(k,{key:0,class:"bg-success clickable",title:"Fahrzeug-Profil duplizieren",onClick:P=>t.addEvTemplate(P,o)},{default:a(()=>[l(h,{icon:["fas","copy"]})]),_:1},8,["onClick"])),!u.collapsed&&!o.endsWith("/0")?(d(),b(k,{key:1,class:"bg-danger clickable ml-1",title:"Fahrzeug-Profil löschen",onClick:P=>t.removeEvTemplateModal(P,o)},{default:a(()=>[l(h,{icon:["fas","trash"]})]),_:1},8,["onClick"])):s("",!0)]),key:"0"}:void 0]),1032,["title"]))),128))]))]),_:1}),l(B,{collapsible:!0,collapsed:n.$route.params.section!="charge_template"},{header:a(()=>[l(K,{class:"fa-lg"},{default:a(()=>[l(h,{icon:["far","file"]}),l(h,{icon:["fas","plug"],transform:"shrink-8"})]),_:1}),e[50]||(e[50]=i(" Lade-Profile ",-1))]),actions:a(()=>[n.$store.state.mqtt["openWB/general/extern"]===!1?(d(),b(k,{key:0,class:"bg-success clickable",title:"Neues Lade-Profil hinzufügen",onClick:t.addChargeTemplate},{default:a(()=>[l(h,{icon:["fas","plus"]})]),_:1},8,["onClick"])):s("",!0)]),default:a(()=>[n.$store.state.mqtt["openWB/general/extern"]===!0?(d(),g("div",cn,[l(z,{subtype:"info"},{default:a(()=>[...e[51]||(e[51]=[i(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(d(),g("div",bn,[(d(!0),g(F,null,q(t.chargeTemplates,(r,o)=>(d(),b(B,{key:o,title:r.name?r.name:o,collapsible:!0,collapsed:!(n.$route.params.section=="charge_template"&&parseInt(n.$route.params.section_index)==r.id)},{actions:a(u=>[u.collapsed?s("",!0):(d(),b(k,{key:0,class:"bg-success clickable",title:"Lade-Profil duplizieren",onClick:P=>t.addChargeTemplate(P,o)},{default:a(()=>[l(h,{icon:["fas","copy"]})]),_:1},8,["onClick"])),!u.collapsed&&!o.endsWith("/0")?(d(),b(k,{key:1,class:"bg-danger clickable ml-1",title:"Lade-Profil löschen",onClick:T(P=>t.removeChargeTemplateModal(P,r.id),["stop"])},{default:a(()=>[l(h,{icon:["fas","trash"]})]),_:1},8,["onClick"])):s("",!0)]),default:a(()=>[l(L,{title:"Bezeichnung","model-value":r.name,disabled:o.endsWith("/0"),"onUpdate:modelValue":u=>n.updateState(o,u,"name")},x({_:2},[o.endsWith("/0")?{name:"help",fn:a(()=>[e[52]||(e[52]=i(" Das Standard-Profil kann nicht umbenannt werden. ",-1))]),key:"0"}:void 0]),1032,["model-value","disabled","onUpdate:modelValue"]),l(U,null,{default:a(()=>[...e[53]||(e[53]=[i(" Allgemeine Optionen ",-1)])]),_:1}),l(_,{title:"Aktiver Lademodus",buttons:[{buttonValue:"instant_charging",text:"Sofort",class:"btn-outline-danger"},{buttonValue:"pv_charging",text:"PV",class:"btn-outline-success"},{buttonValue:"scheduled_charging",text:"Ziel",class:"btn-outline-primary"},{buttonValue:"eco_charging",text:"Eco",class:"btn-outline-secondary"},{buttonValue:"stop",text:"Stop",class:"btn-outline-dark"}],"model-value":r.chargemode.selected,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.selected"),onButtonClick:u=>t.openActiveChargeModeCard(o,u)},{help:a(()=>[...e[54]||(e[54]=[i(" Diese Einstellung entspricht dem gewählten Lademodus auf der Hauptseite und ist aktiv, wenn ein zugehöriges Fahrzeug angesteckt ist.",-1),m("br",null,null,-1),i(" Die zur Verfügung stehende Leistung wird intern anhand folgender Prioritätenliste auf die Fahrzeuge bzw. Ladepunkte verteilt:",-1),m("br",null,null,-1),m("ol",null,[m("li",null,"Ziel (Sofortladen) mit Priorität"),m("li",null,"Ziel (Sofortladen)"),m("li",null,"Zeit mit Priorität"),m("li",null,"Zeit"),m("li",null,"Sofort mit Priorität"),m("li",null,"Sofort"),m("li",null,"Eco (Min-Anteil) mit Priorität"),m("li",null,"Eco (Min-Anteil)"),m("li",null,"PV (Min-Anteil) mit Priorität"),m("li",null,"PV (Min-Anteil)"),m("li",null,"Ziel (PV) mit Priorität"),m("li",null,"Ziel (PV)"),m("li",null,"Eco (PV-Anteil) mit Priorität"),m("li",null,"Eco (PV-Anteil)"),m("li",null,"PV (PV-Anteil) mit Priorität"),m("li",null,"PV (PV-Anteil)"),m("li",null,"Bidi-Entladen ohne Priorität"),m("li",null,"Bidi-Entladen mit Priorität")],-1)])]),_:1},8,["model-value","onUpdate:modelValue","onButtonClick"]),v.installAssistantActive?s("",!0):(d(),g("div",fn,[l(_,{title:"Priorität",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":r.prio,"onUpdate:modelValue":u=>n.updateState(o,u,"prio")},{help:a(()=>[...e[55]||(e[55]=[i(" Die Ladefreigabe mit dem jeweils eingestellten Mindeststrom erfolgt für alle Fahrzeuge, soweit die verfügbare Leistung ausreicht. Fahrzeuge mit Priorität werden bevorzugt mit mehr Leistung geladen, falls verfügbar. Erst wenn alle priorisierten Fahrzeuge die maximale Ladeleistung bekommen und noch zusätzlicher Überschuss vorhanden ist, wird auch für Fahrzeuge ohne Priorität mehr Leistung freigegeben. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(_,{title:"Standard nach Abstecken",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":r.load_default,"onUpdate:modelValue":u=>n.updateState(o,u,"load_default")},{help:a(()=>[...e[56]||(e[56]=[i(" Falls diese Option aktiviert ist, wird der betroffene Ladepunkt nach dem Abstecken auf das Standard Fahrzeug zurückgesetzt. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),e[58]||(e[58]=m("hr",null,null,-1)),l(U,null,{default:a(()=>[...e[57]||(e[57]=[i("Einstellungen der Lademodi",-1)])]),_:1})])),l(B,{ref_for:!0,ref:`card-${o}-instant_charging`,collapsible:!0,collapsed:!0,subtype:"secondary"},{header:a(()=>[...e[59]||(e[59]=[i(" Sofort ",-1)])]),default:a(()=>[l(A,{title:`Soll-Ladestrom${t.dcChargingEnabled?" (AC)":""}`,min:6,max:32,step:1,unit:"A","model-value":r.chargemode.instant_charging.current,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.instant_charging.current")},null,8,["title","model-value","onUpdate:modelValue"]),t.dcChargingEnabled===!0?(d(),b(C,{key:0,title:"Soll-Ladeleistung (DC)",unit:"kW",min:0,"model-value":n.ac_current2dc_power(r.chargemode.instant_charging.dc_current),"onUpdate:modelValue":u=>n.updateState(o,n.dc_power2ac_current(u),"chargemode.instant_charging.dc_current")},null,8,["model-value","onUpdate:modelValue"])):s("",!0),l(_,{title:"Anzahl Phasen",buttons:[{buttonValue:1,text:"1"},{buttonValue:3,text:"Maximum"}],"model-value":r.chargemode.instant_charging.phases_to_use,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.instant_charging.phases_to_use")},{help:a(()=>[...e[60]||(e[60]=[i(' Hier kann eingestellt werden, ob Ladevorgänge mit einer Phase oder dem möglichen Maximum in Abhängigkeit der "Ladepunkt"- und "Fahrzeug"-Einstellungen durchgeführt werden. Voraussetzung ist die verbaute Umschaltmöglichkeit zwischen einer und mehreren Phasen (s.g. 1p3p). ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(_,{title:"Begrenzung",buttons:[{buttonValue:"none",text:"Keine"},{buttonValue:"soc",text:"Fahrzeug-SoC"},{buttonValue:"amount",text:"Energie"}],"model-value":r.chargemode.instant_charging.limit.selected,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.instant_charging.limit.selected")},{help:a(()=>[...e[61]||(e[61]=[i(" Sofortladen kann ohne Fahrzeug-SoC-Begrenzung (Aus), mit Begrenzung des Fahrzeug-SoC (SoC) bei konfiguriertem SoC-Auslesemodul oder mittels Vorgabe eine gewünschten Energiemenge in kWh (Energie) genutzt werden. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(A,{title:"SoC-Limit für das Fahrzeug",min:5,max:100,step:5,unit:"%","model-value":r.chargemode.instant_charging.limit.soc,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.instant_charging.limit.soc")},{help:a(()=>[...e[62]||(e[62]=[i(' Um die Fahrzeug-SoC-Begrenzung nutzen zu können, muss ein SoC-Modul für das jeweilige Fahrzeug eingerichtet sein (siehe "Konfiguration" -> "Fahrzeuge" -> "SoC-Modul"). ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(C,{title:"Energie-Limit",unit:"kWh",min:1,step:1,"model-value":r.chargemode.instant_charging.limit.amount/1e3,"onUpdate:modelValue":u=>n.updateState(o,u*1e3,"chargemode.instant_charging.limit.amount")},{help:a(()=>[...e[63]||(e[63]=[i(" Die geladene Energiemenge wird nach dem Anstecken neu gezählt. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"])]),_:2},1536),l(B,{ref_for:!0,ref:`card-${o}-pv_charging`,collapsible:!0,collapsed:!0,subtype:"secondary"},{header:a(()=>[...e[64]||(e[64]=[i(" PV ",-1)])]),default:a(()=>[l(A,{title:`Minimaler Dauerstrom${t.dcChargingEnabled?" (AC)":""}`,min:0,max:11,step:1,unit:"A",labels:[{label:"Aus",value:0},{label:6,value:6},{label:7,value:7},{label:8,value:8},{label:9,value:9},{label:10,value:10},{label:11,value:11},{label:12,value:12},{label:13,value:13},{label:14,value:14},{label:15,value:15},{label:16,value:16}],"model-value":r.chargemode.pv_charging.min_current,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.pv_charging.min_current")},{help:a(()=>[...e[65]||(e[65]=[i(' Hier kann eine Stromstärke eingestellt werden, mit dem unabhängig vom vorhandenen Überschuss durchgeladen wird. Hierdurch wird z.B. an Tagen mit häufigem Sonne/Wolken-Wechsel oder mit nur wenig PV-Ertrag ein Laden ohne Unterbrechung ermöglicht. Folglich kann auch Netzbezug für das Fahrzeugladen entstehen, weshalb der niedrigste Stromwert empfohlen wird. Diese Einstellung entspricht weitestgehend dem Lademodus "Min+PV" der Version 1.x. ',-1)])]),_:1},8,["title","model-value","onUpdate:modelValue"]),t.dcChargingEnabled===!0?(d(),b(C,{key:0,title:"Minimale Dauerleistung (DC)",unit:"kW",min:0,"model-value":n.ac_current2dc_power(r.chargemode.pv_charging.dc_min_current),"onUpdate:modelValue":u=>n.updateState(o,n.dc_power2ac_current(u),"chargemode.pv_charging.dc_min_current")},{help:a(()=>[...e[66]||(e[66]=[i(" Hier kann eine Leistung eingestellt werden, mit dem unabhängig vom vorhandenen Überschuss durchgeladen wird. Hierdurch wird z.B. an Tagen mit häufigem Sonne/Wolken-Wechsel oder mit nur wenig PV-Ertrag ein Laden ohne Unterbrechung ermöglicht. Folglich kann auch Netzbezug für das Fahrzeugladen entstehen, weshalb der niedrigste Leistungswert empfohlen wird. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"])):s("",!0),l(_,{title:"Anzahl Phasen",buttons:[{buttonValue:1,text:"1"},{buttonValue:3,text:"Maximum"},{buttonValue:0,text:"Automatik"}],"model-value":r.chargemode.pv_charging.phases_to_use,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.pv_charging.phases_to_use")},{help:a(()=>[...e[67]||(e[67]=[i(' Hier kann eingestellt werden, ob Ladevorgänge mit einer Phase oder dem möglichen Maximum in Abhängigkeit der "Ladepunkt"- und "Fahrzeug"-Einstellungen durchgeführt werden. Im Modus "Automatik" entscheidet die Regelung, welche Einstellung genutzt wird, um den verfügbaren Überschuss in die Fahrzeuge zu laden. Voraussetzung ist die verbaute Umschaltmöglichkeit zwischen einer und mehreren Phasen (sog. 1p3p). ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(_,{title:"Begrenzung",buttons:[{buttonValue:"none",text:"Keine"},{buttonValue:"soc",text:"Fahrzeug-SoC"},{buttonValue:"amount",text:"Energie"}],"model-value":r.chargemode.pv_charging.limit.selected,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.pv_charging.limit.selected")},{help:a(()=>[...e[68]||(e[68]=[i(" PV kann ohne Fahrzeug-SoC-Begrenzung (Aus), mit Begrenzung des Fahrzeug-SoC (SoC) bei konfiguriertem SoC-Auslesemodul oder mittels Vorgabe eine gewünschten Energiemenge in kWh (Energie) genutzt werden. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(A,{title:"SoC-Limit für das Fahrzeug",min:5,max:100,step:5,unit:"%","model-value":r.chargemode.pv_charging.limit.soc,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.pv_charging.limit.soc")},{help:a(()=>[...e[69]||(e[69]=[i(' Um die Fahrzeug-SoC-Begrenzung nutzen zu können, muss ein SoC-Modul für das jeweilige Fahrzeug eingerichtet sein (siehe "Konfiguration" -> "Fahrzeuge" -> "SoC-Modul"). ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(C,{title:"Energie-Limit",unit:"kWh",min:1,step:1,"model-value":r.chargemode.pv_charging.limit.amount/1e3,"onUpdate:modelValue":u=>n.updateState(o,u*1e3,"chargemode.pv_charging.limit.amount")},{help:a(()=>[...e[70]||(e[70]=[i(" Die geladene Energiemenge wird nach dem Anstecken neu gezählt. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(A,{title:"Mindest-SoC für das Fahrzeug",min:0,max:19,step:1,unit:"%",labels:[{label:"Aus",value:0},{label:5,value:5},{label:10,value:10},{label:15,value:15},{label:20,value:20},{label:25,value:25},{label:30,value:30},{label:35,value:35},{label:40,value:40},{label:45,value:45},{label:50,value:50},{label:55,value:55},{label:60,value:60},{label:65,value:65},{label:70,value:70},{label:75,value:75},{label:80,value:80},{label:85,value:85},{label:90,value:90},{label:95,value:95}],"model-value":r.chargemode.pv_charging.min_soc,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.pv_charging.min_soc")},{help:a(()=>[...e[71]||(e[71]=[i(' Liegt der Fahrzeug-Ladestand (SoC) unter dem hier eingestellten Wert, dann wird bis zum Erreichen dieses Wertes mit dem eingestellten "Mindest-SoC-Strom" geladen. Dies dient der Sicherstellung eines "Mindest-SoC" - z.B. für eine immer abzudeckende Fahrzeugreichweite - auch wenn kein oder zu wenig Überschuss verfügbar ist (=> Laden mit anteilig Netzstrom). Nach dem Erreichen des "Mindest-SoC" wird bei verfügbarem Überschuss geladen.',-1),m("br",null,null,-1),i(' Um die Fahrzeug-SoC-Begrenzung nutzen zu können, muss ein SoC-Modul für das jeweilige Fahrzeug eingerichtet sein (siehe "Konfiguration" -> "Fahrzeuge" -> "SoC-Modul"). ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(A,{title:`Mindest-SoC-Strom${t.dcChargingEnabled?" (AC)":""}`,min:6,max:32,step:1,unit:"A","model-value":r.chargemode.pv_charging.min_soc_current,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.pv_charging.min_soc_current")},{help:a(()=>[...e[72]||(e[72]=[i(' Wird der oben eingestellte "Mindest-SoC" des Fahrzeuges unterschritten, dann wird unabhängig vom Überschuss ein Ladevorgang mit dem hier festgelegten "Mindest-SoC-Strom" initiiert (ggf. mit anteilig Netzbezug). ',-1)])]),_:1},8,["title","model-value","onUpdate:modelValue"]),t.dcChargingEnabled===!0?(d(),b(C,{key:1,title:"Mindest-SoC-Leistung (DC)",unit:"kW",min:0,"model-value":n.ac_current2dc_power(r.chargemode.pv_charging.dc_min_soc_current),"onUpdate:modelValue":u=>n.updateState(o,n.dc_power2ac_current(u),"chargemode.pv_charging.dc_min_soc_current")},{help:a(()=>[...e[73]||(e[73]=[i(' Wird der oben eingestellte "Mindest-SoC" des Fahrzeuges unterschritten, dann wird unabhängig vom Überschuss ein Ladevorgang mit der hier festgelegten "Mindest-SoC-Leistung" initiiert (ggf. mit anteilig Netzbezug). ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"])):s("",!0),l(_,{title:"Anzahl Phasen Mindest-SoC",buttons:[{buttonValue:1,text:"1"},{buttonValue:3,text:"Maximum"}],"model-value":r.chargemode.pv_charging.phases_to_use_min_soc,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.pv_charging.phases_to_use_min_soc")},{help:a(()=>[...e[74]||(e[74]=[i(' Hier kann eingestellt werden, ob Ladevorgänge mit einer Phase oder dem möglichen Maximum in Abhängigkeit der "Ladepunkt"- und "Fahrzeug"-Einstellungen durchgeführt werden. Voraussetzung ist die verbaute Umschaltmöglichkeit zwischen einer und mehreren Phasen (sog. 1p3p). ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"])]),_:2},1536),l(B,{ref_for:!0,ref:`card-${o}-scheduled_charging`,collapsible:!0,collapsed:!0,subtype:"secondary"},{header:a(()=>[...e[75]||(e[75]=[i(" Ziel ",-1)])]),default:a(()=>[l(U,null,{actions:a(()=>[l(k,{class:"bg-success clickable",title:"Neuen Zielladen-Plan hinzufügen",onClick:T(u=>t.addChargeTemplateSchedulePlan(r.id),["stop"])},{default:a(()=>[l(h,{icon:["fas","plus"]})]),_:1},8,["onClick"])]),help:a(()=>[...e[76]||(e[76]=[i(' Im Lademodus "Zielladen" wird der Ladestrom so angepasst, dass das Fahrzeug zum angegebenen Zeitpunkt den eingestellten SoC bzw. die einzuladende Energiemenge erreicht. Anhand des vorgegebenen Ladestroms wird der Zeitpunkt berechnet, an dem die Ladung spätestens starten muss.',-1),m("br",null,null,-1),i(' Ist der berechnete Zeitpunkt des Ladestarts noch nicht erreicht, wird mit Überschuss geladen. Auch nach Erreichen des Ziel-SoCs wird mit Überschuss geladen, solange bis das "SoC-Limit für das Fahrzeug" erreicht wird.',-1),m("br",null,null,-1),i(" Es wird nach den Vorgaben des Zeitplans geladen, dessen Zieltermin am nächsten liegt, bis max 20 Minuten nach dem angegebenen Zieltermin. ",-1)])]),default:a(()=>[e[77]||(e[77]=i(" Zielladepläne ",-1))]),_:2},1024),r.chargemode.scheduled_charging.plans.length==0?(d(),b(z,{key:0,subtype:"info"},{default:a(()=>[...e[78]||(e[78]=[i(" Es wurden noch keine Pläne für das Zielladen angelegt. ",-1)])]),_:1})):s("",!0),(d(!0),g(F,null,q(r.chargemode.scheduled_charging.plans,(u,P)=>(d(),b(te,{key:P,"model-value":u,"template-id":r.id,"dc-charging-enabled":t.dcChargingEnabled,"onUpdate:modelValue":D=>n.updateState(o,D,`chargemode.scheduled_charging.plans.${P}`),onSendCommand:e[3]||(e[3]=D=>n.$emit("sendCommand",D))},null,8,["model-value","template-id","dc-charging-enabled","onUpdate:modelValue"]))),128))]),_:2},1536),l(B,{ref_for:!0,ref:`card-${o}-eco_charging`,collapsible:!0,collapsed:!0,subtype:"secondary"},{header:a(()=>[...e[79]||(e[79]=[i(" Eco ",-1)])]),default:a(()=>[l(U,null,{help:a(()=>[...e[80]||(e[80]=[i(" Im Eco-Modus wird eine Preisgrenze vorgegeben. Wenn der Strompreis unter dieser Grenze liegt, wird mit dem eingestellten Ladestrom geladen und -falls vorhanden- zusätzlich mit dem Überschuss. Wenn die Preisgrenze überschritten wird, wird nur mit Überschuss geladen, wenn dieser vorhanden ist. ",-1)])]),default:a(()=>[e[81]||(e[81]=i("Arbeitsweise von Eco ",-1))]),_:1}),l(A,{title:`Minimaler Dauerstrom unter der Preisgrenze${t.dcChargingEnabled?" (AC)":""}`,min:6,max:32,step:1,unit:"A","model-value":r.chargemode.eco_charging.current,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.eco_charging.current")},null,8,["title","model-value","onUpdate:modelValue"]),t.dcChargingEnabled===!0?(d(),b(C,{key:0,title:"Minimale Dauerleistung unter der Preisgrenze (DC)",unit:"kW",min:0,"model-value":n.ac_current2dc_power(r.chargemode.eco_charging.dc_current),"onUpdate:modelValue":u=>n.updateState(o,n.dc_power2ac_current(u),"chargemode.eco_charging.dc_current")},null,8,["model-value","onUpdate:modelValue"])):s("",!0),l(_,{title:"Anzahl Phasen bei Überschuss",buttons:[{buttonValue:1,text:"1"},{buttonValue:3,text:"Maximum"},{buttonValue:0,text:"Automatik"}],"model-value":r.chargemode.eco_charging.phases_to_use,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.eco_charging.phases_to_use")},{help:a(()=>[...e[82]||(e[82]=[i(' Hier kann eingestellt werden, ob Ladevorgänge mit einer Phase oder dem möglichen Maximum in Abhängigkeit der "Ladepunkt"- und "Fahrzeug"-Einstellungen durchgeführt werden. Im Modus "Automatik" entscheidet die Regelung, welche Einstellung genutzt wird, um den verfügbaren Überschuss in die Fahrzeuge zu laden. Voraussetzung ist die verbaute Umschaltmöglichkeit zwischen einer und mehreren Phasen (sog. 1p3p).',-1),m("br",null,null,-1),i(" Wird die eingestellte Preisgrenze unterschritten, wird immer mit der maximalen Anzahl Phasen geladen. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(_,{title:"Begrenzung",buttons:[{buttonValue:"none",text:"Keine"},{buttonValue:"soc",text:"Fahrzeug-SoC"},{buttonValue:"amount",text:"Energie"}],"model-value":r.chargemode.eco_charging.limit.selected,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.eco_charging.limit.selected")},{help:a(()=>[...e[83]||(e[83]=[i(" Eco kann ohne Fahrzeug-SoC-Begrenzung (Aus), mit Begrenzung des Fahrzeug-SoC (SoC) bei konfiguriertem SoC-Auslesemodul oder mittels Vorgabe eine gewünschten Energiemenge in kWh (Energie) genutzt werden. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(A,{title:"SoC-Limit für das Fahrzeug",min:5,max:100,step:5,unit:"%","model-value":r.chargemode.eco_charging.limit.soc,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.eco_charging.limit.soc")},{help:a(()=>[...e[84]||(e[84]=[i(' Um die Fahrzeug-SoC-Begrenzung nutzen zu können, muss ein SoC-Modul für das jeweilige Fahrzeug eingerichtet sein (siehe "Konfiguration" -> "Fahrzeuge" -> "SoC-Modul"). ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(C,{title:"Energie-Limit",unit:"kWh",min:1,step:1,"model-value":r.chargemode.eco_charging.limit.amount/1e3,"onUpdate:modelValue":u=>n.updateState(o,u*1e3,"chargemode.eco_charging.limit.amount")},{help:a(()=>[...e[85]||(e[85]=[i(" Die geladene Energiemenge wird nach dem Anstecken neu gezählt. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),n.$store.state.mqtt["openWB/optional/ep/configured"]?s("",!0):(d(),b(z,{key:1,subtype:"warning"},{default:a(()=>[...e[86]||(e[86]=[i(" Bitte in den übergreifenden Ladeeinstellungen einen Strompreis-Anbieter konfigurieren. Ohne Strompreis-Anbieter wird im Modus Eco nur geladen, wenn Überschuss vorhanden ist. ",-1)])]),_:1})),l(C,{title:"Preisgrenze für strompreisbasiertes Laden",min:"-80",max:"80",step:"0.01",precision:2,unit:"ct/kWh","model-value":r.chargemode.eco_charging.max_price*1e5,"onUpdate:modelValue":u=>n.updateState(o,parseFloat((u/1e5).toFixed(7)),"chargemode.eco_charging.max_price")},null,8,["model-value","onUpdate:modelValue"])]),_:2},1536),v.installAssistantActive?s("",!0):(d(),g("div",vn,[e[90]||(e[90]=m("hr",null,null,-1)),l(_,{title:"Zeitladen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":r.time_charging.active,"onUpdate:modelValue":u=>n.updateState(o,u,"time_charging.active")},{help:a(()=>[...e[87]||(e[87]=[m("p",null,' Der Lademodus Zeit kann parallel zu einem der anderen Lademodi aktiviert werden. Die Auswahl des Lademodus, der in der Regelung genutzt wird, erfolgt anhand der Übersicht in der Hilfe bei "Aktiver Lademodus". Wenn kein Zeitplan aktiv ist oder das Limit des Zeitplans erreicht wurde, wird der Lademodus verwendet, der bei "Aktiver Lademodus" ausgewählt ist. ',-1),m("p",null," Mit einem Zeitplan kann ein klar abgegrenzter Zeitbereich zum Fahrzeugladen definiert werden. Dies wird häufig genutzt, um einem Fahrzeug kurz vor der Abfahrt Strom anzubieten, damit dessen Vorklimatisierung nicht aus dem Fahrzeugakku, sondern aus der openWB bezogen wird (enteisen, vorwärmen, abkühlen). Nicht von der Vorklimatisierung benötigter Strom erhöht dabei den Fahrzeug-SoC. Um das Stromnetz am Morgen nicht unnötig zu strapazieren, sollte eine moderate Stromvorgabe und ein beschränkter Zeitbereich vorgegeben werden (z.B. max. 10A; 30min - in Übereinstimmung mit den Einstellungen zur Vorklimatisierung in der Fahrzeug-App). ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(B,{ref_for:!0,ref:`card-${o}-scheduled_charging`,collapsible:!0,collapsed:!0,subtype:"secondary"},{header:a(()=>[...e[88]||(e[88]=[i(" Zeitladen-Pläne ",-1)])]),actions:a(()=>[l(k,{class:"bg-success clickable",title:"Neuen Zeitladen-Plan hinzufügen",onClick:T(u=>t.addChargeTemplateTimeChargingPlan(r.id),["stop"])},{default:a(()=>[l(h,{icon:["fas","plus"]})]),_:1},8,["onClick"])]),default:a(()=>[(r.time_charging.plans??[]).length==0?(d(),b(z,{key:0,subtype:"info"},{default:a(()=>[...e[89]||(e[89]=[i(" Es wurden noch keine Pläne für das Zeitladen angelegt. ",-1)])]),_:1})):s("",!0),(d(!0),g(F,null,q(r.time_charging.plans??[],(u,P)=>(d(),b(le,{key:P,"model-value":u,"template-id":r.id,"dc-charging-enabled":t.dcChargingEnabled,"onUpdate:modelValue":D=>n.updateState(o,D,`time_charging.plans.${P}`),onSendCommand:e[4]||(e[4]=D=>n.$emit("sendCommand",D))},null,8,["model-value","template-id","dc-charging-enabled","onUpdate:modelValue"]))),128))]),_:2},1536)]))]),_:2},1032,["title","collapsed"]))),128))]))]),_:1},8,["collapsed"]),l(ae,{"form-name":"vehicleConfigForm",onSave:e[5]||(e[5]=r=>n.$emit("save",n.mqttTopicsToPublish)),onReset:e[6]||(e[6]=r=>n.$emit("reset")),onDefaults:e[7]||(e[7]=r=>n.$emit("defaults"))})])])],64)}const wn=Z(Qe,[["render",_n],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/VehicleConfiguration.vue"]]),Sn=Object.freeze(Object.defineProperty({__proto__:null,default:wn},Symbol.toStringTag,{value:"Module"}));export{_e as V,wn as a,Sn as b}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vehicle-CueU6Sby.js","assets/vendor-BwGffBs-.js","assets/vendor-Cq9CCOuG.css","assets/vendor-fortawesome-DplTMxoa.js","assets/index-CE-5DBwq.js","assets/vendor-bootstrap-DxivtUnb.js","assets/vendor-jquery-CEMonh9Y.js","assets/vendor-bootstrap-BJ8HpIhY.css","assets/vendor-axios-C0vEeTtS.js","assets/index-xf6JJloS.css","assets/dynamic-import-helper-BheWnx7M.js","assets/vehicle-BJCG3IQ9.js","assets/vehicle-CECHBQbr.js","assets/vehicle-D6IYlEOk.js","assets/vehicle--gFlgBg9.js","assets/vehicle-DHrlYT3X.js","assets/vehicle-D-Y1XPzL.js","assets/vehicle-DBl5-B6E.js","assets/vehicle-ssdLmZa0.js","assets/vehicle-D79ErGmr.js","assets/SystemVersion-eCZ4XHiC.js","assets/vehicle-qZNjoXbf.js","assets/vehicle-B_OH6GMe.js","assets/vehicle-CU0ewb5h.js","assets/vehicle-BTDD_mpD.js","assets/vehicle-BWlLh3Ow.js","assets/vehicle-D6SkOafW.js","assets/vehicle-1foLpIDD.js","assets/vehicle-wpAWS7lm.js","assets/vehicle-tamLRu3G.js","assets/vehicle-BQhZ80iD.js","assets/vehicle-Ct8gNMK1.js"])))=>i.map(i=>d[i]); +import{F as O,l as N,ac as ie,ad as re,a4 as R,Z as I,G as j,H,ai as J,aj as G,aA as ue,aB as oe,at as $,ak as Y,al as Q,P as de,d as se,a6 as me,az as ge,Y as pe}from"./vendor-fortawesome-DplTMxoa.js";import{_ as V,C as X}from"./index-CE-5DBwq.js";import{_ as he}from"./dynamic-import-helper-BheWnx7M.js";import{_ as Z,m as c,l as d,f as g,z as b,u as a,B as i,J as w,q as l,y as m,a7 as ce,P as be,K as F,x as s,L as q,A as T,k as ee,D as x,O as fe}from"./vendor-BwGffBs-.js";const ve={props:{vehicleId:{required:!0,type:Number},vehicle:{required:!0,type:Object}},emits:["update:configuration"],methods:{updateConfiguration(n,e=void 0){this.$emit("update:configuration",{value:n,object:e})}}},_e=Z(ve,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/VehicleConfigMixin.vue"]]),we={name:"VehicleConfigFallback",mixins:[_e]},Ve={class:"vehicle-fallback"},ke={key:1};function ze(n,e,v,W,S,t){const y=c("openwb-base-alert"),h=c("openwb-base-textarea");return d(),g("div",Ve,[Object.keys(n.vehicle.configuration).length==0?(d(),b(y,{key:0,subtype:"info"},{default:a(()=>[i(' Der Fahrzeug-Typ "'+w(n.vehicle.type)+'" bietet keine Einstellungen. ',1)]),_:1})):(d(),g("div",ke,[l(y,{subtype:"warning"},{default:a(()=>[i(' Es wurde keine Konfigurationsseite für den Fahrzeug-Typ "'+w(n.vehicle.type)+'" gefunden. Die Einstellungen können als JSON direkt bearbeitet werden. ',1)]),_:1}),l(h,{title:"Konfiguration",subtype:"json","model-value":n.vehicle.configuration,"onUpdate:modelValue":e[0]||(e[0]=k=>n.updateConfiguration(k,"configuration"))},{help:a(()=>[...e[1]||(e[1]=[i(" Bitte prüfe, ob die Eingaben richtig interpretiert werden. ",-1)])]),_:1},8,["model-value"]),l(y,{subtype:"info"},{default:a(()=>[m("pre",null,w(JSON.stringify(n.vehicle.configuration,void 0,2)),1)]),_:1})]))])}const Ce=Z(we,[["render",ze],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/OpenwbVehicleConfigFallback.vue"]]);N.add(ie,re);const Se={name:"OpenwbVehicleProxy",components:{FontAwesomeIcon:O},props:{vehicleId:{type:Number,required:!0},vehicle:{type:Object,required:!0}},emits:["update:configuration"],methods:{getVehicleComponent(){return console.debug(`loading vehicle: ${this.vehicle.type}`),ce({loader:()=>he(Object.assign({"./bmw_cardata/vehicle.vue":()=>V(()=>import("./vehicle-CueU6Sby.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])),"./evcc/vehicle.vue":()=>V(()=>import("./vehicle-BJCG3IQ9.js"),__vite__mapDeps([11,1,2,3,4,5,6,7,8,9,10])),"./evnotify/vehicle.vue":()=>V(()=>import("./vehicle-CECHBQbr.js"),__vite__mapDeps([12,1,2,3,4,5,6,7,8,9,10])),"./homeassistant/vehicle.vue":()=>V(()=>import("./vehicle-D6IYlEOk.js"),__vite__mapDeps([13,1,2,3,4,5,6,7,8,9,10])),"./http/vehicle.vue":()=>V(()=>import("./vehicle--gFlgBg9.js"),__vite__mapDeps([14,1,2,3,4,5,6,7,8,9,10])),"./iobroker/vehicle.vue":()=>V(()=>import("./vehicle-DHrlYT3X.js"),__vite__mapDeps([15,1,2,3,4,5,6,7,8,9,10])),"./json/vehicle.vue":()=>V(()=>import("./vehicle-D-Y1XPzL.js"),__vite__mapDeps([16,1,2,3,4,5,6,7,8,9,10])),"./kia/vehicle.vue":()=>V(()=>import("./vehicle-DBl5-B6E.js"),__vite__mapDeps([17,1,2,3,4,5,6,7,8,9,10])),"./leaf/vehicle.vue":()=>V(()=>import("./vehicle-ssdLmZa0.js"),__vite__mapDeps([18,1,2,3,4,5,6,7,8,9,10])),"./manual/vehicle.vue":()=>V(()=>import("./vehicle-D79ErGmr.js"),__vite__mapDeps([19,20,1,2,3,4,5,6,7,8,9,10])),"./mercedeseq/vehicle.vue":()=>V(()=>import("./vehicle-qZNjoXbf.js"),__vite__mapDeps([21,1,2,3,4,5,6,7,8,9,10])),"./mqtt/vehicle.vue":()=>V(()=>import("./vehicle-B_OH6GMe.js"),__vite__mapDeps([22,1,2,3,4,5,6,7,8,9,10])),"./myskoda/vehicle.vue":()=>V(()=>import("./vehicle-CU0ewb5h.js"),__vite__mapDeps([23,1,2,3,4,5,6,7,8,9,10])),"./ovms/vehicle.vue":()=>V(()=>import("./vehicle-BTDD_mpD.js"),__vite__mapDeps([24,20,1,2,3,4,5,6,7,8,9,10])),"./porsche/vehicle.vue":()=>V(()=>import("./vehicle-BWlLh3Ow.js"),__vite__mapDeps([25,1,2,3,4,5,6,7,8,9,10])),"./psacc/vehicle.vue":()=>V(()=>import("./vehicle-D6SkOafW.js"),__vite__mapDeps([26,1,2,3,4,5,6,7,8,9,10])),"./renault/vehicle.vue":()=>V(()=>import("./vehicle-1foLpIDD.js"),__vite__mapDeps([27,1,2,3,4,5,6,7,8,9,10])),"./smarthello/vehicle.vue":()=>V(()=>import("./vehicle-wpAWS7lm.js"),__vite__mapDeps([28,1,2,3,4,5,6,7,8,9,10])),"./tesla/vehicle.vue":()=>V(()=>import("./vehicle-tamLRu3G.js"),__vite__mapDeps([29,4,1,2,3,5,6,7,8,9,10])),"./tronity/vehicle.vue":()=>V(()=>import("./vehicle-BQhZ80iD.js"),__vite__mapDeps([30,1,2,3,4,5,6,7,8,9,10])),"./vweuda/vehicle.vue":()=>V(()=>import("./vehicle-Ct8gNMK1.js"),__vite__mapDeps([31,1,2,3,4,5,6,7,8,9,10]))}),`./${this.vehicle.type}/vehicle.vue`,3),errorComponent:Ce})},updateConfiguration(n){this.$emit("update:configuration",n)}}};function ye(n,e,v,W,S,t){const y=c("font-awesome-icon"),h=c("openwb-base-alert"),k=c("openwb-base-heading");return d(),g(F,null,[v.vehicle.official?(d(),b(h,{key:0,subtype:"info"},{default:a(()=>[l(y,{icon:["fas","certificate"]}),i(' Das ausgewählte Fahrzeug-Modul "'+w(v.vehicle.name)+'" wird von openWB gepflegt. ',1)]),_:1})):(d(),b(h,{key:1,subtype:"info"},{default:a(()=>[l(y,{icon:["fas","people-group"]}),i(' Das ausgewählte Fahrzeug-Modul "'+w(v.vehicle.name)+'" wird in unserer Community gepflegt. Rückfragen oder Probleme bitte im Forum diskutieren. ',1)]),_:1})),l(k,null,{default:a(()=>[i(' Einstellungen für SoC-Modul "'+w(v.vehicle.name)+'" ',1)]),_:1}),(d(),b(be(t.getVehicleComponent()),{"vehicle-id":v.vehicleId,vehicle:v.vehicle,"onUpdate:configuration":e[0]||(e[0]=z=>t.updateConfiguration(z))},null,40,["vehicle-id","vehicle"]))],64)}const Ee=Z(Se,[["render",ye],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/OpenwbVehicleProxy.vue"]]);N.add(R,I,j,H,J,G,ue,oe,$,Y,Q);const Ue={name:"VehicleScheduledChargingPlan",components:{FontAwesomeIcon:O},mixins:[X],props:{modelValue:{type:Object,required:!0},templateId:{type:Number,required:!0},dcChargingEnabled:{type:Boolean,default:!1}},emits:["update:modelValue","sendCommand"],data(){return{mqttTopics:[{topic:"openWB/optional/ep/configured",writeable:!1}],showRemoveModal:!1}},computed:{plan(){return this.modelValue}},watch:{plan:{handler(n){this.$emit("update:modelValue",n)},deep:!0}},methods:{copyPlan(){this.$emit("sendCommand",{command:"addChargeTemplateSchedulePlan",data:{template:this.templateId,changed_in_theme:!1,copy:this.modelValue.id}})},removePlanModal(){this.showRemoveModal=!0},removePlan(n){this.showRemoveModal=!1,n=="confirm"&&this.$emit("sendCommand",{command:"removeChargeTemplateSchedulePlan",data:{template:this.templateId,plan:this.modelValue.id,changed_in_theme:!1}})}}},Le={key:0},Pe={key:1},Ae={key:2},We={key:3},Be={key:4},Fe={key:5},Me={key:1},Te={key:1},De={key:7};function qe(n,e,v,W,S,t){const y=c("openwb-base-modal-dialog"),h=c("font-awesome-icon"),k=c("openwb-base-avatar"),z=c("openwb-base-text-input"),E=c("openwb-base-button-group-input"),L=c("openwb-base-range-input"),M=c("openwb-base-number-input"),U=c("openwb-base-alert"),f=c("openwb-base-card");return d(),g(F,null,[l(y,{show:S.showRemoveModal,title:"Zielladen Zeitplan löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:t.removePlan},{default:a(()=>[i(' Willst Du den Zielladen Zeitplan "'+w(t.plan.name)+'" wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ',1)]),_:1},8,["show","onModalResult"]),l(f,{title:t.plan.name,collapsible:!0,collapsed:!0},{actions:a(p=>[p.collapsed==!0?(d(),g("span",{key:0,class:ee(["pill clickable",t.plan.active?"bg-success":"bg-danger"]),onClick:e[0]||(e[0]=T(_=>t.plan.active=!t.plan.active,["stop"]))},[t.plan.limit.selected=="soc"?(d(),g("span",Le,[l(h,{icon:["fas","car-battery"]}),i(" "+w(t.plan.limit.soc_scheduled)+"% ",1),l(h,{icon:["fas",t.plan.bidi_charging_enabled?"right-left":"right-long"]},null,8,["icon"]),i(" "+w(t.plan.limit.soc_limit)+"% ",1)])):s("",!0),t.plan.limit.selected=="amount"?(d(),g("span",Pe,[l(h,{icon:["fas","bolt"]}),i(" "+w(t.plan.limit.amount/1e3)+"kWh ",1)])):s("",!0),l(h,{icon:["fas","clock"]}),i(" "+w(t.plan.time)+" ",1),t.plan.frequency.selected=="once"?(d(),g("span",Ae,[l(h,{icon:["fas","calendar-day"]}),i(" "+w(n.formatDate(t.plan.frequency.once)),1)])):s("",!0),t.plan.frequency.selected=="daily"?(d(),g("span",We,[l(h,{icon:["fas","calendar-week"]})])):s("",!0),t.plan.frequency.selected=="weekly"?(d(),g("span",Be,[l(h,{icon:["fas","calendar-alt"]})])):s("",!0),t.plan.et_active?(d(),g("span",Fe,[l(h,{icon:["fas","coins"]})])):s("",!0)],2)):s("",!0),p.collapsed==!1?(d(),g("span",Me,[l(k,{class:"bg-success clickable ml-1",title:"Zielladen-Plan duplizieren",onClick:e[1]||(e[1]=T(_=>t.copyPlan(),["stop"]))},{default:a(()=>[l(h,{icon:["fas","copy"]})]),_:1}),l(k,{class:"bg-danger clickable ml-1",title:"Zielladen-Plan löschen",onClick:e[2]||(e[2]=T(_=>t.removePlanModal(),["stop"]))},{default:a(()=>[l(h,{icon:["fas","trash"]})]),_:1})])):s("",!0)]),default:a(()=>[l(z,{modelValue:t.plan.name,"onUpdate:modelValue":e[3]||(e[3]=p=>t.plan.name=p),title:"Bezeichnung"},null,8,["modelValue"]),l(E,{modelValue:t.plan.active,"onUpdate:modelValue":e[4]||(e[4]=p=>t.plan.active=p),title:"Zeitpunkt aktiv",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}]},null,8,["modelValue"]),l(z,{modelValue:t.plan.time,"onUpdate:modelValue":e[5]||(e[5]=p=>t.plan.time=p),title:"Ziel-Termin",subtype:"time"},{help:a(()=>[...e[18]||(e[18]=[i(" Hier ist die gewünschte Uhrzeit einzustellen, zu welcher das Fahrzeug den gewünschten SoC bzw. die zu ladende Energiemenge BEREITS ERREICHT haben soll. ",-1)])]),_:1},8,["modelValue"]),l(E,{modelValue:t.plan.frequency.selected,"onUpdate:modelValue":e[6]||(e[6]=p=>t.plan.frequency.selected=p),title:"Wiederholungen",buttons:[{buttonValue:"once",text:"Einmalig",class:"btn-outline-info"},{buttonValue:"daily",text:"Täglich",class:"btn-outline-info"},{buttonValue:"weekly",text:"Wöchentlich",class:"btn-outline-info"}]},null,8,["modelValue"]),t.plan.frequency.selected=="once"?(d(),b(z,{key:0,modelValue:t.plan.frequency.once,"onUpdate:modelValue":e[7]||(e[7]=p=>t.plan.frequency.once=p),title:"Datum",subtype:"date"},null,8,["modelValue"])):s("",!0),t.plan.frequency.selected=="weekly"?(d(),g("div",Te,[(d(!0),g(F,null,q(n.weekdays,(p,_)=>(d(),b(E,{key:_,modelValue:t.plan.frequency.weekly[_],"onUpdate:modelValue":C=>t.plan.frequency.weekly[_]=C,title:p,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}]},null,8,["modelValue","onUpdate:modelValue","title"]))),128))])):s("",!0),e[30]||(e[30]=m("hr",null,null,-1)),l(L,{modelValue:t.plan.current,"onUpdate:modelValue":e[8]||(e[8]=p=>t.plan.current=p),title:`Ladestrom${v.dcChargingEnabled?" (AC)":""}`,min:6,max:32,step:1,unit:"A"},{help:a(()=>[...e[19]||(e[19]=[i(" Mit dieser Stromstärke wird der Zeitpunkt berechnet, wann die Ladung mit Netzbezug gestartet werden muss. Wird der Ziel-SoC nicht zum angegebenen Termin erreicht, weil z.B. das Auto erst später angesteckt wurde, wird auch mit einer höheren Stromstärke geladen. Um etwas Puffer zu haben, empfiehlt es sich, etwas weniger als die Maximalstromstärke des Fahrzeugs zu wählen. ",-1)])]),_:1},8,["modelValue","title"]),v.dcChargingEnabled===!0?(d(),b(M,{key:2,title:"Ladeleistung (DC)",unit:"kW",min:0,"model-value":n.ac_current2dc_power(t.plan.dc_current),"onUpdate:modelValue":e[9]||(e[9]=p=>t.plan.dc_current=n.dc_power2ac_current(p))},null,8,["model-value"])):s("",!0),l(E,{modelValue:t.plan.phases_to_use,"onUpdate:modelValue":e[10]||(e[10]=p=>t.plan.phases_to_use=p),title:"Anzahl Phasen Zielladen",buttons:[{buttonValue:1,text:"1"},{buttonValue:3,text:"Maximum"},{buttonValue:0,text:"Automatik"}]},{help:a(()=>[...e[20]||(e[20]=[i(' Hier kann eingestellt werden, ob Ladevorgänge im Modus "Zielladen" mit nur einer Phase oder dem möglichen Maximum in Abhängigkeit der "Ladepunkt"- und "Fahrzeug"-Einstellungen durchgeführt werden. Im Modus "Automatik" entscheidet die Regelung, welche Einstellung genutzt wird, um das Ziel zu erreichen. Voraussetzung ist die verbaute Umschaltmöglichkeit zwischen 1- und 3-phasig (sog. 1p3p). ',-1)])]),_:1},8,["modelValue"]),l(E,{modelValue:t.plan.phases_to_use_pv,"onUpdate:modelValue":e[11]||(e[11]=p=>t.plan.phases_to_use_pv=p),title:"Anzahl Phasen bei PV-Überschuss",buttons:[{buttonValue:1,text:"1"},{buttonValue:3,text:"Maximum"},{buttonValue:0,text:"Automatik"}]},{help:a(()=>[...e[21]||(e[21]=[i(' Hier kann eingestellt werden, ob Ladevorgänge im Modus "Zielladen" bei Laden mit PV-Überschuss mit nur einer Phase oder dem möglichen Maximum in Abhängigkeit der "Ladepunkt"- und "Fahrzeug"-Einstellungen durchgeführt werden. Im Modus "Automatik" entscheidet die Regelung, welche Einstellung genutzt wird, um das Ziel zu erreichen. Voraussetzung ist die verbaute Umschaltmöglichkeit zwischen 1- und 3-phasig (sog. 1p3p). ',-1)])]),_:1},8,["modelValue"]),e[31]||(e[31]=m("hr",null,null,-1)),l(E,{modelValue:t.plan.limit.selected,"onUpdate:modelValue":e[12]||(e[12]=p=>t.plan.limit.selected=p),title:"Ziel",buttons:[{buttonValue:"soc",text:"Fahrzeug-SoC"},{buttonValue:"amount",text:"Energie"}]},{help:a(()=>[...e[22]||(e[22]=[i(" Bestimmt die Art der Grenze für den Ladevorgang. ",-1)])]),_:1},8,["modelValue"]),t.plan.limit.selected=="soc"?(d(),b(L,{key:3,modelValue:t.plan.limit.soc_scheduled,"onUpdate:modelValue":e[13]||(e[13]=p=>t.plan.limit.soc_scheduled=p),title:"Fahrzeug-SoC zum Zielzeitpunkt",min:5,max:100,step:5,unit:"%"},{help:a(()=>[...e[23]||(e[23]=[i(" SoC, der zum angegebenen Zeitpunkt erreicht werden soll (Ziel-SoC). ",-1)])]),_:1},8,["modelValue"])):s("",!0),t.plan.limit.selected=="soc"?(d(),b(L,{key:4,modelValue:t.plan.limit.soc_limit,"onUpdate:modelValue":e[14]||(e[14]=p=>t.plan.limit.soc_limit=p),title:"Fahrzeug-SoC mit Überschuss",min:5,max:100,step:5,unit:"%"},{help:a(()=>[...e[24]||(e[24]=[i(" Nach Erreichen des Ziel-SoCs wird mit Überschuss weiter geladen, bis das SoC-Limit erreicht wird. Sobald das SoC-Limit erreicht wurde, findet keine Ladung mehr mit Überschuss statt! ",-1)])]),_:1},8,["modelValue"])):s("",!0),t.plan.limit.selected=="amount"?(d(),b(M,{key:5,title:"Ziel-Energie",unit:"kWh",min:1,step:.5,"model-value":t.plan.limit.amount/1e3,"onUpdate:modelValue":e[15]||(e[15]=p=>t.plan.limit.amount=p*1e3)},{help:a(()=>[...e[25]||(e[25]=[i(" Die geladene Energiemenge wird beim Wechsel des Lademodus, Wechsel des Plans oder nach dem Anstecken, wenn Zielladen schon ausgewählt ist, neu gezählt. ",-1)])]),_:1},8,["model-value"])):s("",!0),e[32]||(e[32]=m("hr",null,null,-1)),l(E,{modelValue:t.plan.et_active,"onUpdate:modelValue":e[16]||(e[16]=p=>t.plan.et_active=p),title:"Strompreisbasiert Laden",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}]},null,8,["modelValue"]),t.plan.et_active==!0&&!n.$store.state.mqtt["openWB/optional/ep/configured"]?(d(),b(U,{key:6,subtype:"danger"},{default:a(()=>[...e[26]||(e[26]=[i(" Bitte in den übergreifenden Ladeeinstellungen einen Strompreis-Anbieter konfigurieren. ",-1)])]),_:1})):s("",!0),t.plan.limit.selected=="soc"?(d(),g("div",De,[e[29]||(e[29]=m("hr",null,null,-1)),l(E,{modelValue:t.plan.bidi_charging_enabled,"onUpdate:modelValue":e[17]||(e[17]=p=>t.plan.bidi_charging_enabled=p),title:"Bidirektionales Überschussladen bei kompatiblem Ladepunkt&Fahrzeug",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}]},{help:a(()=>[...e[27]||(e[27]=[i(" Wenn Ladepunkt und Fahrzeug bidirektionales Laden unterstützen, wird bis zum Fahrzug-SoC zum Zielzeitpunkt wie gewohnt mit Zielladen geladen. Ist der eingestellte SoC erreicht, wird eine Nullpunktausregelung gemacht, dh das Auto wird so ge- und entladen, dass möglichst weder Bezug noch Einspeisung entsteht. Der SoC wird dabei immer zwischen Fahrzeug-SoC zum Zielzeitpunkt und Fahrzeug-SoC mit Überschuss gehalten. ",-1),m("br",null,null,-1),i(" Unterstützen das Fahrzeug und/oder der Ladepunkt kein bidirektionales Laden, hat diese Einstellung keine Auswirkung. ",-1)])]),_:1},8,["modelValue"]),t.plan.bidi_charging_enabled===!0?(d(),b(U,{key:0,subtype:"info"},{default:a(()=>[...e[28]||(e[28]=[i(" Die Norm IEC 61851-1 und ISO 15118 benötigen als Parameter eine Stromstärke und die Phasenzahl. Die Norm ISO 15118-20, die das bidirektionale Laden definiert, benötigt als Parameter eine Ladeleistung. Die Phasenzahl legt das Fahrzeug fest. Wenn Fahrzeug und Ladepunkt bidirektionales Laden nach ISO 15118-20 unterstützen, wird die eingestellte Ladeleistung verwendet. Unterstützen das Fahrzeug und/oder der Ladepunkt die Norm nicht, wird der Ladestrom und die vorgegebene Phasenzahl angewendet. ",-1)])]),_:1})):s("",!0)])):s("",!0)]),_:1},8,["title"])],64)}const Ze=Z(Ue,[["render",qe],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/ChargeTemplateScheduledChargingPlan.vue"]]);N.add(R,I,j,H,J,G,Y,Q);const xe={name:"ChargeTemplateTimeChargingPlan",components:{FontAwesomeIcon:O},mixins:[X],props:{modelValue:{type:Object,required:!0},templateId:{type:Number,required:!0},dcChargingEnabled:{type:Boolean,default:!1}},emits:["update:modelValue","sendCommand"],data(){return{mqttTopics:[{topic:"openWB/optional/dc_charging",writeable:!1}],showRemoveModal:!1}},computed:{plan(){return this.modelValue}},watch:{plan:{handler(n){this.$emit("update:modelValue",n)},deep:!0}},methods:{copyPlan(){this.$emit("sendCommand",{command:"addChargeTemplateTimeChargingPlan",data:{template:this.templateId,changed_in_theme:!1,copy:this.modelValue.id}})},removePlanModal(){this.showRemoveModal=!0},removePlan(n){this.showRemoveModal=!1,n=="confirm"&&this.$emit("sendCommand",{command:"removeChargeTemplateTimeChargingPlan",data:{template:this.templateId,plan:this.modelValue.id,changed_in_theme:!1}})}}},Oe={key:0},Ne={key:1},Re={key:2},Ie={key:3},je={key:4},He={key:1},Je={key:2};function Ge(n,e,v,W,S,t){const y=c("openwb-base-modal-dialog"),h=c("font-awesome-icon"),k=c("openwb-base-avatar"),z=c("openwb-base-text-input"),E=c("openwb-base-button-group-input"),L=c("openwb-base-range-input"),M=c("openwb-base-number-input"),U=c("openwb-base-card");return d(),g(F,null,[l(y,{show:S.showRemoveModal,title:"Zeitladen Zeitplan löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:t.removePlan},{default:a(()=>[i(' Willst Du den Zeitladen Zeitplan "'+w(t.plan.name)+'" wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ',1)]),_:1},8,["show","onModalResult"]),l(U,{title:t.plan.name,collapsible:!0,collapsed:!0},{actions:a(f=>[f.collapsed==!0?(d(),g("span",{key:0,class:ee(["pill clickable",t.plan.active?"bg-success":"bg-danger"]),onClick:e[0]||(e[0]=T(p=>t.plan.active=!t.plan.active,["stop"]))},[t.plan.limit.selected=="soc"?(d(),g("span",Oe,[l(h,{icon:["fas","car-battery"]}),i(" "+w(t.plan.limit.soc)+"% ",1)])):s("",!0),t.plan.limit.selected=="amount"?(d(),g("span",Ne,[l(h,{icon:["fas","bolt"]}),i(" "+w(t.plan.limit.amount/1e3)+"kWh ",1)])):s("",!0),l(h,{icon:["fas","clock"]}),i(" "+w(t.plan.time[0])+" - "+w(t.plan.time[1])+" ",1),t.plan.frequency.selected=="once"?(d(),g("span",Re,[l(h,{icon:["fas","calendar-day"]}),i(" "+w(n.formatDate(t.plan.frequency.once[0])==n.formatDate(t.plan.frequency.once[1])?n.formatDate(t.plan.frequency.once[0]):n.formatDate(t.plan.frequency.once[0])+" - "+n.formatDate(t.plan.frequency.once[1])),1)])):s("",!0),t.plan.frequency.selected=="daily"?(d(),g("span",Ie,[l(h,{icon:["fas","calendar-week"]})])):s("",!0),t.plan.frequency.selected=="weekly"?(d(),g("span",je,[l(h,{icon:["fas","calendar-alt"]})])):s("",!0)],2)):s("",!0),f.collapsed==!1?(d(),g("span",He,[l(k,{class:"bg-success clickable",title:"Zeitladen-Plan duplizieren",onClick:e[1]||(e[1]=T(p=>t.copyPlan(),["stop"]))},{default:a(()=>[l(h,{icon:["fas","copy"]})]),_:1}),l(k,{class:"bg-danger clickable ml-1",title:"Zeitladen-Plan löschen",onClick:e[2]||(e[2]=T(p=>t.removePlanModal(),["stop"]))},{default:a(()=>[l(h,{icon:["fas","trash"]})]),_:1})])):s("",!0)]),default:a(()=>[l(z,{modelValue:t.plan.name,"onUpdate:modelValue":e[3]||(e[3]=f=>t.plan.name=f),title:"Bezeichnung"},null,8,["modelValue"]),l(E,{modelValue:t.plan.active,"onUpdate:modelValue":e[4]||(e[4]=f=>t.plan.active=f),title:"Zeitplan aktiv",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}]},null,8,["modelValue"]),l(z,{modelValue:t.plan.time[0],"onUpdate:modelValue":e[5]||(e[5]=f=>t.plan.time[0]=f),title:"Zeitpunkt des Ladebeginns",subtype:"time"},null,8,["modelValue"]),l(z,{modelValue:t.plan.time[1],"onUpdate:modelValue":e[6]||(e[6]=f=>t.plan.time[1]=f),title:"Zeitpunkt des Ladeendes",subtype:"time"},null,8,["modelValue"]),l(E,{modelValue:t.plan.frequency.selected,"onUpdate:modelValue":e[7]||(e[7]=f=>t.plan.frequency.selected=f),title:"Wiederholungen",buttons:[{buttonValue:"once",text:"Einmalig",class:"btn-outline-info"},{buttonValue:"daily",text:"Täglich",class:"btn-outline-info"},{buttonValue:"weekly",text:"Wöchentlich",class:"btn-outline-info"}]},null,8,["modelValue"]),t.plan.frequency.selected=="once"?(d(),b(z,{key:0,modelValue:t.plan.frequency.once[0],"onUpdate:modelValue":e[8]||(e[8]=f=>t.plan.frequency.once[0]=f),title:"Gültig ab",subtype:"date"},null,8,["modelValue"])):s("",!0),t.plan.frequency.selected=="once"?(d(),b(z,{key:1,modelValue:t.plan.frequency.once[1],"onUpdate:modelValue":e[9]||(e[9]=f=>t.plan.frequency.once[1]=f),title:"Gültig bis",subtype:"date",min:t.plan.frequency.once[0]},null,8,["modelValue","min"])):s("",!0),t.plan.frequency.selected=="weekly"?(d(),g("div",Je,[(d(!0),g(F,null,q(n.weekdays,(f,p)=>(d(),b(E,{key:p,modelValue:t.plan.frequency.weekly[p],"onUpdate:modelValue":_=>t.plan.frequency.weekly[p]=_,title:f,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}]},null,8,["modelValue","onUpdate:modelValue","title"]))),128))])):s("",!0),e[22]||(e[22]=m("hr",null,null,-1)),l(L,{modelValue:t.plan.current,"onUpdate:modelValue":e[10]||(e[10]=f=>t.plan.current=f),title:`Ladestrom${v.dcChargingEnabled?" (AC)":""}`,min:6,max:32,step:1,unit:"A"},null,8,["modelValue","title"]),v.dcChargingEnabled===!0?(d(),b(M,{key:3,title:"Ladeleistung (DC)",unit:"kW",min:0,"model-value":n.ac_current2dc_power(t.plan.dc_current),"onUpdate:modelValue":e[11]||(e[11]=f=>t.plan.dc_current=n.dc_power2ac_current(f))},null,8,["model-value"])):s("",!0),l(E,{modelValue:t.plan.phases_to_use,"onUpdate:modelValue":e[12]||(e[12]=f=>t.plan.phases_to_use=f),title:"Anzahl Phasen",buttons:[{buttonValue:1,text:"1"},{buttonValue:3,text:"Maximum"}]},{help:a(()=>[...e[17]||(e[17]=[i(' Hier kann eingestellt werden, ob Ladevorgänge mit einer Phase oder dem möglichen Maximum in Abhängigkeit der "Ladepunkt"- und "Fahrzeug"-Einstellungen durchgeführt werden. Voraussetzung ist die verbaute Umschaltmöglichkeit zwischen 1- und 3-phasig (sog. 1p3p). ',-1)])]),_:1},8,["modelValue"]),e[23]||(e[23]=m("hr",null,null,-1)),l(E,{modelValue:t.plan.limit.selected,"onUpdate:modelValue":e[13]||(e[13]=f=>t.plan.limit.selected=f),title:"Begrenzung",buttons:[{buttonValue:"none",text:"Keine"},{buttonValue:"soc",text:"Fahrzeug-SoC"},{buttonValue:"amount",text:"Energie"}]},{help:a(()=>[...e[18]||(e[18]=[i(" Bestimmt die Art der Grenze für den Ladevorgang. ",-1)])]),_:1},8,["modelValue"]),l(L,{modelValue:t.plan.limit.soc,"onUpdate:modelValue":e[14]||(e[14]=f=>t.plan.limit.soc=f),title:"SoC-Limit für das Fahrzeug",min:5,max:100,step:5,unit:"%"},{help:a(()=>[...e[19]||(e[19]=[i(" Ladestand des Akku (State of Charge, SoC), bis zu welchem maximal geladen werden soll. ",-1)])]),_:1},8,["modelValue"]),l(M,{title:"Energie-Limit",unit:"kWh",min:1,step:.5,"model-value":t.plan.limit.amount/1e3,"onUpdate:modelValue":e[15]||(e[15]=f=>t.plan.limit.amount=f*1e3)},{help:a(()=>[...e[20]||(e[20]=[i(" Maximal zu ladende Energie innerhalb des Zeitfensters. Eignet sich immer dann wenn kein SoC zur Verfügung steht. Die geladene Energiemenge wird beim Wechsel des Lademodus, Wechsel des Plans oder nach dem Anstecken, wenn Zeitladen schon aktiv ist, neu gezählt. ",-1)])]),_:1},8,["model-value"]),e[24]||(e[24]=m("hr",null,null,-1)),l(L,{modelValue:t.plan.min_bat_soc,"onUpdate:modelValue":e[16]||(e[16]=f=>t.plan.min_bat_soc=f),title:"Zeitladen bis Speicher entladen auf",min:0,max:19,step:1,unit:"%",labels:[{label:"0",value:0},{label:5,value:5},{label:10,value:10},{label:15,value:15},{label:20,value:20},{label:25,value:25},{label:30,value:30},{label:35,value:35},{label:40,value:40},{label:45,value:45},{label:50,value:50},{label:55,value:55},{label:60,value:60},{label:65,value:65},{label:70,value:70},{label:75,value:75},{label:80,value:80},{label:85,value:85},{label:90,value:90},{label:95,value:95},{label:"Aus",value:null}]},{help:a(()=>[...e[21]||(e[21]=[i(" Zeitladen wird nur aktiviert, wenn der SoC des Hausspeichers über dem hier eingestellten SoC liegt. Lädt die aktive Speichersteuerung gerade aktive den Speicher, wird kein Zeitladen gestartet. Da der Speicher nicht gleichzeitig aktiv geladen und vom Fahrzeug entladen werden kann. ",-1)])]),_:1},8,["modelValue"])]),_:1},8,["title"])],64)}const Ye=Z(xe,[["render",Ge],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/ChargeTemplateTimeChargingPlan.vue"]]);N.add(se,Q,H,G,J,j,R,I,me,ge,pe,$,Y);const Qe={name:"OpenwbVehicleConfigView",components:{FontAwesomeIcon:O,FontAwesomeLayers:de,OpenwbVehicleProxy:Ee,ChargeTemplateScheduledChargingPlan:Ze,ChargeTemplateTimeChargingPlan:Ye},mixins:[X],props:{installAssistantActive:{type:Boolean,required:!1,default:!1}},emits:["sendCommand","save","reset","defaults"],data(){return{mqttTopics:[{topic:"openWB/general/extern",writeable:!1},{topic:"openWB/optional/dc_charging",writeable:!1},{topic:"openWB/optional/ep/configured",writeable:!1},{topic:"openWB/optional/rfid/active",writeable:!1},{topic:"openWB/system/configurable/soc_modules",writeable:!1},{topic:"openWB/vehicle/+/charge_template",writeable:!0},{topic:"openWB/vehicle/+/color",writeable:!0},{topic:"openWB/vehicle/+/ev_template",writeable:!0},{topic:"openWB/vehicle/+/info",writeable:!0},{topic:"openWB/vehicle/+/name",writeable:!0},{topic:"openWB/vehicle/+/soc_module/config",writeable:!0},{topic:"openWB/vehicle/+/soc_module/general_config",writeable:!0},{topic:"openWB/vehicle/+/tag_id",writeable:!0},{topic:"openWB/vehicle/template/charge_template/+",writeable:!0},{topic:"openWB/vehicle/template/ev_template/+",writeable:!0}],showVehicleModal:!1,modalVehicleIndex:void 0,showEvTemplateModal:!1,modalEvTemplateIndex:void 0,showChargeTemplateModal:!1,modalChargeTemplateIndex:void 0}},computed:{dcChargingEnabled:{get(){return this.$store.state.mqtt["openWB/optional/dc_charging"]}},vehicleIndexes:{get(){return this.getWildcardIndexList("openWB/vehicle/+/info")}},evTemplates(){const n=this.getWildcardTopics("openWB/vehicle/template/ev_template/+");return Object.fromEntries(Object.entries(n).filter(([,e])=>e&&typeof e=="object"))},evTemplateList:{get(){let n=[];return Object.keys(this.evTemplates).forEach(e=>{let v=parseInt(e.match(/([0-9]+)$/g)[0]),W=this.$store.state.mqtt["openWB/vehicle/template/ev_template/"+v].name;n.push({value:v,text:W})}),n}},chargeTemplates(){const n=this.getWildcardTopics("openWB/vehicle/template/charge_template/+");return Object.fromEntries(Object.entries(n).filter(([,e])=>e&&typeof e=="object"))},chargeTemplateList:{get(){let n=[];return Object.keys(this.chargeTemplates).forEach(e=>{let v=parseInt(e.match(/([0-9]+)$/g)[0]),W=this.$store.state.mqtt["openWB/vehicle/template/charge_template/"+v].name;n.push({value:v,text:W})}),n}},socModuleList:{get(){return this.$store.state.mqtt["openWB/system/configurable/soc_modules"]}}},methods:{updateConfiguration(n,e){console.debug("updateConfiguration",n,e),this.updateState(n,e.value,e.object)},addVehicle(n){n.stopPropagation(),this.$emit("sendCommand",{command:"addVehicle",data:{}})},removeVehicleModal(n,e){n.stopPropagation(),this.modalVehicleIndex=e,this.showVehicleModal=!0},removeVehicle(n,e){this.showVehicleModal=!1,n=="confirm"&&this.$emit("sendCommand",{command:"removeVehicle",data:{id:e}})},getVehicleName(n){return this.$store.state.mqtt["openWB/vehicle/"+n+"/name"]?this.$store.state.mqtt["openWB/vehicle/"+n+"/name"]:"Fahrzeug "+n},getSocDefaultConfiguration(n){const e=this.socModuleList.find(v=>v.value==n);return Object.prototype.hasOwnProperty.call(e,"defaults")?{...JSON.parse(JSON.stringify(e.defaults))}:(console.warn("no default configuration found for soc type!",n),{})},updateSelectedSocModule(n,e){this.updateState("openWB/vehicle/"+n+"/soc_module/config",e,"type"),this.updateState("openWB/vehicle/"+n+"/soc_module/config",this.getSocDefaultConfiguration(e))},addEvTemplate(n,e){n.stopPropagation();let v={};e&&e.match(/([^/]+)$/)&&(v.copy=parseInt(e.match(/([^/]+)$/)[0])),this.$emit("sendCommand",{command:"addEvTemplate",data:v})},removeEvTemplateModal(n,e){n.stopPropagation(),this.modalEvTemplateIndex=parseInt(e.match(/([^/]+)$/)[0]),this.showEvTemplateModal=!0},removeEvTemplate(n,e){this.showEvTemplateModal=!1,n=="confirm"&&this.$emit("sendCommand",{command:"removeEvTemplate",data:{id:e}})},getEvTemplateName(n){return this.$store.state.mqtt["openWB/vehicle/template/ev_template/"+n]?this.$store.state.mqtt["openWB/vehicle/template/ev_template/"+n].name:"Fahrzeug-Profil "+n},addChargeTemplate(n,e){n.stopPropagation();let v={};e&&e.match(/([^/]+)$/)&&(v.copy=parseInt(e.match(/([^/]+)$/)[0])),this.$emit("sendCommand",{command:"addChargeTemplate",data:v})},removeChargeTemplateModal(n,e){this.modalChargeTemplateIndex=e,this.showChargeTemplateModal=!0},removeChargeTemplate(n,e){this.showChargeTemplateModal=!1,n=="confirm"&&this.$emit("sendCommand",{command:"removeChargeTemplate",data:{id:e}})},getChargeTemplateName(n){return this.$store.state.mqtt["openWB/vehicle/template/charge_template/"+n]?this.$store.state.mqtt["openWB/vehicle/template/charge_template/"+n].name:"Lade-Profil "+n},addChargeTemplateSchedulePlan(n){this.$emit("sendCommand",{command:"addChargeTemplateSchedulePlan",data:{template:n,changed_in_theme:!1}})},addChargeTemplateTimeChargingPlan(n){this.$emit("sendCommand",{command:"addChargeTemplateTimeChargingPlan",data:{template:n,changed_in_theme:!1}})},openActiveChargeModeCard(n,e){this.$nextTick(()=>{["instant_charging","pv_charging","eco_charging","scheduled_charging"].forEach(W=>{const S=`card-${n}-${W}`,t=this.$refs[S],y=Array.isArray(t)?t[0]:t;y&&(y.isCollapsed=W!==e)})})}}},Xe={class:"vehicleConfig"},Ke={name:"vehicleConfigForm"},$e={key:0},en={key:1},nn={key:2},tn={key:0},ln={key:0},an={key:1},rn={key:1},un={key:3},on={key:0},dn={key:1},sn={key:0},mn={key:1},gn={key:0},pn={key:0},hn={key:4},cn={key:0},bn={key:1},fn={key:0},vn={key:1};function _n(n,e,v,W,S,t){const y=c("openwb-base-modal-dialog"),h=c("font-awesome-icon"),k=c("openwb-base-avatar"),z=c("openwb-base-alert"),E=c("openwb-base-color-picker"),L=c("openwb-base-text-input"),M=c("openwb-base-select-input"),U=c("openwb-base-heading"),f=c("router-link"),p=c("openwb-base-array-input"),_=c("openwb-base-button-group-input"),C=c("openwb-base-number-input"),ne=c("openwb-vehicle-proxy"),B=c("openwb-base-card"),K=c("font-awesome-layers"),A=c("openwb-base-range-input"),te=c("charge-template-scheduled-charging-plan"),le=c("charge-template-time-charging-plan"),ae=c("openwb-base-submit-buttons");return d(),g(F,null,[l(y,{show:S.showVehicleModal,title:"Fahrzeug löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:e[0]||(e[0]=r=>t.removeVehicle(r,S.modalVehicleIndex))},{default:a(()=>[i(' Willst Du das Fahrzeug "'+w(t.getVehicleName(S.modalVehicleIndex))+'" wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ',1)]),_:1},8,["show"]),l(y,{show:S.showEvTemplateModal,title:"Fahrzeug-Profil löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:e[1]||(e[1]=r=>t.removeEvTemplate(r,S.modalEvTemplateIndex))},{default:a(()=>[i(' Willst Du das Fahrzeug-Profil "'+w(t.getEvTemplateName(S.modalEvTemplateIndex))+'" wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ',1)]),_:1},8,["show"]),l(y,{show:S.showChargeTemplateModal,title:"Lade-Profil löschen",subtype:"danger",buttons:[{text:"Löschen",event:"confirm",subtype:"danger"}],onModalResult:e[2]||(e[2]=r=>t.removeChargeTemplate(r,S.modalChargeTemplateIndex))},{default:a(()=>[i(' Willst Du das Lade-Profil "'+w(t.getChargeTemplateName(S.modalChargeTemplateIndex))+'" wirklich entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden! ',1)]),_:1},8,["show"]),m("div",Xe,[m("form",Ke,[l(B,{subtype:"info",collapsible:!0,collapsed:n.$route.params.section!="vehicle"},{header:a(()=>[l(h,{icon:["fas","car"]}),e[8]||(e[8]=i(" Fahrzeuge ",-1))]),actions:a(()=>[n.$store.state.mqtt["openWB/general/extern"]===!1?(d(),b(k,{key:0,class:"bg-success clickable",title:"Neues Fahrzeug hinzufügen",onClick:t.addVehicle},{default:a(()=>[l(h,{icon:["fas","plus"]})]),_:1},8,["onClick"])):s("",!0)]),default:a(()=>[n.$store.state.mqtt["openWB/general/extern"]===!0?(d(),g("div",$e,[l(z,{subtype:"info"},{default:a(()=>[...e[9]||(e[9]=[i(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(d(),g("div",en,[(d(!0),g(F,null,q(t.vehicleIndexes,r=>(d(),b(B,{key:r,title:t.getVehicleName(r),collapsible:!0,collapsed:!(n.$route.params.section=="vehicle"&&parseInt(n.$route.params.section_index)==r),subtype:"info"},x({header:a(()=>[l(h,{icon:["fas","car"],class:"fa-border",style:fe({backgroundColor:n.$store.state.mqtt["openWB/vehicle/"+r+"/color"],color:n.getContrastColor(n.$store.state.mqtt["openWB/vehicle/"+r+"/color"]),"--fa-border-color":n.getContrastColor(n.$store.state.mqtt["openWB/vehicle/"+r+"/color"])})},null,8,["style"]),i(" "+w(t.getVehicleName(r)),1)]),default:a(()=>[l(L,{title:"Bezeichnung","model-value":n.$store.state.mqtt["openWB/vehicle/"+r+"/name"],disabled:r===0,"onUpdate:modelValue":o=>n.updateState("openWB/vehicle/"+r+"/name",o)},x({append:a(()=>[l(E,{class:"p-1","model-value":n.$store.state.mqtt["openWB/vehicle/"+r+"/color"],"default-color":"#17a2b8","onUpdate:modelValue":o=>n.updateState("openWB/vehicle/"+r+"/color",o)},null,8,["model-value","onUpdate:modelValue"])]),_:2},[r===0?{name:"help",fn:a(()=>[e[10]||(e[10]=i(" Das Standard-Fahrzeug kann nicht umbenannt werden. ",-1))]),key:"0"}:void 0]),1032,["model-value","disabled","onUpdate:modelValue"]),r!==0?(d(),b(L,{key:0,title:"Fahrzeughersteller ","model-value":n.$store.state.mqtt["openWB/vehicle/"+r+"/info"]?.manufacturer,"onUpdate:modelValue":o=>n.updateState("openWB/vehicle/"+r+"/info",o,"manufacturer")},{help:a(()=>[...e[11]||(e[11]=[i(" Optional: zusätzliche Information für den Systembericht. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"])):s("",!0),r!==0?(d(),b(L,{key:1,title:"Fahrzeugmodell","model-value":n.$store.state.mqtt["openWB/vehicle/"+r+"/info"]?.model,"onUpdate:modelValue":o=>n.updateState("openWB/vehicle/"+r+"/info",o,"model")},{help:a(()=>[...e[12]||(e[12]=[i(" Optional: zusätzliche Information für den Systembericht.",-1),m("br",null,null,-1),i(" Nach Möglichkeit auch Angabe des Baujahres, da es durchaus beim Verhalten des Fahrzeugs Unterschiede geben kann. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"])):s("",!0),l(M,{title:"Fahrzeug-Profil",options:t.evTemplateList,"model-value":n.$store.state.mqtt["openWB/vehicle/"+r+"/ev_template"],"onUpdate:modelValue":o=>n.updateState("openWB/vehicle/"+r+"/ev_template",o)},null,8,["options","model-value","onUpdate:modelValue"]),l(M,{title:"Lade-Profil",options:t.chargeTemplateList,"model-value":n.$store.state.mqtt["openWB/vehicle/"+r+"/charge_template"],"onUpdate:modelValue":o=>n.updateState("openWB/vehicle/"+r+"/charge_template",o)},null,8,["options","model-value","onUpdate:modelValue"]),e[31]||(e[31]=m("hr",null,null,-1)),v.installAssistantActive?s("",!0):(d(),g("div",nn,[l(U,null,{default:a(()=>[...e[13]||(e[13]=[i(" Fahrzeugzuordnung per ID-Tags ",-1)])]),_:1}),(n.$store.state.mqtt["openWB/vehicle/"+r+"/tag_id"]?.length??0)>0?(d(),g("div",tn,[l(z,{subtype:"info"},{default:a(()=>[e[15]||(e[15]=i(" Einstellungen zur Fahrzeugzuordnung finden sich unter ",-1)),l(f,{to:"/IdentificationConfiguration"},{default:a(()=>[...e[14]||(e[14]=[i(" Einstellungen - Identifikation ",-1)])]),_:1}),e[16]||(e[16]=i(". ",-1)),n.$store.state.mqtt["openWB/optional/rfid/active"]===!1?(d(),g("div",ln," Aktuell ist die Identifikation in den Einstellungen deaktiviert. ")):(d(),g("div",an," Die Identifikation ist aktiv. Das Fahrzeug lässt sich per ID-Tag automatisch einem Ladepunkt zuordnen. "))]),_:1}),l(p,{title:"Zugeordnete ID-Tags","no-elements-message":"Keine keine ID-Tags zugeordnet.",readonly:!0,"model-value":n.$store.state.mqtt["openWB/vehicle/"+r+"/tag_id"]},{help:a(()=>[...e[17]||(e[17]=[i(" Hier werden die ID-Tags aufgelistet, welche diesem Fahrzeug zugeordnet sind. Mit diesen ID-Tags kann dieses Fahrzeug an Ladepunkten automatisch zugeordnet werden. ",-1)])]),_:1},8,["model-value"])])):(d(),g("div",rn,[l(z,{subtype:"info"},{default:a(()=>[e[19]||(e[19]=i(" Einstellungen zur Fahrzeugzuordnung finden sich unter ",-1)),l(f,{to:"/IdentificationConfiguration"},{default:a(()=>[...e[18]||(e[18]=[i(" Einstellungen - Identifikation ",-1)])]),_:1}),e[20]||(e[20]=i(".",-1)),e[21]||(e[21]=m("br",null,null,-1)),e[22]||(e[22]=i(" Dem Fahrzeug sind aktuell keine ID-Tags zum Entsperren zugeordnet. ",-1))]),_:1})])),e[23]||(e[23]=m("hr",null,null,-1))])),l(M,{class:"mb-2",title:"SoC-Modul des Fahrzeugs",options:t.socModuleList,"model-value":n.$store.state.mqtt["openWB/vehicle/"+r+"/soc_module/config"]?.type,"onUpdate:modelValue":o=>t.updateSelectedSocModule(r,o)},{help:a(()=>[...e[24]||(e[24]=[i(" Mit einem SoC-Modul kann der Ladestand des Fahrzeugs ermittelt und geregelt werden. Z.B. lassen sich unabhängig vom Fahrzeug bestimmte SoC-Werte einstellen, um den Fahrzeugakku zu schonen. Aktuell werden die SoC-Werte mittels der App-Zugangsdaten aus dem Herstellerserver des Fahrzeuges ausgelesen. Zukünftig soll auch eine direkte SoC-Auslesung aus dem Fahrzeug möglich werden (openWB Pro).",-1),m("br",null,null,-1),i(" Die SoC-Abfrage erfolgt automatisch beim Anstecken des Fahrzeuges und zusätzlich über einstellbare Abfrageintervalle während des Ladens und Nichtladens. Die Abfrage kann auch manuell durch Klick auf den Reload-Pfeil auf der Hauptseite ausgelöst werden.",-1),m("br",null,null,-1),i(" Während des Ladevorgangs wird der Zeitstempel der SoC-Abfrage geprüft. Ist dieser älter als der Zeitstempel der vorherigen Abfrage, wird das Ergebnis verworfen, stattdessen eine Berechnung durchgeführt und auch so im Fahrzeugstatus vermerkt.",-1),m("br",null,null,-1),i(" Wenn eine Abfrage fehlschlägt, wird noch drei weitere Male im Abstand von 5 Minuten versucht, den SoC abzufragen. Wenn dies nicht erfolgreich ist, wird der SoC auf 0% gesetzt um zu vermeiden, dass ein Auto beim SoC-basierten Laden nicht geladen wird. Die Abfrage erfolgt dann wieder in den oben genannten Intervallen.",-1),m("br",null,null,-1),i(" Da aktuell die SoC-Abfragen über Onlineserver der Fahrzeughersteller laufen, ist infolge möglicher Umstellungen/Wartungen keine 100%-ig sichere SoC-Abfrage garantiert. Auch kann es zu SoC-Abweichungen infolge von zeitlicher Verzögerungen kommen. Hilfestellung erfolgt primär im openWB-Forum. ",-1)])]),_:1},8,["options","model-value","onUpdate:modelValue"]),n.$store.state.mqtt["openWB/vehicle/"+r+"/soc_module/config"]?.type?(d(),g("div",un,[l(_,{title:"SoC direkt aus Fahrzeug auslesen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":n.$store.state.mqtt["openWB/vehicle/"+r+"/soc_module/general_config"]?.use_soc_from_cp,"onUpdate:modelValue":o=>n.updateState("openWB/vehicle/"+r+"/soc_module/general_config",o,"use_soc_from_cp")},{help:a(()=>[...e[25]||(e[25]=[i(" Wenn Ladepunkt und Fahrzeug das direkte Auslesen des SoCs über das Ladekabel unterstützen, wird der SoC nach dem Anstecken aus dem Fahrzeug ausgelesen und während der Ladung berechnet. Das direkte Auslesen des SoC aus dem Fahrzeug ist aktuell nur mit einer openWB Pro möglich. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(U,null,{help:a(()=>[...e[26]||(e[26]=[i(" Einige Hersteller begrenzen die möglichen Abfragen. Sobald ein gewisses Limit in einem Zeitraum überschritten wird, werden weitere Anfragen blockiert. Die Zeitintervalle sollten daher nicht zu klein gewählt werden. ",-1)])]),default:a(()=>[e[27]||(e[27]=i(" Aktualisierung der Fahrzeugdaten ",-1))]),_:1}),l(C,{title:"Während der Ladung",unit:"Min.",min:1,max:60,required:"","model-value":n.$store.state.mqtt["openWB/vehicle/"+r+"/soc_module/general_config"]?.request_interval_charging/60,"onUpdate:modelValue":o=>n.updateState("openWB/vehicle/"+r+"/soc_module/general_config",o*60,"request_interval_charging")},{help:a(()=>[...e[28]||(e[28]=[i(" Der Ladestand des Fahrzeugs (SoC) wird bei einem laufenden Ladevorgang in dem hier eingestellten Intervall in Minuten abgefragt. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(C,{title:"Ohne laufende Ladung",unit:"Min.",min:5,required:"","model-value":n.$store.state.mqtt["openWB/vehicle/"+r+"/soc_module/general_config"].request_interval_not_charging/60,"onUpdate:modelValue":o=>n.updateState("openWB/vehicle/"+r+"/soc_module/general_config",o*60,"request_interval_not_charging")},{help:a(()=>[...e[29]||(e[29]=[i(" Der Ladestand des Fahrzeugs (SoC) wird in dem hier eingestellten Intervall in Minuten abgefragt, falls kein Ladevorgang aktiv ist. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(_,{title:"Nur aktualisieren wenn angesteckt",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":n.$store.state.mqtt["openWB/vehicle/"+r+"/soc_module/general_config"].request_only_plugged,"onUpdate:modelValue":o=>n.updateState("openWB/vehicle/"+r+"/soc_module/general_config",o,"request_only_plugged")},{help:a(()=>[...e[30]||(e[30]=[i(' Wird hier "Ja" ausgewählt, dann wird der Ladestand des Fahrzeugs nur abgefragt, wenn das Ladekabel angesteckt ist. ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(ne,{"vehicle-id":r,vehicle:n.$store.state.mqtt["openWB/vehicle/"+r+"/soc_module/config"],"onUpdate:configuration":o=>t.updateConfiguration("openWB/vehicle/"+r+"/soc_module/config",o)},null,8,["vehicle-id","vehicle","onUpdate:configuration"])])):s("",!0)]),_:2},[r!==0?{name:"actions",fn:a(o=>[o.collapsed?s("",!0):(d(),b(k,{key:0,class:"bg-danger clickable",title:"Fahrzeug löschen",onClick:u=>t.removeVehicleModal(u,r)},{default:a(()=>[l(h,{icon:["fas","trash"]})]),_:1},8,["onClick"]))]),key:"0"}:void 0]),1032,["title","collapsed"]))),128))]))]),_:1},8,["collapsed"]),e[91]||(e[91]=m("hr",{class:"border-secondary"},null,-1)),l(U,null,{default:a(()=>[...e[32]||(e[32]=[i("Profile",-1)])]),_:1}),l(B,{collapsible:!0,collapsed:!0},{header:a(()=>[l(K,{class:"fa-lg"},{default:a(()=>[l(h,{icon:["far","file"]}),l(h,{icon:["fas","car"],transform:"shrink-8"})]),_:1}),e[33]||(e[33]=i(" Fahrzeug-Profile ",-1))]),actions:a(()=>[n.$store.state.mqtt["openWB/general/extern"]===!1?(d(),b(k,{key:0,class:"bg-success clickable",title:"Neues Fahrzeug-Profil hinzufügen",onClick:t.addEvTemplate},{default:a(()=>[l(h,{icon:["fas","plus"]})]),_:1},8,["onClick"])):s("",!0)]),default:a(()=>[n.$store.state.mqtt["openWB/general/extern"]===!0?(d(),g("div",on,[l(z,{subtype:"info"},{default:a(()=>[...e[34]||(e[34]=[i(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(d(),g("div",dn,[(d(!0),g(F,null,q(t.evTemplates,(r,o)=>(d(),b(B,{key:o,title:r.name?r.name:o,collapsible:!0,collapsed:!0},x({default:a(()=>[l(L,{title:"Bezeichnung","model-value":r.name,disabled:o.endsWith("/0"),"onUpdate:modelValue":u=>n.updateState(o,u,"name")},x({_:2},[o.endsWith("/0")?{name:"help",fn:a(()=>[e[35]||(e[35]=i(" Das Standard-Profil kann nicht umbenannt werden. ",-1))]),key:"0"}:void 0]),1032,["model-value","disabled","onUpdate:modelValue"]),l(U,null,{default:a(()=>[...e[36]||(e[36]=[i(" Angaben zur Batterie ",-1)])]),_:1}),l(C,{title:"Kapazität der Batterie",unit:"kWh",min:1,step:1,required:"","model-value":r.battery_capacity/1e3,"onUpdate:modelValue":u=>n.updateState(o,u*1e3,"battery_capacity")},{help:a(()=>[...e[37]||(e[37]=[i(" Angabe der Netto-Kapazität der Fahrzeugbatterie. Dient zur Berechnung des manuellen SoC und der geladenen Reichweite. Die Netto-Kapazität unterscheidet sich meist von den Angaben der Fahrzeughersteller. So besitzt ein Tesla Model S 90 z. B. nur ca. 83kWh und nicht die durch die Typenbezeichnung suggerierten 90kWh. Andere Hersteller begrenzen die nutzbare Kapazität absichtlich, um eine höhere Lebensdauer der Akkus zu erreichen. Gängig sind eine Drosselung auf 90% der angegebenen Brutto-Kapazität. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),v.installAssistantActive?s("",!0):(d(),g("div",sn,[l(C,{title:"Wirkungsgrad der Ladeelektronik",unit:"%",min:1,max:100,required:"","model-value":r.efficiency,"onUpdate:modelValue":u=>n.updateState(o,u,"efficiency")},{help:a(()=>[...e[38]||(e[38]=[i(" Durch Verluste in der Ladeelektronik (z. B. Umwandlung Wechselspannung in Gleichspannung) gelangt nicht die komplette Energie, welche durch den Zähler in der Wallbox gemessen wird, in den Akku des Fahrzeugs. Der anzugebende Wert liegt bei gängigen Fahrzeugen im Bereich 90-95%. Eine Ausnahme stellt der Zoe dar, dessen Chameleon-Lader je nach Modellversion und freigegebener Leistung der Wallbox teilweise nur auf ca. 50% kommt.",-1),m("br",null,null,-1),i(" Liegen die Angaben der Wallbox und des Fahrzeugs nach der Ladung mehrere Prozent auseinander, dann kann mit dieser Einstellung eine Feinabstimmung erfolgen: ",-1),m("br",null,null,-1),i(" SoC an der Wallbox zu hoch: Wirkungsgrad um ein paar Prozent reduzieren",-1),m("br",null,null,-1),i(" SoC an der Wallbox zu gering: Wirkungsgrad um ein paar Prozent erhöhen",-1),m("br",null,null,-1)])]),_:1},8,["model-value","onUpdate:modelValue"])])),l(C,{title:"Durchschnittsverbrauch",unit:"kWh / 100km",min:1,step:.1,required:"","model-value":r.average_consump/1e3,"onUpdate:modelValue":u=>n.updateState(o,u*1e3,"average_consump")},null,8,["model-value","onUpdate:modelValue"]),l(_,{title:"Bidirektionales Laden",buttons:[{buttonValue:!1,text:"Nicht unterstützt",class:"btn-outline-danger"},{buttonValue:!0,text:"AC nach ISO15118-20",class:"btn-outline-success"}],"model-value":r.bidi,"onUpdate:modelValue":u=>n.updateState(o,u,"bidi")},{help:a(()=>[...e[39]||(e[39]=[i(' Für bidirektionales Laden wird eine openWB Pro benötigt. Die openWB Pro muss auf den Modus "Bidi" gestellt werden.',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),t.dcChargingEnabled===!0?(d(),g("div",mn,[l(U,null,{default:a(()=>[...e[40]||(e[40]=[i(" Angaben zur Ladeleistung (DC) ",-1)])]),_:1}),l(C,{title:"Mindestleistung",min:0,unit:"kW","model-value":n.ac_current2dc_power(r.dc_min_current),"onUpdate:modelValue":u=>n.updateState(o,n.dc_power2ac_current(u),"dc_min_current")},null,8,["model-value","onUpdate:modelValue"]),l(C,{title:"Maximalleistung",unit:"kW","model-value":n.ac_current2dc_power(r.dc_max_current),"onUpdate:modelValue":u=>n.updateState(o,n.dc_power2ac_current(u),"dc_max_current")},null,8,["model-value","onUpdate:modelValue"])])):s("",!0),l(U,null,{default:a(()=>[e[41]||(e[41]=i(" Angaben zum Ladestrom ",-1)),t.dcChargingEnabled===!0?(d(),g("span",gn," (AC) ")):s("",!0)]),_:1}),l(A,{title:"Mindeststrom",min:6,max:16,step:1,unit:"A","model-value":r.min_current,"onUpdate:modelValue":u=>n.updateState(o,u,"min_current")},null,8,["model-value","onUpdate:modelValue"]),l(A,{title:"Maximalstrom bei einer Phase",min:6,max:32,step:1,unit:"A","model-value":r.max_current_single_phase,"onUpdate:modelValue":u=>n.updateState(o,u,"max_current_single_phase")},null,8,["model-value","onUpdate:modelValue"]),l(A,{title:"Maximalstrom mehrere Phasen",min:6,max:32,step:1,unit:"A","model-value":r.max_current_multi_phases,"onUpdate:modelValue":u=>n.updateState(o,u,"max_current_multi_phases")},null,8,["model-value","onUpdate:modelValue"]),l(C,{title:"Erlaubte Stromabweichung",step:.1,min:0,max:5,unit:"A","model-value":r.nominal_difference,"onUpdate:modelValue":u=>n.updateState(o,u,"nominal_difference")},{help:a(()=>[...e[42]||(e[42]=[i(" In manchen Lademodi, z.B. bei der automatischen Phasenumschaltung, wird geprüft, ob das Fahrzeug mit der vorgegebenen Stromstärke lädt. Manche Fahrzeuge laden nicht exakt mit der vorgegebenen Stromstärke. Die erlaubte Abweichung kann hier eingestellt werden. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(U,null,{default:a(()=>[e[43]||(e[43]=i(" Angaben zur Handhabung von Phasen ",-1)),t.dcChargingEnabled===!0?(d(),g("span",pn," (AC) ")):s("",!0)]),_:1}),l(_,{title:"Unterstützte Phasen",buttons:[{buttonValue:1,text:"1"},{buttonValue:2,text:"2"},{buttonValue:3,text:"3"}],"model-value":r.max_phases,"onUpdate:modelValue":u=>n.updateState(o,u,"max_phases")},{help:a(()=>[...e[44]||(e[44]=[i(" Anzahl der Phasen, die der Fahrzeuglader (s.g. OBC - OnboardCharger) verwendet. Plugin-Hybride nutzen meist nur eine Phase, reine E-Autos meist 3, manche nur 2 Phasen. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(_,{title:"CP-Unterbrechung",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"model-value":r.control_pilot_interruption,"onUpdate:modelValue":u=>n.updateState(o,u,"control_pilot_interruption")},{help:a(()=>[...e[45]||(e[45]=[i(' Erläuterung siehe "Konfiguration - Ladepunkte" -> Hardware-Optionen ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),r.control_pilot_interruption?(d(),b(C,{key:2,title:"Dauer der CP-Unterbrechung",min:4,step:1,unit:"s","model-value":r.control_pilot_interruption_duration,"onUpdate:modelValue":u=>n.updateState(o,u,"control_pilot_interruption_duration")},null,8,["model-value","onUpdate:modelValue"])):s("",!0),r.control_pilot_interruption?(d(),b(A,{key:3,title:"Wiederholung der CP-Unterbrechung",min:0,max:20,step:1,unit:"min",labels:[{label:"Aus",value:0},{label:1,value:60},{label:2,value:120},{label:3,value:180},{label:4,value:240},{label:5,value:300},{label:6,value:360},{label:7,value:420},{label:8,value:480},{label:9,value:540},{label:10,value:600},{label:11,value:660},{label:12,value:720},{label:13,value:780},{label:14,value:840},{label:15,value:900},{label:16,value:960},{label:17,value:1020},{label:18,value:1080},{label:19,value:1140},{label:20,value:1200}],"model-value":r.control_pilot_interruption_retry_interval,"onUpdate:modelValue":u=>n.updateState(o,u,"control_pilot_interruption_retry_interval")},{help:a(()=>[...e[46]||(e[46]=[i(' Wiederholt die CP-Unterbrechung, wenn das Fahrzeug trotz freigegebenem Ladestrom nach dieser Zeit immer noch nicht lädt. "Aus" deaktiviert die Wiederholung. Empfehlenswert sind 3 bis 5 Minuten. ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"])):s("",!0),l(_,{title:"Phasenumschaltung blockieren",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"model-value":r.prevent_phase_switch,"onUpdate:modelValue":u=>n.updateState(o,u,"prevent_phase_switch")},{help:a(()=>[...e[47]||(e[47]=[i(' Erläuterung zu 1p3p siehe "Ladeeinstellungen" ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(_,{title:"Ladung aktiv halten",buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"model-value":r.prevent_charge_stop,"onUpdate:modelValue":u=>n.updateState(o,u,"prevent_charge_stop")},{help:a(()=>[...e[48]||(e[48]=[i(" Der Ladevorgang wird in den Lademodi PV- und Zielladen nach Ladebeginn nicht unterbrochen, selbst wenn nicht mehr genug Überschuss vorhanden ist. Diese Einstellung sollte bei Fahrzeugen aktiviert werden, die nach einer Ladungsunterbrechung keine Ladung mehr starten. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),v.installAssistantActive?s("",!0):(d(),g("div",hn,[l(C,{title:"Mindestzeit zwischen Umschaltungen",unit:"s",min:2,step:1,required:"","model-value":r.keep_charge_active_duration,"onUpdate:modelValue":u=>n.updateState(o,u,"keep_charge_active_duration")},{help:a(()=>[...e[49]||(e[49]=[i(" Manche Fahrzeuge benötigen nach der Umschaltung einige Zeit, bis sie mit der vorgegebenen Phasenzahl laden. In dieser Zeit wird keine neue Phasenumschaltung angestoßen. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"])]))]),_:2},[n.$store.state.mqtt["openWB/general/extern"]===!1?{name:"actions",fn:a(u=>[u.collapsed?s("",!0):(d(),b(k,{key:0,class:"bg-success clickable",title:"Fahrzeug-Profil duplizieren",onClick:P=>t.addEvTemplate(P,o)},{default:a(()=>[l(h,{icon:["fas","copy"]})]),_:1},8,["onClick"])),!u.collapsed&&!o.endsWith("/0")?(d(),b(k,{key:1,class:"bg-danger clickable ml-1",title:"Fahrzeug-Profil löschen",onClick:P=>t.removeEvTemplateModal(P,o)},{default:a(()=>[l(h,{icon:["fas","trash"]})]),_:1},8,["onClick"])):s("",!0)]),key:"0"}:void 0]),1032,["title"]))),128))]))]),_:1}),l(B,{collapsible:!0,collapsed:n.$route.params.section!="charge_template"},{header:a(()=>[l(K,{class:"fa-lg"},{default:a(()=>[l(h,{icon:["far","file"]}),l(h,{icon:["fas","plug"],transform:"shrink-8"})]),_:1}),e[50]||(e[50]=i(" Lade-Profile ",-1))]),actions:a(()=>[n.$store.state.mqtt["openWB/general/extern"]===!1?(d(),b(k,{key:0,class:"bg-success clickable",title:"Neues Lade-Profil hinzufügen",onClick:t.addChargeTemplate},{default:a(()=>[l(h,{icon:["fas","plus"]})]),_:1},8,["onClick"])):s("",!0)]),default:a(()=>[n.$store.state.mqtt["openWB/general/extern"]===!0?(d(),g("div",cn,[l(z,{subtype:"info"},{default:a(()=>[...e[51]||(e[51]=[i(' Diese Einstellungen sind nicht verfügbar, solange sich diese openWB im Steuerungsmodus "secondary" befindet. ',-1)])]),_:1})])):(d(),g("div",bn,[(d(!0),g(F,null,q(t.chargeTemplates,(r,o)=>(d(),b(B,{key:o,title:r.name?r.name:o,collapsible:!0,collapsed:!(n.$route.params.section=="charge_template"&&parseInt(n.$route.params.section_index)==r.id)},{actions:a(u=>[u.collapsed?s("",!0):(d(),b(k,{key:0,class:"bg-success clickable",title:"Lade-Profil duplizieren",onClick:P=>t.addChargeTemplate(P,o)},{default:a(()=>[l(h,{icon:["fas","copy"]})]),_:1},8,["onClick"])),!u.collapsed&&!o.endsWith("/0")?(d(),b(k,{key:1,class:"bg-danger clickable ml-1",title:"Lade-Profil löschen",onClick:T(P=>t.removeChargeTemplateModal(P,r.id),["stop"])},{default:a(()=>[l(h,{icon:["fas","trash"]})]),_:1},8,["onClick"])):s("",!0)]),default:a(()=>[l(L,{title:"Bezeichnung","model-value":r.name,disabled:o.endsWith("/0"),"onUpdate:modelValue":u=>n.updateState(o,u,"name")},x({_:2},[o.endsWith("/0")?{name:"help",fn:a(()=>[e[52]||(e[52]=i(" Das Standard-Profil kann nicht umbenannt werden. ",-1))]),key:"0"}:void 0]),1032,["model-value","disabled","onUpdate:modelValue"]),l(U,null,{default:a(()=>[...e[53]||(e[53]=[i(" Allgemeine Optionen ",-1)])]),_:1}),l(_,{title:"Aktiver Lademodus",buttons:[{buttonValue:"instant_charging",text:"Sofort",class:"btn-outline-danger"},{buttonValue:"pv_charging",text:"PV",class:"btn-outline-success"},{buttonValue:"scheduled_charging",text:"Ziel",class:"btn-outline-primary"},{buttonValue:"eco_charging",text:"Eco",class:"btn-outline-secondary"},{buttonValue:"stop",text:"Stop",class:"btn-outline-dark"}],"model-value":r.chargemode.selected,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.selected"),onButtonClick:u=>t.openActiveChargeModeCard(o,u)},{help:a(()=>[...e[54]||(e[54]=[i(" Diese Einstellung entspricht dem gewählten Lademodus auf der Hauptseite und ist aktiv, wenn ein zugehöriges Fahrzeug angesteckt ist.",-1),m("br",null,null,-1),i(" Die zur Verfügung stehende Leistung wird intern anhand folgender Prioritätenliste auf die Fahrzeuge bzw. Ladepunkte verteilt:",-1),m("br",null,null,-1),m("ol",null,[m("li",null,"Ziel (Sofortladen) mit Priorität"),m("li",null,"Ziel (Sofortladen)"),m("li",null,"Zeit mit Priorität"),m("li",null,"Zeit"),m("li",null,"Sofort mit Priorität"),m("li",null,"Sofort"),m("li",null,"Eco (Min-Anteil) mit Priorität"),m("li",null,"Eco (Min-Anteil)"),m("li",null,"PV (Min-Anteil) mit Priorität"),m("li",null,"PV (Min-Anteil)"),m("li",null,"Ziel (PV) mit Priorität"),m("li",null,"Ziel (PV)"),m("li",null,"Eco (PV-Anteil) mit Priorität"),m("li",null,"Eco (PV-Anteil)"),m("li",null,"PV (PV-Anteil) mit Priorität"),m("li",null,"PV (PV-Anteil)"),m("li",null,"Bidi-Entladen ohne Priorität"),m("li",null,"Bidi-Entladen mit Priorität")],-1)])]),_:1},8,["model-value","onUpdate:modelValue","onButtonClick"]),v.installAssistantActive?s("",!0):(d(),g("div",fn,[l(_,{title:"Priorität",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":r.prio,"onUpdate:modelValue":u=>n.updateState(o,u,"prio")},{help:a(()=>[...e[55]||(e[55]=[i(" Die Ladefreigabe mit dem jeweils eingestellten Mindeststrom erfolgt für alle Fahrzeuge, soweit die verfügbare Leistung ausreicht. Fahrzeuge mit Priorität werden bevorzugt mit mehr Leistung geladen, falls verfügbar. Erst wenn alle priorisierten Fahrzeuge die maximale Ladeleistung bekommen und noch zusätzlicher Überschuss vorhanden ist, wird auch für Fahrzeuge ohne Priorität mehr Leistung freigegeben. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(_,{title:"Standard nach Abstecken",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":r.load_default,"onUpdate:modelValue":u=>n.updateState(o,u,"load_default")},{help:a(()=>[...e[56]||(e[56]=[i(" Falls diese Option aktiviert ist, wird der betroffene Ladepunkt nach dem Abstecken auf das Standard Fahrzeug zurückgesetzt. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),e[58]||(e[58]=m("hr",null,null,-1)),l(U,null,{default:a(()=>[...e[57]||(e[57]=[i("Einstellungen der Lademodi",-1)])]),_:1})])),l(B,{ref_for:!0,ref:`card-${o}-instant_charging`,collapsible:!0,collapsed:!0,subtype:"secondary"},{header:a(()=>[...e[59]||(e[59]=[i(" Sofort ",-1)])]),default:a(()=>[l(A,{title:`Soll-Ladestrom${t.dcChargingEnabled?" (AC)":""}`,min:6,max:32,step:1,unit:"A","model-value":r.chargemode.instant_charging.current,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.instant_charging.current")},null,8,["title","model-value","onUpdate:modelValue"]),t.dcChargingEnabled===!0?(d(),b(C,{key:0,title:"Soll-Ladeleistung (DC)",unit:"kW","model-value":n.ac_current2dc_power(r.chargemode.instant_charging.dc_current),"onUpdate:modelValue":u=>n.updateState(o,n.dc_power2ac_current(u),"chargemode.instant_charging.dc_current")},null,8,["model-value","onUpdate:modelValue"])):s("",!0),l(_,{title:"Anzahl Phasen",buttons:[{buttonValue:1,text:"1"},{buttonValue:3,text:"Maximum"}],"model-value":r.chargemode.instant_charging.phases_to_use,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.instant_charging.phases_to_use")},{help:a(()=>[...e[60]||(e[60]=[i(' Hier kann eingestellt werden, ob Ladevorgänge mit einer Phase oder dem möglichen Maximum in Abhängigkeit der "Ladepunkt"- und "Fahrzeug"-Einstellungen durchgeführt werden. Voraussetzung ist die verbaute Umschaltmöglichkeit zwischen einer und mehreren Phasen (s.g. 1p3p). ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(_,{title:"Begrenzung",buttons:[{buttonValue:"none",text:"Keine"},{buttonValue:"soc",text:"Fahrzeug-SoC"},{buttonValue:"amount",text:"Energie"}],"model-value":r.chargemode.instant_charging.limit.selected,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.instant_charging.limit.selected")},{help:a(()=>[...e[61]||(e[61]=[i(" Sofortladen kann ohne Fahrzeug-SoC-Begrenzung (Aus), mit Begrenzung des Fahrzeug-SoC (SoC) bei konfiguriertem SoC-Auslesemodul oder mittels Vorgabe eine gewünschten Energiemenge in kWh (Energie) genutzt werden. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(A,{title:"SoC-Limit für das Fahrzeug",min:5,max:100,step:5,unit:"%","model-value":r.chargemode.instant_charging.limit.soc,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.instant_charging.limit.soc")},{help:a(()=>[...e[62]||(e[62]=[i(' Um die Fahrzeug-SoC-Begrenzung nutzen zu können, muss ein SoC-Modul für das jeweilige Fahrzeug eingerichtet sein (siehe "Konfiguration" -> "Fahrzeuge" -> "SoC-Modul"). ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(C,{title:"Energie-Limit",unit:"kWh",min:1,step:1,"model-value":r.chargemode.instant_charging.limit.amount/1e3,"onUpdate:modelValue":u=>n.updateState(o,u*1e3,"chargemode.instant_charging.limit.amount")},{help:a(()=>[...e[63]||(e[63]=[i(" Die geladene Energiemenge wird nach dem Anstecken neu gezählt. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"])]),_:2},1536),l(B,{ref_for:!0,ref:`card-${o}-pv_charging`,collapsible:!0,collapsed:!0,subtype:"secondary"},{header:a(()=>[...e[64]||(e[64]=[i(" PV ",-1)])]),default:a(()=>[l(A,{title:`Minimaler Dauerstrom${t.dcChargingEnabled?" (AC)":""}`,min:0,max:11,step:1,unit:"A",labels:[{label:"Aus",value:0},{label:6,value:6},{label:7,value:7},{label:8,value:8},{label:9,value:9},{label:10,value:10},{label:11,value:11},{label:12,value:12},{label:13,value:13},{label:14,value:14},{label:15,value:15},{label:16,value:16}],"model-value":r.chargemode.pv_charging.min_current,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.pv_charging.min_current")},{help:a(()=>[...e[65]||(e[65]=[i(' Hier kann eine Stromstärke eingestellt werden, mit dem unabhängig vom vorhandenen Überschuss durchgeladen wird. Hierdurch wird z.B. an Tagen mit häufigem Sonne/Wolken-Wechsel oder mit nur wenig PV-Ertrag ein Laden ohne Unterbrechung ermöglicht. Folglich kann auch Netzbezug für das Fahrzeugladen entstehen, weshalb der niedrigste Stromwert empfohlen wird. Diese Einstellung entspricht weitestgehend dem Lademodus "Min+PV" der Version 1.x. ',-1)])]),_:1},8,["title","model-value","onUpdate:modelValue"]),t.dcChargingEnabled===!0?(d(),b(C,{key:0,title:"Minimale Dauerleistung (DC)",unit:"kW",min:0,"model-value":n.ac_current2dc_power(r.chargemode.pv_charging.dc_min_current),"onUpdate:modelValue":u=>n.updateState(o,n.dc_power2ac_current(u),"chargemode.pv_charging.dc_min_current")},{help:a(()=>[...e[66]||(e[66]=[i(" Hier kann eine Leistung eingestellt werden, mit dem unabhängig vom vorhandenen Überschuss durchgeladen wird. Hierdurch wird z.B. an Tagen mit häufigem Sonne/Wolken-Wechsel oder mit nur wenig PV-Ertrag ein Laden ohne Unterbrechung ermöglicht. Folglich kann auch Netzbezug für das Fahrzeugladen entstehen, weshalb der niedrigste Leistungswert empfohlen wird. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"])):s("",!0),l(_,{title:"Anzahl Phasen",buttons:[{buttonValue:1,text:"1"},{buttonValue:3,text:"Maximum"},{buttonValue:0,text:"Automatik"}],"model-value":r.chargemode.pv_charging.phases_to_use,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.pv_charging.phases_to_use")},{help:a(()=>[...e[67]||(e[67]=[i(' Hier kann eingestellt werden, ob Ladevorgänge mit einer Phase oder dem möglichen Maximum in Abhängigkeit der "Ladepunkt"- und "Fahrzeug"-Einstellungen durchgeführt werden. Im Modus "Automatik" entscheidet die Regelung, welche Einstellung genutzt wird, um den verfügbaren Überschuss in die Fahrzeuge zu laden. Voraussetzung ist die verbaute Umschaltmöglichkeit zwischen einer und mehreren Phasen (sog. 1p3p). ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(_,{title:"Begrenzung",buttons:[{buttonValue:"none",text:"Keine"},{buttonValue:"soc",text:"Fahrzeug-SoC"},{buttonValue:"amount",text:"Energie"}],"model-value":r.chargemode.pv_charging.limit.selected,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.pv_charging.limit.selected")},{help:a(()=>[...e[68]||(e[68]=[i(" PV kann ohne Fahrzeug-SoC-Begrenzung (Aus), mit Begrenzung des Fahrzeug-SoC (SoC) bei konfiguriertem SoC-Auslesemodul oder mittels Vorgabe eine gewünschten Energiemenge in kWh (Energie) genutzt werden. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(A,{title:"SoC-Limit für das Fahrzeug",min:5,max:100,step:5,unit:"%","model-value":r.chargemode.pv_charging.limit.soc,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.pv_charging.limit.soc")},{help:a(()=>[...e[69]||(e[69]=[i(' Um die Fahrzeug-SoC-Begrenzung nutzen zu können, muss ein SoC-Modul für das jeweilige Fahrzeug eingerichtet sein (siehe "Konfiguration" -> "Fahrzeuge" -> "SoC-Modul"). ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(C,{title:"Energie-Limit",unit:"kWh",min:1,step:1,"model-value":r.chargemode.pv_charging.limit.amount/1e3,"onUpdate:modelValue":u=>n.updateState(o,u*1e3,"chargemode.pv_charging.limit.amount")},{help:a(()=>[...e[70]||(e[70]=[i(" Die geladene Energiemenge wird nach dem Anstecken neu gezählt. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(A,{title:"Mindest-SoC für das Fahrzeug",min:0,max:19,step:1,unit:"%",labels:[{label:"Aus",value:0},{label:5,value:5},{label:10,value:10},{label:15,value:15},{label:20,value:20},{label:25,value:25},{label:30,value:30},{label:35,value:35},{label:40,value:40},{label:45,value:45},{label:50,value:50},{label:55,value:55},{label:60,value:60},{label:65,value:65},{label:70,value:70},{label:75,value:75},{label:80,value:80},{label:85,value:85},{label:90,value:90},{label:95,value:95}],"model-value":r.chargemode.pv_charging.min_soc,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.pv_charging.min_soc")},{help:a(()=>[...e[71]||(e[71]=[i(' Liegt der Fahrzeug-Ladestand (SoC) unter dem hier eingestellten Wert, dann wird bis zum Erreichen dieses Wertes mit dem eingestellten "Mindest-SoC-Strom" geladen. Dies dient der Sicherstellung eines "Mindest-SoC" - z.B. für eine immer abzudeckende Fahrzeugreichweite - auch wenn kein oder zu wenig Überschuss verfügbar ist (=> Laden mit anteilig Netzstrom). Nach dem Erreichen des "Mindest-SoC" wird bei verfügbarem Überschuss geladen.',-1),m("br",null,null,-1),i(' Um die Fahrzeug-SoC-Begrenzung nutzen zu können, muss ein SoC-Modul für das jeweilige Fahrzeug eingerichtet sein (siehe "Konfiguration" -> "Fahrzeuge" -> "SoC-Modul"). ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(A,{title:`Mindest-SoC-Strom${t.dcChargingEnabled?" (AC)":""}`,min:6,max:32,step:1,unit:"A","model-value":r.chargemode.pv_charging.min_soc_current,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.pv_charging.min_soc_current")},{help:a(()=>[...e[72]||(e[72]=[i(' Wird der oben eingestellte "Mindest-SoC" des Fahrzeuges unterschritten, dann wird unabhängig vom Überschuss ein Ladevorgang mit dem hier festgelegten "Mindest-SoC-Strom" initiiert (ggf. mit anteilig Netzbezug). ',-1)])]),_:1},8,["title","model-value","onUpdate:modelValue"]),t.dcChargingEnabled===!0?(d(),b(C,{key:1,title:"Mindest-SoC-Leistung (DC)",unit:"kW",min:0,"model-value":n.ac_current2dc_power(r.chargemode.pv_charging.dc_min_soc_current),"onUpdate:modelValue":u=>n.updateState(o,n.dc_power2ac_current(u),"chargemode.pv_charging.dc_min_soc_current")},{help:a(()=>[...e[73]||(e[73]=[i(' Wird der oben eingestellte "Mindest-SoC" des Fahrzeuges unterschritten, dann wird unabhängig vom Überschuss ein Ladevorgang mit der hier festgelegten "Mindest-SoC-Leistung" initiiert (ggf. mit anteilig Netzbezug). ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"])):s("",!0),l(_,{title:"Anzahl Phasen Mindest-SoC",buttons:[{buttonValue:1,text:"1"},{buttonValue:3,text:"Maximum"}],"model-value":r.chargemode.pv_charging.phases_to_use_min_soc,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.pv_charging.phases_to_use_min_soc")},{help:a(()=>[...e[74]||(e[74]=[i(' Hier kann eingestellt werden, ob Ladevorgänge mit einer Phase oder dem möglichen Maximum in Abhängigkeit der "Ladepunkt"- und "Fahrzeug"-Einstellungen durchgeführt werden. Voraussetzung ist die verbaute Umschaltmöglichkeit zwischen einer und mehreren Phasen (sog. 1p3p). ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"])]),_:2},1536),l(B,{ref_for:!0,ref:`card-${o}-scheduled_charging`,collapsible:!0,collapsed:!0,subtype:"secondary"},{header:a(()=>[...e[75]||(e[75]=[i(" Ziel ",-1)])]),default:a(()=>[l(U,null,{actions:a(()=>[l(k,{class:"bg-success clickable",title:"Neuen Zielladen-Plan hinzufügen",onClick:T(u=>t.addChargeTemplateSchedulePlan(r.id),["stop"])},{default:a(()=>[l(h,{icon:["fas","plus"]})]),_:1},8,["onClick"])]),help:a(()=>[...e[76]||(e[76]=[i(' Im Lademodus "Zielladen" wird der Ladestrom so angepasst, dass das Fahrzeug zum angegebenen Zeitpunkt den eingestellten SoC bzw. die einzuladende Energiemenge erreicht. Anhand des vorgegebenen Ladestroms wird der Zeitpunkt berechnet, an dem die Ladung spätestens starten muss.',-1),m("br",null,null,-1),i(' Ist der berechnete Zeitpunkt des Ladestarts noch nicht erreicht, wird mit Überschuss geladen. Auch nach Erreichen des Ziel-SoCs wird mit Überschuss geladen, solange bis das "SoC-Limit für das Fahrzeug" erreicht wird.',-1),m("br",null,null,-1),i(" Es wird nach den Vorgaben des Zeitplans geladen, dessen Zieltermin am nächsten liegt, bis max 20 Minuten nach dem angegebenen Zieltermin. ",-1)])]),default:a(()=>[e[77]||(e[77]=i(" Zielladepläne ",-1))]),_:2},1024),r.chargemode.scheduled_charging.plans.length==0?(d(),b(z,{key:0,subtype:"info"},{default:a(()=>[...e[78]||(e[78]=[i(" Es wurden noch keine Pläne für das Zielladen angelegt. ",-1)])]),_:1})):s("",!0),(d(!0),g(F,null,q(r.chargemode.scheduled_charging.plans,(u,P)=>(d(),b(te,{key:P,"model-value":u,"template-id":r.id,"dc-charging-enabled":t.dcChargingEnabled,"onUpdate:modelValue":D=>n.updateState(o,D,`chargemode.scheduled_charging.plans.${P}`),onSendCommand:e[3]||(e[3]=D=>n.$emit("sendCommand",D))},null,8,["model-value","template-id","dc-charging-enabled","onUpdate:modelValue"]))),128))]),_:2},1536),l(B,{ref_for:!0,ref:`card-${o}-eco_charging`,collapsible:!0,collapsed:!0,subtype:"secondary"},{header:a(()=>[...e[79]||(e[79]=[i(" Eco ",-1)])]),default:a(()=>[l(U,null,{help:a(()=>[...e[80]||(e[80]=[i(" Im Eco-Modus wird eine Preisgrenze vorgegeben. Wenn der Strompreis unter dieser Grenze liegt, wird mit dem eingestellten Ladestrom geladen und -falls vorhanden- zusätzlich mit dem Überschuss. Wenn die Preisgrenze überschritten wird, wird nur mit Überschuss geladen, wenn dieser vorhanden ist. ",-1)])]),default:a(()=>[e[81]||(e[81]=i("Arbeitsweise von Eco ",-1))]),_:1}),l(A,{title:`Minimaler Dauerstrom unter der Preisgrenze${t.dcChargingEnabled?" (AC)":""}`,min:6,max:32,step:1,unit:"A","model-value":r.chargemode.eco_charging.current,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.eco_charging.current")},null,8,["title","model-value","onUpdate:modelValue"]),t.dcChargingEnabled===!0?(d(),b(C,{key:0,title:"Minimale Dauerleistung unter der Preisgrenze (DC)",unit:"kW",min:0,"model-value":n.ac_current2dc_power(r.chargemode.eco_charging.dc_current),"onUpdate:modelValue":u=>n.updateState(o,n.dc_power2ac_current(u),"chargemode.eco_charging.dc_current")},null,8,["model-value","onUpdate:modelValue"])):s("",!0),l(_,{title:"Anzahl Phasen bei Überschuss",buttons:[{buttonValue:1,text:"1"},{buttonValue:3,text:"Maximum"},{buttonValue:0,text:"Automatik"}],"model-value":r.chargemode.eco_charging.phases_to_use,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.eco_charging.phases_to_use")},{help:a(()=>[...e[82]||(e[82]=[i(' Hier kann eingestellt werden, ob Ladevorgänge mit einer Phase oder dem möglichen Maximum in Abhängigkeit der "Ladepunkt"- und "Fahrzeug"-Einstellungen durchgeführt werden. Im Modus "Automatik" entscheidet die Regelung, welche Einstellung genutzt wird, um den verfügbaren Überschuss in die Fahrzeuge zu laden. Voraussetzung ist die verbaute Umschaltmöglichkeit zwischen einer und mehreren Phasen (sog. 1p3p).',-1),m("br",null,null,-1),i(" Wird die eingestellte Preisgrenze unterschritten, wird immer mit der maximalen Anzahl Phasen geladen. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(_,{title:"Begrenzung",buttons:[{buttonValue:"none",text:"Keine"},{buttonValue:"soc",text:"Fahrzeug-SoC"},{buttonValue:"amount",text:"Energie"}],"model-value":r.chargemode.eco_charging.limit.selected,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.eco_charging.limit.selected")},{help:a(()=>[...e[83]||(e[83]=[i(" Eco kann ohne Fahrzeug-SoC-Begrenzung (Aus), mit Begrenzung des Fahrzeug-SoC (SoC) bei konfiguriertem SoC-Auslesemodul oder mittels Vorgabe eine gewünschten Energiemenge in kWh (Energie) genutzt werden. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(A,{title:"SoC-Limit für das Fahrzeug",min:5,max:100,step:5,unit:"%","model-value":r.chargemode.eco_charging.limit.soc,"onUpdate:modelValue":u=>n.updateState(o,u,"chargemode.eco_charging.limit.soc")},{help:a(()=>[...e[84]||(e[84]=[i(' Um die Fahrzeug-SoC-Begrenzung nutzen zu können, muss ein SoC-Modul für das jeweilige Fahrzeug eingerichtet sein (siehe "Konfiguration" -> "Fahrzeuge" -> "SoC-Modul"). ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(C,{title:"Energie-Limit",unit:"kWh",min:1,step:1,"model-value":r.chargemode.eco_charging.limit.amount/1e3,"onUpdate:modelValue":u=>n.updateState(o,u*1e3,"chargemode.eco_charging.limit.amount")},{help:a(()=>[...e[85]||(e[85]=[i(" Die geladene Energiemenge wird nach dem Anstecken neu gezählt. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),n.$store.state.mqtt["openWB/optional/ep/configured"]?s("",!0):(d(),b(z,{key:1,subtype:"warning"},{default:a(()=>[...e[86]||(e[86]=[i(" Bitte in den übergreifenden Ladeeinstellungen einen Strompreis-Anbieter konfigurieren. Ohne Strompreis-Anbieter wird im Modus Eco nur geladen, wenn Überschuss vorhanden ist. ",-1)])]),_:1})),l(C,{title:"Preisgrenze für strompreisbasiertes Laden",min:"-80",max:"80",step:"0.01",precision:2,unit:"ct/kWh","model-value":r.chargemode.eco_charging.max_price*1e5,"onUpdate:modelValue":u=>n.updateState(o,parseFloat((u/1e5).toFixed(7)),"chargemode.eco_charging.max_price")},null,8,["model-value","onUpdate:modelValue"])]),_:2},1536),v.installAssistantActive?s("",!0):(d(),g("div",vn,[e[90]||(e[90]=m("hr",null,null,-1)),l(_,{title:"Zeitladen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":r.time_charging.active,"onUpdate:modelValue":u=>n.updateState(o,u,"time_charging.active")},{help:a(()=>[...e[87]||(e[87]=[m("p",null,' Der Lademodus Zeit kann parallel zu einem der anderen Lademodi aktiviert werden. Die Auswahl des Lademodus, der in der Regelung genutzt wird, erfolgt anhand der Übersicht in der Hilfe bei "Aktiver Lademodus". Wenn kein Zeitplan aktiv ist oder das Limit des Zeitplans erreicht wurde, wird der Lademodus verwendet, der bei "Aktiver Lademodus" ausgewählt ist. ',-1),m("p",null," Mit einem Zeitplan kann ein klar abgegrenzter Zeitbereich zum Fahrzeugladen definiert werden. Dies wird häufig genutzt, um einem Fahrzeug kurz vor der Abfahrt Strom anzubieten, damit dessen Vorklimatisierung nicht aus dem Fahrzeugakku, sondern aus der openWB bezogen wird (enteisen, vorwärmen, abkühlen). Nicht von der Vorklimatisierung benötigter Strom erhöht dabei den Fahrzeug-SoC. Um das Stromnetz am Morgen nicht unnötig zu strapazieren, sollte eine moderate Stromvorgabe und ein beschränkter Zeitbereich vorgegeben werden (z.B. max. 10A; 30min - in Übereinstimmung mit den Einstellungen zur Vorklimatisierung in der Fahrzeug-App). ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),l(B,{ref_for:!0,ref:`card-${o}-scheduled_charging`,collapsible:!0,collapsed:!0,subtype:"secondary"},{header:a(()=>[...e[88]||(e[88]=[i(" Zeitladen-Pläne ",-1)])]),actions:a(()=>[l(k,{class:"bg-success clickable",title:"Neuen Zeitladen-Plan hinzufügen",onClick:T(u=>t.addChargeTemplateTimeChargingPlan(r.id),["stop"])},{default:a(()=>[l(h,{icon:["fas","plus"]})]),_:1},8,["onClick"])]),default:a(()=>[(r.time_charging.plans??[]).length==0?(d(),b(z,{key:0,subtype:"info"},{default:a(()=>[...e[89]||(e[89]=[i(" Es wurden noch keine Pläne für das Zeitladen angelegt. ",-1)])]),_:1})):s("",!0),(d(!0),g(F,null,q(r.time_charging.plans??[],(u,P)=>(d(),b(le,{key:P,"model-value":u,"template-id":r.id,"dc-charging-enabled":t.dcChargingEnabled,"onUpdate:modelValue":D=>n.updateState(o,D,`time_charging.plans.${P}`),onSendCommand:e[4]||(e[4]=D=>n.$emit("sendCommand",D))},null,8,["model-value","template-id","dc-charging-enabled","onUpdate:modelValue"]))),128))]),_:2},1536)]))]),_:2},1032,["title","collapsed"]))),128))]))]),_:1},8,["collapsed"]),l(ae,{"form-name":"vehicleConfigForm",onSave:e[5]||(e[5]=r=>n.$emit("save",n.mqttTopicsToPublish)),onReset:e[6]||(e[6]=r=>n.$emit("reset")),onDefaults:e[7]||(e[7]=r=>n.$emit("defaults"))})])])],64)}const wn=Z(Qe,[["render",_n],["__file","/opt/openWB-dev/openwb-ui-settings/src/views/VehicleConfiguration.vue"]]),Sn=Object.freeze(Object.defineProperty({__proto__:null,default:wn},Symbol.toStringTag,{value:"Module"}));export{_e as V,wn as a,Sn as b}; diff --git a/web/settings/assets/backup_cloud-_r5i9yKm.js b/web/settings/assets/backup_cloud-B6mtrEtH.js similarity index 89% rename from web/settings/assets/backup_cloud-_r5i9yKm.js rename to web/settings/assets/backup_cloud-B6mtrEtH.js index a55766246d..edbbaf821b 100644 --- a/web/settings/assets/backup_cloud-_r5i9yKm.js +++ b/web/settings/assets/backup_cloud-B6mtrEtH.js @@ -1 +1 @@ -import{B as r}from"./DataManagement-CkfxmcJu.js";import{_ as p,m as u,l as i,f as l,q as d,u as c,B as o,y as n}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"BackupCloudNfs",mixins:[r]},m={class:"backup-cloud-nfs"};function _(t,e,b,k,v,B){const a=u("openwb-base-text-input");return i(),l("div",m,[d(a,{title:"Pfad zum NFS Share",pattern:"^([^/: ]+):(\\/[^/: ]+)+$",required:"","model-value":t.backupCloud.configuration.nfs_share,"onUpdate:modelValue":e[0]||(e[0]=s=>t.updateConfiguration(s,"configuration.nfs_share"))},{help:c(()=>[...e[1]||(e[1]=[o(" 1. IP basierter Pfad: 1.2.3.4:/pfad/zum/nfs-share",-1),n("br",null,null,-1),o(" 2. Host (FQDN) basierter Pfad: backupserver.domain.net:/pfad/zum/nfs-share",-1),n("br",null,null,-1),o(' Bitte entgegen der Syntax das Protokoll nicht davor schreiben. Falsch wäre, "nfs://" davor zu setzen. ',-1)])]),_:1},8,["model-value"])])}const V=p(f,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/backup_clouds/nfs/backup_cloud.vue"]]);export{V as default}; +import{B as r}from"./DataManagement-CnuBQnBT.js";import{_ as p,m as u,l as i,f as l,q as d,u as c,B as o,y as n}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"BackupCloudNfs",mixins:[r]},m={class:"backup-cloud-nfs"};function _(t,e,b,k,v,B){const a=u("openwb-base-text-input");return i(),l("div",m,[d(a,{title:"Pfad zum NFS Share",pattern:"^([^/: ]+):(\\/[^/: ]+)+$",required:"","model-value":t.backupCloud.configuration.nfs_share,"onUpdate:modelValue":e[0]||(e[0]=s=>t.updateConfiguration(s,"configuration.nfs_share"))},{help:c(()=>[...e[1]||(e[1]=[o(" 1. IP basierter Pfad: 1.2.3.4:/pfad/zum/nfs-share",-1),n("br",null,null,-1),o(" 2. Host (FQDN) basierter Pfad: backupserver.domain.net:/pfad/zum/nfs-share",-1),n("br",null,null,-1),o(' Bitte entgegen der Syntax das Protokoll nicht davor schreiben. Falsch wäre, "nfs://" davor zu setzen. ',-1)])]),_:1},8,["model-value"])])}const V=p(f,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/backup_clouds/nfs/backup_cloud.vue"]]);export{V as default}; diff --git a/web/settings/assets/backup_cloud-CmEgo92Y.js b/web/settings/assets/backup_cloud-CkbLK3q6.js similarity index 95% rename from web/settings/assets/backup_cloud-CmEgo92Y.js rename to web/settings/assets/backup_cloud-CkbLK3q6.js index fb1fae8422..ad764a29ff 100644 --- a/web/settings/assets/backup_cloud-CmEgo92Y.js +++ b/web/settings/assets/backup_cloud-CkbLK3q6.js @@ -1 +1 @@ -import{B as s}from"./DataManagement-CkfxmcJu.js";import{_ as d,m as r,l as m,f as b,q as u,u as i,B as a,y as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"BackupCloudSamba",mixins:[s]},g={class:"backup-cloud-samba"};function k(n,e,v,C,c,w){const t=r("openwb-base-text-input"),p=r("openwb-base-number-input");return m(),b("div",g,[u(t,{title:"Server",subtype:"host",required:"","model-value":n.backupCloud.configuration.smb_server,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.smb_server"))},null,8,["model-value"]),u(t,{title:"Freigabe",required:"","model-value":n.backupCloud.configuration.smb_share,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.smb_share"))},null,8,["model-value"]),u(t,{title:"Unterordner (optional)","model-value":n.backupCloud.configuration.smb_path,pattern:'(^\\/$)|(^([^\\\\:"\\|*?<>]+\\/)+$)',required:"","onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.smb_path"))},{help:i(()=>[...e[6]||(e[6]=[a(" Jeder Unterordner muss mit / enden.",-1),l("br",null,null,-1),a(' Die Zeichen \\:"|*?<> sind verboten!',-1),l("br",null,null,-1),a(" Beispiel 1: openwb/ ",-1),l("br",null,null,-1),a(" Beispiel 2: openwb/lp2/ ",-1)])]),_:1},8,["model-value"]),u(t,{title:"Benutzer",subtype:"user","model-value":n.backupCloud.configuration.smb_user,"onUpdate:modelValue":e[3]||(e[3]=o=>n.updateConfiguration(o,"configuration.smb_user"))},null,8,["model-value"]),u(t,{title:"Kennwort",subtype:"password","model-value":n.backupCloud.configuration.smb_password,"onUpdate:modelValue":e[4]||(e[4]=o=>n.updateConfiguration(o,"configuration.smb_password"))},null,8,["model-value"]),u(p,{title:"Anzahl Backups aufbewahren","model-value":n.backupCloud.configuration.max_backups??0,min:0,max:100,required:"",step:1,"onUpdate:modelValue":e[5]||(e[5]=o=>n.updateConfiguration(o==null||o===""?0:Number(o)||0,"configuration.max_backups"))},{help:i(()=>[...e[7]||(e[7]=[a(" 0 = keine automatische Löschung.",-1),l("br",null,null,-1),a(' Bei Werten > 0 werden nur die neuesten Backups behalten, ältere mit dem Prefix "openwb_backup_" werden gelöscht. ',-1)])]),_:1},8,["model-value"])])}const S=d(f,[["render",k],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/backup_clouds/samba/backup_cloud.vue"]]);export{S as default}; +import{B as s}from"./DataManagement-CnuBQnBT.js";import{_ as d,m as r,l as m,f as b,q as u,u as i,B as a,y as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"BackupCloudSamba",mixins:[s]},g={class:"backup-cloud-samba"};function k(n,e,v,C,c,w){const t=r("openwb-base-text-input"),p=r("openwb-base-number-input");return m(),b("div",g,[u(t,{title:"Server",subtype:"host",required:"","model-value":n.backupCloud.configuration.smb_server,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.smb_server"))},null,8,["model-value"]),u(t,{title:"Freigabe",required:"","model-value":n.backupCloud.configuration.smb_share,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.smb_share"))},null,8,["model-value"]),u(t,{title:"Unterordner (optional)","model-value":n.backupCloud.configuration.smb_path,pattern:'(^\\/$)|(^([^\\\\:"\\|*?<>]+\\/)+$)',required:"","onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.smb_path"))},{help:i(()=>[...e[6]||(e[6]=[a(" Jeder Unterordner muss mit / enden.",-1),l("br",null,null,-1),a(' Die Zeichen \\:"|*?<> sind verboten!',-1),l("br",null,null,-1),a(" Beispiel 1: openwb/ ",-1),l("br",null,null,-1),a(" Beispiel 2: openwb/lp2/ ",-1)])]),_:1},8,["model-value"]),u(t,{title:"Benutzer",subtype:"user","model-value":n.backupCloud.configuration.smb_user,"onUpdate:modelValue":e[3]||(e[3]=o=>n.updateConfiguration(o,"configuration.smb_user"))},null,8,["model-value"]),u(t,{title:"Kennwort",subtype:"password","model-value":n.backupCloud.configuration.smb_password,"onUpdate:modelValue":e[4]||(e[4]=o=>n.updateConfiguration(o,"configuration.smb_password"))},null,8,["model-value"]),u(p,{title:"Anzahl Backups aufbewahren","model-value":n.backupCloud.configuration.max_backups??0,min:0,max:100,required:"",step:1,"onUpdate:modelValue":e[5]||(e[5]=o=>n.updateConfiguration(o==null||o===""?0:Number(o)||0,"configuration.max_backups"))},{help:i(()=>[...e[7]||(e[7]=[a(" 0 = keine automatische Löschung.",-1),l("br",null,null,-1),a(' Bei Werten > 0 werden nur die neuesten Backups behalten, ältere mit dem Prefix "openwb_backup_" werden gelöscht. ',-1)])]),_:1},8,["model-value"])])}const S=d(f,[["render",k],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/backup_clouds/samba/backup_cloud.vue"]]);export{S as default}; diff --git a/web/settings/assets/backup_cloud-B9sEmM_b.js b/web/settings/assets/backup_cloud-DAnrhTL5.js similarity index 90% rename from web/settings/assets/backup_cloud-B9sEmM_b.js rename to web/settings/assets/backup_cloud-DAnrhTL5.js index f77ad8ff4a..a602b515f2 100644 --- a/web/settings/assets/backup_cloud-B9sEmM_b.js +++ b/web/settings/assets/backup_cloud-DAnrhTL5.js @@ -1 +1 @@ -import{B as r}from"./DataManagement-CkfxmcJu.js";import{_ as p,m as a,l as d,f as m,q as u,u as s,B as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const b={name:"BackupCloudNextCloud",mixins:[r]},c={class:"backup-cloud-next-cloud"};function f(n,e,k,g,C,w){const t=a("openwb-base-text-input"),l=a("openwb-base-number-input");return d(),m("div",c,[u(t,{title:"Cloud-URL",subtype:"url",required:"","model-value":n.backupCloud.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},{help:s(()=>[...e[4]||(e[4]=[i(" Die Cloud-URL wird in der Form 'https://nextcloud-url' und Benutzername im Eingabefeld oder mit Zugangstoken erwartet. Die URL kann je nach NextCloud Installation so 'https://nextcloud-url/s/user_token' oder so 'https://nextcloud-url/index.php/s/user_token' aussehen. ",-1)])]),_:1},8,["model-value"]),u(t,{title:"Benutzername",subtype:"user","model-value":n.backupCloud.configuration.user,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.user"))},null,8,["model-value"]),u(t,{title:"Passwort",subtype:"password","model-value":n.backupCloud.configuration.password,"onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.password"))},null,8,["model-value"]),u(l,{title:"Anzahl Backups aufbewahren",min:0,step:1,required:"","model-value":n.backupCloud.configuration.max_backups??0,"onUpdate:modelValue":e[3]||(e[3]=o=>n.updateConfiguration(o==null||o===""?0:Number(o)||0,"configuration.max_backups"))},{help:s(()=>[...e[5]||(e[5]=[i(" 0 = keine automatische Löschung; sonst werden nur die neuesten N Backups behalten. ",-1)])]),_:1},8,["model-value"])])}const q=p(b,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/backup_clouds/nextcloud/backup_cloud.vue"]]);export{q as default}; +import{B as r}from"./DataManagement-CnuBQnBT.js";import{_ as p,m as a,l as d,f as m,q as u,u as s,B as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const b={name:"BackupCloudNextCloud",mixins:[r]},c={class:"backup-cloud-next-cloud"};function f(n,e,k,g,C,w){const t=a("openwb-base-text-input"),l=a("openwb-base-number-input");return d(),m("div",c,[u(t,{title:"Cloud-URL",subtype:"url",required:"","model-value":n.backupCloud.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},{help:s(()=>[...e[4]||(e[4]=[i(" Die Cloud-URL wird in der Form 'https://nextcloud-url' und Benutzername im Eingabefeld oder mit Zugangstoken erwartet. Die URL kann je nach NextCloud Installation so 'https://nextcloud-url/s/user_token' oder so 'https://nextcloud-url/index.php/s/user_token' aussehen. ",-1)])]),_:1},8,["model-value"]),u(t,{title:"Benutzername",subtype:"user","model-value":n.backupCloud.configuration.user,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.user"))},null,8,["model-value"]),u(t,{title:"Passwort",subtype:"password","model-value":n.backupCloud.configuration.password,"onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.password"))},null,8,["model-value"]),u(l,{title:"Anzahl Backups aufbewahren",min:0,step:1,required:"","model-value":n.backupCloud.configuration.max_backups??0,"onUpdate:modelValue":e[3]||(e[3]=o=>n.updateConfiguration(o==null||o===""?0:Number(o)||0,"configuration.max_backups"))},{help:s(()=>[...e[5]||(e[5]=[i(" 0 = keine automatische Löschung; sonst werden nur die neuesten N Backups behalten. ",-1)])]),_:1},8,["model-value"])])}const q=p(b,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/backup_clouds/nextcloud/backup_cloud.vue"]]);export{q as default}; diff --git a/web/settings/assets/backup_cloud-BlnBFHza.js b/web/settings/assets/backup_cloud-DkNDL_nu.js similarity index 94% rename from web/settings/assets/backup_cloud-BlnBFHza.js rename to web/settings/assets/backup_cloud-DkNDL_nu.js index fedefb22e5..c955be9513 100644 --- a/web/settings/assets/backup_cloud-BlnBFHza.js +++ b/web/settings/assets/backup_cloud-DkNDL_nu.js @@ -1 +1 @@ -import{B as c}from"./DataManagement-CkfxmcJu.js";import{_ as m,m as a,l as b,f,q as t,u as r,B as n,y as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const g={name:"BackupCloudOneDrive",mixins:[c]},v={class:"backup-cloud-one-drive"};function k(o,e,h,w,B,C){const d=a("openwb-base-alert"),u=a("openwb-base-text-input"),p=a("openwb-base-heading"),l=a("openwb-base-button-input");return b(),f("div",v,[t(d,{subtype:"info"},{default:r(()=>[...e[3]||(e[3]=[n(" Zum Abruf der Zugangsberechtigung bitte die Konfiguration speichern, dann die Schritte 1-4 durchführen und danach die Konfiguration erneut speichern. ",-1),i("br",null,null,-1),n(" Auth Code und URL werden nur einmal benötigt werden nach erfolgreicher Autorisierung wieder gelöscht. ",-1)])]),_:1}),t(u,{title:"Backupverzeichnis in OneDrive",subtype:"text",required:"",pattern:"^/(.*/)*","model-value":o.backupCloud.configuration.backuppath,"onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.backuppath"))},{help:r(()=>[...e[4]||(e[4]=[n(" In diesem Verzeichnis werden die Backupdateien erstellt. Bitte den Pfad mit / beenden. ",-1),i("br",null,null,-1),n(" Beispiel: /openWB/Backup/ ",-1)])]),_:1},8,["model-value"]),t(u,{title:"Anmeldedaten auf openWB gespeichert",readonly:"","model-value":o.backupCloud.configuration.persistent_tokencache?"Ja":"Nein"},null,8,["model-value"]),t(p,null,{default:r(()=>[...e[5]||(e[5]=[n(" Zugang zu OneDrive für diese openWB autorisieren ",-1)])]),_:1}),t(l,{title:"1. Anmeldeanforderung erstellen","button-text":"Autorisierungs-Code anfordern",subtype:"success",onButtonClicked:e[1]||(e[1]=s=>o.sendSystemCommand("requestMSALAuthCode",{}))},{help:r(()=>[...e[6]||(e[6]=[n(" Es werden Zugangstokens für OneDrive angefordert. Diese werden nur lokal auf dieser openWB gespeichert. Genutzt wird Device Flow mit public application.",-1),i("br",null,null,-1),n(" Weitere Infos:",-1),i("br",null,null,-1),i("a",{href:"https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-device-code",target:"_blank",rel:"noopener noreferrer"},"https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-device-code",-1),i("a",{href:"https://learn.microsoft.com/en-us/azure/active-directory/develop/msal-client-applications",target:"_blank",rel:"noopener noreferrer"},"https://learn.microsoft.com/en-us/azure/active-directory/develop/msal-client-applications",-1)])]),_:1}),t(u,{title:"2. Diesen Code kopieren",subtype:"text",readonly:"","model-value":o.backupCloud.configuration.authcode},null,8,["model-value"]),t(u,{title:"3. Anmelde-URL aufrufen",subtype:"url",readonly:"","model-value":o.backupCloud.configuration.authurl},{help:r(()=>[...e[7]||(e[7]=[n(" Diese URL im Browser öffnen und den Code eingeben. Dies erzeugt die notwendigen Zugangsberechtigung für diese openWB. ",-1)])]),_:1},8,["model-value"]),t(l,{title:"4. Token abrufen und speichern","button-text":"Autorisierungs-Token abrufen",subtype:"success",onButtonClicked:e[2]||(e[2]=s=>o.sendSystemCommand("retrieveMSALTokens",{}))},{help:r(()=>[...e[8]||(e[8]=[n(" Zugangstoken wird abgerufen und gespeichert, damit das Backup durchgeführt werden kann. Zugangstoken werden nur lokal auf dieser openWB gespeichert. ",-1)])]),_:1})])}const L=m(g,[["render",k],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/backup_clouds/onedrive/backup_cloud.vue"]]);export{L as default}; +import{B as c}from"./DataManagement-CnuBQnBT.js";import{_ as m,m as a,l as b,f,q as t,u as r,B as n,y as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const g={name:"BackupCloudOneDrive",mixins:[c]},v={class:"backup-cloud-one-drive"};function k(o,e,h,w,B,C){const d=a("openwb-base-alert"),u=a("openwb-base-text-input"),p=a("openwb-base-heading"),l=a("openwb-base-button-input");return b(),f("div",v,[t(d,{subtype:"info"},{default:r(()=>[...e[3]||(e[3]=[n(" Zum Abruf der Zugangsberechtigung bitte die Konfiguration speichern, dann die Schritte 1-4 durchführen und danach die Konfiguration erneut speichern. ",-1),i("br",null,null,-1),n(" Auth Code und URL werden nur einmal benötigt werden nach erfolgreicher Autorisierung wieder gelöscht. ",-1)])]),_:1}),t(u,{title:"Backupverzeichnis in OneDrive",subtype:"text",required:"",pattern:"^/(.*/)*","model-value":o.backupCloud.configuration.backuppath,"onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.backuppath"))},{help:r(()=>[...e[4]||(e[4]=[n(" In diesem Verzeichnis werden die Backupdateien erstellt. Bitte den Pfad mit / beenden. ",-1),i("br",null,null,-1),n(" Beispiel: /openWB/Backup/ ",-1)])]),_:1},8,["model-value"]),t(u,{title:"Anmeldedaten auf openWB gespeichert",readonly:"","model-value":o.backupCloud.configuration.persistent_tokencache?"Ja":"Nein"},null,8,["model-value"]),t(p,null,{default:r(()=>[...e[5]||(e[5]=[n(" Zugang zu OneDrive für diese openWB autorisieren ",-1)])]),_:1}),t(l,{title:"1. Anmeldeanforderung erstellen","button-text":"Autorisierungs-Code anfordern",subtype:"success",onButtonClicked:e[1]||(e[1]=s=>o.sendSystemCommand("requestMSALAuthCode",{}))},{help:r(()=>[...e[6]||(e[6]=[n(" Es werden Zugangstokens für OneDrive angefordert. Diese werden nur lokal auf dieser openWB gespeichert. Genutzt wird Device Flow mit public application.",-1),i("br",null,null,-1),n(" Weitere Infos:",-1),i("br",null,null,-1),i("a",{href:"https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-device-code",target:"_blank",rel:"noopener noreferrer"},"https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-device-code",-1),i("a",{href:"https://learn.microsoft.com/en-us/azure/active-directory/develop/msal-client-applications",target:"_blank",rel:"noopener noreferrer"},"https://learn.microsoft.com/en-us/azure/active-directory/develop/msal-client-applications",-1)])]),_:1}),t(u,{title:"2. Diesen Code kopieren",subtype:"text",readonly:"","model-value":o.backupCloud.configuration.authcode},null,8,["model-value"]),t(u,{title:"3. Anmelde-URL aufrufen",subtype:"url",readonly:"","model-value":o.backupCloud.configuration.authurl},{help:r(()=>[...e[7]||(e[7]=[n(" Diese URL im Browser öffnen und den Code eingeben. Dies erzeugt die notwendigen Zugangsberechtigung für diese openWB. ",-1)])]),_:1},8,["model-value"]),t(l,{title:"4. Token abrufen und speichern","button-text":"Autorisierungs-Token abrufen",subtype:"success",onButtonClicked:e[2]||(e[2]=s=>o.sendSystemCommand("retrieveMSALTokens",{}))},{help:r(()=>[...e[8]||(e[8]=[n(" Zugangstoken wird abgerufen und gespeichert, damit das Backup durchgeführt werden kann. Zugangstoken werden nur lokal auf dieser openWB gespeichert. ",-1)])]),_:1})])}const L=m(g,[["render",k],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/backup_clouds/onedrive/backup_cloud.vue"]]);export{L as default}; diff --git a/web/settings/assets/bat-BTFg5iPr.js b/web/settings/assets/bat-9SDcoKgC.js similarity index 88% rename from web/settings/assets/bat-BTFg5iPr.js rename to web/settings/assets/bat-9SDcoKgC.js index 8bf4366d17..a6a4821782 100644 --- a/web/settings/assets/bat-BTFg5iPr.js +++ b/web/settings/assets/bat-9SDcoKgC.js @@ -1 +1 @@ -import{C as r}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as n,m as a,l as i,f as l,q as p,u as c,B as e,y as o}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceQCellsBat",mixins:[r]},m={class:"device-qcells-bat"};function u(_,t,b,f,v,x){const s=a("openwb-base-alert");return i(),l("div",m,[p(s,{subtype:"info"},{default:c(()=>[...t[0]||(t[0]=[e(" Die aktive Speichersteuerung erfolgt über das Solax Remote Control Modbus-Protokoll (Mode 4, Push Power-Positive/Negative).",-1),o("br",null,null,-1),e(" Unterstützte Hardware: QCells Q.VOLT HYB-G3-3P (Solax Gen4).",-1),o("br",null,null,-1),e(" openWB übergibt die Speicherleistung direkt als Push-Power an den Wechselrichter (0W = Entladesperre). ",-1)])]),_:1})])}const S=n(d,[["render",u],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/qcells/qcells/bat.vue"]]);export{S as default}; +import{C as r}from"./HardwareInstallation-M-k9qNJb.js";import{_ as n,m as a,l as i,f as l,q as p,u as c,B as e,y as o}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceQCellsBat",mixins:[r]},m={class:"device-qcells-bat"};function u(_,t,b,f,v,x){const s=a("openwb-base-alert");return i(),l("div",m,[p(s,{subtype:"info"},{default:c(()=>[...t[0]||(t[0]=[e(" Die aktive Speichersteuerung erfolgt über das Solax Remote Control Modbus-Protokoll (Mode 4, Push Power-Positive/Negative).",-1),o("br",null,null,-1),e(" Unterstützte Hardware: QCells Q.VOLT HYB-G3-3P (Solax Gen4).",-1),o("br",null,null,-1),e(" openWB übergibt die Speicherleistung direkt als Push-Power an den Wechselrichter (0W = Entladesperre). ",-1)])]),_:1})])}const S=n(d,[["render",u],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/qcells/qcells/bat.vue"]]);export{S as default}; diff --git a/web/settings/assets/bat-BmvkzpLQ.js b/web/settings/assets/bat-BAfAQbmI.js similarity index 81% rename from web/settings/assets/bat-BmvkzpLQ.js rename to web/settings/assets/bat-BAfAQbmI.js index f6cf035567..990192fa5a 100644 --- a/web/settings/assets/bat-BmvkzpLQ.js +++ b/web/settings/assets/bat-BAfAQbmI.js @@ -1 +1 @@ -import{C as r}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as p,m as n,l as m,f as d,q as t,u,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceDeyeBat",mixins:[r]},_={class:"device-deye-bat"};function b(o,e,f,v,g,w){const i=n("openwb-base-heading"),s=n("openwb-base-number-input");return m(),d("div",_,[t(i,null,{default:u(()=>[...e[1]||(e[1]=[l(" Einstellungen für Deye Batteriespeicher ",-1)])]),_:1}),t(s,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=a=>o.updateConfiguration(a,"configuration.modbus_id"))},null,8,["model-value"])])}const q=p(c,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/deye/deye/bat.vue"]]);export{q as default}; +import{C as r}from"./HardwareInstallation-M-k9qNJb.js";import{_ as p,m as n,l as m,f as d,q as t,u,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceDeyeBat",mixins:[r]},_={class:"device-deye-bat"};function b(o,e,f,v,g,w){const i=n("openwb-base-heading"),s=n("openwb-base-number-input");return m(),d("div",_,[t(i,null,{default:u(()=>[...e[1]||(e[1]=[l(" Einstellungen für Deye Batteriespeicher ",-1)])]),_:1}),t(s,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=a=>o.updateConfiguration(a,"configuration.modbus_id"))},null,8,["model-value"])])}const q=p(c,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/deye/deye/bat.vue"]]);export{q as default}; diff --git a/web/settings/assets/bat-Bf2-CBXC.js b/web/settings/assets/bat-BHkM8d9j.js similarity index 80% rename from web/settings/assets/bat-Bf2-CBXC.js rename to web/settings/assets/bat-BHkM8d9j.js index 77d77c6046..29b481cfb8 100644 --- a/web/settings/assets/bat-Bf2-CBXC.js +++ b/web/settings/assets/bat-BHkM8d9j.js @@ -1 +1 @@ -import{C as e}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as t,l as o,f as n}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const r={name:"DeviceZendureBat",mixins:[e]},i={class:"device-zendure-bat"};function s(p,c,a,m,d,_){return o(),n("div",i)}const C=t(r,[["render",s],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/zendure/zendure/bat.vue"]]);export{C as default}; +import{C as e}from"./HardwareInstallation-M-k9qNJb.js";import{_ as t,l as o,f as n}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const r={name:"DeviceZendureBat",mixins:[e]},i={class:"device-zendure-bat"};function s(p,c,a,m,d,_){return o(),n("div",i)}const C=t(r,[["render",s],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/zendure/zendure/bat.vue"]]);export{C as default}; diff --git a/web/settings/assets/bat-CjnsdiuU.js b/web/settings/assets/bat-BJmcvZen.js similarity index 84% rename from web/settings/assets/bat-CjnsdiuU.js rename to web/settings/assets/bat-BJmcvZen.js index c91f05fed9..b94ed32198 100644 --- a/web/settings/assets/bat-CjnsdiuU.js +++ b/web/settings/assets/bat-BJmcvZen.js @@ -1 +1 @@ -import{C as m}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as d,m as n,l,f as u,q as t,u as i,B as a}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceGoodWeBat",mixins:[m]},c={class:"device-goodwe-bat"};function b(o,e,f,g,w,x){const r=n("openwb-base-heading"),s=n("openwb-base-number-input");return l(),u("div",c,[t(r,null,{default:i(()=>[...e[1]||(e[1]=[a(" Einstellungen für GoodWe Batteriespeicher ",-1)])]),_:1}),t(s,{title:"GoodWe-Batterie-Index","model-value":o.component.configuration.battery_index,min:"1",max:"2","onUpdate:modelValue":e[0]||(e[0]=p=>o.updateConfiguration(p,"configuration.battery_index"))},{help:i(()=>[...e[2]||(e[2]=[a(" Wenn eine zweite Batterie am Wechselrichter angeschlossen ist, hier den Index 2 eintagen. Im Normalfall immer 1 eintragen. ",-1)])]),_:1},8,["model-value"])])}const V=d(_,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/good_we/good_we/bat.vue"]]);export{V as default}; +import{C as m}from"./HardwareInstallation-M-k9qNJb.js";import{_ as d,m as n,l,f as u,q as t,u as i,B as a}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceGoodWeBat",mixins:[m]},c={class:"device-goodwe-bat"};function b(o,e,f,g,w,x){const r=n("openwb-base-heading"),s=n("openwb-base-number-input");return l(),u("div",c,[t(r,null,{default:i(()=>[...e[1]||(e[1]=[a(" Einstellungen für GoodWe Batteriespeicher ",-1)])]),_:1}),t(s,{title:"GoodWe-Batterie-Index","model-value":o.component.configuration.battery_index,min:"1",max:"2","onUpdate:modelValue":e[0]||(e[0]=p=>o.updateConfiguration(p,"configuration.battery_index"))},{help:i(()=>[...e[2]||(e[2]=[a(" Wenn eine zweite Batterie am Wechselrichter angeschlossen ist, hier den Index 2 eintagen. Im Normalfall immer 1 eintragen. ",-1)])]),_:1},8,["model-value"])])}const V=d(_,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/good_we/good_we/bat.vue"]]);export{V as default}; diff --git a/web/settings/assets/bat-CaD2e0g2.js b/web/settings/assets/bat-BQnwI1OH.js similarity index 86% rename from web/settings/assets/bat-CaD2e0g2.js rename to web/settings/assets/bat-BQnwI1OH.js index 8f5de5acb5..55e18bafca 100644 --- a/web/settings/assets/bat-CaD2e0g2.js +++ b/web/settings/assets/bat-BQnwI1OH.js @@ -1 +1 @@ -import{C as u}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as p,m as t,l,f as m,q as i,u as d,B as b}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSunnyBoyBat",mixins:[u]},_={class:"device-sunnyboy-bat"};function f(o,e,v,g,y,w){const s=t("openwb-base-heading"),a=t("openwb-base-select-input"),r=t("openwb-base-number-input");return l(),m("div",_,[i(s,null,{default:d(()=>[...e[2]||(e[2]=[b(" Einstellungen für SMA Sunny Boy / Tripower / Tesvolt Batteriespeicher ",-1)])]),_:1}),i(a,{title:"Version","not-selected":"Bitte auswählen",options:[{value:0,text:"Hybrid Wechselrichter"},{value:1,text:"Sunny Boy Storage"},{value:2,text:"Tesvolt"}],"model-value":o.component.configuration.version,required:"","onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.version"))},null,8,["model-value"]),i(r,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"])])}const M=p(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/sma/sma_sunny_boy/bat.vue"]]);export{M as default}; +import{C as u}from"./HardwareInstallation-M-k9qNJb.js";import{_ as p,m as t,l,f as m,q as i,u as d,B as b}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSunnyBoyBat",mixins:[u]},_={class:"device-sunnyboy-bat"};function f(o,e,v,g,y,w){const s=t("openwb-base-heading"),a=t("openwb-base-select-input"),r=t("openwb-base-number-input");return l(),m("div",_,[i(s,null,{default:d(()=>[...e[2]||(e[2]=[b(" Einstellungen für SMA Sunny Boy / Tripower / Tesvolt Batteriespeicher ",-1)])]),_:1}),i(a,{title:"Version","not-selected":"Bitte auswählen",options:[{value:0,text:"Hybrid Wechselrichter"},{value:1,text:"Sunny Boy Storage"},{value:2,text:"Tesvolt"}],"model-value":o.component.configuration.version,required:"","onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.version"))},null,8,["model-value"]),i(r,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"])])}const M=p(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/sma/sma_sunny_boy/bat.vue"]]);export{M as default}; diff --git a/web/settings/assets/bat-CHbcjVCv.js b/web/settings/assets/bat-BRvYqgpg.js similarity index 90% rename from web/settings/assets/bat-CHbcjVCv.js rename to web/settings/assets/bat-BRvYqgpg.js index cabd67baa6..526bfbb7de 100644 --- a/web/settings/assets/bat-CHbcjVCv.js +++ b/web/settings/assets/bat-BRvYqgpg.js @@ -1 +1 @@ -import{C as l}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as r,m as t,l as u,f as m,q as i,u as d,B as b}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceOpenwbFlexBat",mixins:[l]},f={class:"device-openwb-flex-bat"};function _(o,e,v,w,g,x){const a=t("openwb-base-heading"),p=t("openwb-base-select-input"),s=t("openwb-base-number-input");return u(),m("div",f,[i(a,null,{default:d(()=>[...e[2]||(e[2]=[b(" Einstellungen für openWB-Flex Batteriespeicher ",-1)])]),_:1}),i(p,{title:"Zählermodell","not-selected":"Bitte auswählen",options:[{value:0,text:"MPM3PM"},{value:1,text:"SDM120"},{value:2,text:"SDM630/SDM72D-M"}],"model-value":o.component.configuration.version,required:"","onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.version"))},null,8,["model-value"]),i(s,{title:"Modbus-ID",required:"",min:1,max:255,"model-value":o.component.configuration.id,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.id"))},null,8,["model-value"])])}const k=r(c,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/openwb/openwb_flex/bat.vue"]]);export{k as default}; +import{C as l}from"./HardwareInstallation-M-k9qNJb.js";import{_ as r,m as t,l as u,f as m,q as i,u as d,B as b}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceOpenwbFlexBat",mixins:[l]},f={class:"device-openwb-flex-bat"};function _(o,e,v,w,g,x){const a=t("openwb-base-heading"),p=t("openwb-base-select-input"),s=t("openwb-base-number-input");return u(),m("div",f,[i(a,null,{default:d(()=>[...e[2]||(e[2]=[b(" Einstellungen für openWB-Flex Batteriespeicher ",-1)])]),_:1}),i(p,{title:"Zählermodell","not-selected":"Bitte auswählen",options:[{value:0,text:"MPM3PM"},{value:1,text:"SDM120"},{value:2,text:"SDM630/SDM72D-M"}],"model-value":o.component.configuration.version,required:"","onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.version"))},null,8,["model-value"]),i(s,{title:"Modbus-ID",required:"",min:1,max:255,"model-value":o.component.configuration.id,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.id"))},null,8,["model-value"])])}const k=r(c,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/openwb/openwb_flex/bat.vue"]]);export{k as default}; diff --git a/web/settings/assets/bat-CsHZRmZS.js b/web/settings/assets/bat-BUfdEwE4.js similarity index 86% rename from web/settings/assets/bat-CsHZRmZS.js rename to web/settings/assets/bat-BUfdEwE4.js index 348fc234d6..1f557cfbd7 100644 --- a/web/settings/assets/bat-CsHZRmZS.js +++ b/web/settings/assets/bat-BUfdEwE4.js @@ -1 +1 @@ -import{C as r}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as n,m as o,l as i,f as s,q as a,u as p,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const m={name:"DeviceBatterXBat",mixins:[r]},l={class:"device-batterx-bat"};function d(u,e,_,b,f,x){const t=o("openwb-base-alert");return i(),s("div",l,[a(t,{subtype:"info"},{default:p(()=>[...e[0]||(e[0]=[c(" Der BatterX Speicher kann die Speicherentladung bei aktiver Speichersteuerung nur komplett sperren. Der teilweise Ausgleich durch Übergabe einer Entladeleistung an den Speicher ist nicht möglich. ",-1)])]),_:1})])}const D=n(m,[["render",d],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/batterx/batterx/bat.vue"]]);export{D as default}; +import{C as r}from"./HardwareInstallation-M-k9qNJb.js";import{_ as n,m as o,l as i,f as s,q as a,u as p,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const m={name:"DeviceBatterXBat",mixins:[r]},l={class:"device-batterx-bat"};function d(u,e,_,b,f,x){const t=o("openwb-base-alert");return i(),s("div",l,[a(t,{subtype:"info"},{default:p(()=>[...e[0]||(e[0]=[c(" Der BatterX Speicher kann die Speicherentladung bei aktiver Speichersteuerung nur komplett sperren. Der teilweise Ausgleich durch Übergabe einer Entladeleistung an den Speicher ist nicht möglich. ",-1)])]),_:1})])}const D=n(m,[["render",d],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/batterx/batterx/bat.vue"]]);export{D as default}; diff --git a/web/settings/assets/bat-B8bl9-_1.js b/web/settings/assets/bat-BX9u1onJ.js similarity index 89% rename from web/settings/assets/bat-B8bl9-_1.js rename to web/settings/assets/bat-BX9u1onJ.js index 92d6a60539..69e10072c2 100644 --- a/web/settings/assets/bat-B8bl9-_1.js +++ b/web/settings/assets/bat-BX9u1onJ.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as r,m as o,l,f as m,q as n,u,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceOpenwbBatkitBat",mixins:[p]},_={class:"device-openwb-batkit-bat"};function b(t,e,f,v,w,B){const i=o("openwb-base-heading"),s=o("openwb-base-select-input");return l(),m("div",_,[n(i,null,{default:u(()=>[...e[1]||(e[1]=[c(" Einstellungen für openWB EVU-Kit Batteriespeicher ",-1)])]),_:1}),n(s,{title:"Zählermodell","not-selected":"Bitte auswählen",options:[{value:0,text:"MPM3PM"},{value:1,text:"SDM120"},{value:2,text:"SDM630/SDM72D-M"}],"model-value":t.component.configuration.version,required:"","onUpdate:modelValue":e[0]||(e[0]=a=>t.updateConfiguration(a,"configuration.version"))},null,8,["model-value"])])}const E=r(d,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/openwb/openwb_bat_kit/bat.vue"]]);export{E as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as r,m as o,l,f as m,q as n,u,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceOpenwbBatkitBat",mixins:[p]},_={class:"device-openwb-batkit-bat"};function b(t,e,f,v,w,B){const i=o("openwb-base-heading"),s=o("openwb-base-select-input");return l(),m("div",_,[n(i,null,{default:u(()=>[...e[1]||(e[1]=[c(" Einstellungen für openWB EVU-Kit Batteriespeicher ",-1)])]),_:1}),n(s,{title:"Zählermodell","not-selected":"Bitte auswählen",options:[{value:0,text:"MPM3PM"},{value:1,text:"SDM120"},{value:2,text:"SDM630/SDM72D-M"}],"model-value":t.component.configuration.version,required:"","onUpdate:modelValue":e[0]||(e[0]=a=>t.updateConfiguration(a,"configuration.version"))},null,8,["model-value"])])}const E=r(d,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/openwb/openwb_bat_kit/bat.vue"]]);export{E as default}; diff --git a/web/settings/assets/bat-BXbHurWM.js b/web/settings/assets/bat-BY7L9xmm.js similarity index 94% rename from web/settings/assets/bat-BXbHurWM.js rename to web/settings/assets/bat-BY7L9xmm.js index a1acf2e80e..d77218f50b 100644 --- a/web/settings/assets/bat-BXbHurWM.js +++ b/web/settings/assets/bat-BY7L9xmm.js @@ -1 +1 @@ -import{C as v}from"./HardwareInstallation-Ln-RWgHD.js";import y from"./ModbusRegisterFields-CkQ0333X.js";import{_ as h,m as s,l as o,f as r,q as d,u as C,B as x,K as a,L as m,y as l,J as p,x as L}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const S=[{id:"power_total",title:"Leistung",entries:[{key:"power",addressRequired:!0}]},{id:"current",title:"Strom",entries:[{key:"current_L1",label:"Phase L1"},{key:"current_L2",label:"Phase L2"},{key:"current_L3",label:"Phase L3"}]},{id:"import",title:"Import",entries:[{key:"imported"}]},{id:"export",title:"Export",entries:[{key:"exported"}]},{id:"soc",title:"SOC",entries:[{key:"soc"}]},{id:"serial_number",title:"Seriennummer",entries:[{key:"serial_number"}]}],w={name:"DeviceGenericModbusBat",components:{ModbusRegisterFields:y},mixins:[v],data(){return{registerSections:S}},methods:{handleRegisterModelUpdate(i,{field:e,value:u}){this.updateConfiguration(u,`configuration.${i}.${e}`)}}},B={class:"device-generic-modbus-bat"},M={key:0};function R(i,e,u,V,c,b){const _=s("openwb-base-heading"),g=s("openwb-base-number-input"),f=s("modbus-register-fields");return o(),r("div",B,[d(_,null,{default:C(()=>[...e[1]||(e[1]=[x(" Einstellungen für Universell Modbus Batterie ",-1)])]),_:1}),d(g,{title:"Modbus ID",required:"","model-value":i.component.configuration.modbus_id,min:0,max:255,"onUpdate:modelValue":e[0]||(e[0]=n=>i.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"]),(o(!0),r(a,null,m(c.registerSections,n=>(o(),r("div",{key:n.id},[l("h4",null,p(n.title),1),(o(!0),r(a,null,m(n.entries,t=>(o(),r(a,{key:t.key},[e[2]||(e[2]=l("hr",{class:"modbus-divider"},null,-1)),l("div",null,[t.label?(o(),r("h5",M,p(t.label),1)):L("",!0),d(f,{"model-value":i.component.configuration[t.key],"address-required":!!t.addressRequired,"onUpdate:modelValue":k=>b.handleRegisterModelUpdate(t.key,k)},null,8,["model-value","address-required","onUpdate:modelValue"])])],64))),128))]))),128))])}const G=h(w,[["render",R],["__scopeId","data-v-3cf35b06"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/modbus/bat.vue"]]);export{G as default}; +import{C as v}from"./HardwareInstallation-M-k9qNJb.js";import y from"./ModbusRegisterFields-CkQ0333X.js";import{_ as h,m as s,l as o,f as r,q as d,u as C,B as x,K as a,L as m,y as l,J as p,x as L}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const S=[{id:"power_total",title:"Leistung",entries:[{key:"power",addressRequired:!0}]},{id:"current",title:"Strom",entries:[{key:"current_L1",label:"Phase L1"},{key:"current_L2",label:"Phase L2"},{key:"current_L3",label:"Phase L3"}]},{id:"import",title:"Import",entries:[{key:"imported"}]},{id:"export",title:"Export",entries:[{key:"exported"}]},{id:"soc",title:"SOC",entries:[{key:"soc"}]},{id:"serial_number",title:"Seriennummer",entries:[{key:"serial_number"}]}],w={name:"DeviceGenericModbusBat",components:{ModbusRegisterFields:y},mixins:[v],data(){return{registerSections:S}},methods:{handleRegisterModelUpdate(i,{field:e,value:u}){this.updateConfiguration(u,`configuration.${i}.${e}`)}}},B={class:"device-generic-modbus-bat"},M={key:0};function R(i,e,u,V,c,b){const _=s("openwb-base-heading"),g=s("openwb-base-number-input"),f=s("modbus-register-fields");return o(),r("div",B,[d(_,null,{default:C(()=>[...e[1]||(e[1]=[x(" Einstellungen für Universell Modbus Batterie ",-1)])]),_:1}),d(g,{title:"Modbus ID",required:"","model-value":i.component.configuration.modbus_id,min:0,max:255,"onUpdate:modelValue":e[0]||(e[0]=n=>i.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"]),(o(!0),r(a,null,m(c.registerSections,n=>(o(),r("div",{key:n.id},[l("h4",null,p(n.title),1),(o(!0),r(a,null,m(n.entries,t=>(o(),r(a,{key:t.key},[e[2]||(e[2]=l("hr",{class:"modbus-divider"},null,-1)),l("div",null,[t.label?(o(),r("h5",M,p(t.label),1)):L("",!0),d(f,{"model-value":i.component.configuration[t.key],"address-required":!!t.addressRequired,"onUpdate:modelValue":k=>b.handleRegisterModelUpdate(t.key,k)},null,8,["model-value","address-required","onUpdate:modelValue"])])],64))),128))]))),128))])}const G=h(w,[["render",R],["__scopeId","data-v-3cf35b06"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/modbus/bat.vue"]]);export{G as default}; diff --git a/web/settings/assets/bat-BQPcRXSE.js b/web/settings/assets/bat-BoNmQkKQ.js similarity index 97% rename from web/settings/assets/bat-BQPcRXSE.js rename to web/settings/assets/bat-BoNmQkKQ.js index 3e2ac493b9..203b2a7b76 100644 --- a/web/settings/assets/bat-BQPcRXSE.js +++ b/web/settings/assets/bat-BoNmQkKQ.js @@ -1 +1 @@ -import{C as u}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as m,m as d,l as p,f as g,q as l,u as i,B as n,y as a}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const h={name:"DeviceHttpBat",mixins:[u]},b={class:"device-http-bat"};function f(t,e,w,v,k,S){const s=d("openwb-base-heading"),o=d("openwb-base-text-input");return p(),g("div",b,[l(s,null,{default:i(()=>[...e[7]||(e[7]=[n(" Einstellungen für Http Batteriespeicher ",-1)])]),_:1}),l(o,{title:"Pfad für Leistung",subtype:"text",required:"",pattern:"^/[-a-zA-Z0-9@:%_\\+.~#?&/=]*","model-value":t.component.configuration.power_path,"onUpdate:modelValue":e[0]||(e[0]=r=>t.updateConfiguration(r,"configuration.power_path"))},{help:i(()=>[...e[8]||(e[8]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),a("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Leistung in Watt darstellt. ",-1)])]),_:1},8,["model-value"]),l(o,{title:"Pfad für Ladestand",subtype:"text",required:"",pattern:"^/[-a-zA-Z0-9@:%_\\+.~#?&/=]*","model-value":t.component.configuration.soc_path,"onUpdate:modelValue":e[1]||(e[1]=r=>t.updateConfiguration(r,"configuration.soc_path"))},{help:i(()=>[...e[9]||(e[9]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),a("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche den aktuellen Ladestand (SoC) in Prozent darstellt. ",-1)])]),_:1},8,["model-value"]),l(o,{title:"Pfad für Strom Phase 1",subtype:"text",pattern:"^(/[-a-zA-Z0-9@:%_\\+.~#?&/=]*)","model-value":t.component.configuration.current_l1_path,"onUpdate:modelValue":e[2]||(e[2]=r=>t.updateConfiguration(r,"configuration.current_l1_path"))},{help:i(()=>[...e[10]||(e[10]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),a("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Stromstärke der 1. Phase in Ampere darstellt.",-1),a("br",null,null,-1),n(" Wird dieses Feld leer gelassen, werden keine Phasenströme ermittelt und es kann kein Lastmanagement berechnet werden! ",-1)])]),_:1},8,["model-value"]),l(o,{title:"Pfad für Strom Phase 2",subtype:"text",pattern:"^(/[-a-zA-Z0-9@:%_\\+.~#?&/=]*)","model-value":t.component.configuration.current_l2_path,"onUpdate:modelValue":e[3]||(e[3]=r=>t.updateConfiguration(r,"configuration.current_l2_path"))},{help:i(()=>[...e[11]||(e[11]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),a("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Stromstärke der 2. Phase in Ampere darstellt.",-1),a("br",null,null,-1),n(" Wird dieses Feld leer gelassen, werden keine Phasenströme ermittelt und es kann kein Lastmanagement berechnet werden! ",-1)])]),_:1},8,["model-value"]),l(o,{title:"Pfad für Strom Phase 3",subtype:"text",pattern:"^(/[-a-zA-Z0-9@:%_\\+.~#?&/=]*)","model-value":t.component.configuration.current_l3_path,"onUpdate:modelValue":e[4]||(e[4]=r=>t.updateConfiguration(r,"configuration.current_l3_path"))},{help:i(()=>[...e[12]||(e[12]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),a("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Stromstärke der 3. Phase in Ampere darstellt.",-1),a("br",null,null,-1),n(" Wird dieses Feld leer gelassen, werden keine Phasenströme ermittelt und es kann kein Lastmanagement berechnet werden! ",-1)])]),_:1},8,["model-value"]),l(o,{title:"Pfad für Zählerstand laden",subtype:"text",pattern:"^(/[-a-zA-Z0-9@:%_\\+.~#?&/=]*)","model-value":t.component.configuration.imported_path,"onUpdate:modelValue":e[5]||(e[5]=r=>t.updateConfiguration(r,"configuration.imported_path"))},{help:i(()=>[...e[13]||(e[13]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),a("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche den aktuellen absoluten Zählerstand in Wh darstellt. ",-1)])]),_:1},8,["model-value"]),l(o,{title:"Pfad für Zählerstand entladen",subtype:"text",pattern:"^(/[-a-zA-Z0-9@:%_\\+.~#?&/=]*)","model-value":t.component.configuration.exported_path,"onUpdate:modelValue":e[6]||(e[6]=r=>t.updateConfiguration(r,"configuration.exported_path"))},{help:i(()=>[...e[14]||(e[14]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),a("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche den aktuellen absoluten Zählerstand in Wh darstellt.",-1),a("br",null,null,-1),n(" Wird dieses Feld leer gelassen, werden keine Phasenströme ermittelt und es kann kein Lastmanagement berechnet werden! ",-1)])]),_:1},8,["model-value"])])}const _=m(h,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/http/bat.vue"]]);export{_ as default}; +import{C as u}from"./HardwareInstallation-M-k9qNJb.js";import{_ as m,m as d,l as p,f as g,q as l,u as i,B as n,y as a}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const h={name:"DeviceHttpBat",mixins:[u]},b={class:"device-http-bat"};function f(t,e,w,v,k,S){const s=d("openwb-base-heading"),o=d("openwb-base-text-input");return p(),g("div",b,[l(s,null,{default:i(()=>[...e[7]||(e[7]=[n(" Einstellungen für Http Batteriespeicher ",-1)])]),_:1}),l(o,{title:"Pfad für Leistung",subtype:"text",required:"",pattern:"^/[-a-zA-Z0-9@:%_\\+.~#?&/=]*","model-value":t.component.configuration.power_path,"onUpdate:modelValue":e[0]||(e[0]=r=>t.updateConfiguration(r,"configuration.power_path"))},{help:i(()=>[...e[8]||(e[8]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),a("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Leistung in Watt darstellt. ",-1)])]),_:1},8,["model-value"]),l(o,{title:"Pfad für Ladestand",subtype:"text",required:"",pattern:"^/[-a-zA-Z0-9@:%_\\+.~#?&/=]*","model-value":t.component.configuration.soc_path,"onUpdate:modelValue":e[1]||(e[1]=r=>t.updateConfiguration(r,"configuration.soc_path"))},{help:i(()=>[...e[9]||(e[9]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),a("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche den aktuellen Ladestand (SoC) in Prozent darstellt. ",-1)])]),_:1},8,["model-value"]),l(o,{title:"Pfad für Strom Phase 1",subtype:"text",pattern:"^(/[-a-zA-Z0-9@:%_\\+.~#?&/=]*)","model-value":t.component.configuration.current_l1_path,"onUpdate:modelValue":e[2]||(e[2]=r=>t.updateConfiguration(r,"configuration.current_l1_path"))},{help:i(()=>[...e[10]||(e[10]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),a("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Stromstärke der 1. Phase in Ampere darstellt.",-1),a("br",null,null,-1),n(" Wird dieses Feld leer gelassen, werden keine Phasenströme ermittelt und es kann kein Lastmanagement berechnet werden! ",-1)])]),_:1},8,["model-value"]),l(o,{title:"Pfad für Strom Phase 2",subtype:"text",pattern:"^(/[-a-zA-Z0-9@:%_\\+.~#?&/=]*)","model-value":t.component.configuration.current_l2_path,"onUpdate:modelValue":e[3]||(e[3]=r=>t.updateConfiguration(r,"configuration.current_l2_path"))},{help:i(()=>[...e[11]||(e[11]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),a("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Stromstärke der 2. Phase in Ampere darstellt.",-1),a("br",null,null,-1),n(" Wird dieses Feld leer gelassen, werden keine Phasenströme ermittelt und es kann kein Lastmanagement berechnet werden! ",-1)])]),_:1},8,["model-value"]),l(o,{title:"Pfad für Strom Phase 3",subtype:"text",pattern:"^(/[-a-zA-Z0-9@:%_\\+.~#?&/=]*)","model-value":t.component.configuration.current_l3_path,"onUpdate:modelValue":e[4]||(e[4]=r=>t.updateConfiguration(r,"configuration.current_l3_path"))},{help:i(()=>[...e[12]||(e[12]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),a("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Stromstärke der 3. Phase in Ampere darstellt.",-1),a("br",null,null,-1),n(" Wird dieses Feld leer gelassen, werden keine Phasenströme ermittelt und es kann kein Lastmanagement berechnet werden! ",-1)])]),_:1},8,["model-value"]),l(o,{title:"Pfad für Zählerstand laden",subtype:"text",pattern:"^(/[-a-zA-Z0-9@:%_\\+.~#?&/=]*)","model-value":t.component.configuration.imported_path,"onUpdate:modelValue":e[5]||(e[5]=r=>t.updateConfiguration(r,"configuration.imported_path"))},{help:i(()=>[...e[13]||(e[13]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),a("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche den aktuellen absoluten Zählerstand in Wh darstellt. ",-1)])]),_:1},8,["model-value"]),l(o,{title:"Pfad für Zählerstand entladen",subtype:"text",pattern:"^(/[-a-zA-Z0-9@:%_\\+.~#?&/=]*)","model-value":t.component.configuration.exported_path,"onUpdate:modelValue":e[6]||(e[6]=r=>t.updateConfiguration(r,"configuration.exported_path"))},{help:i(()=>[...e[14]||(e[14]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),a("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche den aktuellen absoluten Zählerstand in Wh darstellt.",-1),a("br",null,null,-1),n(" Wird dieses Feld leer gelassen, werden keine Phasenströme ermittelt und es kann kein Lastmanagement berechnet werden! ",-1)])]),_:1},8,["model-value"])])}const _=m(h,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/http/bat.vue"]]);export{_ as default}; diff --git a/web/settings/assets/bat-BUTQpQgo.js b/web/settings/assets/bat-BwP9LEZe.js similarity index 86% rename from web/settings/assets/bat-BUTQpQgo.js rename to web/settings/assets/bat-BwP9LEZe.js index a4a1bd013d..a2a8bb2877 100644 --- a/web/settings/assets/bat-BUTQpQgo.js +++ b/web/settings/assets/bat-BwP9LEZe.js @@ -1 +1 @@ -import{C as o}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as r,m as n,l as s,f as i,q as a,u as p,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const m={name:"DeviceKostalPlenticoreBat",mixins:[o]},l={class:"device-kostal-plenticore-bat"};function d(_,e,u,f,b,k){const t=n("openwb-base-alert");return s(),i("div",l,[a(t,{subtype:"info"},{default:p(()=>[...e[0]||(e[0]=[c(' Für die aktive Batteriesteuerung muss die Funktion "Extern über Protokoll (Modbus TCP)" in der Nutzeroberfläche des Plenticore mit dem Handwerkerzugang aktiviert werden. ',-1)])]),_:1})])}const h=r(m,[["render",d],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/kostal/kostal_plenticore/bat.vue"]]);export{h as default}; +import{C as o}from"./HardwareInstallation-M-k9qNJb.js";import{_ as r,m as n,l as s,f as i,q as a,u as p,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const m={name:"DeviceKostalPlenticoreBat",mixins:[o]},l={class:"device-kostal-plenticore-bat"};function d(_,e,u,f,b,k){const t=n("openwb-base-alert");return s(),i("div",l,[a(t,{subtype:"info"},{default:p(()=>[...e[0]||(e[0]=[c(' Für die aktive Batteriesteuerung muss die Funktion "Extern über Protokoll (Modbus TCP)" in der Nutzeroberfläche des Plenticore mit dem Handwerkerzugang aktiviert werden. ',-1)])]),_:1})])}const h=r(m,[["render",d],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/kostal/kostal_plenticore/bat.vue"]]);export{h as default}; diff --git a/web/settings/assets/bat-BlXDiKVw.js b/web/settings/assets/bat-BxuAFtRf.js similarity index 96% rename from web/settings/assets/bat-BlXDiKVw.js rename to web/settings/assets/bat-BxuAFtRf.js index 6065afdb7e..1d32911d42 100644 --- a/web/settings/assets/bat-BlXDiKVw.js +++ b/web/settings/assets/bat-BxuAFtRf.js @@ -1 +1 @@ -import{C as d}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as s,m as a,l as p,f as m,q as o,u as l,B as i,y as f}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const g={name:"DeviceJsonBat",mixins:[d]},b={class:"device-json-bat"};function v(t,e,w,j,q,C){const u=a("openwb-base-heading"),r=a("openwb-base-text-input");return p(),m("div",b,[o(u,null,{default:l(()=>[...e[7]||(e[7]=[i(" Einstellungen für JSON Batteriespeicher ",-1)])]),_:1}),o(r,{title:"Abfrage für Leistung",subtype:"text",required:"","model-value":t.component.configuration.jq_power,"onUpdate:modelValue":e[0]||(e[0]=n=>t.updateConfiguration(n,"configuration.jq_power"))},{help:l(()=>[...e[8]||(e[8]=[i(' Zur Analyse der Werte aus dem json-Objekt wird jq benutzt. Ist die Json Antwort z.B. {"PowerInstalledPeak":4655, "PowerProduced":132, "PowerOut":897.08172362555717, "PowerSelfSupplied":234.9182763744428} So muss hier .PowerOut eingetragen werden. ',-1),f("br",null,null,-1),i(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Leistung in Watt (positiv Ladung, negativ Entladung) darstellt. ",-1)])]),_:1},8,["model-value"]),o(r,{title:"Abfrage für Ladestand",subtype:"text",required:"","model-value":t.component.configuration.jq_soc,"onUpdate:modelValue":e[1]||(e[1]=n=>t.updateConfiguration(n,"configuration.jq_soc"))},null,8,["model-value"]),o(r,{title:"Abfrage für Strom auf Phase 1",subtype:"text","model-value":t.component.configuration.jq_current_l1,"onUpdate:modelValue":e[2]||(e[2]=n=>t.updateConfiguration(n,"configuration.jq_current_l1"))},null,8,["model-value"]),o(r,{title:"Abfrage für Strom auf Phase 2",subtype:"text","model-value":t.component.configuration.jq_current_l2,"onUpdate:modelValue":e[3]||(e[3]=n=>t.updateConfiguration(n,"configuration.jq_current_l2"))},null,8,["model-value"]),o(r,{title:"Abfrage für Strom auf Phase 3",subtype:"text","model-value":t.component.configuration.jq_current_l3,"onUpdate:modelValue":e[4]||(e[4]=n=>t.updateConfiguration(n,"configuration.jq_current_l3"))},null,8,["model-value"]),o(r,{title:"Abfrage für Zählerstand Ladung",subtype:"text","model-value":t.component.configuration.jq_imported,"onUpdate:modelValue":e[5]||(e[5]=n=>t.updateConfiguration(n,"configuration.jq_imported"))},{help:l(()=>[...e[9]||(e[9]=[i(" Wird dieses Feld leer gelassen, dann werden Zählerstände intern simuliert. ",-1)])]),_:1},8,["model-value"]),o(r,{title:"Abfrage für Zählerstand Entladung",subtype:"text","model-value":t.component.configuration.jq_exported,"onUpdate:modelValue":e[6]||(e[6]=n=>t.updateConfiguration(n,"configuration.jq_exported"))},{help:l(()=>[...e[10]||(e[10]=[i(" Wird dieses Feld leer gelassen, dann werden Zählerstände intern simuliert. ",-1)])]),_:1},8,["model-value"])])}const Z=s(g,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/json/bat.vue"]]);export{Z as default}; +import{C as d}from"./HardwareInstallation-M-k9qNJb.js";import{_ as s,m as a,l as p,f as m,q as o,u as l,B as i,y as f}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const g={name:"DeviceJsonBat",mixins:[d]},b={class:"device-json-bat"};function v(t,e,w,j,q,C){const u=a("openwb-base-heading"),r=a("openwb-base-text-input");return p(),m("div",b,[o(u,null,{default:l(()=>[...e[7]||(e[7]=[i(" Einstellungen für JSON Batteriespeicher ",-1)])]),_:1}),o(r,{title:"Abfrage für Leistung",subtype:"text",required:"","model-value":t.component.configuration.jq_power,"onUpdate:modelValue":e[0]||(e[0]=n=>t.updateConfiguration(n,"configuration.jq_power"))},{help:l(()=>[...e[8]||(e[8]=[i(' Zur Analyse der Werte aus dem json-Objekt wird jq benutzt. Ist die Json Antwort z.B. {"PowerInstalledPeak":4655, "PowerProduced":132, "PowerOut":897.08172362555717, "PowerSelfSupplied":234.9182763744428} So muss hier .PowerOut eingetragen werden. ',-1),f("br",null,null,-1),i(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Leistung in Watt (positiv Ladung, negativ Entladung) darstellt. ",-1)])]),_:1},8,["model-value"]),o(r,{title:"Abfrage für Ladestand",subtype:"text",required:"","model-value":t.component.configuration.jq_soc,"onUpdate:modelValue":e[1]||(e[1]=n=>t.updateConfiguration(n,"configuration.jq_soc"))},null,8,["model-value"]),o(r,{title:"Abfrage für Strom auf Phase 1",subtype:"text","model-value":t.component.configuration.jq_current_l1,"onUpdate:modelValue":e[2]||(e[2]=n=>t.updateConfiguration(n,"configuration.jq_current_l1"))},null,8,["model-value"]),o(r,{title:"Abfrage für Strom auf Phase 2",subtype:"text","model-value":t.component.configuration.jq_current_l2,"onUpdate:modelValue":e[3]||(e[3]=n=>t.updateConfiguration(n,"configuration.jq_current_l2"))},null,8,["model-value"]),o(r,{title:"Abfrage für Strom auf Phase 3",subtype:"text","model-value":t.component.configuration.jq_current_l3,"onUpdate:modelValue":e[4]||(e[4]=n=>t.updateConfiguration(n,"configuration.jq_current_l3"))},null,8,["model-value"]),o(r,{title:"Abfrage für Zählerstand Ladung",subtype:"text","model-value":t.component.configuration.jq_imported,"onUpdate:modelValue":e[5]||(e[5]=n=>t.updateConfiguration(n,"configuration.jq_imported"))},{help:l(()=>[...e[9]||(e[9]=[i(" Wird dieses Feld leer gelassen, dann werden Zählerstände intern simuliert. ",-1)])]),_:1},8,["model-value"]),o(r,{title:"Abfrage für Zählerstand Entladung",subtype:"text","model-value":t.component.configuration.jq_exported,"onUpdate:modelValue":e[6]||(e[6]=n=>t.updateConfiguration(n,"configuration.jq_exported"))},{help:l(()=>[...e[10]||(e[10]=[i(" Wird dieses Feld leer gelassen, dann werden Zählerstände intern simuliert. ",-1)])]),_:1},8,["model-value"])])}const Z=s(g,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/json/bat.vue"]]);export{Z as default}; diff --git a/web/settings/assets/bat-B3F6eBBb.js b/web/settings/assets/bat-C4dZsrAz.js similarity index 88% rename from web/settings/assets/bat-B3F6eBBb.js rename to web/settings/assets/bat-C4dZsrAz.js index 746d73a726..9f5afca5c3 100644 --- a/web/settings/assets/bat-B3F6eBBb.js +++ b/web/settings/assets/bat-C4dZsrAz.js @@ -1 +1 @@ -import{C as r}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as p,m as o,l as m,f as u,q as t,u as l,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceFemsBat",mixins:[r]},f={class:"device-fems-bat"};function _(n,e,b,v,g,C){const i=o("openwb-base-heading"),s=o("openwb-base-number-input");return m(),u("div",f,[t(i,null,{default:l(()=>[...e[1]||(e[1]=[c(" Einstellungen für openEMS, Fenecon FEMS, CENTURIO 10, Kaco Hy-Control Batteriespeicher ",-1)])]),_:1}),t(s,{title:"Anzahl der verbauten Speicher",required:"",min:1,max:2,"model-value":n.component.configuration.num,"onUpdate:modelValue":e[0]||(e[0]=a=>n.updateConfiguration(a,"configuration.num"))},null,8,["model-value"])])}const S=p(d,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fems/fems/bat.vue"]]);export{S as default}; +import{C as r}from"./HardwareInstallation-M-k9qNJb.js";import{_ as p,m as o,l as m,f as u,q as t,u as l,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceFemsBat",mixins:[r]},f={class:"device-fems-bat"};function _(n,e,b,v,g,C){const i=o("openwb-base-heading"),s=o("openwb-base-number-input");return m(),u("div",f,[t(i,null,{default:l(()=>[...e[1]||(e[1]=[c(" Einstellungen für openEMS, Fenecon FEMS, CENTURIO 10, Kaco Hy-Control Batteriespeicher ",-1)])]),_:1}),t(s,{title:"Anzahl der verbauten Speicher",required:"",min:1,max:2,"model-value":n.component.configuration.num,"onUpdate:modelValue":e[0]||(e[0]=a=>n.updateConfiguration(a,"configuration.num"))},null,8,["model-value"])])}const S=p(d,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fems/fems/bat.vue"]]);export{S as default}; diff --git a/web/settings/assets/bat-B688j4YE.js b/web/settings/assets/bat-C7coTIQY.js similarity index 88% rename from web/settings/assets/bat-B688j4YE.js rename to web/settings/assets/bat-C7coTIQY.js index 92f21514af..3ce19fc93d 100644 --- a/web/settings/assets/bat-B688j4YE.js +++ b/web/settings/assets/bat-C7coTIQY.js @@ -1 +1 @@ -import{C as r}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as p,m as n,l as m,f as u,q as t,u as d,B as _}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const l={name:"DeviceVenusCEBat",mixins:[r]},c={class:"device-venus_c_e-bat"};function b(o,e,f,v,g,C){const s=n("openwb-base-heading"),i=n("openwb-base-number-input");return m(),u("div",c,[t(s,null,{default:d(()=>[...e[1]||(e[1]=[_(" Einstellungen für Marstek Venus C, E Batteriespeicher ",-1)])]),_:1}),t(i,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=a=>o.updateConfiguration(a,"configuration.modbus_id"))},null,8,["model-value"])])}const q=p(l,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/marstek/venus_c_e/bat.vue"]]);export{q as default}; +import{C as r}from"./HardwareInstallation-M-k9qNJb.js";import{_ as p,m as n,l as m,f as u,q as t,u as d,B as _}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const l={name:"DeviceVenusCEBat",mixins:[r]},c={class:"device-venus_c_e-bat"};function b(o,e,f,v,g,C){const s=n("openwb-base-heading"),i=n("openwb-base-number-input");return m(),u("div",c,[t(s,null,{default:d(()=>[...e[1]||(e[1]=[_(" Einstellungen für Marstek Venus C, E Batteriespeicher ",-1)])]),_:1}),t(i,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=a=>o.updateConfiguration(a,"configuration.modbus_id"))},null,8,["model-value"])])}const q=p(l,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/marstek/venus_c_e/bat.vue"]]);export{q as default}; diff --git a/web/settings/assets/bat-DRoLlz4z.js b/web/settings/assets/bat-C8wwssfL.js similarity index 89% rename from web/settings/assets/bat-DRoLlz4z.js rename to web/settings/assets/bat-C8wwssfL.js index 5f0797c980..86b31468ba 100644 --- a/web/settings/assets/bat-DRoLlz4z.js +++ b/web/settings/assets/bat-C8wwssfL.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as d,m as t,l as u,f as _,q as n,u as s,B as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const l={name:"DeviceFoxEssH3SmartBat",mixins:[p]},b={class:"device-foxess-h3-smart-bat"};function f(o,e,c,x,v,g){const a=t("openwb-base-heading"),r=t("openwb-base-number-input");return u(),_("div",b,[n(a,null,{default:s(()=>[...e[1]||(e[1]=[i(" Einstellungen für FoxEss H3 Smart Batteriespeicher ",-1)])]),_:1}),n(r,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=m=>o.updateConfiguration(m,"configuration.modbus_id"))},{help:s(()=>[...e[2]||(e[2]=[i(" Die Standard-Modbus-ID von FoxEss ist 247 ",-1)])]),_:1},8,["model-value"])])}const S=d(l,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fox_ess/fox_ess_h3_smart/bat.vue"]]);export{S as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as d,m as t,l as u,f as _,q as n,u as s,B as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const l={name:"DeviceFoxEssH3SmartBat",mixins:[p]},b={class:"device-foxess-h3-smart-bat"};function f(o,e,c,x,v,g){const a=t("openwb-base-heading"),r=t("openwb-base-number-input");return u(),_("div",b,[n(a,null,{default:s(()=>[...e[1]||(e[1]=[i(" Einstellungen für FoxEss H3 Smart Batteriespeicher ",-1)])]),_:1}),n(r,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=m=>o.updateConfiguration(m,"configuration.modbus_id"))},{help:s(()=>[...e[2]||(e[2]=[i(" Die Standard-Modbus-ID von FoxEss ist 247 ",-1)])]),_:1},8,["model-value"])])}const S=d(l,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fox_ess/fox_ess_h3_smart/bat.vue"]]);export{S as default}; diff --git a/web/settings/assets/bat-CtbgR4DM.js b/web/settings/assets/bat-CHoGb8Hj.js similarity index 91% rename from web/settings/assets/bat-CtbgR4DM.js rename to web/settings/assets/bat-CHoGb8Hj.js index 5367b4f4a8..1304e15a1b 100644 --- a/web/settings/assets/bat-CtbgR4DM.js +++ b/web/settings/assets/bat-CHoGb8Hj.js @@ -1 +1 @@ -import{C as m}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as l,m as t,l as d,f as c,q as i,u as a,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const b={name:"DeviceMTecBat",mixins:[m]},_={class:"device-mtec-bat"};function f(o,e,v,g,w,B){const p=t("openwb-base-heading"),r=t("openwb-base-select-input"),u=t("openwb-base-number-input");return d(),c("div",_,[i(p,null,{default:a(()=>[...e[2]||(e[2]=[s(" Einstellungen für M-Tec Batteriespeicher ",-1)])]),_:1}),i(r,{title:"Generation","not-selected":"Bitte auswählen",options:[{value:2,text:"Gen 2"},{value:3,text:"Gen 3"}],"model-value":o.component.configuration.generation,required:"","onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.generation"))},null,8,["model-value"]),i(u,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},{help:a(()=>[...e[3]||(e[3]=[s(" Die Standard-Modbus-ID von M-Tec ist 247 ",-1)])]),_:1},8,["model-value"])])}const k=l(b,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/mtec/mtec/bat.vue"]]);export{k as default}; +import{C as m}from"./HardwareInstallation-M-k9qNJb.js";import{_ as l,m as t,l as d,f as c,q as i,u as a,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const b={name:"DeviceMTecBat",mixins:[m]},_={class:"device-mtec-bat"};function f(o,e,v,g,w,B){const p=t("openwb-base-heading"),r=t("openwb-base-select-input"),u=t("openwb-base-number-input");return d(),c("div",_,[i(p,null,{default:a(()=>[...e[2]||(e[2]=[s(" Einstellungen für M-Tec Batteriespeicher ",-1)])]),_:1}),i(r,{title:"Generation","not-selected":"Bitte auswählen",options:[{value:2,text:"Gen 2"},{value:3,text:"Gen 3"}],"model-value":o.component.configuration.generation,required:"","onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.generation"))},null,8,["model-value"]),i(u,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},{help:a(()=>[...e[3]||(e[3]=[s(" Die Standard-Modbus-ID von M-Tec ist 247 ",-1)])]),_:1},8,["model-value"])])}const k=l(b,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/mtec/mtec/bat.vue"]]);export{k as default}; diff --git a/web/settings/assets/bat-B0mwwShj.js b/web/settings/assets/bat-Ch4AmBy2.js similarity index 81% rename from web/settings/assets/bat-B0mwwShj.js rename to web/settings/assets/bat-Ch4AmBy2.js index 54bd14c190..49909c3710 100644 --- a/web/settings/assets/bat-B0mwwShj.js +++ b/web/settings/assets/bat-Ch4AmBy2.js @@ -1 +1 @@ -import{C as r}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as p,m as n,l as m,f as l,q as t,u,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSolisBat",mixins:[r]},_={class:"device-solis-bat"};function b(o,e,f,v,g,w){const i=n("openwb-base-heading"),s=n("openwb-base-number-input");return m(),l("div",_,[t(i,null,{default:u(()=>[...e[1]||(e[1]=[d(" Einstellungen für Solis Batteriespeicher ",-1)])]),_:1}),t(s,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=a=>o.updateConfiguration(a,"configuration.modbus_id"))},null,8,["model-value"])])}const E=p(c,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solis/solis/bat.vue"]]);export{E as default}; +import{C as r}from"./HardwareInstallation-M-k9qNJb.js";import{_ as p,m as n,l as m,f as l,q as t,u,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSolisBat",mixins:[r]},_={class:"device-solis-bat"};function b(o,e,f,v,g,w){const i=n("openwb-base-heading"),s=n("openwb-base-number-input");return m(),l("div",_,[t(i,null,{default:u(()=>[...e[1]||(e[1]=[d(" Einstellungen für Solis Batteriespeicher ",-1)])]),_:1}),t(s,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=a=>o.updateConfiguration(a,"configuration.modbus_id"))},null,8,["model-value"])])}const E=p(c,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solis/solis/bat.vue"]]);export{E as default}; diff --git a/web/settings/assets/bat-Dwir2dXd.js b/web/settings/assets/bat-CiWshC0s.js similarity index 89% rename from web/settings/assets/bat-Dwir2dXd.js rename to web/settings/assets/bat-CiWshC0s.js index acbad5ef15..53f27e0e38 100644 --- a/web/settings/assets/bat-Dwir2dXd.js +++ b/web/settings/assets/bat-CiWshC0s.js @@ -1 +1 @@ -import{C as a}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as i,m as r,l as s,f as o,q as p,u as l,B as n,y as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceAlphaEssBat",mixins:[a]},m={class:"device-alphaess-bat"};function u(_,e,f,b,g,h){const t=r("openwb-base-alert");return s(),o("div",m,[p(t,{subtype:"info"},{default:l(()=>[...e[0]||(e[0]=[n(" Der AlphaESS Speicher kann die Speicherentladung bei aktiver Speichersteuerung nur komplett sperren.",-1),d("br",null,null,-1),n(' Zur Nutzung müssen über Webinterface oder App einmalig Zeiten für das Netzladen definiert werden. (Einstellungen -> Funktionseinstellungen -> Netzladen/Entladen). Hier einen durchgängigen Zeitraum eintragen (Ladezeit 1: 00:00-23:00, Ladezeit 2 23:00-00:00). Den Schalter "Netzladen" deaktivieren! ',-1)])]),_:1})])}const E=i(c,[["render",u],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/alpha_ess/alpha_ess/bat.vue"]]);export{E as default}; +import{C as a}from"./HardwareInstallation-M-k9qNJb.js";import{_ as i,m as r,l as s,f as o,q as p,u as l,B as n,y as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceAlphaEssBat",mixins:[a]},m={class:"device-alphaess-bat"};function u(_,e,f,b,g,h){const t=r("openwb-base-alert");return s(),o("div",m,[p(t,{subtype:"info"},{default:l(()=>[...e[0]||(e[0]=[n(" Der AlphaESS Speicher kann die Speicherentladung bei aktiver Speichersteuerung nur komplett sperren.",-1),d("br",null,null,-1),n(' Zur Nutzung müssen über Webinterface oder App einmalig Zeiten für das Netzladen definiert werden. (Einstellungen -> Funktionseinstellungen -> Netzladen/Entladen). Hier einen durchgängigen Zeitraum eintragen (Ladezeit 1: 00:00-23:00, Ladezeit 2 23:00-00:00). Den Schalter "Netzladen" deaktivieren! ',-1)])]),_:1})])}const E=i(c,[["render",u],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/alpha_ess/alpha_ess/bat.vue"]]);export{E as default}; diff --git a/web/settings/assets/bat-DTs1HGE0.js b/web/settings/assets/bat-CsgP1xKS.js similarity index 88% rename from web/settings/assets/bat-DTs1HGE0.js rename to web/settings/assets/bat-CsgP1xKS.js index cfa13afd83..6a7aee17c6 100644 --- a/web/settings/assets/bat-DTs1HGE0.js +++ b/web/settings/assets/bat-CsgP1xKS.js @@ -1 +1 @@ -import{C as s}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as m,m as t,l as p,f as u,q as n,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceHuaweiSmartLoggerBat",mixins:[s]},c={class:"device-huawei-smart-logger-bat"};function b(o,e,g,f,w,v){const i=t("openwb-base-heading"),a=t("openwb-base-number-input");return p(),u("div",c,[n(i,null,{default:d(()=>[...e[1]||(e[1]=[l(" Einstellungen für Huawei SmartLogger Batteriespeicher ",-1)])]),_:1}),n(a,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=r=>o.updateConfiguration(r,"configuration.modbus_id"))},null,8,["model-value"])])}const E=m(_,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/huawei/huawei_smartlogger/bat.vue"]]);export{E as default}; +import{C as s}from"./HardwareInstallation-M-k9qNJb.js";import{_ as m,m as t,l as p,f as u,q as n,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceHuaweiSmartLoggerBat",mixins:[s]},c={class:"device-huawei-smart-logger-bat"};function b(o,e,g,f,w,v){const i=t("openwb-base-heading"),a=t("openwb-base-number-input");return p(),u("div",c,[n(i,null,{default:d(()=>[...e[1]||(e[1]=[l(" Einstellungen für Huawei SmartLogger Batteriespeicher ",-1)])]),_:1}),n(a,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=r=>o.updateConfiguration(r,"configuration.modbus_id"))},null,8,["model-value"])])}const E=m(_,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/huawei/huawei_smartlogger/bat.vue"]]);export{E as default}; diff --git a/web/settings/assets/bat-iYEGDCT9.js b/web/settings/assets/bat-DHmI9tEA.js similarity index 88% rename from web/settings/assets/bat-iYEGDCT9.js rename to web/settings/assets/bat-DHmI9tEA.js index 1be4f63a09..e39753e433 100644 --- a/web/settings/assets/bat-iYEGDCT9.js +++ b/web/settings/assets/bat-DHmI9tEA.js @@ -1 +1 @@ -import{C as r}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as p,m as o,l as m,f as u,q as t,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceSunnyIslandBat",mixins:[r]},c={class:"device-sunnyisland-bat"};function b(n,e,f,v,g,w){const s=o("openwb-base-heading"),i=o("openwb-base-number-input");return m(),u("div",c,[t(s,null,{default:d(()=>[...e[1]||(e[1]=[l(" Einstellungen für Sunny Island Batteriespeicher ",-1)])]),_:1}),t(i,{title:"Modbus ID",required:"","model-value":n.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=a=>n.updateConfiguration(a,"configuration.modbus_id"))},null,8,["model-value"])])}const q=p(_,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/sma/sma_sunny_island/bat.vue"]]);export{q as default}; +import{C as r}from"./HardwareInstallation-M-k9qNJb.js";import{_ as p,m as o,l as m,f as u,q as t,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceSunnyIslandBat",mixins:[r]},c={class:"device-sunnyisland-bat"};function b(n,e,f,v,g,w){const s=o("openwb-base-heading"),i=o("openwb-base-number-input");return m(),u("div",c,[t(s,null,{default:d(()=>[...e[1]||(e[1]=[l(" Einstellungen für Sunny Island Batteriespeicher ",-1)])]),_:1}),t(i,{title:"Modbus ID",required:"","model-value":n.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=a=>n.updateConfiguration(a,"configuration.modbus_id"))},null,8,["model-value"])])}const q=p(_,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/sma/sma_sunny_island/bat.vue"]]);export{q as default}; diff --git a/web/settings/assets/bat-CiEmt-O4.js b/web/settings/assets/bat-D_Evz_Yy.js similarity index 81% rename from web/settings/assets/bat-CiEmt-O4.js rename to web/settings/assets/bat-D_Evz_Yy.js index 503f4c6f60..b70f1452a8 100644 --- a/web/settings/assets/bat-CiEmt-O4.js +++ b/web/settings/assets/bat-D_Evz_Yy.js @@ -1 +1 @@ -import{C as r}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as p,m as n,l as m,f as c,q as t,u,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const l={name:"DeviceKacoNHBat",mixins:[r]},_={class:"device-kaco-nh-bat"};function f(o,e,b,v,g,w){const i=n("openwb-base-heading"),a=n("openwb-base-number-input");return m(),c("div",_,[t(i,null,{default:u(()=>[...e[1]||(e[1]=[d(" Einstellungen für Kaco NH Batteriespeicher ",-1)])]),_:1}),t(a,{title:"ID",required:"",min:"0",max:"65535","model-value":o.component.configuration.id,"onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.id"))},null,8,["model-value"])])}const D=p(l,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/kaco/kaco_nh/bat.vue"]]);export{D as default}; +import{C as r}from"./HardwareInstallation-M-k9qNJb.js";import{_ as p,m as n,l as m,f as c,q as t,u,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const l={name:"DeviceKacoNHBat",mixins:[r]},_={class:"device-kaco-nh-bat"};function f(o,e,b,v,g,w){const i=n("openwb-base-heading"),a=n("openwb-base-number-input");return m(),c("div",_,[t(i,null,{default:u(()=>[...e[1]||(e[1]=[d(" Einstellungen für Kaco NH Batteriespeicher ",-1)])]),_:1}),t(a,{title:"ID",required:"",min:"0",max:"65535","model-value":o.component.configuration.id,"onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.id"))},null,8,["model-value"])])}const D=p(l,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/kaco/kaco_nh/bat.vue"]]);export{D as default}; diff --git a/web/settings/assets/bat-DX4_xsov.js b/web/settings/assets/bat-DhhpO0HZ.js similarity index 91% rename from web/settings/assets/bat-DX4_xsov.js rename to web/settings/assets/bat-DhhpO0HZ.js index 8b34d442b4..ad16335832 100644 --- a/web/settings/assets/bat-DX4_xsov.js +++ b/web/settings/assets/bat-DhhpO0HZ.js @@ -1 +1 @@ -import{C as m}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as d,m as a,l as p,f as u,q as t,u as r,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const g={name:"DeviceSolaredgeBat",mixins:[m]},f={class:"device-solaredge-bat"};function b(o,e,_,c,v,x){const l=a("openwb-base-heading"),i=a("openwb-base-number-input");return p(),u("div",f,[t(l,null,{default:r(()=>[...e[2]||(e[2]=[s(" Einstellungen für SolarEdge Batteriespeicher ",-1)])]),_:1}),t(i,{title:"SolarEdge-Geräte-ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"]),t(i,{title:"SolarEdge-Batterie-Index","model-value":o.component.configuration.battery_index,min:"1",max:"2","onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.battery_index"))},{help:r(()=>[...e[3]||(e[3]=[s(" Wenn eine zweite Batterie am Wechselrichter angeschlossen ist, hier den Index 2 eintagen. Im Normalfall immer 1 eintragen. ",-1)])]),_:1},8,["model-value"])])}const N=d(g,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solaredge/solaredge/bat.vue"]]);export{N as default}; +import{C as m}from"./HardwareInstallation-M-k9qNJb.js";import{_ as d,m as a,l as p,f as u,q as t,u as r,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const g={name:"DeviceSolaredgeBat",mixins:[m]},f={class:"device-solaredge-bat"};function b(o,e,_,c,v,x){const l=a("openwb-base-heading"),i=a("openwb-base-number-input");return p(),u("div",f,[t(l,null,{default:r(()=>[...e[2]||(e[2]=[s(" Einstellungen für SolarEdge Batteriespeicher ",-1)])]),_:1}),t(i,{title:"SolarEdge-Geräte-ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"]),t(i,{title:"SolarEdge-Batterie-Index","model-value":o.component.configuration.battery_index,min:"1",max:"2","onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.battery_index"))},{help:r(()=>[...e[3]||(e[3]=[s(" Wenn eine zweite Batterie am Wechselrichter angeschlossen ist, hier den Index 2 eintagen. Im Normalfall immer 1 eintragen. ",-1)])]),_:1},8,["model-value"])])}const N=d(g,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solaredge/solaredge/bat.vue"]]);export{N as default}; diff --git a/web/settings/assets/bat-BaMLfbPd.js b/web/settings/assets/bat-DjzTmFO3.js similarity index 87% rename from web/settings/assets/bat-BaMLfbPd.js rename to web/settings/assets/bat-DjzTmFO3.js index 1bfc8a20ef..30090617ff 100644 --- a/web/settings/assets/bat-BaMLfbPd.js +++ b/web/settings/assets/bat-DjzTmFO3.js @@ -1 +1 @@ -import{C as r}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as p,m as n,l as m,f as u,q as t,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceFoxEssBat",mixins:[r]},c={class:"device-fox_ess-bat"};function f(o,e,b,x,v,g){const s=n("openwb-base-heading"),i=n("openwb-base-number-input");return m(),u("div",c,[t(s,null,{default:d(()=>[...e[1]||(e[1]=[l(" Einstellungen für FoxEss Batteriespeicher ",-1)])]),_:1}),t(i,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=a=>o.updateConfiguration(a,"configuration.modbus_id"))},null,8,["model-value"])])}const D=p(_,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fox_ess/fox_ess/bat.vue"]]);export{D as default}; +import{C as r}from"./HardwareInstallation-M-k9qNJb.js";import{_ as p,m as n,l as m,f as u,q as t,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceFoxEssBat",mixins:[r]},c={class:"device-fox_ess-bat"};function f(o,e,b,x,v,g){const s=n("openwb-base-heading"),i=n("openwb-base-number-input");return m(),u("div",c,[t(s,null,{default:d(()=>[...e[1]||(e[1]=[l(" Einstellungen für FoxEss Batteriespeicher ",-1)])]),_:1}),t(i,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=a=>o.updateConfiguration(a,"configuration.modbus_id"))},null,8,["model-value"])])}const D=p(_,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fox_ess/fox_ess/bat.vue"]]);export{D as default}; diff --git a/web/settings/assets/bat-DR1ovJbK.js b/web/settings/assets/bat-Dn2ap8yL.js similarity index 92% rename from web/settings/assets/bat-DR1ovJbK.js rename to web/settings/assets/bat-Dn2ap8yL.js index 0bd681ab60..20827a2ebb 100644 --- a/web/settings/assets/bat-DR1ovJbK.js +++ b/web/settings/assets/bat-Dn2ap8yL.js @@ -1 +1 @@ -import{C as l}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as p,m as n,l as m,f as d,q as a,u as b,B as i,y as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceSolarmaxBat",mixins:[l]},f={class:"device-solarmax-bat"};function g(o,e,v,w,x,S){const r=n("openwb-base-alert"),s=n("openwb-base-number-input"),u=n("openwb-base-button-group-input");return m(),d("div",f,[a(r,{subtype:"info"},{default:b(()=>[...e[2]||(e[2]=[i(" Solarmax MAX.STORAGE / MAX.STORAGE Ultimate Batteriespeicher sind Teil eines Hybridsystems. Daher muss auch eine Komponente Wechselrichter angelegt werden.",-1),c("br",null,null,-1),i(' Die aktive Speichersteuerung ist ab Solarmax Software Version 3.4.4 verfügbar. Zur Nutzung muss die Funktion "Connectivity+" durch den Solarmax Support (nicht openWB Support) freigeschaltet werden. ',-1)])]),_:1}),a(s,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=t=>o.updateConfiguration(t,"configuration.modbus_id"))},null,8,["model-value"]),a(u,{title:"Speicherleistung steuerbar",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":o.component.configuration.power_limit_controllable,"onUpdate:modelValue":e[1]||(e[1]=t=>o.updateConfiguration(t,"configuration.power_limit_controllable"))},null,8,["model-value"])])}const M=p(_,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solarmax/solarmax/bat.vue"]]);export{M as default}; +import{C as l}from"./HardwareInstallation-M-k9qNJb.js";import{_ as p,m as n,l as m,f as d,q as a,u as b,B as i,y as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceSolarmaxBat",mixins:[l]},f={class:"device-solarmax-bat"};function g(o,e,v,w,x,S){const r=n("openwb-base-alert"),s=n("openwb-base-number-input"),u=n("openwb-base-button-group-input");return m(),d("div",f,[a(r,{subtype:"info"},{default:b(()=>[...e[2]||(e[2]=[i(" Solarmax MAX.STORAGE / MAX.STORAGE Ultimate Batteriespeicher sind Teil eines Hybridsystems. Daher muss auch eine Komponente Wechselrichter angelegt werden.",-1),c("br",null,null,-1),i(' Die aktive Speichersteuerung ist ab Solarmax Software Version 3.4.4 verfügbar. Zur Nutzung muss die Funktion "Connectivity+" durch den Solarmax Support (nicht openWB Support) freigeschaltet werden. ',-1)])]),_:1}),a(s,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=t=>o.updateConfiguration(t,"configuration.modbus_id"))},null,8,["model-value"]),a(u,{title:"Speicherleistung steuerbar",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":o.component.configuration.power_limit_controllable,"onUpdate:modelValue":e[1]||(e[1]=t=>o.updateConfiguration(t,"configuration.power_limit_controllable"))},null,8,["model-value"])])}const M=p(_,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solarmax/solarmax/bat.vue"]]);export{M as default}; diff --git a/web/settings/assets/bat-DKm_TOA8.js b/web/settings/assets/bat-Dvt9S3H8.js similarity index 83% rename from web/settings/assets/bat-DKm_TOA8.js rename to web/settings/assets/bat-Dvt9S3H8.js index 11a72e3c8f..a7a90807a6 100644 --- a/web/settings/assets/bat-DKm_TOA8.js +++ b/web/settings/assets/bat-Dvt9S3H8.js @@ -1 +1 @@ -import{C as a}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as r,m as o,l,f as u,q as n,u as m,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceOpenwbEvukitBat",mixins:[a]},_={class:"device-openwb-evukit-bat"};function v(t,e,b,f,w,g){const i=o("openwb-base-heading"),s=o("openwb-base-select-input");return l(),u("div",_,[n(i,null,{default:m(()=>[...e[1]||(e[1]=[c(" Einstellungen für openWB EVU-Kit Batteriespeicher ",-1)])]),_:1}),n(s,{title:"Zählermodell","not-selected":"Bitte auswählen",options:[{value:0,text:"MPM3PM"},{value:1,text:"SDM120"},{value:2,text:"SDM630/SDM72D-M"}],"model-value":t.component.configuration.version,required:"","onUpdate:modelValue":e[0]||(e[0]=p=>t.updateConfiguration(p,"configuration.version"))},null,8,["model-value"])])}const $=r(d,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/openwb/openwb_evu_kit/bat.vue"]]);export{$ as default}; +import{C as a}from"./HardwareInstallation-M-k9qNJb.js";import{_ as r,m as o,l,f as u,q as n,u as m,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceOpenwbEvukitBat",mixins:[a]},_={class:"device-openwb-evukit-bat"};function v(t,e,b,f,w,g){const i=o("openwb-base-heading"),s=o("openwb-base-select-input");return l(),u("div",_,[n(i,null,{default:m(()=>[...e[1]||(e[1]=[c(" Einstellungen für openWB EVU-Kit Batteriespeicher ",-1)])]),_:1}),n(s,{title:"Zählermodell","not-selected":"Bitte auswählen",options:[{value:0,text:"MPM3PM"},{value:1,text:"SDM120"},{value:2,text:"SDM630/SDM72D-M"}],"model-value":t.component.configuration.version,required:"","onUpdate:modelValue":e[0]||(e[0]=p=>t.updateConfiguration(p,"configuration.version"))},null,8,["model-value"])])}const $=r(d,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/openwb/openwb_evu_kit/bat.vue"]]);export{$ as default}; diff --git a/web/settings/assets/bat-f-Hw2SHa.js b/web/settings/assets/bat-FQKJgpaM.js similarity index 82% rename from web/settings/assets/bat-f-Hw2SHa.js rename to web/settings/assets/bat-FQKJgpaM.js index 34781d2316..d3fd8b7268 100644 --- a/web/settings/assets/bat-f-Hw2SHa.js +++ b/web/settings/assets/bat-FQKJgpaM.js @@ -1 +1 @@ -import{C as r}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as p,m as n,l as m,f as l,q as t,u,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceSolakonOneBat",mixins:[r]},c={class:"device-solakon-one-bat"};function b(o,e,f,v,g,k){const i=n("openwb-base-heading"),s=n("openwb-base-number-input");return m(),l("div",c,[t(i,null,{default:u(()=>[...e[1]||(e[1]=[d(" Einstellungen für Solakon One Batteriespeicher ",-1)])]),_:1}),t(s,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=a=>o.updateConfiguration(a,"configuration.modbus_id"))},null,8,["model-value"])])}const E=p(_,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solakon/solakon_one/bat.vue"]]);export{E as default}; +import{C as r}from"./HardwareInstallation-M-k9qNJb.js";import{_ as p,m as n,l as m,f as l,q as t,u,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceSolakonOneBat",mixins:[r]},c={class:"device-solakon-one-bat"};function b(o,e,f,v,g,k){const i=n("openwb-base-heading"),s=n("openwb-base-number-input");return m(),l("div",c,[t(i,null,{default:u(()=>[...e[1]||(e[1]=[d(" Einstellungen für Solakon One Batteriespeicher ",-1)])]),_:1}),t(s,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=a=>o.updateConfiguration(a,"configuration.modbus_id"))},null,8,["model-value"])])}const E=p(_,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solakon/solakon_one/bat.vue"]]);export{E as default}; diff --git a/web/settings/assets/bat-adFrQvT_.js b/web/settings/assets/bat-H25hZ4Cm.js similarity index 86% rename from web/settings/assets/bat-adFrQvT_.js rename to web/settings/assets/bat-H25hZ4Cm.js index c09436aedb..db4cef33ca 100644 --- a/web/settings/assets/bat-adFrQvT_.js +++ b/web/settings/assets/bat-H25hZ4Cm.js @@ -1 +1 @@ -import{C as o}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as r,m as s,l as n,f as i,q as p,u as a,B as m}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSaxpowerBat",mixins:[o]},d={class:"device-saxpower-bat"};function _(u,e,f,l,x,w){const t=s("openwb-base-alert");return n(),i("div",d,[p(t,{subtype:"info"},{default:a(()=>[...e[0]||(e[0]=[m(" Um die aktive Speichersteuerung zu nutzen, müssen Register 43/44 vom Saxpower Support freigeschaltet werden. Hierfür wird die Seriennummer benötigt. ",-1)])]),_:1})])}const z=r(c,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/saxpower/saxpower/bat.vue"]]);export{z as default}; +import{C as o}from"./HardwareInstallation-M-k9qNJb.js";import{_ as r,m as s,l as n,f as i,q as p,u as a,B as m}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSaxpowerBat",mixins:[o]},d={class:"device-saxpower-bat"};function _(u,e,f,l,x,w){const t=s("openwb-base-alert");return n(),i("div",d,[p(t,{subtype:"info"},{default:a(()=>[...e[0]||(e[0]=[m(" Um die aktive Speichersteuerung zu nutzen, müssen Register 43/44 vom Saxpower Support freigeschaltet werden. Hierfür wird die Seriennummer benötigt. ",-1)])]),_:1})])}const z=r(c,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/saxpower/saxpower/bat.vue"]]);export{z as default}; diff --git a/web/settings/assets/bat-BMu23u_H.js b/web/settings/assets/bat-P2s6JDzm.js similarity index 97% rename from web/settings/assets/bat-BMu23u_H.js rename to web/settings/assets/bat-P2s6JDzm.js index bef718bd8f..831e06713d 100644 --- a/web/settings/assets/bat-BMu23u_H.js +++ b/web/settings/assets/bat-P2s6JDzm.js @@ -1 +1 @@ -import{C as g}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as b,m as u,l as f,f as B,q as i,u as l,B as t,y as n,J as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const w={name:"DeviceMqttBat",mixins:[g]},k={class:"device-mqtt-bat"};function z(o,e,v,W,S,T){const d=u("openwb-base-heading"),p=u("openwb-base-alert"),r=u("openwb-base-copy-to-clipboard"),a=u("openwb-base-button-group-input");return f(),B("div",k,[i(d,null,{default:l(()=>[...e[1]||(e[1]=[t(" Einstellungen für MQTT Batteriespeicher ",-1)])]),_:1}),i(p,{subtype:"warning"},{default:l(()=>[e[2]||(e[2]=t(" Ist die ",-1)),e[3]||(e[3]=n("strong",null,"Benutzerverwaltung",-1)),e[4]||(e[4]=t(" aktiviert, dann muss ein Benutzer mit Schreibrechten für die entsprechenden Topics angelegt werden, damit openWB die Daten akzeptiert. Hierfür werden automatisch die benötigten Berechtigungen in der Rolle ",-1)),n("strong",null,`"Daten: Speicher '`+s(o.component.name)+"' ("+s(o.component.id)+') MQTT-Input"',1),e[5]||(e[5]=t(" angelegt, die einem Benutzer zugewiesen werden kann. ",-1))]),_:1}),i(p,{subtype:"info"},{default:l(()=>[e[31]||(e[31]=t(" Die folgenden Topics sind für einen reibungslosen Betrieb unbedingt erforderlich: ",-1)),n("ul",null,[n("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:l(()=>[t(" openWB/set/mqtt/bat/"+s(o.component.id)+"/get/power ",1)]),_:1}),e[6]||(e[6]=n("br",null,null,-1)),e[7]||(e[7]=t(" Speicherleistung in Watt, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, positiv Ladung, negativ Entladung",-1)),e[8]||(e[8]=n("br",null,null,-1)),e[9]||(e[9]=t(" Beispiel: ",-1)),e[10]||(e[10]=n("span",{class:"text-info"},"-123",-1))]),n("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:l(()=>[t(" openWB/set/mqtt/bat/"+s(o.component.id)+"/get/soc ",1)]),_:1}),e[11]||(e[11]=n("br",null,null,-1)),e[12]||(e[12]=t(" Ladestand des Speichers, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, gültige Werte 0 bis 100",-1)),e[13]||(e[13]=n("br",null,null,-1)),e[14]||(e[14]=t(" Beispiel: ",-1)),e[15]||(e[15]=n("span",{class:"text-info"},"95",-1))])]),e[32]||(e[32]=t(" Falls keine Werte für die Zählerstände übermittelt werden, berechnet openWB die Zählerstände anhand der Leistung. ",-1)),n("ul",null,[n("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:l(()=>[t(" openWB/set/mqtt/bat/"+s(o.component.id)+"/get/imported ",1)]),_:1}),e[16]||(e[16]=n("br",null,null,-1)),e[17]||(e[17]=t(" Geladene Energie in Wh, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, nur positiv",-1)),e[18]||(e[18]=n("br",null,null,-1)),e[19]||(e[19]=t(" Beispiel: ",-1)),e[20]||(e[20]=n("span",{class:"text-info"},"123.45",-1))]),n("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:l(()=>[t(" openWB/set/mqtt/bat/"+s(o.component.id)+"/get/exported ",1)]),_:1}),e[21]||(e[21]=n("br",null,null,-1)),e[22]||(e[22]=t(" Entladene Energie in Wh, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, nur positiv",-1)),e[23]||(e[23]=n("br",null,null,-1)),e[24]||(e[24]=t(" Beispiel: ",-1)),e[25]||(e[25]=n("span",{class:"text-info"},"123.45",-1))])]),e[33]||(e[33]=t(" Ströme je Phase sind optional, jedoch für phasenbasiertes Lastmanagement in Verbindung mit einem virtuellen Zähler unbedingt erforderlich. Ansonsten erfolgt das Lastmanagement ausschließlich auf Basis der Gesamtleistung an diesem Zähler: ",-1)),n("ul",null,[n("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:l(()=>[t(" openWB/set/mqtt/bat/"+s(o.component.id)+"/get/currents ",1)]),_:1}),e[26]||(e[26]=n("br",null,null,-1)),e[27]||(e[27]=t(" Array mit den Strömen je Phase in Ampere, mit Nachkommastellen (Float), positiv Bezug, negativ Einspeisung",-1)),e[28]||(e[28]=n("br",null,null,-1)),e[29]||(e[29]=t(" Beispiel: ",-1)),e[30]||(e[30]=n("span",{class:"text-info"},"[1.2,2.3,-2.1]",-1))])])]),_:1}),i(d,null,{default:l(()=>[...e[34]||(e[34]=[t(" Optionale Einstellungen ",-1)])]),_:1}),i(p,{subtype:"info"},{default:l(()=>[e[40]||(e[40]=t(' Wenn der Speicher die aktive Steuerung durch openWB unterstützt, kann die Option "Speicherleistung steuerbar" auf "Ja" gesetzt werden. Der Modus, um die Speicher-Entladung ins Fahrzeug zu steuern, kann in den übergreifenden Ladeeinstellungen gesetzt werden. Über folgendes Topic wird dem Speicher die Entladeleistung mitgeteilt. ',-1)),n("ul",null,[n("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:l(()=>[t(" openWB/mqtt/bat/"+s(o.component.id)+"/set/power_limit ",1)]),_:1}),e[35]||(e[35]=n("br",null,null,-1)),e[36]||(e[36]=t(" Entladeleistung in Watt (Float), die im Speicher gesetzt werden muss.",-1)),e[37]||(e[37]=n("br",null,null,-1)),e[38]||(e[38]=t(" Beispiel: ",-1)),e[39]||(e[39]=n("span",{class:"text-info"},"123.0",-1))])])]),_:1}),i(a,{title:"Speicherleistung steuerbar",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":o.component.configuration.power_limit_controllable,"onUpdate:modelValue":e[0]||(e[0]=m=>o.updateConfiguration(m,"configuration.power_limit_controllable"))},null,8,["model-value"])])}const C=b(w,[["render",z],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/mqtt/bat.vue"]]);export{C as default}; +import{C as g}from"./HardwareInstallation-M-k9qNJb.js";import{_ as b,m as u,l as f,f as B,q as i,u as l,B as t,y as n,J as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const w={name:"DeviceMqttBat",mixins:[g]},k={class:"device-mqtt-bat"};function z(o,e,v,W,S,T){const d=u("openwb-base-heading"),p=u("openwb-base-alert"),r=u("openwb-base-copy-to-clipboard"),a=u("openwb-base-button-group-input");return f(),B("div",k,[i(d,null,{default:l(()=>[...e[1]||(e[1]=[t(" Einstellungen für MQTT Batteriespeicher ",-1)])]),_:1}),i(p,{subtype:"warning"},{default:l(()=>[e[2]||(e[2]=t(" Ist die ",-1)),e[3]||(e[3]=n("strong",null,"Benutzerverwaltung",-1)),e[4]||(e[4]=t(" aktiviert, dann muss ein Benutzer mit Schreibrechten für die entsprechenden Topics angelegt werden, damit openWB die Daten akzeptiert. Hierfür werden automatisch die benötigten Berechtigungen in der Rolle ",-1)),n("strong",null,`"Daten: Speicher '`+s(o.component.name)+"' ("+s(o.component.id)+') MQTT-Input"',1),e[5]||(e[5]=t(" angelegt, die einem Benutzer zugewiesen werden kann. ",-1))]),_:1}),i(p,{subtype:"info"},{default:l(()=>[e[31]||(e[31]=t(" Die folgenden Topics sind für einen reibungslosen Betrieb unbedingt erforderlich: ",-1)),n("ul",null,[n("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:l(()=>[t(" openWB/set/mqtt/bat/"+s(o.component.id)+"/get/power ",1)]),_:1}),e[6]||(e[6]=n("br",null,null,-1)),e[7]||(e[7]=t(" Speicherleistung in Watt, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, positiv Ladung, negativ Entladung",-1)),e[8]||(e[8]=n("br",null,null,-1)),e[9]||(e[9]=t(" Beispiel: ",-1)),e[10]||(e[10]=n("span",{class:"text-info"},"-123",-1))]),n("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:l(()=>[t(" openWB/set/mqtt/bat/"+s(o.component.id)+"/get/soc ",1)]),_:1}),e[11]||(e[11]=n("br",null,null,-1)),e[12]||(e[12]=t(" Ladestand des Speichers, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, gültige Werte 0 bis 100",-1)),e[13]||(e[13]=n("br",null,null,-1)),e[14]||(e[14]=t(" Beispiel: ",-1)),e[15]||(e[15]=n("span",{class:"text-info"},"95",-1))])]),e[32]||(e[32]=t(" Falls keine Werte für die Zählerstände übermittelt werden, berechnet openWB die Zählerstände anhand der Leistung. ",-1)),n("ul",null,[n("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:l(()=>[t(" openWB/set/mqtt/bat/"+s(o.component.id)+"/get/imported ",1)]),_:1}),e[16]||(e[16]=n("br",null,null,-1)),e[17]||(e[17]=t(" Geladene Energie in Wh, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, nur positiv",-1)),e[18]||(e[18]=n("br",null,null,-1)),e[19]||(e[19]=t(" Beispiel: ",-1)),e[20]||(e[20]=n("span",{class:"text-info"},"123.45",-1))]),n("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:l(()=>[t(" openWB/set/mqtt/bat/"+s(o.component.id)+"/get/exported ",1)]),_:1}),e[21]||(e[21]=n("br",null,null,-1)),e[22]||(e[22]=t(" Entladene Energie in Wh, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, nur positiv",-1)),e[23]||(e[23]=n("br",null,null,-1)),e[24]||(e[24]=t(" Beispiel: ",-1)),e[25]||(e[25]=n("span",{class:"text-info"},"123.45",-1))])]),e[33]||(e[33]=t(" Ströme je Phase sind optional, jedoch für phasenbasiertes Lastmanagement in Verbindung mit einem virtuellen Zähler unbedingt erforderlich. Ansonsten erfolgt das Lastmanagement ausschließlich auf Basis der Gesamtleistung an diesem Zähler: ",-1)),n("ul",null,[n("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:l(()=>[t(" openWB/set/mqtt/bat/"+s(o.component.id)+"/get/currents ",1)]),_:1}),e[26]||(e[26]=n("br",null,null,-1)),e[27]||(e[27]=t(" Array mit den Strömen je Phase in Ampere, mit Nachkommastellen (Float), positiv Bezug, negativ Einspeisung",-1)),e[28]||(e[28]=n("br",null,null,-1)),e[29]||(e[29]=t(" Beispiel: ",-1)),e[30]||(e[30]=n("span",{class:"text-info"},"[1.2,2.3,-2.1]",-1))])])]),_:1}),i(d,null,{default:l(()=>[...e[34]||(e[34]=[t(" Optionale Einstellungen ",-1)])]),_:1}),i(p,{subtype:"info"},{default:l(()=>[e[40]||(e[40]=t(' Wenn der Speicher die aktive Steuerung durch openWB unterstützt, kann die Option "Speicherleistung steuerbar" auf "Ja" gesetzt werden. Der Modus, um die Speicher-Entladung ins Fahrzeug zu steuern, kann in den übergreifenden Ladeeinstellungen gesetzt werden. Über folgendes Topic wird dem Speicher die Entladeleistung mitgeteilt. ',-1)),n("ul",null,[n("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:l(()=>[t(" openWB/mqtt/bat/"+s(o.component.id)+"/set/power_limit ",1)]),_:1}),e[35]||(e[35]=n("br",null,null,-1)),e[36]||(e[36]=t(" Entladeleistung in Watt (Float), die im Speicher gesetzt werden muss.",-1)),e[37]||(e[37]=n("br",null,null,-1)),e[38]||(e[38]=t(" Beispiel: ",-1)),e[39]||(e[39]=n("span",{class:"text-info"},"123.0",-1))])])]),_:1}),i(a,{title:"Speicherleistung steuerbar",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":o.component.configuration.power_limit_controllable,"onUpdate:modelValue":e[0]||(e[0]=m=>o.updateConfiguration(m,"configuration.power_limit_controllable"))},null,8,["model-value"])])}const C=b(w,[["render",z],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/mqtt/bat.vue"]]);export{C as default}; diff --git a/web/settings/assets/bat-B8UvHJXX.js b/web/settings/assets/bat-aqbKfMAA.js similarity index 87% rename from web/settings/assets/bat-B8UvHJXX.js rename to web/settings/assets/bat-aqbKfMAA.js index 39c6231fb8..df3d9abce1 100644 --- a/web/settings/assets/bat-B8UvHJXX.js +++ b/web/settings/assets/bat-aqbKfMAA.js @@ -1 +1 @@ -import{C as a}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as p,m as t,l as m,f as u,q as n,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceStuderBat",mixins:[a]},_={class:"device-studer-bat"};function b(o,e,f,v,g,w){const i=t("openwb-base-heading"),s=t("openwb-base-number-input");return m(),u("div",_,[n(i,null,{default:d(()=>[...e[1]||(e[1]=[l(" Einstellungen für Studer Batteriespeicher ",-1)])]),_:1}),n(s,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=r=>o.updateConfiguration(r,"configuration.modbus_id"))},null,8,["model-value"])])}const E=p(c,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/studer/studer/bat.vue"]]);export{E as default}; +import{C as a}from"./HardwareInstallation-M-k9qNJb.js";import{_ as p,m as t,l as m,f as u,q as n,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceStuderBat",mixins:[a]},_={class:"device-studer-bat"};function b(o,e,f,v,g,w){const i=t("openwb-base-heading"),s=t("openwb-base-number-input");return m(),u("div",_,[n(i,null,{default:d(()=>[...e[1]||(e[1]=[l(" Einstellungen für Studer Batteriespeicher ",-1)])]),_:1}),n(s,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=r=>o.updateConfiguration(r,"configuration.modbus_id"))},null,8,["model-value"])])}const E=p(c,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/studer/studer/bat.vue"]]);export{E as default}; diff --git a/web/settings/assets/bat-DmrMWSnP.js b/web/settings/assets/bat-aqipIrGh.js similarity index 93% rename from web/settings/assets/bat-DmrMWSnP.js rename to web/settings/assets/bat-aqipIrGh.js index 9197e88279..c3ca060b43 100644 --- a/web/settings/assets/bat-DmrMWSnP.js +++ b/web/settings/assets/bat-aqipIrGh.js @@ -1 +1 @@ -import{C as m}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as c,m as o,l as s,f,q as a,u as i,B as p,z as b,x as _}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const g={name:"DeviceFroniusSunspecBat",mixins:[m],computed:{hasMpptIndex(){const n=this.component.configuration.mppt_index;return n!=null}},methods:{toggleMpptIndex(n){this.updateConfiguration(n?1:null,"configuration.mppt_index")}}},h={class:"device-fronius-sunspec-bat"};function x(n,e,v,M,w,t){const r=o("openwb-base-heading"),u=o("openwb-base-checkbox-input"),d=o("openwb-base-number-input");return s(),f("div",h,[a(r,null,{default:i(()=>[...e[1]||(e[1]=[p(" Einstellungen für Fronius SunSpec Speicher ",-1)])]),_:1}),a(u,{title:"Momentanleistung verfügbar","model-value":t.hasMpptIndex,"onUpdate:modelValue":t.toggleMpptIndex},{help:i(()=>[...e[2]||(e[2]=[p(" Ohne MPPT-Kanal liefert der Speicher nur Ladezustand und Steuerung, aber keine Momentanleistung. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),t.hasMpptIndex?(s(),b(d,{key:0,title:"MPPT-Kanal","model-value":n.component.configuration.mppt_index,min:"1",required:"","onUpdate:modelValue":e[0]||(e[0]=l=>n.updateConfiguration(l,"configuration.mppt_index"))},{help:i(()=>[...e[3]||(e[3]=[p(" Der MPPT-Kanal (siehe Kanalbezeichnung im Fronius-Webinterface bzw. per Modbus-Tool), der die tatsächliche Lade-/Entladeleistung des Speichers liefert. Unterscheidet sich zwischen Geräteserien und muss am Gerät geprüft werden. ",-1)])]),_:1},8,["model-value"])):_("",!0)])}const K=c(g,[["render",x],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fronius/fronius_sunspec/bat.vue"]]);export{K as default}; +import{C as m}from"./HardwareInstallation-M-k9qNJb.js";import{_ as c,m as o,l as s,f,q as a,u as i,B as p,z as b,x as _}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const g={name:"DeviceFroniusSunspecBat",mixins:[m],computed:{hasMpptIndex(){const n=this.component.configuration.mppt_index;return n!=null}},methods:{toggleMpptIndex(n){this.updateConfiguration(n?1:null,"configuration.mppt_index")}}},h={class:"device-fronius-sunspec-bat"};function x(n,e,v,M,w,t){const r=o("openwb-base-heading"),u=o("openwb-base-checkbox-input"),d=o("openwb-base-number-input");return s(),f("div",h,[a(r,null,{default:i(()=>[...e[1]||(e[1]=[p(" Einstellungen für Fronius SunSpec Speicher ",-1)])]),_:1}),a(u,{title:"Momentanleistung verfügbar","model-value":t.hasMpptIndex,"onUpdate:modelValue":t.toggleMpptIndex},{help:i(()=>[...e[2]||(e[2]=[p(" Ohne MPPT-Kanal liefert der Speicher nur Ladezustand und Steuerung, aber keine Momentanleistung. ",-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),t.hasMpptIndex?(s(),b(d,{key:0,title:"MPPT-Kanal","model-value":n.component.configuration.mppt_index,min:"1",required:"","onUpdate:modelValue":e[0]||(e[0]=l=>n.updateConfiguration(l,"configuration.mppt_index"))},{help:i(()=>[...e[3]||(e[3]=[p(" Der MPPT-Kanal (siehe Kanalbezeichnung im Fronius-Webinterface bzw. per Modbus-Tool), der die tatsächliche Lade-/Entladeleistung des Speichers liefert. Unterscheidet sich zwischen Geräteserien und muss am Gerät geprüft werden. ",-1)])]),_:1},8,["model-value"])):_("",!0)])}const K=c(g,[["render",x],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fronius/fronius_sunspec/bat.vue"]]);export{K as default}; diff --git a/web/settings/assets/bat-C9j23L0a.js b/web/settings/assets/bat-hR7nLV0m.js similarity index 87% rename from web/settings/assets/bat-C9j23L0a.js rename to web/settings/assets/bat-hR7nLV0m.js index d81b7ac6d2..bd1a06bc1f 100644 --- a/web/settings/assets/bat-C9j23L0a.js +++ b/web/settings/assets/bat-hR7nLV0m.js @@ -1 +1 @@ -import{C as u}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as m,m as n,l,f as g,q as t,u as i,B as o}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const b={name:"DeviceSigenergyBat",mixins:[u]},c={class:"device-sigenergy-bat"};function _(r,e,f,v,h,S){const s=n("openwb-base-heading"),a=n("openwb-base-alert"),p=n("openwb-base-number-input");return l(),g("div",c,[t(s,null,{default:i(()=>[...e[1]||(e[1]=[o(" Einstellungen für Sigenergy Batteriespeicher ",-1)])]),_:1}),t(a,{subtype:"info"},{default:i(()=>[...e[2]||(e[2]=[o(" Der Sigenergy Speicher kann die Speicherentladung bei aktiver Speichersteuerung nur komplett sperren. Der teilweise Ausgleich durch Übergabe einer Entladeleistung an den Speicher ist nicht möglich. Die aktive Beladung des Speichers ist nicht möglich. ",-1)])]),_:1}),t(p,{title:"Modbus ID",required:"","model-value":r.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=d=>r.updateConfiguration(d,"configuration.modbus_id"))},{help:i(()=>[...e[3]||(e[3]=[o(" Die Standard-Modbus-ID von Sigenergy ist 247 ",-1)])]),_:1},8,["model-value"])])}const M=m(b,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/sigenergy/sigenergy/bat.vue"]]);export{M as default}; +import{C as u}from"./HardwareInstallation-M-k9qNJb.js";import{_ as m,m as n,l,f as g,q as t,u as i,B as o}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const b={name:"DeviceSigenergyBat",mixins:[u]},c={class:"device-sigenergy-bat"};function _(r,e,f,v,h,S){const s=n("openwb-base-heading"),a=n("openwb-base-alert"),p=n("openwb-base-number-input");return l(),g("div",c,[t(s,null,{default:i(()=>[...e[1]||(e[1]=[o(" Einstellungen für Sigenergy Batteriespeicher ",-1)])]),_:1}),t(a,{subtype:"info"},{default:i(()=>[...e[2]||(e[2]=[o(" Der Sigenergy Speicher kann die Speicherentladung bei aktiver Speichersteuerung nur komplett sperren. Der teilweise Ausgleich durch Übergabe einer Entladeleistung an den Speicher ist nicht möglich. Die aktive Beladung des Speichers ist nicht möglich. ",-1)])]),_:1}),t(p,{title:"Modbus ID",required:"","model-value":r.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=d=>r.updateConfiguration(d,"configuration.modbus_id"))},{help:i(()=>[...e[3]||(e[3]=[o(" Die Standard-Modbus-ID von Sigenergy ist 247 ",-1)])]),_:1},8,["model-value"])])}const M=m(b,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/sigenergy/sigenergy/bat.vue"]]);export{M as default}; diff --git a/web/settings/assets/bat-vDm95eeV.js b/web/settings/assets/bat-kdg96xqY.js similarity index 89% rename from web/settings/assets/bat-vDm95eeV.js rename to web/settings/assets/bat-kdg96xqY.js index b851ecdcbc..f39b7fc791 100644 --- a/web/settings/assets/bat-vDm95eeV.js +++ b/web/settings/assets/bat-kdg96xqY.js @@ -1 +1 @@ -import{C as a}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as d,m as p,l as t,f as u,z as i,u as o,B as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSonnenbatterieBat",mixins:[a]},m={class:"device-sonnenbatterie-bat"};function f(s,e,v,b,l,g){const n=p("openwb-base-alert");return t(),u("div",m,[s.device.configuration.variant===3?(t(),i(n,{key:0,subtype:"info"},{default:o(()=>[...e[0]||(e[0]=[r(" Die Batterie lässt sich aktiv durch openWB steuern, da die JSON-API v2 verwendet wird. Dazu muss zwingend ein gültiges API-Token eingetragen sein. ",-1)])]),_:1})):(t(),i(n,{key:1,subtype:"info"},{default:o(()=>[...e[1]||(e[1]=[r(" Die Batterie kann nicht aktiv durch openWB gesteuert werden, da die konfigurierte Datenverbindung dies nicht unterstützt. Es wird für die aktive Steuerung zwingend die 'JSON-API v2' benötigt. ",-1)])]),_:1}))])}const y=d(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/sonnen/sonnenbatterie/bat.vue"]]);export{y as default}; +import{C as a}from"./HardwareInstallation-M-k9qNJb.js";import{_ as d,m as p,l as t,f as u,z as i,u as o,B as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSonnenbatterieBat",mixins:[a]},m={class:"device-sonnenbatterie-bat"};function f(s,e,v,b,l,g){const n=p("openwb-base-alert");return t(),u("div",m,[s.device.configuration.variant===3?(t(),i(n,{key:0,subtype:"info"},{default:o(()=>[...e[0]||(e[0]=[r(" Die Batterie lässt sich aktiv durch openWB steuern, da die JSON-API v2 verwendet wird. Dazu muss zwingend ein gültiges API-Token eingetragen sein. ",-1)])]),_:1})):(t(),i(n,{key:1,subtype:"info"},{default:o(()=>[...e[1]||(e[1]=[r(" Die Batterie kann nicht aktiv durch openWB gesteuert werden, da die konfigurierte Datenverbindung dies nicht unterstützt. Es wird für die aktive Steuerung zwingend die 'JSON-API v2' benötigt. ",-1)])]),_:1}))])}const y=d(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/sonnen/sonnenbatterie/bat.vue"]]);export{y as default}; diff --git a/web/settings/assets/bat-LNwmKEXJ.js b/web/settings/assets/bat-m8eGk9pU.js similarity index 87% rename from web/settings/assets/bat-LNwmKEXJ.js rename to web/settings/assets/bat-m8eGk9pU.js index bd64867b81..b165b4f254 100644 --- a/web/settings/assets/bat-LNwmKEXJ.js +++ b/web/settings/assets/bat-m8eGk9pU.js @@ -1 +1 @@ -import{C as a}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as p,m as n,l as m,f as u,q as t,u as c,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const l={name:"DeviceVictronBat",mixins:[a]},_={class:"device-victron-bat"};function b(o,e,f,v,g,w){const i=n("openwb-base-heading"),r=n("openwb-base-number-input");return m(),u("div",_,[t(i,null,{default:c(()=>[...e[1]||(e[1]=[d(" Einstellungen für Victron Batteriespeicher ",-1)])]),_:1}),t(r,{title:"Modbus ID Speicher",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.modbus_id"))},null,8,["model-value"])])}const E=p(l,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/victron/victron/bat.vue"]]);export{E as default}; +import{C as a}from"./HardwareInstallation-M-k9qNJb.js";import{_ as p,m as n,l as m,f as u,q as t,u as c,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const l={name:"DeviceVictronBat",mixins:[a]},_={class:"device-victron-bat"};function b(o,e,f,v,g,w){const i=n("openwb-base-heading"),r=n("openwb-base-number-input");return m(),u("div",_,[t(i,null,{default:c(()=>[...e[1]||(e[1]=[d(" Einstellungen für Victron Batteriespeicher ",-1)])]),_:1}),t(r,{title:"Modbus ID Speicher",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.modbus_id"))},null,8,["model-value"])])}const E=p(l,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/victron/victron/bat.vue"]]);export{E as default}; diff --git a/web/settings/assets/bat-Bsznake9.js b/web/settings/assets/bat-z8e9cnkh.js similarity index 94% rename from web/settings/assets/bat-Bsznake9.js rename to web/settings/assets/bat-z8e9cnkh.js index 5780469419..a878a47f9a 100644 --- a/web/settings/assets/bat-Bsznake9.js +++ b/web/settings/assets/bat-z8e9cnkh.js @@ -1 +1 @@ -import{C as d}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as m,m as s,l as f,f as g,q as t,u as r,B as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const b={name:"DeviceFroniusBat",mixins:[d]},w={class:"device-fronius-bat"};function _(n,e,v,c,C,k){const a=s("openwb-base-heading"),p=s("openwb-base-number-input"),l=s("openwb-base-alert"),u=s("openwb-base-text-input");return f(),g("div",w,[t(a,null,{default:r(()=>[...e[3]||(e[3]=[i(" Einstellungen für Fronius Batteriespeicher ",-1)])]),_:1}),t(p,{title:"Meter ID",required:"",min:"0",max:"65535","model-value":n.component.configuration.meter_id,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.meter_id"))},null,8,["model-value"]),t(a,null,{default:r(()=>[...e[4]||(e[4]=[i(" Aktive Speichersteuerung (optional) ",-1)])]),_:1}),t(l,{subtype:"info"},{default:r(()=>[...e[5]||(e[5]=[i(" Nur erforderlich, wenn der Speicher aktiv gesteuert werden soll (siehe Einstellungen -> Speicher). Ohne Zugangsdaten wird der Speicher weiterhin normal ausgelesen, kann aber nicht gesteuert werden. ",-1)])]),_:1}),t(u,{title:"Username","model-value":n.component.configuration.username,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.username"))},{help:r(()=>[...e[6]||(e[6]=[i(" Für die aktive Speichersteuerung sind Nutzername und Passwort des Installateurzugangs erforderlich. ",-1)])]),_:1},8,["model-value"]),t(u,{title:"Passwort",subtype:"password","model-value":n.component.configuration.password,"onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.password"))},{help:r(()=>[...e[7]||(e[7]=[i(" Für die aktive Speichersteuerung sind Nutzername und Passwort des Installateurzugangs erforderlich. ",-1)])]),_:1},8,["model-value"])])}const $=m(b,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fronius/fronius_http_api/bat.vue"]]);export{$ as default}; +import{C as d}from"./HardwareInstallation-M-k9qNJb.js";import{_ as m,m as s,l as f,f as g,q as t,u as r,B as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const b={name:"DeviceFroniusBat",mixins:[d]},w={class:"device-fronius-bat"};function _(n,e,v,c,C,k){const a=s("openwb-base-heading"),p=s("openwb-base-number-input"),l=s("openwb-base-alert"),u=s("openwb-base-text-input");return f(),g("div",w,[t(a,null,{default:r(()=>[...e[3]||(e[3]=[i(" Einstellungen für Fronius Batteriespeicher ",-1)])]),_:1}),t(p,{title:"Meter ID",required:"",min:"0",max:"65535","model-value":n.component.configuration.meter_id,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.meter_id"))},null,8,["model-value"]),t(a,null,{default:r(()=>[...e[4]||(e[4]=[i(" Aktive Speichersteuerung (optional) ",-1)])]),_:1}),t(l,{subtype:"info"},{default:r(()=>[...e[5]||(e[5]=[i(" Nur erforderlich, wenn der Speicher aktiv gesteuert werden soll (siehe Einstellungen -> Speicher). Ohne Zugangsdaten wird der Speicher weiterhin normal ausgelesen, kann aber nicht gesteuert werden. ",-1)])]),_:1}),t(u,{title:"Username","model-value":n.component.configuration.username,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.username"))},{help:r(()=>[...e[6]||(e[6]=[i(" Für die aktive Speichersteuerung sind Nutzername und Passwort des Installateurzugangs erforderlich. ",-1)])]),_:1},8,["model-value"]),t(u,{title:"Passwort",subtype:"password","model-value":n.component.configuration.password,"onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.password"))},{help:r(()=>[...e[7]||(e[7]=[i(" Für die aktive Speichersteuerung sind Nutzername und Passwort des Installateurzugangs erforderlich. ",-1)])]),_:1},8,["model-value"])])}const $=m(b,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fronius/fronius_http_api/bat.vue"]]);export{$ as default}; diff --git a/web/settings/assets/chargePoint-ClSZgToH.js b/web/settings/assets/chargePoint-4Gh7DnVy.js similarity index 86% rename from web/settings/assets/chargePoint-ClSZgToH.js rename to web/settings/assets/chargePoint-4Gh7DnVy.js index baa3d87f16..27fe6cbf11 100644 --- a/web/settings/assets/chargePoint-ClSZgToH.js +++ b/web/settings/assets/chargePoint-4Gh7DnVy.js @@ -1 +1 @@ -import{C as r}from"./ChargePointInstallation-u7kPgCv5.js";import{_ as i,m as p,l as s,f as a,q as m}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const c={name:"ChargePointOpenwbPro",mixins:[r]},d={class:"charge-point-openwb-pro"};function u(o,e,_,l,f,g){const t=p("openwb-base-text-input");return s(),a("div",d,[m(t,{title:"IP oder Hostname",subtype:"host",required:"","model-value":o.chargePoint.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.ip_address"))},null,8,["model-value"])])}const k=i(c,[["render",u],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/openwb_pro/chargePoint.vue"]]);export{k as default}; +import{C as r}from"./ChargePointInstallation-CmmRvfWj.js";import{_ as i,m as p,l as s,f as a,q as m}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const c={name:"ChargePointOpenwbPro",mixins:[r]},d={class:"charge-point-openwb-pro"};function u(o,e,_,l,f,g){const t=p("openwb-base-text-input");return s(),a("div",d,[m(t,{title:"IP oder Hostname",subtype:"host",required:"","model-value":o.chargePoint.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.ip_address"))},null,8,["model-value"])])}const k=i(c,[["render",u],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/openwb_pro/chargePoint.vue"]]);export{k as default}; diff --git a/web/settings/assets/chargePoint-oww4Ns3m.js b/web/settings/assets/chargePoint-AfihyObz.js similarity index 90% rename from web/settings/assets/chargePoint-oww4Ns3m.js rename to web/settings/assets/chargePoint-AfihyObz.js index c7ab11a42f..cc24148739 100644 --- a/web/settings/assets/chargePoint-oww4Ns3m.js +++ b/web/settings/assets/chargePoint-AfihyObz.js @@ -1 +1 @@ -import{C as s}from"./ChargePointInstallation-u7kPgCv5.js";import{_ as p,m as n,l as u,f as m,q as i,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const g={name:"ChargePointSmartwb",mixins:[s]},f={class:"charge-point-smartwb"};function b(t,e,c,_,w,v){const r=n("openwb-base-text-input"),a=n("openwb-base-number-input");return u(),m("div",f,[i(r,{title:"IP oder Hostname",subtype:"host",required:"","model-value":t.chargePoint.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>t.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),i(a,{title:"Wartezeit",required:"",min:2,max:10,unit:"s","model-value":t.chargePoint.configuration.timeout,"onUpdate:modelValue":e[1]||(e[1]=o=>t.updateConfiguration(o,"configuration.timeout"))},{help:d(()=>[...e[2]||(e[2]=[l(" Zeitangabe in Sekunden, für die auf eine Antwort des Ladepunktes gewartet wird. Wird diese Zeit überschritten, so wird von einer Kommunikationsstörung ausgegangen. ",-1)])]),_:1},8,["model-value"])])}const W=p(g,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/smartwb/chargePoint.vue"]]);export{W as default}; +import{C as s}from"./ChargePointInstallation-CmmRvfWj.js";import{_ as p,m as n,l as u,f as m,q as i,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const g={name:"ChargePointSmartwb",mixins:[s]},f={class:"charge-point-smartwb"};function b(t,e,c,_,w,v){const r=n("openwb-base-text-input"),a=n("openwb-base-number-input");return u(),m("div",f,[i(r,{title:"IP oder Hostname",subtype:"host",required:"","model-value":t.chargePoint.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>t.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),i(a,{title:"Wartezeit",required:"",min:2,max:10,unit:"s","model-value":t.chargePoint.configuration.timeout,"onUpdate:modelValue":e[1]||(e[1]=o=>t.updateConfiguration(o,"configuration.timeout"))},{help:d(()=>[...e[2]||(e[2]=[l(" Zeitangabe in Sekunden, für die auf eine Antwort des Ladepunktes gewartet wird. Wird diese Zeit überschritten, so wird von einer Kommunikationsstörung ausgegangen. ",-1)])]),_:1},8,["model-value"])])}const W=p(g,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/smartwb/chargePoint.vue"]]);export{W as default}; diff --git a/web/settings/assets/chargePoint-BcOWjdb0.js b/web/settings/assets/chargePoint-C65LaVDf.js similarity index 98% rename from web/settings/assets/chargePoint-BcOWjdb0.js rename to web/settings/assets/chargePoint-C65LaVDf.js index 6e79a6b32c..3a6d14cd83 100644 --- a/web/settings/assets/chargePoint-BcOWjdb0.js +++ b/web/settings/assets/chargePoint-C65LaVDf.js @@ -1 +1 @@ -import{C as d}from"./ChargePointInstallation-u7kPgCv5.js";import{_ as g,m as p,l as a,f as m,q as l,u as i,B as t,y as e,J as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"ChargePointMqtt",mixins:[d]},b={class:"charge-point-mqtt"};function k(o,n,B,w,v,W){const u=p("openwb-base-alert"),s=p("openwb-base-copy-to-clipboard");return a(),m("div",b,[l(u,{subtype:"danger"},{default:i(()=>[...n[0]||(n[0]=[t(" Dieser Ladepunkt-Typ darf nur in Kombination mit dem Simulator zur Fehleranalyse genutzt werden. Eine andere Verwendung ist laut den Nutzungsbedingungen untersagt. ",-1)])]),_:1}),l(u,{subtype:"warning"},{default:i(()=>[n[1]||(n[1]=t(" Ist die ",-1)),n[2]||(n[2]=e("strong",null,"Benutzerverwaltung",-1)),n[3]||(n[3]=t(" aktiviert, dann muss ein Benutzer mit Schreibrechten für die entsprechenden Topics angelegt werden, damit openWB die Daten akzeptiert. Hierfür werden automatisch die benötigten Berechtigungen in der Rolle ",-1)),e("strong",null,`"Daten: Ladepunkt '`+r(o.chargePoint.name)+"' ("+r(o.chargePoint.id)+') MQTT-Input"',1),n[4]||(n[4]=t(" angelegt, die einem Benutzer zugewiesen werden kann. ",-1))]),_:1}),l(u,{subtype:"info"},{default:i(()=>[n[76]||(n[76]=e("p",null," Das MQTT Modul stellt keine aktive Verbindung her, sondern erwartet, dass die Daten von speziellen Topics im Broker gelesen bzw. geschrieben werden. Alle Daten werden als gültiges JSON gesendet und auch so erwartet! Zahlen mit Nachkommastellen (Float) verwenden einen Punkt als Dezimaltrenner (internationales Format). ",-1)),n[77]||(n[77]=e("p",null,' In Version 2.1.8 wurden die Topics überarbeitet. Die bisherigen Topics "openWB/set/chargepoint/id/get/..." und "openWB/chargepoint/set/..." bleiben aus Gründen der Abwärtskompatibilität weiterhin nutzbar. Wir empfehlen, auf die neuen Topics umzusteigen. Dies ermöglicht die Beseitigung von Einschränkungen, wie z. B. die fehlende Verrechnung bei Hybrid-Systemen oder die Berechnung fehlender Werte, wie der Phasen-Leistung aus Spannung und Stromstärken. ',-1)),e("ol",null,[e("li",null,[n[15]||(n[15]=t(" von openWB gesendete Topics ",-1)),e("ul",null,[e("li",null,[l(s,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/mqtt/chargepoint/"+r(o.chargePoint.id)+"/set/current ",1)]),_:1}),n[5]||(n[5]=e("br",null,null,-1)),n[6]||(n[6]=t(" Sollwert des Ladestroms, mit Nachkommastellen (Float), positiv (laden) oder negativ (entladen, falls vom Ladepunkt unterstützt).",-1)),n[7]||(n[7]=e("br",null,null,-1)),n[8]||(n[8]=t(" Beispiel: ",-1)),n[9]||(n[9]=e("span",{class:"text-info"},"12.34",-1))]),e("li",null,[l(s,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/mqtt/chargepoint/"+r(o.chargePoint.id)+"/set/phases_to_use ",1)]),_:1}),n[10]||(n[10]=e("br",null,null,-1)),n[11]||(n[11]=t(" Sollwert für die Anzahl Phasen als Ganzzahl (Integer). Mögliche Werte: 1 oder 3",-1)),n[12]||(n[12]=e("br",null,null,-1)),n[13]||(n[13]=t(" Beispiel: ",-1)),n[14]||(n[14]=e("span",{class:"text-info"},"1",-1))])])]),e("li",null,[n[41]||(n[41]=t(" von openWB zwingend erwartete Topics ",-1)),e("ul",null,[e("li",null,[l(s,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/chargepoint/"+r(o.chargePoint.id)+"/get/currents ",1)]),_:1}),n[16]||(n[16]=e("br",null,null,-1)),n[17]||(n[17]=t(" Aktuelle Phasenströme des Ladepunktes, Array mit drei Zahlen (Float), positiv (laden) oder negativ (entladen, falls vom Ladepunkt unterstützt).",-1)),n[18]||(n[18]=e("br",null,null,-1)),n[19]||(n[19]=t(" Beispiel: ",-1)),n[20]||(n[20]=e("span",{class:"text-info"},"[6.78,6.89,6.94]",-1))]),e("li",null,[l(s,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/chargepoint/"+r(o.chargePoint.id)+"/get/power ",1)]),_:1}),n[21]||(n[21]=e("br",null,null,-1)),n[22]||(n[22]=t(" Leistung in Watt, mit Nachkommastellen (Float), positiv (laden) oder negativ (entladen, falls vom Ladepunkt unterstützt).",-1)),n[23]||(n[23]=e("br",null,null,-1)),n[24]||(n[24]=t(" Beispiel: ",-1)),n[25]||(n[25]=e("span",{class:"text-info"},"123.45",-1))]),e("li",null,[l(s,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/chargepoint/"+r(o.chargePoint.id)+"/get/plug_state ",1)]),_:1}),n[26]||(n[26]=e("br",null,null,-1)),n[27]||(n[27]=t(" Zeigt an, ob aktuell ein Fahrzeug angesteckt ist, Wahrheitswert (Bool).",-1)),n[28]||(n[28]=e("br",null,null,-1)),n[29]||(n[29]=t(" Beispiel: ",-1)),n[30]||(n[30]=e("span",{class:"text-info"},"true",-1))]),e("li",null,[l(s,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/chargepoint/"+r(o.chargePoint.id)+"/get/charge_state ",1)]),_:1}),n[31]||(n[31]=e("br",null,null,-1)),n[32]||(n[32]=t(" Zeigt an, ob ein Ladevorgang aktiv ist, Wahrheitswert (Bool).",-1)),n[33]||(n[33]=e("br",null,null,-1)),n[34]||(n[34]=t(" Beispiel: ",-1)),n[35]||(n[35]=e("span",{class:"text-info"},"true",-1))]),e("li",null,[l(s,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/chargepoint/"+r(o.chargePoint.id)+"/get/phases_in_use ",1)]),_:1}),n[36]||(n[36]=e("br",null,null,-1)),n[37]||(n[37]=t(" Anzahl der Phasen, mit denen geladen wird, Ganzzahl (Integer). Mögliche Werte: 0 bis 3",-1)),n[38]||(n[38]=e("br",null,null,-1)),n[39]||(n[39]=t(" Beispiel: ",-1)),n[40]||(n[40]=e("span",{class:"text-info"},"3",-1))])])]),e("li",null,[n[75]||(n[75]=t(" optionale Topics ",-1)),e("ul",null,[e("li",null,[l(s,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/chargepoint/"+r(o.chargePoint.id)+"/get/imported ",1)]),_:1}),n[42]||(n[42]=e("br",null,null,-1)),n[43]||(n[43]=t(" Geladene Energie in Wh, mit Nachkommastellen (Float), nur positiv",-1)),n[44]||(n[44]=e("br",null,null,-1)),n[45]||(n[45]=t(" Wird dieses Topic nicht vom Ladepunkt gesendet, so wird intern ein Zählerstand anhand der Leistung simuliert.",-1)),n[46]||(n[46]=e("br",null,null,-1)),n[47]||(n[47]=t(" Beispiel: ",-1)),n[48]||(n[48]=e("span",{class:"text-info"},"123.45",-1))]),e("li",null,[l(s,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/chargepoint/"+r(o.chargePoint.id)+"/get/exported ",1)]),_:1}),n[49]||(n[49]=e("br",null,null,-1)),n[50]||(n[50]=t(" Entladene Energie in Wh, mit Nachkommastellen (Float), nur positiv",-1)),n[51]||(n[51]=e("br",null,null,-1)),n[52]||(n[52]=t(" Wird dieses Topic nicht vom Ladepunkt gesendet, so wird intern ein Zählerstand anhand der Leistung simuliert.",-1)),n[53]||(n[53]=e("br",null,null,-1)),n[54]||(n[54]=t(" Beispiel: ",-1)),n[55]||(n[55]=e("span",{class:"text-info"},"123.45",-1))]),e("li",null,[l(s,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/chargepoint/"+r(o.chargePoint.id)+"/get/voltages ",1)]),_:1}),n[56]||(n[56]=e("br",null,null,-1)),n[57]||(n[57]=t(" Aktuelle Phasenspannungen des Ladepunktes, Array mit drei Zahlen (Float), nur positiv.",-1)),n[58]||(n[58]=e("br",null,null,-1)),n[59]||(n[59]=t(" Die Spannungen werden nicht verarbeitet, sondern lediglich im Status angezeigt.",-1)),n[60]||(n[60]=e("br",null,null,-1)),n[61]||(n[61]=t(" Beispiel: ",-1)),n[62]||(n[62]=e("span",{class:"text-info"},"[230.12,231.08,232.54]",-1))]),e("li",null,[l(s,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/chargepoint/"+r(o.chargePoint.id)+"/get/power_factors ",1)]),_:1}),n[63]||(n[63]=e("br",null,null,-1)),n[64]||(n[64]=t(" Aktuelle Leistungsfaktoren des Ladepunktes, Array mit drei Zahlen (Float), Wertebereich von -1 bis 1.",-1)),n[65]||(n[65]=e("br",null,null,-1)),n[66]||(n[66]=t(" Die Leistungsfaktoren werden nicht verarbeitet, sondern lediglich im Status angezeigt.",-1)),n[67]||(n[67]=e("br",null,null,-1)),n[68]||(n[68]=t(" Beispiel: ",-1)),n[69]||(n[69]=e("span",{class:"text-info"},"[-0.87,0.96,1.0]",-1))]),e("li",null,[l(s,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/chargepoint/"+r(o.chargePoint.id)+"/get/rfid ",1)]),_:1}),n[70]||(n[70]=e("br",null,null,-1)),n[71]||(n[71]=t(" Eine Zeichenfolge, die einen eingelesenen Tag für openWB repräsentiert. Der Tag darf nur einmalig nach dem Scannen gesendet werden. Nach der Verarbeitung leert openWB das Topic.",-1)),n[72]||(n[72]=e("br",null,null,-1)),n[73]||(n[73]=t(" Beispiel: ",-1)),n[74]||(n[74]=e("span",{class:"text-info"},'"123654"',-1))])])])])]),_:1})])}const F=g(f,[["render",k],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/mqtt/chargePoint.vue"]]);export{F as default}; +import{C as d}from"./ChargePointInstallation-CmmRvfWj.js";import{_ as g,m as p,l as a,f as m,q as l,u as i,B as t,y as e,J as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"ChargePointMqtt",mixins:[d]},b={class:"charge-point-mqtt"};function k(o,n,B,w,v,W){const u=p("openwb-base-alert"),s=p("openwb-base-copy-to-clipboard");return a(),m("div",b,[l(u,{subtype:"danger"},{default:i(()=>[...n[0]||(n[0]=[t(" Dieser Ladepunkt-Typ darf nur in Kombination mit dem Simulator zur Fehleranalyse genutzt werden. Eine andere Verwendung ist laut den Nutzungsbedingungen untersagt. ",-1)])]),_:1}),l(u,{subtype:"warning"},{default:i(()=>[n[1]||(n[1]=t(" Ist die ",-1)),n[2]||(n[2]=e("strong",null,"Benutzerverwaltung",-1)),n[3]||(n[3]=t(" aktiviert, dann muss ein Benutzer mit Schreibrechten für die entsprechenden Topics angelegt werden, damit openWB die Daten akzeptiert. Hierfür werden automatisch die benötigten Berechtigungen in der Rolle ",-1)),e("strong",null,`"Daten: Ladepunkt '`+r(o.chargePoint.name)+"' ("+r(o.chargePoint.id)+') MQTT-Input"',1),n[4]||(n[4]=t(" angelegt, die einem Benutzer zugewiesen werden kann. ",-1))]),_:1}),l(u,{subtype:"info"},{default:i(()=>[n[76]||(n[76]=e("p",null," Das MQTT Modul stellt keine aktive Verbindung her, sondern erwartet, dass die Daten von speziellen Topics im Broker gelesen bzw. geschrieben werden. Alle Daten werden als gültiges JSON gesendet und auch so erwartet! Zahlen mit Nachkommastellen (Float) verwenden einen Punkt als Dezimaltrenner (internationales Format). ",-1)),n[77]||(n[77]=e("p",null,' In Version 2.1.8 wurden die Topics überarbeitet. Die bisherigen Topics "openWB/set/chargepoint/id/get/..." und "openWB/chargepoint/set/..." bleiben aus Gründen der Abwärtskompatibilität weiterhin nutzbar. Wir empfehlen, auf die neuen Topics umzusteigen. Dies ermöglicht die Beseitigung von Einschränkungen, wie z. B. die fehlende Verrechnung bei Hybrid-Systemen oder die Berechnung fehlender Werte, wie der Phasen-Leistung aus Spannung und Stromstärken. ',-1)),e("ol",null,[e("li",null,[n[15]||(n[15]=t(" von openWB gesendete Topics ",-1)),e("ul",null,[e("li",null,[l(s,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/mqtt/chargepoint/"+r(o.chargePoint.id)+"/set/current ",1)]),_:1}),n[5]||(n[5]=e("br",null,null,-1)),n[6]||(n[6]=t(" Sollwert des Ladestroms, mit Nachkommastellen (Float), positiv (laden) oder negativ (entladen, falls vom Ladepunkt unterstützt).",-1)),n[7]||(n[7]=e("br",null,null,-1)),n[8]||(n[8]=t(" Beispiel: ",-1)),n[9]||(n[9]=e("span",{class:"text-info"},"12.34",-1))]),e("li",null,[l(s,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/mqtt/chargepoint/"+r(o.chargePoint.id)+"/set/phases_to_use ",1)]),_:1}),n[10]||(n[10]=e("br",null,null,-1)),n[11]||(n[11]=t(" Sollwert für die Anzahl Phasen als Ganzzahl (Integer). Mögliche Werte: 1 oder 3",-1)),n[12]||(n[12]=e("br",null,null,-1)),n[13]||(n[13]=t(" Beispiel: ",-1)),n[14]||(n[14]=e("span",{class:"text-info"},"1",-1))])])]),e("li",null,[n[41]||(n[41]=t(" von openWB zwingend erwartete Topics ",-1)),e("ul",null,[e("li",null,[l(s,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/chargepoint/"+r(o.chargePoint.id)+"/get/currents ",1)]),_:1}),n[16]||(n[16]=e("br",null,null,-1)),n[17]||(n[17]=t(" Aktuelle Phasenströme des Ladepunktes, Array mit drei Zahlen (Float), positiv (laden) oder negativ (entladen, falls vom Ladepunkt unterstützt).",-1)),n[18]||(n[18]=e("br",null,null,-1)),n[19]||(n[19]=t(" Beispiel: ",-1)),n[20]||(n[20]=e("span",{class:"text-info"},"[6.78,6.89,6.94]",-1))]),e("li",null,[l(s,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/chargepoint/"+r(o.chargePoint.id)+"/get/power ",1)]),_:1}),n[21]||(n[21]=e("br",null,null,-1)),n[22]||(n[22]=t(" Leistung in Watt, mit Nachkommastellen (Float), positiv (laden) oder negativ (entladen, falls vom Ladepunkt unterstützt).",-1)),n[23]||(n[23]=e("br",null,null,-1)),n[24]||(n[24]=t(" Beispiel: ",-1)),n[25]||(n[25]=e("span",{class:"text-info"},"123.45",-1))]),e("li",null,[l(s,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/chargepoint/"+r(o.chargePoint.id)+"/get/plug_state ",1)]),_:1}),n[26]||(n[26]=e("br",null,null,-1)),n[27]||(n[27]=t(" Zeigt an, ob aktuell ein Fahrzeug angesteckt ist, Wahrheitswert (Bool).",-1)),n[28]||(n[28]=e("br",null,null,-1)),n[29]||(n[29]=t(" Beispiel: ",-1)),n[30]||(n[30]=e("span",{class:"text-info"},"true",-1))]),e("li",null,[l(s,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/chargepoint/"+r(o.chargePoint.id)+"/get/charge_state ",1)]),_:1}),n[31]||(n[31]=e("br",null,null,-1)),n[32]||(n[32]=t(" Zeigt an, ob ein Ladevorgang aktiv ist, Wahrheitswert (Bool).",-1)),n[33]||(n[33]=e("br",null,null,-1)),n[34]||(n[34]=t(" Beispiel: ",-1)),n[35]||(n[35]=e("span",{class:"text-info"},"true",-1))]),e("li",null,[l(s,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/chargepoint/"+r(o.chargePoint.id)+"/get/phases_in_use ",1)]),_:1}),n[36]||(n[36]=e("br",null,null,-1)),n[37]||(n[37]=t(" Anzahl der Phasen, mit denen geladen wird, Ganzzahl (Integer). Mögliche Werte: 0 bis 3",-1)),n[38]||(n[38]=e("br",null,null,-1)),n[39]||(n[39]=t(" Beispiel: ",-1)),n[40]||(n[40]=e("span",{class:"text-info"},"3",-1))])])]),e("li",null,[n[75]||(n[75]=t(" optionale Topics ",-1)),e("ul",null,[e("li",null,[l(s,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/chargepoint/"+r(o.chargePoint.id)+"/get/imported ",1)]),_:1}),n[42]||(n[42]=e("br",null,null,-1)),n[43]||(n[43]=t(" Geladene Energie in Wh, mit Nachkommastellen (Float), nur positiv",-1)),n[44]||(n[44]=e("br",null,null,-1)),n[45]||(n[45]=t(" Wird dieses Topic nicht vom Ladepunkt gesendet, so wird intern ein Zählerstand anhand der Leistung simuliert.",-1)),n[46]||(n[46]=e("br",null,null,-1)),n[47]||(n[47]=t(" Beispiel: ",-1)),n[48]||(n[48]=e("span",{class:"text-info"},"123.45",-1))]),e("li",null,[l(s,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/chargepoint/"+r(o.chargePoint.id)+"/get/exported ",1)]),_:1}),n[49]||(n[49]=e("br",null,null,-1)),n[50]||(n[50]=t(" Entladene Energie in Wh, mit Nachkommastellen (Float), nur positiv",-1)),n[51]||(n[51]=e("br",null,null,-1)),n[52]||(n[52]=t(" Wird dieses Topic nicht vom Ladepunkt gesendet, so wird intern ein Zählerstand anhand der Leistung simuliert.",-1)),n[53]||(n[53]=e("br",null,null,-1)),n[54]||(n[54]=t(" Beispiel: ",-1)),n[55]||(n[55]=e("span",{class:"text-info"},"123.45",-1))]),e("li",null,[l(s,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/chargepoint/"+r(o.chargePoint.id)+"/get/voltages ",1)]),_:1}),n[56]||(n[56]=e("br",null,null,-1)),n[57]||(n[57]=t(" Aktuelle Phasenspannungen des Ladepunktes, Array mit drei Zahlen (Float), nur positiv.",-1)),n[58]||(n[58]=e("br",null,null,-1)),n[59]||(n[59]=t(" Die Spannungen werden nicht verarbeitet, sondern lediglich im Status angezeigt.",-1)),n[60]||(n[60]=e("br",null,null,-1)),n[61]||(n[61]=t(" Beispiel: ",-1)),n[62]||(n[62]=e("span",{class:"text-info"},"[230.12,231.08,232.54]",-1))]),e("li",null,[l(s,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/chargepoint/"+r(o.chargePoint.id)+"/get/power_factors ",1)]),_:1}),n[63]||(n[63]=e("br",null,null,-1)),n[64]||(n[64]=t(" Aktuelle Leistungsfaktoren des Ladepunktes, Array mit drei Zahlen (Float), Wertebereich von -1 bis 1.",-1)),n[65]||(n[65]=e("br",null,null,-1)),n[66]||(n[66]=t(" Die Leistungsfaktoren werden nicht verarbeitet, sondern lediglich im Status angezeigt.",-1)),n[67]||(n[67]=e("br",null,null,-1)),n[68]||(n[68]=t(" Beispiel: ",-1)),n[69]||(n[69]=e("span",{class:"text-info"},"[-0.87,0.96,1.0]",-1))]),e("li",null,[l(s,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/chargepoint/"+r(o.chargePoint.id)+"/get/rfid ",1)]),_:1}),n[70]||(n[70]=e("br",null,null,-1)),n[71]||(n[71]=t(" Eine Zeichenfolge, die einen eingelesenen Tag für openWB repräsentiert. Der Tag darf nur einmalig nach dem Scannen gesendet werden. Nach der Verarbeitung leert openWB das Topic.",-1)),n[72]||(n[72]=e("br",null,null,-1)),n[73]||(n[73]=t(" Beispiel: ",-1)),n[74]||(n[74]=e("span",{class:"text-info"},'"123654"',-1))])])])])]),_:1})])}const F=g(f,[["render",k],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/mqtt/chargePoint.vue"]]);export{F as default}; diff --git a/web/settings/assets/chargePoint-BkIvK-cu.js b/web/settings/assets/chargePoint-CAatMEqK.js similarity index 90% rename from web/settings/assets/chargePoint-BkIvK-cu.js rename to web/settings/assets/chargePoint-CAatMEqK.js index ad32c97cb0..4fdce0ea58 100644 --- a/web/settings/assets/chargePoint-BkIvK-cu.js +++ b/web/settings/assets/chargePoint-CAatMEqK.js @@ -1 +1 @@ -import{C as p}from"./ChargePointInstallation-u7kPgCv5.js";import{_ as s,m as t,l as u,f as m,q as i,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"ChargePointSatellite",mixins:[p]},c={class:"charge-point-openwb-satellite"};function g(n,e,f,b,h,w){const r=t("openwb-base-text-input"),a=t("openwb-base-number-input");return u(),m("div",c,[i(r,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.chargePoint.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),i(a,{title:"Ladepunkt-Nummer",required:"",min:1,max:2,"model-value":n.chargePoint.configuration.duo_num+1,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o-1,"configuration.duo_num"))},{help:d(()=>[...e[2]||(e[2]=[l(' Bei einfachen Ladepunkten ist hier immer eine "1" einzutragen. Lediglich bei einer openWB Duo kann mit "2" der zweite enthaltene Ladepunkt angesprochen werden. ',-1)])]),_:1},8,["model-value"])])}const q=s(_,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/openwb_series2_satellit/chargePoint.vue"]]);export{q as default}; +import{C as p}from"./ChargePointInstallation-CmmRvfWj.js";import{_ as s,m as t,l as u,f as m,q as i,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"ChargePointSatellite",mixins:[p]},c={class:"charge-point-openwb-satellite"};function g(n,e,f,b,h,w){const r=t("openwb-base-text-input"),a=t("openwb-base-number-input");return u(),m("div",c,[i(r,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.chargePoint.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),i(a,{title:"Ladepunkt-Nummer",required:"",min:1,max:2,"model-value":n.chargePoint.configuration.duo_num+1,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o-1,"configuration.duo_num"))},{help:d(()=>[...e[2]||(e[2]=[l(' Bei einfachen Ladepunkten ist hier immer eine "1" einzutragen. Lediglich bei einer openWB Duo kann mit "2" der zweite enthaltene Ladepunkt angesprochen werden. ',-1)])]),_:1},8,["model-value"])])}const q=s(_,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/openwb_series2_satellit/chargePoint.vue"]]);export{q as default}; diff --git a/web/settings/assets/chargePoint-BHhf5-E6.js b/web/settings/assets/chargePoint-DA-Gvx1C.js similarity index 90% rename from web/settings/assets/chargePoint-BHhf5-E6.js rename to web/settings/assets/chargePoint-DA-Gvx1C.js index 6624c8d2f8..7e13cf33ad 100644 --- a/web/settings/assets/chargePoint-BHhf5-E6.js +++ b/web/settings/assets/chargePoint-DA-Gvx1C.js @@ -1 +1 @@ -import{C as a}from"./ChargePointInstallation-u7kPgCv5.js";import{_ as i,m as p,l as s,f as u,q as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const l={name:"ChargePointOpenwbDcAdapter",mixins:[a]},d={class:"charge-point-openwb-dc-adapter"};function m(e,o,g,f,c,b){const n=p("openwb-base-text-input");return s(),u("div",d,[r(n,{title:"URL",subtype:"url",required:"","model-value":e.chargePoint.configuration.url,"onUpdate:modelValue":o[0]||(o[0]=t=>e.updateConfiguration(t,"configuration.url"))},null,8,["model-value"]),r(n,{title:"Benutzername",subtype:"user","model-value":e.chargePoint.configuration.user,"onUpdate:modelValue":o[1]||(o[1]=t=>e.updateConfiguration(t,"configuration.user"))},null,8,["model-value"]),r(n,{title:"Passwort",subtype:"password","model-value":e.chargePoint.configuration.password,"onUpdate:modelValue":o[2]||(o[2]=t=>e.updateConfiguration(t,"configuration.password"))},null,8,["model-value"])])}const $=i(l,[["render",m],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/openwb_dc_adapter/chargePoint.vue"]]);export{$ as default}; +import{C as a}from"./ChargePointInstallation-CmmRvfWj.js";import{_ as i,m as p,l as s,f as u,q as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const l={name:"ChargePointOpenwbDcAdapter",mixins:[a]},d={class:"charge-point-openwb-dc-adapter"};function m(e,o,g,f,c,b){const n=p("openwb-base-text-input");return s(),u("div",d,[r(n,{title:"URL",subtype:"url",required:"","model-value":e.chargePoint.configuration.url,"onUpdate:modelValue":o[0]||(o[0]=t=>e.updateConfiguration(t,"configuration.url"))},null,8,["model-value"]),r(n,{title:"Benutzername",subtype:"user","model-value":e.chargePoint.configuration.user,"onUpdate:modelValue":o[1]||(o[1]=t=>e.updateConfiguration(t,"configuration.user"))},null,8,["model-value"]),r(n,{title:"Passwort",subtype:"password","model-value":e.chargePoint.configuration.password,"onUpdate:modelValue":o[2]||(o[2]=t=>e.updateConfiguration(t,"configuration.password"))},null,8,["model-value"])])}const $=i(l,[["render",m],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/openwb_dc_adapter/chargePoint.vue"]]);export{$ as default}; diff --git a/web/settings/assets/chargePoint-Pf0_HKLP.js b/web/settings/assets/chargePoint-Dh7zkIcH.js similarity index 90% rename from web/settings/assets/chargePoint-Pf0_HKLP.js rename to web/settings/assets/chargePoint-Dh7zkIcH.js index 5f23e01fcc..4a1ba3fc42 100644 --- a/web/settings/assets/chargePoint-Pf0_HKLP.js +++ b/web/settings/assets/chargePoint-Dh7zkIcH.js @@ -1 +1 @@ -import{C as p}from"./ChargePointInstallation-u7kPgCv5.js";import{_ as s,m as t,l as u,f as m,q as i,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"ChargePointExternalOpenwb",mixins:[p]},c={class:"charge-point-external-openwb"};function g(n,e,f,b,h,w){const r=t("openwb-base-text-input"),a=t("openwb-base-number-input");return u(),m("div",c,[i(r,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.chargePoint.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),i(a,{title:"Ladepunkt-Nummer",required:"",min:1,max:2,"model-value":n.chargePoint.configuration.duo_num+1,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o-1,"configuration.duo_num"))},{help:d(()=>[...e[2]||(e[2]=[l(' Bei einfachen Ladepunkten ist hier immer eine "1" einzutragen. Lediglich bei einer openWB Duo kann mit "2" der zweite enthaltene Ladepunkt angesprochen werden. ',-1)])]),_:1},8,["model-value"])])}const q=s(_,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/external_openwb/chargePoint.vue"]]);export{q as default}; +import{C as p}from"./ChargePointInstallation-CmmRvfWj.js";import{_ as s,m as t,l as u,f as m,q as i,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"ChargePointExternalOpenwb",mixins:[p]},c={class:"charge-point-external-openwb"};function g(n,e,f,b,h,w){const r=t("openwb-base-text-input"),a=t("openwb-base-number-input");return u(),m("div",c,[i(r,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.chargePoint.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),i(a,{title:"Ladepunkt-Nummer",required:"",min:1,max:2,"model-value":n.chargePoint.configuration.duo_num+1,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o-1,"configuration.duo_num"))},{help:d(()=>[...e[2]||(e[2]=[l(' Bei einfachen Ladepunkten ist hier immer eine "1" einzutragen. Lediglich bei einer openWB Duo kann mit "2" der zweite enthaltene Ladepunkt angesprochen werden. ',-1)])]),_:1},8,["model-value"])])}const q=s(_,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/external_openwb/chargePoint.vue"]]);export{q as default}; diff --git a/web/settings/assets/chargePoint-Bhe_YdR3.js b/web/settings/assets/chargePoint-Dqze0Ru0.js similarity index 93% rename from web/settings/assets/chargePoint-Bhe_YdR3.js rename to web/settings/assets/chargePoint-Dqze0Ru0.js index 15f4fb93b0..0760b1787d 100644 --- a/web/settings/assets/chargePoint-Bhe_YdR3.js +++ b/web/settings/assets/chargePoint-Dqze0Ru0.js @@ -1 +1 @@ -import{C as u}from"./ChargePointInstallation-u7kPgCv5.js";import{_ as p,m as t,l as i,f as d,q as m,z as l,u as c,B as g,x as f}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"ChargePointInternalOpenwb",mixins:[u],methods:{updateMode(e){["series","socket","pro_plus"].includes(e)&&this.updateConfiguration(0,"configuration.duo_num"),this.updateConfiguration(e,"configuration.mode")}}},B={class:"charge-point-internal-openwb"};function h(e,n,b,v,k,a){const r=t("openwb-base-select-input"),s=t("openwb-base-number-input");return i(),d("div",B,[m(r,{title:"Bauart","not-selected":"Bitte auswählen",required:"",options:[{value:"series",text:"openWB series1/2 in den Varianten custom, standard & standard+"},{value:"duo",text:"openWB series1/2 Duo"},{value:"socket",text:"openWB series1/2 Buchse"},{value:"pro_plus",text:"openWB Pro+"},{value:"se",text:"openWB SE 11kW"}],"model-value":e.chargePoint.configuration.mode,"onUpdate:modelValue":n[0]||(n[0]=o=>a.updateMode(o))},null,8,["model-value"]),e.chargePoint.configuration.mode=="duo"||e.chargePoint.configuration.mode=="se"?(i(),l(s,{key:0,title:"Ladepunkt-Nummer",required:"",min:1,max:2,"model-value":e.chargePoint.configuration.duo_num+1,"onUpdate:modelValue":n[1]||(n[1]=o=>e.updateConfiguration(o-1,"configuration.duo_num"))},{help:c(()=>[...n[2]||(n[2]=[g(' Bei einer openWB Duo oder openWB SE Duo können mit "1" oder "2" die beiden enthaltenen Ladepunkte angesprochen werden. Bei einer openWB SE mit einem Ladepunkt ist hier eine 1 einzutragen. ',-1)])]),_:1},8,["model-value"])):f("",!0)])}const D=p(_,[["render",h],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/internal_openwb/chargePoint.vue"]]);export{D as default}; +import{C as u}from"./ChargePointInstallation-CmmRvfWj.js";import{_ as p,m as t,l as i,f as d,q as m,z as l,u as c,B as g,x as f}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"ChargePointInternalOpenwb",mixins:[u],methods:{updateMode(e){["series","socket","pro_plus"].includes(e)&&this.updateConfiguration(0,"configuration.duo_num"),this.updateConfiguration(e,"configuration.mode")}}},B={class:"charge-point-internal-openwb"};function h(e,n,b,v,k,a){const r=t("openwb-base-select-input"),s=t("openwb-base-number-input");return i(),d("div",B,[m(r,{title:"Bauart","not-selected":"Bitte auswählen",required:"",options:[{value:"series",text:"openWB series1/2 in den Varianten custom, standard & standard+"},{value:"duo",text:"openWB series1/2 Duo"},{value:"socket",text:"openWB series1/2 Buchse"},{value:"pro_plus",text:"openWB Pro+"},{value:"se",text:"openWB SE 11kW"}],"model-value":e.chargePoint.configuration.mode,"onUpdate:modelValue":n[0]||(n[0]=o=>a.updateMode(o))},null,8,["model-value"]),e.chargePoint.configuration.mode=="duo"||e.chargePoint.configuration.mode=="se"?(i(),l(s,{key:0,title:"Ladepunkt-Nummer",required:"",min:1,max:2,"model-value":e.chargePoint.configuration.duo_num+1,"onUpdate:modelValue":n[1]||(n[1]=o=>e.updateConfiguration(o-1,"configuration.duo_num"))},{help:c(()=>[...n[2]||(n[2]=[g(' Bei einer openWB Duo oder openWB SE Duo können mit "1" oder "2" die beiden enthaltenen Ladepunkte angesprochen werden. Bei einer openWB SE mit einem Ladepunkt ist hier eine 1 einzutragen. ',-1)])]),_:1},8,["model-value"])):f("",!0)])}const D=p(_,[["render",h],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/internal_openwb/chargePoint.vue"]]);export{D as default}; diff --git a/web/settings/assets/commands-CBYCGJEQ.js b/web/settings/assets/commands-C1EyPswU.js similarity index 95% rename from web/settings/assets/commands-CBYCGJEQ.js rename to web/settings/assets/commands-C1EyPswU.js index 50b6de23c7..5aae23f83b 100644 --- a/web/settings/assets/commands-CBYCGJEQ.js +++ b/web/settings/assets/commands-C1EyPswU.js @@ -1 +1 @@ -import{a as g}from"./ChargePointInstallation-u7kPgCv5.js";import{_ as h,m as u,l as a,f as c,q as d,u as r,B as i,z as f,J as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"ChargePointCommandsInternalOpenwb",mixins:[g],computed:{mode(){switch(this.chargePoint.configuration.mode){case"series":return"openWB series1/2 custom, standard & standard+";case"duo":return"openWB series1/2 Duo";case"socket":return"openWB series1/2 Buchse";case"pro_plus":return"openWB Pro+";default:return this.chargePoint.configuration.mode}}},methods:{async triggerUpdate(){let t=new FormData;t.append("command","update_pro_plus"),this.$root.postClientMessage("Die Aktualisierung der openWB Pro+ wird gestartet...","info"),console.debug(location),this.axios.post(location.protocol+"//"+location.host+"/openWB/web/settings/modules/charge_points/internal_openwb/commands.php",t,{timeout:5e3}).then(()=>{this.$root.postClientMessage("Die Aktualisierung der openWB Pro+ wurde erfolgreich gestartet.","success")}).catch(e=>{var s="Aktualisierung fehlgeschlagen!
";e.response?(console.error(e.response.status,e.response.data),s+=e.response.status+": "+e.response.data):e.request?(console.error(e.request),s+="Es wurde keine Antwort vom Server empfangen."):(console.error("Error",e.message),s+="Es ist ein unbekannter Fehler aufgetreten."),this.$root.postClientMessage(s,"danger")})},openSettings(){window.open("http://"+location.hostname+":8080","_blank")}}},b={class:"charge-point-commands-internal-openwb"},k={key:0};function B(t,n,e,s,w,o){const p=u("openwb-base-button-input"),m=u("openwb-base-alert");return a(),c("div",b,[t.chargePoint.configuration.mode=="pro_plus"?(a(),c("div",k,[d(p,{title:"Ladepunkt aktualisieren","button-text":"Update anfordern",subtype:"success",onButtonClicked:o.triggerUpdate},{help:r(()=>[...n[0]||(n[0]=[i(" Hier kannst Du die Aktualisierung der openWB Pro anstoßen. Bitte stelle sicher, dass kein Fahrzeug angesteckt ist. ",-1)])]),_:1},8,["onButtonClicked"]),d(p,{title:"Einstellungen öffnen","button-text":"Zu den Einstellungen",subtype:"success",onButtonClicked:o.openSettings},{help:r(()=>[...n[1]||(n[1]=[i(" Mit diesem Befehl kannst Du die Einstellungen der openWB Pro in einem neuen Browser-Tab oder -Fenster öffnen. ",-1)])]),_:1},8,["onButtonClicked"])])):(a(),f(m,{key:1,subtype:"secondary"},{default:r(()=>[i(' Der Ladepunkt-Typ "'+l(t.chargePoint.type)+'" bietet für die Bauart "'+l(o.mode)+'" keine Befehle an. ',1)]),_:1}))])}const A=h(_,[["render",B],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/internal_openwb/commands.vue"]]);export{A as default}; +import{a as g}from"./ChargePointInstallation-CmmRvfWj.js";import{_ as h,m as u,l as a,f as c,q as d,u as r,B as i,z as f,J as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"ChargePointCommandsInternalOpenwb",mixins:[g],computed:{mode(){switch(this.chargePoint.configuration.mode){case"series":return"openWB series1/2 custom, standard & standard+";case"duo":return"openWB series1/2 Duo";case"socket":return"openWB series1/2 Buchse";case"pro_plus":return"openWB Pro+";default:return this.chargePoint.configuration.mode}}},methods:{async triggerUpdate(){let t=new FormData;t.append("command","update_pro_plus"),this.$root.postClientMessage("Die Aktualisierung der openWB Pro+ wird gestartet...","info"),console.debug(location),this.axios.post(location.protocol+"//"+location.host+"/openWB/web/settings/modules/charge_points/internal_openwb/commands.php",t,{timeout:5e3}).then(()=>{this.$root.postClientMessage("Die Aktualisierung der openWB Pro+ wurde erfolgreich gestartet.","success")}).catch(e=>{var s="Aktualisierung fehlgeschlagen!
";e.response?(console.error(e.response.status,e.response.data),s+=e.response.status+": "+e.response.data):e.request?(console.error(e.request),s+="Es wurde keine Antwort vom Server empfangen."):(console.error("Error",e.message),s+="Es ist ein unbekannter Fehler aufgetreten."),this.$root.postClientMessage(s,"danger")})},openSettings(){window.open("http://"+location.hostname+":8080","_blank")}}},b={class:"charge-point-commands-internal-openwb"},k={key:0};function B(t,n,e,s,w,o){const p=u("openwb-base-button-input"),m=u("openwb-base-alert");return a(),c("div",b,[t.chargePoint.configuration.mode=="pro_plus"?(a(),c("div",k,[d(p,{title:"Ladepunkt aktualisieren","button-text":"Update anfordern",subtype:"success",onButtonClicked:o.triggerUpdate},{help:r(()=>[...n[0]||(n[0]=[i(" Hier kannst Du die Aktualisierung der openWB Pro anstoßen. Bitte stelle sicher, dass kein Fahrzeug angesteckt ist. ",-1)])]),_:1},8,["onButtonClicked"]),d(p,{title:"Einstellungen öffnen","button-text":"Zu den Einstellungen",subtype:"success",onButtonClicked:o.openSettings},{help:r(()=>[...n[1]||(n[1]=[i(" Mit diesem Befehl kannst Du die Einstellungen der openWB Pro in einem neuen Browser-Tab oder -Fenster öffnen. ",-1)])]),_:1},8,["onButtonClicked"])])):(a(),f(m,{key:1,subtype:"secondary"},{default:r(()=>[i(' Der Ladepunkt-Typ "'+l(t.chargePoint.type)+'" bietet für die Bauart "'+l(o.mode)+'" keine Befehle an. ',1)]),_:1}))])}const A=h(_,[["render",B],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/internal_openwb/commands.vue"]]);export{A as default}; diff --git a/web/settings/assets/commands-CY34MdmV.js b/web/settings/assets/commands-D5WT6PSm.js similarity index 94% rename from web/settings/assets/commands-CY34MdmV.js rename to web/settings/assets/commands-D5WT6PSm.js index 66a8ec3bb0..0feaaaaaf1 100644 --- a/web/settings/assets/commands-CY34MdmV.js +++ b/web/settings/assets/commands-D5WT6PSm.js @@ -1 +1 @@ -import{a as d}from"./ChargePointInstallation-u7kPgCv5.js";import{_ as u,m as c,l,f as g,q as a,u as r,B as p}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const m={name:"ChargePointCommandsOpenwbPro",mixins:[d],methods:{async triggerUpdate(){let t=new FormData;t.append("command","update"),t.append("data",'{"ip_address":"'+this.chargePoint.configuration.ip_address+'"}'),this.$root.postClientMessage("Die Aktualisierung der openWB Pro wird gestartet...","info"),this.axios.post(location.protocol+"//"+location.host+"/openWB/web/settings/modules/charge_points/openwb_pro/commands.php",t,{timeout:5e3}).then(()=>{this.$root.postClientMessage("Die Aktualisierung der openWB Pro wurde erfolgreich gestartet.","success")}).catch(e=>{var n="Aktualisierung fehlgeschlagen!
";e.response?(console.error(e.response.status,e.response.data),n+=e.response.status+": "+e.response.data):e.request?(console.error(e.request),n+="Es wurde keine Antwort vom Server empfangen."):(console.error("Error",e.message),n+="Es ist ein unbekannter Fehler aufgetreten."),this.$root.postClientMessage(n,"danger")})},openSettings(){window.open("http://"+this.chargePoint.configuration.ip_address,"_blank")}}},f={class:"charge-point-commands-openwb-pro"};function h(t,s,e,n,b,o){const i=c("openwb-base-button-input");return l(),g("div",f,[a(i,{title:"Ladepunkt aktualisieren","button-text":"Update anfordern",subtype:"success",disabled:t.chargePoint.configuration.ip_address==null,onButtonClicked:o.triggerUpdate},{help:r(()=>[...s[0]||(s[0]=[p(" Mit diesem Befehl kannst Du die Aktualisierung der openWB Pro anstoßen. Bitte beachte, dass kein Fahrzeug angesteckt ist. ",-1)])]),_:1},8,["disabled","onButtonClicked"]),a(i,{title:"Einstellungen öffnen","button-text":"Zu den Einstellungen",subtype:"success",disabled:t.chargePoint.configuration.ip_address==null,onButtonClicked:o.openSettings},{help:r(()=>[...s[1]||(s[1]=[p(" Mit diesem Befehl kannst Du die Einstellungen der openWB Pro in einem neuen Browser-Tab oder -Fenster öffnen. ",-1)])]),_:1},8,["disabled","onButtonClicked"])])}const E=u(m,[["render",h],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/openwb_pro/commands.vue"]]);export{E as default}; +import{a as d}from"./ChargePointInstallation-CmmRvfWj.js";import{_ as u,m as c,l,f as g,q as a,u as r,B as p}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const m={name:"ChargePointCommandsOpenwbPro",mixins:[d],methods:{async triggerUpdate(){let t=new FormData;t.append("command","update"),t.append("data",'{"ip_address":"'+this.chargePoint.configuration.ip_address+'"}'),this.$root.postClientMessage("Die Aktualisierung der openWB Pro wird gestartet...","info"),this.axios.post(location.protocol+"//"+location.host+"/openWB/web/settings/modules/charge_points/openwb_pro/commands.php",t,{timeout:5e3}).then(()=>{this.$root.postClientMessage("Die Aktualisierung der openWB Pro wurde erfolgreich gestartet.","success")}).catch(e=>{var n="Aktualisierung fehlgeschlagen!
";e.response?(console.error(e.response.status,e.response.data),n+=e.response.status+": "+e.response.data):e.request?(console.error(e.request),n+="Es wurde keine Antwort vom Server empfangen."):(console.error("Error",e.message),n+="Es ist ein unbekannter Fehler aufgetreten."),this.$root.postClientMessage(n,"danger")})},openSettings(){window.open("http://"+this.chargePoint.configuration.ip_address,"_blank")}}},f={class:"charge-point-commands-openwb-pro"};function h(t,s,e,n,b,o){const i=c("openwb-base-button-input");return l(),g("div",f,[a(i,{title:"Ladepunkt aktualisieren","button-text":"Update anfordern",subtype:"success",disabled:t.chargePoint.configuration.ip_address==null,onButtonClicked:o.triggerUpdate},{help:r(()=>[...s[0]||(s[0]=[p(" Mit diesem Befehl kannst Du die Aktualisierung der openWB Pro anstoßen. Bitte beachte, dass kein Fahrzeug angesteckt ist. ",-1)])]),_:1},8,["disabled","onButtonClicked"]),a(i,{title:"Einstellungen öffnen","button-text":"Zu den Einstellungen",subtype:"success",disabled:t.chargePoint.configuration.ip_address==null,onButtonClicked:o.openSettings},{help:r(()=>[...s[1]||(s[1]=[p(" Mit diesem Befehl kannst Du die Einstellungen der openWB Pro in einem neuen Browser-Tab oder -Fenster öffnen. ",-1)])]),_:1},8,["disabled","onButtonClicked"])])}const E=u(m,[["render",h],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/charge_points/openwb_pro/commands.vue"]]);export{E as default}; diff --git a/web/settings/assets/consumer-DcivouOg.js b/web/settings/assets/consumer-Ak9gNogG.js similarity index 92% rename from web/settings/assets/consumer-DcivouOg.js rename to web/settings/assets/consumer-Ak9gNogG.js index 089669918c..2022b5f4f5 100644 --- a/web/settings/assets/consumer-DcivouOg.js +++ b/web/settings/assets/consumer-Ak9gNogG.js @@ -1 +1 @@ -import{C as p}from"./ConsumerConfig-DBNAxLj7.js";import{_ as d,m as i,l as b,f,q as t,u as r,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"ConsumerStiebel",mixins:[p]},g={class:"consumer-stiebel"};function c(n,e,w,v,C,E){const a=i("openwb-base-heading"),m=i("openwb-base-alert"),l=i("openwb-base-text-input"),s=i("openwb-base-number-input");return b(),f("div",g,[t(a,null,{default:r(()=>[...e[3]||(e[3]=[u("Einstellungen für Stiebel Wärmepumpe mit ISG (Servicewelt über Modbus) und SG Ready Eingang",-1)])]),_:1}),t(m,{subtype:"info"},{default:r(()=>[...e[4]||(e[4]=[u(' Im ISG-Web muss unter "Einstellungen / Energiemanagement" der Parameter "SGREADY = Ein" gesetzt werden ',-1)])]),_:1}),t(l,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),t(s,{title:"Port",required:"",min:1,max:65535,"model-value":n.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.port"))},null,8,["model-value"]),t(s,{title:"Modbus ID",required:"","model-value":n.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.modbus_id"))},null,8,["model-value"])])}const y=d(_,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/stiebel/stiebel/consumer.vue"]]);export{y as default}; +import{C as p}from"./ConsumerConfig-CDodeLc0.js";import{_ as d,m as i,l as b,f,q as t,u as r,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"ConsumerStiebel",mixins:[p]},g={class:"consumer-stiebel"};function c(n,e,w,v,C,E){const a=i("openwb-base-heading"),m=i("openwb-base-alert"),l=i("openwb-base-text-input"),s=i("openwb-base-number-input");return b(),f("div",g,[t(a,null,{default:r(()=>[...e[3]||(e[3]=[u("Einstellungen für Stiebel Wärmepumpe mit ISG (Servicewelt über Modbus) und SG Ready Eingang",-1)])]),_:1}),t(m,{subtype:"info"},{default:r(()=>[...e[4]||(e[4]=[u(' Im ISG-Web muss unter "Einstellungen / Energiemanagement" der Parameter "SGREADY = Ein" gesetzt werden ',-1)])]),_:1}),t(l,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),t(s,{title:"Port",required:"",min:1,max:65535,"model-value":n.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.port"))},null,8,["model-value"]),t(s,{title:"Modbus ID",required:"","model-value":n.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.modbus_id"))},null,8,["model-value"])])}const y=d(_,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/stiebel/stiebel/consumer.vue"]]);export{y as default}; diff --git a/web/settings/assets/consumer-D-SMWXiz.js b/web/settings/assets/consumer-B1ueKIDM.js similarity index 92% rename from web/settings/assets/consumer-D-SMWXiz.js rename to web/settings/assets/consumer-B1ueKIDM.js index 109c15e51a..17b4091400 100644 --- a/web/settings/assets/consumer-D-SMWXiz.js +++ b/web/settings/assets/consumer-B1ueKIDM.js @@ -1 +1 @@ -import{C as b}from"./ConsumerConfig-DBNAxLj7.js";import{_ as f,m as u,l as g,f as v,q as t,u as i,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const c=[{text:"9s45",value:"9s45"},{text:"9s27",value:"9s27"},{text:"9s18",value:"9s18"},{text:"9s",value:"9s"},{text:"M3",value:"M3"},{text:"E2M1",value:"E2M1"},{text:"E2M3",value:"E2M3"},{text:"M1",value:"M1"}],_={name:"ConsumerMyPvActhor",mixins:[b],data(){return{modelOptions:c}}},w={class:"consumer-acthor"};function M(o,e,x,C,r,E){const a=u("openwb-base-heading"),m=u("openwb-base-alert"),d=u("openwb-base-text-input"),s=u("openwb-base-number-input"),p=u("openwb-base-select-input");return g(),v("div",w,[t(a,null,{default:i(()=>[...e[5]||(e[5]=[l(" Einstellungen für my-PV Acthor ",-1)])]),_:1}),t(m,{subtype:"info"},{default:i(()=>[...e[6]||(e[6]=[l(' Im Web Frontend des Heizstabs muss unter "Steuerungs-Einstellungen" der Parameter "Ansteuerungs-Typ = Modbus TCP" und "Zeitablauf Ansteuerung = 120 Sek" gesetzt werden. Für die Ausschaltschwelle werden 500W und die Ausschaltverzögerung 180s empfohlen, um die Regelung von Acthor nicht zu stören. Das minimale Regelintervall sollte auf 30 s (0,5 min) gestellt werden. ',-1)])]),_:1}),t(d,{title:"IP oder Hostname",subtype:"host",required:"","model-value":o.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.ip_address"))},null,8,["model-value"]),t(s,{title:"Port",required:"",min:1,max:65535,"model-value":o.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.port"))},null,8,["model-value"]),t(s,{title:"Modbus ID",required:"","model-value":o.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[2]||(e[2]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"]),t(p,{title:"Modell","not-selected":"Bitte auswählen",options:r.modelOptions,"model-value":o.consumer.configuration.model,"onUpdate:modelValue":e[3]||(e[3]=n=>o.updateConfiguration(n,"configuration.model"))},null,8,["options","model-value"]),t(s,{title:"Max Leistung",required:"","model-value":o.consumer.configuration.max_power,min:"1",unit:"W","onUpdate:modelValue":e[4]||(e[4]=n=>o.updateConfiguration(n,"configuration.max_power"))},null,8,["model-value"])])}const z=f(_,[["render",M],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/my_pv/acthor/consumer.vue"]]);export{z as default}; +import{C as b}from"./ConsumerConfig-CDodeLc0.js";import{_ as f,m as u,l as g,f as v,q as t,u as i,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const c=[{text:"9s45",value:"9s45"},{text:"9s27",value:"9s27"},{text:"9s18",value:"9s18"},{text:"9s",value:"9s"},{text:"M3",value:"M3"},{text:"E2M1",value:"E2M1"},{text:"E2M3",value:"E2M3"},{text:"M1",value:"M1"}],_={name:"ConsumerMyPvActhor",mixins:[b],data(){return{modelOptions:c}}},w={class:"consumer-acthor"};function M(o,e,x,C,r,E){const a=u("openwb-base-heading"),m=u("openwb-base-alert"),d=u("openwb-base-text-input"),s=u("openwb-base-number-input"),p=u("openwb-base-select-input");return g(),v("div",w,[t(a,null,{default:i(()=>[...e[5]||(e[5]=[l(" Einstellungen für my-PV Acthor ",-1)])]),_:1}),t(m,{subtype:"info"},{default:i(()=>[...e[6]||(e[6]=[l(' Im Web Frontend des Heizstabs muss unter "Steuerungs-Einstellungen" der Parameter "Ansteuerungs-Typ = Modbus TCP" und "Zeitablauf Ansteuerung = 120 Sek" gesetzt werden. Für die Ausschaltschwelle werden 500W und die Ausschaltverzögerung 180s empfohlen, um die Regelung von Acthor nicht zu stören. Das minimale Regelintervall sollte auf 30 s (0,5 min) gestellt werden. ',-1)])]),_:1}),t(d,{title:"IP oder Hostname",subtype:"host",required:"","model-value":o.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.ip_address"))},null,8,["model-value"]),t(s,{title:"Port",required:"",min:1,max:65535,"model-value":o.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.port"))},null,8,["model-value"]),t(s,{title:"Modbus ID",required:"","model-value":o.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[2]||(e[2]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"]),t(p,{title:"Modell","not-selected":"Bitte auswählen",options:r.modelOptions,"model-value":o.consumer.configuration.model,"onUpdate:modelValue":e[3]||(e[3]=n=>o.updateConfiguration(n,"configuration.model"))},null,8,["options","model-value"]),t(s,{title:"Max Leistung",required:"","model-value":o.consumer.configuration.max_power,min:"1",unit:"W","onUpdate:modelValue":e[4]||(e[4]=n=>o.updateConfiguration(n,"configuration.max_power"))},null,8,["model-value"])])}const z=f(_,[["render",M],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/my_pv/acthor/consumer.vue"]]);export{z as default}; diff --git a/web/settings/assets/consumer-BYkNOEGj.js b/web/settings/assets/consumer-BYkNOEGj.js new file mode 100644 index 0000000000..897d876b2b --- /dev/null +++ b/web/settings/assets/consumer-BYkNOEGj.js @@ -0,0 +1 @@ +import{C as d}from"./ConsumerConfig-CDodeLc0.js";import{_ as l,m as i,l as b,f,q as t,u as s,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"ConsumerWeishauptWwp",mixins:[d]},w={class:"consumer-weishaupt-wwp"};function c(o,e,g,v,W,C){const a=i("openwb-base-heading"),p=i("openwb-base-alert"),m=i("openwb-base-text-input"),r=i("openwb-base-number-input");return b(),f("div",w,[t(a,null,{default:s(()=>[...e[3]||(e[3]=[u(" Einstellungen für Weishaupt Wärmepumpe (WWP) ",-1)])]),_:1}),t(p,{subtype:"info"},{default:s(()=>[...e[4]||(e[4]=[u(" Gilt für die WWP-Baureihe; die ältere, SG-Ready-only WPM-Generation wird hiervon nicht abgedeckt. ",-1)])]),_:1}),t(m,{title:"IP oder Hostname",subtype:"host",required:"","model-value":o.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.ip_address"))},null,8,["model-value"]),t(r,{title:"Port",required:"",min:1,max:65535,"model-value":o.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.port"))},null,8,["model-value"]),t(r,{title:"Modbus ID",required:"",min:1,max:255,"model-value":o.consumer.configuration.modbus_id,"onUpdate:modelValue":e[2]||(e[2]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"])])}const k=l(_,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/weishaupt/weishaupt_wwp/consumer.vue"]]);export{k as default}; diff --git a/web/settings/assets/consumer-B_TG_jwd.js b/web/settings/assets/consumer-B_TG_jwd.js new file mode 100644 index 0000000000..f402b1686c --- /dev/null +++ b/web/settings/assets/consumer-B_TG_jwd.js @@ -0,0 +1 @@ +import{C as l}from"./ConsumerConfig-CDodeLc0.js";import{_ as d,m as i,l as b,f,q as t,u as a,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"ConsumerDaikinHomehubAltherma",mixins:[l]},g={class:"consumer-daikin-homehub-altherma"};function c(o,e,v,w,C,k){const s=i("openwb-base-heading"),m=i("openwb-base-alert"),p=i("openwb-base-text-input"),r=i("openwb-base-number-input");return b(),f("div",g,[t(s,null,{default:a(()=>[...e[3]||(e[3]=[u(" Einstellungen für Daikin Altherma (HomeHub) ",-1)])]),_:1}),t(m,{subtype:"info"},{default:a(()=>[...e[4]||(e[4]=[u(" Für die HomeHub-Anbindung (EKRHH-Adapter) von Daikin Altherma Wärmepumpen. ",-1)])]),_:1}),t(p,{title:"IP oder Hostname",subtype:"host",required:"","model-value":o.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.ip_address"))},null,8,["model-value"]),t(r,{title:"Port",required:"",min:1,max:65535,"model-value":o.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.port"))},null,8,["model-value"]),t(r,{title:"Modbus ID",required:"",min:1,max:255,"model-value":o.consumer.configuration.modbus_id,"onUpdate:modelValue":e[2]||(e[2]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"])])}const $=d(_,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/daikin/daikin_homehub_altherma/consumer.vue"]]);export{$ as default}; diff --git a/web/settings/assets/consumer-BjLvLZ31.js b/web/settings/assets/consumer-Bby-DojC.js similarity index 92% rename from web/settings/assets/consumer-BjLvLZ31.js rename to web/settings/assets/consumer-Bby-DojC.js index 0b2836f7c2..26a0ed0482 100644 --- a/web/settings/assets/consumer-BjLvLZ31.js +++ b/web/settings/assets/consumer-Bby-DojC.js @@ -1 +1 @@ -import{C as d}from"./ConsumerConfig-DBNAxLj7.js";import{_ as m,m as s,l as f,f as g,q as t,u as i,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const b={name:"ConsumerShellyEm",mixins:[d]},w={class:"consumer-shelly-em"};function v(n,e,y,h,_,C){const u=s("openwb-base-heading"),a=s("openwb-base-alert"),r=s("openwb-base-text-input"),p=s("openwb-base-select-input");return f(),g("div",w,[t(u,null,{default:i(()=>[...e[4]||(e[4]=[l(" Einstellungen für Shelly EM (Messen) ",-1)])]),_:1}),t(a,{subtype:"info"},{default:i(()=>[...e[5]||(e[5]=[l(" Unterstützt werden theoretisch alle ein- und dreiphasigen Shelly der Generation 1-3. Getestete Modelle sind Shelly 1pm, 1pm plus, Pro, Pro 3EM, Plug S. ",-1)])]),_:1}),t(r,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),t(r,{title:"Benutzername",subtype:"user","model-value":n.consumer.configuration.username,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.username"))},{help:i(()=>[...e[6]||(e[6]=[l(" Nur auszufüllen, wenn im Shelly die Authentifizierung aktiviert wurde. Funktioniert nicht für Shelly Plus.",-1)])]),_:1},8,["model-value"]),t(r,{title:"Passwort",subtype:"password","model-value":n.consumer.configuration.password,"onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.password"))},{help:i(()=>[...e[7]||(e[7]=[l(" Nur auszufüllen, wenn im Shelly die Authentifizierung aktiviert wurde. Funktioniert nicht für Shelly Plus.",-1)])]),_:1},8,["model-value"]),t(p,{title:"Vorzeichen invertieren","not-selected":"Bitte auswählen",options:[{value:-1,text:"ja"},{value:1,text:"nein"}],"model-value":n.consumer.configuration.factor,required:"","onUpdate:modelValue":e[3]||(e[3]=o=>n.updateConfiguration(o,"configuration.factor"))},{help:i(()=>[...e[8]||(e[8]=[l(" Einige Shelly Modelle liefern die Leistung mit umgedrehtem Vorzeichen. Falls dies der Fall sein sollte, das Vorzeichen invertieren. ",-1)])]),_:1},8,["model-value"])])}const M=m(b,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/shelly/shelly_em/consumer.vue"]]);export{M as default}; +import{C as d}from"./ConsumerConfig-CDodeLc0.js";import{_ as m,m as s,l as f,f as g,q as t,u as i,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const b={name:"ConsumerShellyEm",mixins:[d]},w={class:"consumer-shelly-em"};function v(n,e,y,h,_,C){const u=s("openwb-base-heading"),a=s("openwb-base-alert"),r=s("openwb-base-text-input"),p=s("openwb-base-select-input");return f(),g("div",w,[t(u,null,{default:i(()=>[...e[4]||(e[4]=[l(" Einstellungen für Shelly EM (Messen) ",-1)])]),_:1}),t(a,{subtype:"info"},{default:i(()=>[...e[5]||(e[5]=[l(" Unterstützt werden theoretisch alle ein- und dreiphasigen Shelly der Generation 1-3. Getestete Modelle sind Shelly 1pm, 1pm plus, Pro, Pro 3EM, Plug S. ",-1)])]),_:1}),t(r,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),t(r,{title:"Benutzername",subtype:"user","model-value":n.consumer.configuration.username,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.username"))},{help:i(()=>[...e[6]||(e[6]=[l(" Nur auszufüllen, wenn im Shelly die Authentifizierung aktiviert wurde. Funktioniert nicht für Shelly Plus.",-1)])]),_:1},8,["model-value"]),t(r,{title:"Passwort",subtype:"password","model-value":n.consumer.configuration.password,"onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.password"))},{help:i(()=>[...e[7]||(e[7]=[l(" Nur auszufüllen, wenn im Shelly die Authentifizierung aktiviert wurde. Funktioniert nicht für Shelly Plus.",-1)])]),_:1},8,["model-value"]),t(p,{title:"Vorzeichen invertieren","not-selected":"Bitte auswählen",options:[{value:-1,text:"ja"},{value:1,text:"nein"}],"model-value":n.consumer.configuration.factor,required:"","onUpdate:modelValue":e[3]||(e[3]=o=>n.updateConfiguration(o,"configuration.factor"))},{help:i(()=>[...e[8]||(e[8]=[l(" Einige Shelly Modelle liefern die Leistung mit umgedrehtem Vorzeichen. Falls dies der Fall sein sollte, das Vorzeichen invertieren. ",-1)])]),_:1},8,["model-value"])])}const M=m(b,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/shelly/shelly_em/consumer.vue"]]);export{M as default}; diff --git a/web/settings/assets/consumer-gJpZm4dC.js b/web/settings/assets/consumer-BhiN-Pbu.js similarity index 88% rename from web/settings/assets/consumer-gJpZm4dC.js rename to web/settings/assets/consumer-BhiN-Pbu.js index 2402720388..c1531fa5fc 100644 --- a/web/settings/assets/consumer-gJpZm4dC.js +++ b/web/settings/assets/consumer-BhiN-Pbu.js @@ -1 +1 @@ -import{C as a}from"./ConsumerConfig-DBNAxLj7.js";import{_ as i,m as s,l as m,f as l,q as t,u as p,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"ConsumerAvm",mixins:[a]},g={class:"consumer-avm"};function v(o,e,b,c,w,C){const u=s("openwb-base-heading"),r=s("openwb-base-text-input");return m(),l("div",g,[t(u,null,{default:p(()=>[...e[4]||(e[4]=[d("Einstellungen für AVM Fritz!Box",-1)])]),_:1}),t(r,{title:"IP oder Hostname",subtype:"host",required:"","model-value":o.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.ip_address"))},null,8,["model-value"]),t(r,{title:"Benutzername",subtype:"user",required:"","model-value":o.consumer.configuration.username,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.username"))},null,8,["model-value"]),t(r,{title:"Passwort",subtype:"password",required:"","model-value":o.consumer.configuration.password,"onUpdate:modelValue":e[2]||(e[2]=n=>o.updateConfiguration(n,"configuration.password"))},null,8,["model-value"]),t(r,{title:"Name",subtype:"text",required:"","model-value":o.consumer.configuration.name,"onUpdate:modelValue":e[3]||(e[3]=n=>o.updateConfiguration(n,"configuration.name"))},null,8,["model-value"])])}const N=i(f,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/avm/avm/consumer.vue"]]);export{N as default}; +import{C as a}from"./ConsumerConfig-CDodeLc0.js";import{_ as i,m as s,l as m,f as l,q as t,u as p,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"ConsumerAvm",mixins:[a]},g={class:"consumer-avm"};function v(o,e,b,c,w,C){const u=s("openwb-base-heading"),r=s("openwb-base-text-input");return m(),l("div",g,[t(u,null,{default:p(()=>[...e[4]||(e[4]=[d("Einstellungen für AVM Fritz!Box",-1)])]),_:1}),t(r,{title:"IP oder Hostname",subtype:"host",required:"","model-value":o.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.ip_address"))},null,8,["model-value"]),t(r,{title:"Benutzername",subtype:"user",required:"","model-value":o.consumer.configuration.username,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.username"))},null,8,["model-value"]),t(r,{title:"Passwort",subtype:"password",required:"","model-value":o.consumer.configuration.password,"onUpdate:modelValue":e[2]||(e[2]=n=>o.updateConfiguration(n,"configuration.password"))},null,8,["model-value"]),t(r,{title:"Name",subtype:"text",required:"","model-value":o.consumer.configuration.name,"onUpdate:modelValue":e[3]||(e[3]=n=>o.updateConfiguration(n,"configuration.name"))},null,8,["model-value"])])}const N=i(f,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/avm/avm/consumer.vue"]]);export{N as default}; diff --git a/web/settings/assets/consumer-CEs8i0Hw.js b/web/settings/assets/consumer-Bkx6h3Vw.js similarity index 92% rename from web/settings/assets/consumer-CEs8i0Hw.js rename to web/settings/assets/consumer-Bkx6h3Vw.js index af8ed3ad73..13f351831c 100644 --- a/web/settings/assets/consumer-CEs8i0Hw.js +++ b/web/settings/assets/consumer-Bkx6h3Vw.js @@ -1 +1 @@ -import{C as l}from"./ConsumerConfig-DBNAxLj7.js";import{_ as d,m as r,l as b,f,q as t,u as s,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"ConsumerRatiotherm",mixins:[l]},c={class:"consumer-ratiotherm"};function g(o,e,v,w,C,E){const a=r("openwb-base-heading"),m=r("openwb-base-alert"),p=r("openwb-base-text-input"),i=r("openwb-base-number-input");return b(),f("div",c,[t(a,null,{default:s(()=>[...e[3]||(e[3]=[u("Einstellungen für Ratiotherm Wärmepumpe",-1)])]),_:1}),t(m,{subtype:"info"},{default:s(()=>[...e[4]||(e[4]=[u("Anschluss via Modbus RTU (Elfin-EE11) auf CAN-EZ3",-1)])]),_:1}),t(p,{title:"IP oder Hostname",subtype:"host",required:"","model-value":o.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.ip_address"))},null,8,["model-value"]),t(i,{title:"Port",required:"",min:1,max:65535,"model-value":o.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.port"))},null,8,["model-value"]),t(i,{title:"Modbus ID",required:"","model-value":o.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[2]||(e[2]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"])])}const R=d(_,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/ratiotherm/ratiotherm/consumer.vue"]]);export{R as default}; +import{C as l}from"./ConsumerConfig-CDodeLc0.js";import{_ as d,m as r,l as b,f,q as t,u as s,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"ConsumerRatiotherm",mixins:[l]},c={class:"consumer-ratiotherm"};function g(o,e,v,w,C,E){const a=r("openwb-base-heading"),m=r("openwb-base-alert"),p=r("openwb-base-text-input"),i=r("openwb-base-number-input");return b(),f("div",c,[t(a,null,{default:s(()=>[...e[3]||(e[3]=[u("Einstellungen für Ratiotherm Wärmepumpe",-1)])]),_:1}),t(m,{subtype:"info"},{default:s(()=>[...e[4]||(e[4]=[u("Anschluss via Modbus RTU (Elfin-EE11) auf CAN-EZ3",-1)])]),_:1}),t(p,{title:"IP oder Hostname",subtype:"host",required:"","model-value":o.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.ip_address"))},null,8,["model-value"]),t(i,{title:"Port",required:"",min:1,max:65535,"model-value":o.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.port"))},null,8,["model-value"]),t(i,{title:"Modbus ID",required:"","model-value":o.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[2]||(e[2]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"])])}const R=d(_,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/ratiotherm/ratiotherm/consumer.vue"]]);export{R as default}; diff --git a/web/settings/assets/consumer-Bmfknm9t.js b/web/settings/assets/consumer-Bmfknm9t.js new file mode 100644 index 0000000000..7d186e7e50 --- /dev/null +++ b/web/settings/assets/consumer-Bmfknm9t.js @@ -0,0 +1 @@ +import{C as p}from"./ConsumerConfig-CDodeLc0.js";import{_ as d,m as r,l,f,q as t,u as s,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const b={name:"ConsumerEgo",mixins:[p]},g={class:"consumer-ego"};function _(o,e,c,v,C,w){const a=r("openwb-base-heading"),m=r("openwb-base-text-input"),i=r("openwb-base-number-input");return l(),f("div",g,[t(a,null,{default:s(()=>[...e[3]||(e[3]=[u(" Einstellungen für E.G.O. Smart Heater ",-1)])]),_:1}),t(m,{title:"IP oder Hostname",subtype:"host",required:"","model-value":o.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.ip_address"))},null,8,["model-value"]),t(i,{title:"Port",required:"",min:1,max:65535,"model-value":o.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.port"))},null,8,["model-value"]),t(i,{title:"Modbus ID",required:"",min:1,max:255,"model-value":o.consumer.configuration.modbus_id,"onUpdate:modelValue":e[2]||(e[2]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},{help:s(()=>[...e[4]||(e[4]=[u(" Werkseinstellung des Smart Heater: 247. ",-1)])]),_:1},8,["model-value"])])}const U=d(b,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/ego/ego/consumer.vue"]]);export{U as default}; diff --git a/web/settings/assets/consumer-D0Zq1wHi.js b/web/settings/assets/consumer-C30nO6sE.js similarity index 80% rename from web/settings/assets/consumer-D0Zq1wHi.js rename to web/settings/assets/consumer-C30nO6sE.js index 996fbdf353..9454c86c6c 100644 --- a/web/settings/assets/consumer-D0Zq1wHi.js +++ b/web/settings/assets/consumer-C30nO6sE.js @@ -1 +1 @@ -import{C as i}from"./ConsumerConfig-DBNAxLj7.js";import{_ as a,m as t,l as p,f as u,q as n,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const c={name:"ConsumerMyStrom",mixins:[i]},_={class:"consumer-mystrom"};function f(o,e,b,g,x,C){const s=t("openwb-base-heading"),r=t("openwb-base-text-input");return p(),u("div",_,[n(s,null,{default:d(()=>[...e[1]||(e[1]=[l("Einstellungen für MyStrom",-1)])]),_:1}),n(r,{title:"IP oder Hostname",subtype:"host",required:"","model-value":o.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=m=>o.updateConfiguration(m,"configuration.ip_address"))},null,8,["model-value"])])}const k=a(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/mystrom/mystrom/consumer.vue"]]);export{k as default}; +import{C as i}from"./ConsumerConfig-CDodeLc0.js";import{_ as a,m as t,l as p,f as u,q as n,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const c={name:"ConsumerMyStrom",mixins:[i]},_={class:"consumer-mystrom"};function f(o,e,b,g,x,C){const s=t("openwb-base-heading"),r=t("openwb-base-text-input");return p(),u("div",_,[n(s,null,{default:d(()=>[...e[1]||(e[1]=[l("Einstellungen für MyStrom",-1)])]),_:1}),n(r,{title:"IP oder Hostname",subtype:"host",required:"","model-value":o.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=m=>o.updateConfiguration(m,"configuration.ip_address"))},null,8,["model-value"])])}const k=a(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/mystrom/mystrom/consumer.vue"]]);export{k as default}; diff --git a/web/settings/assets/consumer-lsBe_9nM.js b/web/settings/assets/consumer-C7mzR7uP.js similarity index 93% rename from web/settings/assets/consumer-lsBe_9nM.js rename to web/settings/assets/consumer-C7mzR7uP.js index aa76f9ca32..9b73d35adc 100644 --- a/web/settings/assets/consumer-lsBe_9nM.js +++ b/web/settings/assets/consumer-C7mzR7uP.js @@ -1 +1 @@ -import{C as l}from"./ConsumerConfig-DBNAxLj7.js";import{_ as p,m as s,l as b,f,q as t,u,B as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const g={name:"ConsumerLambda",mixins:[l]},_={class:"consumer-lambda"};function c(n,e,w,v,C,W){const a=s("openwb-base-heading"),m=s("openwb-base-alert"),d=s("openwb-base-text-input"),r=s("openwb-base-number-input");return b(),f("div",_,[t(a,null,{default:u(()=>[...e[3]||(e[3]=[i(" Einstellungen für Lambda Wärmepumpe ",-1)])]),_:1}),t(m,{subtype:"info"},{default:u(()=>[...e[4]||(e[4]=[i(' Modbus TCP muss in der Fachmannebene aktiviert sein. Bei Verwendung "Wärmepumpe in Eigensteuerung" sendet openWB den aktuellen Netzbezug an den E-Manager der Wärmepumpe - zusätzlich muss am E-Manager die Datenquelle auf "Modbus Client" umgestellt werden, sonst wertet die Wärmepumpe den Wert nicht aus. Bei "Stufenlos regelbar" schreibt openWB stattdessen die Sollleistung in dasselbe Register, wodurch der an die Wärmepumpe gemeldete Netzbezug verfälscht wird. ',-1)])]),_:1}),t(d,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),t(r,{title:"Port",required:"",min:1,max:65535,"model-value":n.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.port"))},null,8,["model-value"]),t(r,{title:"Modbus ID",required:"","model-value":n.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.modbus_id"))},null,8,["model-value"])])}const N=p(g,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/lambda_/lambda_/consumer.vue"]]);export{N as default}; +import{C as l}from"./ConsumerConfig-CDodeLc0.js";import{_ as p,m as s,l as b,f,q as t,u,B as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const g={name:"ConsumerLambda",mixins:[l]},_={class:"consumer-lambda"};function c(n,e,w,v,C,W){const a=s("openwb-base-heading"),m=s("openwb-base-alert"),d=s("openwb-base-text-input"),r=s("openwb-base-number-input");return b(),f("div",_,[t(a,null,{default:u(()=>[...e[3]||(e[3]=[i(" Einstellungen für Lambda Wärmepumpe ",-1)])]),_:1}),t(m,{subtype:"info"},{default:u(()=>[...e[4]||(e[4]=[i(' Modbus TCP muss in der Fachmannebene aktiviert sein. Bei Verwendung "Wärmepumpe in Eigensteuerung" sendet openWB den aktuellen Netzbezug an den E-Manager der Wärmepumpe - zusätzlich muss am E-Manager die Datenquelle auf "Modbus Client" umgestellt werden, sonst wertet die Wärmepumpe den Wert nicht aus. Bei "Stufenlos regelbar" schreibt openWB stattdessen die Sollleistung in dasselbe Register, wodurch der an die Wärmepumpe gemeldete Netzbezug verfälscht wird. ',-1)])]),_:1}),t(d,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),t(r,{title:"Port",required:"",min:1,max:65535,"model-value":n.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.port"))},null,8,["model-value"]),t(r,{title:"Modbus ID",required:"","model-value":n.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.modbus_id"))},null,8,["model-value"])])}const N=p(g,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/lambda_/lambda_/consumer.vue"]]);export{N as default}; diff --git a/web/settings/assets/consumer-cOlFnPi6.js b/web/settings/assets/consumer-CH0MotHm.js similarity index 91% rename from web/settings/assets/consumer-cOlFnPi6.js rename to web/settings/assets/consumer-CH0MotHm.js index 7102bfabee..2bf2645e48 100644 --- a/web/settings/assets/consumer-cOlFnPi6.js +++ b/web/settings/assets/consumer-CH0MotHm.js @@ -1 +1 @@ -import{C as l}from"./ConsumerConfig-DBNAxLj7.js";import{_ as p,m as s,l as b,f as g,q as t,u as r,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"ConsumerVampair",mixins:[l]},c={class:"consumer-vampair"};function _(n,e,w,v,h,C){const a=s("openwb-base-heading"),d=s("openwb-base-alert"),m=s("openwb-base-text-input"),i=s("openwb-base-number-input");return b(),g("div",c,[t(a,null,{default:r(()=>[...e[3]||(e[3]=[u("Einstellungen für Vampair Wärmepumpe",-1)])]),_:1}),t(d,{subtype:"info"},{default:r(()=>[...e[4]||(e[4]=[u(' Im Servicemenü muss (durch eine Fachkraft) die Überstromnutzung aktiviert und auf ModbusTCP gestellt werden. Danach muss lediglich eine Ein- und Ausschaltschwelle für die Überstromnutzung eingestellt werden. Für die Verwendung "Wärmepumpe in Eigensteuerung" muss dann die Ein- und Ausschaltschwelle für die Überstromnutzung eingestellt werden. Eine negative Ausschaltschwelle bedeutet, dass die Wärmepumpe die fehlende Leistung aus dem Netz bezieht. Für die Verwendung "Stufenlos regelbar" sollte die Ein- und Ausschaltschwelle auf die maximale Leistung der Wärmepumpe gestellt werden. openWB gibt dann der Wärmepumpe die Leistung vor. ',-1)])]),_:1}),t(m,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),t(i,{title:"Port",required:"",min:1,max:65535,"model-value":n.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.port"))},null,8,["model-value"]),t(i,{title:"Modbus ID",required:"","model-value":n.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.modbus_id"))},null,8,["model-value"])])}const A=p(f,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/solarfocus/vampair/consumer.vue"]]);export{A as default}; +import{C as l}from"./ConsumerConfig-CDodeLc0.js";import{_ as p,m as s,l as b,f as g,q as t,u as r,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"ConsumerVampair",mixins:[l]},c={class:"consumer-vampair"};function _(n,e,w,v,h,C){const a=s("openwb-base-heading"),d=s("openwb-base-alert"),m=s("openwb-base-text-input"),i=s("openwb-base-number-input");return b(),g("div",c,[t(a,null,{default:r(()=>[...e[3]||(e[3]=[u("Einstellungen für Vampair Wärmepumpe",-1)])]),_:1}),t(d,{subtype:"info"},{default:r(()=>[...e[4]||(e[4]=[u(' Im Servicemenü muss (durch eine Fachkraft) die Überstromnutzung aktiviert und auf ModbusTCP gestellt werden. Danach muss lediglich eine Ein- und Ausschaltschwelle für die Überstromnutzung eingestellt werden. Für die Verwendung "Wärmepumpe in Eigensteuerung" muss dann die Ein- und Ausschaltschwelle für die Überstromnutzung eingestellt werden. Eine negative Ausschaltschwelle bedeutet, dass die Wärmepumpe die fehlende Leistung aus dem Netz bezieht. Für die Verwendung "Stufenlos regelbar" sollte die Ein- und Ausschaltschwelle auf die maximale Leistung der Wärmepumpe gestellt werden. openWB gibt dann der Wärmepumpe die Leistung vor. ',-1)])]),_:1}),t(m,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),t(i,{title:"Port",required:"",min:1,max:65535,"model-value":n.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.port"))},null,8,["model-value"]),t(i,{title:"Modbus ID",required:"","model-value":n.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.modbus_id"))},null,8,["model-value"])])}const A=p(f,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/solarfocus/vampair/consumer.vue"]]);export{A as default}; diff --git a/web/settings/assets/consumer-CPPPGiNU.js b/web/settings/assets/consumer-CPPPGiNU.js new file mode 100644 index 0000000000..c680ff7f1d --- /dev/null +++ b/web/settings/assets/consumer-CPPPGiNU.js @@ -0,0 +1 @@ +import{C as l}from"./ConsumerConfig-CDodeLc0.js";import{_ as d,m as u,l as b,f,q as t,u as r,B as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"ConsumerMtec",mixins:[l]},g={class:"consumer-mtec"};function c(o,e,w,C,v,M){const m=u("openwb-base-heading"),a=u("openwb-base-alert"),p=u("openwb-base-text-input"),s=u("openwb-base-number-input");return b(),f("div",g,[t(m,null,{default:r(()=>[...e[3]||(e[3]=[i(" Einstellungen für M-TEC Wärmepumpe ",-1)])]),_:1}),t(a,{subtype:"info"},{default:r(()=>[...e[4]||(e[4]=[i(' Am Wärmepumpenregler muss "Modul Type" auf "Virtual" und "WMZ Modus" auf "Analog" gestellt werden (siehe M-TEC-Anleitung zur PV-Überschussnutzung). ',-1)])]),_:1}),t(p,{title:"IP oder Hostname",subtype:"host",required:"","model-value":o.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.ip_address"))},null,8,["model-value"]),t(s,{title:"Port",required:"",min:1,max:65535,"model-value":o.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.port"))},null,8,["model-value"]),t(s,{title:"Modbus ID",required:"",min:1,max:255,"model-value":o.consumer.configuration.modbus_id,"onUpdate:modelValue":e[2]||(e[2]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"])])}const y=d(_,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/mtec/mtec/consumer.vue"]]);export{y as default}; diff --git a/web/settings/assets/consumer-B0w3Qt6u.js b/web/settings/assets/consumer-CVjfcpZy.js similarity index 96% rename from web/settings/assets/consumer-B0w3Qt6u.js rename to web/settings/assets/consumer-CVjfcpZy.js index c02101095e..c24e492fc7 100644 --- a/web/settings/assets/consumer-B0w3Qt6u.js +++ b/web/settings/assets/consumer-CVjfcpZy.js @@ -1 +1 @@ -import{C as d}from"./ConsumerConfig-DBNAxLj7.js";import{_ as m,m as p,l as a,f,q as u,u as g,B as v,z as r,x as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const h={name:"ConsumerGenericHttp",mixins:[d],computed:{usageType(){return this.consumer.consumerUsage?.type},showSwitchPaths(){return["suspendable_onoff","continuous"].includes(this.usageType)},showPowerLimitPath(){return this.usageType==="suspendable_tunable"}}},w={class:"consumer-generic-http"};function b(t,e,P,y,C,i){const s=p("openwb-base-heading"),n=p("openwb-base-text-input");return a(),f("div",w,[u(s,null,{default:g(()=>[...e[11]||(e[11]=[v("Einstellungen für HTTP-Verbraucher",-1)])]),_:1}),u(n,{title:"Server-URL",subtype:"url",required:"","model-value":t.consumer.configuration.url,"onUpdate:modelValue":e[0]||(e[0]=o=>t.updateConfiguration(o,"configuration.url"))},null,8,["model-value"]),u(n,{title:"Pfad Strom L1",subtype:"text","model-value":t.consumer.configuration.current_l1_path,"onUpdate:modelValue":e[1]||(e[1]=o=>t.updateConfiguration(o,"configuration.current_l1_path"))},null,8,["model-value"]),u(n,{title:"Pfad Strom L2",subtype:"text","model-value":t.consumer.configuration.current_l2_path,"onUpdate:modelValue":e[2]||(e[2]=o=>t.updateConfiguration(o,"configuration.current_l2_path"))},null,8,["model-value"]),u(n,{title:"Pfad Strom L3",subtype:"text","model-value":t.consumer.configuration.current_l3_path,"onUpdate:modelValue":e[3]||(e[3]=o=>t.updateConfiguration(o,"configuration.current_l3_path"))},null,8,["model-value"]),u(n,{title:"Pfad Leistung",subtype:"text","model-value":t.consumer.configuration.power_path,"onUpdate:modelValue":e[4]||(e[4]=o=>t.updateConfiguration(o,"configuration.power_path"))},null,8,["model-value"]),u(n,{title:"Pfad Temperaturen",subtype:"text","model-value":t.consumer.configuration.temperatures_path,"onUpdate:modelValue":e[5]||(e[5]=o=>t.updateConfiguration(o,"configuration.temperatures_path"))},null,8,["model-value"]),u(n,{title:"Pfad Bezug",subtype:"text","model-value":t.consumer.configuration.imported_path,"onUpdate:modelValue":e[6]||(e[6]=o=>t.updateConfiguration(o,"configuration.imported_path"))},null,8,["model-value"]),u(n,{title:"Pfad Einspeisung",subtype:"text","model-value":t.consumer.configuration.exported_path,"onUpdate:modelValue":e[7]||(e[7]=o=>t.updateConfiguration(o,"configuration.exported_path"))},null,8,["model-value"]),i.showSwitchPaths?(a(),r(n,{key:0,title:"Pfad Schalten Ein",subtype:"text","model-value":t.consumer.configuration.switch_on_path,"onUpdate:modelValue":e[8]||(e[8]=o=>t.updateConfiguration(o,"configuration.switch_on_path"))},null,8,["model-value"])):l("",!0),i.showSwitchPaths?(a(),r(n,{key:1,title:"Pfad Schalten Aus",subtype:"text","model-value":t.consumer.configuration.switch_off_path,"onUpdate:modelValue":e[9]||(e[9]=o=>t.updateConfiguration(o,"configuration.switch_off_path"))},null,8,["model-value"])):l("",!0),i.showPowerLimitPath?(a(),r(n,{key:2,title:"Pfad Set Power Limit",subtype:"text","model-value":t.consumer.configuration.set_power_limit_path,"onUpdate:modelValue":e[10]||(e[10]=o=>t.updateConfiguration(o,"configuration.set_power_limit_path"))},null,8,["model-value"])):l("",!0)])}const B=m(h,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/generic/http/consumer.vue"]]);export{B as default}; +import{C as d}from"./ConsumerConfig-CDodeLc0.js";import{_ as m,m as p,l as a,f,q as u,u as g,B as v,z as r,x as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const h={name:"ConsumerGenericHttp",mixins:[d],computed:{usageType(){return this.consumer.consumerUsage?.type},showSwitchPaths(){return["suspendable_onoff","continuous"].includes(this.usageType)},showPowerLimitPath(){return this.usageType==="suspendable_tunable"}}},w={class:"consumer-generic-http"};function b(t,e,P,y,C,i){const s=p("openwb-base-heading"),n=p("openwb-base-text-input");return a(),f("div",w,[u(s,null,{default:g(()=>[...e[11]||(e[11]=[v("Einstellungen für HTTP-Verbraucher",-1)])]),_:1}),u(n,{title:"Server-URL",subtype:"url",required:"","model-value":t.consumer.configuration.url,"onUpdate:modelValue":e[0]||(e[0]=o=>t.updateConfiguration(o,"configuration.url"))},null,8,["model-value"]),u(n,{title:"Pfad Strom L1",subtype:"text","model-value":t.consumer.configuration.current_l1_path,"onUpdate:modelValue":e[1]||(e[1]=o=>t.updateConfiguration(o,"configuration.current_l1_path"))},null,8,["model-value"]),u(n,{title:"Pfad Strom L2",subtype:"text","model-value":t.consumer.configuration.current_l2_path,"onUpdate:modelValue":e[2]||(e[2]=o=>t.updateConfiguration(o,"configuration.current_l2_path"))},null,8,["model-value"]),u(n,{title:"Pfad Strom L3",subtype:"text","model-value":t.consumer.configuration.current_l3_path,"onUpdate:modelValue":e[3]||(e[3]=o=>t.updateConfiguration(o,"configuration.current_l3_path"))},null,8,["model-value"]),u(n,{title:"Pfad Leistung",subtype:"text","model-value":t.consumer.configuration.power_path,"onUpdate:modelValue":e[4]||(e[4]=o=>t.updateConfiguration(o,"configuration.power_path"))},null,8,["model-value"]),u(n,{title:"Pfad Temperaturen",subtype:"text","model-value":t.consumer.configuration.temperatures_path,"onUpdate:modelValue":e[5]||(e[5]=o=>t.updateConfiguration(o,"configuration.temperatures_path"))},null,8,["model-value"]),u(n,{title:"Pfad Bezug",subtype:"text","model-value":t.consumer.configuration.imported_path,"onUpdate:modelValue":e[6]||(e[6]=o=>t.updateConfiguration(o,"configuration.imported_path"))},null,8,["model-value"]),u(n,{title:"Pfad Einspeisung",subtype:"text","model-value":t.consumer.configuration.exported_path,"onUpdate:modelValue":e[7]||(e[7]=o=>t.updateConfiguration(o,"configuration.exported_path"))},null,8,["model-value"]),i.showSwitchPaths?(a(),r(n,{key:0,title:"Pfad Schalten Ein",subtype:"text","model-value":t.consumer.configuration.switch_on_path,"onUpdate:modelValue":e[8]||(e[8]=o=>t.updateConfiguration(o,"configuration.switch_on_path"))},null,8,["model-value"])):l("",!0),i.showSwitchPaths?(a(),r(n,{key:1,title:"Pfad Schalten Aus",subtype:"text","model-value":t.consumer.configuration.switch_off_path,"onUpdate:modelValue":e[9]||(e[9]=o=>t.updateConfiguration(o,"configuration.switch_off_path"))},null,8,["model-value"])):l("",!0),i.showPowerLimitPath?(a(),r(n,{key:2,title:"Pfad Set Power Limit",subtype:"text","model-value":t.consumer.configuration.set_power_limit_path,"onUpdate:modelValue":e[10]||(e[10]=o=>t.updateConfiguration(o,"configuration.set_power_limit_path"))},null,8,["model-value"])):l("",!0)])}const B=m(h,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/generic/http/consumer.vue"]]);export{B as default}; diff --git a/web/settings/assets/consumer-CSpVexRX.js b/web/settings/assets/consumer-CZYz4YZg.js similarity index 94% rename from web/settings/assets/consumer-CSpVexRX.js rename to web/settings/assets/consumer-CZYz4YZg.js index c6effe2732..c1a930a07d 100644 --- a/web/settings/assets/consumer-CSpVexRX.js +++ b/web/settings/assets/consumer-CZYz4YZg.js @@ -1 +1 @@ -import{C as d}from"./ConsumerConfig-DBNAxLj7.js";import{_ as b,m as i,l as g,f,q as t,u,B as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const c={name:"ConsumerIDM",mixins:[d]},v={class:"consumer-idm"};function _(n,e,w,V,C,B){const a=i("openwb-base-heading"),l=i("openwb-base-alert"),m=i("openwb-base-text-input"),s=i("openwb-base-number-input"),p=i("openwb-base-select-input");return g(),f("div",v,[t(a,null,{default:u(()=>[...e[4]||(e[4]=[r(" Einstellungen für IDM Wärmepumpe ",-1)])]),_:1}),t(l,{subtype:"info"},{default:u(()=>[...e[5]||(e[5]=[r(' ModbusTCP muss in der Fachmannebene aktiviert sein. Bei Verwendung "Wärmepumpe in Eigensteuerung" sendet openWB PV-Erzeugung, Hausverbrauch und Batteriewerte an die Wärmepumpe - zusätzlich muss in der Fachmannebene unter "PV Signal" die Option "Gebäudeleittechnik / Smartfox" gewählt sein, sonst wertet die Wärmepumpe die Werte nicht aus. Bei " Stufenlos regelbar" schreibt openWB die Sollleistung als PV-Überschuss in die Regelung, was die PV-Eigenverbrauchs-Statistik im IDM-Portal verfälscht. ',-1)])]),_:1}),t(m,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),t(s,{title:"Port",required:"",min:1,max:65535,"model-value":n.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.port"))},null,8,["model-value"]),t(s,{title:"Modbus ID",required:"","model-value":n.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.modbus_id"))},null,8,["model-value"]),t(p,{title:"Version","not-selected":"Bitte auswählen",options:[{value:1,text:"Navigator 1.7"},{value:2,text:"Navigator 2.0"}],"model-value":n.consumer.configuration.version,required:"","onUpdate:modelValue":e[3]||(e[3]=o=>n.updateConfiguration(o,"configuration.version"))},null,8,["model-value"])])}const I=b(c,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/idm/idm/consumer.vue"]]);export{I as default}; +import{C as d}from"./ConsumerConfig-CDodeLc0.js";import{_ as b,m as i,l as g,f,q as t,u,B as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const c={name:"ConsumerIDM",mixins:[d]},v={class:"consumer-idm"};function _(n,e,w,V,C,B){const a=i("openwb-base-heading"),l=i("openwb-base-alert"),m=i("openwb-base-text-input"),s=i("openwb-base-number-input"),p=i("openwb-base-select-input");return g(),f("div",v,[t(a,null,{default:u(()=>[...e[4]||(e[4]=[r(" Einstellungen für IDM Wärmepumpe ",-1)])]),_:1}),t(l,{subtype:"info"},{default:u(()=>[...e[5]||(e[5]=[r(' ModbusTCP muss in der Fachmannebene aktiviert sein. Bei Verwendung "Wärmepumpe in Eigensteuerung" sendet openWB PV-Erzeugung, Hausverbrauch und Batteriewerte an die Wärmepumpe - zusätzlich muss in der Fachmannebene unter "PV Signal" die Option "Gebäudeleittechnik / Smartfox" gewählt sein, sonst wertet die Wärmepumpe die Werte nicht aus. Bei " Stufenlos regelbar" schreibt openWB die Sollleistung als PV-Überschuss in die Regelung, was die PV-Eigenverbrauchs-Statistik im IDM-Portal verfälscht. ',-1)])]),_:1}),t(m,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),t(s,{title:"Port",required:"",min:1,max:65535,"model-value":n.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.port"))},null,8,["model-value"]),t(s,{title:"Modbus ID",required:"","model-value":n.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.modbus_id"))},null,8,["model-value"]),t(p,{title:"Version","not-selected":"Bitte auswählen",options:[{value:1,text:"Navigator 1.7"},{value:2,text:"Navigator 2.0"}],"model-value":n.consumer.configuration.version,required:"","onUpdate:modelValue":e[3]||(e[3]=o=>n.updateConfiguration(o,"configuration.version"))},null,8,["model-value"])])}const I=b(c,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/idm/idm/consumer.vue"]]);export{I as default}; diff --git a/web/settings/assets/consumer-Cd_74VSS.js b/web/settings/assets/consumer-Cd_74VSS.js new file mode 100644 index 0000000000..4ddad5e393 --- /dev/null +++ b/web/settings/assets/consumer-Cd_74VSS.js @@ -0,0 +1 @@ +import{C as l}from"./ConsumerConfig-CDodeLc0.js";import{_ as d,m as i,l as b,f,q as t,u as r,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"ConsumerKermi",mixins:[l]},g={class:"consumer-kermi"};function c(o,e,v,w,C,x){const m=i("openwb-base-heading"),a=i("openwb-base-alert"),p=i("openwb-base-text-input"),u=i("openwb-base-number-input");return b(),f("div",g,[t(m,null,{default:r(()=>[...e[3]||(e[3]=[s(" Einstellungen für Kermi x-center pro ",-1)])]),_:1}),t(a,{subtype:"info"},{default:r(()=>[...e[4]||(e[4]=[s(" ModbusTCP muss am Regler aktiviert sein. ",-1)])]),_:1}),t(p,{title:"IP oder Hostname",subtype:"host",required:"","model-value":o.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.ip_address"))},null,8,["model-value"]),t(u,{title:"Port",required:"",min:1,max:65535,"model-value":o.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.port"))},null,8,["model-value"]),t(u,{title:"Modbus ID",required:"",min:1,max:255,"model-value":o.consumer.configuration.modbus_id,"onUpdate:modelValue":e[2]||(e[2]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},{help:r(()=>[...e[5]||(e[5]=[s(" Die Wärmepumpen-Einheit liegt beim x-center pro immer auf Modbus-ID 40. ",-1)])]),_:1},8,["model-value"])])}const I=d(_,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/kermi/kermi/consumer.vue"]]);export{I as default}; diff --git a/web/settings/assets/consumer-uGAO2_Qs.js b/web/settings/assets/consumer-CgpjQOKz.js similarity index 89% rename from web/settings/assets/consumer-uGAO2_Qs.js rename to web/settings/assets/consumer-CgpjQOKz.js index b7fb103165..7f04ccbb1f 100644 --- a/web/settings/assets/consumer-uGAO2_Qs.js +++ b/web/settings/assets/consumer-CgpjQOKz.js @@ -1 +1 @@ -import{C as d}from"./ConsumerConfig-DBNAxLj7.js";import{_ as l,m as s,l as b,f as c,q as t,u as i,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"ConsumerOvum",mixins:[d]},g={class:"consumer-ovum"};function _(n,e,v,C,w,h){const a=s("openwb-base-heading"),m=s("openwb-base-alert"),p=s("openwb-base-text-input"),r=s("openwb-base-number-input");return b(),c("div",g,[t(a,null,{default:i(()=>[...e[3]||(e[3]=[u(" Einstellungen für OVUM Wärmepumpe (CubeSpeicher/MPlus) ",-1)])]),_:1}),t(m,{subtype:"info"},{default:i(()=>[...e[4]||(e[4]=[u(' Modbus TCP muss am Regler unter "Fachmann/SYS/TCP" mit fester IP-Adresse eingerichtet sein. Bei Verwendungszweck "Ein/Aus schaltbar" steuert openWB SG-Ready über Modbus TCP - stelle sicher, dass SG-Ready an der Wärmepumpe nicht zusätzlich über physische Kontakte extern verdrahtet ist, da sich beide Wege gegenseitig überschreiben können. ',-1)])]),_:1}),t(p,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),t(r,{title:"Port",required:"",min:1,max:65535,"model-value":n.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.port"))},null,8,["model-value"]),t(r,{title:"Modbus ID",required:"","model-value":n.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.modbus_id"))},null,8,["model-value"])])}const W=l(f,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/ovum/ovum/consumer.vue"]]);export{W as default}; +import{C as d}from"./ConsumerConfig-CDodeLc0.js";import{_ as l,m as s,l as b,f as c,q as t,u as i,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"ConsumerOvum",mixins:[d]},g={class:"consumer-ovum"};function _(n,e,v,C,w,h){const a=s("openwb-base-heading"),m=s("openwb-base-alert"),p=s("openwb-base-text-input"),r=s("openwb-base-number-input");return b(),c("div",g,[t(a,null,{default:i(()=>[...e[3]||(e[3]=[u(" Einstellungen für OVUM Wärmepumpe (CubeSpeicher/MPlus) ",-1)])]),_:1}),t(m,{subtype:"info"},{default:i(()=>[...e[4]||(e[4]=[u(' Modbus TCP muss am Regler unter "Fachmann/SYS/TCP" mit fester IP-Adresse eingerichtet sein. Bei Verwendungszweck "Ein/Aus schaltbar" steuert openWB SG-Ready über Modbus TCP - stelle sicher, dass SG-Ready an der Wärmepumpe nicht zusätzlich über physische Kontakte extern verdrahtet ist, da sich beide Wege gegenseitig überschreiben können. ',-1)])]),_:1}),t(p,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),t(r,{title:"Port",required:"",min:1,max:65535,"model-value":n.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.port"))},null,8,["model-value"]),t(r,{title:"Modbus ID",required:"","model-value":n.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.modbus_id"))},null,8,["model-value"])])}const W=l(f,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/ovum/ovum/consumer.vue"]]);export{W as default}; diff --git a/web/settings/assets/consumer-CruA9slz.js b/web/settings/assets/consumer-CruA9slz.js new file mode 100644 index 0000000000..ae6336af8c --- /dev/null +++ b/web/settings/assets/consumer-CruA9slz.js @@ -0,0 +1 @@ +import{C as m}from"./ConsumerConfig-CDodeLc0.js";import{_ as d,m as o,l as b,f as g,q as t,u as s,B as a}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"ConsumerGree",mixins:[m]},_={class:"consumer-gree"};function c(n,e,w,v,C,x){const i=o("openwb-base-heading"),u=o("openwb-base-alert"),p=o("openwb-base-text-input"),l=o("openwb-base-number-input");return b(),g("div",_,[t(i,null,{default:s(()=>[...e[2]||(e[2]=[a(" Einstellungen für Gree Klimaanlage ",-1)])]),_:1}),t(u,{subtype:"info"},{default:s(()=>[...e[3]||(e[3]=[a(" Nutzt das lokale WLAN-Protokoll der Gree-Klimaanlage, die Kopplung mit dem Gerät erfolgt automatisch bei der ersten Verbindung. Nur Ein/Aus, keine Leistungsmessung - wer den Verbrauch erfassen will, braucht eine separate Leistungsmessung (zB Zwischenzähler/Smart-Plug). ",-1)])]),_:1}),t(p,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=r=>n.updateConfiguration(r,"configuration.ip_address"))},null,8,["model-value"]),t(l,{title:"Port",required:"",min:1,max:65535,"model-value":n.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=r=>n.updateConfiguration(r,"configuration.port"))},{help:s(()=>[...e[4]||(e[4]=[a(" Standardport der Gree-Klimaanlage: 7000. ",-1)])]),_:1},8,["model-value"])])}const q=d(f,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/gree/gree/consumer.vue"]]);export{q as default}; diff --git a/web/settings/assets/consumer-TVBmxOi9.js b/web/settings/assets/consumer-Cxc3OQkk.js similarity index 96% rename from web/settings/assets/consumer-TVBmxOi9.js rename to web/settings/assets/consumer-Cxc3OQkk.js index 8e1290fa45..4d370d92ae 100644 --- a/web/settings/assets/consumer-TVBmxOi9.js +++ b/web/settings/assets/consumer-Cxc3OQkk.js @@ -1 +1 @@ -import{C as p}from"./ConsumerConfig-DBNAxLj7.js";import{_ as d,m as s,l as r,f,q as u,u as g,B as j,z as l,x as a}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const q={name:"ConsumerGenericJson",mixins:[p],computed:{usageType(){return this.consumer.consumerUsage?.type},showSwitchPaths(){return["suspendable_onoff","continuous"].includes(this.usageType)},showPowerLimitPath(){return this.usageType==="suspendable_tunable"}}},w={class:"consumer-generic-json"};function v(o,e,b,c,y,i){const m=s("openwb-base-heading"),n=s("openwb-base-text-input");return r(),f("div",w,[u(m,null,{default:g(()=>[...e[11]||(e[11]=[j("Einstellungen für JSON-Verbraucher",-1)])]),_:1}),u(n,{title:"URL",subtype:"url",required:"","model-value":o.consumer.configuration.url,"onUpdate:modelValue":e[0]||(e[0]=t=>o.updateConfiguration(t,"configuration.url"))},null,8,["model-value"]),u(n,{title:"jq current L1",subtype:"text","model-value":o.consumer.configuration.jq_current_l1,"onUpdate:modelValue":e[1]||(e[1]=t=>o.updateConfiguration(t,"configuration.jq_current_l1"))},null,8,["model-value"]),u(n,{title:"jq current L2",subtype:"text","model-value":o.consumer.configuration.jq_current_l2,"onUpdate:modelValue":e[2]||(e[2]=t=>o.updateConfiguration(t,"configuration.jq_current_l2"))},null,8,["model-value"]),u(n,{title:"jq current L3",subtype:"text","model-value":o.consumer.configuration.jq_current_l3,"onUpdate:modelValue":e[3]||(e[3]=t=>o.updateConfiguration(t,"configuration.jq_current_l3"))},null,8,["model-value"]),u(n,{title:"jq power",subtype:"text","model-value":o.consumer.configuration.jq_power,"onUpdate:modelValue":e[4]||(e[4]=t=>o.updateConfiguration(t,"configuration.jq_power"))},null,8,["model-value"]),u(n,{title:"jq temperatures",subtype:"text","model-value":o.consumer.configuration.jq_temperatures,"onUpdate:modelValue":e[5]||(e[5]=t=>o.updateConfiguration(t,"configuration.jq_temperatures"))},null,8,["model-value"]),u(n,{title:"jq imported",subtype:"text","model-value":o.consumer.configuration.jq_imported,"onUpdate:modelValue":e[6]||(e[6]=t=>o.updateConfiguration(t,"configuration.jq_imported"))},null,8,["model-value"]),u(n,{title:"jq exported",subtype:"text","model-value":o.consumer.configuration.jq_exported,"onUpdate:modelValue":e[7]||(e[7]=t=>o.updateConfiguration(t,"configuration.jq_exported"))},null,8,["model-value"]),i.showSwitchPaths?(r(),l(n,{key:0,title:"jq switch on",subtype:"text","model-value":o.consumer.configuration.jq_switch_on,"onUpdate:modelValue":e[8]||(e[8]=t=>o.updateConfiguration(t,"configuration.jq_switch_on"))},null,8,["model-value"])):a("",!0),i.showSwitchPaths?(r(),l(n,{key:1,title:"jq switch off",subtype:"text","model-value":o.consumer.configuration.jq_switch_off,"onUpdate:modelValue":e[9]||(e[9]=t=>o.updateConfiguration(t,"configuration.jq_switch_off"))},null,8,["model-value"])):a("",!0),i.showPowerLimitPath?(r(),l(n,{key:2,title:"jq set power limit",subtype:"text","model-value":o.consumer.configuration.jq_set_power_limit,"onUpdate:modelValue":e[10]||(e[10]=t=>o.updateConfiguration(t,"configuration.jq_set_power_limit"))},null,8,["model-value"])):a("",!0)])}const h=d(q,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/generic/json/consumer.vue"]]);export{h as default}; +import{C as p}from"./ConsumerConfig-CDodeLc0.js";import{_ as d,m as s,l as r,f,q as u,u as g,B as j,z as l,x as a}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const q={name:"ConsumerGenericJson",mixins:[p],computed:{usageType(){return this.consumer.consumerUsage?.type},showSwitchPaths(){return["suspendable_onoff","continuous"].includes(this.usageType)},showPowerLimitPath(){return this.usageType==="suspendable_tunable"}}},w={class:"consumer-generic-json"};function v(o,e,b,c,y,i){const m=s("openwb-base-heading"),n=s("openwb-base-text-input");return r(),f("div",w,[u(m,null,{default:g(()=>[...e[11]||(e[11]=[j("Einstellungen für JSON-Verbraucher",-1)])]),_:1}),u(n,{title:"URL",subtype:"url",required:"","model-value":o.consumer.configuration.url,"onUpdate:modelValue":e[0]||(e[0]=t=>o.updateConfiguration(t,"configuration.url"))},null,8,["model-value"]),u(n,{title:"jq current L1",subtype:"text","model-value":o.consumer.configuration.jq_current_l1,"onUpdate:modelValue":e[1]||(e[1]=t=>o.updateConfiguration(t,"configuration.jq_current_l1"))},null,8,["model-value"]),u(n,{title:"jq current L2",subtype:"text","model-value":o.consumer.configuration.jq_current_l2,"onUpdate:modelValue":e[2]||(e[2]=t=>o.updateConfiguration(t,"configuration.jq_current_l2"))},null,8,["model-value"]),u(n,{title:"jq current L3",subtype:"text","model-value":o.consumer.configuration.jq_current_l3,"onUpdate:modelValue":e[3]||(e[3]=t=>o.updateConfiguration(t,"configuration.jq_current_l3"))},null,8,["model-value"]),u(n,{title:"jq power",subtype:"text","model-value":o.consumer.configuration.jq_power,"onUpdate:modelValue":e[4]||(e[4]=t=>o.updateConfiguration(t,"configuration.jq_power"))},null,8,["model-value"]),u(n,{title:"jq temperatures",subtype:"text","model-value":o.consumer.configuration.jq_temperatures,"onUpdate:modelValue":e[5]||(e[5]=t=>o.updateConfiguration(t,"configuration.jq_temperatures"))},null,8,["model-value"]),u(n,{title:"jq imported",subtype:"text","model-value":o.consumer.configuration.jq_imported,"onUpdate:modelValue":e[6]||(e[6]=t=>o.updateConfiguration(t,"configuration.jq_imported"))},null,8,["model-value"]),u(n,{title:"jq exported",subtype:"text","model-value":o.consumer.configuration.jq_exported,"onUpdate:modelValue":e[7]||(e[7]=t=>o.updateConfiguration(t,"configuration.jq_exported"))},null,8,["model-value"]),i.showSwitchPaths?(r(),l(n,{key:0,title:"jq switch on",subtype:"text","model-value":o.consumer.configuration.jq_switch_on,"onUpdate:modelValue":e[8]||(e[8]=t=>o.updateConfiguration(t,"configuration.jq_switch_on"))},null,8,["model-value"])):a("",!0),i.showSwitchPaths?(r(),l(n,{key:1,title:"jq switch off",subtype:"text","model-value":o.consumer.configuration.jq_switch_off,"onUpdate:modelValue":e[9]||(e[9]=t=>o.updateConfiguration(t,"configuration.jq_switch_off"))},null,8,["model-value"])):a("",!0),i.showPowerLimitPath?(r(),l(n,{key:2,title:"jq set power limit",subtype:"text","model-value":o.consumer.configuration.jq_set_power_limit,"onUpdate:modelValue":e[10]||(e[10]=t=>o.updateConfiguration(t,"configuration.jq_set_power_limit"))},null,8,["model-value"])):a("",!0)])}const h=d(q,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/generic/json/consumer.vue"]]);export{h as default}; diff --git a/web/settings/assets/consumer-DFZAM7gI.js b/web/settings/assets/consumer-DFZAM7gI.js new file mode 100644 index 0000000000..638415fea4 --- /dev/null +++ b/web/settings/assets/consumer-DFZAM7gI.js @@ -0,0 +1 @@ +import{C as a}from"./ConsumerConfig-CDodeLc0.js";import{_ as m,m as r,l as p,f as l,q as t,u as d,B as f}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"ConsumerLgTherma",mixins:[a]},b={class:"consumer-lg-therma"};function g(o,e,c,v,C,w){const s=r("openwb-base-heading"),u=r("openwb-base-text-input"),i=r("openwb-base-number-input");return p(),l("div",b,[t(s,null,{default:d(()=>[...e[3]||(e[3]=[f(" Einstellungen für LG Therma V ",-1)])]),_:1}),t(u,{title:"IP oder Hostname",subtype:"host",required:"","model-value":o.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.ip_address"))},null,8,["model-value"]),t(i,{title:"Port",required:"",min:1,max:65535,"model-value":o.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.port"))},null,8,["model-value"]),t(i,{title:"Modbus ID",required:"",min:1,max:255,"model-value":o.consumer.configuration.modbus_id,"onUpdate:modelValue":e[2]||(e[2]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"])])}const k=m(_,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/lg_therma/lg_therma/consumer.vue"]]);export{k as default}; diff --git a/web/settings/assets/consumer-DGx9umH6.js b/web/settings/assets/consumer-DGx9umH6.js new file mode 100644 index 0000000000..ab5617159f --- /dev/null +++ b/web/settings/assets/consumer-DGx9umH6.js @@ -0,0 +1 @@ +import{C as p}from"./ConsumerConfig-CDodeLc0.js";import{_ as l,m as r,l as b,f,q as i,u as s,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const g={name:"ConsumerDaikinHomehubAir2air",mixins:[p]},_={class:"consumer-daikin-homehub-air2air"};function c(n,e,w,v,H,k){const a=r("openwb-base-heading"),m=r("openwb-base-alert"),d=r("openwb-base-text-input"),t=r("openwb-base-number-input");return b(),f("div",_,[i(a,null,{default:s(()=>[...e[3]||(e[3]=[u(" Einstellungen für Daikin Air2Air (HomeHub EKRHH) ",-1)])]),_:1}),i(m,{subtype:"info"},{default:s(()=>[...e[4]||(e[4]=[u(" Für die HomeHub-Anbindung (EKRHH-Adapter) von Daikin Air2Air-Klimaanlagen. Es steht keine Leistungsmessung zur Verfügung - wer den Verbrauch erfassen will, braucht eine separate Leistungsmessung (zB Zwischenzähler/Smart-Plug), die diesem Verbraucher zugeordnet wird. ",-1)])]),_:1}),i(d,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),i(t,{title:"Port",required:"",min:1,max:65535,"model-value":n.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.port"))},null,8,["model-value"]),i(t,{title:"Modbus ID",required:"",min:1,max:255,"model-value":n.consumer.configuration.modbus_id,"onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.modbus_id"))},null,8,["model-value"])])}const z=l(g,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/daikin/daikin_homehub_air2air/consumer.vue"]]);export{z as default}; diff --git a/web/settings/assets/consumer-C5PBUusA.js b/web/settings/assets/consumer-DIrQ3KTM.js similarity index 84% rename from web/settings/assets/consumer-C5PBUusA.js rename to web/settings/assets/consumer-DIrQ3KTM.js index acab3dfb3b..a324b42d8c 100644 --- a/web/settings/assets/consumer-C5PBUusA.js +++ b/web/settings/assets/consumer-DIrQ3KTM.js @@ -1 +1 @@ -import{C as m}from"./ConsumerConfig-DBNAxLj7.js";import{_ as a,m as t,l as p,f as d,q as s,u as l,B as b}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"ConsumerNibeSSeries",mixins:[m]},c={class:"consumer-nibe"};function f(o,e,g,v,w,C){const i=t("openwb-base-heading"),r=t("openwb-base-text-input"),u=t("openwb-base-number-input");return p(),d("div",c,[s(i,null,{default:l(()=>[...e[2]||(e[2]=[b("Einstellungen für Nibe S-Series Wärmepumpe",-1)])]),_:1}),s(r,{title:"IP oder Hostname",subtype:"host",required:"","model-value":o.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.ip_address"))},null,8,["model-value"]),s(u,{title:"Modbus ID",required:"","model-value":o.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"])])}const E=a(_,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/nibe/nibe_s_series/consumer.vue"]]);export{E as default}; +import{C as m}from"./ConsumerConfig-CDodeLc0.js";import{_ as a,m as t,l as p,f as d,q as s,u as l,B as b}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"ConsumerNibeSSeries",mixins:[m]},c={class:"consumer-nibe"};function f(o,e,g,v,w,C){const i=t("openwb-base-heading"),r=t("openwb-base-text-input"),u=t("openwb-base-number-input");return p(),d("div",c,[s(i,null,{default:l(()=>[...e[2]||(e[2]=[b("Einstellungen für Nibe S-Series Wärmepumpe",-1)])]),_:1}),s(r,{title:"IP oder Hostname",subtype:"host",required:"","model-value":o.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.ip_address"))},null,8,["model-value"]),s(u,{title:"Modbus ID",required:"","model-value":o.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"])])}const E=a(_,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/nibe/nibe_s_series/consumer.vue"]]);export{E as default}; diff --git a/web/settings/assets/consumer-CufH5TyZ.js b/web/settings/assets/consumer-DP1oPG1b.js similarity index 94% rename from web/settings/assets/consumer-CufH5TyZ.js rename to web/settings/assets/consumer-DP1oPG1b.js index 406cb54e68..813c1310ca 100644 --- a/web/settings/assets/consumer-CufH5TyZ.js +++ b/web/settings/assets/consumer-DP1oPG1b.js @@ -1 +1 @@ -import{C as g}from"./ConsumerConfig-DBNAxLj7.js";import{_ as c,m as r,l as f,f as _,q as t,u as a,B as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const w=[{text:"N4Dac02",value:"N4Dac02"},{text:"DA02",value:"DA02"},{text:"M120T (Analogausgang 1)",value:"M120T-1"},{text:"M120T (Analogausgang 2)",value:"M120T-2"},{text:"AA02B",value:"AA02B"}],v={name:"ConsumerGenericDac",mixins:[g],data(){return{modelOptions:w}}},V={class:"consumer-generic-dac"};function h(n,e,A,C,s,D){const l=r("openwb-base-heading"),d=r("openwb-base-alert"),m=r("openwb-base-text-input"),u=r("openwb-base-number-input"),p=r("openwb-base-select-input"),b=r("openwb-base-button-group-input");return f(),_("div",V,[t(l,null,{default:a(()=>[...e[5]||(e[5]=[i("Einstellungen für DAC-Verbraucher",-1)])]),_:1}),t(d,{subtype:"info"},{default:a(()=>[...e[6]||(e[6]=[i(' Der aktuelle Überschuss wird über Modbus an einen Digital-Analog-Wandler (DAC) übertragen. Es werden verschiedene Modelle unterstützt. Je nach Modell wird das an den DAC angeschlossene Gerät über ein Signal von 1-10V oder 4-20mA gesteuert. Falls erforderlich, kann auch der komplette Signalbereich (0-10V bzw. 0-20mA) genutzt werden, um die Leistung des Verbrauchers zu steuern. Hierzu bitte die Option "Signalbereich" von "Standard" auf "Komplett" ändern. ',-1)])]),_:1}),t(m,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),t(u,{title:"Port",required:"",min:1,max:65535,"model-value":n.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.port"))},null,8,["model-value"]),t(u,{title:"Modbus ID",required:"","model-value":n.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.modbus_id"))},null,8,["model-value"]),t(p,{title:"Modell","not-selected":"Bitte auswählen",options:s.modelOptions,"model-value":n.consumer.configuration.model,"onUpdate:modelValue":e[3]||(e[3]=o=>n.updateConfiguration(o,"configuration.model"))},null,8,["options","model-value"]),t(b,{title:"Signalbereich",buttons:[{text:"Standard",buttonValue:!1},{text:"Komplett",buttonValue:!0}],"model-value":n.consumer.configuration.full_signal_range,"onUpdate:modelValue":e[4]||(e[4]=o=>n.updateConfiguration(o,"configuration.full_signal_range"))},{help:a(()=>[...e[7]||(e[7]=[i(' Der Signalbereich kann je nach angeschlossenem Verbraucher angepasst werden. Standardmäßig wird der Bereich 1-10V bzw. 4-20mA ("Live Zero") genutzt. Werte kleiner 1V bzw. 4mA signalisieren dem Verbraucher einen Verbindungsfehler. Falls erforderlich, kann auch der komplette Bereich 0-10V bzw. 0-20mA verwendet werden, um die Leistung des Verbrauchers zu steuern. Bitte beachte, dass dies je nach angeschlossenem Verbraucher zu einer anderen Leistungsregelung führt. ',-1)])]),_:1},8,["model-value"])])}const L=c(v,[["render",h],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/generic/dac/consumer.vue"]]);export{L as default}; +import{C as g}from"./ConsumerConfig-CDodeLc0.js";import{_ as c,m as r,l as f,f as _,q as t,u as a,B as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const w=[{text:"N4Dac02",value:"N4Dac02"},{text:"DA02",value:"DA02"},{text:"M120T (Analogausgang 1)",value:"M120T-1"},{text:"M120T (Analogausgang 2)",value:"M120T-2"},{text:"AA02B",value:"AA02B"}],v={name:"ConsumerGenericDac",mixins:[g],data(){return{modelOptions:w}}},V={class:"consumer-generic-dac"};function h(n,e,A,C,s,D){const l=r("openwb-base-heading"),d=r("openwb-base-alert"),m=r("openwb-base-text-input"),u=r("openwb-base-number-input"),p=r("openwb-base-select-input"),b=r("openwb-base-button-group-input");return f(),_("div",V,[t(l,null,{default:a(()=>[...e[5]||(e[5]=[i("Einstellungen für DAC-Verbraucher",-1)])]),_:1}),t(d,{subtype:"info"},{default:a(()=>[...e[6]||(e[6]=[i(' Der aktuelle Überschuss wird über Modbus an einen Digital-Analog-Wandler (DAC) übertragen. Es werden verschiedene Modelle unterstützt. Je nach Modell wird das an den DAC angeschlossene Gerät über ein Signal von 1-10V oder 4-20mA gesteuert. Falls erforderlich, kann auch der komplette Signalbereich (0-10V bzw. 0-20mA) genutzt werden, um die Leistung des Verbrauchers zu steuern. Hierzu bitte die Option "Signalbereich" von "Standard" auf "Komplett" ändern. ',-1)])]),_:1}),t(m,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),t(u,{title:"Port",required:"",min:1,max:65535,"model-value":n.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.port"))},null,8,["model-value"]),t(u,{title:"Modbus ID",required:"","model-value":n.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.modbus_id"))},null,8,["model-value"]),t(p,{title:"Modell","not-selected":"Bitte auswählen",options:s.modelOptions,"model-value":n.consumer.configuration.model,"onUpdate:modelValue":e[3]||(e[3]=o=>n.updateConfiguration(o,"configuration.model"))},null,8,["options","model-value"]),t(b,{title:"Signalbereich",buttons:[{text:"Standard",buttonValue:!1},{text:"Komplett",buttonValue:!0}],"model-value":n.consumer.configuration.full_signal_range,"onUpdate:modelValue":e[4]||(e[4]=o=>n.updateConfiguration(o,"configuration.full_signal_range"))},{help:a(()=>[...e[7]||(e[7]=[i(' Der Signalbereich kann je nach angeschlossenem Verbraucher angepasst werden. Standardmäßig wird der Bereich 1-10V bzw. 4-20mA ("Live Zero") genutzt. Werte kleiner 1V bzw. 4mA signalisieren dem Verbraucher einen Verbindungsfehler. Falls erforderlich, kann auch der komplette Bereich 0-10V bzw. 0-20mA verwendet werden, um die Leistung des Verbrauchers zu steuern. Bitte beachte, dass dies je nach angeschlossenem Verbraucher zu einer anderen Leistungsregelung führt. ',-1)])]),_:1},8,["model-value"])])}const L=c(v,[["render",h],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/generic/dac/consumer.vue"]]);export{L as default}; diff --git a/web/settings/assets/consumer-4pKP_arC.js b/web/settings/assets/consumer-DP77PVzL.js similarity index 93% rename from web/settings/assets/consumer-4pKP_arC.js rename to web/settings/assets/consumer-DP77PVzL.js index e537c63ff0..47e8a4ab8a 100644 --- a/web/settings/assets/consumer-4pKP_arC.js +++ b/web/settings/assets/consumer-DP77PVzL.js @@ -1 +1 @@ -import{C as d}from"./ConsumerConfig-DBNAxLj7.js";import{_ as p,m as s,l as b,f,q as t,u as r,B as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const g={name:"ConsumerMyPvElwaE",mixins:[d]},_={class:"consumer-elwae"};function w(n,e,c,v,C,E){const a=s("openwb-base-heading"),l=s("openwb-base-alert"),m=s("openwb-base-text-input"),u=s("openwb-base-number-input");return b(),f("div",_,[t(a,null,{default:r(()=>[...e[3]||(e[3]=[i(" Einstellungen für my-PV Elwa2 Heizstab",-1)])]),_:1}),t(l,{subtype:"info"},{default:r(()=>[...e[4]||(e[4]=[i(' Im Web Frontend des Heizstabs muss unter "Steuerungs-Einstellungen" der Parameter "Ansteuerungs-Typ = Modbus TCP" und "Zeitablauf Ansteuerung = 120 Sek" gesetzt werden. Für die Ausschaltschwelle werden 500W und die Ausschaltverzögerung 180s empfohlen, um die Regelung von Elwa nicht zu stören. Das minimale Regelintervall sollte auf 30 s (0,5 min) gestellt werden. ',-1)])]),_:1}),t(m,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),t(u,{title:"Port",required:"",min:1,max:65535,"model-value":n.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.port"))},null,8,["model-value"]),t(u,{title:"Modbus ID",required:"","model-value":n.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.modbus_id"))},null,8,["model-value"])])}const M=p(g,[["render",w],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/my_pv/elwa_e/consumer.vue"]]);export{M as default}; +import{C as d}from"./ConsumerConfig-CDodeLc0.js";import{_ as p,m as s,l as b,f,q as t,u as r,B as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const g={name:"ConsumerMyPvElwaE",mixins:[d]},_={class:"consumer-elwae"};function w(n,e,c,v,C,E){const a=s("openwb-base-heading"),l=s("openwb-base-alert"),m=s("openwb-base-text-input"),u=s("openwb-base-number-input");return b(),f("div",_,[t(a,null,{default:r(()=>[...e[3]||(e[3]=[i(" Einstellungen für my-PV Elwa2 Heizstab",-1)])]),_:1}),t(l,{subtype:"info"},{default:r(()=>[...e[4]||(e[4]=[i(' Im Web Frontend des Heizstabs muss unter "Steuerungs-Einstellungen" der Parameter "Ansteuerungs-Typ = Modbus TCP" und "Zeitablauf Ansteuerung = 120 Sek" gesetzt werden. Für die Ausschaltschwelle werden 500W und die Ausschaltverzögerung 180s empfohlen, um die Regelung von Elwa nicht zu stören. Das minimale Regelintervall sollte auf 30 s (0,5 min) gestellt werden. ',-1)])]),_:1}),t(m,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),t(u,{title:"Port",required:"",min:1,max:65535,"model-value":n.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.port"))},null,8,["model-value"]),t(u,{title:"Modbus ID",required:"","model-value":n.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.modbus_id"))},null,8,["model-value"])])}const M=p(g,[["render",w],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/my_pv/elwa_e/consumer.vue"]]);export{M as default}; diff --git a/web/settings/assets/consumer-DYwIyUhr.js b/web/settings/assets/consumer-DYwIyUhr.js new file mode 100644 index 0000000000..e48549c9f0 --- /dev/null +++ b/web/settings/assets/consumer-DYwIyUhr.js @@ -0,0 +1 @@ +import{C as d}from"./ConsumerConfig-CDodeLc0.js";import{_ as p,m as t,l as b,f,q as s,u as i,B as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const g={name:"ConsumerMitsubishiModbus",mixins:[d]},c={class:"consumer-mitsubishi-modbus"};function _(n,e,w,I,M,h){const a=t("openwb-base-heading"),l=t("openwb-base-alert"),m=t("openwb-base-text-input"),u=t("openwb-base-number-input");return b(),f("div",c,[s(a,null,{default:i(()=>[...e[3]||(e[3]=[r(" Einstellungen für Mitsubishi Electric Klimaanlage (Intesis Modbus-Interface) ",-1)])]),_:1}),s(l,{subtype:"info"},{default:i(()=>[...e[4]||(e[4]=[r(" Benötigt das separat erhältliche Intesis/HMS-Modbus-Interface (INMBSMIT001I000), das an den CN105-Anschluss der Inneneinheit angeschlossen wird. Kompatibel mit Domestic-, Mr.-Slim- und City-Multi-Baureihen. Nur Ein/Aus, keine Leistungsmessung - wer den Verbrauch erfassen will, braucht eine separate Leistungsmessung (zB Zwischenzähler/Smart-Plug). ",-1)])]),_:1}),s(m,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),s(u,{title:"Port",required:"",min:1,max:65535,"model-value":n.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.port"))},null,8,["model-value"]),s(u,{title:"Modbus ID",required:"",min:1,max:63,"model-value":n.consumer.configuration.modbus_id,"onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.modbus_id"))},{help:i(()=>[...e[5]||(e[5]=[r(" Werkseinstellung des Interfaces: 1 (über DIP-Schalter SW3 einstellbar). ",-1)])]),_:1},8,["model-value"])])}const q=p(g,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/mitsubishi/mitsubishi_modbus/consumer.vue"]]);export{q as default}; diff --git a/web/settings/assets/consumer-9KeiKDAa.js b/web/settings/assets/consumer-Di_jjil1.js similarity index 86% rename from web/settings/assets/consumer-9KeiKDAa.js rename to web/settings/assets/consumer-Di_jjil1.js index c2fe0db349..4cf17406d9 100644 --- a/web/settings/assets/consumer-9KeiKDAa.js +++ b/web/settings/assets/consumer-Di_jjil1.js @@ -1 +1 @@ -import{C as a}from"./ConsumerConfig-DBNAxLj7.js";import{_ as m,m as s,l as p,f as l,q as t,u as d,B as f}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const b={name:"ConsumerSolvisHeatPump",mixins:[a]},_={class:"consumer-solvis"};function c(e,o,v,g,C,w){const r=s("openwb-base-heading"),u=s("openwb-base-text-input"),i=s("openwb-base-number-input");return p(),l("div",_,[t(r,null,{default:d(()=>[...o[3]||(o[3]=[f("Einstellungen für Solvis Wärmepumpe",-1)])]),_:1}),t(u,{title:"IP oder Hostname",subtype:"host",required:"","model-value":e.consumer.configuration.ip_address,"onUpdate:modelValue":o[0]||(o[0]=n=>e.updateConfiguration(n,"configuration.ip_address"))},null,8,["model-value"]),t(i,{title:"Port",required:"",min:1,max:65535,"model-value":e.consumer.configuration.port,"onUpdate:modelValue":o[1]||(o[1]=n=>e.updateConfiguration(n,"configuration.port"))},null,8,["model-value"]),t(i,{title:"Modbus ID",required:"","model-value":e.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":o[2]||(o[2]=n=>e.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"])])}const E=m(b,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/solvis/solvis/consumer.vue"]]);export{E as default}; +import{C as a}from"./ConsumerConfig-CDodeLc0.js";import{_ as m,m as s,l as p,f as l,q as t,u as d,B as f}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const b={name:"ConsumerSolvisHeatPump",mixins:[a]},_={class:"consumer-solvis"};function c(e,o,v,g,C,w){const r=s("openwb-base-heading"),u=s("openwb-base-text-input"),i=s("openwb-base-number-input");return p(),l("div",_,[t(r,null,{default:d(()=>[...o[3]||(o[3]=[f("Einstellungen für Solvis Wärmepumpe",-1)])]),_:1}),t(u,{title:"IP oder Hostname",subtype:"host",required:"","model-value":e.consumer.configuration.ip_address,"onUpdate:modelValue":o[0]||(o[0]=n=>e.updateConfiguration(n,"configuration.ip_address"))},null,8,["model-value"]),t(i,{title:"Port",required:"",min:1,max:65535,"model-value":e.consumer.configuration.port,"onUpdate:modelValue":o[1]||(o[1]=n=>e.updateConfiguration(n,"configuration.port"))},null,8,["model-value"]),t(i,{title:"Modbus ID",required:"","model-value":e.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":o[2]||(o[2]=n=>e.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"])])}const E=m(b,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/solvis/solvis/consumer.vue"]]);export{E as default}; diff --git a/web/settings/assets/consumer-DmXv955p.js b/web/settings/assets/consumer-DmXv955p.js new file mode 100644 index 0000000000..207f6cbc78 --- /dev/null +++ b/web/settings/assets/consumer-DmXv955p.js @@ -0,0 +1 @@ +import{C as p}from"./ConsumerConfig-CDodeLc0.js";import{_ as d,m as r,l as b,f,q as t,u,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const g={name:"ConsumerLuxtronik",mixins:[p]},v={class:"consumer-luxtronik"};function _(o,e,C,w,k,c){const a=r("openwb-base-heading"),m=r("openwb-base-alert"),l=r("openwb-base-text-input"),i=r("openwb-base-number-input");return b(),f("div",v,[t(a,null,{default:u(()=>[...e[4]||(e[4]=[s(" Einstellungen für Luxtronik 2.1 ",-1)])]),_:1}),t(m,{subtype:"info"},{default:u(()=>[...e[5]||(e[5]=[s(" Für Wärmepumpen mit Luxtronik-2.1-Regelung. Diese Regelung wird von mehreren Marken baugleich verwendet, zB alpha innotec, Novelan, Roth (ThermoAura/ThermoTerra), Buderus (Logamatic HMC 20), Nibe (AP-AW10), Wolf (BWL/BWS) und CTA (Aeroplus). ModbusTCP muss in der Regelung aktiviert sein (SERVICE > Systemsteuerung > Konnektivität > Smart-Home-Interface). ",-1)])]),_:1}),t(l,{title:"IP oder Hostname",subtype:"host",required:"","model-value":o.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.ip_address"))},null,8,["model-value"]),t(i,{title:"Port",required:"",min:1,max:65535,"model-value":o.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.port"))},null,8,["model-value"]),t(i,{title:"Modbus ID",required:"",min:1,max:255,"model-value":o.consumer.configuration.modbus_id,"onUpdate:modelValue":e[2]||(e[2]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"]),t(i,{title:"Anhebung Solltemperatur",required:"",min:0,step:.5,"model-value":o.consumer.configuration.boost_offset,"onUpdate:modelValue":e[3]||(e[3]=n=>o.updateConfiguration(n,"configuration.boost_offset"))},{help:u(()=>[...e[6]||(e[6]=[s(" Anhebung von Heiz- und Warmwassersolltemperatur im Überschussbetrieb in Kelvin. Abhängig vom Heizsystem (Fußbodenheizung/Heizkörper, Puffergröße) anzupassen. ",-1)])]),_:1},8,["model-value"])])}const q=d(g,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/luxtronik/luxtronik/consumer.vue"]]);export{q as default}; diff --git a/web/settings/assets/consumer-DoDJKaK5.js b/web/settings/assets/consumer-DoDJKaK5.js new file mode 100644 index 0000000000..441349d800 --- /dev/null +++ b/web/settings/assets/consumer-DoDJKaK5.js @@ -0,0 +1 @@ +import{C as m}from"./ConsumerConfig-CDodeLc0.js";import{_ as d,m as s,l,f,q as n,u as r,B as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const b={name:"ConsumerEmsEsp",mixins:[m]},c={class:"consumer-ems-esp"};function _(o,e,E,S,g,B){const a=s("openwb-base-heading"),p=s("openwb-base-alert"),u=s("openwb-base-text-input");return l(),f("div",c,[n(a,null,{default:r(()=>[...e[2]||(e[2]=[i(" Einstellungen für EMS-ESP ",-1)])]),_:1}),n(p,{subtype:"info"},{default:r(()=>[...e[3]||(e[3]=[i(' Für EMS-Bus-Wärmepumpen (zB Buderus, Bosch, Junkers) über einen EMS-ESP32-Gateway. Der Zugriff erfolgt über die REST-API des Gateways (Bearer-Token, in der EMS-ESP-Weboberfläche unter "Security" einsehbar). Ob SG-Ready-Boost und PV-Überschusskompensation (pvmaxcomp) tatsächlich wirken, ist modellabhängig - laut EMS-ESP32-Community funktioniert es zB auf einer Buderus WLW186i-12E, nicht jedoch auf einer Bosch Compress CS7000iAW. ',-1)])]),_:1}),n(u,{title:"IP oder Hostname",subtype:"host",required:"","model-value":o.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=t=>o.updateConfiguration(t,"configuration.ip_address"))},null,8,["model-value"]),n(u,{title:"Token",subtype:"text",required:"","model-value":o.consumer.configuration.token,"onUpdate:modelValue":e[1]||(e[1]=t=>o.updateConfiguration(t,"configuration.token"))},{help:r(()=>[...e[4]||(e[4]=[i(" API-Token aus der EMS-ESP-Weboberfläche (Settings > Security > Generate Token). ",-1)])]),_:1},8,["model-value"])])}const M=d(b,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/ems_esp/ems_esp/consumer.vue"]]);export{M as default}; diff --git a/web/settings/assets/consumer-CuCtayaG.js b/web/settings/assets/consumer-d3D8ujRs.js similarity index 93% rename from web/settings/assets/consumer-CuCtayaG.js rename to web/settings/assets/consumer-d3D8ujRs.js index bb743956a5..043b43a50c 100644 --- a/web/settings/assets/consumer-CuCtayaG.js +++ b/web/settings/assets/consumer-d3D8ujRs.js @@ -1 +1 @@ -import{C as l}from"./ConsumerConfig-DBNAxLj7.js";import{_ as d,m as i,l as b,f,q as t,u as s,B as a}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const g={name:"ConsumerViessmannHeatPump",mixins:[l]},_={class:"consumer-viessmann-heat-pump"};function w(n,e,c,v,C,V){const u=i("openwb-base-heading"),m=i("openwb-base-alert"),p=i("openwb-base-text-input"),r=i("openwb-base-number-input");return b(),f("div",_,[t(u,null,{default:s(()=>[...e[3]||(e[3]=[a("Einstellungen für Viessmann Wärmepumpe",-1)])]),_:1}),t(m,{subtype:"info"},{default:s(()=>[...e[4]||(e[4]=[a(' Vitalcal 200-s Wärmepumpe mit LON Kommunikationsmodul und Vitogate 300. Wenn die Einschaltbedingung erreicht ist, wird Komfortfunktion "Einmalige Warmwasserbereitung" außerhalb des Zeitprogramms gestartet. Für die "Einmalige Warmwasserbereitung" wird der Warmwassertemperatur-Sollwert 2 genutzt. In der Wärmepumpe kann eingestellt werden, ob für diese Funktion die Elektroheizung (Heizstab) benutzt werden soll. ',-1)])]),_:1}),t(p,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),t(r,{title:"Port",required:"",min:1,max:65535,"model-value":n.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.port"))},null,8,["model-value"]),t(r,{title:"Modbus ID",required:"","model-value":n.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.modbus_id"))},null,8,["model-value"])])}const H=d(g,[["render",w],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/viessmann/viessmann_heat_pump/consumer.vue"]]);export{H as default}; +import{C as l}from"./ConsumerConfig-CDodeLc0.js";import{_ as d,m as i,l as b,f,q as t,u as s,B as a}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const g={name:"ConsumerViessmannHeatPump",mixins:[l]},_={class:"consumer-viessmann-heat-pump"};function w(n,e,c,v,C,V){const u=i("openwb-base-heading"),m=i("openwb-base-alert"),p=i("openwb-base-text-input"),r=i("openwb-base-number-input");return b(),f("div",_,[t(u,null,{default:s(()=>[...e[3]||(e[3]=[a("Einstellungen für Viessmann Wärmepumpe",-1)])]),_:1}),t(m,{subtype:"info"},{default:s(()=>[...e[4]||(e[4]=[a(' Vitalcal 200-s Wärmepumpe mit LON Kommunikationsmodul und Vitogate 300. Wenn die Einschaltbedingung erreicht ist, wird Komfortfunktion "Einmalige Warmwasserbereitung" außerhalb des Zeitprogramms gestartet. Für die "Einmalige Warmwasserbereitung" wird der Warmwassertemperatur-Sollwert 2 genutzt. In der Wärmepumpe kann eingestellt werden, ob für diese Funktion die Elektroheizung (Heizstab) benutzt werden soll. ',-1)])]),_:1}),t(p,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),t(r,{title:"Port",required:"",min:1,max:65535,"model-value":n.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.port"))},null,8,["model-value"]),t(r,{title:"Modbus ID",required:"","model-value":n.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.modbus_id"))},null,8,["model-value"])])}const H=d(g,[["render",w],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/viessmann/viessmann_heat_pump/consumer.vue"]]);export{H as default}; diff --git a/web/settings/assets/consumer-TBBdybso.js b/web/settings/assets/consumer-m8ZTdtIv.js similarity index 98% rename from web/settings/assets/consumer-TBBdybso.js rename to web/settings/assets/consumer-m8ZTdtIv.js index c5d161250d..dd18c6627e 100644 --- a/web/settings/assets/consumer-TBBdybso.js +++ b/web/settings/assets/consumer-m8ZTdtIv.js @@ -1 +1 @@ -import{C as d}from"./ConsumerConfig-DBNAxLj7.js";import{_ as b,m as u,l as f,f as g,q as t,u as i,B as e,y as n,J as o}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const a={name:"ConsumerGenericMqtt",mixins:[d],data(){return{publishBaseTopic:"openWB/set/mqtt/consumer",subscribeBaseTopic:"openWB/mqtt/consumer"}},computed:{publishTopicPrefix(){return`${this.publishBaseTopic}/${this.consumer.id}`},subscribeTopicPrefix(){return`${this.subscribeBaseTopic}/${this.consumer.id}`}}},x={class:"consumer-generic-mqtt"};function k(T,l,B,w,P,s){const p=u("openwb-base-heading"),r=u("openwb-base-copy-to-clipboard"),m=u("openwb-base-alert");return f(),g("div",x,[t(p,null,{default:i(()=>[...l[0]||(l[0]=[e("Einstellungen für MQTT-Verbraucher",-1)])]),_:1}),t(m,{subtype:"info"},{default:i(()=>[l[76]||(l[76]=n("p",null," Dieses Modul stellt keine aktive Verbindung her und erwartet MQTT-Daten auf den passenden Topics. Die Konfiguration erfolgt primär über die MQTT-Datenstruktur. ",-1)),l[77]||(l[77]=n("p",null,"Die folgenden Topics sind für einen reibungslosen Betrieb unbedingt erforderlich:",-1)),n("ul",null,[n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.publishTopicPrefix)+"/get/power ",1)]),_:1}),l[1]||(l[1]=n("br",null,null,-1)),l[2]||(l[2]=e(" Bezugsleistung in Watt, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, positiv Bezug, negativ Einspeisung",-1)),l[3]||(l[3]=n("br",null,null,-1)),l[4]||(l[4]=e(" Beispiel: ",-1)),l[5]||(l[5]=n("span",{class:"text-info"},"-123.45",-1))])]),l[78]||(l[78]=e(" Falls keine Werte für die Zählerstände übermittelt werden, berechnet openWB die Zählerstände anhand der Leistung. ",-1)),n("ul",null,[n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.publishTopicPrefix)+"/get/imported ",1)]),_:1}),l[6]||(l[6]=n("br",null,null,-1)),l[7]||(l[7]=e(" Bezogene Energie in Wh, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, nur positiv",-1)),l[8]||(l[8]=n("br",null,null,-1)),l[9]||(l[9]=e(" Beispiel: ",-1)),l[10]||(l[10]=n("span",{class:"text-info"},"123.45",-1))]),n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.publishTopicPrefix)+"/get/exported ",1)]),_:1}),l[11]||(l[11]=n("br",null,null,-1)),l[12]||(l[12]=e(" Eingespeiste Energie in Wh, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, nur positiv",-1)),l[13]||(l[13]=n("br",null,null,-1)),l[14]||(l[14]=e(" Beispiel: ",-1)),l[15]||(l[15]=n("span",{class:"text-info"},"123.45",-1))]),n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.publishTopicPrefix)+"/get/currents ",1)]),_:1}),l[16]||(l[16]=n("br",null,null,-1)),l[17]||(l[17]=e(" Array mit den Strömen je Phase in Ampere, mit Nachkommastellen (Float), positiv Bezug, negativ Einspeisung",-1)),l[18]||(l[18]=n("br",null,null,-1)),l[19]||(l[19]=e(" Beispiel: ",-1)),l[20]||(l[20]=n("span",{class:"text-info"},"[1.2,2.3,-2.1]",-1))]),n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.publishTopicPrefix)+"/get/voltages ",1)]),_:1}),l[21]||(l[21]=n("br",null,null,-1)),l[22]||(l[22]=e(" Array mit den Spannungen je Phase in Volt, mit Nachkommastellen (Float)",-1)),l[23]||(l[23]=n("br",null,null,-1)),l[24]||(l[24]=e(" Beispiel: ",-1)),l[25]||(l[25]=n("span",{class:"text-info"},"[222.2,223.3,222.3]",-1))]),n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.publishTopicPrefix)+"/get/temperatures ",1)]),_:1}),l[26]||(l[26]=n("br",null,null,-1)),l[27]||(l[27]=e(" Array mit Temperaturwerten in Grad Celsius, mit Nachkommastellen (Float)",-1)),l[28]||(l[28]=n("br",null,null,-1)),l[29]||(l[29]=e(" Beispiel: ",-1)),l[30]||(l[30]=n("span",{class:"text-info"},"[38.5,41.2]",-1))])]),l[79]||(l[79]=e(" Die Leistungen jeder Phase werden ausschließlich zu Anzeigezwecken verwendet: ",-1)),n("ul",null,[n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.publishTopicPrefix)+"/get/powers ",1)]),_:1}),l[31]||(l[31]=n("br",null,null,-1)),l[32]||(l[32]=e(" Array mit den Leistungen je Phase in Watt, mit Nachkommastellen (Float)",-1)),l[33]||(l[33]=n("br",null,null,-1)),l[34]||(l[34]=e(" Beispiel: ",-1)),l[35]||(l[35]=n("span",{class:"text-info"},"[12.3,23.4,-12.3]",-1))])]),l[80]||(l[80]=e(" Das folgenden Topic wird von openWB geschrieben, falls als Verwendung ",-1)),l[81]||(l[81]=n("strong",null,"Stufenlos regelbar",-1)),l[82]||(l[82]=e(" ausgewählt wird: ",-1)),n("ul",null,[n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.subscribeTopicPrefix)+"/set/power ",1)]),_:1}),l[36]||(l[36]=n("br",null,null,-1)),l[37]||(l[37]=e(" Sollleistung in Watt, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen",-1)),l[38]||(l[38]=n("br",null,null,-1)),l[39]||(l[39]=e(" Beispiel: ",-1)),l[40]||(l[40]=n("span",{class:"text-info"},"-123.45",-1))])]),l[83]||(l[83]=e(" Das folgenden Topic wird von openWB geschrieben, falls als Verwendung ",-1)),l[84]||(l[84]=n("strong",null,"Schaltbar (Ein/Aus)",-1)),l[85]||(l[85]=e(" ausgewählt wird: ",-1)),n("ul",null,[n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.subscribeTopicPrefix)+"/set/switch ",1)]),_:1}),l[41]||(l[41]=n("br",null,null,-1)),l[42]||(l[42]=e(" Vorgegebener Schaltzustand, true für ein, false für aus",-1)),l[43]||(l[43]=n("br",null,null,-1)),l[44]||(l[44]=e(" Beispiel: ",-1)),l[45]||(l[45]=n("span",{class:"text-info"},"true",-1))])]),l[86]||(l[86]=e(" Die folgenden Werte werden von openWB geschrieben, falls als Verwendung ",-1)),l[87]||(l[87]=n("strong",null,"Wärmepumpe in Eigensteuerung",-1)),l[88]||(l[88]=e(" ausgewählt wird: ",-1)),n("ul",null,[n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.subscribeTopicPrefix)+"/set/evu_power ",1)]),_:1}),l[46]||(l[46]=n("br",null,null,-1)),l[47]||(l[47]=e(" Aktuelle EVU-Leistung in Watt, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen",-1)),l[48]||(l[48]=n("br",null,null,-1)),l[49]||(l[49]=e(" Beispiel: ",-1)),l[50]||(l[50]=n("span",{class:"text-info"},"-123.45",-1))]),n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.subscribeTopicPrefix)+"/set/pv_power ",1)]),_:1}),l[51]||(l[51]=n("br",null,null,-1)),l[52]||(l[52]=e(" Aktuelle PV-Leistung in Watt, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen",-1)),l[53]||(l[53]=n("br",null,null,-1)),l[54]||(l[54]=e(" Beispiel: ",-1)),l[55]||(l[55]=n("span",{class:"text-info"},"-123.45",-1))]),n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.subscribeTopicPrefix)+"/set/bat_power ",1)]),_:1}),l[56]||(l[56]=n("br",null,null,-1)),l[57]||(l[57]=e(" Aktuelle Batterieleistung in Watt, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen",-1)),l[58]||(l[58]=n("br",null,null,-1)),l[59]||(l[59]=e(" Beispiel: ",-1)),l[60]||(l[60]=n("span",{class:"text-info"},"-123.45",-1))]),n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.subscribeTopicPrefix)+"/set/bat_soc ",1)]),_:1}),l[61]||(l[61]=n("br",null,null,-1)),l[62]||(l[62]=e(" Aktueller Batterieladestand in Prozent, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen",-1)),l[63]||(l[63]=n("br",null,null,-1)),l[64]||(l[64]=e(" Beispiel: ",-1)),l[65]||(l[65]=n("span",{class:"text-info"},"75.5",-1))]),n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.subscribeTopicPrefix)+"/set/home_consumption ",1)]),_:1}),l[66]||(l[66]=n("br",null,null,-1)),l[67]||(l[67]=e(" Aktueller Hausverbrauch in Watt, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen",-1)),l[68]||(l[68]=n("br",null,null,-1)),l[69]||(l[69]=e(" Beispiel: ",-1)),l[70]||(l[70]=n("span",{class:"text-info"},"-123.45",-1))]),n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.subscribeTopicPrefix)+"/set/cp_power ",1)]),_:1}),l[71]||(l[71]=n("br",null,null,-1)),l[72]||(l[72]=e(" Aktuelle Leistung aller Ladepunkte in Watt, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen",-1)),l[73]||(l[73]=n("br",null,null,-1)),l[74]||(l[74]=e(" Beispiel: ",-1)),l[75]||(l[75]=n("span",{class:"text-info"},"-123.45",-1))])])]),_:1})])}const Z=b(a,[["render",k],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/generic/mqtt/consumer.vue"]]);export{Z as default}; +import{C as d}from"./ConsumerConfig-CDodeLc0.js";import{_ as b,m as u,l as f,f as g,q as t,u as i,B as e,y as n,J as o}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const a={name:"ConsumerGenericMqtt",mixins:[d],data(){return{publishBaseTopic:"openWB/set/mqtt/consumer",subscribeBaseTopic:"openWB/mqtt/consumer"}},computed:{publishTopicPrefix(){return`${this.publishBaseTopic}/${this.consumer.id}`},subscribeTopicPrefix(){return`${this.subscribeBaseTopic}/${this.consumer.id}`}}},x={class:"consumer-generic-mqtt"};function k(T,l,B,w,P,s){const p=u("openwb-base-heading"),r=u("openwb-base-copy-to-clipboard"),m=u("openwb-base-alert");return f(),g("div",x,[t(p,null,{default:i(()=>[...l[0]||(l[0]=[e("Einstellungen für MQTT-Verbraucher",-1)])]),_:1}),t(m,{subtype:"info"},{default:i(()=>[l[76]||(l[76]=n("p",null," Dieses Modul stellt keine aktive Verbindung her und erwartet MQTT-Daten auf den passenden Topics. Die Konfiguration erfolgt primär über die MQTT-Datenstruktur. ",-1)),l[77]||(l[77]=n("p",null,"Die folgenden Topics sind für einen reibungslosen Betrieb unbedingt erforderlich:",-1)),n("ul",null,[n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.publishTopicPrefix)+"/get/power ",1)]),_:1}),l[1]||(l[1]=n("br",null,null,-1)),l[2]||(l[2]=e(" Bezugsleistung in Watt, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, positiv Bezug, negativ Einspeisung",-1)),l[3]||(l[3]=n("br",null,null,-1)),l[4]||(l[4]=e(" Beispiel: ",-1)),l[5]||(l[5]=n("span",{class:"text-info"},"-123.45",-1))])]),l[78]||(l[78]=e(" Falls keine Werte für die Zählerstände übermittelt werden, berechnet openWB die Zählerstände anhand der Leistung. ",-1)),n("ul",null,[n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.publishTopicPrefix)+"/get/imported ",1)]),_:1}),l[6]||(l[6]=n("br",null,null,-1)),l[7]||(l[7]=e(" Bezogene Energie in Wh, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, nur positiv",-1)),l[8]||(l[8]=n("br",null,null,-1)),l[9]||(l[9]=e(" Beispiel: ",-1)),l[10]||(l[10]=n("span",{class:"text-info"},"123.45",-1))]),n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.publishTopicPrefix)+"/get/exported ",1)]),_:1}),l[11]||(l[11]=n("br",null,null,-1)),l[12]||(l[12]=e(" Eingespeiste Energie in Wh, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, nur positiv",-1)),l[13]||(l[13]=n("br",null,null,-1)),l[14]||(l[14]=e(" Beispiel: ",-1)),l[15]||(l[15]=n("span",{class:"text-info"},"123.45",-1))]),n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.publishTopicPrefix)+"/get/currents ",1)]),_:1}),l[16]||(l[16]=n("br",null,null,-1)),l[17]||(l[17]=e(" Array mit den Strömen je Phase in Ampere, mit Nachkommastellen (Float), positiv Bezug, negativ Einspeisung",-1)),l[18]||(l[18]=n("br",null,null,-1)),l[19]||(l[19]=e(" Beispiel: ",-1)),l[20]||(l[20]=n("span",{class:"text-info"},"[1.2,2.3,-2.1]",-1))]),n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.publishTopicPrefix)+"/get/voltages ",1)]),_:1}),l[21]||(l[21]=n("br",null,null,-1)),l[22]||(l[22]=e(" Array mit den Spannungen je Phase in Volt, mit Nachkommastellen (Float)",-1)),l[23]||(l[23]=n("br",null,null,-1)),l[24]||(l[24]=e(" Beispiel: ",-1)),l[25]||(l[25]=n("span",{class:"text-info"},"[222.2,223.3,222.3]",-1))]),n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.publishTopicPrefix)+"/get/temperatures ",1)]),_:1}),l[26]||(l[26]=n("br",null,null,-1)),l[27]||(l[27]=e(" Array mit Temperaturwerten in Grad Celsius, mit Nachkommastellen (Float)",-1)),l[28]||(l[28]=n("br",null,null,-1)),l[29]||(l[29]=e(" Beispiel: ",-1)),l[30]||(l[30]=n("span",{class:"text-info"},"[38.5,41.2]",-1))])]),l[79]||(l[79]=e(" Die Leistungen jeder Phase werden ausschließlich zu Anzeigezwecken verwendet: ",-1)),n("ul",null,[n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.publishTopicPrefix)+"/get/powers ",1)]),_:1}),l[31]||(l[31]=n("br",null,null,-1)),l[32]||(l[32]=e(" Array mit den Leistungen je Phase in Watt, mit Nachkommastellen (Float)",-1)),l[33]||(l[33]=n("br",null,null,-1)),l[34]||(l[34]=e(" Beispiel: ",-1)),l[35]||(l[35]=n("span",{class:"text-info"},"[12.3,23.4,-12.3]",-1))])]),l[80]||(l[80]=e(" Das folgenden Topic wird von openWB geschrieben, falls als Verwendung ",-1)),l[81]||(l[81]=n("strong",null,"Stufenlos regelbar",-1)),l[82]||(l[82]=e(" ausgewählt wird: ",-1)),n("ul",null,[n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.subscribeTopicPrefix)+"/set/power ",1)]),_:1}),l[36]||(l[36]=n("br",null,null,-1)),l[37]||(l[37]=e(" Sollleistung in Watt, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen",-1)),l[38]||(l[38]=n("br",null,null,-1)),l[39]||(l[39]=e(" Beispiel: ",-1)),l[40]||(l[40]=n("span",{class:"text-info"},"-123.45",-1))])]),l[83]||(l[83]=e(" Das folgenden Topic wird von openWB geschrieben, falls als Verwendung ",-1)),l[84]||(l[84]=n("strong",null,"Schaltbar (Ein/Aus)",-1)),l[85]||(l[85]=e(" ausgewählt wird: ",-1)),n("ul",null,[n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.subscribeTopicPrefix)+"/set/switch ",1)]),_:1}),l[41]||(l[41]=n("br",null,null,-1)),l[42]||(l[42]=e(" Vorgegebener Schaltzustand, true für ein, false für aus",-1)),l[43]||(l[43]=n("br",null,null,-1)),l[44]||(l[44]=e(" Beispiel: ",-1)),l[45]||(l[45]=n("span",{class:"text-info"},"true",-1))])]),l[86]||(l[86]=e(" Die folgenden Werte werden von openWB geschrieben, falls als Verwendung ",-1)),l[87]||(l[87]=n("strong",null,"Wärmepumpe in Eigensteuerung",-1)),l[88]||(l[88]=e(" ausgewählt wird: ",-1)),n("ul",null,[n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.subscribeTopicPrefix)+"/set/evu_power ",1)]),_:1}),l[46]||(l[46]=n("br",null,null,-1)),l[47]||(l[47]=e(" Aktuelle EVU-Leistung in Watt, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen",-1)),l[48]||(l[48]=n("br",null,null,-1)),l[49]||(l[49]=e(" Beispiel: ",-1)),l[50]||(l[50]=n("span",{class:"text-info"},"-123.45",-1))]),n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.subscribeTopicPrefix)+"/set/pv_power ",1)]),_:1}),l[51]||(l[51]=n("br",null,null,-1)),l[52]||(l[52]=e(" Aktuelle PV-Leistung in Watt, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen",-1)),l[53]||(l[53]=n("br",null,null,-1)),l[54]||(l[54]=e(" Beispiel: ",-1)),l[55]||(l[55]=n("span",{class:"text-info"},"-123.45",-1))]),n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.subscribeTopicPrefix)+"/set/bat_power ",1)]),_:1}),l[56]||(l[56]=n("br",null,null,-1)),l[57]||(l[57]=e(" Aktuelle Batterieleistung in Watt, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen",-1)),l[58]||(l[58]=n("br",null,null,-1)),l[59]||(l[59]=e(" Beispiel: ",-1)),l[60]||(l[60]=n("span",{class:"text-info"},"-123.45",-1))]),n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.subscribeTopicPrefix)+"/set/bat_soc ",1)]),_:1}),l[61]||(l[61]=n("br",null,null,-1)),l[62]||(l[62]=e(" Aktueller Batterieladestand in Prozent, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen",-1)),l[63]||(l[63]=n("br",null,null,-1)),l[64]||(l[64]=e(" Beispiel: ",-1)),l[65]||(l[65]=n("span",{class:"text-info"},"75.5",-1))]),n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.subscribeTopicPrefix)+"/set/home_consumption ",1)]),_:1}),l[66]||(l[66]=n("br",null,null,-1)),l[67]||(l[67]=e(" Aktueller Hausverbrauch in Watt, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen",-1)),l[68]||(l[68]=n("br",null,null,-1)),l[69]||(l[69]=e(" Beispiel: ",-1)),l[70]||(l[70]=n("span",{class:"text-info"},"-123.45",-1))]),n("li",null,[t(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[e(o(s.subscribeTopicPrefix)+"/set/cp_power ",1)]),_:1}),l[71]||(l[71]=n("br",null,null,-1)),l[72]||(l[72]=e(" Aktuelle Leistung aller Ladepunkte in Watt, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen",-1)),l[73]||(l[73]=n("br",null,null,-1)),l[74]||(l[74]=e(" Beispiel: ",-1)),l[75]||(l[75]=n("span",{class:"text-info"},"-123.45",-1))])])]),_:1})])}const Z=b(a,[["render",k],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/generic/mqtt/consumer.vue"]]);export{Z as default}; diff --git a/web/settings/assets/consumer-q_3jRzYP.js b/web/settings/assets/consumer-q_3jRzYP.js new file mode 100644 index 0000000000..096871616c --- /dev/null +++ b/web/settings/assets/consumer-q_3jRzYP.js @@ -0,0 +1 @@ +import{C as a}from"./ConsumerConfig-CDodeLc0.js";import{_ as m,m as r,l as p,f as d,q as t,u as l,B as f}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const b={name:"ConsumerXtherma",mixins:[a]},_={class:"consumer-xtherma"};function c(o,e,g,v,C,w){const s=r("openwb-base-heading"),u=r("openwb-base-text-input"),i=r("openwb-base-number-input");return p(),d("div",_,[t(s,null,{default:l(()=>[...e[3]||(e[3]=[f(" Einstellungen für Xtherma Wärmepumpe ",-1)])]),_:1}),t(u,{title:"IP oder Hostname",subtype:"host",required:"","model-value":o.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.ip_address"))},null,8,["model-value"]),t(i,{title:"Port",required:"",min:1,max:65535,"model-value":o.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.port"))},null,8,["model-value"]),t(i,{title:"Modbus ID",required:"",min:1,max:255,"model-value":o.consumer.configuration.modbus_id,"onUpdate:modelValue":e[2]||(e[2]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"])])}const E=m(b,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/xtherma/xtherma/consumer.vue"]]);export{E as default}; diff --git a/web/settings/assets/consumer-CMPGksUk.js b/web/settings/assets/consumer-wNhSDED-.js similarity index 93% rename from web/settings/assets/consumer-CMPGksUk.js rename to web/settings/assets/consumer-wNhSDED-.js index 1182103234..ecee8080e5 100644 --- a/web/settings/assets/consumer-CMPGksUk.js +++ b/web/settings/assets/consumer-wNhSDED-.js @@ -1 +1 @@ -import{C as m}from"./ConsumerConfig-DBNAxLj7.js";import{_ as f,m as r,l as b,f as g,q as t,u as i,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const w={name:"ConsumerShellyPm",mixins:[m]},v={class:"consumer-shelly-pm"};function h(n,e,y,S,_,C){const u=r("openwb-base-heading"),a=r("openwb-base-alert"),s=r("openwb-base-text-input"),p=r("openwb-base-number-input"),d=r("openwb-base-select-input");return b(),g("div",v,[t(u,null,{default:i(()=>[...e[5]||(e[5]=[l(" Einstellungen für Shelly PM (Messen & Schalten) ",-1)])]),_:1}),t(a,{subtype:"info"},{default:i(()=>[...e[6]||(e[6]=[l(" Unterstützt werden theoretisch alle ein- und dreiphasigen Shelly der Generation 1-3. Getestete Modelle sind Shelly 1pm, 1pm plus, Pro Pro 3EM, Plug S. ",-1)])]),_:1}),t(s,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),t(s,{title:"Benutzername",subtype:"user","model-value":n.consumer.configuration.username,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.username"))},{help:i(()=>[...e[7]||(e[7]=[l(" Nur auszufüllen, wenn im Shelly die Authentifizierung aktiviert wurde. Funktioniert nicht für Shelly Plus. ",-1)])]),_:1},8,["model-value"]),t(s,{title:"Passwort",subtype:"password","model-value":n.consumer.configuration.password,"onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.password"))},{help:i(()=>[...e[8]||(e[8]=[l(" Nur auszufüllen, wenn im Shelly die Authentifizierung aktiviert wurde. Funktioniert nicht für Shelly Plus. ",-1)])]),_:1},8,["model-value"]),t(p,{title:"Channel",required:"",max:3,"model-value":n.consumer.configuration.channel,"onUpdate:modelValue":e[3]||(e[3]=o=>n.updateConfiguration(o,"configuration.channel"))},{help:i(()=>[...e[9]||(e[9]=[l(" Gibt den Schaltkanal des Shelly an (z. B. 0 oder 1, abhängig vom Modell). ",-1)])]),_:1},8,["model-value"]),t(d,{title:"Vorzeichen invertieren","not-selected":"Bitte auswählen",options:[{value:-1,text:"ja"},{value:1,text:"nein"}],"model-value":n.consumer.configuration.factor,required:"","onUpdate:modelValue":e[4]||(e[4]=o=>n.updateConfiguration(o,"configuration.factor"))},{help:i(()=>[...e[10]||(e[10]=[l(" Einige Shelly Modelle liefern die Leistung mit umgedrehtem Vorzeichen. Falls dies der Fall sein sollte, das Vorzeichen invertieren. ",-1)])]),_:1},8,["model-value"])])}const q=f(w,[["render",h],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/shelly/shelly_pm/consumer.vue"]]);export{q as default}; +import{C as m}from"./ConsumerConfig-CDodeLc0.js";import{_ as f,m as r,l as b,f as g,q as t,u as i,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const w={name:"ConsumerShellyPm",mixins:[m]},v={class:"consumer-shelly-pm"};function h(n,e,y,S,_,C){const u=r("openwb-base-heading"),a=r("openwb-base-alert"),s=r("openwb-base-text-input"),p=r("openwb-base-number-input"),d=r("openwb-base-select-input");return b(),g("div",v,[t(u,null,{default:i(()=>[...e[5]||(e[5]=[l(" Einstellungen für Shelly PM (Messen & Schalten) ",-1)])]),_:1}),t(a,{subtype:"info"},{default:i(()=>[...e[6]||(e[6]=[l(" Unterstützt werden theoretisch alle ein- und dreiphasigen Shelly der Generation 1-3. Getestete Modelle sind Shelly 1pm, 1pm plus, Pro Pro 3EM, Plug S. ",-1)])]),_:1}),t(s,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.ip_address"))},null,8,["model-value"]),t(s,{title:"Benutzername",subtype:"user","model-value":n.consumer.configuration.username,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.username"))},{help:i(()=>[...e[7]||(e[7]=[l(" Nur auszufüllen, wenn im Shelly die Authentifizierung aktiviert wurde. Funktioniert nicht für Shelly Plus. ",-1)])]),_:1},8,["model-value"]),t(s,{title:"Passwort",subtype:"password","model-value":n.consumer.configuration.password,"onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.password"))},{help:i(()=>[...e[8]||(e[8]=[l(" Nur auszufüllen, wenn im Shelly die Authentifizierung aktiviert wurde. Funktioniert nicht für Shelly Plus. ",-1)])]),_:1},8,["model-value"]),t(p,{title:"Channel",required:"",max:3,"model-value":n.consumer.configuration.channel,"onUpdate:modelValue":e[3]||(e[3]=o=>n.updateConfiguration(o,"configuration.channel"))},{help:i(()=>[...e[9]||(e[9]=[l(" Gibt den Schaltkanal des Shelly an (z. B. 0 oder 1, abhängig vom Modell). ",-1)])]),_:1},8,["model-value"]),t(d,{title:"Vorzeichen invertieren","not-selected":"Bitte auswählen",options:[{value:-1,text:"ja"},{value:1,text:"nein"}],"model-value":n.consumer.configuration.factor,required:"","onUpdate:modelValue":e[4]||(e[4]=o=>n.updateConfiguration(o,"configuration.factor"))},{help:i(()=>[...e[10]||(e[10]=[l(" Einige Shelly Modelle liefern die Leistung mit umgedrehtem Vorzeichen. Falls dies der Fall sein sollte, das Vorzeichen invertieren. ",-1)])]),_:1},8,["model-value"])])}const q=f(w,[["render",h],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/shelly/shelly_pm/consumer.vue"]]);export{q as default}; diff --git a/web/settings/assets/consumer-CJI9u_ji.js b/web/settings/assets/consumer-x1OJSxBK.js similarity index 92% rename from web/settings/assets/consumer-CJI9u_ji.js rename to web/settings/assets/consumer-x1OJSxBK.js index 713c449cdd..2e00237aa7 100644 --- a/web/settings/assets/consumer-CJI9u_ji.js +++ b/web/settings/assets/consumer-x1OJSxBK.js @@ -1 +1 @@ -import{C as d}from"./ConsumerConfig-DBNAxLj7.js";import{_ as l,m as s,l as b,f,q as t,u as i,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"ConsumerAskoheat",mixins:[d]},c={class:"consumer-askoheat"};function g(o,e,w,v,C,k){const a=s("openwb-base-heading"),m=s("openwb-base-alert"),p=s("openwb-base-text-input"),r=s("openwb-base-number-input");return b(),f("div",c,[t(a,null,{default:i(()=>[...e[3]||(e[3]=[u(" Einstellungen für Askoheat",-1)])]),_:1}),t(m,{subtype:"info"},{default:i(()=>[...e[4]||(e[4]=[u(" Im Web-Frontend des Heizstabs muss unter Expertsetup / Setup 3 eine statische IP-Adresse und der Modbus TCP Port 502 (nicht 520) erfasst werden. ",-1)])]),_:1}),t(p,{title:"IP oder Hostname",subtype:"host",required:"","model-value":o.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.ip_address"))},null,8,["model-value"]),t(r,{title:"Port",required:"",min:1,max:65535,"model-value":o.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.port"))},null,8,["model-value"]),t(r,{title:"Modbus ID",required:"","model-value":o.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[2]||(e[2]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"])])}const E=l(_,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/askoma/askoheat/consumer.vue"]]);export{E as default}; +import{C as d}from"./ConsumerConfig-CDodeLc0.js";import{_ as l,m as s,l as b,f,q as t,u as i,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"ConsumerAskoheat",mixins:[d]},c={class:"consumer-askoheat"};function g(o,e,w,v,C,k){const a=s("openwb-base-heading"),m=s("openwb-base-alert"),p=s("openwb-base-text-input"),r=s("openwb-base-number-input");return b(),f("div",c,[t(a,null,{default:i(()=>[...e[3]||(e[3]=[u(" Einstellungen für Askoheat",-1)])]),_:1}),t(m,{subtype:"info"},{default:i(()=>[...e[4]||(e[4]=[u(" Im Web-Frontend des Heizstabs muss unter Expertsetup / Setup 3 eine statische IP-Adresse und der Modbus TCP Port 502 (nicht 520) erfasst werden. ",-1)])]),_:1}),t(p,{title:"IP oder Hostname",subtype:"host",required:"","model-value":o.consumer.configuration.ip_address,"onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.ip_address"))},null,8,["model-value"]),t(r,{title:"Port",required:"",min:1,max:65535,"model-value":o.consumer.configuration.port,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.port"))},null,8,["model-value"]),t(r,{title:"Modbus ID",required:"","model-value":o.consumer.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[2]||(e[2]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"])])}const E=l(_,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/consumers/askoma/askoheat/consumer.vue"]]);export{E as default}; diff --git a/web/settings/assets/consumption_counter-BXmDaQsP.js b/web/settings/assets/consumption_counter-CSxdoH_9.js similarity index 93% rename from web/settings/assets/consumption_counter-BXmDaQsP.js rename to web/settings/assets/consumption_counter-CSxdoH_9.js index a5bb14088e..dc93f240e4 100644 --- a/web/settings/assets/consumption_counter-BXmDaQsP.js +++ b/web/settings/assets/consumption_counter-CSxdoH_9.js @@ -1 +1 @@ -import{C as d}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as m,m as o,l as b,f as c,q as t,u as s,B as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const f={name:"DeviceOpenwbFlexConsumptionCounter",mixins:[d]},_={class:"device-openwb-flex-consumption-counter"};function g(n,e,w,v,B,x){const l=o("openwb-base-heading"),u=o("openwb-base-alert"),p=o("openwb-base-select-input"),a=o("openwb-base-number-input");return b(),c("div",_,[t(l,null,{default:s(()=>[...e[2]||(e[2]=[r(" Einstellungen für openWB-Flex Verbrauchszähler ",-1)])]),_:1}),t(u,{subtype:"info"},{default:s(()=>[...e[3]||(e[3]=[r(" Bei saldierenden Zählern (B23) werden die Zählerstände für Einspeisung und Bezug aus dem Zähler ausgelesen. Bei Zählern, die nicht saldierend arbeiten (SDM120, SDM630, SDM72D-M), wird der Zählerstand für den Bezug aus dem Zähler ausgelesen. Eine Messung der Einspeisung ist nicht möglich. ",-1)])]),_:1}),t(p,{title:"Zählermodell","not-selected":"Bitte auswählen",options:[{value:"sdm120",text:"SDM120"},{value:"sdm630",text:"SDM630/SDM72D-M"},{value:"b23",text:"B23"}],"model-value":n.component.configuration.version,required:"","onUpdate:modelValue":e[0]||(e[0]=i=>n.updateConfiguration(i,"configuration.version"))},null,8,["model-value"]),t(a,{title:"Modbus-ID",required:"",min:1,max:255,"model-value":n.component.configuration.id,"onUpdate:modelValue":e[1]||(e[1]=i=>n.updateConfiguration(i,"configuration.id"))},null,8,["model-value"])])}const q=m(f,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/openwb/openwb_flex/consumption_counter.vue"]]);export{q as default}; +import{C as d}from"./HardwareInstallation-M-k9qNJb.js";import{_ as m,m as o,l as b,f as c,q as t,u as s,B as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const f={name:"DeviceOpenwbFlexConsumptionCounter",mixins:[d]},_={class:"device-openwb-flex-consumption-counter"};function g(n,e,w,v,B,x){const l=o("openwb-base-heading"),u=o("openwb-base-alert"),p=o("openwb-base-select-input"),a=o("openwb-base-number-input");return b(),c("div",_,[t(l,null,{default:s(()=>[...e[2]||(e[2]=[r(" Einstellungen für openWB-Flex Verbrauchszähler ",-1)])]),_:1}),t(u,{subtype:"info"},{default:s(()=>[...e[3]||(e[3]=[r(" Bei saldierenden Zählern (B23) werden die Zählerstände für Einspeisung und Bezug aus dem Zähler ausgelesen. Bei Zählern, die nicht saldierend arbeiten (SDM120, SDM630, SDM72D-M), wird der Zählerstand für den Bezug aus dem Zähler ausgelesen. Eine Messung der Einspeisung ist nicht möglich. ",-1)])]),_:1}),t(p,{title:"Zählermodell","not-selected":"Bitte auswählen",options:[{value:"sdm120",text:"SDM120"},{value:"sdm630",text:"SDM630/SDM72D-M"},{value:"b23",text:"B23"}],"model-value":n.component.configuration.version,required:"","onUpdate:modelValue":e[0]||(e[0]=i=>n.updateConfiguration(i,"configuration.version"))},null,8,["model-value"]),t(a,{title:"Modbus-ID",required:"",min:1,max:255,"model-value":n.component.configuration.id,"onUpdate:modelValue":e[1]||(e[1]=i=>n.updateConfiguration(i,"configuration.id"))},null,8,["model-value"])])}const q=m(f,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/openwb/openwb_flex/consumption_counter.vue"]]);export{q as default}; diff --git a/web/settings/assets/consumption_counter-57_J2Spi.js b/web/settings/assets/consumption_counter-DiVLqlI_.js similarity index 91% rename from web/settings/assets/consumption_counter-57_J2Spi.js rename to web/settings/assets/consumption_counter-DiVLqlI_.js index 69117e7b03..e91a60646f 100644 --- a/web/settings/assets/consumption_counter-57_J2Spi.js +++ b/web/settings/assets/consumption_counter-DiVLqlI_.js @@ -1 +1 @@ -import{C as a}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as m,m as n,l as c,f as d,q as o,u as s,B as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceOpenwbFlexLocalConsumptionCounter",mixins:[a]},b={class:"device-openwb-flex-local-consumption-counter"};function f(t,e,g,w,h,v){const r=n("openwb-base-heading"),l=n("openwb-base-alert"),p=n("openwb-base-number-input");return c(),d("div",b,[o(r,null,{default:s(()=>[...e[1]||(e[1]=[i(" Einstellungen für Verbrauchszähler mit lokaler Auslesung ",-1)])]),_:1}),o(l,{subtype:"info"},{default:s(()=>[...e[2]||(e[2]=[i(" Der Verbrauchszähler mit lokaler Auslesung unterstützt ausschließlich den Zählertyp SDM630/SDM72D-M. Der Zählerstand für den Bezug wird aus dem Zähler ausgelesen. Eine Messung der Einspeisung ist nicht möglich. ",-1)])]),_:1}),o(p,{title:"Modbus-ID",required:"",min:1,max:255,"model-value":t.component.configuration.id,"onUpdate:modelValue":e[0]||(e[0]=u=>t.updateConfiguration(u,"configuration.id"))},null,8,["model-value"])])}const $=m(_,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/openwb/openwb_flex_local/consumption_counter.vue"]]);export{$ as default}; +import{C as a}from"./HardwareInstallation-M-k9qNJb.js";import{_ as m,m as n,l as c,f as d,q as o,u as s,B as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceOpenwbFlexLocalConsumptionCounter",mixins:[a]},b={class:"device-openwb-flex-local-consumption-counter"};function f(t,e,g,w,h,v){const r=n("openwb-base-heading"),l=n("openwb-base-alert"),p=n("openwb-base-number-input");return c(),d("div",b,[o(r,null,{default:s(()=>[...e[1]||(e[1]=[i(" Einstellungen für Verbrauchszähler mit lokaler Auslesung ",-1)])]),_:1}),o(l,{subtype:"info"},{default:s(()=>[...e[2]||(e[2]=[i(" Der Verbrauchszähler mit lokaler Auslesung unterstützt ausschließlich den Zählertyp SDM630/SDM72D-M. Der Zählerstand für den Bezug wird aus dem Zähler ausgelesen. Eine Messung der Einspeisung ist nicht möglich. ",-1)])]),_:1}),o(p,{title:"Modbus-ID",required:"",min:1,max:255,"model-value":t.component.configuration.id,"onUpdate:modelValue":e[0]||(e[0]=u=>t.updateConfiguration(u,"configuration.id"))},null,8,["model-value"])])}const $=m(_,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/openwb/openwb_flex_local/consumption_counter.vue"]]);export{$ as default}; diff --git a/web/settings/assets/counter-DC6kT4Ul.js b/web/settings/assets/counter-AYpWBR1p.js similarity index 95% rename from web/settings/assets/counter-DC6kT4Ul.js rename to web/settings/assets/counter-AYpWBR1p.js index 48c2e4933e..9e815eafec 100644 --- a/web/settings/assets/counter-DC6kT4Ul.js +++ b/web/settings/assets/counter-AYpWBR1p.js @@ -1 +1 @@ -import{C as k}from"./HardwareInstallation-Ln-RWgHD.js";import y from"./ModbusRegisterFields-CkQ0333X.js";import{_ as h,m as i,l as o,f as r,q as a,u as v,B as w,K as l,L as p,y as d,J as m,x as P}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const C=[{id:"power_total",title:"Leistung",entries:[{key:"power",addressRequired:!0}]},{id:"voltage",title:"Spannung",entries:[{key:"voltage_L1",label:"Phase L1"},{key:"voltage_L2",label:"Phase L2"},{key:"voltage_L3",label:"Phase L3"}]},{id:"current",title:"Strom",entries:[{key:"current_L1",label:"Phase L1"},{key:"current_L2",label:"Phase L2"},{key:"current_L3",label:"Phase L3"}]},{id:"powers",title:"Leistung",entries:[{key:"powers_L1",label:"Phase L1"},{key:"powers_L2",label:"Phase L2"},{key:"powers_L3",label:"Phase L3"}]},{id:"power_factor",title:"Leistungsfaktor",entries:[{key:"power_factor_L1",label:"Phase L1"},{key:"power_factor_L2",label:"Phase L2"},{key:"power_factor_L3",label:"Phase L3"}]},{id:"import",title:"Import",entries:[{key:"imported"}]},{id:"export",title:"Export",entries:[{key:"exported"}]},{id:"frequency",title:"Frequenz",entries:[{key:"frequency"}]},{id:"serial_number",title:"Seriennummer",entries:[{key:"serial_number"}]}],q={name:"DeviceGenericModbusCounter",components:{ModbusRegisterFields:y},mixins:[k],data(){return{registerSections:C}},methods:{handleRegisterModelUpdate(n,{field:e,value:u}){this.updateConfiguration(u,`configuration.${n}.${e}`)}}},x={class:"device-generic-modbus-counter"},S={key:0};function M(n,e,u,R,_,c){const b=i("openwb-base-heading"),g=i("openwb-base-number-input"),L=i("modbus-register-fields");return o(),r("div",x,[a(b,null,{default:v(()=>[...e[1]||(e[1]=[w(" Einstellungen für Universell Modbus Zähler ",-1)])]),_:1}),a(g,{title:"Modbus ID",required:"","model-value":n.component.configuration.modbus_id,min:0,max:255,"onUpdate:modelValue":e[0]||(e[0]=s=>n.updateConfiguration(s,"configuration.modbus_id"))},null,8,["model-value"]),(o(!0),r(l,null,p(_.registerSections,s=>(o(),r("div",{key:s.id},[d("h4",null,m(s.title),1),(o(!0),r(l,null,p(s.entries,t=>(o(),r(l,{key:t.key},[e[2]||(e[2]=d("hr",{class:"modbus-divider"},null,-1)),d("div",null,[t.label?(o(),r("h5",S,m(t.label),1)):P("",!0),a(L,{"model-value":n.component.configuration[t.key],"address-required":!!t.addressRequired,"onUpdate:modelValue":f=>c.handleRegisterModelUpdate(t.key,f)},null,8,["model-value","address-required","onUpdate:modelValue"])])],64))),128))]))),128))])}const G=h(q,[["render",M],["__scopeId","data-v-79585e27"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/modbus/counter.vue"]]);export{G as default}; +import{C as k}from"./HardwareInstallation-M-k9qNJb.js";import y from"./ModbusRegisterFields-CkQ0333X.js";import{_ as h,m as i,l as o,f as r,q as a,u as v,B as w,K as l,L as p,y as d,J as m,x as P}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const C=[{id:"power_total",title:"Leistung",entries:[{key:"power",addressRequired:!0}]},{id:"voltage",title:"Spannung",entries:[{key:"voltage_L1",label:"Phase L1"},{key:"voltage_L2",label:"Phase L2"},{key:"voltage_L3",label:"Phase L3"}]},{id:"current",title:"Strom",entries:[{key:"current_L1",label:"Phase L1"},{key:"current_L2",label:"Phase L2"},{key:"current_L3",label:"Phase L3"}]},{id:"powers",title:"Leistung",entries:[{key:"powers_L1",label:"Phase L1"},{key:"powers_L2",label:"Phase L2"},{key:"powers_L3",label:"Phase L3"}]},{id:"power_factor",title:"Leistungsfaktor",entries:[{key:"power_factor_L1",label:"Phase L1"},{key:"power_factor_L2",label:"Phase L2"},{key:"power_factor_L3",label:"Phase L3"}]},{id:"import",title:"Import",entries:[{key:"imported"}]},{id:"export",title:"Export",entries:[{key:"exported"}]},{id:"frequency",title:"Frequenz",entries:[{key:"frequency"}]},{id:"serial_number",title:"Seriennummer",entries:[{key:"serial_number"}]}],q={name:"DeviceGenericModbusCounter",components:{ModbusRegisterFields:y},mixins:[k],data(){return{registerSections:C}},methods:{handleRegisterModelUpdate(n,{field:e,value:u}){this.updateConfiguration(u,`configuration.${n}.${e}`)}}},x={class:"device-generic-modbus-counter"},S={key:0};function M(n,e,u,R,_,c){const b=i("openwb-base-heading"),g=i("openwb-base-number-input"),L=i("modbus-register-fields");return o(),r("div",x,[a(b,null,{default:v(()=>[...e[1]||(e[1]=[w(" Einstellungen für Universell Modbus Zähler ",-1)])]),_:1}),a(g,{title:"Modbus ID",required:"","model-value":n.component.configuration.modbus_id,min:0,max:255,"onUpdate:modelValue":e[0]||(e[0]=s=>n.updateConfiguration(s,"configuration.modbus_id"))},null,8,["model-value"]),(o(!0),r(l,null,p(_.registerSections,s=>(o(),r("div",{key:s.id},[d("h4",null,m(s.title),1),(o(!0),r(l,null,p(s.entries,t=>(o(),r(l,{key:t.key},[e[2]||(e[2]=d("hr",{class:"modbus-divider"},null,-1)),d("div",null,[t.label?(o(),r("h5",S,m(t.label),1)):P("",!0),a(L,{"model-value":n.component.configuration[t.key],"address-required":!!t.addressRequired,"onUpdate:modelValue":f=>c.handleRegisterModelUpdate(t.key,f)},null,8,["model-value","address-required","onUpdate:modelValue"])])],64))),128))]))),128))])}const G=h(q,[["render",M],["__scopeId","data-v-79585e27"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/modbus/counter.vue"]]);export{G as default}; diff --git a/web/settings/assets/counter-CZBG0Hhq.js b/web/settings/assets/counter-B6SxRJ-V.js similarity index 87% rename from web/settings/assets/counter-CZBG0Hhq.js rename to web/settings/assets/counter-B6SxRJ-V.js index 278dcabb3a..b499f6c44e 100644 --- a/web/settings/assets/counter-CZBG0Hhq.js +++ b/web/settings/assets/counter-B6SxRJ-V.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as a,m as n,l as m,f as u,q as t,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceDeyeCounter",mixins:[p]},_={class:"device-deye-counter"};function f(o,e,b,v,g,C){const i=n("openwb-base-heading"),r=n("openwb-base-number-input");return m(),u("div",_,[t(i,null,{default:d(()=>[...e[1]||(e[1]=[l(" Einstellungen für Deye Zähler ",-1)])]),_:1}),t(r,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.modbus_id"))},null,8,["model-value"])])}const q=a(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/deye/deye/counter.vue"]]);export{q as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as a,m as n,l as m,f as u,q as t,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceDeyeCounter",mixins:[p]},_={class:"device-deye-counter"};function f(o,e,b,v,g,C){const i=n("openwb-base-heading"),r=n("openwb-base-number-input");return m(),u("div",_,[t(i,null,{default:d(()=>[...e[1]||(e[1]=[l(" Einstellungen für Deye Zähler ",-1)])]),_:1}),t(r,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.modbus_id"))},null,8,["model-value"])])}const q=a(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/deye/deye/counter.vue"]]);export{q as default}; diff --git a/web/settings/assets/counter-CSCRL4Aa.js b/web/settings/assets/counter-B96Rg5H0.js similarity index 87% rename from web/settings/assets/counter-CSCRL4Aa.js rename to web/settings/assets/counter-B96Rg5H0.js index 70d9cd8d36..3aad7f3e33 100644 --- a/web/settings/assets/counter-CSCRL4Aa.js +++ b/web/settings/assets/counter-B96Rg5H0.js @@ -1 +1 @@ -import{C as s}from"./HardwareInstallation-Ln-RWgHD.js";import{S as i}from"./SystemVersion-eCZ4XHiC.js";import{_ as a,m as l,l as p,f as m,q as u,u as d,y as o,B as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const f={name:"DeviceSolarLogCounter",mixins:[s,i]},c={class:"device-solar_log-counter"},g=["href"];function _(t,e,b,h,v,k){const n=l("openwb-base-alert");return p(),m("div",c,[u(n,{subtype:"info"},{default:d(()=>[e[0]||(e[0]=o("span",{class:"text-danger"},[r(" Solar-Log Zähler geben keine Ströme aus, sodass nur ein Lastmanagement anhand der Gesamtleistung, aber nicht phasenbasiert möglich ist."),o("br")],-1)),e[1]||(e[1]=r(" Solar-Log Zähler sind Hausverbrauchs-Zähler. Um die Werte am EVU-Punkt zu ermitteln, muss ein virtueller Zähler konfiguriert werden. Eine Beispiel-Konfiguration mit Solar-Log Zähler findest Du im ",-1)),o("a",{href:`https://wiki.openwb.de/doku.php?id=openwb:vc:${t.systemVersion}:software:einstell-konfig:konfiguration:hausverbrauch`,target:"_blank",rel:"noopener noreferrer"}," Wiki für Hausverbrauchs-Zähler ",8,g),e[2]||(e[2]=r(". ",-1))]),_:1})])}const E=a(f,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solar_log/solar_log/counter.vue"]]);export{E as default}; +import{C as s}from"./HardwareInstallation-M-k9qNJb.js";import{S as i}from"./SystemVersion-eCZ4XHiC.js";import{_ as a,m as l,l as p,f as m,q as u,u as d,y as o,B as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const f={name:"DeviceSolarLogCounter",mixins:[s,i]},c={class:"device-solar_log-counter"},g=["href"];function _(t,e,b,h,v,k){const n=l("openwb-base-alert");return p(),m("div",c,[u(n,{subtype:"info"},{default:d(()=>[e[0]||(e[0]=o("span",{class:"text-danger"},[r(" Solar-Log Zähler geben keine Ströme aus, sodass nur ein Lastmanagement anhand der Gesamtleistung, aber nicht phasenbasiert möglich ist."),o("br")],-1)),e[1]||(e[1]=r(" Solar-Log Zähler sind Hausverbrauchs-Zähler. Um die Werte am EVU-Punkt zu ermitteln, muss ein virtueller Zähler konfiguriert werden. Eine Beispiel-Konfiguration mit Solar-Log Zähler findest Du im ",-1)),o("a",{href:`https://wiki.openwb.de/doku.php?id=openwb:vc:${t.systemVersion}:software:einstell-konfig:konfiguration:hausverbrauch`,target:"_blank",rel:"noopener noreferrer"}," Wiki für Hausverbrauchs-Zähler ",8,g),e[2]||(e[2]=r(". ",-1))]),_:1})])}const E=a(f,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solar_log/solar_log/counter.vue"]]);export{E as default}; diff --git a/web/settings/assets/counter-DcjDrUJp.js b/web/settings/assets/counter-B9Zex_N-.js similarity index 84% rename from web/settings/assets/counter-DcjDrUJp.js rename to web/settings/assets/counter-B9Zex_N-.js index 5535fbac37..863501680e 100644 --- a/web/settings/assets/counter-DcjDrUJp.js +++ b/web/settings/assets/counter-B9Zex_N-.js @@ -1 +1 @@ -import{C as r}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as a,m as t,l,f as u,q as n,u as m,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceOpenwbEvukitCounter",mixins:[r]},v={class:"device-openwb-evukit-counter"};function _(o,e,f,b,w,x){const i=t("openwb-base-heading"),s=t("openwb-base-select-input");return l(),u("div",v,[n(i,null,{default:m(()=>[...e[1]||(e[1]=[c(" Einstellungen für openWB EVU-Kit Zähler ",-1)])]),_:1}),n(s,{title:"Zählermodell","not-selected":"Bitte auswählen",options:[{value:3,text:"B23"},{value:1,text:"Lovato"},{value:0,text:"MPM3PM"},{value:2,text:"SDM630/SDM72D-M"}],"model-value":o.component.configuration.version,required:"","onUpdate:modelValue":e[0]||(e[0]=p=>o.updateConfiguration(p,"configuration.version"))},null,8,["model-value"])])}const $=a(d,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/openwb/openwb_evu_kit/counter.vue"]]);export{$ as default}; +import{C as r}from"./HardwareInstallation-M-k9qNJb.js";import{_ as a,m as t,l,f as u,q as n,u as m,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceOpenwbEvukitCounter",mixins:[r]},v={class:"device-openwb-evukit-counter"};function _(o,e,f,b,w,x){const i=t("openwb-base-heading"),s=t("openwb-base-select-input");return l(),u("div",v,[n(i,null,{default:m(()=>[...e[1]||(e[1]=[c(" Einstellungen für openWB EVU-Kit Zähler ",-1)])]),_:1}),n(s,{title:"Zählermodell","not-selected":"Bitte auswählen",options:[{value:3,text:"B23"},{value:1,text:"Lovato"},{value:0,text:"MPM3PM"},{value:2,text:"SDM630/SDM72D-M"}],"model-value":o.component.configuration.version,required:"","onUpdate:modelValue":e[0]||(e[0]=p=>o.updateConfiguration(p,"configuration.version"))},null,8,["model-value"])])}const $=a(d,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/openwb/openwb_evu_kit/counter.vue"]]);export{$ as default}; diff --git a/web/settings/assets/counter-D7_VEfYR.js b/web/settings/assets/counter-BG4_SQ_c.js similarity index 85% rename from web/settings/assets/counter-D7_VEfYR.js rename to web/settings/assets/counter-BG4_SQ_c.js index 7ee8d20e9b..9bbc63ed77 100644 --- a/web/settings/assets/counter-D7_VEfYR.js +++ b/web/settings/assets/counter-BG4_SQ_c.js @@ -1 +1 @@ -import{C as o}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as n,m as i,l as s,f as a,q as r,u as p,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const m={name:"DeviceJanitzaBat",mixins:[o]},u={class:"device-janitza-counter"};function _(d,e,f,l,v,b){const t=i("openwb-base-alert");return s(),a("div",u,[r(t,{subtype:"info"},{default:p(()=>[...e[0]||(e[0]=[c(' ModbusTCP muss im Janitza auf Port 502 aktiv und die ID auf "1" eingestellt sein. ',-1)])]),_:1})])}const D=n(m,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/janitza/janitza/counter.vue"]]);export{D as default}; +import{C as o}from"./HardwareInstallation-M-k9qNJb.js";import{_ as n,m as i,l as s,f as a,q as r,u as p,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const m={name:"DeviceJanitzaBat",mixins:[o]},u={class:"device-janitza-counter"};function _(d,e,f,l,v,b){const t=i("openwb-base-alert");return s(),a("div",u,[r(t,{subtype:"info"},{default:p(()=>[...e[0]||(e[0]=[c(' ModbusTCP muss im Janitza auf Port 502 aktiv und die ID auf "1" eingestellt sein. ',-1)])]),_:1})])}const D=n(m,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/janitza/janitza/counter.vue"]]);export{D as default}; diff --git a/web/settings/assets/counter-BJsQi-Il.js b/web/settings/assets/counter-BQpBN1KZ.js similarity index 84% rename from web/settings/assets/counter-BJsQi-Il.js rename to web/settings/assets/counter-BQpBN1KZ.js index 7b0fbbbe55..56d2894f59 100644 --- a/web/settings/assets/counter-BJsQi-Il.js +++ b/web/settings/assets/counter-BQpBN1KZ.js @@ -1 +1 @@ -import{C as s}from"./HardwareInstallation-Ln-RWgHD.js";import{S as n}from"./SystemVersion-eCZ4XHiC.js";import{_ as i,m as a,l as p,f as c,q as m,u as l,B as o,y as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceKostalPlenticoreCounter",mixins:[s,n]},f={class:"device-kostal-plenticore-counter"},_=["href"];function b(t,e,h,k,v,w){const r=a("openwb-base-alert");return p(),c("div",f,[m(r,{subtype:"info"},{default:l(()=>[e[0]||(e[0]=o(" Wenn der Zähler im Hausverbrauchs-Zweig installiert ist, muss die Hierarchie wie im ",-1)),u("a",{href:`https://wiki.openwb.de/doku.php?id=openwb:vc:${t.systemVersion}:software:einstell-konfig:konfiguration:hausverbrauch`,target:"_blank",rel:"noopener noreferrer"},"Wiki für Hausverbrauchs-Zähler",8,_),e[1]||(e[1]=o(" beschrieben, angeordnet werden. ",-1))]),_:1})])}const Z=i(d,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/kostal/kostal_plenticore/counter.vue"]]);export{Z as default}; +import{C as s}from"./HardwareInstallation-M-k9qNJb.js";import{S as n}from"./SystemVersion-eCZ4XHiC.js";import{_ as i,m as a,l as p,f as c,q as m,u as l,B as o,y as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceKostalPlenticoreCounter",mixins:[s,n]},f={class:"device-kostal-plenticore-counter"},_=["href"];function b(t,e,h,k,v,w){const r=a("openwb-base-alert");return p(),c("div",f,[m(r,{subtype:"info"},{default:l(()=>[e[0]||(e[0]=o(" Wenn der Zähler im Hausverbrauchs-Zweig installiert ist, muss die Hierarchie wie im ",-1)),u("a",{href:`https://wiki.openwb.de/doku.php?id=openwb:vc:${t.systemVersion}:software:einstell-konfig:konfiguration:hausverbrauch`,target:"_blank",rel:"noopener noreferrer"},"Wiki für Hausverbrauchs-Zähler",8,_),e[1]||(e[1]=o(" beschrieben, angeordnet werden. ",-1))]),_:1})])}const Z=i(d,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/kostal/kostal_plenticore/counter.vue"]]);export{Z as default}; diff --git a/web/settings/assets/counter-B1e8yvdL.js b/web/settings/assets/counter-BU9CsBUq.js similarity index 89% rename from web/settings/assets/counter-B1e8yvdL.js rename to web/settings/assets/counter-BU9CsBUq.js index d327a9216c..4e0e727c0d 100644 --- a/web/settings/assets/counter-B1e8yvdL.js +++ b/web/settings/assets/counter-BU9CsBUq.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as u,m as n,l as d,f as l,q as t,u as s,B as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceFoxEssH3SmartCounter",mixins:[p]},f={class:"device-foxess-h3.smart-counter"};function c(o,e,b,x,v,g){const r=n("openwb-base-heading"),a=n("openwb-base-number-input");return d(),l("div",f,[t(r,null,{default:s(()=>[...e[1]||(e[1]=[i(" Einstellungen für FoxEss H3 Smart Zähler ",-1)])]),_:1}),t(a,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=m=>o.updateConfiguration(m,"configuration.modbus_id"))},{help:s(()=>[...e[2]||(e[2]=[i(" Die Standard-Modbus-ID von FoxEss ist 247 ",-1)])]),_:1},8,["model-value"])])}const S=u(_,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fox_ess/fox_ess_h3_smart/counter.vue"]]);export{S as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as u,m as n,l as d,f as l,q as t,u as s,B as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceFoxEssH3SmartCounter",mixins:[p]},f={class:"device-foxess-h3.smart-counter"};function c(o,e,b,x,v,g){const r=n("openwb-base-heading"),a=n("openwb-base-number-input");return d(),l("div",f,[t(r,null,{default:s(()=>[...e[1]||(e[1]=[i(" Einstellungen für FoxEss H3 Smart Zähler ",-1)])]),_:1}),t(a,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=m=>o.updateConfiguration(m,"configuration.modbus_id"))},{help:s(()=>[...e[2]||(e[2]=[i(" Die Standard-Modbus-ID von FoxEss ist 247 ",-1)])]),_:1},8,["model-value"])])}const S=u(_,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fox_ess/fox_ess_h3_smart/counter.vue"]]);export{S as default}; diff --git a/web/settings/assets/counter-BNlBJ9zK.js b/web/settings/assets/counter-B_AdvZLu.js similarity index 87% rename from web/settings/assets/counter-BNlBJ9zK.js rename to web/settings/assets/counter-B_AdvZLu.js index 6955baa7de..0ad3046950 100644 --- a/web/settings/assets/counter-BNlBJ9zK.js +++ b/web/settings/assets/counter-B_AdvZLu.js @@ -1 +1 @@ -import{C as s}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as p,m as n,l as m,f as u,q as t,u as l,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceAvmCounter",mixins:[s]},_={class:"device-avm-counter"};function f(o,e,v,b,x,g){const i=n("openwb-base-heading"),r=n("openwb-base-text-input");return m(),u("div",_,[t(i,null,{default:l(()=>[...e[1]||(e[1]=[c(" Einstellungen für AVM Fritz!Box Zähler ",-1)])]),_:1}),t(r,{title:"Gerätename in der Fritz!Box",required:"","model-value":o.component.configuration.name,"onUpdate:modelValue":e[0]||(e[0]=a=>o.updateConfiguration(a,"configuration.name"))},null,8,["model-value"])])}const A=p(d,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/avm/avm/counter.vue"]]);export{A as default}; +import{C as s}from"./HardwareInstallation-M-k9qNJb.js";import{_ as p,m as n,l as m,f as u,q as t,u as l,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceAvmCounter",mixins:[s]},_={class:"device-avm-counter"};function f(o,e,v,b,x,g){const i=n("openwb-base-heading"),r=n("openwb-base-text-input");return m(),u("div",_,[t(i,null,{default:l(()=>[...e[1]||(e[1]=[c(" Einstellungen für AVM Fritz!Box Zähler ",-1)])]),_:1}),t(r,{title:"Gerätename in der Fritz!Box",required:"","model-value":o.component.configuration.name,"onUpdate:modelValue":e[0]||(e[0]=a=>o.updateConfiguration(a,"configuration.name"))},null,8,["model-value"])])}const A=p(d,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/avm/avm/counter.vue"]]);export{A as default}; diff --git a/web/settings/assets/counter-DXYr2-BR.js b/web/settings/assets/counter-BqJTf7FZ.js similarity index 86% rename from web/settings/assets/counter-DXYr2-BR.js rename to web/settings/assets/counter-BqJTf7FZ.js index 9625291d6a..8dfb52ac88 100644 --- a/web/settings/assets/counter-DXYr2-BR.js +++ b/web/settings/assets/counter-BqJTf7FZ.js @@ -1 +1 @@ -import{C as n}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as o,m as s,l as r,f as a,q as i,u as m,B as p}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceTeslaCounter",mixins:[n]},l={class:"device-tesla-counter"};function _(d,e,u,f,v,x){const t=s("openwb-base-alert");return r(),a("div",l,[i(t,{subtype:"info"},{default:m(()=>[...e[0]||(e[0]=[p(" Je nach Firmware-Version ist nur ein Lastmanagement anhand der Gesamtleistung möglich, da nicht alle Firmware-Versionen Phasenströme liefern. ",-1)])]),_:1})])}const F=o(c,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/tesla/tesla/counter.vue"]]);export{F as default}; +import{C as n}from"./HardwareInstallation-M-k9qNJb.js";import{_ as o,m as s,l as r,f as a,q as i,u as m,B as p}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceTeslaCounter",mixins:[n]},l={class:"device-tesla-counter"};function _(d,e,u,f,v,x){const t=s("openwb-base-alert");return r(),a("div",l,[i(t,{subtype:"info"},{default:m(()=>[...e[0]||(e[0]=[p(" Je nach Firmware-Version ist nur ein Lastmanagement anhand der Gesamtleistung möglich, da nicht alle Firmware-Versionen Phasenströme liefern. ",-1)])]),_:1})])}const F=o(c,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/tesla/tesla/counter.vue"]]);export{F as default}; diff --git a/web/settings/assets/counter-BW0CYAOL.js b/web/settings/assets/counter-C4W1OrRJ.js similarity index 87% rename from web/settings/assets/counter-BW0CYAOL.js rename to web/settings/assets/counter-C4W1OrRJ.js index bac78b6f54..09eea27489 100644 --- a/web/settings/assets/counter-BW0CYAOL.js +++ b/web/settings/assets/counter-C4W1OrRJ.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as a,m as n,l as m,f as u,q as t,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceNibeCounter",mixins:[p]},b={class:"device-nibe-counter"};function _(o,e,f,v,g,C){const i=n("openwb-base-heading"),r=n("openwb-base-number-input");return m(),u("div",b,[t(i,null,{default:d(()=>[...e[1]||(e[1]=[l(" Einstellungen für Nibe Zähler ",-1)])]),_:1}),t(r,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.modbus_id"))},null,8,["model-value"])])}const D=a(c,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/nibe/nibe/counter.vue"]]);export{D as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as a,m as n,l as m,f as u,q as t,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceNibeCounter",mixins:[p]},b={class:"device-nibe-counter"};function _(o,e,f,v,g,C){const i=n("openwb-base-heading"),r=n("openwb-base-number-input");return m(),u("div",b,[t(i,null,{default:d(()=>[...e[1]||(e[1]=[l(" Einstellungen für Nibe Zähler ",-1)])]),_:1}),t(r,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.modbus_id"))},null,8,["model-value"])])}const D=a(c,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/nibe/nibe/counter.vue"]]);export{D as default}; diff --git a/web/settings/assets/counter-Ligq6oN9.js b/web/settings/assets/counter-C4vWWou3.js similarity index 95% rename from web/settings/assets/counter-Ligq6oN9.js rename to web/settings/assets/counter-C4vWWou3.js index d58c0a7b27..68e09a443e 100644 --- a/web/settings/assets/counter-Ligq6oN9.js +++ b/web/settings/assets/counter-C4vWWou3.js @@ -1 +1 @@ -import{C as g}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as c,m as i,l as s,f,q as l,u as o,B as n,z as b,y as d,J as v,x as w}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const h={name:"DeviceFroniusCounter",mixins:[g],computed:{meterRealtimeUrl:{get(){return`http://${this.device.configuration.ip_address}/solar_api/v1/GetMeterRealtimeData.cgi?Scope=System`}}}},_={class:"device-fronius-counter"},k=["href"];function S(t,e,D,M,V,a){const u=i("openwb-base-heading"),m=i("openwb-base-select-input"),p=i("openwb-base-number-input");return s(),f("div",_,[l(u,null,{default:o(()=>[...e[2]||(e[2]=[n(" Einstellungen für Fronius Zähler ",-1)])]),_:1}),l(m,{title:"Kompatibilitätsmodus","not-selected":"Bitte auswählen",required:"",options:[{value:0,text:"Aus"},{value:1,text:"Variante 1"},{value:2,text:"Variante 2"},{value:3,text:"S0 (im Wechselrichter integriert)"}],"model-value":t.component.configuration.variant,"onUpdate:modelValue":e[0]||(e[0]=r=>t.updateConfiguration(r,"configuration.variant"))},{help:o(()=>[...e[3]||(e[3]=[n(' "S0" wählen, wenn kein eigenes SmartMeter vorhanden ist und stattdessen der im Wechselrichter integrierte S0-Zähler genutzt werden soll. Für ein separates SmartMeter gegebenenfalls auch für alte Modelle nach einem Softwareupdate "Variante 1" oder "2" erforderlich. Fronius hat derzeit keine konsistente Schnittstelle. Speziell beim Gen24 kann Variante 1 oder 2 erforderlich sein. Nach speichern sollten nach etwa 10-20 Sekunden Daten angezeigt werden. Ist dies nicht der Fall die andere Variante ausprobieren. ',-1)])]),_:1},8,["model-value"]),t.component.configuration.variant!==3?(s(),b(p,{key:0,title:"Meter ID",required:"",min:"0",max:"65535","model-value":t.component.configuration.meter_id,"onUpdate:modelValue":e[1]||(e[1]=r=>t.updateConfiguration(r,"configuration.meter_id"))},{help:o(()=>[e[4]||(e[4]=n(" Die Meter ID des SmartMeters. Diese ist normalerweise 1. Bei mehreren SmartMetern im System kann es notwendig sein, die Meter ID zu ändern. Zur Ermittlung kann der folgende Link verwendet werden. Die Meter ID kann den zurückgegebenen JSON Daten entnommen werden. ",-1)),d("a",{href:a.meterRealtimeUrl,target:"_blank",rel:"noopener noreferrer"},v(a.meterRealtimeUrl),9,k),e[5]||(e[5]=d("br",null,null,-1)),e[6]||(e[6]=n(' Im Abschnitt "Body" -> "Data" werden die installierten SmartMeter mit aktuellen Messwerten angezeigt. Die Meter ID ist die Zahl vor dem Doppelpunkt und den zugehörigen Messwerten. ',-1))]),_:1},8,["model-value"])):w("",!0)])}const R=c(h,[["render",S],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fronius/fronius_http_api/counter.vue"]]);export{R as default}; +import{C as g}from"./HardwareInstallation-M-k9qNJb.js";import{_ as c,m as i,l as s,f,q as l,u as o,B as n,z as b,y as d,J as v,x as w}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const h={name:"DeviceFroniusCounter",mixins:[g],computed:{meterRealtimeUrl:{get(){return`http://${this.device.configuration.ip_address}/solar_api/v1/GetMeterRealtimeData.cgi?Scope=System`}}}},_={class:"device-fronius-counter"},k=["href"];function S(t,e,D,M,V,a){const u=i("openwb-base-heading"),m=i("openwb-base-select-input"),p=i("openwb-base-number-input");return s(),f("div",_,[l(u,null,{default:o(()=>[...e[2]||(e[2]=[n(" Einstellungen für Fronius Zähler ",-1)])]),_:1}),l(m,{title:"Kompatibilitätsmodus","not-selected":"Bitte auswählen",required:"",options:[{value:0,text:"Aus"},{value:1,text:"Variante 1"},{value:2,text:"Variante 2"},{value:3,text:"S0 (im Wechselrichter integriert)"}],"model-value":t.component.configuration.variant,"onUpdate:modelValue":e[0]||(e[0]=r=>t.updateConfiguration(r,"configuration.variant"))},{help:o(()=>[...e[3]||(e[3]=[n(' "S0" wählen, wenn kein eigenes SmartMeter vorhanden ist und stattdessen der im Wechselrichter integrierte S0-Zähler genutzt werden soll. Für ein separates SmartMeter gegebenenfalls auch für alte Modelle nach einem Softwareupdate "Variante 1" oder "2" erforderlich. Fronius hat derzeit keine konsistente Schnittstelle. Speziell beim Gen24 kann Variante 1 oder 2 erforderlich sein. Nach speichern sollten nach etwa 10-20 Sekunden Daten angezeigt werden. Ist dies nicht der Fall die andere Variante ausprobieren. ',-1)])]),_:1},8,["model-value"]),t.component.configuration.variant!==3?(s(),b(p,{key:0,title:"Meter ID",required:"",min:"0",max:"65535","model-value":t.component.configuration.meter_id,"onUpdate:modelValue":e[1]||(e[1]=r=>t.updateConfiguration(r,"configuration.meter_id"))},{help:o(()=>[e[4]||(e[4]=n(" Die Meter ID des SmartMeters. Diese ist normalerweise 1. Bei mehreren SmartMetern im System kann es notwendig sein, die Meter ID zu ändern. Zur Ermittlung kann der folgende Link verwendet werden. Die Meter ID kann den zurückgegebenen JSON Daten entnommen werden. ",-1)),d("a",{href:a.meterRealtimeUrl,target:"_blank",rel:"noopener noreferrer"},v(a.meterRealtimeUrl),9,k),e[5]||(e[5]=d("br",null,null,-1)),e[6]||(e[6]=n(' Im Abschnitt "Body" -> "Data" werden die installierten SmartMeter mit aktuellen Messwerten angezeigt. Die Meter ID ist die Zahl vor dem Doppelpunkt und den zugehörigen Messwerten. ',-1))]),_:1},8,["model-value"])):w("",!0)])}const R=c(h,[["render",S],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fronius/fronius_http_api/counter.vue"]]);export{R as default}; diff --git a/web/settings/assets/counter-DUeWFs_r.js b/web/settings/assets/counter-C9FMcHBY.js similarity index 87% rename from web/settings/assets/counter-DUeWFs_r.js rename to web/settings/assets/counter-C9FMcHBY.js index 8a546437cd..adde6779a6 100644 --- a/web/settings/assets/counter-DUeWFs_r.js +++ b/web/settings/assets/counter-C9FMcHBY.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as a,m as n,l as m,f as u,q as t,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceOrnoCounter",mixins:[p]},_={class:"device-orno-counter"};function f(e,o,b,v,g,C){const r=n("openwb-base-heading"),i=n("openwb-base-number-input");return m(),u("div",_,[t(r,null,{default:d(()=>[...o[1]||(o[1]=[l(" Einstellungen für Orno WE-514 Zähler ",-1)])]),_:1}),t(i,{title:"Modbus ID",required:"","model-value":e.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":o[0]||(o[0]=s=>e.updateConfiguration(s,"configuration.modbus_id"))},null,8,["model-value"])])}const D=a(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/orno/orno/counter.vue"]]);export{D as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as a,m as n,l as m,f as u,q as t,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceOrnoCounter",mixins:[p]},_={class:"device-orno-counter"};function f(e,o,b,v,g,C){const r=n("openwb-base-heading"),i=n("openwb-base-number-input");return m(),u("div",_,[t(r,null,{default:d(()=>[...o[1]||(o[1]=[l(" Einstellungen für Orno WE-514 Zähler ",-1)])]),_:1}),t(i,{title:"Modbus ID",required:"","model-value":e.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":o[0]||(o[0]=s=>e.updateConfiguration(s,"configuration.modbus_id"))},null,8,["model-value"])])}const D=a(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/orno/orno/counter.vue"]]);export{D as default}; diff --git a/web/settings/assets/counter-BNOp0ehB.js b/web/settings/assets/counter-CFIj1r_a.js similarity index 87% rename from web/settings/assets/counter-BNOp0ehB.js rename to web/settings/assets/counter-CFIj1r_a.js index ad85bbe404..46a599f0bd 100644 --- a/web/settings/assets/counter-BNOp0ehB.js +++ b/web/settings/assets/counter-CFIj1r_a.js @@ -1 +1 @@ -import{C as m}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as d,m as r,l as p,f,q as n,u as s,B as a}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const g={name:"DeviceSolaredgeCounter",mixins:[m]},b={class:"device-solaredge-counter"};function c(o,e,_,v,w,C){const l=r("openwb-base-heading"),u=r("openwb-base-alert"),i=r("openwb-base-number-input");return p(),f("div",b,[n(l,null,{default:s(()=>[...e[2]||(e[2]=[a(" Einstellungen für SolarEdge Zähler ",-1)])]),_:1}),n(u,{subtype:"info"},{default:s(()=>[...e[3]||(e[3]=[a(" Hierfür muss ein EVU-Zähler am SolarEdge Wechselrichter per Modbus angebunden sein. Der Zähler muss an erster Position im Wechselrichter konfiguriert sein. ",-1)])]),_:1}),n(i,{title:"SolarEdge-Geräte-ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=t=>o.updateConfiguration(t,"configuration.modbus_id"))},null,8,["model-value"]),n(i,{title:"SolarEdge-Meter-ID","model-value":o.component.configuration.meter_id,min:"1",max:"255",required:"","onUpdate:modelValue":e[1]||(e[1]=t=>o.updateConfiguration(t,"configuration.meter_id"))},null,8,["model-value"])])}const q=d(g,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solaredge/solaredge/counter.vue"]]);export{q as default}; +import{C as m}from"./HardwareInstallation-M-k9qNJb.js";import{_ as d,m as r,l as p,f,q as n,u as s,B as a}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const g={name:"DeviceSolaredgeCounter",mixins:[m]},b={class:"device-solaredge-counter"};function c(o,e,_,v,w,C){const l=r("openwb-base-heading"),u=r("openwb-base-alert"),i=r("openwb-base-number-input");return p(),f("div",b,[n(l,null,{default:s(()=>[...e[2]||(e[2]=[a(" Einstellungen für SolarEdge Zähler ",-1)])]),_:1}),n(u,{subtype:"info"},{default:s(()=>[...e[3]||(e[3]=[a(" Hierfür muss ein EVU-Zähler am SolarEdge Wechselrichter per Modbus angebunden sein. Der Zähler muss an erster Position im Wechselrichter konfiguriert sein. ",-1)])]),_:1}),n(i,{title:"SolarEdge-Geräte-ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=t=>o.updateConfiguration(t,"configuration.modbus_id"))},null,8,["model-value"]),n(i,{title:"SolarEdge-Meter-ID","model-value":o.component.configuration.meter_id,min:"1",max:"255",required:"","onUpdate:modelValue":e[1]||(e[1]=t=>o.updateConfiguration(t,"configuration.meter_id"))},null,8,["model-value"])])}const q=d(g,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solaredge/solaredge/counter.vue"]]);export{q as default}; diff --git a/web/settings/assets/counter-B1X1Lm0y.js b/web/settings/assets/counter-COe699Ga.js similarity index 88% rename from web/settings/assets/counter-B1X1Lm0y.js rename to web/settings/assets/counter-COe699Ga.js index 98a961756e..1b78d07b9e 100644 --- a/web/settings/assets/counter-B1X1Lm0y.js +++ b/web/settings/assets/counter-COe699Ga.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as u,m as n,l as a,f as m,q as t,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSunnyBoyCounter",mixins:[p]},_={class:"device-sunnyboy-counter"};function b(o,e,f,v,g,y){const i=n("openwb-base-heading"),s=n("openwb-base-number-input");return a(),m("div",_,[t(i,null,{default:d(()=>[...e[1]||(e[1]=[l(" Einstellungen für SMA Sunny Boy / Tripower Zähler ",-1)])]),_:1}),t(s,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=r=>o.updateConfiguration(r,"configuration.modbus_id"))},null,8,["model-value"])])}const k=u(c,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/sma/sma_sunny_boy/counter.vue"]]);export{k as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as u,m as n,l as a,f as m,q as t,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSunnyBoyCounter",mixins:[p]},_={class:"device-sunnyboy-counter"};function b(o,e,f,v,g,y){const i=n("openwb-base-heading"),s=n("openwb-base-number-input");return a(),m("div",_,[t(i,null,{default:d(()=>[...e[1]||(e[1]=[l(" Einstellungen für SMA Sunny Boy / Tripower Zähler ",-1)])]),_:1}),t(s,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=r=>o.updateConfiguration(r,"configuration.modbus_id"))},null,8,["model-value"])])}const k=u(c,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/sma/sma_sunny_boy/counter.vue"]]);export{k as default}; diff --git a/web/settings/assets/counter-BxgIp61P.js b/web/settings/assets/counter-CU0YgyqL.js similarity index 89% rename from web/settings/assets/counter-BxgIp61P.js rename to web/settings/assets/counter-CU0YgyqL.js index d10d921095..35cf373dd3 100644 --- a/web/settings/assets/counter-BxgIp61P.js +++ b/web/settings/assets/counter-CU0YgyqL.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as u,m as t,l,f as d,q as r,u as i,B as n,y as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceSmahmCounter",mixins:[p]},f={class:"device-smahm-counter"};function b(o,e,g,v,M,h){const s=t("openwb-base-heading"),a=t("openwb-base-number-input");return l(),d("div",f,[r(s,null,{default:i(()=>[...e[1]||(e[1]=[n(" Einstellungen für SMA-HM/EM Zähler ",-1)])]),_:1}),r(a,{title:"Seriennummer","model-value":o.component.configuration.serials,"onUpdate:modelValue":e[0]||(e[0]=m=>o.updateConfiguration(m,"configuration.serials"))},{help:i(()=>[...e[2]||(e[2]=[n(" Eine Seriennummer ist nur erforderlich, wenn mehrere SMA HomeManager in Betrieb sind.",-1),c("br",null,null,-1),n(" Funktioniert auch mit Energy Meter anstatt Home Manager. ",-1)])]),_:1},8,["model-value"])])}const H=u(_,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/sma/sma_shm/counter.vue"]]);export{H as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as u,m as t,l,f as d,q as r,u as i,B as n,y as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceSmahmCounter",mixins:[p]},f={class:"device-smahm-counter"};function b(o,e,g,v,M,h){const s=t("openwb-base-heading"),a=t("openwb-base-number-input");return l(),d("div",f,[r(s,null,{default:i(()=>[...e[1]||(e[1]=[n(" Einstellungen für SMA-HM/EM Zähler ",-1)])]),_:1}),r(a,{title:"Seriennummer","model-value":o.component.configuration.serials,"onUpdate:modelValue":e[0]||(e[0]=m=>o.updateConfiguration(m,"configuration.serials"))},{help:i(()=>[...e[2]||(e[2]=[n(" Eine Seriennummer ist nur erforderlich, wenn mehrere SMA HomeManager in Betrieb sind.",-1),c("br",null,null,-1),n(" Funktioniert auch mit Energy Meter anstatt Home Manager. ",-1)])]),_:1},8,["model-value"])])}const H=u(_,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/sma/sma_shm/counter.vue"]]);export{H as default}; diff --git a/web/settings/assets/counter-CqlF4eMW.js b/web/settings/assets/counter-CWXbWhAY.js similarity index 97% rename from web/settings/assets/counter-CqlF4eMW.js rename to web/settings/assets/counter-CWXbWhAY.js index 7af01ddbf8..3a5673b401 100644 --- a/web/settings/assets/counter-CqlF4eMW.js +++ b/web/settings/assets/counter-CWXbWhAY.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as s,m as r,l as f,f as m,q as t,u,B as a,y as g}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const b={name:"DeviceJsonCounter",mixins:[p]},v={class:"device-json-counter"};function w(o,e,q,j,C,P){const i=r("openwb-base-heading"),l=r("openwb-base-text-input"),d=r("openwb-base-alert");return f(),m("div",v,[t(i,null,{default:u(()=>[...e[16]||(e[16]=[a(" Einstellungen für JSON Zähler ",-1)])]),_:1}),t(l,{title:"Abfrage für Leistung",subtype:"text",required:"","model-value":o.component.configuration.jq_power,"onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.jq_power"))},{help:u(()=>[...e[17]||(e[17]=[a(' Zur Analyse der Werte aus dem json-Objekt wird jq benutzt. Ist die Json Antwort z.B. {"PowerInstalledPeak":4655, "PowerProduced":132, "PowerOut":897.08172362555717, "PowerSelfSupplied":234.9182763744428} So muss hier .PowerOut eingetragen werden. ',-1),g("br",null,null,-1),a(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Leistung in Watt darstellt. ",-1)])]),_:1},8,["model-value"]),t(l,{title:"Abfrage für Zählerstand Bezug",subtype:"text","model-value":o.component.configuration.jq_imported,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.jq_imported"))},{help:u(()=>[...e[18]||(e[18]=[a(" Wird dieses Feld leer gelassen, dann werden Zählerstände intern simuliert. ",-1)])]),_:1},8,["model-value"]),t(l,{title:"Abfrage für Zählerstand Einspeisung",subtype:"text","model-value":o.component.configuration.jq_exported,"onUpdate:modelValue":e[2]||(e[2]=n=>o.updateConfiguration(n,"configuration.jq_exported"))},{help:u(()=>[...e[19]||(e[19]=[a(" Wird dieses Feld leer gelassen, dann werden Zählerstände intern simuliert. ",-1)])]),_:1},8,["model-value"]),t(d,{subtype:"info"},{default:u(()=>[...e[20]||(e[20]=[a(" Werden sowohl Leistung als auch Strom auf den Einzelphasen leer gelassen, erfolgt das Lastmanagement am EVU-Punkt nur anhand der Gesamtleistung am EVU-Punkt. Wird der Zähler als Zwischenzähler verwendet, wird in diesem Fall kein Lastmanagement durchgeführt. ",-1)])]),_:1}),t(l,{title:"Abfrage für Leistung auf Phase 1",subtype:"text","model-value":o.component.configuration.jq_power_l1,"onUpdate:modelValue":e[3]||(e[3]=n=>o.updateConfiguration(n,"configuration.jq_power_l1"))},null,8,["model-value"]),t(l,{title:"Abfrage für Leistung auf Phase 2",subtype:"text","model-value":o.component.configuration.jq_power_l2,"onUpdate:modelValue":e[4]||(e[4]=n=>o.updateConfiguration(n,"configuration.jq_power_l2"))},null,8,["model-value"]),t(l,{title:"Abfrage für Leistung auf Phase 3",subtype:"text","model-value":o.component.configuration.jq_power_l3,"onUpdate:modelValue":e[5]||(e[5]=n=>o.updateConfiguration(n,"configuration.jq_power_l3"))},null,8,["model-value"]),t(l,{title:"Abfrage für Leistungsfaktor auf Phase 1",subtype:"text","model-value":o.component.configuration.jq_power_factor_l1,"onUpdate:modelValue":e[6]||(e[6]=n=>o.updateConfiguration(n,"configuration.jq_power_factor_l1"))},null,8,["model-value"]),t(l,{title:"Abfrage für Leistungsfaktor auf Phase 2",subtype:"text","model-value":o.component.configuration.jq_power_factor_l2,"onUpdate:modelValue":e[7]||(e[7]=n=>o.updateConfiguration(n,"configuration.jq_power_factor_l2"))},null,8,["model-value"]),t(l,{title:"Abfrage für Leistungsfaktor auf Phase 3",subtype:"text","model-value":o.component.configuration.jq_power_factor_l3,"onUpdate:modelValue":e[8]||(e[8]=n=>o.updateConfiguration(n,"configuration.jq_power_factor_l3"))},null,8,["model-value"]),t(l,{title:"Abfrage für Strom auf Phase 1",subtype:"text","model-value":o.component.configuration.jq_current_l1,"onUpdate:modelValue":e[9]||(e[9]=n=>o.updateConfiguration(n,"configuration.jq_current_l1"))},null,8,["model-value"]),t(l,{title:"Abfrage für Strom auf Phase 2",subtype:"text","model-value":o.component.configuration.jq_current_l2,"onUpdate:modelValue":e[10]||(e[10]=n=>o.updateConfiguration(n,"configuration.jq_current_l2"))},null,8,["model-value"]),t(l,{title:"Abfrage für Strom auf Phase 3",subtype:"text","model-value":o.component.configuration.jq_current_l3,"onUpdate:modelValue":e[11]||(e[11]=n=>o.updateConfiguration(n,"configuration.jq_current_l3"))},null,8,["model-value"]),t(l,{title:"Abfrage für Spannung auf Phase 1",subtype:"text","model-value":o.component.configuration.jq_voltage_l1,"onUpdate:modelValue":e[12]||(e[12]=n=>o.updateConfiguration(n,"configuration.jq_voltage_l1"))},null,8,["model-value"]),t(l,{title:"Abfrage für Spannung auf Phase 2",subtype:"text","model-value":o.component.configuration.jq_voltage_l2,"onUpdate:modelValue":e[13]||(e[13]=n=>o.updateConfiguration(n,"configuration.jq_voltage_l2"))},null,8,["model-value"]),t(l,{title:"Abfrage für Spannung auf Phase 3",subtype:"text","model-value":o.component.configuration.jq_voltage_l3,"onUpdate:modelValue":e[14]||(e[14]=n=>o.updateConfiguration(n,"configuration.jq_voltage_l3"))},null,8,["model-value"]),t(l,{title:"Abfrage für Frequenz",subtype:"text","model-value":o.component.configuration.jq_frequency,"onUpdate:modelValue":e[15]||(e[15]=n=>o.updateConfiguration(n,"configuration.jq_frequency"))},null,8,["model-value"])])}const z=s(b,[["render",w],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/json/counter.vue"]]);export{z as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as s,m as r,l as f,f as m,q as t,u,B as a,y as g}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const b={name:"DeviceJsonCounter",mixins:[p]},v={class:"device-json-counter"};function w(o,e,q,j,C,P){const i=r("openwb-base-heading"),l=r("openwb-base-text-input"),d=r("openwb-base-alert");return f(),m("div",v,[t(i,null,{default:u(()=>[...e[16]||(e[16]=[a(" Einstellungen für JSON Zähler ",-1)])]),_:1}),t(l,{title:"Abfrage für Leistung",subtype:"text",required:"","model-value":o.component.configuration.jq_power,"onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.jq_power"))},{help:u(()=>[...e[17]||(e[17]=[a(' Zur Analyse der Werte aus dem json-Objekt wird jq benutzt. Ist die Json Antwort z.B. {"PowerInstalledPeak":4655, "PowerProduced":132, "PowerOut":897.08172362555717, "PowerSelfSupplied":234.9182763744428} So muss hier .PowerOut eingetragen werden. ',-1),g("br",null,null,-1),a(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Leistung in Watt darstellt. ",-1)])]),_:1},8,["model-value"]),t(l,{title:"Abfrage für Zählerstand Bezug",subtype:"text","model-value":o.component.configuration.jq_imported,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.jq_imported"))},{help:u(()=>[...e[18]||(e[18]=[a(" Wird dieses Feld leer gelassen, dann werden Zählerstände intern simuliert. ",-1)])]),_:1},8,["model-value"]),t(l,{title:"Abfrage für Zählerstand Einspeisung",subtype:"text","model-value":o.component.configuration.jq_exported,"onUpdate:modelValue":e[2]||(e[2]=n=>o.updateConfiguration(n,"configuration.jq_exported"))},{help:u(()=>[...e[19]||(e[19]=[a(" Wird dieses Feld leer gelassen, dann werden Zählerstände intern simuliert. ",-1)])]),_:1},8,["model-value"]),t(d,{subtype:"info"},{default:u(()=>[...e[20]||(e[20]=[a(" Werden sowohl Leistung als auch Strom auf den Einzelphasen leer gelassen, erfolgt das Lastmanagement am EVU-Punkt nur anhand der Gesamtleistung am EVU-Punkt. Wird der Zähler als Zwischenzähler verwendet, wird in diesem Fall kein Lastmanagement durchgeführt. ",-1)])]),_:1}),t(l,{title:"Abfrage für Leistung auf Phase 1",subtype:"text","model-value":o.component.configuration.jq_power_l1,"onUpdate:modelValue":e[3]||(e[3]=n=>o.updateConfiguration(n,"configuration.jq_power_l1"))},null,8,["model-value"]),t(l,{title:"Abfrage für Leistung auf Phase 2",subtype:"text","model-value":o.component.configuration.jq_power_l2,"onUpdate:modelValue":e[4]||(e[4]=n=>o.updateConfiguration(n,"configuration.jq_power_l2"))},null,8,["model-value"]),t(l,{title:"Abfrage für Leistung auf Phase 3",subtype:"text","model-value":o.component.configuration.jq_power_l3,"onUpdate:modelValue":e[5]||(e[5]=n=>o.updateConfiguration(n,"configuration.jq_power_l3"))},null,8,["model-value"]),t(l,{title:"Abfrage für Leistungsfaktor auf Phase 1",subtype:"text","model-value":o.component.configuration.jq_power_factor_l1,"onUpdate:modelValue":e[6]||(e[6]=n=>o.updateConfiguration(n,"configuration.jq_power_factor_l1"))},null,8,["model-value"]),t(l,{title:"Abfrage für Leistungsfaktor auf Phase 2",subtype:"text","model-value":o.component.configuration.jq_power_factor_l2,"onUpdate:modelValue":e[7]||(e[7]=n=>o.updateConfiguration(n,"configuration.jq_power_factor_l2"))},null,8,["model-value"]),t(l,{title:"Abfrage für Leistungsfaktor auf Phase 3",subtype:"text","model-value":o.component.configuration.jq_power_factor_l3,"onUpdate:modelValue":e[8]||(e[8]=n=>o.updateConfiguration(n,"configuration.jq_power_factor_l3"))},null,8,["model-value"]),t(l,{title:"Abfrage für Strom auf Phase 1",subtype:"text","model-value":o.component.configuration.jq_current_l1,"onUpdate:modelValue":e[9]||(e[9]=n=>o.updateConfiguration(n,"configuration.jq_current_l1"))},null,8,["model-value"]),t(l,{title:"Abfrage für Strom auf Phase 2",subtype:"text","model-value":o.component.configuration.jq_current_l2,"onUpdate:modelValue":e[10]||(e[10]=n=>o.updateConfiguration(n,"configuration.jq_current_l2"))},null,8,["model-value"]),t(l,{title:"Abfrage für Strom auf Phase 3",subtype:"text","model-value":o.component.configuration.jq_current_l3,"onUpdate:modelValue":e[11]||(e[11]=n=>o.updateConfiguration(n,"configuration.jq_current_l3"))},null,8,["model-value"]),t(l,{title:"Abfrage für Spannung auf Phase 1",subtype:"text","model-value":o.component.configuration.jq_voltage_l1,"onUpdate:modelValue":e[12]||(e[12]=n=>o.updateConfiguration(n,"configuration.jq_voltage_l1"))},null,8,["model-value"]),t(l,{title:"Abfrage für Spannung auf Phase 2",subtype:"text","model-value":o.component.configuration.jq_voltage_l2,"onUpdate:modelValue":e[13]||(e[13]=n=>o.updateConfiguration(n,"configuration.jq_voltage_l2"))},null,8,["model-value"]),t(l,{title:"Abfrage für Spannung auf Phase 3",subtype:"text","model-value":o.component.configuration.jq_voltage_l3,"onUpdate:modelValue":e[14]||(e[14]=n=>o.updateConfiguration(n,"configuration.jq_voltage_l3"))},null,8,["model-value"]),t(l,{title:"Abfrage für Frequenz",subtype:"text","model-value":o.component.configuration.jq_frequency,"onUpdate:modelValue":e[15]||(e[15]=n=>o.updateConfiguration(n,"configuration.jq_frequency"))},null,8,["model-value"])])}const z=s(b,[["render",w],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/json/counter.vue"]]);export{z as default}; diff --git a/web/settings/assets/counter-DXPbMEv9.js b/web/settings/assets/counter-CccCcxLV.js similarity index 88% rename from web/settings/assets/counter-DXPbMEv9.js rename to web/settings/assets/counter-CccCcxLV.js index d9b8bf414b..b6a20d8b39 100644 --- a/web/settings/assets/counter-DXPbMEv9.js +++ b/web/settings/assets/counter-CccCcxLV.js @@ -1 +1 @@ -import{C as m}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as u,m as n,l as d,f as l,q as t,u as i,B as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const g={name:"DeviceSigenergyCounter",mixins:[m]},_={class:"device-sigenergy-counter"};function c(o,e,b,f,v,C){const s=n("openwb-base-heading"),p=n("openwb-base-number-input");return d(),l("div",_,[t(s,null,{default:i(()=>[...e[1]||(e[1]=[r(" Einstellungen für Sigenergy Zähler ",-1)])]),_:1}),t(p,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=a=>o.updateConfiguration(a,"configuration.modbus_id"))},{help:i(()=>[...e[2]||(e[2]=[r(" Die Standard-Modbus-ID von Sigenergy ist 247 ",-1)])]),_:1},8,["model-value"])])}const k=u(g,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/sigenergy/sigenergy/counter.vue"]]);export{k as default}; +import{C as m}from"./HardwareInstallation-M-k9qNJb.js";import{_ as u,m as n,l as d,f as l,q as t,u as i,B as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const g={name:"DeviceSigenergyCounter",mixins:[m]},_={class:"device-sigenergy-counter"};function c(o,e,b,f,v,C){const s=n("openwb-base-heading"),p=n("openwb-base-number-input");return d(),l("div",_,[t(s,null,{default:i(()=>[...e[1]||(e[1]=[r(" Einstellungen für Sigenergy Zähler ",-1)])]),_:1}),t(p,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=a=>o.updateConfiguration(a,"configuration.modbus_id"))},{help:i(()=>[...e[2]||(e[2]=[r(" Die Standard-Modbus-ID von Sigenergy ist 247 ",-1)])]),_:1},8,["model-value"])])}const k=u(g,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/sigenergy/sigenergy/counter.vue"]]);export{k as default}; diff --git a/web/settings/assets/counter-CRumFQ-3.js b/web/settings/assets/counter-CcoCYpiA.js similarity index 97% rename from web/settings/assets/counter-CRumFQ-3.js rename to web/settings/assets/counter-CcoCYpiA.js index 69261a32fe..18739fd21f 100644 --- a/web/settings/assets/counter-CRumFQ-3.js +++ b/web/settings/assets/counter-CcoCYpiA.js @@ -1 +1 @@ -import{C as d}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as a,m as u,l as g,f,q as l,u as i,B as t,y as e,J as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const b={name:"DeviceMqttCounter",mixins:[d]},B={class:"device-mqtt-counter"};function k(o,n,z,w,v,W){const m=u("openwb-base-heading"),p=u("openwb-base-alert"),r=u("openwb-base-copy-to-clipboard");return g(),f("div",B,[l(m,null,{default:i(()=>[...n[0]||(n[0]=[t(" Einstellungen für MQTT Zähler ",-1)])]),_:1}),l(p,{subtype:"warning"},{default:i(()=>[n[1]||(n[1]=t(" Ist die ",-1)),n[2]||(n[2]=e("strong",null,"Benutzerverwaltung",-1)),n[3]||(n[3]=t(" aktiviert, dann muss ein Benutzer mit Schreibrechten für die entsprechenden Topics angelegt werden, damit openWB die Daten akzeptiert. Hierfür werden automatisch die benötigten Berechtigungen in der Rolle ",-1)),e("strong",null,`"Daten: Zähler '`+s(o.component.name)+"' ("+s(o.component.id)+') MQTT-Input"',1),n[4]||(n[4]=t(" angelegt, die einem Benutzer zugewiesen werden kann. ",-1))]),_:1}),l(p,{subtype:"info"},{default:i(()=>[n[45]||(n[45]=t(" Die folgenden Topics sind für einen reibungslosen Betrieb unbedingt erforderlich: ",-1)),e("ul",null,[e("li",null,[l(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/counter/"+s(o.component.id)+"/get/power ",1)]),_:1}),n[5]||(n[5]=e("br",null,null,-1)),n[6]||(n[6]=t(" Bezugsleistung in Watt, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, positiv Bezug, negativ Einspeisung",-1)),n[7]||(n[7]=e("br",null,null,-1)),n[8]||(n[8]=t(" Beispiel: ",-1)),n[9]||(n[9]=e("span",{class:"text-info"},"-123.45",-1))])]),n[46]||(n[46]=t(" Falls keine Werte für die Zählerstände übermittelt werden, berechnet openWB die Zählerstände anhand der Leistung. ",-1)),e("ul",null,[e("li",null,[l(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/counter/"+s(o.component.id)+"/get/imported ",1)]),_:1}),n[10]||(n[10]=e("br",null,null,-1)),n[11]||(n[11]=t(" Bezogene Energie in Wh, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, nur positiv",-1)),n[12]||(n[12]=e("br",null,null,-1)),n[13]||(n[13]=t(" Beispiel: ",-1)),n[14]||(n[14]=e("span",{class:"text-info"},"123.45",-1))]),e("li",null,[l(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/counter/"+s(o.component.id)+"/get/exported ",1)]),_:1}),n[15]||(n[15]=e("br",null,null,-1)),n[16]||(n[16]=t(" Eingespeiste Energie in Wh, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, nur positiv",-1)),n[17]||(n[17]=e("br",null,null,-1)),n[18]||(n[18]=t(" Beispiel: ",-1)),n[19]||(n[19]=e("span",{class:"text-info"},"123.45",-1))])]),n[47]||(n[47]=t(" Ströme je Phase sind für phasenbasiertes Lastmanagement unbedingt erforderlich, sonst erfolgt das Lastmanagement ausschließlich auf Basis der Gesamtleistung am EVU-Punkt: ",-1)),e("ul",null,[e("li",null,[l(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/counter/"+s(o.component.id)+"/get/currents ",1)]),_:1}),n[20]||(n[20]=e("br",null,null,-1)),n[21]||(n[21]=t(" Array mit den Strömen je Phase in Ampere, mit Nachkommastellen (Float), positiv Bezug, negativ Einspeisung",-1)),n[22]||(n[22]=e("br",null,null,-1)),n[23]||(n[23]=t(" Beispiel: ",-1)),n[24]||(n[24]=e("span",{class:"text-info"},"[1.2,2.3,-2.1]",-1))])]),n[48]||(n[48]=t(" Die Netzfrequenz, Spannungen, Leistungen und Leistungsfaktoren jeder Phase werden ausschließlich zu Anzeigezwecken verwendet: ",-1)),e("ul",null,[e("li",null,[l(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/counter/"+s(o.component.id)+"/get/frequency ",1)]),_:1}),n[25]||(n[25]=e("br",null,null,-1)),n[26]||(n[26]=t(" Netzfrequenz in Hz, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen",-1)),n[27]||(n[27]=e("br",null,null,-1)),n[28]||(n[28]=t(" Beispiel: ",-1)),n[29]||(n[29]=e("span",{class:"text-info"},"50.12",-1))]),e("li",null,[l(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/counter/"+s(o.component.id)+"/get/voltages ",1)]),_:1}),n[30]||(n[30]=e("br",null,null,-1)),n[31]||(n[31]=t(" Array mit den Spannungen je Phase in Volt, mit Nachkommastellen (Float)",-1)),n[32]||(n[32]=e("br",null,null,-1)),n[33]||(n[33]=t(" Beispiel: ",-1)),n[34]||(n[34]=e("span",{class:"text-info"},"[222.2,223.3,222.3]",-1))]),e("li",null,[l(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/counter/"+s(o.component.id)+"/get/powers ",1)]),_:1}),n[35]||(n[35]=e("br",null,null,-1)),n[36]||(n[36]=t(" Array mit den Leistungen je Phase in Watt, mit Nachkommastellen (Float)",-1)),n[37]||(n[37]=e("br",null,null,-1)),n[38]||(n[38]=t(" Beispiel: ",-1)),n[39]||(n[39]=e("span",{class:"text-info"},"[12.3,23.4,-12.3]",-1))]),e("li",null,[l(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/counter/"+s(o.component.id)+"/get/power_factors ",1)]),_:1}),n[40]||(n[40]=e("br",null,null,-1)),n[41]||(n[41]=t(" Array mit den Leistungsfaktoren je Phase, mit Nachkommastellen (Float), Wertebereich -1 bis 1",-1)),n[42]||(n[42]=e("br",null,null,-1)),n[43]||(n[43]=t(" Beispiel: ",-1)),n[44]||(n[44]=e("span",{class:"text-info"},"[0.95,0.96,-0.95]",-1))])])]),_:1})])}const Z=a(b,[["render",k],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/mqtt/counter.vue"]]);export{Z as default}; +import{C as d}from"./HardwareInstallation-M-k9qNJb.js";import{_ as a,m as u,l as g,f,q as l,u as i,B as t,y as e,J as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const b={name:"DeviceMqttCounter",mixins:[d]},B={class:"device-mqtt-counter"};function k(o,n,z,w,v,W){const m=u("openwb-base-heading"),p=u("openwb-base-alert"),r=u("openwb-base-copy-to-clipboard");return g(),f("div",B,[l(m,null,{default:i(()=>[...n[0]||(n[0]=[t(" Einstellungen für MQTT Zähler ",-1)])]),_:1}),l(p,{subtype:"warning"},{default:i(()=>[n[1]||(n[1]=t(" Ist die ",-1)),n[2]||(n[2]=e("strong",null,"Benutzerverwaltung",-1)),n[3]||(n[3]=t(" aktiviert, dann muss ein Benutzer mit Schreibrechten für die entsprechenden Topics angelegt werden, damit openWB die Daten akzeptiert. Hierfür werden automatisch die benötigten Berechtigungen in der Rolle ",-1)),e("strong",null,`"Daten: Zähler '`+s(o.component.name)+"' ("+s(o.component.id)+') MQTT-Input"',1),n[4]||(n[4]=t(" angelegt, die einem Benutzer zugewiesen werden kann. ",-1))]),_:1}),l(p,{subtype:"info"},{default:i(()=>[n[45]||(n[45]=t(" Die folgenden Topics sind für einen reibungslosen Betrieb unbedingt erforderlich: ",-1)),e("ul",null,[e("li",null,[l(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/counter/"+s(o.component.id)+"/get/power ",1)]),_:1}),n[5]||(n[5]=e("br",null,null,-1)),n[6]||(n[6]=t(" Bezugsleistung in Watt, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, positiv Bezug, negativ Einspeisung",-1)),n[7]||(n[7]=e("br",null,null,-1)),n[8]||(n[8]=t(" Beispiel: ",-1)),n[9]||(n[9]=e("span",{class:"text-info"},"-123.45",-1))])]),n[46]||(n[46]=t(" Falls keine Werte für die Zählerstände übermittelt werden, berechnet openWB die Zählerstände anhand der Leistung. ",-1)),e("ul",null,[e("li",null,[l(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/counter/"+s(o.component.id)+"/get/imported ",1)]),_:1}),n[10]||(n[10]=e("br",null,null,-1)),n[11]||(n[11]=t(" Bezogene Energie in Wh, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, nur positiv",-1)),n[12]||(n[12]=e("br",null,null,-1)),n[13]||(n[13]=t(" Beispiel: ",-1)),n[14]||(n[14]=e("span",{class:"text-info"},"123.45",-1))]),e("li",null,[l(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/counter/"+s(o.component.id)+"/get/exported ",1)]),_:1}),n[15]||(n[15]=e("br",null,null,-1)),n[16]||(n[16]=t(" Eingespeiste Energie in Wh, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, nur positiv",-1)),n[17]||(n[17]=e("br",null,null,-1)),n[18]||(n[18]=t(" Beispiel: ",-1)),n[19]||(n[19]=e("span",{class:"text-info"},"123.45",-1))])]),n[47]||(n[47]=t(" Ströme je Phase sind für phasenbasiertes Lastmanagement unbedingt erforderlich, sonst erfolgt das Lastmanagement ausschließlich auf Basis der Gesamtleistung am EVU-Punkt: ",-1)),e("ul",null,[e("li",null,[l(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/counter/"+s(o.component.id)+"/get/currents ",1)]),_:1}),n[20]||(n[20]=e("br",null,null,-1)),n[21]||(n[21]=t(" Array mit den Strömen je Phase in Ampere, mit Nachkommastellen (Float), positiv Bezug, negativ Einspeisung",-1)),n[22]||(n[22]=e("br",null,null,-1)),n[23]||(n[23]=t(" Beispiel: ",-1)),n[24]||(n[24]=e("span",{class:"text-info"},"[1.2,2.3,-2.1]",-1))])]),n[48]||(n[48]=t(" Die Netzfrequenz, Spannungen, Leistungen und Leistungsfaktoren jeder Phase werden ausschließlich zu Anzeigezwecken verwendet: ",-1)),e("ul",null,[e("li",null,[l(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/counter/"+s(o.component.id)+"/get/frequency ",1)]),_:1}),n[25]||(n[25]=e("br",null,null,-1)),n[26]||(n[26]=t(" Netzfrequenz in Hz, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen",-1)),n[27]||(n[27]=e("br",null,null,-1)),n[28]||(n[28]=t(" Beispiel: ",-1)),n[29]||(n[29]=e("span",{class:"text-info"},"50.12",-1))]),e("li",null,[l(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/counter/"+s(o.component.id)+"/get/voltages ",1)]),_:1}),n[30]||(n[30]=e("br",null,null,-1)),n[31]||(n[31]=t(" Array mit den Spannungen je Phase in Volt, mit Nachkommastellen (Float)",-1)),n[32]||(n[32]=e("br",null,null,-1)),n[33]||(n[33]=t(" Beispiel: ",-1)),n[34]||(n[34]=e("span",{class:"text-info"},"[222.2,223.3,222.3]",-1))]),e("li",null,[l(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/counter/"+s(o.component.id)+"/get/powers ",1)]),_:1}),n[35]||(n[35]=e("br",null,null,-1)),n[36]||(n[36]=t(" Array mit den Leistungen je Phase in Watt, mit Nachkommastellen (Float)",-1)),n[37]||(n[37]=e("br",null,null,-1)),n[38]||(n[38]=t(" Beispiel: ",-1)),n[39]||(n[39]=e("span",{class:"text-info"},"[12.3,23.4,-12.3]",-1))]),e("li",null,[l(r,{class:"text-info",tooltip:"Topic kopieren"},{default:i(()=>[t(" openWB/set/mqtt/counter/"+s(o.component.id)+"/get/power_factors ",1)]),_:1}),n[40]||(n[40]=e("br",null,null,-1)),n[41]||(n[41]=t(" Array mit den Leistungsfaktoren je Phase, mit Nachkommastellen (Float), Wertebereich -1 bis 1",-1)),n[42]||(n[42]=e("br",null,null,-1)),n[43]||(n[43]=t(" Beispiel: ",-1)),n[44]||(n[44]=e("span",{class:"text-info"},"[0.95,0.96,-0.95]",-1))])])]),_:1})])}const Z=a(b,[["render",k],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/mqtt/counter.vue"]]);export{Z as default}; diff --git a/web/settings/assets/counter-XQ79_Md3.js b/web/settings/assets/counter-Cg2jitX2.js similarity index 88% rename from web/settings/assets/counter-XQ79_Md3.js rename to web/settings/assets/counter-Cg2jitX2.js index a6631b86f2..6005d3e692 100644 --- a/web/settings/assets/counter-XQ79_Md3.js +++ b/web/settings/assets/counter-Cg2jitX2.js @@ -1 +1 @@ -import{C as a}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as u,m as n,l as d,f as c,q as t,u as i,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const l={name:"DeviceMTecCounter",mixins:[a]},_={class:"device-mtec-counter"};function b(o,e,f,v,g,C){const r=n("openwb-base-heading"),m=n("openwb-base-number-input");return d(),c("div",_,[t(r,null,{default:i(()=>[...e[1]||(e[1]=[s(" Einstellungen für M-Tec Zähler ",-1)])]),_:1}),t(m,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=p=>o.updateConfiguration(p,"configuration.modbus_id"))},{help:i(()=>[...e[2]||(e[2]=[s(" Die Standard-Modbus-ID von M-Tec ist 247 ",-1)])]),_:1},8,["model-value"])])}const q=u(l,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/mtec/mtec/counter.vue"]]);export{q as default}; +import{C as a}from"./HardwareInstallation-M-k9qNJb.js";import{_ as u,m as n,l as d,f as c,q as t,u as i,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const l={name:"DeviceMTecCounter",mixins:[a]},_={class:"device-mtec-counter"};function b(o,e,f,v,g,C){const r=n("openwb-base-heading"),m=n("openwb-base-number-input");return d(),c("div",_,[t(r,null,{default:i(()=>[...e[1]||(e[1]=[s(" Einstellungen für M-Tec Zähler ",-1)])]),_:1}),t(m,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=p=>o.updateConfiguration(p,"configuration.modbus_id"))},{help:i(()=>[...e[2]||(e[2]=[s(" Die Standard-Modbus-ID von M-Tec ist 247 ",-1)])]),_:1},8,["model-value"])])}const q=u(l,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/mtec/mtec/counter.vue"]]);export{q as default}; diff --git a/web/settings/assets/counter-DsYC7F_g.js b/web/settings/assets/counter-CmhagnH8.js similarity index 92% rename from web/settings/assets/counter-DsYC7F_g.js rename to web/settings/assets/counter-CmhagnH8.js index dce2aa91f1..2d3c961ba3 100644 --- a/web/settings/assets/counter-DsYC7F_g.js +++ b/web/settings/assets/counter-CmhagnH8.js @@ -1 +1 @@ -import{C as s}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as d,m as r,l as m,f as g,q as t,u as l,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const f={name:"DeviceVZLoggerCounter",mixins:[s]},_={class:"device-vzlogger-counter"};function c(n,e,b,v,w,Z){const a=r("openwb-base-heading"),p=r("openwb-base-alert"),i=r("openwb-base-number-input");return m(),g("div",_,[t(a,null,{default:l(()=>[...e[3]||(e[3]=[u(" Einstellungen für VZLogger Zähler ",-1)])]),_:1}),t(p,{subtype:"info"},{default:l(()=>[...e[4]||(e[4]=[u(' Bitte auf der Shell ausführen: "curl -s IPdesVZLogger:Port | jq .|cat -n" Zählen, in welcher Zeile der gesuchte Wert steht. Bei der ersten Zeile mit 1 anfangen zu zählen. ',-1)])]),_:1}),t(i,{title:"Zeile der Leistung",required:"",min:0,"model-value":n.component.configuration.line_power,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.line_power"))},null,8,["model-value"]),t(i,{title:"Zeile der Einspeisung",min:0,"model-value":n.component.configuration.line_exported,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.line_exported"))},null,8,["model-value"]),t(i,{title:"Zeile des Bezugs",min:0,"model-value":n.component.configuration.line_imported,"onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.line_imported"))},null,8,["model-value"])])}const E=d(f,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/vzlogger/vzlogger/counter.vue"]]);export{E as default}; +import{C as s}from"./HardwareInstallation-M-k9qNJb.js";import{_ as d,m as r,l as m,f as g,q as t,u as l,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const f={name:"DeviceVZLoggerCounter",mixins:[s]},_={class:"device-vzlogger-counter"};function c(n,e,b,v,w,Z){const a=r("openwb-base-heading"),p=r("openwb-base-alert"),i=r("openwb-base-number-input");return m(),g("div",_,[t(a,null,{default:l(()=>[...e[3]||(e[3]=[u(" Einstellungen für VZLogger Zähler ",-1)])]),_:1}),t(p,{subtype:"info"},{default:l(()=>[...e[4]||(e[4]=[u(' Bitte auf der Shell ausführen: "curl -s IPdesVZLogger:Port | jq .|cat -n" Zählen, in welcher Zeile der gesuchte Wert steht. Bei der ersten Zeile mit 1 anfangen zu zählen. ',-1)])]),_:1}),t(i,{title:"Zeile der Leistung",required:"",min:0,"model-value":n.component.configuration.line_power,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.line_power"))},null,8,["model-value"]),t(i,{title:"Zeile der Einspeisung",min:0,"model-value":n.component.configuration.line_exported,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.line_exported"))},null,8,["model-value"]),t(i,{title:"Zeile des Bezugs",min:0,"model-value":n.component.configuration.line_imported,"onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.line_imported"))},null,8,["model-value"])])}const E=d(f,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/vzlogger/vzlogger/counter.vue"]]);export{E as default}; diff --git a/web/settings/assets/counter-D1L78n2b.js b/web/settings/assets/counter-CroYhFKQ.js similarity index 89% rename from web/settings/assets/counter-D1L78n2b.js rename to web/settings/assets/counter-CroYhFKQ.js index 97934d8abb..b833733320 100644 --- a/web/settings/assets/counter-D1L78n2b.js +++ b/web/settings/assets/counter-CroYhFKQ.js @@ -1 +1 @@ -import{C as m}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as u,m as n,l as d,f as l,q as t,u as i,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceKostalPikoCiCounter",mixins:[m]},c={class:"device-kostal-piko-ci-counter"};function b(e,o,f,k,v,C){const r=n("openwb-base-heading"),a=n("openwb-base-number-input");return d(),l("div",c,[t(r,null,{default:i(()=>[...o[1]||(o[1]=[s(" Einstellungen für Kostal Piko CI Zähler ",-1)])]),_:1}),t(a,{title:"Modbus ID",required:"","model-value":e.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":o[0]||(o[0]=p=>e.updateConfiguration(p,"configuration.modbus_id"))},{help:i(()=>[...o[2]||(o[2]=[s(" Die Standard-Modbus-ID von Kostal Piko CI ist 75 ",-1)])]),_:1},8,["model-value"])])}const P=u(_,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/kostal/kostal_piko_ci/counter.vue"]]);export{P as default}; +import{C as m}from"./HardwareInstallation-M-k9qNJb.js";import{_ as u,m as n,l as d,f as l,q as t,u as i,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceKostalPikoCiCounter",mixins:[m]},c={class:"device-kostal-piko-ci-counter"};function b(e,o,f,k,v,C){const r=n("openwb-base-heading"),a=n("openwb-base-number-input");return d(),l("div",c,[t(r,null,{default:i(()=>[...o[1]||(o[1]=[s(" Einstellungen für Kostal Piko CI Zähler ",-1)])]),_:1}),t(a,{title:"Modbus ID",required:"","model-value":e.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":o[0]||(o[0]=p=>e.updateConfiguration(p,"configuration.modbus_id"))},{help:i(()=>[...o[2]||(o[2]=[s(" Die Standard-Modbus-ID von Kostal Piko CI ist 75 ",-1)])]),_:1},8,["model-value"])])}const P=u(_,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/kostal/kostal_piko_ci/counter.vue"]]);export{P as default}; diff --git a/web/settings/assets/counter-BKLEOBVh.js b/web/settings/assets/counter-CyM-43Cx.js similarity index 84% rename from web/settings/assets/counter-BKLEOBVh.js rename to web/settings/assets/counter-CyM-43Cx.js index 5b961a3758..8f5de57870 100644 --- a/web/settings/assets/counter-BKLEOBVh.js +++ b/web/settings/assets/counter-CyM-43Cx.js @@ -1 +1 @@ -import{C as o}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as n,m as r,l as s,f as i,q as a,u as p,B as m}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceThermiaCounter",mixins:[o]},_={class:"device-thermia-counter"};function u(d,e,f,l,v,b){const t=r("openwb-base-alert");return s(),i("div",_,[a(t,{subtype:"info"},{default:p(()=>[...e[0]||(e[0]=[m(" ModbusTCP muss aktiviert sein. ",-1)])]),_:1})])}const M=n(c,[["render",u],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/thermia/thermia/counter.vue"]]);export{M as default}; +import{C as o}from"./HardwareInstallation-M-k9qNJb.js";import{_ as n,m as r,l as s,f as i,q as a,u as p,B as m}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceThermiaCounter",mixins:[o]},_={class:"device-thermia-counter"};function u(d,e,f,l,v,b){const t=r("openwb-base-alert");return s(),i("div",_,[a(t,{subtype:"info"},{default:p(()=>[...e[0]||(e[0]=[m(" ModbusTCP muss aktiviert sein. ",-1)])]),_:1})])}const M=n(c,[["render",u],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/thermia/thermia/counter.vue"]]);export{M as default}; diff --git a/web/settings/assets/counter-D6d42tEa.js b/web/settings/assets/counter-D73FSNaA.js similarity index 86% rename from web/settings/assets/counter-D6d42tEa.js rename to web/settings/assets/counter-D73FSNaA.js index 172fc12fa5..4f4c118749 100644 --- a/web/settings/assets/counter-D6d42tEa.js +++ b/web/settings/assets/counter-D73FSNaA.js @@ -1 +1 @@ -import{C as o}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as s,m as n,l as r,f as i,q as a,u as p,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const m={name:"DeviceKostalSemCounter",mixins:[o]},l={class:"device-kostal-sem-counter"};function d(_,e,u,f,b,h){const t=n("openwb-base-alert");return r(),i("div",l,[a(t,{subtype:"info"},{default:p(()=>[...e[0]||(e[0]=[c(" Diese Komponente ist nur richtig, wenn der Zähler NICHT direkt am Wechselrichter (Kostal Plenticore) angeschlossen ist und daher separat abgefragt werden muss. ",-1)])]),_:1})])}const N=s(m,[["render",d],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/kostal/kostal_sem/counter.vue"]]);export{N as default}; +import{C as o}from"./HardwareInstallation-M-k9qNJb.js";import{_ as s,m as n,l as r,f as i,q as a,u as p,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const m={name:"DeviceKostalSemCounter",mixins:[o]},l={class:"device-kostal-sem-counter"};function d(_,e,u,f,b,h){const t=n("openwb-base-alert");return r(),i("div",l,[a(t,{subtype:"info"},{default:p(()=>[...e[0]||(e[0]=[c(" Diese Komponente ist nur richtig, wenn der Zähler NICHT direkt am Wechselrichter (Kostal Plenticore) angeschlossen ist und daher separat abgefragt werden muss. ",-1)])]),_:1})])}const N=s(m,[["render",d],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/kostal/kostal_sem/counter.vue"]]);export{N as default}; diff --git a/web/settings/assets/counter-fZ9ta8Io.js b/web/settings/assets/counter-D8mhCeuj.js similarity index 90% rename from web/settings/assets/counter-fZ9ta8Io.js rename to web/settings/assets/counter-D8mhCeuj.js index e3e47eb5be..fd5b9d78b1 100644 --- a/web/settings/assets/counter-fZ9ta8Io.js +++ b/web/settings/assets/counter-D8mhCeuj.js @@ -1 +1 @@ -import{C as d}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as m,m as n,l as u,f as c,q as r,u as i,B as o,y as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const f={name:"DeviceDiscovergyCounter",mixins:[d]},g={class:"device-discovergy-counter"};function _(t,e,v,b,w,y){const s=n("openwb-base-heading"),a=n("openwb-base-text-input");return u(),c("div",g,[r(s,null,{default:i(()=>[...e[1]||(e[1]=[o(" Einstellungen für Discovergy Zähler ",-1)])]),_:1}),r(a,{title:"Meter-ID",required:"","model-value":t.component.configuration.meter_id,"onUpdate:modelValue":e[0]||(e[0]=p=>t.updateConfiguration(p,"configuration.meter_id"))},{help:i(()=>[...e[2]||(e[2]=[o(" Um die ID herauszufinden mit dem Browser die Adresse ",-1),l("a",{href:"https://api.discovergy.com/public/v1/meters",target:"_blank",rel:"noopener noreferrer"}," https://api.discovergy.com/public/v1/meters ",-1),o(" aufrufen und dort Benutzername und Passwort eingeben. Hier wird nun u.a. die ID des Zählers angezeigt. ",-1)])]),_:1},8,["model-value"])])}const I=m(f,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/discovergy/discovergy/counter.vue"]]);export{I as default}; +import{C as d}from"./HardwareInstallation-M-k9qNJb.js";import{_ as m,m as n,l as u,f as c,q as r,u as i,B as o,y as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const f={name:"DeviceDiscovergyCounter",mixins:[d]},g={class:"device-discovergy-counter"};function _(t,e,v,b,w,y){const s=n("openwb-base-heading"),a=n("openwb-base-text-input");return u(),c("div",g,[r(s,null,{default:i(()=>[...e[1]||(e[1]=[o(" Einstellungen für Discovergy Zähler ",-1)])]),_:1}),r(a,{title:"Meter-ID",required:"","model-value":t.component.configuration.meter_id,"onUpdate:modelValue":e[0]||(e[0]=p=>t.updateConfiguration(p,"configuration.meter_id"))},{help:i(()=>[...e[2]||(e[2]=[o(" Um die ID herauszufinden mit dem Browser die Adresse ",-1),l("a",{href:"https://api.discovergy.com/public/v1/meters",target:"_blank",rel:"noopener noreferrer"}," https://api.discovergy.com/public/v1/meters ",-1),o(" aufrufen und dort Benutzername und Passwort eingeben. Hier wird nun u.a. die ID des Zählers angezeigt. ",-1)])]),_:1},8,["model-value"])])}const I=m(f,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/discovergy/discovergy/counter.vue"]]);export{I as default}; diff --git a/web/settings/assets/counter-DaLkrygO.js b/web/settings/assets/counter-DCfAmTRv.js similarity index 92% rename from web/settings/assets/counter-DaLkrygO.js rename to web/settings/assets/counter-DCfAmTRv.js index 8fa8dc28de..b9dc21ec1f 100644 --- a/web/settings/assets/counter-DaLkrygO.js +++ b/web/settings/assets/counter-DCfAmTRv.js @@ -1 +1 @@ -import{C as u}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as l,m as t,l as m,f as c,q as r,u as i,B as n,y as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const f={name:"DevicePowerfoxCounter",mixins:[u]},b={class:"device-powerfox-counter"};function g(o,e,w,_,x,h){const a=t("openwb-base-heading"),p=t("openwb-base-text-input");return m(),c("div",b,[r(a,null,{default:i(()=>[...e[1]||(e[1]=[n(" Einstellungen für Powerfox Zähler ",-1)])]),_:1}),r(p,{title:"ID",required:"","model-value":o.component.configuration.id,"onUpdate:modelValue":e[0]||(e[0]=d=>o.updateConfiguration(d,"configuration.id"))},{help:i(()=>[...e[2]||(e[2]=[n(" Um die ID herauszufinden mit dem Browser die Adresse ",-1),s("a",{href:"https://backend.powerfox.energy/api/2.0/my/all/devices",target:"_blank",rel:"noopener noreferrer"}," https://backend.powerfox.energy/api/2.0/my/all/devices ",-1),n(" aufrufen und dort Benutzername und Passwort eingeben. Die DeviceID ist exakt so einzutragen, wie in der Antwort des Servers. Das bedeutet insbesondere auch, die Groß-/Kleinschreibung ist zu beachten! In dem Feld ist nur die Zeichenfolge direkt hinter ",-1),s("span",{class:"font-weight-bold text-monospace",style:{display:"contents"}},' "DeviceID" ',-1),n(" ohne den Doppelpunkt und Anführungszeichen einzutragen. ",-1)])]),_:1},8,["model-value"])])}const $=l(f,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/powerfox/powerfox/counter.vue"]]);export{$ as default}; +import{C as u}from"./HardwareInstallation-M-k9qNJb.js";import{_ as l,m as t,l as m,f as c,q as r,u as i,B as n,y as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const f={name:"DevicePowerfoxCounter",mixins:[u]},b={class:"device-powerfox-counter"};function g(o,e,w,_,x,h){const a=t("openwb-base-heading"),p=t("openwb-base-text-input");return m(),c("div",b,[r(a,null,{default:i(()=>[...e[1]||(e[1]=[n(" Einstellungen für Powerfox Zähler ",-1)])]),_:1}),r(p,{title:"ID",required:"","model-value":o.component.configuration.id,"onUpdate:modelValue":e[0]||(e[0]=d=>o.updateConfiguration(d,"configuration.id"))},{help:i(()=>[...e[2]||(e[2]=[n(" Um die ID herauszufinden mit dem Browser die Adresse ",-1),s("a",{href:"https://backend.powerfox.energy/api/2.0/my/all/devices",target:"_blank",rel:"noopener noreferrer"}," https://backend.powerfox.energy/api/2.0/my/all/devices ",-1),n(" aufrufen und dort Benutzername und Passwort eingeben. Die DeviceID ist exakt so einzutragen, wie in der Antwort des Servers. Das bedeutet insbesondere auch, die Groß-/Kleinschreibung ist zu beachten! In dem Feld ist nur die Zeichenfolge direkt hinter ",-1),s("span",{class:"font-weight-bold text-monospace",style:{display:"contents"}},' "DeviceID" ',-1),n(" ohne den Doppelpunkt und Anführungszeichen einzutragen. ",-1)])]),_:1},8,["model-value"])])}const $=l(f,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/powerfox/powerfox/counter.vue"]]);export{$ as default}; diff --git a/web/settings/assets/counter-BMhK4CiH.js b/web/settings/assets/counter-DGtXWY_C.js similarity index 97% rename from web/settings/assets/counter-BMhK4CiH.js rename to web/settings/assets/counter-DGtXWY_C.js index 325878db4e..b6f7367771 100644 --- a/web/settings/assets/counter-BMhK4CiH.js +++ b/web/settings/assets/counter-DGtXWY_C.js @@ -1 +1 @@ -import{C as u}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as m,m as s,l as p,f as g,q as i,u as a,B as n,y as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const h={name:"DeviceHttpCounter",mixins:[u]},b={class:"device-http-counter"};function f(t,e,w,v,k,S){const d=s("openwb-base-heading"),o=s("openwb-base-text-input");return p(),g("div",b,[i(d,null,{default:a(()=>[...e[6]||(e[6]=[n(" Einstellungen für Http Zähler ",-1)])]),_:1}),i(o,{title:"Pfad für Leistung",subtype:"text",required:"",pattern:"^/[-a-zA-Z0-9@:%_\\+.~#?&/=]*","model-value":t.component.configuration.power_path,"onUpdate:modelValue":e[0]||(e[0]=r=>t.updateConfiguration(r,"configuration.power_path"))},{help:a(()=>[...e[7]||(e[7]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),l("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Leistung in Watt darstellt. ",-1)])]),_:1},8,["model-value"]),i(o,{title:"Pfad für Zählerstand Bezug",subtype:"text",pattern:"^(/[-a-zA-Z0-9@:%_\\+.~#?&/=]*)","model-value":t.component.configuration.imported_path,"onUpdate:modelValue":e[1]||(e[1]=r=>t.updateConfiguration(r,"configuration.imported_path"))},{help:a(()=>[...e[8]||(e[8]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),l("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche den aktuellen absoluten Zählerstand in Wh darstellt.",-1),l("br",null,null,-1),n(" Wird dieses Feld leer gelassen, wird der Zählerstand intern simuliert. ",-1)])]),_:1},8,["model-value"]),i(o,{title:"Pfad für Zählerstand Einspeisung",subtype:"text",pattern:"^(/[-a-zA-Z0-9@:%_\\+.~#?&/=]*)","model-value":t.component.configuration.exported_path,"onUpdate:modelValue":e[2]||(e[2]=r=>t.updateConfiguration(r,"configuration.exported_path"))},{help:a(()=>[...e[9]||(e[9]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),l("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche den aktuellen absoluten Zählerstand in Wh darstellt.",-1),l("br",null,null,-1),n(" Wird dieses Feld leer gelassen, wird der Zählerstand intern simuliert. ",-1)])]),_:1},8,["model-value"]),i(o,{title:"Pfad für Strom Phase 1",subtype:"text",pattern:"^(/[-a-zA-Z0-9@:%_\\+.~#?&/=]*)","model-value":t.component.configuration.current_l1_path,"onUpdate:modelValue":e[3]||(e[3]=r=>t.updateConfiguration(r,"configuration.current_l1_path"))},{help:a(()=>[...e[10]||(e[10]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),l("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Stromstärke der 1. Phase in Ampere darstellt.",-1),l("br",null,null,-1),n(" Wird dieses Feld leer gelassen, werden keine Phasenströme ermittelt und es kann kein Lastmanagement berechnet werden! ",-1)])]),_:1},8,["model-value"]),i(o,{title:"Pfad für Strom Phase 2",subtype:"text",pattern:"^(/[-a-zA-Z0-9@:%_\\+.~#?&/=]*)","model-value":t.component.configuration.current_l2_path,"onUpdate:modelValue":e[4]||(e[4]=r=>t.updateConfiguration(r,"configuration.current_l2_path"))},{help:a(()=>[...e[11]||(e[11]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),l("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Stromstärke der 2. Phase in Ampere darstellt.",-1),l("br",null,null,-1),n(" Wird dieses Feld leer gelassen, werden keine Phasenströme ermittelt und es kann kein Lastmanagement berechnet werden! ",-1)])]),_:1},8,["model-value"]),i(o,{title:"Pfad für Strom Phase 3",subtype:"text",pattern:"^(/[-a-zA-Z0-9@:%_\\+.~#?&/=]*)","model-value":t.component.configuration.current_l3_path,"onUpdate:modelValue":e[5]||(e[5]=r=>t.updateConfiguration(r,"configuration.current_l3_path"))},{help:a(()=>[...e[12]||(e[12]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),l("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Stromstärke der 3. Phase in Ampere darstellt.",-1),l("br",null,null,-1),n(" Wird dieses Feld leer gelassen, werden keine Phasenströme ermittelt und es kann kein Lastmanagement berechnet werden! ",-1)])]),_:1},8,["model-value"])])}const F=m(h,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/http/counter.vue"]]);export{F as default}; +import{C as u}from"./HardwareInstallation-M-k9qNJb.js";import{_ as m,m as s,l as p,f as g,q as i,u as a,B as n,y as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const h={name:"DeviceHttpCounter",mixins:[u]},b={class:"device-http-counter"};function f(t,e,w,v,k,S){const d=s("openwb-base-heading"),o=s("openwb-base-text-input");return p(),g("div",b,[i(d,null,{default:a(()=>[...e[6]||(e[6]=[n(" Einstellungen für Http Zähler ",-1)])]),_:1}),i(o,{title:"Pfad für Leistung",subtype:"text",required:"",pattern:"^/[-a-zA-Z0-9@:%_\\+.~#?&/=]*","model-value":t.component.configuration.power_path,"onUpdate:modelValue":e[0]||(e[0]=r=>t.updateConfiguration(r,"configuration.power_path"))},{help:a(()=>[...e[7]||(e[7]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),l("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Leistung in Watt darstellt. ",-1)])]),_:1},8,["model-value"]),i(o,{title:"Pfad für Zählerstand Bezug",subtype:"text",pattern:"^(/[-a-zA-Z0-9@:%_\\+.~#?&/=]*)","model-value":t.component.configuration.imported_path,"onUpdate:modelValue":e[1]||(e[1]=r=>t.updateConfiguration(r,"configuration.imported_path"))},{help:a(()=>[...e[8]||(e[8]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),l("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche den aktuellen absoluten Zählerstand in Wh darstellt.",-1),l("br",null,null,-1),n(" Wird dieses Feld leer gelassen, wird der Zählerstand intern simuliert. ",-1)])]),_:1},8,["model-value"]),i(o,{title:"Pfad für Zählerstand Einspeisung",subtype:"text",pattern:"^(/[-a-zA-Z0-9@:%_\\+.~#?&/=]*)","model-value":t.component.configuration.exported_path,"onUpdate:modelValue":e[2]||(e[2]=r=>t.updateConfiguration(r,"configuration.exported_path"))},{help:a(()=>[...e[9]||(e[9]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),l("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche den aktuellen absoluten Zählerstand in Wh darstellt.",-1),l("br",null,null,-1),n(" Wird dieses Feld leer gelassen, wird der Zählerstand intern simuliert. ",-1)])]),_:1},8,["model-value"]),i(o,{title:"Pfad für Strom Phase 1",subtype:"text",pattern:"^(/[-a-zA-Z0-9@:%_\\+.~#?&/=]*)","model-value":t.component.configuration.current_l1_path,"onUpdate:modelValue":e[3]||(e[3]=r=>t.updateConfiguration(r,"configuration.current_l1_path"))},{help:a(()=>[...e[10]||(e[10]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),l("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Stromstärke der 1. Phase in Ampere darstellt.",-1),l("br",null,null,-1),n(" Wird dieses Feld leer gelassen, werden keine Phasenströme ermittelt und es kann kein Lastmanagement berechnet werden! ",-1)])]),_:1},8,["model-value"]),i(o,{title:"Pfad für Strom Phase 2",subtype:"text",pattern:"^(/[-a-zA-Z0-9@:%_\\+.~#?&/=]*)","model-value":t.component.configuration.current_l2_path,"onUpdate:modelValue":e[4]||(e[4]=r=>t.updateConfiguration(r,"configuration.current_l2_path"))},{help:a(()=>[...e[11]||(e[11]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),l("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Stromstärke der 2. Phase in Ampere darstellt.",-1),l("br",null,null,-1),n(" Wird dieses Feld leer gelassen, werden keine Phasenströme ermittelt und es kann kein Lastmanagement berechnet werden! ",-1)])]),_:1},8,["model-value"]),i(o,{title:"Pfad für Strom Phase 3",subtype:"text",pattern:"^(/[-a-zA-Z0-9@:%_\\+.~#?&/=]*)","model-value":t.component.configuration.current_l3_path,"onUpdate:modelValue":e[5]||(e[5]=r=>t.updateConfiguration(r,"configuration.current_l3_path"))},{help:a(()=>[...e[12]||(e[12]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),l("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Stromstärke der 3. Phase in Ampere darstellt.",-1),l("br",null,null,-1),n(" Wird dieses Feld leer gelassen, werden keine Phasenströme ermittelt und es kann kein Lastmanagement berechnet werden! ",-1)])]),_:1},8,["model-value"])])}const F=m(h,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/http/counter.vue"]]);export{F as default}; diff --git a/web/settings/assets/counter-C25scRMR.js b/web/settings/assets/counter-DPbtpjhP.js similarity index 80% rename from web/settings/assets/counter-C25scRMR.js rename to web/settings/assets/counter-DPbtpjhP.js index a366134a52..1b418a4338 100644 --- a/web/settings/assets/counter-C25scRMR.js +++ b/web/settings/assets/counter-DPbtpjhP.js @@ -1 +1 @@ -import{C as e}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as o,l as t,f as n}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const r={name:"DeviceZendureCounter",mixins:[e]},i={class:"device-zendure-counter"};function s(c,p,m,u,a,d){return t(),n("div",i)}const g=o(r,[["render",s],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/zendure/zendure/counter.vue"]]);export{g as default}; +import{C as e}from"./HardwareInstallation-M-k9qNJb.js";import{_ as o,l as t,f as n}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const r={name:"DeviceZendureCounter",mixins:[e]},i={class:"device-zendure-counter"};function s(c,p,m,u,a,d){return t(),n("div",i)}const g=o(r,[["render",s],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/zendure/zendure/counter.vue"]]);export{g as default}; diff --git a/web/settings/assets/counter-DetJvNzo.js b/web/settings/assets/counter-DSstM-sV.js similarity index 90% rename from web/settings/assets/counter-DetJvNzo.js rename to web/settings/assets/counter-DSstM-sV.js index 76f8c3d730..0dadd35a4f 100644 --- a/web/settings/assets/counter-DetJvNzo.js +++ b/web/settings/assets/counter-DSstM-sV.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as a,m as t,l as m,f as l,q as i,u as d,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const b={name:"DeviceVictronCounter",mixins:[p]},_={class:"device-victron-counter"};function f(o,e,g,v,C,V){const r=t("openwb-base-heading"),u=t("openwb-base-number-input"),s=t("openwb-base-button-group-input");return m(),l("div",_,[i(r,null,{default:d(()=>[...e[2]||(e[2]=[c(" Einstellungen für Victron Zähler ",-1)])]),_:1}),i(u,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"]),i(s,{title:"Messgerät",buttons:[{buttonValue:!1,text:"AC-In Victron GX"},{buttonValue:!0,text:"Energy Meter"}],"model-value":o.component.configuration.energy_meter,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.energy_meter"))},null,8,["model-value"])])}const D=a(b,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/victron/victron/counter.vue"]]);export{D as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as a,m as t,l as m,f as l,q as i,u as d,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const b={name:"DeviceVictronCounter",mixins:[p]},_={class:"device-victron-counter"};function f(o,e,g,v,C,V){const r=t("openwb-base-heading"),u=t("openwb-base-number-input"),s=t("openwb-base-button-group-input");return m(),l("div",_,[i(r,null,{default:d(()=>[...e[2]||(e[2]=[c(" Einstellungen für Victron Zähler ",-1)])]),_:1}),i(u,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"]),i(s,{title:"Messgerät",buttons:[{buttonValue:!1,text:"AC-In Victron GX"},{buttonValue:!0,text:"Energy Meter"}],"model-value":o.component.configuration.energy_meter,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.energy_meter"))},null,8,["model-value"])])}const D=a(b,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/victron/victron/counter.vue"]]);export{D as default}; diff --git a/web/settings/assets/counter-Dw5I5Fam.js b/web/settings/assets/counter-DUwvjuC0.js similarity index 84% rename from web/settings/assets/counter-Dw5I5Fam.js rename to web/settings/assets/counter-DUwvjuC0.js index 2189a0abc3..fc39cfda52 100644 --- a/web/settings/assets/counter-Dw5I5Fam.js +++ b/web/settings/assets/counter-DUwvjuC0.js @@ -1 +1 @@ -import{C as s}from"./HardwareInstallation-Ln-RWgHD.js";import{S as n}from"./SystemVersion-eCZ4XHiC.js";import{_ as i,m as a,l as p,f as m,q as c,u as l,B as o,y as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceKostalPikoCounter",mixins:[s,n]},f={class:"device-kostal-piko-counter"},_=["href"];function b(t,e,k,h,v,w){const r=a("openwb-base-alert");return p(),m("div",f,[c(r,{subtype:"info"},{default:l(()=>[e[0]||(e[0]=o(" Wenn der Zähler im Hausverbrauchs-Zweig installiert ist, muss die Hierarchie wie im ",-1)),u("a",{href:`https://wiki.openwb.de/doku.php?id=openwb:vc:${t.systemVersion}:software:einstell-konfig:konfiguration:hausverbrauch`,target:"_blank",rel:"noopener noreferrer"},"Wiki für Hausverbrauchs-Zähler",8,_),e[1]||(e[1]=o(" beschrieben, angeordnet werden. ",-1))]),_:1})])}const Z=i(d,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/kostal/kostal_piko/counter.vue"]]);export{Z as default}; +import{C as s}from"./HardwareInstallation-M-k9qNJb.js";import{S as n}from"./SystemVersion-eCZ4XHiC.js";import{_ as i,m as a,l as p,f as m,q as c,u as l,B as o,y as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceKostalPikoCounter",mixins:[s,n]},f={class:"device-kostal-piko-counter"},_=["href"];function b(t,e,k,h,v,w){const r=a("openwb-base-alert");return p(),m("div",f,[c(r,{subtype:"info"},{default:l(()=>[e[0]||(e[0]=o(" Wenn der Zähler im Hausverbrauchs-Zweig installiert ist, muss die Hierarchie wie im ",-1)),u("a",{href:`https://wiki.openwb.de/doku.php?id=openwb:vc:${t.systemVersion}:software:einstell-konfig:konfiguration:hausverbrauch`,target:"_blank",rel:"noopener noreferrer"},"Wiki für Hausverbrauchs-Zähler",8,_),e[1]||(e[1]=o(" beschrieben, angeordnet werden. ",-1))]),_:1})])}const Z=i(d,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/kostal/kostal_piko/counter.vue"]]);export{Z as default}; diff --git a/web/settings/assets/counter-0w4sDDga.js b/web/settings/assets/counter-D_qxcfeu.js similarity index 84% rename from web/settings/assets/counter-0w4sDDga.js rename to web/settings/assets/counter-D_qxcfeu.js index 89acea13f5..182d77b519 100644 --- a/web/settings/assets/counter-0w4sDDga.js +++ b/web/settings/assets/counter-D_qxcfeu.js @@ -1 +1 @@ -import{C as u}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as d,m as n,l,f as c,q as o,u as i,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceKacoNHCounter",mixins:[u]},b={class:"device-kaco-nh-counter"};function f(t,e,g,v,w,k){const a=n("openwb-base-heading"),r=n("openwb-base-alert"),p=n("openwb-base-number-input");return l(),c("div",b,[o(a,null,{default:i(()=>[...e[1]||(e[1]=[s(" Einstellungen für Kaco NH SmartMeter ",-1)])]),_:1}),o(r,{subtype:"info"},{default:i(()=>[...e[2]||(e[2]=[s(" Mit diesem Modul ist kein phasenbasiertes Lastmanagement möglich, da keine Ströme der einzelnen Phasen gemessen werden. ",-1)])]),_:1}),o(p,{title:"ID",required:"",min:"0",max:"65535","model-value":t.component.configuration.id,"onUpdate:modelValue":e[0]||(e[0]=m=>t.updateConfiguration(m,"configuration.id"))},null,8,["model-value"])])}const D=d(_,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/kaco/kaco_nh/counter.vue"]]);export{D as default}; +import{C as u}from"./HardwareInstallation-M-k9qNJb.js";import{_ as d,m as n,l,f as c,q as o,u as i,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceKacoNHCounter",mixins:[u]},b={class:"device-kaco-nh-counter"};function f(t,e,g,v,w,k){const a=n("openwb-base-heading"),r=n("openwb-base-alert"),p=n("openwb-base-number-input");return l(),c("div",b,[o(a,null,{default:i(()=>[...e[1]||(e[1]=[s(" Einstellungen für Kaco NH SmartMeter ",-1)])]),_:1}),o(r,{subtype:"info"},{default:i(()=>[...e[2]||(e[2]=[s(" Mit diesem Modul ist kein phasenbasiertes Lastmanagement möglich, da keine Ströme der einzelnen Phasen gemessen werden. ",-1)])]),_:1}),o(p,{title:"ID",required:"",min:"0",max:"65535","model-value":t.component.configuration.id,"onUpdate:modelValue":e[0]||(e[0]=m=>t.updateConfiguration(m,"configuration.id"))},null,8,["model-value"])])}const D=d(_,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/kaco/kaco_nh/counter.vue"]]);export{D as default}; diff --git a/web/settings/assets/counter-DbgfMXYW.js b/web/settings/assets/counter-Dx3P41SY.js similarity index 88% rename from web/settings/assets/counter-DbgfMXYW.js rename to web/settings/assets/counter-Dx3P41SY.js index 8ff8b0d009..0fb39f42a0 100644 --- a/web/settings/assets/counter-DbgfMXYW.js +++ b/web/settings/assets/counter-Dx3P41SY.js @@ -1 +1 @@ -import{C as s}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as m,m as n,l as u,f as p,q as t,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceHuaweiSmartLoggerCounter",mixins:[s]},_={class:"device-huawei-smart-logger-counter"};function g(o,e,f,b,w,v){const i=n("openwb-base-heading"),r=n("openwb-base-number-input");return u(),p("div",_,[t(i,null,{default:d(()=>[...e[1]||(e[1]=[l(" Einstellungen für Huawei SmartLogger Zähler ",-1)])]),_:1}),t(r,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=a=>o.updateConfiguration(a,"configuration.modbus_id"))},null,8,["model-value"])])}const E=m(c,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/huawei/huawei_smartlogger/counter.vue"]]);export{E as default}; +import{C as s}from"./HardwareInstallation-M-k9qNJb.js";import{_ as m,m as n,l as u,f as p,q as t,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceHuaweiSmartLoggerCounter",mixins:[s]},_={class:"device-huawei-smart-logger-counter"};function g(o,e,f,b,w,v){const i=n("openwb-base-heading"),r=n("openwb-base-number-input");return u(),p("div",_,[t(i,null,{default:d(()=>[...e[1]||(e[1]=[l(" Einstellungen für Huawei SmartLogger Zähler ",-1)])]),_:1}),t(r,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=a=>o.updateConfiguration(a,"configuration.modbus_id"))},null,8,["model-value"])])}const E=m(c,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/huawei/huawei_smartlogger/counter.vue"]]);export{E as default}; diff --git a/web/settings/assets/counter-XNGLm26m.js b/web/settings/assets/counter-DzMp9bF4.js similarity index 86% rename from web/settings/assets/counter-XNGLm26m.js rename to web/settings/assets/counter-DzMp9bF4.js index 362cb4ea78..2d798e91c3 100644 --- a/web/settings/assets/counter-XNGLm26m.js +++ b/web/settings/assets/counter-DzMp9bF4.js @@ -1 +1 @@ -import{C as t}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as o,m as s,l as i,f as r,q as a,u as p,B as m}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSonnenbatterieCounter",mixins:[t]},d={class:"device-sonnenbatterie-counter"};function _(l,e,u,f,b,v){const n=s("openwb-base-alert");return i(),r("div",d,[a(n,{subtype:"info"},{default:p(()=>[...e[0]||(e[0]=[m(" Mit diesem Modul ist kein phasenbasiertes Lastmanagement möglich, da keine Ströme der einzelnen Phasen gemessen werden. ",-1)])]),_:1})])}const N=o(c,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/sonnen/sonnenbatterie/counter.vue"]]);export{N as default}; +import{C as t}from"./HardwareInstallation-M-k9qNJb.js";import{_ as o,m as s,l as i,f as r,q as a,u as p,B as m}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSonnenbatterieCounter",mixins:[t]},d={class:"device-sonnenbatterie-counter"};function _(l,e,u,f,b,v){const n=s("openwb-base-alert");return i(),r("div",d,[a(n,{subtype:"info"},{default:p(()=>[...e[0]||(e[0]=[m(" Mit diesem Modul ist kein phasenbasiertes Lastmanagement möglich, da keine Ströme der einzelnen Phasen gemessen werden. ",-1)])]),_:1})])}const N=o(c,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/sonnen/sonnenbatterie/counter.vue"]]);export{N as default}; diff --git a/web/settings/assets/counter-CFsHa4Fy.js b/web/settings/assets/counter-GbOlAIXk.js similarity index 88% rename from web/settings/assets/counter-CFsHa4Fy.js rename to web/settings/assets/counter-GbOlAIXk.js index eb5ee180b7..fdd09bf94e 100644 --- a/web/settings/assets/counter-CFsHa4Fy.js +++ b/web/settings/assets/counter-GbOlAIXk.js @@ -1 +1 @@ -import{C as m}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as u,m as o,l as d,f as l,q as t,u as i,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceEnphaseCounter",mixins:[m]},f={class:"device-enphase-counter"};function _(n,e,b,v,g,w){const p=o("openwb-base-heading"),r=o("openwb-base-number-input");return d(),l("div",f,[t(p,null,{default:i(()=>[...e[1]||(e[1]=[s(" Einstellungen für Enphase Envoy / IQ Gateway Zähler ",-1)])]),_:1}),t(r,{title:"EID",required:"","model-value":n.component.configuration.eid,"onUpdate:modelValue":e[0]||(e[0]=a=>n.updateConfiguration(a,"configuration.eid"))},{help:i(()=>[...e[2]||(e[2]=[s(' EID für "net-consumption" ',-1)])]),_:1},8,["model-value"])])}const k=u(c,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/enphase/enphase/counter.vue"]]);export{k as default}; +import{C as m}from"./HardwareInstallation-M-k9qNJb.js";import{_ as u,m as o,l as d,f as l,q as t,u as i,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceEnphaseCounter",mixins:[m]},f={class:"device-enphase-counter"};function _(n,e,b,v,g,w){const p=o("openwb-base-heading"),r=o("openwb-base-number-input");return d(),l("div",f,[t(p,null,{default:i(()=>[...e[1]||(e[1]=[s(" Einstellungen für Enphase Envoy / IQ Gateway Zähler ",-1)])]),_:1}),t(r,{title:"EID",required:"","model-value":n.component.configuration.eid,"onUpdate:modelValue":e[0]||(e[0]=a=>n.updateConfiguration(a,"configuration.eid"))},{help:i(()=>[...e[2]||(e[2]=[s(' EID für "net-consumption" ',-1)])]),_:1},8,["model-value"])])}const k=u(c,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/enphase/enphase/counter.vue"]]);export{k as default}; diff --git a/web/settings/assets/counter-G6bJTNfM.js b/web/settings/assets/counter-LgLPNVAo.js similarity index 87% rename from web/settings/assets/counter-G6bJTNfM.js rename to web/settings/assets/counter-LgLPNVAo.js index eb3b766e15..46e997746e 100644 --- a/web/settings/assets/counter-G6bJTNfM.js +++ b/web/settings/assets/counter-LgLPNVAo.js @@ -1 +1 @@ -import{C as a}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as c,m as n,l as p,f as m,q as o,u as t,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const l={name:"DeviceEneCessEcoMainCounter",mixins:[a]},u={class:"device-enecess-ecomain-counter"};function d(_,e,f,b,w,v){const i=n("openwb-base-heading"),r=n("openwb-base-alert");return p(),m("div",u,[o(i,null,{default:t(()=>[...e[0]||(e[0]=[s(" Einstellungen für EcoMain EVU-Zähler ",-1)])]),_:1}),o(r,{subtype:"info"},{default:t(()=>[...e[1]||(e[1]=[s(" Die Phasenwerte und Gesamtwerte werden vom Hauptanschluss des EcoMain übernommen. Eine Frequenz wird vom EcoMain nicht bereitgestellt. ",-1)])]),_:1})])}const k=c(l,[["render",d],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/enecess/ecomain/counter.vue"]]);export{k as default}; +import{C as a}from"./HardwareInstallation-M-k9qNJb.js";import{_ as c,m as n,l as p,f as m,q as o,u as t,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const l={name:"DeviceEneCessEcoMainCounter",mixins:[a]},u={class:"device-enecess-ecomain-counter"};function d(_,e,f,b,w,v){const i=n("openwb-base-heading"),r=n("openwb-base-alert");return p(),m("div",u,[o(i,null,{default:t(()=>[...e[0]||(e[0]=[s(" Einstellungen für EcoMain EVU-Zähler ",-1)])]),_:1}),o(r,{subtype:"info"},{default:t(()=>[...e[1]||(e[1]=[s(" Die Phasenwerte und Gesamtwerte werden vom Hauptanschluss des EcoMain übernommen. Eine Frequenz wird vom EcoMain nicht bereitgestellt. ",-1)])]),_:1})])}const k=c(l,[["render",d],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/enecess/ecomain/counter.vue"]]);export{k as default}; diff --git a/web/settings/assets/counter-Bffry-ig.js b/web/settings/assets/counter-TLT1z9bP.js similarity index 84% rename from web/settings/assets/counter-Bffry-ig.js rename to web/settings/assets/counter-TLT1z9bP.js index 9812bdee2a..c874dfb9b8 100644 --- a/web/settings/assets/counter-Bffry-ig.js +++ b/web/settings/assets/counter-TLT1z9bP.js @@ -1 +1 @@ -import{C as t}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as n,m as r,l as s,f as a,q as i,u as p,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const m={name:"DeviceCarloGavazziCounter",mixins:[t]},_={class:"device-carlo-gavazzi-counter"};function l(u,e,d,f,v,z){const o=r("openwb-base-alert");return s(),a("div",_,[i(o,{subtype:"info"},{default:p(()=>[...e[0]||(e[0]=[c(" ModbusTCP muss aktiviert sein. ",-1)])]),_:1})])}const N=n(m,[["render",l],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/carlo_gavazzi/carlo_gavazzi/counter.vue"]]);export{N as default}; +import{C as t}from"./HardwareInstallation-M-k9qNJb.js";import{_ as n,m as r,l as s,f as a,q as i,u as p,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const m={name:"DeviceCarloGavazziCounter",mixins:[t]},_={class:"device-carlo-gavazzi-counter"};function l(u,e,d,f,v,z){const o=r("openwb-base-alert");return s(),a("div",_,[i(o,{subtype:"info"},{default:p(()=>[...e[0]||(e[0]=[c(" ModbusTCP muss aktiviert sein. ",-1)])]),_:1})])}const N=n(m,[["render",l],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/carlo_gavazzi/carlo_gavazzi/counter.vue"]]);export{N as default}; diff --git a/web/settings/assets/counter-CBqU5HUT.js b/web/settings/assets/counter-VvO2rbw8.js similarity index 88% rename from web/settings/assets/counter-CBqU5HUT.js rename to web/settings/assets/counter-VvO2rbw8.js index 910c9f6dc8..c942787afb 100644 --- a/web/settings/assets/counter-CBqU5HUT.js +++ b/web/settings/assets/counter-VvO2rbw8.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as u,m as t,l as a,f as l,q as n,u as m,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DevicePowerdogCounter",mixins:[p]},_={class:"device-powerdog-counter"};function b(e,o,f,g,v,w){const i=t("openwb-base-heading"),r=t("openwb-base-button-group-input");return a(),l("div",_,[n(i,null,{default:m(()=>[...o[1]||(o[1]=[d(" Einstellungen für Powerdog Zähler ",-1)])]),_:1}),n(r,{title:"Einbau-Position",buttons:[{buttonValue:!1,text:"Hausverbrauch"},{buttonValue:!0,text:"EVU-Punkt"}],"model-value":e.component.configuration.position_evu,"onUpdate:modelValue":o[0]||(o[0]=s=>e.updateConfiguration(s,"configuration.position_evu"))},null,8,["model-value"])])}const N=u(c,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/powerdog/powerdog/counter.vue"]]);export{N as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as u,m as t,l as a,f as l,q as n,u as m,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DevicePowerdogCounter",mixins:[p]},_={class:"device-powerdog-counter"};function b(e,o,f,g,v,w){const i=t("openwb-base-heading"),r=t("openwb-base-button-group-input");return a(),l("div",_,[n(i,null,{default:m(()=>[...o[1]||(o[1]=[d(" Einstellungen für Powerdog Zähler ",-1)])]),_:1}),n(r,{title:"Einbau-Position",buttons:[{buttonValue:!1,text:"Hausverbrauch"},{buttonValue:!0,text:"EVU-Punkt"}],"model-value":e.component.configuration.position_evu,"onUpdate:modelValue":o[0]||(o[0]=s=>e.updateConfiguration(s,"configuration.position_evu"))},null,8,["model-value"])])}const N=u(c,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/powerdog/powerdog/counter.vue"]]);export{N as default}; diff --git a/web/settings/assets/counter-aE7ZGMoA.js b/web/settings/assets/counter-_4xt7Iez.js similarity index 92% rename from web/settings/assets/counter-aE7ZGMoA.js rename to web/settings/assets/counter-_4xt7Iez.js index 2b2d65bcd6..aed2fd7985 100644 --- a/web/settings/assets/counter-aE7ZGMoA.js +++ b/web/settings/assets/counter-_4xt7Iez.js @@ -1 +1 @@ -import{C as d}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as m,m as o,l as b,f as c,q as t,u as r,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const f={name:"DeviceOpenwbFlexCounter",mixins:[d]},_={class:"device-openwb-flex-counter"};function v(n,e,w,g,M,x){const l=o("openwb-base-heading"),a=o("openwb-base-alert"),p=o("openwb-base-select-input"),u=o("openwb-base-number-input");return b(),c("div",_,[t(l,null,{default:r(()=>[...e[2]||(e[2]=[s(" Einstellungen für openWB-Flex Zähler ",-1)])]),_:1}),t(a,{subtype:"info"},{default:r(()=>[...e[3]||(e[3]=[s(" Bei saldierenden Zählern (MPM3PM, B23) werden die Zählerstände für Einspeisung und Bezug aus dem Zähler ausgelesen. Bei Zählern, die nicht saldierend arbeiten (Lovato, SDM630, SDM72D-M), werden die Zählerstände von der openWB berechnet. ",-1)])]),_:1}),t(p,{title:"Zählermodell","not-selected":"Bitte auswählen",options:[{value:3,text:"B23"},{value:1,text:"Lovato"},{value:0,text:"MPM3PM"},{value:2,text:"SDM630/SDM72D-M"}],"model-value":n.component.configuration.version,required:"","onUpdate:modelValue":e[0]||(e[0]=i=>n.updateConfiguration(i,"configuration.version"))},null,8,["model-value"]),t(u,{title:"Modbus-ID",required:"",min:1,max:255,"model-value":n.component.configuration.id,"onUpdate:modelValue":e[1]||(e[1]=i=>n.updateConfiguration(i,"configuration.id"))},null,8,["model-value"])])}const q=m(f,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/openwb/openwb_flex/counter.vue"]]);export{q as default}; +import{C as d}from"./HardwareInstallation-M-k9qNJb.js";import{_ as m,m as o,l as b,f as c,q as t,u as r,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const f={name:"DeviceOpenwbFlexCounter",mixins:[d]},_={class:"device-openwb-flex-counter"};function v(n,e,w,g,M,x){const l=o("openwb-base-heading"),a=o("openwb-base-alert"),p=o("openwb-base-select-input"),u=o("openwb-base-number-input");return b(),c("div",_,[t(l,null,{default:r(()=>[...e[2]||(e[2]=[s(" Einstellungen für openWB-Flex Zähler ",-1)])]),_:1}),t(a,{subtype:"info"},{default:r(()=>[...e[3]||(e[3]=[s(" Bei saldierenden Zählern (MPM3PM, B23) werden die Zählerstände für Einspeisung und Bezug aus dem Zähler ausgelesen. Bei Zählern, die nicht saldierend arbeiten (Lovato, SDM630, SDM72D-M), werden die Zählerstände von der openWB berechnet. ",-1)])]),_:1}),t(p,{title:"Zählermodell","not-selected":"Bitte auswählen",options:[{value:3,text:"B23"},{value:1,text:"Lovato"},{value:0,text:"MPM3PM"},{value:2,text:"SDM630/SDM72D-M"}],"model-value":n.component.configuration.version,required:"","onUpdate:modelValue":e[0]||(e[0]=i=>n.updateConfiguration(i,"configuration.version"))},null,8,["model-value"]),t(u,{title:"Modbus-ID",required:"",min:1,max:255,"model-value":n.component.configuration.id,"onUpdate:modelValue":e[1]||(e[1]=i=>n.updateConfiguration(i,"configuration.id"))},null,8,["model-value"])])}const q=m(f,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/openwb/openwb_flex/counter.vue"]]);export{q as default}; diff --git a/web/settings/assets/counter-DdeaIS5X.js b/web/settings/assets/counter-fISm2BAg.js similarity index 87% rename from web/settings/assets/counter-DdeaIS5X.js rename to web/settings/assets/counter-fISm2BAg.js index 23f2a30117..1dc95dfc26 100644 --- a/web/settings/assets/counter-DdeaIS5X.js +++ b/web/settings/assets/counter-fISm2BAg.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as a,m as n,l as m,f as u,q as t,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceFoxEssCounter",mixins:[p]},c={class:"device-fox_ess-counter"};function f(o,e,b,x,v,g){const s=n("openwb-base-heading"),i=n("openwb-base-number-input");return m(),u("div",c,[t(s,null,{default:d(()=>[...e[1]||(e[1]=[l(" Einstellungen für FoxEss Zähler ",-1)])]),_:1}),t(i,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=r=>o.updateConfiguration(r,"configuration.modbus_id"))},null,8,["model-value"])])}const D=a(_,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fox_ess/fox_ess/counter.vue"]]);export{D as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as a,m as n,l as m,f as u,q as t,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceFoxEssCounter",mixins:[p]},c={class:"device-fox_ess-counter"};function f(o,e,b,x,v,g){const s=n("openwb-base-heading"),i=n("openwb-base-number-input");return m(),u("div",c,[t(s,null,{default:d(()=>[...e[1]||(e[1]=[l(" Einstellungen für FoxEss Zähler ",-1)])]),_:1}),t(i,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=r=>o.updateConfiguration(r,"configuration.modbus_id"))},null,8,["model-value"])])}const D=a(_,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fox_ess/fox_ess/counter.vue"]]);export{D as default}; diff --git a/web/settings/assets/counter-Ctv3sDCh.js b/web/settings/assets/counter-lFYAQ5gR.js similarity index 89% rename from web/settings/assets/counter-Ctv3sDCh.js rename to web/settings/assets/counter-lFYAQ5gR.js index 0c4fc7ab02..31d7e041a1 100644 --- a/web/settings/assets/counter-Ctv3sDCh.js +++ b/web/settings/assets/counter-lFYAQ5gR.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as m,m as t,l as c,f as u,q as o,u as s,B as l,y as n,J as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceShellyCounter",mixins:[p]},f={class:"device-shelly-counter"},h={class:"small"};function b(r,e,y,g,v,w){const i=t("openwb-base-heading"),a=t("openwb-base-alert");return c(),u("div",f,[o(i,null,{default:s(()=>[e[0]||(e[0]=l(" Einstellungen für Shelly Zähler ",-1)),n("span",h,"(Modul: "+d(r.$options.name)+")",1)]),_:1}),o(a,{subtype:"info"},{default:s(()=>[...e[1]||(e[1]=[n("span",{class:"text-danger"}," Als EVU-Zähler werden nur dreiphasige Shelly unterstützt (z.B. Shelly 3EM, Shelly Pro 3EM)",-1),n("br",null,null,-1),l(" Diese Komponente benötigt keine Einstellungen. ",-1)])]),_:1})])}const D=m(_,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/shelly/shelly/counter.vue"]]);export{D as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as m,m as t,l as c,f as u,q as o,u as s,B as l,y as n,J as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceShellyCounter",mixins:[p]},f={class:"device-shelly-counter"},h={class:"small"};function b(r,e,y,g,v,w){const i=t("openwb-base-heading"),a=t("openwb-base-alert");return c(),u("div",f,[o(i,null,{default:s(()=>[e[0]||(e[0]=l(" Einstellungen für Shelly Zähler ",-1)),n("span",h,"(Modul: "+d(r.$options.name)+")",1)]),_:1}),o(a,{subtype:"info"},{default:s(()=>[...e[1]||(e[1]=[n("span",{class:"text-danger"}," Als EVU-Zähler werden nur dreiphasige Shelly unterstützt (z.B. Shelly 3EM, Shelly Pro 3EM)",-1),n("br",null,null,-1),l(" Diese Komponente benötigt keine Einstellungen. ",-1)])]),_:1})])}const D=m(_,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/shelly/shelly/counter.vue"]]);export{D as default}; diff --git a/web/settings/assets/counter-GFOwVgsi.js b/web/settings/assets/counter-lzYJiWN4.js similarity index 87% rename from web/settings/assets/counter-GFOwVgsi.js rename to web/settings/assets/counter-lzYJiWN4.js index 19ab9bba6b..4f3f81facd 100644 --- a/web/settings/assets/counter-GFOwVgsi.js +++ b/web/settings/assets/counter-lzYJiWN4.js @@ -1 +1 @@ -import{C as a}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as m,m as t,l as p,f as u,q as n,u as l,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSmartMeCounter",mixins:[a]},_={class:"device-smart-me-counter"};function f(o,e,b,v,g,x){const r=t("openwb-base-heading"),i=t("openwb-base-text-input");return p(),u("div",_,[n(r,null,{default:l(()=>[...e[1]||(e[1]=[d(" Einstellungen für smart-me Zähler ",-1)])]),_:1}),n(i,{title:"Geräte-ID",required:"","model-value":o.component.configuration.id,"onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.id"))},null,8,["model-value"])])}const E=m(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/smart_me/smart_me/counter.vue"]]);export{E as default}; +import{C as a}from"./HardwareInstallation-M-k9qNJb.js";import{_ as m,m as t,l as p,f as u,q as n,u as l,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSmartMeCounter",mixins:[a]},_={class:"device-smart-me-counter"};function f(o,e,b,v,g,x){const r=t("openwb-base-heading"),i=t("openwb-base-text-input");return p(),u("div",_,[n(r,null,{default:l(()=>[...e[1]||(e[1]=[d(" Einstellungen für smart-me Zähler ",-1)])]),_:1}),n(i,{title:"Geräte-ID",required:"","model-value":o.component.configuration.id,"onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.id"))},null,8,["model-value"])])}const E=m(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/smart_me/smart_me/counter.vue"]]);export{E as default}; diff --git a/web/settings/assets/counter-D-cbHK0b.js b/web/settings/assets/counter-oZlZTHAi.js similarity index 85% rename from web/settings/assets/counter-D-cbHK0b.js rename to web/settings/assets/counter-oZlZTHAi.js index 2df5d47ffd..d9d2270c13 100644 --- a/web/settings/assets/counter-D-cbHK0b.js +++ b/web/settings/assets/counter-oZlZTHAi.js @@ -1 +1 @@ -import{C as i}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as r,m as s,l as m,f as p,q as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const a={name:"DeviceChintCounter",mixins:[i]},c={class:"device-chint-counter"};function d(e,o,l,_,f,b){const n=s("openwb-base-number-input");return m(),p("div",c,[u(n,{title:"Modbus ID",required:"","model-value":e.device.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":o[0]||(o[0]=t=>e.updateConfiguration(t,"configuration.modbus_id"))},null,8,["model-value"])])}const q=r(a,[["render",d],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/chint/chint/counter.vue"]]);export{q as default}; +import{C as i}from"./HardwareInstallation-M-k9qNJb.js";import{_ as r,m as s,l as m,f as p,q as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const a={name:"DeviceChintCounter",mixins:[i]},c={class:"device-chint-counter"};function d(e,o,l,_,f,b){const n=s("openwb-base-number-input");return m(),p("div",c,[u(n,{title:"Modbus ID",required:"","model-value":e.device.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":o[0]||(o[0]=t=>e.updateConfiguration(t,"configuration.modbus_id"))},null,8,["model-value"])])}const q=r(a,[["render",d],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/chint/chint/counter.vue"]]);export{q as default}; diff --git a/web/settings/assets/counter-yTYJ7q_m.js b/web/settings/assets/counter-vb8LubPS.js similarity index 87% rename from web/settings/assets/counter-yTYJ7q_m.js rename to web/settings/assets/counter-vb8LubPS.js index 846cc8d495..eb8114c13e 100644 --- a/web/settings/assets/counter-yTYJ7q_m.js +++ b/web/settings/assets/counter-vb8LubPS.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as a,m as n,l as m,f as u,q as t,u as l,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSolisCounter",mixins:[p]},_={class:"device-solis-counter"};function f(o,e,b,v,g,C){const i=n("openwb-base-heading"),s=n("openwb-base-number-input");return m(),u("div",_,[t(i,null,{default:l(()=>[...e[1]||(e[1]=[d(" Einstellungen für Solis Zähler ",-1)])]),_:1}),t(s,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=r=>o.updateConfiguration(r,"configuration.modbus_id"))},null,8,["model-value"])])}const E=a(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solis/solis/counter.vue"]]);export{E as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as a,m as n,l as m,f as u,q as t,u as l,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSolisCounter",mixins:[p]},_={class:"device-solis-counter"};function f(o,e,b,v,g,C){const i=n("openwb-base-heading"),s=n("openwb-base-number-input");return m(),u("div",_,[t(i,null,{default:l(()=>[...e[1]||(e[1]=[d(" Einstellungen für Solis Zähler ",-1)])]),_:1}),t(s,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=r=>o.updateConfiguration(r,"configuration.modbus_id"))},null,8,["model-value"])])}const E=a(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solis/solis/counter.vue"]]);export{E as default}; diff --git a/web/settings/assets/counter-CBEHJvDz.js b/web/settings/assets/counter-vd7oTPGe.js similarity index 90% rename from web/settings/assets/counter-CBEHJvDz.js rename to web/settings/assets/counter-vd7oTPGe.js index 6d949818d6..45dffad04f 100644 --- a/web/settings/assets/counter-CBEHJvDz.js +++ b/web/settings/assets/counter-vd7oTPGe.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as l,m as t,l as m,f as d,q as o,u as i,B as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceVirtualCounter",mixins:[p]},_={class:"device-virtual-counter"};function f(n,e,b,g,v,h){const s=t("openwb-base-heading"),a=t("openwb-base-number-input");return m(),d("div",_,[o(s,null,{default:i(()=>[...e[1]||(e[1]=[r(" Einstellungen für virtuelle Zähler ",-1)])]),_:1}),o(a,{title:"Zusätzlicher Verbrauch",min:0,step:.05,unit:"kW",required:"","model-value":n.component.configuration.external_consumption/1e3,"onUpdate:modelValue":e[0]||(e[0]=u=>n.updateConfiguration(u*1e3,"configuration.external_consumption"))},{help:i(()=>[...e[2]||(e[2]=[r(" Die hier angegebene Leistung wird pauschal zu dem Leistungen der hinter dem Zähler liegenden Komponenten addiert. Damit lässt sich z. B. eine Reserve für nicht erfasste Verbraucher einstellen. ",-1)])]),_:1},8,["model-value"])])}const Z=l(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/virtual/counter.vue"]]);export{Z as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as l,m as t,l as m,f as d,q as o,u as i,B as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceVirtualCounter",mixins:[p]},_={class:"device-virtual-counter"};function f(n,e,b,g,v,h){const s=t("openwb-base-heading"),a=t("openwb-base-number-input");return m(),d("div",_,[o(s,null,{default:i(()=>[...e[1]||(e[1]=[r(" Einstellungen für virtuelle Zähler ",-1)])]),_:1}),o(a,{title:"Zusätzlicher Verbrauch",min:0,step:.05,unit:"kW",required:"","model-value":n.component.configuration.external_consumption/1e3,"onUpdate:modelValue":e[0]||(e[0]=u=>n.updateConfiguration(u*1e3,"configuration.external_consumption"))},{help:i(()=>[...e[2]||(e[2]=[r(" Die hier angegebene Leistung wird pauschal zu dem Leistungen der hinter dem Zähler liegenden Komponenten addiert. Damit lässt sich z. B. eine Reserve für nicht erfasste Verbraucher einstellen. ",-1)])]),_:1},8,["model-value"])])}const Z=l(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/virtual/counter.vue"]]);export{Z as default}; diff --git a/web/settings/assets/counter_consumption-C7_zNodH.js b/web/settings/assets/counter_consumption-CKJwpn1V.js similarity index 93% rename from web/settings/assets/counter_consumption-C7_zNodH.js rename to web/settings/assets/counter_consumption-CKJwpn1V.js index 20cbb9aff1..ae81e28498 100644 --- a/web/settings/assets/counter_consumption-C7_zNodH.js +++ b/web/settings/assets/counter_consumption-CKJwpn1V.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as d,m as i,l as m,f as b,q as n,u as t,B as o}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSonnenbatterieCounterConsumption",mixins:[p]},f={class:"device-sonnenbatterie-counter-consumption"};function _(r,e,g,h,v,D){const s=i("openwb-base-alert"),a=i("openwb-base-heading"),u=i("openwb-base-number-input");return m(),b("div",f,[n(s,{subtype:"info"},{default:t(()=>[...e[1]||(e[1]=[o(" Diese Komponente liest die Daten des Verbrauchszählers der Sonnenbatterie aus, nicht die EVU-Daten! Es ist ggf. ein virtueller Zähler als EVU-Zähler zu konfigurieren, falls kein anderer Zähler vorhanden ist und ausgelesen werden kann. ",-1)])]),_:1}),n(s,{subtype:r.device.configuration.variant!==3?"danger":"info"},{default:t(()=>[...e[2]||(e[2]=[o(" Diese Komponente kann nur in Verbindung mit der JSON-API v2 verwendet werden, da die anderen Schnittstellen die Daten nicht zur Verfügung stellen. ",-1)])]),_:1},8,["subtype"]),n(a,null,{default:t(()=>[...e[3]||(e[3]=[o(" Einstellungen für Sonnenbatterie Verbrauchs-Zähler ",-1)])]),_:1}),n(u,{title:"Sonnenbatterie-Zähler-ID","model-value":r.component.configuration.counter_id,min:"0",max:"4","onUpdate:modelValue":e[0]||(e[0]=l=>r.updateConfiguration(l,"configuration.counter_id"))},{help:t(()=>[...e[4]||(e[4]=[o(" Der erste Verbrauchs-Zähler hat ID 0. Die IDs weiterer Verbrauchs-Zähler werden hochgezählt. Der zweite Zähler hat ID 1, der Dritte ID 2 und so fort. ",-1)])]),_:1},8,["model-value"])])}const E=d(c,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/sonnen/sonnenbatterie/counter_consumption.vue"]]);export{E as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as d,m as i,l as m,f as b,q as n,u as t,B as o}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSonnenbatterieCounterConsumption",mixins:[p]},f={class:"device-sonnenbatterie-counter-consumption"};function _(r,e,g,h,v,D){const s=i("openwb-base-alert"),a=i("openwb-base-heading"),u=i("openwb-base-number-input");return m(),b("div",f,[n(s,{subtype:"info"},{default:t(()=>[...e[1]||(e[1]=[o(" Diese Komponente liest die Daten des Verbrauchszählers der Sonnenbatterie aus, nicht die EVU-Daten! Es ist ggf. ein virtueller Zähler als EVU-Zähler zu konfigurieren, falls kein anderer Zähler vorhanden ist und ausgelesen werden kann. ",-1)])]),_:1}),n(s,{subtype:r.device.configuration.variant!==3?"danger":"info"},{default:t(()=>[...e[2]||(e[2]=[o(" Diese Komponente kann nur in Verbindung mit der JSON-API v2 verwendet werden, da die anderen Schnittstellen die Daten nicht zur Verfügung stellen. ",-1)])]),_:1},8,["subtype"]),n(a,null,{default:t(()=>[...e[3]||(e[3]=[o(" Einstellungen für Sonnenbatterie Verbrauchs-Zähler ",-1)])]),_:1}),n(u,{title:"Sonnenbatterie-Zähler-ID","model-value":r.component.configuration.counter_id,min:"0",max:"4","onUpdate:modelValue":e[0]||(e[0]=l=>r.updateConfiguration(l,"configuration.counter_id"))},{help:t(()=>[...e[4]||(e[4]=[o(" Der erste Verbrauchs-Zähler hat ID 0. Die IDs weiterer Verbrauchs-Zähler werden hochgezählt. Der zweite Zähler hat ID 1, der Dritte ID 2 und so fort. ",-1)])]),_:1},8,["model-value"])])}const E=d(c,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/sonnen/sonnenbatterie/counter_consumption.vue"]]);export{E as default}; diff --git a/web/settings/assets/counter_maxstorage-B2T64hs1.js b/web/settings/assets/counter_maxstorage-BeIa9tEz.js similarity index 90% rename from web/settings/assets/counter_maxstorage-B2T64hs1.js rename to web/settings/assets/counter_maxstorage-BeIa9tEz.js index db35729798..e247e51a9d 100644 --- a/web/settings/assets/counter_maxstorage-B2T64hs1.js +++ b/web/settings/assets/counter_maxstorage-BeIa9tEz.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as u,m as o,l as d,f as _,q as n,u as a,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSolarmaxMsCounter",mixins:[p]},b={class:"device-solarmax-counter-maxstorage"};function f(t,e,g,x,v,w){const r=o("openwb-base-heading"),i=o("openwb-base-alert"),m=o("openwb-base-number-input");return d(),_("div",b,[n(r,null,{default:a(()=>[...e[1]||(e[1]=[s(" Einstellungen für Solarmax MAX.STORAGE / MAX.STORAGE Ultimate Zähler ",-1)])]),_:1}),n(i,{subtype:"info"},{default:a(()=>[...e[2]||(e[2]=[s(" Bei Solarmax MAX.STORAGE / MAX.STORAGE Ultimate Zählern lassen sich die Ströme einzelner Phasen nicht auslesen. Eine Regelung ist daher nur anhand der Gesamtleistung möglich. ",-1)])]),_:1}),n(m,{title:"Modbus ID",required:"","model-value":t.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=l=>t.updateConfiguration(l,"configuration.modbus_id"))},null,8,["model-value"])])}const T=u(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solarmax/solarmax/counter_maxstorage.vue"]]);export{T as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as u,m as o,l as d,f as _,q as n,u as a,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSolarmaxMsCounter",mixins:[p]},b={class:"device-solarmax-counter-maxstorage"};function f(t,e,g,x,v,w){const r=o("openwb-base-heading"),i=o("openwb-base-alert"),m=o("openwb-base-number-input");return d(),_("div",b,[n(r,null,{default:a(()=>[...e[1]||(e[1]=[s(" Einstellungen für Solarmax MAX.STORAGE / MAX.STORAGE Ultimate Zähler ",-1)])]),_:1}),n(i,{subtype:"info"},{default:a(()=>[...e[2]||(e[2]=[s(" Bei Solarmax MAX.STORAGE / MAX.STORAGE Ultimate Zählern lassen sich die Ströme einzelner Phasen nicht auslesen. Eine Regelung ist daher nur anhand der Gesamtleistung möglich. ",-1)])]),_:1}),n(m,{title:"Modbus ID",required:"","model-value":t.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=l=>t.updateConfiguration(l,"configuration.modbus_id"))},null,8,["model-value"])])}const T=u(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solarmax/solarmax/counter_maxstorage.vue"]]);export{T as default}; diff --git a/web/settings/assets/displayTheme-DEZOYyQI.js b/web/settings/assets/displayTheme-B4_wh84b.js similarity index 92% rename from web/settings/assets/displayTheme-DEZOYyQI.js rename to web/settings/assets/displayTheme-B4_wh84b.js index b85f2ba7b4..b644d18d6d 100644 --- a/web/settings/assets/displayTheme-DEZOYyQI.js +++ b/web/settings/assets/displayTheme-B4_wh84b.js @@ -1 +1 @@ -import{D as d}from"./DisplayConfiguration-BtMQTY__.js";import{_ as m,m as n,l as i,f as c,q as l,u as s,B as a,z as b,x as g}from"./vendor-BwGffBs-.js";import"./index-Bv2WLdLZ.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"DisplayThemeColors",mixins:[d]},f={class:"display-theme-colors"};function h(o,e,y,w,k,v){const p=n("openwb-base-heading"),r=n("openwb-base-button-group-input"),u=n("openwb-base-text-input");return i(),c("div",f,[l(p,null,{default:s(()=>[...e[2]||(e[2]=[a("Bediensperre",-1)])]),_:1}),l(r,{title:"Bedienung sperren","model-value":o.displayTheme.configuration.lock_changes,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[0]||(e[0]=t=>o.updateConfiguration(t,"configuration.lock_changes"))},{help:s(()=>[...e[3]||(e[3]=[a(' Die Bedienung wird automatisch nach der eingestellten Ausschaltzeit (siehe "Display Standby") wieder gesperrt. ',-1)])]),_:1},8,["model-value"]),o.displayTheme.configuration.lock_changes?(i(),b(u,{key:0,title:"PIN zur Freigabe",subtype:"password",required:"",pattern:"[0-9]{4,10}","model-value":o.displayTheme.configuration.lock_changes_code,"onUpdate:modelValue":e[1]||(e[1]=t=>o.updateConfiguration(t,"configuration.lock_changes_code"))},{help:s(()=>[...e[4]||(e[4]=[a(" Der PIN muss aus 4 bis 10 Zahlen bestehen. ",-1)])]),_:1},8,["model-value"])):g("",!0)])}const z=m(_,[["render",h],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/display_themes/colors/displayTheme.vue"]]);export{z as default}; +import{D as d}from"./DisplayConfiguration-CqMq051X.js";import{_ as m,m as n,l as i,f as c,q as l,u as s,B as a,z as b,x as g}from"./vendor-BwGffBs-.js";import"./index-CE-5DBwq.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"DisplayThemeColors",mixins:[d]},f={class:"display-theme-colors"};function h(o,e,y,w,k,v){const p=n("openwb-base-heading"),r=n("openwb-base-button-group-input"),u=n("openwb-base-text-input");return i(),c("div",f,[l(p,null,{default:s(()=>[...e[2]||(e[2]=[a("Bediensperre",-1)])]),_:1}),l(r,{title:"Bedienung sperren","model-value":o.displayTheme.configuration.lock_changes,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[0]||(e[0]=t=>o.updateConfiguration(t,"configuration.lock_changes"))},{help:s(()=>[...e[3]||(e[3]=[a(' Die Bedienung wird automatisch nach der eingestellten Ausschaltzeit (siehe "Display Standby") wieder gesperrt. ',-1)])]),_:1},8,["model-value"]),o.displayTheme.configuration.lock_changes?(i(),b(u,{key:0,title:"PIN zur Freigabe",subtype:"password",required:"",pattern:"[0-9]{4,10}","model-value":o.displayTheme.configuration.lock_changes_code,"onUpdate:modelValue":e[1]||(e[1]=t=>o.updateConfiguration(t,"configuration.lock_changes_code"))},{help:s(()=>[...e[4]||(e[4]=[a(" Der PIN muss aus 4 bis 10 Zahlen bestehen. ",-1)])]),_:1},8,["model-value"])):g("",!0)])}const z=m(_,[["render",h],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/display_themes/colors/displayTheme.vue"]]);export{z as default}; diff --git a/web/settings/assets/displayTheme-Cyu9dT1E.js b/web/settings/assets/displayTheme-DXQhlkdH.js similarity index 98% rename from web/settings/assets/displayTheme-Cyu9dT1E.js rename to web/settings/assets/displayTheme-DXQhlkdH.js index 00936025cf..89f9206ef9 100644 --- a/web/settings/assets/displayTheme-Cyu9dT1E.js +++ b/web/settings/assets/displayTheme-DXQhlkdH.js @@ -1 +1 @@ -import{D as v}from"./DisplayConfiguration-BtMQTY__.js";import{_,m as s,l as r,f as c,q as a,u as o,B as u,z as b,x as p}from"./vendor-BwGffBs-.js";import"./index-Bv2WLdLZ.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const h=[{value:"dashboard",text:"Übersicht"},{value:"energy-flow",text:"Energiefluss"},{value:"charge-points",text:"Ladepunkte"},{value:"status",text:"Status"}],V={name:"DisplayThemeCards",mixins:[v],computed:{enabledViews(){return h.filter(t=>this.displayTheme.configuration[`enable_${t.value.replace("-","_")}_view`])}},methods:{toggleView(t){this.displayTheme.configuration.default_view===t&&this.updateConfiguration(void 0,"configuration.default_view"),this.updateConfiguration(!this.displayTheme.configuration[`enable_${t}_view`],`configuration.enable_${t}_view`)}}},w={class:"display-theme-cards"};function y(t,e,A,T,z,i){const d=s("openwb-base-heading"),l=s("openwb-base-button-group-input"),g=s("openwb-base-text-input"),m=s("openwb-base-select-input"),f=s("openwb-base-range-input");return r(),c("div",w,[a(d,null,{default:o(()=>[...e[15]||(e[15]=[u("Bediensperre",-1)])]),_:1}),a(l,{title:"Bedienung sperren","model-value":t.displayTheme.configuration.lock_changes,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[0]||(e[0]=n=>t.updateConfiguration(n,"configuration.lock_changes"))},{help:o(()=>[...e[16]||(e[16]=[u(' Die Bedienung wird automatisch nach der eingestellten Ausschaltzeit (siehe "Display Standby") wieder gesperrt. ',-1)])]),_:1},8,["model-value"]),t.displayTheme.configuration.lock_changes?(r(),b(g,{key:0,title:"PIN zur Freigabe",subtype:"password",required:"",pattern:"[0-9]{4,10}","model-value":t.displayTheme.configuration.lock_changes_code,"onUpdate:modelValue":e[1]||(e[1]=n=>t.updateConfiguration(n,"configuration.lock_changes_code"))},{help:o(()=>[...e[17]||(e[17]=[u(" Der PIN muss aus 4 bis 10 Zahlen bestehen. ",-1)])]),_:1},8,["model-value"])):p("",!0),a(d,null,{default:o(()=>[...e[18]||(e[18]=[u("Ansichten",-1)])]),_:1}),a(l,{title:"Übersicht anzeigen","model-value":t.displayTheme.configuration.enable_dashboard_view,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[2]||(e[2]=n=>i.toggleView("dashboard"))},null,8,["model-value"]),a(l,{title:"Energiefluss anzeigen","model-value":t.displayTheme.configuration.enable_energy_flow_view,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[3]||(e[3]=n=>i.toggleView("energy_flow"))},null,8,["model-value"]),a(l,{title:"Ladepunkte anzeigen","model-value":t.displayTheme.configuration.enable_charge_points_view,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[4]||(e[4]=n=>i.toggleView("charge_points"))},null,8,["model-value"]),t.displayTheme.configuration.enable_charge_points_view==!0?(r(),b(l,{key:1,title:"Einfache Ansicht der Ladepunkte","model-value":t.displayTheme.configuration.simple_charge_point_view,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[5]||(e[5]=n=>t.updateConfiguration(n,"configuration.simple_charge_point_view"))},null,8,["model-value"])):p("",!0),a(l,{title:"Status anzeigen","model-value":t.displayTheme.configuration.enable_status_view,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[6]||(e[6]=n=>i.toggleView("status"))},null,8,["model-value"]),a(m,{title:"Standardansicht","not-selected":"Bitte auswählen",required:"","model-value":t.displayTheme.configuration.default_view,options:i.enabledViews,"onUpdate:modelValue":e[7]||(e[7]=n=>t.updateConfiguration(n,"configuration.default_view"))},{help:o(()=>[...e[19]||(e[19]=[u(" Die Standardansicht wird beim Start sowie nach einiger Zeit ohne Bedienung angezeigt. ",-1)])]),_:1},8,["model-value","options"]),a(f,{title:"Wechsel zur Standardansicht",min:0,max:6,step:1,"model-value":t.displayTheme.configuration.default_view_timeout,labels:[{value:0,label:"Aus"},{value:60,label:"1 Min"},{value:300,label:"5 Min"},{value:600,label:"10 Min"},{value:900,label:"15 Min"},{value:1800,label:"30 Min"},{value:3600,label:"60 Min"}],"onUpdate:modelValue":e[8]||(e[8]=n=>t.updateConfiguration(n,"configuration.default_view_timeout"))},{help:o(()=>[...e[20]||(e[20]=[u(" Nach dieser Zeit ohne Bedienung wird die Standardansicht angezeigt. ",-1)])]),_:1},8,["model-value"]),a(d,null,{help:o(()=>[...e[21]||(e[21]=[u(' Hier kann festgelegt werden, welche Daten in den Ansichten "Übersicht" und "Energiefluss" angezeigt werden. ',-1)])]),default:o(()=>[e[22]||(e[22]=u(" Datenauswahl ",-1))]),_:1}),a(l,{title:"EVU anzeigen","model-value":t.displayTheme.configuration.enable_dashboard_card_grid,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[9]||(e[9]=n=>t.updateConfiguration(n,"configuration.enable_dashboard_card_grid"))},null,8,["model-value"]),a(l,{title:"Hausverbrauch anzeigen","model-value":t.displayTheme.configuration.enable_dashboard_card_home_consumption,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[10]||(e[10]=n=>t.updateConfiguration(n,"configuration.enable_dashboard_card_home_consumption"))},null,8,["model-value"]),a(l,{title:"PV anzeigen","model-value":t.displayTheme.configuration.enable_dashboard_card_inverter_sum,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[11]||(e[11]=n=>t.updateConfiguration(n,"configuration.enable_dashboard_card_inverter_sum"))},null,8,["model-value"]),a(l,{title:"Batteriespeicher anzeigen","model-value":t.displayTheme.configuration.enable_dashboard_card_battery_sum,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[12]||(e[12]=n=>t.updateConfiguration(n,"configuration.enable_dashboard_card_battery_sum"))},null,8,["model-value"]),a(l,{title:"Ladepunkte anzeigen","model-value":t.displayTheme.configuration.enable_dashboard_card_charge_point_sum,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[13]||(e[13]=n=>t.updateConfiguration(n,"configuration.enable_dashboard_card_charge_point_sum"))},null,8,["model-value"]),a(l,{title:"Fahrzeuge anzeigen","model-value":t.displayTheme.configuration.enable_dashboard_card_vehicles,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[14]||(e[14]=n=>t.updateConfiguration(n,"configuration.enable_dashboard_card_vehicles"))},null,8,["model-value"])])}const E=_(V,[["render",y],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/display_themes/cards/displayTheme.vue"]]);export{E as default}; +import{D as v}from"./DisplayConfiguration-CqMq051X.js";import{_,m as s,l as r,f as c,q as a,u as o,B as u,z as b,x as p}from"./vendor-BwGffBs-.js";import"./index-CE-5DBwq.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const h=[{value:"dashboard",text:"Übersicht"},{value:"energy-flow",text:"Energiefluss"},{value:"charge-points",text:"Ladepunkte"},{value:"status",text:"Status"}],V={name:"DisplayThemeCards",mixins:[v],computed:{enabledViews(){return h.filter(t=>this.displayTheme.configuration[`enable_${t.value.replace("-","_")}_view`])}},methods:{toggleView(t){this.displayTheme.configuration.default_view===t&&this.updateConfiguration(void 0,"configuration.default_view"),this.updateConfiguration(!this.displayTheme.configuration[`enable_${t}_view`],`configuration.enable_${t}_view`)}}},w={class:"display-theme-cards"};function y(t,e,A,T,z,i){const d=s("openwb-base-heading"),l=s("openwb-base-button-group-input"),g=s("openwb-base-text-input"),m=s("openwb-base-select-input"),f=s("openwb-base-range-input");return r(),c("div",w,[a(d,null,{default:o(()=>[...e[15]||(e[15]=[u("Bediensperre",-1)])]),_:1}),a(l,{title:"Bedienung sperren","model-value":t.displayTheme.configuration.lock_changes,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[0]||(e[0]=n=>t.updateConfiguration(n,"configuration.lock_changes"))},{help:o(()=>[...e[16]||(e[16]=[u(' Die Bedienung wird automatisch nach der eingestellten Ausschaltzeit (siehe "Display Standby") wieder gesperrt. ',-1)])]),_:1},8,["model-value"]),t.displayTheme.configuration.lock_changes?(r(),b(g,{key:0,title:"PIN zur Freigabe",subtype:"password",required:"",pattern:"[0-9]{4,10}","model-value":t.displayTheme.configuration.lock_changes_code,"onUpdate:modelValue":e[1]||(e[1]=n=>t.updateConfiguration(n,"configuration.lock_changes_code"))},{help:o(()=>[...e[17]||(e[17]=[u(" Der PIN muss aus 4 bis 10 Zahlen bestehen. ",-1)])]),_:1},8,["model-value"])):p("",!0),a(d,null,{default:o(()=>[...e[18]||(e[18]=[u("Ansichten",-1)])]),_:1}),a(l,{title:"Übersicht anzeigen","model-value":t.displayTheme.configuration.enable_dashboard_view,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[2]||(e[2]=n=>i.toggleView("dashboard"))},null,8,["model-value"]),a(l,{title:"Energiefluss anzeigen","model-value":t.displayTheme.configuration.enable_energy_flow_view,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[3]||(e[3]=n=>i.toggleView("energy_flow"))},null,8,["model-value"]),a(l,{title:"Ladepunkte anzeigen","model-value":t.displayTheme.configuration.enable_charge_points_view,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[4]||(e[4]=n=>i.toggleView("charge_points"))},null,8,["model-value"]),t.displayTheme.configuration.enable_charge_points_view==!0?(r(),b(l,{key:1,title:"Einfache Ansicht der Ladepunkte","model-value":t.displayTheme.configuration.simple_charge_point_view,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[5]||(e[5]=n=>t.updateConfiguration(n,"configuration.simple_charge_point_view"))},null,8,["model-value"])):p("",!0),a(l,{title:"Status anzeigen","model-value":t.displayTheme.configuration.enable_status_view,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[6]||(e[6]=n=>i.toggleView("status"))},null,8,["model-value"]),a(m,{title:"Standardansicht","not-selected":"Bitte auswählen",required:"","model-value":t.displayTheme.configuration.default_view,options:i.enabledViews,"onUpdate:modelValue":e[7]||(e[7]=n=>t.updateConfiguration(n,"configuration.default_view"))},{help:o(()=>[...e[19]||(e[19]=[u(" Die Standardansicht wird beim Start sowie nach einiger Zeit ohne Bedienung angezeigt. ",-1)])]),_:1},8,["model-value","options"]),a(f,{title:"Wechsel zur Standardansicht",min:0,max:6,step:1,"model-value":t.displayTheme.configuration.default_view_timeout,labels:[{value:0,label:"Aus"},{value:60,label:"1 Min"},{value:300,label:"5 Min"},{value:600,label:"10 Min"},{value:900,label:"15 Min"},{value:1800,label:"30 Min"},{value:3600,label:"60 Min"}],"onUpdate:modelValue":e[8]||(e[8]=n=>t.updateConfiguration(n,"configuration.default_view_timeout"))},{help:o(()=>[...e[20]||(e[20]=[u(" Nach dieser Zeit ohne Bedienung wird die Standardansicht angezeigt. ",-1)])]),_:1},8,["model-value"]),a(d,null,{help:o(()=>[...e[21]||(e[21]=[u(' Hier kann festgelegt werden, welche Daten in den Ansichten "Übersicht" und "Energiefluss" angezeigt werden. ',-1)])]),default:o(()=>[e[22]||(e[22]=u(" Datenauswahl ",-1))]),_:1}),a(l,{title:"EVU anzeigen","model-value":t.displayTheme.configuration.enable_dashboard_card_grid,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[9]||(e[9]=n=>t.updateConfiguration(n,"configuration.enable_dashboard_card_grid"))},null,8,["model-value"]),a(l,{title:"Hausverbrauch anzeigen","model-value":t.displayTheme.configuration.enable_dashboard_card_home_consumption,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[10]||(e[10]=n=>t.updateConfiguration(n,"configuration.enable_dashboard_card_home_consumption"))},null,8,["model-value"]),a(l,{title:"PV anzeigen","model-value":t.displayTheme.configuration.enable_dashboard_card_inverter_sum,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[11]||(e[11]=n=>t.updateConfiguration(n,"configuration.enable_dashboard_card_inverter_sum"))},null,8,["model-value"]),a(l,{title:"Batteriespeicher anzeigen","model-value":t.displayTheme.configuration.enable_dashboard_card_battery_sum,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[12]||(e[12]=n=>t.updateConfiguration(n,"configuration.enable_dashboard_card_battery_sum"))},null,8,["model-value"]),a(l,{title:"Ladepunkte anzeigen","model-value":t.displayTheme.configuration.enable_dashboard_card_charge_point_sum,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[13]||(e[13]=n=>t.updateConfiguration(n,"configuration.enable_dashboard_card_charge_point_sum"))},null,8,["model-value"]),a(l,{title:"Fahrzeuge anzeigen","model-value":t.displayTheme.configuration.enable_dashboard_card_vehicles,buttons:[{buttonValue:!1,text:"Aus",class:"btn-outline-danger"},{buttonValue:!0,text:"An",class:"btn-outline-success"}],"onUpdate:modelValue":e[14]||(e[14]=n=>t.updateConfiguration(n,"configuration.enable_dashboard_card_vehicles"))},null,8,["model-value"])])}const E=_(V,[["render",y],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/display_themes/cards/displayTheme.vue"]]);export{E as default}; diff --git a/web/settings/assets/external_inverter-DXVST4jn.js b/web/settings/assets/external_inverter-DswOUFNu.js similarity index 91% rename from web/settings/assets/external_inverter-DXVST4jn.js rename to web/settings/assets/external_inverter-DswOUFNu.js index 815437e33e..8d0cc71d4b 100644 --- a/web/settings/assets/external_inverter-DXVST4jn.js +++ b/web/settings/assets/external_inverter-DswOUFNu.js @@ -1 +1 @@ -import{C as m}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as p,m as i,l as g,f,q as o,u as r,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const b={name:"DeviceSolaredgeExternalInverter",mixins:[m]},c={class:"device-solaredge-external-inverter"};function v(n,e,_,w,x,C){const l=i("openwb-base-heading"),u=i("openwb-base-alert"),a=i("openwb-base-number-input"),d=i("openwb-base-select-input");return g(),f("div",c,[o(l,null,{default:r(()=>[...e[3]||(e[3]=[s(" Einstellungen für SolarEdge externen Wechselrichter ",-1)])]),_:1}),o(u,{subtype:"info"},{default:r(()=>[...e[4]||(e[4]=[s(' Diese Komponente nur konfigurieren, wenn ein weiteres Solaredge SmartMeter verbaut ist, welches z.B. die Leistung einer vorhandenen Bestands-PV-Anlage erfasst. Dieses zusätzliche SmartMeter muss dann als "Zähler 2" / "Position 2" im Wechselrichter-Konfigurationsmenü konfiguriert sein. ',-1)])]),_:1}),o(a,{title:"SolarEdge-Geräte-ID",required:"","model-value":n.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=t=>n.updateConfiguration(t,"configuration.modbus_id"))},null,8,["model-value"]),o(a,{title:"SolarEdge-Meter-ID","model-value":n.component.configuration.meter_id,min:"1",max:"255",required:"","onUpdate:modelValue":e[1]||(e[1]=t=>n.updateConfiguration(t,"configuration.meter_id"))},null,8,["model-value"]),o(d,{title:"Leistung invertieren","not-selected":"Bitte auswählen",options:[{value:1,text:"nein"},{value:-1,text:"ja"}],"model-value":n.component.configuration.factor,"onUpdate:modelValue":e[2]||(e[2]=t=>n.updateConfiguration(t,"configuration.factor"))},{help:r(()=>[...e[5]||(e[5]=[s(" Einige externe SolarEdge Wechselrichter liefern die Leistung mit falschem Vorzeichen. In diesem Fall ist die Leistung zu invertieren. ",-1)])]),_:1},8,["model-value"])])}const L=p(b,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solaredge/solaredge/external_inverter.vue"]]);export{L as default}; +import{C as m}from"./HardwareInstallation-M-k9qNJb.js";import{_ as p,m as i,l as g,f,q as o,u as r,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const b={name:"DeviceSolaredgeExternalInverter",mixins:[m]},c={class:"device-solaredge-external-inverter"};function v(n,e,_,w,x,C){const l=i("openwb-base-heading"),u=i("openwb-base-alert"),a=i("openwb-base-number-input"),d=i("openwb-base-select-input");return g(),f("div",c,[o(l,null,{default:r(()=>[...e[3]||(e[3]=[s(" Einstellungen für SolarEdge externen Wechselrichter ",-1)])]),_:1}),o(u,{subtype:"info"},{default:r(()=>[...e[4]||(e[4]=[s(' Diese Komponente nur konfigurieren, wenn ein weiteres Solaredge SmartMeter verbaut ist, welches z.B. die Leistung einer vorhandenen Bestands-PV-Anlage erfasst. Dieses zusätzliche SmartMeter muss dann als "Zähler 2" / "Position 2" im Wechselrichter-Konfigurationsmenü konfiguriert sein. ',-1)])]),_:1}),o(a,{title:"SolarEdge-Geräte-ID",required:"","model-value":n.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=t=>n.updateConfiguration(t,"configuration.modbus_id"))},null,8,["model-value"]),o(a,{title:"SolarEdge-Meter-ID","model-value":n.component.configuration.meter_id,min:"1",max:"255",required:"","onUpdate:modelValue":e[1]||(e[1]=t=>n.updateConfiguration(t,"configuration.meter_id"))},null,8,["model-value"]),o(d,{title:"Leistung invertieren","not-selected":"Bitte auswählen",options:[{value:1,text:"nein"},{value:-1,text:"ja"}],"model-value":n.component.configuration.factor,"onUpdate:modelValue":e[2]||(e[2]=t=>n.updateConfiguration(t,"configuration.factor"))},{help:r(()=>[...e[5]||(e[5]=[s(" Einige externe SolarEdge Wechselrichter liefern die Leistung mit falschem Vorzeichen. In diesem Fall ist die Leistung zu invertieren. ",-1)])]),_:1},8,["model-value"])])}const L=p(b,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solaredge/solaredge/external_inverter.vue"]]);export{L as default}; diff --git a/web/settings/assets/flexible_tariff-BjheVcQG.js b/web/settings/assets/flexible_tariff-BWVThMmf.js similarity index 93% rename from web/settings/assets/flexible_tariff-BjheVcQG.js rename to web/settings/assets/flexible_tariff-BWVThMmf.js index 043eba6029..167cc457ec 100644 --- a/web/settings/assets/flexible_tariff-BjheVcQG.js +++ b/web/settings/assets/flexible_tariff-BWVThMmf.js @@ -1 +1 @@ -import{F as f}from"./GeneralChargeConfiguration-ZMe157LV.js";import{_ as p,m as l,l as u,f as d,q as o,u as a,B as n,y as m}from"./vendor-BwGffBs-.js";import"./index-Bv2WLdLZ.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const b={name:"FlexibleTariffOstrom",mixins:[f]},c={class:"flexible-tariff-ostrom"};function g(t,e,_,v,w,x){const s=l("openwb-base-alert"),r=l("openwb-base-text-input");return u(),d("div",c,[o(s,{subtype:"info"},{default:a(()=>[...e[3]||(e[3]=[n(" Deine persönlichen Zugangsdaten (Client-ID und Client-Secret) erhältst Du über das ",-1),m("a",{href:"https://developer.ostrom-api.io/",target:"_blank",rel:"noopener noreferrer"}," Ostrom Developer Portal ",-1),n(" . Behandle diese Daten wie ein Passwort, da sich darüber auch persönliche Daten aus Deinem ostrom-Account abfragen lassen! ",-1)])]),_:1}),o(r,{title:"Client-ID",subtype:"user",required:"","model-value":t.flexibleTariff.configuration.client_id,"onUpdate:modelValue":e[0]||(e[0]=i=>t.updateConfiguration(i,"configuration.client_id"))},null,8,["model-value"]),o(r,{title:"Client-Secret",subtype:"password",required:"","model-value":t.flexibleTariff.configuration.client_secret,"onUpdate:modelValue":e[1]||(e[1]=i=>t.updateConfiguration(i,"configuration.client_secret"))},null,8,["model-value"]),o(r,{title:"Postleitzahl","model-value":t.flexibleTariff.configuration.zip,"onUpdate:modelValue":e[2]||(e[2]=i=>t.updateConfiguration(i,"configuration.zip"))},{help:a(()=>[...e[4]||(e[4]=[n(" Die Postleitzahl wird zur Ermittlung der Abgaben und Umlagen benötigt. Ohne Angabe der Postleitzahl wird durch die ostrom API lediglich der Börsenstrompreis einschließlich Mehrwertsteuer geliefert. ",-1)])]),_:1},8,["model-value"])])}const y=p(b,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/ostrom/flexible_tariff.vue"]]);export{y as default}; +import{F as f}from"./GeneralChargeConfiguration-Bukx6MR1.js";import{_ as p,m as l,l as u,f as d,q as o,u as a,B as n,y as m}from"./vendor-BwGffBs-.js";import"./index-CE-5DBwq.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const b={name:"FlexibleTariffOstrom",mixins:[f]},c={class:"flexible-tariff-ostrom"};function g(t,e,_,v,w,x){const s=l("openwb-base-alert"),r=l("openwb-base-text-input");return u(),d("div",c,[o(s,{subtype:"info"},{default:a(()=>[...e[3]||(e[3]=[n(" Deine persönlichen Zugangsdaten (Client-ID und Client-Secret) erhältst Du über das ",-1),m("a",{href:"https://developer.ostrom-api.io/",target:"_blank",rel:"noopener noreferrer"}," Ostrom Developer Portal ",-1),n(" . Behandle diese Daten wie ein Passwort, da sich darüber auch persönliche Daten aus Deinem ostrom-Account abfragen lassen! ",-1)])]),_:1}),o(r,{title:"Client-ID",subtype:"user",required:"","model-value":t.flexibleTariff.configuration.client_id,"onUpdate:modelValue":e[0]||(e[0]=i=>t.updateConfiguration(i,"configuration.client_id"))},null,8,["model-value"]),o(r,{title:"Client-Secret",subtype:"password",required:"","model-value":t.flexibleTariff.configuration.client_secret,"onUpdate:modelValue":e[1]||(e[1]=i=>t.updateConfiguration(i,"configuration.client_secret"))},null,8,["model-value"]),o(r,{title:"Postleitzahl","model-value":t.flexibleTariff.configuration.zip,"onUpdate:modelValue":e[2]||(e[2]=i=>t.updateConfiguration(i,"configuration.zip"))},{help:a(()=>[...e[4]||(e[4]=[n(" Die Postleitzahl wird zur Ermittlung der Abgaben und Umlagen benötigt. Ohne Angabe der Postleitzahl wird durch die ostrom API lediglich der Börsenstrompreis einschließlich Mehrwertsteuer geliefert. ",-1)])]),_:1},8,["model-value"])])}const y=p(b,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/ostrom/flexible_tariff.vue"]]);export{y as default}; diff --git a/web/settings/assets/flexible_tariff-C-gXkgBd.js b/web/settings/assets/flexible_tariff-Bcvd_OKC.js similarity index 91% rename from web/settings/assets/flexible_tariff-C-gXkgBd.js rename to web/settings/assets/flexible_tariff-Bcvd_OKC.js index 066a1d298c..3b8be197b8 100644 --- a/web/settings/assets/flexible_tariff-C-gXkgBd.js +++ b/web/settings/assets/flexible_tariff-Bcvd_OKC.js @@ -1 +1 @@ -import{F as r}from"./GeneralChargeConfiguration-ZMe157LV.js";import{_ as a,m as l,l as s,f,q as n,u,B as p}from"./vendor-BwGffBs-.js";import"./index-Bv2WLdLZ.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const d={name:"FlexibleTariffWestfalenWind",mixins:[r]},m={class:"flexible-tariff-westfalen-wind"};function b(i,e,g,w,c,x){const o=l("openwb-base-text-input");return s(),f("div",m,[n(o,{title:"Benutzername",subtype:"user",required:"","model-value":i.flexibleTariff.configuration.username,"onUpdate:modelValue":e[0]||(e[0]=t=>i.updateConfiguration(t,"configuration.username"))},null,8,["model-value"]),n(o,{title:"Passwort",subtype:"password",required:"","model-value":i.flexibleTariff.configuration.password,"onUpdate:modelValue":e[1]||(e[1]=t=>i.updateConfiguration(t,"configuration.password"))},null,8,["model-value"]),n(o,{title:"Vertrags-Nummer (optional)","model-value":i.flexibleTariff.configuration.contract_id,"onUpdate:modelValue":e[2]||(e[2]=t=>i.updateConfiguration(t,"configuration.contract_id"))},{help:u(()=>[...e[3]||(e[3]=[p(" Bei mehreren Verträgen kann zusätzlich die Vertrags-Nummer angegeben werden, um die Preise dieses Vertrags abzurufen. ",-1)])]),_:1},8,["model-value"])])}const $=a(d,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/westfalen_wind/flexible_tariff.vue"]]);export{$ as default}; +import{F as r}from"./GeneralChargeConfiguration-Bukx6MR1.js";import{_ as a,m as l,l as s,f,q as n,u,B as p}from"./vendor-BwGffBs-.js";import"./index-CE-5DBwq.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const d={name:"FlexibleTariffWestfalenWind",mixins:[r]},m={class:"flexible-tariff-westfalen-wind"};function b(i,e,g,w,c,x){const o=l("openwb-base-text-input");return s(),f("div",m,[n(o,{title:"Benutzername",subtype:"user",required:"","model-value":i.flexibleTariff.configuration.username,"onUpdate:modelValue":e[0]||(e[0]=t=>i.updateConfiguration(t,"configuration.username"))},null,8,["model-value"]),n(o,{title:"Passwort",subtype:"password",required:"","model-value":i.flexibleTariff.configuration.password,"onUpdate:modelValue":e[1]||(e[1]=t=>i.updateConfiguration(t,"configuration.password"))},null,8,["model-value"]),n(o,{title:"Vertrags-Nummer (optional)","model-value":i.flexibleTariff.configuration.contract_id,"onUpdate:modelValue":e[2]||(e[2]=t=>i.updateConfiguration(t,"configuration.contract_id"))},{help:u(()=>[...e[3]||(e[3]=[p(" Bei mehreren Verträgen kann zusätzlich die Vertrags-Nummer angegeben werden, um die Preise dieses Vertrags abzurufen. ",-1)])]),_:1},8,["model-value"])])}const $=a(d,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/westfalen_wind/flexible_tariff.vue"]]);export{$ as default}; diff --git a/web/settings/assets/flexible_tariff-Cy1943RB.js b/web/settings/assets/flexible_tariff-BqHQEaee.js similarity index 96% rename from web/settings/assets/flexible_tariff-Cy1943RB.js rename to web/settings/assets/flexible_tariff-BqHQEaee.js index 04f8fc484b..2440b67ef2 100644 --- a/web/settings/assets/flexible_tariff-Cy1943RB.js +++ b/web/settings/assets/flexible_tariff-BqHQEaee.js @@ -1 +1 @@ -import{F as m}from"./GeneralChargeConfiguration-ZMe157LV.js";import{_ as g,m as u,l as f,f as p,q as l,u as a,B as i,y as o,J as r,x}from"./vendor-BwGffBs-.js";import"./index-Bv2WLdLZ.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const v={name:"FlexibleTariffAwattar",mixins:[m]},T={class:"flexible-tariff-awattar"},w={key:0,class:"mt-3"},B={class:"alert alert-info mb-3"},C={class:"row"},V={class:"col-md-4"},F={class:"col-md-4"},k={class:"col-md-4"};function A(t,e,P,y,S,U){const d=u("openwb-base-select-input"),b=u("openwb-base-button-group-input"),s=u("openwb-base-number-input");return f(),p("div",T,[l(d,{title:"Land","not-selected":"Bitte auswählen",options:[{value:"de",text:"Deutschland"},{value:"at",text:"Österreich"}],"model-value":t.flexibleTariff.configuration.country,"onUpdate:modelValue":e[0]||(e[0]=n=>t.updateConfiguration(n,"configuration.country"))},{help:a(()=>[...e[5]||(e[5]=[i(" Es werden die abgefragten Börsenpreise verwendet, die aWATTar bereitstellt. aWATTar-Gebühren oder Steuern werden nicht berücksichtigt. ",-1)])]),_:1},8,["model-value"]),l(b,{title:"Preisart",buttons:[{buttonValue:!0,text:"Netto"},{buttonValue:!1,text:"Brutto"}],"model-value":t.flexibleTariff.configuration.net??!0,"onUpdate:modelValue":e[1]||(e[1]=n=>t.updateConfiguration(n,"configuration.net"))},{help:a(()=>[...e[6]||(e[6]=[i(" Netto: Reine Börsenpreise ohne Aufschläge",-1),o("br",null,null,-1),i(" Brutto: Börsenpreise mit konfigurierbaren Aufschlägen und MwSt. ",-1)])]),_:1},8,["model-value"]),t.flexibleTariff.configuration.net?x("",!0):(f(),p("div",w,[e[15]||(e[15]=o("h5",{class:"mb-3"},"Preisberechnung",-1)),o("div",B,[e[7]||(e[7]=o("strong",null,"Formel:",-1)),e[8]||(e[8]=o("br",null,null,-1)),i(" Stündliche Preise EPEX Spot® "+r(t.flexibleTariff.configuration.country?.toUpperCase()||"AT"),1),e[9]||(e[9]=o("br",null,null,-1)),i(" + | Stündliche Preise EPEX Spot® "+r(t.flexibleTariff.configuration.country?.toUpperCase()||"AT")+" | × "+r((t.flexibleTariff.configuration.proportional/100||0).toFixed(2))+" ("+r((t.flexibleTariff.configuration.proportional||0).toFixed(0))+"%)",1),e[10]||(e[10]=o("br",null,null,-1)),i(" + "+r((t.flexibleTariff.configuration.fix*1e5||0).toFixed(3))+" Cent/kWh",1),e[11]||(e[11]=o("br",null,null,-1)),i(" + "+r((t.flexibleTariff.configuration.tax||0).toFixed(0))+"% MwSt. ",1)]),o("div",C,[o("div",V,[l(s,{title:"Proportionaler Aufschlag",unit:"%",min:0,max:100,step:.01,"model-value":t.flexibleTariff.configuration.proportional||0,"onUpdate:modelValue":e[2]||(e[2]=n=>t.updateConfiguration(n,"configuration.proportional"))},{help:a(()=>[...e[12]||(e[12]=[i(" Prozentuale Gebühr auf den Börsenpreis (z.B. 3% = 0.03) ",-1)])]),_:1},8,["model-value"])]),o("div",F,[l(s,{title:"Fester Aufschlag",unit:"Cent/kWh",min:0,step:.001,"model-value":t.flexibleTariff.configuration.fix*1e5||0,"onUpdate:modelValue":e[3]||(e[3]=n=>t.updateConfiguration(n/1e5,"configuration.fix"))},{help:a(()=>[...e[13]||(e[13]=[i(" Feste Gebühr pro kWh (z.B. 1,500 Cent/kWh) ",-1)])]),_:1},8,["model-value"])]),o("div",k,[l(s,{title:"Mehrwertsteuer",unit:"%",min:0,max:50,step:.01,"model-value":t.flexibleTariff.configuration.tax||0,"onUpdate:modelValue":e[4]||(e[4]=n=>t.updateConfiguration(n,"configuration.tax"))},{help:a(()=>[...e[14]||(e[14]=[i(" Mehrwertsteuer in Prozent (z.B. 20%) ",-1)])]),_:1},8,["model-value"])])])]))])}const D=g(v,[["render",A],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/awattar/flexible_tariff.vue"]]);export{D as default}; +import{F as m}from"./GeneralChargeConfiguration-Bukx6MR1.js";import{_ as g,m as u,l as f,f as p,q as l,u as a,B as i,y as o,J as r,x}from"./vendor-BwGffBs-.js";import"./index-CE-5DBwq.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const v={name:"FlexibleTariffAwattar",mixins:[m]},T={class:"flexible-tariff-awattar"},w={key:0,class:"mt-3"},B={class:"alert alert-info mb-3"},C={class:"row"},V={class:"col-md-4"},F={class:"col-md-4"},k={class:"col-md-4"};function A(t,e,P,y,S,U){const d=u("openwb-base-select-input"),b=u("openwb-base-button-group-input"),s=u("openwb-base-number-input");return f(),p("div",T,[l(d,{title:"Land","not-selected":"Bitte auswählen",options:[{value:"de",text:"Deutschland"},{value:"at",text:"Österreich"}],"model-value":t.flexibleTariff.configuration.country,"onUpdate:modelValue":e[0]||(e[0]=n=>t.updateConfiguration(n,"configuration.country"))},{help:a(()=>[...e[5]||(e[5]=[i(" Es werden die abgefragten Börsenpreise verwendet, die aWATTar bereitstellt. aWATTar-Gebühren oder Steuern werden nicht berücksichtigt. ",-1)])]),_:1},8,["model-value"]),l(b,{title:"Preisart",buttons:[{buttonValue:!0,text:"Netto"},{buttonValue:!1,text:"Brutto"}],"model-value":t.flexibleTariff.configuration.net??!0,"onUpdate:modelValue":e[1]||(e[1]=n=>t.updateConfiguration(n,"configuration.net"))},{help:a(()=>[...e[6]||(e[6]=[i(" Netto: Reine Börsenpreise ohne Aufschläge",-1),o("br",null,null,-1),i(" Brutto: Börsenpreise mit konfigurierbaren Aufschlägen und MwSt. ",-1)])]),_:1},8,["model-value"]),t.flexibleTariff.configuration.net?x("",!0):(f(),p("div",w,[e[15]||(e[15]=o("h5",{class:"mb-3"},"Preisberechnung",-1)),o("div",B,[e[7]||(e[7]=o("strong",null,"Formel:",-1)),e[8]||(e[8]=o("br",null,null,-1)),i(" Stündliche Preise EPEX Spot® "+r(t.flexibleTariff.configuration.country?.toUpperCase()||"AT"),1),e[9]||(e[9]=o("br",null,null,-1)),i(" + | Stündliche Preise EPEX Spot® "+r(t.flexibleTariff.configuration.country?.toUpperCase()||"AT")+" | × "+r((t.flexibleTariff.configuration.proportional/100||0).toFixed(2))+" ("+r((t.flexibleTariff.configuration.proportional||0).toFixed(0))+"%)",1),e[10]||(e[10]=o("br",null,null,-1)),i(" + "+r((t.flexibleTariff.configuration.fix*1e5||0).toFixed(3))+" Cent/kWh",1),e[11]||(e[11]=o("br",null,null,-1)),i(" + "+r((t.flexibleTariff.configuration.tax||0).toFixed(0))+"% MwSt. ",1)]),o("div",C,[o("div",V,[l(s,{title:"Proportionaler Aufschlag",unit:"%",min:0,max:100,step:.01,"model-value":t.flexibleTariff.configuration.proportional||0,"onUpdate:modelValue":e[2]||(e[2]=n=>t.updateConfiguration(n,"configuration.proportional"))},{help:a(()=>[...e[12]||(e[12]=[i(" Prozentuale Gebühr auf den Börsenpreis (z.B. 3% = 0.03) ",-1)])]),_:1},8,["model-value"])]),o("div",F,[l(s,{title:"Fester Aufschlag",unit:"Cent/kWh",min:0,step:.001,"model-value":t.flexibleTariff.configuration.fix*1e5||0,"onUpdate:modelValue":e[3]||(e[3]=n=>t.updateConfiguration(n/1e5,"configuration.fix"))},{help:a(()=>[...e[13]||(e[13]=[i(" Feste Gebühr pro kWh (z.B. 1,500 Cent/kWh) ",-1)])]),_:1},8,["model-value"])]),o("div",k,[l(s,{title:"Mehrwertsteuer",unit:"%",min:0,max:50,step:.01,"model-value":t.flexibleTariff.configuration.tax||0,"onUpdate:modelValue":e[4]||(e[4]=n=>t.updateConfiguration(n,"configuration.tax"))},{help:a(()=>[...e[14]||(e[14]=[i(" Mehrwertsteuer in Prozent (z.B. 20%) ",-1)])]),_:1},8,["model-value"])])])]))])}const D=g(v,[["render",A],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/awattar/flexible_tariff.vue"]]);export{D as default}; diff --git a/web/settings/assets/flexible_tariff-sJj9lops.js b/web/settings/assets/flexible_tariff-CP3GV2na.js similarity index 91% rename from web/settings/assets/flexible_tariff-sJj9lops.js rename to web/settings/assets/flexible_tariff-CP3GV2na.js index 55a820231f..5884b4df72 100644 --- a/web/settings/assets/flexible_tariff-sJj9lops.js +++ b/web/settings/assets/flexible_tariff-CP3GV2na.js @@ -1 +1 @@ -import{F as a}from"./GeneralChargeConfiguration-ZMe157LV.js";import{_ as s,m as l,l as f,f as p,q as o,u,B as d}from"./vendor-BwGffBs-.js";import"./index-Bv2WLdLZ.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const c={name:"FlexibleTariffVoltego",mixins:[a]},m={class:"flexible-tariff-voltego"};function b(t,e,_,g,x,v){const r=l("openwb-base-alert"),n=l("openwb-base-text-input");return f(),p("div",m,[o(r,{subtype:"info"},{default:u(()=>[...e[2]||(e[2]=[d(" Deine persönlichen Zugangsdaten (Client-ID und Client-Secret) erhältst Du direkt von Voltego. Behandle diese Daten wie ein Passwort, da sich darüber auch persönliche Daten aus Deinem Voltego-Account abfragen lassen! ",-1)])]),_:1}),o(n,{title:"Client-ID",subtype:"user",required:"","model-value":t.flexibleTariff.configuration.client_id,"onUpdate:modelValue":e[0]||(e[0]=i=>t.updateConfiguration(i,"configuration.client_id"))},null,8,["model-value"]),o(n,{title:"Client-Secret",subtype:"password",required:"","model-value":t.flexibleTariff.configuration.client_secret,"onUpdate:modelValue":e[1]||(e[1]=i=>t.updateConfiguration(i,"configuration.client_secret"))},null,8,["model-value"])])}const h=s(c,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/voltego/flexible_tariff.vue"]]);export{h as default}; +import{F as a}from"./GeneralChargeConfiguration-Bukx6MR1.js";import{_ as s,m as l,l as f,f as p,q as o,u,B as d}from"./vendor-BwGffBs-.js";import"./index-CE-5DBwq.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const c={name:"FlexibleTariffVoltego",mixins:[a]},m={class:"flexible-tariff-voltego"};function b(t,e,_,g,x,v){const r=l("openwb-base-alert"),n=l("openwb-base-text-input");return f(),p("div",m,[o(r,{subtype:"info"},{default:u(()=>[...e[2]||(e[2]=[d(" Deine persönlichen Zugangsdaten (Client-ID und Client-Secret) erhältst Du direkt von Voltego. Behandle diese Daten wie ein Passwort, da sich darüber auch persönliche Daten aus Deinem Voltego-Account abfragen lassen! ",-1)])]),_:1}),o(n,{title:"Client-ID",subtype:"user",required:"","model-value":t.flexibleTariff.configuration.client_id,"onUpdate:modelValue":e[0]||(e[0]=i=>t.updateConfiguration(i,"configuration.client_id"))},null,8,["model-value"]),o(n,{title:"Client-Secret",subtype:"password",required:"","model-value":t.flexibleTariff.configuration.client_secret,"onUpdate:modelValue":e[1]||(e[1]=i=>t.updateConfiguration(i,"configuration.client_secret"))},null,8,["model-value"])])}const h=s(c,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/voltego/flexible_tariff.vue"]]);export{h as default}; diff --git a/web/settings/assets/flexible_tariff--nXtDno3.js b/web/settings/assets/flexible_tariff-CrPL3_fr.js similarity index 97% rename from web/settings/assets/flexible_tariff--nXtDno3.js rename to web/settings/assets/flexible_tariff-CrPL3_fr.js index 648b480009..75d5d9acb5 100644 --- a/web/settings/assets/flexible_tariff--nXtDno3.js +++ b/web/settings/assets/flexible_tariff-CrPL3_fr.js @@ -1 +1 @@ -import{a as m}from"./vendor-axios-C0vEeTtS.js";import{F as g}from"./GeneralChargeConfiguration-ZMe157LV.js";import{_ as c,m as a,l as p,f as h,q as n,u as r,B as i}from"./vendor-BwGffBs-.js";import"./index-Bv2WLdLZ.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./dynamic-import-helper-BheWnx7M.js";const w={name:"FlexibleTariffRabot",mixins:[g],data(){return{contractNumbers:[]}},computed:{contractOptions(){const t=this.contractNumbers.map(e=>({value:e,text:e}));return t.length===0&&this.flexibleTariff.configuration.contract_number&&t.push({value:this.flexibleTariff.configuration.contract_number,text:this.flexibleTariff.configuration.contract_number}),t}},methods:{rabot_login_window(){const t=window.open("about:blank","RabotLogin","width=800,height=600,status=yes,scrollbars=yes,resizable=yes");t.focus(),this.createAuthUrl().then(e=>{t.location.href=e.authorizationUrl}).catch(e=>{t.close(),console.error("Fehler beim Erstellen des Rabot-Links:",e),this.$root.postClientMessage("Fehler beim Erstellen der Rabot-Authentifizierung: "+(e.response?.data?.message||e.message),"danger")})},async createAuthUrl(){const t=await m.post("https://rabot.openwb.de/rabot-auth.php",{headers:{"Content-Type":"application/json"}});if(!t.data.success)throw new Error("Server-Fehler beim Erstellen der Rabot-Authentifizierung");return t.data},async fetch_contract_number(){if(!this.flexibleTariff.configuration.customer_number){this.$root.postClientMessage("Bitte gib zuerst eine Kundennummer ein.","warning");return}try{const t=await m.get(`https://rabot.openwb.de/rabot-proxy.php/customers/${this.flexibleTariff.configuration.customer_number}/contracts`,{headers:{"Content-Type":"application/json"}});if(t.data&&t.data.contractNumbers&&t.data.contractNumbers.length>0){const e=t.data.contractNumbers;this.contractNumbers=e;const o=e[0];this.updateConfiguration(o,"configuration.contract_number"),e.length>1?this.$root.postClientMessage(`${e.length} Verträge gefunden. Erster Vertrag ausgewählt: ${o}. Du kannst einen anderen Vertrag aus der Liste wählen.`,"success"):this.$root.postClientMessage("Vertragsnummer erfolgreich abgerufen: "+o,"success")}else this.$root.postClientMessage("Keine Verträge für diese Kundennummer gefunden.","warning")}catch(t){console.error("Fehler beim Abrufen der Vertragsnummer:",t),this.$root.postClientMessage("Fehler beim Abrufen der Vertragsnummer: "+(t.response?.data?.message||t.message),"danger")}}}},_={class:"flexible-tariff-rabot"};function x(t,e,o,C,V,s){const l=a("openwb-base-alert"),f=a("openwb-base-button-input"),b=a("openwb-base-text-input"),d=a("openwb-base-select-input");return p(),h("div",_,[n(l,{subtype:"info"},{default:r(()=>[...e[3]||(e[3]=[i(" Über die Rabot-Authentifizierung kannst Du Deine Stromtarif-Daten für die Ladeplanung nutzen. Nach der Anmeldung bei Rabot wird eine Kundennummer in der Adresszeile angezeigt, die Du hier einfügen musst. ",-1)])]),_:1}),n(l,{subtype:"warning"},{default:r(()=>[...e[4]||(e[4]=[i(" Das Eintragen von Kunden- und Vertragsnummer ist nicht ausreichend, da nach der Anmeldung bei Rabot noch die Zustimmung erteilt werden muss. ",-1)])]),_:1}),n(f,{title:"1. Bei Rabot anmelden","button-text":"Bei Rabot Anmelden",subtype:"success",onButtonClicked:e[0]||(e[0]=()=>s.rabot_login_window())},{help:r(()=>[...e[5]||(e[5]=[i(" Es wird ein neues Browserfenster geöffnet, in dem Du Dich bei Rabot mit Deinen Zugangsdaten anmelden kannst. ",-1)])]),_:1}),n(b,{title:"2. Kundennummer kopieren und einfügen",required:"","model-value":t.flexibleTariff.configuration.customer_number,"onUpdate:modelValue":e[1]||(e[1]=u=>t.updateConfiguration(u,"configuration.customer_number"))},{help:r(()=>[...e[6]||(e[6]=[i(" Nachdem die Rabot-Authentifizierung abgeschlossen wurde, wird im geöffneten Browserfenster eine Kundennummer angezeigt. Diese kopieren und hier einfügen. Diese wird benötigt, um auf Ihre Tarif-Daten zugreifen zu können. ",-1)])]),_:1},8,["model-value"]),n(f,{title:"3. Vertragsnummer abrufen","button-text":"Vertrag laden",subtype:"info",disabled:!t.flexibleTariff.configuration.customer_number,onButtonClicked:s.fetch_contract_number},{help:r(()=>[...e[7]||(e[7]=[i(" Mit der Kundennummer wird automatisch die zugehörige Vertragsnummer von Rabot abgerufen. ",-1)])]),_:1},8,["disabled","onButtonClicked"]),n(d,{title:"Vertragsnummer",options:s.contractOptions,"model-value":t.flexibleTariff.configuration.contract_number,"onUpdate:modelValue":e[2]||(e[2]=u=>t.updateConfiguration(u,"configuration.contract_number"))},{help:r(()=>[...e[8]||(e[8]=[i(" Wähle eine der verfügbaren Vertragsnummern aus. Diese wird für den Zugriff auf die Tarif-Daten benötigt. ",-1)])]),_:1},8,["options","model-value"])])}const B=c(w,[["render",x],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/rabot/flexible_tariff.vue"]]);export{B as default}; +import{a as m}from"./vendor-axios-C0vEeTtS.js";import{F as g}from"./GeneralChargeConfiguration-Bukx6MR1.js";import{_ as c,m as a,l as p,f as h,q as n,u as r,B as i}from"./vendor-BwGffBs-.js";import"./index-CE-5DBwq.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./dynamic-import-helper-BheWnx7M.js";const w={name:"FlexibleTariffRabot",mixins:[g],data(){return{contractNumbers:[]}},computed:{contractOptions(){const t=this.contractNumbers.map(e=>({value:e,text:e}));return t.length===0&&this.flexibleTariff.configuration.contract_number&&t.push({value:this.flexibleTariff.configuration.contract_number,text:this.flexibleTariff.configuration.contract_number}),t}},methods:{rabot_login_window(){const t=window.open("about:blank","RabotLogin","width=800,height=600,status=yes,scrollbars=yes,resizable=yes");t.focus(),this.createAuthUrl().then(e=>{t.location.href=e.authorizationUrl}).catch(e=>{t.close(),console.error("Fehler beim Erstellen des Rabot-Links:",e),this.$root.postClientMessage("Fehler beim Erstellen der Rabot-Authentifizierung: "+(e.response?.data?.message||e.message),"danger")})},async createAuthUrl(){const t=await m.post("https://rabot.openwb.de/rabot-auth.php",{headers:{"Content-Type":"application/json"}});if(!t.data.success)throw new Error("Server-Fehler beim Erstellen der Rabot-Authentifizierung");return t.data},async fetch_contract_number(){if(!this.flexibleTariff.configuration.customer_number){this.$root.postClientMessage("Bitte gib zuerst eine Kundennummer ein.","warning");return}try{const t=await m.get(`https://rabot.openwb.de/rabot-proxy.php/customers/${this.flexibleTariff.configuration.customer_number}/contracts`,{headers:{"Content-Type":"application/json"}});if(t.data&&t.data.contractNumbers&&t.data.contractNumbers.length>0){const e=t.data.contractNumbers;this.contractNumbers=e;const o=e[0];this.updateConfiguration(o,"configuration.contract_number"),e.length>1?this.$root.postClientMessage(`${e.length} Verträge gefunden. Erster Vertrag ausgewählt: ${o}. Du kannst einen anderen Vertrag aus der Liste wählen.`,"success"):this.$root.postClientMessage("Vertragsnummer erfolgreich abgerufen: "+o,"success")}else this.$root.postClientMessage("Keine Verträge für diese Kundennummer gefunden.","warning")}catch(t){console.error("Fehler beim Abrufen der Vertragsnummer:",t),this.$root.postClientMessage("Fehler beim Abrufen der Vertragsnummer: "+(t.response?.data?.message||t.message),"danger")}}}},_={class:"flexible-tariff-rabot"};function x(t,e,o,C,V,s){const l=a("openwb-base-alert"),f=a("openwb-base-button-input"),b=a("openwb-base-text-input"),d=a("openwb-base-select-input");return p(),h("div",_,[n(l,{subtype:"info"},{default:r(()=>[...e[3]||(e[3]=[i(" Über die Rabot-Authentifizierung kannst Du Deine Stromtarif-Daten für die Ladeplanung nutzen. Nach der Anmeldung bei Rabot wird eine Kundennummer in der Adresszeile angezeigt, die Du hier einfügen musst. ",-1)])]),_:1}),n(l,{subtype:"warning"},{default:r(()=>[...e[4]||(e[4]=[i(" Das Eintragen von Kunden- und Vertragsnummer ist nicht ausreichend, da nach der Anmeldung bei Rabot noch die Zustimmung erteilt werden muss. ",-1)])]),_:1}),n(f,{title:"1. Bei Rabot anmelden","button-text":"Bei Rabot Anmelden",subtype:"success",onButtonClicked:e[0]||(e[0]=()=>s.rabot_login_window())},{help:r(()=>[...e[5]||(e[5]=[i(" Es wird ein neues Browserfenster geöffnet, in dem Du Dich bei Rabot mit Deinen Zugangsdaten anmelden kannst. ",-1)])]),_:1}),n(b,{title:"2. Kundennummer kopieren und einfügen",required:"","model-value":t.flexibleTariff.configuration.customer_number,"onUpdate:modelValue":e[1]||(e[1]=u=>t.updateConfiguration(u,"configuration.customer_number"))},{help:r(()=>[...e[6]||(e[6]=[i(" Nachdem die Rabot-Authentifizierung abgeschlossen wurde, wird im geöffneten Browserfenster eine Kundennummer angezeigt. Diese kopieren und hier einfügen. Diese wird benötigt, um auf Ihre Tarif-Daten zugreifen zu können. ",-1)])]),_:1},8,["model-value"]),n(f,{title:"3. Vertragsnummer abrufen","button-text":"Vertrag laden",subtype:"info",disabled:!t.flexibleTariff.configuration.customer_number,onButtonClicked:s.fetch_contract_number},{help:r(()=>[...e[7]||(e[7]=[i(" Mit der Kundennummer wird automatisch die zugehörige Vertragsnummer von Rabot abgerufen. ",-1)])]),_:1},8,["disabled","onButtonClicked"]),n(d,{title:"Vertragsnummer",options:s.contractOptions,"model-value":t.flexibleTariff.configuration.contract_number,"onUpdate:modelValue":e[2]||(e[2]=u=>t.updateConfiguration(u,"configuration.contract_number"))},{help:r(()=>[...e[8]||(e[8]=[i(" Wähle eine der verfügbaren Vertragsnummern aus. Diese wird für den Zugriff auf die Tarif-Daten benötigt. ",-1)])]),_:1},8,["options","model-value"])])}const B=c(w,[["render",x],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/rabot/flexible_tariff.vue"]]);export{B as default}; diff --git a/web/settings/assets/flexible_tariff-BYbDwmy0.js b/web/settings/assets/flexible_tariff-Cvv-oNUn.js similarity index 88% rename from web/settings/assets/flexible_tariff-BYbDwmy0.js rename to web/settings/assets/flexible_tariff-Cvv-oNUn.js index 5759334456..3bb71c65b7 100644 --- a/web/settings/assets/flexible_tariff-BYbDwmy0.js +++ b/web/settings/assets/flexible_tariff-Cvv-oNUn.js @@ -1 +1 @@ -import{F as o}from"./GeneralChargeConfiguration-ZMe157LV.js";import{_ as a,m as n,l as s,f as l,q as p,u as f,B as e,y as t}from"./vendor-BwGffBs-.js";import"./index-Bv2WLdLZ.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const u={name:"FlexibleTariffGroupeE",mixins:[o]},c={class:"flexible-tariff-groupe-e"};function m(_,r,d,b,x,g){const i=n("openwb-base-alert");return s(),l("div",c,[p(i,{subtype:"info"},{default:f(()=>[...r[0]||(r[0]=[e(" Tarif Vario der Groupe E (Westschweiz) - www.groupe-e.ch/de/strom/vario ",-1),t("br",null,null,-1),e(" Der Tarif passt sich alle 15 Minuten an, abhängig von der aktuellen Netzauslastung und dem Marktpreis. ",-1),t("br",null,null,-1),e(" Die Preise für den nächsten Tag werden jeweils am Vortag um 18 Uhr publiziert. ",-1)])]),_:1})])}const $=a(u,[["render",m],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/groupe_e/flexible_tariff.vue"]]);export{$ as default}; +import{F as o}from"./GeneralChargeConfiguration-Bukx6MR1.js";import{_ as a,m as n,l as s,f as l,q as p,u as f,B as e,y as t}from"./vendor-BwGffBs-.js";import"./index-CE-5DBwq.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const u={name:"FlexibleTariffGroupeE",mixins:[o]},c={class:"flexible-tariff-groupe-e"};function m(_,r,d,b,x,g){const i=n("openwb-base-alert");return s(),l("div",c,[p(i,{subtype:"info"},{default:f(()=>[...r[0]||(r[0]=[e(" Tarif Vario der Groupe E (Westschweiz) - www.groupe-e.ch/de/strom/vario ",-1),t("br",null,null,-1),e(" Der Tarif passt sich alle 15 Minuten an, abhängig von der aktuellen Netzauslastung und dem Marktpreis. ",-1),t("br",null,null,-1),e(" Die Preise für den nächsten Tag werden jeweils am Vortag um 18 Uhr publiziert. ",-1)])]),_:1})])}const $=a(u,[["render",m],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/groupe_e/flexible_tariff.vue"]]);export{$ as default}; diff --git a/web/settings/assets/flexible_tariff-CPgSVk1T.js b/web/settings/assets/flexible_tariff-DUetUvJg.js similarity index 96% rename from web/settings/assets/flexible_tariff-CPgSVk1T.js rename to web/settings/assets/flexible_tariff-DUetUvJg.js index 6472027c39..c074108b0e 100644 --- a/web/settings/assets/flexible_tariff-CPgSVk1T.js +++ b/web/settings/assets/flexible_tariff-DUetUvJg.js @@ -1 +1 @@ -import{F as c}from"./GeneralChargeConfiguration-ZMe157LV.js";import{_ as m,m as s,l as g,f as _,q as r,u as h,B as l,y as T}from"./vendor-BwGffBs-.js";import"./index-Bv2WLdLZ.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const x={name:"FlexibleTariffTibber",mixins:[c],data(){return{tibberAPI:"https://api.tibber.com/v1-beta/gql",tibberHomeList:[]}},methods:{async getTibberHomeList(){if(this.flexibleTariff.configuration.token===null)return;const i='{ "query": "{viewer {homes{id address{address1 address2 address3 postalCode city country}}}}" }';try{const e=await this.axios.post(this.tibberAPI,i,{headers:{Authorization:"Bearer "+this.flexibleTariff.configuration.token,"Content-Type":"application/json"}});this.tibberHomeList=e.data.data.viewer.homes.map(t=>{let n=t.address.address1;return t.address.address2&&(n=n+", "+t.address.address2),t.address.address3&&(n=n+", "+t.address.address3),n=n+`, ${t.address.postalCode} ${t.address.city}, ${t.address.country}`,{value:t.id,text:n}}),this.flexibleTariff.configuration.home_id||this.updateConfiguration(this.tibberHomeList[0].value,"configuration.home_id"),this.$root.postClientMessage("Home IDs erfolgreich abgerufen.","success")}catch(e){console.error(e),this.$root.postClientMessage("Beim Abfragen der Tibber API ist ein Fehler aufgetreten!
"+e+"
","danger")}}}},k={class:"flexible-tariff-tibber"};function v(i,e,t,n,d,b){const u=s("openwb-base-alert"),a=s("openwb-base-text-input"),f=s("openwb-base-button-input"),p=s("openwb-base-select-input");return g(),_("div",k,[r(u,{subtype:"info"},{default:h(()=>[...e[3]||(e[3]=[l(" Deinen persönlichen Tibber-Token erhältst Du über die ",-1),T("a",{href:"https://developer.tibber.com/explorer",target:"_blank",rel:"noopener noreferrer"}," Tibber-Developer-Seite ",-1),l(" . Behandle Deinen Token wie ein Passwort, da sich darüber auch persönliche Daten aus Deinem Tibber-Account abfragen lassen! Die Home-ID kannst Du (wenn bekannt) in das Eingabefeld selbst eintragen oder nach Eingabe Deines Token durch Klick auf den Button von der openWB ermitteln lassen. Unerlaubte Zeichen werden aus dem Token und der Home-ID automatisch gelöscht. ",-1)])]),_:1}),r(a,{ref:"tokenInput",title:"Token",required:"","model-value":i.flexibleTariff.configuration.token,"onUpdate:modelValue":e[0]||(e[0]=o=>i.updateConfiguration(o,"configuration.token"))},null,8,["model-value"]),r(f,{title:"Home-IDs abrufen","button-text":"Jetzt abrufen",subtype:"success",disabled:!i.flexibleTariff.configuration.token?.length,onButtonClicked:b.getTibberHomeList},null,8,["disabled","onButtonClicked"]),r(p,{title:"Verfügbare Home-IDs",options:d.tibberHomeList,"model-value":i.flexibleTariff.configuration.home_id,"onUpdate:modelValue":e[1]||(e[1]=o=>i.updateConfiguration(o,"configuration.home_id"))},null,8,["options","model-value"]),r(a,{title:"Home-ID",required:"","model-value":i.flexibleTariff.configuration.home_id,"onUpdate:modelValue":e[2]||(e[2]=o=>i.updateConfiguration(o,"configuration.home_id"))},null,8,["model-value"])])}const $=m(x,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/tibber/flexible_tariff.vue"]]);export{$ as default}; +import{F as c}from"./GeneralChargeConfiguration-Bukx6MR1.js";import{_ as m,m as s,l as g,f as _,q as r,u as h,B as l,y as T}from"./vendor-BwGffBs-.js";import"./index-CE-5DBwq.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const x={name:"FlexibleTariffTibber",mixins:[c],data(){return{tibberAPI:"https://api.tibber.com/v1-beta/gql",tibberHomeList:[]}},methods:{async getTibberHomeList(){if(this.flexibleTariff.configuration.token===null)return;const i='{ "query": "{viewer {homes{id address{address1 address2 address3 postalCode city country}}}}" }';try{const e=await this.axios.post(this.tibberAPI,i,{headers:{Authorization:"Bearer "+this.flexibleTariff.configuration.token,"Content-Type":"application/json"}});this.tibberHomeList=e.data.data.viewer.homes.map(t=>{let n=t.address.address1;return t.address.address2&&(n=n+", "+t.address.address2),t.address.address3&&(n=n+", "+t.address.address3),n=n+`, ${t.address.postalCode} ${t.address.city}, ${t.address.country}`,{value:t.id,text:n}}),this.flexibleTariff.configuration.home_id||this.updateConfiguration(this.tibberHomeList[0].value,"configuration.home_id"),this.$root.postClientMessage("Home IDs erfolgreich abgerufen.","success")}catch(e){console.error(e),this.$root.postClientMessage("Beim Abfragen der Tibber API ist ein Fehler aufgetreten!
"+e+"
","danger")}}}},k={class:"flexible-tariff-tibber"};function v(i,e,t,n,d,b){const u=s("openwb-base-alert"),a=s("openwb-base-text-input"),f=s("openwb-base-button-input"),p=s("openwb-base-select-input");return g(),_("div",k,[r(u,{subtype:"info"},{default:h(()=>[...e[3]||(e[3]=[l(" Deinen persönlichen Tibber-Token erhältst Du über die ",-1),T("a",{href:"https://developer.tibber.com/explorer",target:"_blank",rel:"noopener noreferrer"}," Tibber-Developer-Seite ",-1),l(" . Behandle Deinen Token wie ein Passwort, da sich darüber auch persönliche Daten aus Deinem Tibber-Account abfragen lassen! Die Home-ID kannst Du (wenn bekannt) in das Eingabefeld selbst eintragen oder nach Eingabe Deines Token durch Klick auf den Button von der openWB ermitteln lassen. Unerlaubte Zeichen werden aus dem Token und der Home-ID automatisch gelöscht. ",-1)])]),_:1}),r(a,{ref:"tokenInput",title:"Token",required:"","model-value":i.flexibleTariff.configuration.token,"onUpdate:modelValue":e[0]||(e[0]=o=>i.updateConfiguration(o,"configuration.token"))},null,8,["model-value"]),r(f,{title:"Home-IDs abrufen","button-text":"Jetzt abrufen",subtype:"success",disabled:!i.flexibleTariff.configuration.token?.length,onButtonClicked:b.getTibberHomeList},null,8,["disabled","onButtonClicked"]),r(p,{title:"Verfügbare Home-IDs",options:d.tibberHomeList,"model-value":i.flexibleTariff.configuration.home_id,"onUpdate:modelValue":e[1]||(e[1]=o=>i.updateConfiguration(o,"configuration.home_id"))},null,8,["options","model-value"]),r(a,{title:"Home-ID",required:"","model-value":i.flexibleTariff.configuration.home_id,"onUpdate:modelValue":e[2]||(e[2]=o=>i.updateConfiguration(o,"configuration.home_id"))},null,8,["model-value"])])}const $=m(x,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/tibber/flexible_tariff.vue"]]);export{$ as default}; diff --git a/web/settings/assets/flexible_tariff-DD91qbM9.js b/web/settings/assets/flexible_tariff-XtSMwM0l.js similarity index 89% rename from web/settings/assets/flexible_tariff-DD91qbM9.js rename to web/settings/assets/flexible_tariff-XtSMwM0l.js index 626ea625a6..4e144ecf69 100644 --- a/web/settings/assets/flexible_tariff-DD91qbM9.js +++ b/web/settings/assets/flexible_tariff-XtSMwM0l.js @@ -1 +1 @@ -import{F as n}from"./GeneralChargeConfiguration-ZMe157LV.js";import{_ as a,m as s,l,f as o,q as f,u as p,B as e,y as t}from"./vendor-BwGffBs-.js";import"./index-Bv2WLdLZ.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const c={name:"FlexibleTariffEkz",mixins:[n]},m={class:"flexible-tariff-ekz"};function u(d,r,_,b,x,h){const i=s("openwb-base-alert");return l(),o("div",m,[f(i,{subtype:"info"},{default:p(()=>[...r[0]||(r[0]=[e(" Dynamischer Tarif der Elektrizitätswerke des Kantons Zürich (EKZ) - www.ekz.ch/de/privatkunden/strom/tarife/dynamischer-wahltarif.html ",-1),t("br",null,null,-1),e(" Der Tarif passt sich alle 15 Minuten an, abhängig von der aktuellen Netzauslastung und dem Marktpreis. ",-1),t("br",null,null,-1),e(" Die Preise für den nächsten Tag werden jeweils am Vortag um 18 Uhr publiziert. ",-1),t("br",null,null,-1)])]),_:1})])}const E=a(c,[["render",u],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/ekz/flexible_tariff.vue"]]);export{E as default}; +import{F as n}from"./GeneralChargeConfiguration-Bukx6MR1.js";import{_ as a,m as s,l,f as o,q as f,u as p,B as e,y as t}from"./vendor-BwGffBs-.js";import"./index-CE-5DBwq.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const c={name:"FlexibleTariffEkz",mixins:[n]},m={class:"flexible-tariff-ekz"};function u(d,r,_,b,x,h){const i=s("openwb-base-alert");return l(),o("div",m,[f(i,{subtype:"info"},{default:p(()=>[...r[0]||(r[0]=[e(" Dynamischer Tarif der Elektrizitätswerke des Kantons Zürich (EKZ) - www.ekz.ch/de/privatkunden/strom/tarife/dynamischer-wahltarif.html ",-1),t("br",null,null,-1),e(" Der Tarif passt sich alle 15 Minuten an, abhängig von der aktuellen Netzauslastung und dem Marktpreis. ",-1),t("br",null,null,-1),e(" Die Preise für den nächsten Tag werden jeweils am Vortag um 18 Uhr publiziert. ",-1),t("br",null,null,-1)])]),_:1})])}const E=a(c,[["render",u],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/ekz/flexible_tariff.vue"]]);export{E as default}; diff --git a/web/settings/assets/flexible_tariff-CuMmB510.js b/web/settings/assets/flexible_tariff-d9extQ6-.js similarity index 96% rename from web/settings/assets/flexible_tariff-CuMmB510.js rename to web/settings/assets/flexible_tariff-d9extQ6-.js index c3917e0a28..7b6401ab40 100644 --- a/web/settings/assets/flexible_tariff-CuMmB510.js +++ b/web/settings/assets/flexible_tariff-d9extQ6-.js @@ -1 +1 @@ -import{F as D}from"./GeneralChargeConfiguration-ZMe157LV.js";import{_ as $,l as r,f as p,y as u,j as x,m as s,z as w,D as W,u as n,q as o,A as F,B as m,x as C,K as y,L as V,E as q,J as S,M as z}from"./vendor-BwGffBs-.js";import{F as O,l as T,d as B,al as U}from"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const E={name:"TimeRow"},H={class:"w-100"},M={class:"form-row align-items-center"},N={class:"col-10"},I={class:"form-row"},Q={class:"col-6"},Z={class:"col-6"},K={class:"col-2 text-right"};function P(t,e,c,b,g,a){return r(),p("div",H,[u("div",M,[u("div",N,[u("div",I,[u("div",Q,[x(t.$slots,"start")]),u("div",Z,[x(t.$slots,"end")])])]),u("div",K,[x(t.$slots,"action")])])])}const R=$(E,[["render",P],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/fixed_hours/TimeRow.vue"]]);T.add(B);T.add(U);const j={name:"TimeTable",components:{FontAwesomeIcon:O,TimeRow:R},inheritAttrs:!1,props:{title:{type:String,required:!0},modelValue:{type:Array,default:()=>[]}},emits:["update:modelValue"],data(){return{endOptions:this.modelValue.map(()=>this.generateTimeOptions("01:00","24:00"))}},computed:{value:{get(){return this.modelValue},set(t){this.$emit("update:modelValue",t)}}},methods:{generateTimeOptions(t,e){const c=[],b=parseInt(t.split(":")[0],10),g=parseInt(e.split(":")[0],10);for(let a=b;a<=g;a++){const d=`${a.toString().padStart(2,"0")}:00`;c.push({value:d,text:d})}return c},addTime(){this.value.push(["",""])},removeTime(t){this.value.splice(t,1)},updateEndOptions(t){const e=this.value[t][0];if(e){const b=(parseInt(e.split(":")[0],10)+1).toString().padStart(2,"0")+":00";this.endOptions[t]=this.generateTimeOptions(b,"24:00")}else this.endOptions[t]=this.generateTimeOptions("01:00","24:00")}}},L={key:0,class:"w-100 alert alert-danger"},J=["onUpdate:modelValue","onChange"],G=["value"],X=["onUpdate:modelValue"],Y=["value"];function ee(t,e,c,b,g,a){const _=s("font-awesome-icon"),d=s("openwb-base-avatar"),h=s("time-row"),k=s("openwb-base-setting-element");return r(),w(k,null,W({title:n(()=>[x(t.$slots,"title",{},()=>[m(S(c.title),1)])]),default:n(()=>[o(h,null,{start:n(()=>[...e[0]||(e[0]=[m(" Beginn ",-1)])]),end:n(()=>[...e[1]||(e[1]=[m(" Ende ",-1)])]),action:n(()=>[o(d,{class:"bg-success clickable",title:"Zeitbereich hinzufügen",onClick:F(a.addTime,["stop"])},{default:n(()=>[o(_,{icon:["fas","plus"]})]),_:1},8,["onClick"])]),_:1}),a.value.length===0?(r(),p("div",L," Keine Zeitbereiche definiert! ")):C("",!0),(r(!0),p(y,null,V(a.value,(f,v)=>(r(),w(h,{key:v},{start:n(()=>[q(u("select",{"onUpdate:modelValue":i=>f[0]=i,class:"form-control",required:"",onChange:i=>a.updateEndOptions(v)},[e[2]||(e[2]=u("option",{value:"",disabled:""}," -- Bitte auswählen -- ",-1)),(r(!0),p(y,null,V(a.generateTimeOptions("00:00","23:00"),i=>(r(),p("option",{key:i.value,value:i.value},S(i.text),9,G))),128))],40,J),[[z,f[0]]])]),end:n(()=>[q(u("select",{"onUpdate:modelValue":i=>f[1]=i,class:"form-control",required:""},[e[3]||(e[3]=u("option",{value:"",disabled:""}," -- Bitte auswählen -- ",-1)),(r(!0),p(y,null,V(g.endOptions[v],i=>(r(),p("option",{key:i.value,value:i.value},S(i.text),9,Y))),128))],8,X),[[z,f[1]]])]),action:n(()=>[a.value.length>1?(r(),w(d,{key:0,class:"bg-danger clickable",title:"Zeitbereich entfernen",onClick:F(i=>a.removeTime(v),["stop"])},{default:n(()=>[o(_,{icon:["fas","trash"]})]),_:1},8,["onClick"])):C("",!0)]),_:2},1024))),128))]),_:2},[t.$slots.help?{name:"help",fn:n(()=>[x(t.$slots,"help")]),key:"0"}:void 0]),1024)}const te=$(j,[["render",ee],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/fixed_hours/TimeTable.vue"]]);T.add(B);T.add(U);const ae={name:"FixedTariff",components:{FontAwesomeIcon:O,TimeTable:te},props:{modelValue:{type:Object,required:!0}},emits:["update:modelValue","delete"],data(){return{weekdayOptions:[{value:1,text:"Montag"},{value:2,text:"Dienstag"},{value:3,text:"Mittwoch"},{value:4,text:"Donnerstag"},{value:5,text:"Freitag"},{value:6,text:"Samstag"},{value:0,text:"Sonntag"}]}},computed:{tariff:{get(){return this.modelValue},set(t){this.$emit("update:modelValue",t)}},dates:{get(){return Array.isArray(this.tariff.active_times?.dates)?this.tariff.active_times.dates.map(([t,e])=>`${t};${e}`):[]},set(t){this.tariff.active_times.dates=t.map(e=>e.split(";"))}},weekdays:{get(){return Array.isArray(this.tariff.active_times?.weekdays)?this.tariff.active_times.weekdays:[]},set(t){this.tariff.active_times.weekdays=t}}}};function ne(t,e,c,b,g,a){const _=s("font-awesome-icon"),d=s("openwb-base-avatar"),h=s("openwb-base-text-input"),k=s("openwb-base-number-input"),f=s("openwb-base-select-input"),v=s("time-table"),i=s("openwb-base-card");return r(),w(i,{subtype:"info",collapsible:!0,collapsed:!0},{header:n(()=>[m(S(a.tariff.name),1)]),actions:n(()=>[o(d,{class:"bg-danger clickable",onClick:e[0]||(e[0]=l=>t.$emit("delete"))},{default:n(()=>[o(_,{icon:["fas","trash"]})]),_:1})]),default:n(()=>[o(h,{modelValue:a.tariff.name,"onUpdate:modelValue":e[1]||(e[1]=l=>a.tariff.name=l),title:"Tarifname"},null,8,["modelValue"]),o(k,{title:"Preis",step:.001,precision:3,required:"",unit:"ct/kWh","model-value":parseFloat((a.tariff.price*1e5).toFixed(4)),"onUpdate:modelValue":e[2]||(e[2]=l=>a.tariff.price=l/1e5)},null,8,["model-value"]),o(f,{modelValue:a.dates,"onUpdate:modelValue":e[3]||(e[3]=l=>a.dates=l),title:"Quartale",required:"",multiple:"",options:[{value:"01-01;31-03",text:"1. Quartal"},{value:"01-04;30-06",text:"2. Quartal"},{value:"01-07;30-09",text:"3. Quartal"},{value:"01-10;31-12",text:"4. Quartal"}]},null,8,["modelValue"]),o(f,{modelValue:a.weekdays,"onUpdate:modelValue":e[4]||(e[4]=l=>a.weekdays=l),title:"Aktive Wochentage",required:"",multiple:"",options:g.weekdayOptions},null,8,["modelValue","options"]),o(v,{modelValue:a.tariff.active_times.times,"onUpdate:modelValue":e[5]||(e[5]=l=>a.tariff.active_times.times=l),title:"Aktive Zeiten"},null,8,["modelValue"])]),_:1})}const ie=$(ae,[["render",ne],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/fixed_hours/FixedTariff.vue"]]);T.add(B);T.add(U);const se={name:"FlexibleTariffFixedHours",components:{FontAwesomeIcon:O,FixedTariff:ie},mixins:[D],computed:{value:{get(){return this.flexibleTariff},set(t){console.log("set",t),this.updateConfiguration(t)}}},methods:{addTariff(){this.value.configuration.tariffs.push({name:"Neuer Tarif",price:0,active_times:{dates:[],weekdays:[],times:[["",""]]}})},removeTariff(t){this.value.configuration.tariffs.splice(t,1)}}},oe={class:"flexible-tariff-fixed-hours"};function re(t,e,c,b,g,a){const _=s("openwb-base-alert"),d=s("openwb-base-number-input"),h=s("font-awesome-icon"),k=s("openwb-base-avatar"),f=s("openwb-base-heading"),v=s("fixed-tariff");return r(),p("div",oe,[o(_,{subtype:"info"},{default:n(()=>[...e[1]||(e[1]=[m(" Konfiguriert feste Tarifzeiten, z.b. HT, NT und Standardpreis. ",-1)])]),_:1}),o(d,{title:"Standardpreis",step:.001,precision:3,required:"",unit:"ct/kWh","model-value":parseFloat((a.value.configuration.default_price*1e5).toFixed(4)),"onUpdate:modelValue":e[0]||(e[0]=i=>a.value.configuration.default_price=i/1e5)},{help:n(()=>[...e[2]||(e[2]=[m(" Standardpreis sofern kein anderer Tarif aktiv ist. ",-1)])]),_:1},8,["model-value"]),e[5]||(e[5]=u("hr",null,null,-1)),o(f,null,{actions:n(()=>[o(k,{class:"bg-success clickable",onClick:F(a.addTariff,["stop"])},{default:n(()=>[o(h,{icon:["fas","plus"]})]),_:1},8,["onClick"])]),default:n(()=>[e[3]||(e[3]=m(" Tarife ",-1))]),_:1}),a.value.configuration.tariffs.length===0?(r(),w(_,{key:0,subtype:"info"},{default:n(()=>[...e[4]||(e[4]=[m(" Es wurde noch kein Tarif konfiguriert. Klicke auf das Plus-Symbol, um einen neuen Tarif hinzuzufügen.",-1),u("br",null,null,-1),m(" Tarife ermöglichen es, Preise für unterschiedliche Zeiten zu definieren. ",-1)])]),_:1})):C("",!0),(r(!0),p(y,null,V(a.value.configuration.tariffs,(i,l)=>(r(),w(v,{key:l,"model-value":i,"onUpdate:modelValue":A=>a.value.configuration.tariffs[l]=A,onDelete:A=>a.removeTariff(l)},null,8,["model-value","onUpdate:modelValue","onDelete"]))),128))])}const ve=$(se,[["render",re],["__scopeId","data-v-dd67c8e4"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/fixed_hours/flexible_tariff.vue"]]);export{ve as default}; +import{F as D}from"./GeneralChargeConfiguration-Bukx6MR1.js";import{_ as $,l as r,f as p,y as u,j as x,m as s,z as w,D as W,u as n,q as o,A as F,B as m,x as C,K as y,L as V,E as q,J as S,M as z}from"./vendor-BwGffBs-.js";import{F as O,l as T,d as B,al as U}from"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const E={name:"TimeRow"},H={class:"w-100"},M={class:"form-row align-items-center"},N={class:"col-10"},I={class:"form-row"},Q={class:"col-6"},Z={class:"col-6"},K={class:"col-2 text-right"};function P(t,e,c,b,g,a){return r(),p("div",H,[u("div",M,[u("div",N,[u("div",I,[u("div",Q,[x(t.$slots,"start")]),u("div",Z,[x(t.$slots,"end")])])]),u("div",K,[x(t.$slots,"action")])])])}const R=$(E,[["render",P],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/fixed_hours/TimeRow.vue"]]);T.add(B);T.add(U);const j={name:"TimeTable",components:{FontAwesomeIcon:O,TimeRow:R},inheritAttrs:!1,props:{title:{type:String,required:!0},modelValue:{type:Array,default:()=>[]}},emits:["update:modelValue"],data(){return{endOptions:this.modelValue.map(()=>this.generateTimeOptions("01:00","24:00"))}},computed:{value:{get(){return this.modelValue},set(t){this.$emit("update:modelValue",t)}}},methods:{generateTimeOptions(t,e){const c=[],b=parseInt(t.split(":")[0],10),g=parseInt(e.split(":")[0],10);for(let a=b;a<=g;a++){const d=`${a.toString().padStart(2,"0")}:00`;c.push({value:d,text:d})}return c},addTime(){this.value.push(["",""])},removeTime(t){this.value.splice(t,1)},updateEndOptions(t){const e=this.value[t][0];if(e){const b=(parseInt(e.split(":")[0],10)+1).toString().padStart(2,"0")+":00";this.endOptions[t]=this.generateTimeOptions(b,"24:00")}else this.endOptions[t]=this.generateTimeOptions("01:00","24:00")}}},L={key:0,class:"w-100 alert alert-danger"},J=["onUpdate:modelValue","onChange"],G=["value"],X=["onUpdate:modelValue"],Y=["value"];function ee(t,e,c,b,g,a){const _=s("font-awesome-icon"),d=s("openwb-base-avatar"),h=s("time-row"),k=s("openwb-base-setting-element");return r(),w(k,null,W({title:n(()=>[x(t.$slots,"title",{},()=>[m(S(c.title),1)])]),default:n(()=>[o(h,null,{start:n(()=>[...e[0]||(e[0]=[m(" Beginn ",-1)])]),end:n(()=>[...e[1]||(e[1]=[m(" Ende ",-1)])]),action:n(()=>[o(d,{class:"bg-success clickable",title:"Zeitbereich hinzufügen",onClick:F(a.addTime,["stop"])},{default:n(()=>[o(_,{icon:["fas","plus"]})]),_:1},8,["onClick"])]),_:1}),a.value.length===0?(r(),p("div",L," Keine Zeitbereiche definiert! ")):C("",!0),(r(!0),p(y,null,V(a.value,(f,v)=>(r(),w(h,{key:v},{start:n(()=>[q(u("select",{"onUpdate:modelValue":i=>f[0]=i,class:"form-control",required:"",onChange:i=>a.updateEndOptions(v)},[e[2]||(e[2]=u("option",{value:"",disabled:""}," -- Bitte auswählen -- ",-1)),(r(!0),p(y,null,V(a.generateTimeOptions("00:00","23:00"),i=>(r(),p("option",{key:i.value,value:i.value},S(i.text),9,G))),128))],40,J),[[z,f[0]]])]),end:n(()=>[q(u("select",{"onUpdate:modelValue":i=>f[1]=i,class:"form-control",required:""},[e[3]||(e[3]=u("option",{value:"",disabled:""}," -- Bitte auswählen -- ",-1)),(r(!0),p(y,null,V(g.endOptions[v],i=>(r(),p("option",{key:i.value,value:i.value},S(i.text),9,Y))),128))],8,X),[[z,f[1]]])]),action:n(()=>[a.value.length>1?(r(),w(d,{key:0,class:"bg-danger clickable",title:"Zeitbereich entfernen",onClick:F(i=>a.removeTime(v),["stop"])},{default:n(()=>[o(_,{icon:["fas","trash"]})]),_:1},8,["onClick"])):C("",!0)]),_:2},1024))),128))]),_:2},[t.$slots.help?{name:"help",fn:n(()=>[x(t.$slots,"help")]),key:"0"}:void 0]),1024)}const te=$(j,[["render",ee],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/fixed_hours/TimeTable.vue"]]);T.add(B);T.add(U);const ae={name:"FixedTariff",components:{FontAwesomeIcon:O,TimeTable:te},props:{modelValue:{type:Object,required:!0}},emits:["update:modelValue","delete"],data(){return{weekdayOptions:[{value:0,text:"Montag"},{value:1,text:"Dienstag"},{value:2,text:"Mittwoch"},{value:3,text:"Donnerstag"},{value:4,text:"Freitag"},{value:5,text:"Samstag"},{value:6,text:"Sonntag"}]}},computed:{tariff:{get(){return this.modelValue},set(t){this.$emit("update:modelValue",t)}},dates:{get(){return Array.isArray(this.tariff.active_times?.dates)?this.tariff.active_times.dates.map(([t,e])=>`${t};${e}`):[]},set(t){this.tariff.active_times.dates=t.map(e=>e.split(";"))}},weekdays:{get(){return Array.isArray(this.tariff.active_times?.weekdays)?this.tariff.active_times.weekdays:[]},set(t){this.tariff.active_times.weekdays=t}}}};function ne(t,e,c,b,g,a){const _=s("font-awesome-icon"),d=s("openwb-base-avatar"),h=s("openwb-base-text-input"),k=s("openwb-base-number-input"),f=s("openwb-base-select-input"),v=s("time-table"),i=s("openwb-base-card");return r(),w(i,{subtype:"info",collapsible:!0,collapsed:!0},{header:n(()=>[m(S(a.tariff.name),1)]),actions:n(()=>[o(d,{class:"bg-danger clickable",onClick:e[0]||(e[0]=l=>t.$emit("delete"))},{default:n(()=>[o(_,{icon:["fas","trash"]})]),_:1})]),default:n(()=>[o(h,{modelValue:a.tariff.name,"onUpdate:modelValue":e[1]||(e[1]=l=>a.tariff.name=l),title:"Tarifname"},null,8,["modelValue"]),o(k,{title:"Preis",step:.001,precision:3,required:"",unit:"ct/kWh","model-value":parseFloat((a.tariff.price*1e5).toFixed(4)),"onUpdate:modelValue":e[2]||(e[2]=l=>a.tariff.price=l/1e5)},null,8,["model-value"]),o(f,{modelValue:a.dates,"onUpdate:modelValue":e[3]||(e[3]=l=>a.dates=l),title:"Quartale",required:"",multiple:"",options:[{value:"01-01;31-03",text:"1. Quartal"},{value:"01-04;30-06",text:"2. Quartal"},{value:"01-07;30-09",text:"3. Quartal"},{value:"01-10;31-12",text:"4. Quartal"}]},null,8,["modelValue"]),o(f,{modelValue:a.weekdays,"onUpdate:modelValue":e[4]||(e[4]=l=>a.weekdays=l),title:"Aktive Wochentage",required:"",multiple:"",options:g.weekdayOptions},null,8,["modelValue","options"]),o(v,{modelValue:a.tariff.active_times.times,"onUpdate:modelValue":e[5]||(e[5]=l=>a.tariff.active_times.times=l),title:"Aktive Zeiten"},null,8,["modelValue"])]),_:1})}const ie=$(ae,[["render",ne],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/fixed_hours/FixedTariff.vue"]]);T.add(B);T.add(U);const se={name:"FlexibleTariffFixedHours",components:{FontAwesomeIcon:O,FixedTariff:ie},mixins:[D],computed:{value:{get(){return this.flexibleTariff},set(t){console.log("set",t),this.updateConfiguration(t)}}},methods:{addTariff(){this.value.configuration.tariffs.push({name:"Neuer Tarif",price:0,active_times:{dates:[],weekdays:[],times:[["",""]]}})},removeTariff(t){this.value.configuration.tariffs.splice(t,1)}}},oe={class:"flexible-tariff-fixed-hours"};function re(t,e,c,b,g,a){const _=s("openwb-base-alert"),d=s("openwb-base-number-input"),h=s("font-awesome-icon"),k=s("openwb-base-avatar"),f=s("openwb-base-heading"),v=s("fixed-tariff");return r(),p("div",oe,[o(_,{subtype:"info"},{default:n(()=>[...e[1]||(e[1]=[m(" Konfiguriert feste Tarifzeiten, z.b. HT, NT und Standardpreis. ",-1)])]),_:1}),o(d,{title:"Standardpreis",step:.001,precision:3,required:"",unit:"ct/kWh","model-value":parseFloat((a.value.configuration.default_price*1e5).toFixed(4)),"onUpdate:modelValue":e[0]||(e[0]=i=>a.value.configuration.default_price=i/1e5)},{help:n(()=>[...e[2]||(e[2]=[m(" Standardpreis sofern kein anderer Tarif aktiv ist. ",-1)])]),_:1},8,["model-value"]),e[5]||(e[5]=u("hr",null,null,-1)),o(f,null,{actions:n(()=>[o(k,{class:"bg-success clickable",onClick:F(a.addTariff,["stop"])},{default:n(()=>[o(h,{icon:["fas","plus"]})]),_:1},8,["onClick"])]),default:n(()=>[e[3]||(e[3]=m(" Tarife ",-1))]),_:1}),a.value.configuration.tariffs.length===0?(r(),w(_,{key:0,subtype:"info"},{default:n(()=>[...e[4]||(e[4]=[m(" Es wurde noch kein Tarif konfiguriert. Klicke auf das Plus-Symbol, um einen neuen Tarif hinzuzufügen.",-1),u("br",null,null,-1),m(" Tarife ermöglichen es, Preise für unterschiedliche Zeiten zu definieren. ",-1)])]),_:1})):C("",!0),(r(!0),p(y,null,V(a.value.configuration.tariffs,(i,l)=>(r(),w(v,{key:l,"model-value":i,"onUpdate:modelValue":A=>a.value.configuration.tariffs[l]=A,onDelete:A=>a.removeTariff(l)},null,8,["model-value","onUpdate:modelValue","onDelete"]))),128))])}const ve=$(se,[["render",re],["__scopeId","data-v-dd67c8e4"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/fixed_hours/flexible_tariff.vue"]]);export{ve as default}; diff --git a/web/settings/assets/flexible_tariff-DAnnz_Z9.js b/web/settings/assets/flexible_tariff-jJVf7CWC.js similarity index 98% rename from web/settings/assets/flexible_tariff-DAnnz_Z9.js rename to web/settings/assets/flexible_tariff-jJVf7CWC.js index 5b8484416a..470036ef69 100644 --- a/web/settings/assets/flexible_tariff-DAnnz_Z9.js +++ b/web/settings/assets/flexible_tariff-jJVf7CWC.js @@ -1,2 +1,2 @@ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-BwGffBs-.js","assets/vendor-Cq9CCOuG.css"])))=>i.map(i=>d[i]); -import{_ as w}from"./index-Bv2WLdLZ.js";import{a as b}from"./vendor-axios-C0vEeTtS.js";import{F as C}from"./GeneralChargeConfiguration-ZMe157LV.js";import{_ as S,m as p,l as T,f as y,q as u,u as l,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./dynamic-import-helper-BheWnx7M.js";const m="https://smart.naturstrom.de",_="exnaton-public",k="https://naturstrom.openwb.de/naturstrom-callback.php",O="email profile",v=600*1e3,A=`${location.protocol}//${location.host}/openWB/web/settings/modules/electricity_pricing/flexible_tariffs/naturstrom/naturstrom.php`,N={name:"FlexibleTariffNaturstrom",mixins:[C],data(){return{accounts:[],oauthCallbackCode:void 0}},computed:{accountsOptions(){const t=this.accounts.map(e=>({value:e.id,text:e.name}));return t.length===0&&this.flexibleTariff.configuration.account_id&&t.push({value:this.flexibleTariff.configuration.account_id,text:this.flexibleTariff.configuration.account_name||this.flexibleTariff.configuration.account_id}),t}},methods:{updateSelectedAccount(t){this.updateConfiguration(t,"configuration.account_id");const e=this.accounts.find(s=>s.id===t);e?.name&&this.updateConfiguration(e.name,"configuration.account_name")},clearOAuthSession(){sessionStorage.removeItem("oauth_state"),sessionStorage.removeItem("pkce_code_verifier"),sessionStorage.removeItem("oauth_started_at")},async naturstrom_login_window(){const t=window.open("about:blank","NaturstromLogin","width=800,height=600,status=yes,scrollbars=yes,resizable=yes");if(!t){this.$root.postClientMessage("Popup konnte nicht geöffnet werden. Bitte erlaube Popups für diese Seite.","danger");return}t.focus();try{const e=await this.startOAuth();t.location.href=e}catch(e){t.close(),console.error("Fehler beim Erstellen des Naturstrom-Links:",e),this.$root.postClientMessage("Fehler beim Erstellen der Naturstrom-Authentifizierung: "+(e.response?.data?.message||e.message),"danger")}},async fetch_accounts(){if(!this.flexibleTariff.configuration.token?.access_token){this.$root.postClientMessage("Kein Access-Token vorhanden.","warning");return}try{const t={action:"accounts",url:m,user_agent:navigator.userAgent,data:{access_token:this.flexibleTariff.configuration.token?.access_token}},s=(await b.post(A,JSON.parse(JSON.stringify(t)),{headers:{"Content-Type":"application/json",Accept:"application/json"}}))?.data,r=typeof s=="string"?JSON.parse(s):s,o=(r?.data??[]).filter(n=>n&&n.id).map(n=>({id:n.id,name:n.name}));if(o.length>0){this.accounts=o;const n=o[0];this.updateConfiguration(n.id,"configuration.account_id"),this.updateConfiguration(n.name,"configuration.account_name"),o.length>1?this.$root.postClientMessage(`${o.length} Accounts gefunden. Erster Account ausgewählt: ${n.name}. Du kannst einen anderen Account aus der Liste wählen.`,"success"):this.$root.postClientMessage("Account erfolgreich abgerufen: "+n.name,"success")}else{const n=typeof r=="object"?JSON.stringify(r).slice(0,300):String(r);this.$root.postClientMessage("Keine Accounts in der Antwort gefunden. Antwort (gekürzt): "+n,"warning")}}catch(t){console.error("Fehler beim Abrufen der Accounts:",t),this.$root.postClientMessage("Fehler beim Abrufen der Accounts: "+(t.response?.data?.message||t.message),"danger")}},async processOAuthCallbackCode(){try{if(!this.oauthCallbackCode){this.$root.postClientMessage("Bitte füge zuerst den Anmeldecode ein.","warning");return}const t=this.oauthCallbackCode.code,e=this.oauthCallbackCode.state;if(!t){this.$root.postClientMessage("Im Anmeldecode wurde kein Feld 'code' gefunden.","warning");return}const s=sessionStorage.getItem("pkce_code_verifier"),r=sessionStorage.getItem("oauth_state"),a=Number(sessionStorage.getItem("oauth_started_at"));if(r&&e&&r!==e){this.clearOAuthSession(),this.$root.postClientMessage("OAuth-Status ungültig. Bitte neu anmelden.","danger");return}if(Number.isFinite(a)&&a>0&&Date.now()-a>v){this.clearOAuthSession(),this.$root.postClientMessage("OAuth-Session ist abgelaufen. Bitte neu anmelden.","warning");return}const o={action:"token",url:m,user_agent:navigator.userAgent,data:{grant_type:"authorization_code",code:t,redirect_uri:k,client_id:_,code_verifier:s}},n=await b.post(A,JSON.parse(JSON.stringify(o)),{headers:{"Content-Type":"application/json",Accept:"application/json"}});console.log("Token-Antwort:",n);const f=n?.data,i=typeof f=="string"?JSON.parse(f):f,g=i?.data&&typeof i.data=="object"?i.data:i,c=g?.access_token,h=g?.refresh_token;if(!c)throw new Error("Token-Antwort enthält kein Access-Token. Response: "+JSON.stringify(i));this.updateConfiguration(c,"configuration.token.access_token"),h&&this.updateConfiguration(h,"configuration.token.refresh_token"),this.clearOAuthSession(),this.oauthCallbackCode=void 0,h?this.$root.postClientMessage("OAuth erfolgreich abgeschlossen. Access- und Refresh-Token wurden gesetzt.","success"):this.$root.postClientMessage("OAuth erfolgreich abgeschlossen. Access-Token wurde gesetzt (kein Refresh-Token in der Antwort).","warning")}catch(t){console.error("Fehler beim Verarbeiten des Anmeldecodes:",t),this.$root.postClientMessage("Fehler beim Verarbeiten des Anmeldecodes: "+(t.response?.data?.error_description||t.message),"danger")}},toBase64Url(t){return btoa(String.fromCharCode(...t)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")},randomString(t=64){const e=new Uint8Array(t);return crypto.getRandomValues(e),this.toBase64Url(e).slice(0,t)},async sha256(t){const s=new TextEncoder().encode(t);if(globalThis.crypto?.subtle?.digest){const o=await globalThis.crypto.subtle.digest("SHA-256",s);return new Uint8Array(o)}const{createHash:r}=await w(async()=>{const{createHash:o}=await import("./vendor-BwGffBs-.js").then(n=>n.i);return{createHash:o}},__vite__mapDeps([0,1])),a=r("sha256").update(s).digest();return new Uint8Array(a)},async startOAuth(){try{const t=this.randomString(64),e=this.randomString(96),s=this.toBase64Url(await this.sha256(e));sessionStorage.setItem("oauth_state",t),sessionStorage.setItem("pkce_code_verifier",e),sessionStorage.setItem("oauth_started_at",String(Date.now()));const r=new URLSearchParams({client_id:_,response_type:"code",scope:O,redirect_uri:k,state:t,code_challenge:s,code_challenge_method:"S256"});return`${m}/api/public-auth/oauth2/auth?${r.toString()}`}catch(t){throw console.error("OAuth Start fehlgeschlagen:",t),t}}}},x={class:"flexible-tariff-naturstrom"};function D(t,e,s,r,a,o){const n=p("openwb-base-alert"),f=p("openwb-base-button-input"),i=p("openwb-base-text-input"),g=p("openwb-base-select-input");return T(),y("div",x,[u(n,{subtype:"info"},{default:l(()=>[...e[4]||(e[4]=[d(" Über die Naturstrom-Authentifizierung kannst Du Deine Stromtarif-Daten für die Ladeplanung nutzen. Nach der Anmeldung bei Naturstrom wird ein Access- und Refresh-Token angezeigt, welche Du hier einfügen musst. ",-1)])]),_:1}),u(f,{title:"1. Bei Naturstrom anmelden","button-text":"Bei Naturstrom Anmelden",subtype:"success",onButtonClicked:e[0]||(e[0]=()=>o.naturstrom_login_window())},{help:l(()=>[...e[5]||(e[5]=[d(" Es wird ein neues Browserfenster geöffnet, in dem du Dich bei Naturstrom mit Deinen Zugangsdaten anmelden kannst. ",-1)])]),_:1}),u(i,{title:"2. JSON-Code nach Login",subtype:"json","model-value":a.oauthCallbackCode,"onUpdate:modelValue":e[1]||(e[1]=c=>a.oauthCallbackCode=c)},{help:l(()=>[...e[6]||(e[6]=[d(" Kopiere den kompletten JSON-Code aus dem Login-Popup nach erfolgreicher Anmeldung und füge ihn hier ein. ",-1)])]),_:1},8,["model-value"]),u(f,{title:"3. JSON-Code prüfen und Token holen","button-text":"Anmeldecode verarbeiten",subtype:"success",disabled:!a.oauthCallbackCode,onButtonClicked:o.processOAuthCallbackCode},{help:l(()=>[...e[7]||(e[7]=[d(" Der JSON-Code wird verwendet um das Access- und Refresh-Token abgefragt. ",-1)])]),_:1},8,["disabled","onButtonClicked"]),u(i,{title:"Access-Token",required:"",disabled:!0,pattern:"^ory_at_.*$","model-value":t.flexibleTariff.configuration.token?.access_token||"","onUpdate:modelValue":e[2]||(e[2]=c=>t.updateConfiguration(c,"configuration.token.access_token"))},{help:l(()=>[...e[8]||(e[8]=[d(" Das Access-Token wird nach erfolgreicher Verarbeitung des Anmeldecodes automatisch gesetzt. ",-1)])]),_:1},8,["model-value"]),u(i,{title:"Refresh-Token",required:"",pattern:"^ory_rt_.*$",disabled:!0,"model-value":t.flexibleTariff.configuration.token?.refresh_token||"","onUpdate:modelValue":e[3]||(e[3]=c=>t.updateConfiguration(c,"configuration.token.refresh_token"))},{help:l(()=>[...e[9]||(e[9]=[d(" Das Refresh-Token wird nach erfolgreicher Verarbeitung des Anmeldecodes automatisch gesetzt. ",-1)])]),_:1},8,["model-value"]),u(f,{title:"4. Accounts abrufen","button-text":"Accounts laden",subtype:"info",disabled:!t.flexibleTariff.configuration.token?.access_token,onButtonClicked:o.fetch_accounts},{help:l(()=>[...e[10]||(e[10]=[d(" Mit dem Access-Token wird automatisch die zugehörige Account-Information von Naturstrom abgerufen. ",-1)])]),_:1},8,["disabled","onButtonClicked"]),u(g,{title:"Accounts",options:o.accountsOptions,"model-value":t.flexibleTariff.configuration.account_id,"onUpdate:modelValue":o.updateSelectedAccount},{help:l(()=>[...e[11]||(e[11]=[d(" Wähle einen der verfügbaren Accounts aus. Dieser wird für den Zugriff auf die Tarif-Daten benötigt. ",-1)])]),_:1},8,["options","model-value","onUpdate:modelValue"])])}const L=S(N,[["render",D],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/naturstrom/flexible_tariff.vue"]]);export{L as default}; +import{_ as w}from"./index-CE-5DBwq.js";import{a as b}from"./vendor-axios-C0vEeTtS.js";import{F as C}from"./GeneralChargeConfiguration-Bukx6MR1.js";import{_ as S,m as p,l as T,f as y,q as u,u as l,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./dynamic-import-helper-BheWnx7M.js";const m="https://smart.naturstrom.de",_="exnaton-public",k="https://naturstrom.openwb.de/naturstrom-callback.php",O="email profile",v=600*1e3,A=`${location.protocol}//${location.host}/openWB/web/settings/modules/electricity_pricing/flexible_tariffs/naturstrom/naturstrom.php`,N={name:"FlexibleTariffNaturstrom",mixins:[C],data(){return{accounts:[],oauthCallbackCode:void 0}},computed:{accountsOptions(){const t=this.accounts.map(e=>({value:e.id,text:e.name}));return t.length===0&&this.flexibleTariff.configuration.account_id&&t.push({value:this.flexibleTariff.configuration.account_id,text:this.flexibleTariff.configuration.account_name||this.flexibleTariff.configuration.account_id}),t}},methods:{updateSelectedAccount(t){this.updateConfiguration(t,"configuration.account_id");const e=this.accounts.find(s=>s.id===t);e?.name&&this.updateConfiguration(e.name,"configuration.account_name")},clearOAuthSession(){sessionStorage.removeItem("oauth_state"),sessionStorage.removeItem("pkce_code_verifier"),sessionStorage.removeItem("oauth_started_at")},async naturstrom_login_window(){const t=window.open("about:blank","NaturstromLogin","width=800,height=600,status=yes,scrollbars=yes,resizable=yes");if(!t){this.$root.postClientMessage("Popup konnte nicht geöffnet werden. Bitte erlaube Popups für diese Seite.","danger");return}t.focus();try{const e=await this.startOAuth();t.location.href=e}catch(e){t.close(),console.error("Fehler beim Erstellen des Naturstrom-Links:",e),this.$root.postClientMessage("Fehler beim Erstellen der Naturstrom-Authentifizierung: "+(e.response?.data?.message||e.message),"danger")}},async fetch_accounts(){if(!this.flexibleTariff.configuration.token?.access_token){this.$root.postClientMessage("Kein Access-Token vorhanden.","warning");return}try{const t={action:"accounts",url:m,user_agent:navigator.userAgent,data:{access_token:this.flexibleTariff.configuration.token?.access_token}},s=(await b.post(A,JSON.parse(JSON.stringify(t)),{headers:{"Content-Type":"application/json",Accept:"application/json"}}))?.data,r=typeof s=="string"?JSON.parse(s):s,o=(r?.data??[]).filter(n=>n&&n.id).map(n=>({id:n.id,name:n.name}));if(o.length>0){this.accounts=o;const n=o[0];this.updateConfiguration(n.id,"configuration.account_id"),this.updateConfiguration(n.name,"configuration.account_name"),o.length>1?this.$root.postClientMessage(`${o.length} Accounts gefunden. Erster Account ausgewählt: ${n.name}. Du kannst einen anderen Account aus der Liste wählen.`,"success"):this.$root.postClientMessage("Account erfolgreich abgerufen: "+n.name,"success")}else{const n=typeof r=="object"?JSON.stringify(r).slice(0,300):String(r);this.$root.postClientMessage("Keine Accounts in der Antwort gefunden. Antwort (gekürzt): "+n,"warning")}}catch(t){console.error("Fehler beim Abrufen der Accounts:",t),this.$root.postClientMessage("Fehler beim Abrufen der Accounts: "+(t.response?.data?.message||t.message),"danger")}},async processOAuthCallbackCode(){try{if(!this.oauthCallbackCode){this.$root.postClientMessage("Bitte füge zuerst den Anmeldecode ein.","warning");return}const t=this.oauthCallbackCode.code,e=this.oauthCallbackCode.state;if(!t){this.$root.postClientMessage("Im Anmeldecode wurde kein Feld 'code' gefunden.","warning");return}const s=sessionStorage.getItem("pkce_code_verifier"),r=sessionStorage.getItem("oauth_state"),a=Number(sessionStorage.getItem("oauth_started_at"));if(r&&e&&r!==e){this.clearOAuthSession(),this.$root.postClientMessage("OAuth-Status ungültig. Bitte neu anmelden.","danger");return}if(Number.isFinite(a)&&a>0&&Date.now()-a>v){this.clearOAuthSession(),this.$root.postClientMessage("OAuth-Session ist abgelaufen. Bitte neu anmelden.","warning");return}const o={action:"token",url:m,user_agent:navigator.userAgent,data:{grant_type:"authorization_code",code:t,redirect_uri:k,client_id:_,code_verifier:s}},n=await b.post(A,JSON.parse(JSON.stringify(o)),{headers:{"Content-Type":"application/json",Accept:"application/json"}});console.log("Token-Antwort:",n);const f=n?.data,i=typeof f=="string"?JSON.parse(f):f,g=i?.data&&typeof i.data=="object"?i.data:i,c=g?.access_token,h=g?.refresh_token;if(!c)throw new Error("Token-Antwort enthält kein Access-Token. Response: "+JSON.stringify(i));this.updateConfiguration(c,"configuration.token.access_token"),h&&this.updateConfiguration(h,"configuration.token.refresh_token"),this.clearOAuthSession(),this.oauthCallbackCode=void 0,h?this.$root.postClientMessage("OAuth erfolgreich abgeschlossen. Access- und Refresh-Token wurden gesetzt.","success"):this.$root.postClientMessage("OAuth erfolgreich abgeschlossen. Access-Token wurde gesetzt (kein Refresh-Token in der Antwort).","warning")}catch(t){console.error("Fehler beim Verarbeiten des Anmeldecodes:",t),this.$root.postClientMessage("Fehler beim Verarbeiten des Anmeldecodes: "+(t.response?.data?.error_description||t.message),"danger")}},toBase64Url(t){return btoa(String.fromCharCode(...t)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")},randomString(t=64){const e=new Uint8Array(t);return crypto.getRandomValues(e),this.toBase64Url(e).slice(0,t)},async sha256(t){const s=new TextEncoder().encode(t);if(globalThis.crypto?.subtle?.digest){const o=await globalThis.crypto.subtle.digest("SHA-256",s);return new Uint8Array(o)}const{createHash:r}=await w(async()=>{const{createHash:o}=await import("./vendor-BwGffBs-.js").then(n=>n.i);return{createHash:o}},__vite__mapDeps([0,1])),a=r("sha256").update(s).digest();return new Uint8Array(a)},async startOAuth(){try{const t=this.randomString(64),e=this.randomString(96),s=this.toBase64Url(await this.sha256(e));sessionStorage.setItem("oauth_state",t),sessionStorage.setItem("pkce_code_verifier",e),sessionStorage.setItem("oauth_started_at",String(Date.now()));const r=new URLSearchParams({client_id:_,response_type:"code",scope:O,redirect_uri:k,state:t,code_challenge:s,code_challenge_method:"S256"});return`${m}/api/public-auth/oauth2/auth?${r.toString()}`}catch(t){throw console.error("OAuth Start fehlgeschlagen:",t),t}}}},x={class:"flexible-tariff-naturstrom"};function D(t,e,s,r,a,o){const n=p("openwb-base-alert"),f=p("openwb-base-button-input"),i=p("openwb-base-text-input"),g=p("openwb-base-select-input");return T(),y("div",x,[u(n,{subtype:"info"},{default:l(()=>[...e[4]||(e[4]=[d(" Über die Naturstrom-Authentifizierung kannst Du Deine Stromtarif-Daten für die Ladeplanung nutzen. Nach der Anmeldung bei Naturstrom wird ein Access- und Refresh-Token angezeigt, welche Du hier einfügen musst. ",-1)])]),_:1}),u(f,{title:"1. Bei Naturstrom anmelden","button-text":"Bei Naturstrom Anmelden",subtype:"success",onButtonClicked:e[0]||(e[0]=()=>o.naturstrom_login_window())},{help:l(()=>[...e[5]||(e[5]=[d(" Es wird ein neues Browserfenster geöffnet, in dem du Dich bei Naturstrom mit Deinen Zugangsdaten anmelden kannst. ",-1)])]),_:1}),u(i,{title:"2. JSON-Code nach Login",subtype:"json","model-value":a.oauthCallbackCode,"onUpdate:modelValue":e[1]||(e[1]=c=>a.oauthCallbackCode=c)},{help:l(()=>[...e[6]||(e[6]=[d(" Kopiere den kompletten JSON-Code aus dem Login-Popup nach erfolgreicher Anmeldung und füge ihn hier ein. ",-1)])]),_:1},8,["model-value"]),u(f,{title:"3. JSON-Code prüfen und Token holen","button-text":"Anmeldecode verarbeiten",subtype:"success",disabled:!a.oauthCallbackCode,onButtonClicked:o.processOAuthCallbackCode},{help:l(()=>[...e[7]||(e[7]=[d(" Der JSON-Code wird verwendet um das Access- und Refresh-Token abgefragt. ",-1)])]),_:1},8,["disabled","onButtonClicked"]),u(i,{title:"Access-Token",required:"",disabled:!0,pattern:"^ory_at_.*$","model-value":t.flexibleTariff.configuration.token?.access_token||"","onUpdate:modelValue":e[2]||(e[2]=c=>t.updateConfiguration(c,"configuration.token.access_token"))},{help:l(()=>[...e[8]||(e[8]=[d(" Das Access-Token wird nach erfolgreicher Verarbeitung des Anmeldecodes automatisch gesetzt. ",-1)])]),_:1},8,["model-value"]),u(i,{title:"Refresh-Token",required:"",pattern:"^ory_rt_.*$",disabled:!0,"model-value":t.flexibleTariff.configuration.token?.refresh_token||"","onUpdate:modelValue":e[3]||(e[3]=c=>t.updateConfiguration(c,"configuration.token.refresh_token"))},{help:l(()=>[...e[9]||(e[9]=[d(" Das Refresh-Token wird nach erfolgreicher Verarbeitung des Anmeldecodes automatisch gesetzt. ",-1)])]),_:1},8,["model-value"]),u(f,{title:"4. Accounts abrufen","button-text":"Accounts laden",subtype:"info",disabled:!t.flexibleTariff.configuration.token?.access_token,onButtonClicked:o.fetch_accounts},{help:l(()=>[...e[10]||(e[10]=[d(" Mit dem Access-Token wird automatisch die zugehörige Account-Information von Naturstrom abgerufen. ",-1)])]),_:1},8,["disabled","onButtonClicked"]),u(g,{title:"Accounts",options:o.accountsOptions,"model-value":t.flexibleTariff.configuration.account_id,"onUpdate:modelValue":o.updateSelectedAccount},{help:l(()=>[...e[11]||(e[11]=[d(" Wähle einen der verfügbaren Accounts aus. Dieser wird für den Zugriff auf die Tarif-Daten benötigt. ",-1)])]),_:1},8,["options","model-value","onUpdate:modelValue"])])}const L=S(N,[["render",D],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/naturstrom/flexible_tariff.vue"]]);export{L as default}; diff --git a/web/settings/assets/flexible_tariff-D4bc_giw.js b/web/settings/assets/flexible_tariff-phf1P2DN.js similarity index 95% rename from web/settings/assets/flexible_tariff-D4bc_giw.js rename to web/settings/assets/flexible_tariff-phf1P2DN.js index 7793ddb354..10fc9736b0 100644 --- a/web/settings/assets/flexible_tariff-D4bc_giw.js +++ b/web/settings/assets/flexible_tariff-phf1P2DN.js @@ -1 +1 @@ -import{F as m}from"./GeneralChargeConfiguration-ZMe157LV.js";import{_ as g,m as i,l,f as b,q as o,u as a,B as r,y as u,z as c,x as h}from"./vendor-BwGffBs-.js";import"./index-Bv2WLdLZ.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const w={name:"FlexibleTariffEnergyCharts",mixins:[m]},x={class:"flexible-tariff-energy-charts"};function v(t,e,B,_,y,k){const f=i("openwb-base-alert"),p=i("openwb-base-select-input"),s=i("openwb-base-number-input"),d=i("openwb-base-button-group-input");return l(),b("div",x,[o(f,{subtype:"info"},{default:a(()=>[...e[4]||(e[4]=[r(" Börsenstrompreise von Energy Charts (energy-charts.info)",-1),u("br",null,null,-1),r(" Die Rohdaten werden von Wissenschaftlern des Fraunhofer-Instituts für Solare Energiesysteme ISE aus zahlreichen Quellen stündlich oder täglich abgerufen und für die Darstellung aufbereitet. ",-1)])]),_:1}),o(p,{title:"Land","not-selected":"Bitte auswählen",options:[{value:"DE-LU",text:"Deutschland"},{value:"AT",text:"Österreich"},{value:"CH",text:"Schweiz"}],"model-value":t.flexibleTariff.configuration.country,"onUpdate:modelValue":e[0]||(e[0]=n=>t.updateConfiguration(n,"configuration.country"))},null,8,["model-value"]),o(s,{title:"Aufschlag zum Börsenstrompreis (netto)",min:0,step:.001,precision:3,required:"",unit:"ct/kWh","model-value":parseFloat((t.flexibleTariff.configuration.surcharge*1e5).toFixed(4)),"onUpdate:modelValue":e[1]||(e[1]=n=>t.updateConfiguration(n/1e5,"configuration.surcharge"))},{help:a(()=>[...e[5]||(e[5]=[r(" Die Auswahl (Energy-Charts) kann für alle Stromanbieter ausgewählt werden, die die Börsenstrompreise in einem variablen/dynamischen Tarif an die Kunden weitergeben. Das Modul soll es ermöglichen, dass zu tagesaktuellen Strompreisen unter Berücksichtigung eines Aufschlags zu günstigen Zeiten automatisch geladen werden kann und somit die Preisschwankungen an der Börse optimal ausgenutzt werden. ",-1)])]),_:1},8,["model-value"]),o(d,{title:"Preisart",buttons:[{buttonValue:!0,text:"Netto"},{buttonValue:!1,text:"Brutto"}],"model-value":t.flexibleTariff.configuration.net,"onUpdate:modelValue":e[2]||(e[2]=n=>t.updateConfiguration(n,"configuration.net"))},{help:a(()=>[...e[6]||(e[6]=[r(" Netto: Börsenpreise inkl. Aufschlag ohne MwSt",-1),u("br",null,null,-1),r(" Brutto: Börsenpreise inkl. Aufschlag mit MwSt ",-1)])]),_:1},8,["model-value"]),t.flexibleTariff.configuration.net?h("",!0):(l(),c(s,{key:0,title:"Mehrwertsteuer",unit:"%",min:0,max:50,step:.01,"model-value":t.flexibleTariff.configuration.tax,"onUpdate:modelValue":e[3]||(e[3]=n=>t.updateConfiguration(n,"configuration.tax"))},{help:a(()=>[...e[7]||(e[7]=[r(" Mehrwertsteuer in Prozent (z.B. 20%) ",-1)])]),_:1},8,["model-value"]))])}const F=g(w,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/energycharts/flexible_tariff.vue"]]);export{F as default}; +import{F as m}from"./GeneralChargeConfiguration-Bukx6MR1.js";import{_ as g,m as i,l,f as b,q as o,u as a,B as r,y as u,z as c,x as h}from"./vendor-BwGffBs-.js";import"./index-CE-5DBwq.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const w={name:"FlexibleTariffEnergyCharts",mixins:[m]},x={class:"flexible-tariff-energy-charts"};function v(t,e,B,_,y,k){const f=i("openwb-base-alert"),p=i("openwb-base-select-input"),s=i("openwb-base-number-input"),d=i("openwb-base-button-group-input");return l(),b("div",x,[o(f,{subtype:"info"},{default:a(()=>[...e[4]||(e[4]=[r(" Börsenstrompreise von Energy Charts (energy-charts.info)",-1),u("br",null,null,-1),r(" Die Rohdaten werden von Wissenschaftlern des Fraunhofer-Instituts für Solare Energiesysteme ISE aus zahlreichen Quellen stündlich oder täglich abgerufen und für die Darstellung aufbereitet. ",-1)])]),_:1}),o(p,{title:"Land","not-selected":"Bitte auswählen",options:[{value:"DE-LU",text:"Deutschland"},{value:"AT",text:"Österreich"},{value:"CH",text:"Schweiz"}],"model-value":t.flexibleTariff.configuration.country,"onUpdate:modelValue":e[0]||(e[0]=n=>t.updateConfiguration(n,"configuration.country"))},null,8,["model-value"]),o(s,{title:"Aufschlag zum Börsenstrompreis (netto)",min:0,step:.001,precision:3,required:"",unit:"ct/kWh","model-value":parseFloat((t.flexibleTariff.configuration.surcharge*1e5).toFixed(4)),"onUpdate:modelValue":e[1]||(e[1]=n=>t.updateConfiguration(n/1e5,"configuration.surcharge"))},{help:a(()=>[...e[5]||(e[5]=[r(" Die Auswahl (Energy-Charts) kann für alle Stromanbieter ausgewählt werden, die die Börsenstrompreise in einem variablen/dynamischen Tarif an die Kunden weitergeben. Das Modul soll es ermöglichen, dass zu tagesaktuellen Strompreisen unter Berücksichtigung eines Aufschlags zu günstigen Zeiten automatisch geladen werden kann und somit die Preisschwankungen an der Börse optimal ausgenutzt werden. ",-1)])]),_:1},8,["model-value"]),o(d,{title:"Preisart",buttons:[{buttonValue:!0,text:"Netto"},{buttonValue:!1,text:"Brutto"}],"model-value":t.flexibleTariff.configuration.net,"onUpdate:modelValue":e[2]||(e[2]=n=>t.updateConfiguration(n,"configuration.net"))},{help:a(()=>[...e[6]||(e[6]=[r(" Netto: Börsenpreise inkl. Aufschlag ohne MwSt",-1),u("br",null,null,-1),r(" Brutto: Börsenpreise inkl. Aufschlag mit MwSt ",-1)])]),_:1},8,["model-value"]),t.flexibleTariff.configuration.net?h("",!0):(l(),c(s,{key:0,title:"Mehrwertsteuer",unit:"%",min:0,max:50,step:.01,"model-value":t.flexibleTariff.configuration.tax,"onUpdate:modelValue":e[3]||(e[3]=n=>t.updateConfiguration(n,"configuration.tax"))},{help:a(()=>[...e[7]||(e[7]=[r(" Mehrwertsteuer in Prozent (z.B. 20%) ",-1)])]),_:1},8,["model-value"]))])}const F=g(w,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/energycharts/flexible_tariff.vue"]]);export{F as default}; diff --git a/web/settings/assets/flexible_tariff-wVWYo-TB.js b/web/settings/assets/flexible_tariff-sCzmdrKR.js similarity index 90% rename from web/settings/assets/flexible_tariff-wVWYo-TB.js rename to web/settings/assets/flexible_tariff-sCzmdrKR.js index 5af0514cf3..9ce208b82b 100644 --- a/web/settings/assets/flexible_tariff-wVWYo-TB.js +++ b/web/settings/assets/flexible_tariff-sCzmdrKR.js @@ -1 +1 @@ -import{F as r}from"./GeneralChargeConfiguration-ZMe157LV.js";import{_ as l,m as a,l as u,f,q as n}from"./vendor-BwGffBs-.js";import"./index-Bv2WLdLZ.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const s={name:"FlexibleTariffOctopusEnergy",mixins:[r]},p={class:"flexible-tariff-octopusenergy"};function m(e,o,d,b,c,g){const t=a("openwb-base-text-input");return u(),f("div",p,[n(t,{title:"Benutzername",subtype:"user",required:"","model-value":e.flexibleTariff.configuration.email,"onUpdate:modelValue":o[0]||(o[0]=i=>e.updateConfiguration(i,"configuration.email"))},null,8,["model-value"]),n(t,{title:"Passwort",subtype:"password",required:"","model-value":e.flexibleTariff.configuration.password,"onUpdate:modelValue":o[1]||(o[1]=i=>e.updateConfiguration(i,"configuration.password"))},null,8,["model-value"]),n(t,{title:"Vertragsnummer (beginnt mit A-)",required:"","model-value":e.flexibleTariff.configuration.accountId,"onUpdate:modelValue":o[2]||(o[2]=i=>e.updateConfiguration(i,"configuration.accountId"))},null,8,["model-value"])])}const q=l(s,[["render",m],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/octopusenergy/flexible_tariff.vue"]]);export{q as default}; +import{F as r}from"./GeneralChargeConfiguration-Bukx6MR1.js";import{_ as l,m as a,l as u,f,q as n}from"./vendor-BwGffBs-.js";import"./index-CE-5DBwq.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const s={name:"FlexibleTariffOctopusEnergy",mixins:[r]},p={class:"flexible-tariff-octopusenergy"};function m(e,o,d,b,c,g){const t=a("openwb-base-text-input");return u(),f("div",p,[n(t,{title:"Benutzername",subtype:"user",required:"","model-value":e.flexibleTariff.configuration.email,"onUpdate:modelValue":o[0]||(o[0]=i=>e.updateConfiguration(i,"configuration.email"))},null,8,["model-value"]),n(t,{title:"Passwort",subtype:"password",required:"","model-value":e.flexibleTariff.configuration.password,"onUpdate:modelValue":o[1]||(o[1]=i=>e.updateConfiguration(i,"configuration.password"))},null,8,["model-value"]),n(t,{title:"Vertragsnummer (beginnt mit A-)",required:"","model-value":e.flexibleTariff.configuration.accountId,"onUpdate:modelValue":o[2]||(o[2]=i=>e.updateConfiguration(i,"configuration.accountId"))},null,8,["model-value"])])}const q=l(s,[["render",m],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/flexible_tariffs/octopusenergy/flexible_tariff.vue"]]);export{q as default}; diff --git a/web/settings/assets/grid_fee-E5Q8MXnI.js b/web/settings/assets/grid_fee-B1dRFbWZ.js similarity index 96% rename from web/settings/assets/grid_fee-E5Q8MXnI.js rename to web/settings/assets/grid_fee-B1dRFbWZ.js index 0f80942220..3e2580a857 100644 --- a/web/settings/assets/grid_fee-E5Q8MXnI.js +++ b/web/settings/assets/grid_fee-B1dRFbWZ.js @@ -1 +1 @@ -import{G as D}from"./GeneralChargeConfiguration-ZMe157LV.js";import{_ as $,l as r,f as m,y as u,j as y,m as s,z as w,D as W,u as n,q as o,A as F,B as c,x as C,K as V,L as x,E as q,J as S,M as z}from"./vendor-BwGffBs-.js";import{F as O,l as k,d as B,al as U}from"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const E={name:"TimeRow"},H={class:"w-100"},M={class:"form-row align-items-center"},N={class:"col-10"},I={class:"form-row"},Q={class:"col-6"},Z={class:"col-6"},K={class:"col-2 text-right"};function P(t,e,f,b,g,a){return r(),m("div",H,[u("div",M,[u("div",N,[u("div",I,[u("div",Q,[y(t.$slots,"start")]),u("div",Z,[y(t.$slots,"end")])])]),u("div",K,[y(t.$slots,"action")])])])}const G=$(E,[["render",P],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/grid_fees/fixed_hours/TimeRow.vue"]]);k.add(B);k.add(U);const R={name:"TimeTable",components:{FontAwesomeIcon:O,TimeRow:G},inheritAttrs:!1,props:{title:{type:String,required:!0},modelValue:{type:Array,default:()=>[]}},emits:["update:modelValue"],data(){return{endOptions:this.modelValue.map(()=>this.generateTimeOptions("01:00","24:00"))}},computed:{value:{get(){return this.modelValue},set(t){this.$emit("update:modelValue",t)}}},methods:{generateTimeOptions(t,e){const f=[],b=parseInt(t.split(":")[0],10),g=parseInt(e.split(":")[0],10);for(let a=b;a<=g;a++){const d=`${a.toString().padStart(2,"0")}:00`;f.push({value:d,text:d})}return f},addTime(){this.value.push(["",""])},removeTime(t){this.value.splice(t,1)},updateEndOptions(t){const e=this.value[t][0];if(e){const b=(parseInt(e.split(":")[0],10)+1).toString().padStart(2,"0")+":00";this.endOptions[t]=this.generateTimeOptions(b,"24:00")}else this.endOptions[t]=this.generateTimeOptions("01:00","24:00")}}},j={key:0,class:"w-100 alert alert-danger"},L=["onUpdate:modelValue","onChange"],J=["value"],X=["onUpdate:modelValue"],Y=["value"];function ee(t,e,f,b,g,a){const _=s("font-awesome-icon"),d=s("openwb-base-avatar"),h=s("time-row"),T=s("openwb-base-setting-element");return r(),w(T,null,W({title:n(()=>[y(t.$slots,"title",{},()=>[c(S(f.title),1)])]),default:n(()=>[o(h,null,{start:n(()=>[...e[0]||(e[0]=[c(" Beginn ",-1)])]),end:n(()=>[...e[1]||(e[1]=[c(" Ende ",-1)])]),action:n(()=>[o(d,{class:"bg-success clickable",title:"Zeitbereich hinzufügen",onClick:F(a.addTime,["stop"])},{default:n(()=>[o(_,{icon:["fas","plus"]})]),_:1},8,["onClick"])]),_:1}),a.value.length===0?(r(),m("div",j," Keine Zeitbereiche definiert! ")):C("",!0),(r(!0),m(V,null,x(a.value,(p,v)=>(r(),w(h,{key:v},{start:n(()=>[q(u("select",{"onUpdate:modelValue":i=>p[0]=i,class:"form-control",required:"",onChange:i=>a.updateEndOptions(v)},[e[2]||(e[2]=u("option",{value:"",disabled:""}," -- Bitte auswählen -- ",-1)),(r(!0),m(V,null,x(a.generateTimeOptions("00:00","23:00"),i=>(r(),m("option",{key:i.value,value:i.value},S(i.text),9,J))),128))],40,L),[[z,p[0]]])]),end:n(()=>[q(u("select",{"onUpdate:modelValue":i=>p[1]=i,class:"form-control",required:""},[e[3]||(e[3]=u("option",{value:"",disabled:""}," -- Bitte auswählen -- ",-1)),(r(!0),m(V,null,x(g.endOptions[v],i=>(r(),m("option",{key:i.value,value:i.value},S(i.text),9,Y))),128))],8,X),[[z,p[1]]])]),action:n(()=>[a.value.length>1?(r(),w(d,{key:0,class:"bg-danger clickable",title:"Zeitbereich entfernen",onClick:F(i=>a.removeTime(v),["stop"])},{default:n(()=>[o(_,{icon:["fas","trash"]})]),_:1},8,["onClick"])):C("",!0)]),_:2},1024))),128))]),_:2},[t.$slots.help?{name:"help",fn:n(()=>[y(t.$slots,"help")]),key:"0"}:void 0]),1024)}const te=$(R,[["render",ee],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/grid_fees/fixed_hours/TimeTable.vue"]]);k.add(B);k.add(U);const ae={name:"FixedTariff",components:{FontAwesomeIcon:O,TimeTable:te},props:{modelValue:{type:Object,required:!0}},emits:["update:modelValue","delete"],data(){return{weekdayOptions:[{value:1,text:"Montag"},{value:2,text:"Dienstag"},{value:3,text:"Mittwoch"},{value:4,text:"Donnerstag"},{value:5,text:"Freitag"},{value:6,text:"Samstag"},{value:0,text:"Sonntag"}]}},computed:{tariff:{get(){return this.modelValue},set(t){this.$emit("update:modelValue",t)}},dates:{get(){return Array.isArray(this.tariff.active_times?.dates)?this.tariff.active_times.dates.map(([t,e])=>`${t};${e}`):[]},set(t){this.tariff.active_times.dates=t.map(e=>e.split(";"))}},weekdays:{get(){return Array.isArray(this.tariff.active_times?.weekdays)?this.tariff.active_times.weekdays:[]},set(t){this.tariff.active_times.weekdays=t}}}};function ne(t,e,f,b,g,a){const _=s("font-awesome-icon"),d=s("openwb-base-avatar"),h=s("openwb-base-text-input"),T=s("openwb-base-number-input"),p=s("openwb-base-select-input"),v=s("time-table"),i=s("openwb-base-card");return r(),w(i,{subtype:"info",collapsible:!0,collapsed:!0},{header:n(()=>[c(S(a.tariff.name),1)]),actions:n(()=>[o(d,{class:"bg-danger clickable",onClick:e[0]||(e[0]=l=>t.$emit("delete"))},{default:n(()=>[o(_,{icon:["fas","trash"]})]),_:1})]),default:n(()=>[o(h,{modelValue:a.tariff.name,"onUpdate:modelValue":e[1]||(e[1]=l=>a.tariff.name=l),title:"Tarifname"},null,8,["modelValue"]),o(T,{title:"Preis",step:.001,precision:3,required:"",unit:"ct/kWh","model-value":parseFloat((a.tariff.price*1e5).toFixed(4)),"onUpdate:modelValue":e[2]||(e[2]=l=>a.tariff.price=l/1e5)},null,8,["model-value"]),o(p,{modelValue:a.dates,"onUpdate:modelValue":e[3]||(e[3]=l=>a.dates=l),title:"Quartale",required:"",multiple:"",options:[{value:"01-01;31-03",text:"1. Quartal"},{value:"01-04;30-06",text:"2. Quartal"},{value:"01-07;30-09",text:"3. Quartal"},{value:"01-10;31-12",text:"4. Quartal"}]},null,8,["modelValue"]),o(p,{modelValue:a.weekdays,"onUpdate:modelValue":e[4]||(e[4]=l=>a.weekdays=l),title:"Aktive Wochentage",required:"",multiple:"",options:g.weekdayOptions},null,8,["modelValue","options"]),o(v,{modelValue:a.tariff.active_times.times,"onUpdate:modelValue":e[5]||(e[5]=l=>a.tariff.active_times.times=l),title:"Aktive Zeiten"},null,8,["modelValue"])]),_:1})}const ie=$(ae,[["render",ne],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/grid_fees/fixed_hours/FixedTariff.vue"]]);k.add(B);k.add(U);const se={name:"GridFeeFixedHours",components:{FontAwesomeIcon:O,FixedTariff:ie},mixins:[D],computed:{value:{get(){return this.gridFee},set(t){console.log("set",t),this.updateConfiguration(t)}}},methods:{addTariff(){this.value.configuration.tariffs.push({name:"Neuer Tarif",price:0,active_times:{dates:[],weekdays:[],times:[["",""]]}})},removeTariff(t){this.value.configuration.tariffs.splice(t,1)}}},oe={class:"grid-fee-fixed-hours"};function re(t,e,f,b,g,a){const _=s("openwb-base-alert"),d=s("openwb-base-number-input"),h=s("font-awesome-icon"),T=s("openwb-base-avatar"),p=s("openwb-base-heading"),v=s("fixed-tariff");return r(),m("div",oe,[o(_,{subtype:"info"},{default:n(()=>[...e[1]||(e[1]=[c(" Konfiguriert feste Tarifzeiten, z.b. HT, NT und Standardpreis. ",-1)])]),_:1}),o(d,{title:"Standardpreis",step:.001,precision:3,required:"",unit:"ct/kWh","model-value":parseFloat((a.value.configuration.default_price*1e5).toFixed(4)),"onUpdate:modelValue":e[0]||(e[0]=i=>a.value.configuration.default_price=i/1e5)},{help:n(()=>[...e[2]||(e[2]=[c(" Standardpreis sofern kein anderer Tarif aktiv ist. ",-1)])]),_:1},8,["model-value"]),e[5]||(e[5]=u("hr",null,null,-1)),o(p,null,{actions:n(()=>[o(T,{class:"bg-success clickable",onClick:F(a.addTariff,["stop"])},{default:n(()=>[o(h,{icon:["fas","plus"]})]),_:1},8,["onClick"])]),default:n(()=>[e[3]||(e[3]=c(" Tarife ",-1))]),_:1}),a.value.configuration.tariffs.length===0?(r(),w(_,{key:0,subtype:"info"},{default:n(()=>[...e[4]||(e[4]=[c(" Es wurde noch kein Tarif konfiguriert. Klicke auf das Plus-Symbol, um einen neuen Tarif hinzuzufügen.",-1),u("br",null,null,-1),c(" Tarife ermöglichen es, Preise für unterschiedliche Zeiten zu definieren. ",-1)])]),_:1})):C("",!0),(r(!0),m(V,null,x(a.value.configuration.tariffs,(i,l)=>(r(),w(v,{key:l,"model-value":i,"onUpdate:modelValue":A=>a.value.configuration.tariffs[l]=A,onDelete:A=>a.removeTariff(l)},null,8,["model-value","onUpdate:modelValue","onDelete"]))),128))])}const ve=$(se,[["render",re],["__scopeId","data-v-5ed1a321"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/grid_fees/fixed_hours/grid_fee.vue"]]);export{ve as default}; +import{G as D}from"./GeneralChargeConfiguration-Bukx6MR1.js";import{_ as $,l as r,f as m,y as u,j as y,m as s,z as w,D as W,u as n,q as o,A as F,B as c,x as C,K as V,L as x,E as q,J as S,M as z}from"./vendor-BwGffBs-.js";import{F as O,l as k,d as B,al as U}from"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const E={name:"TimeRow"},H={class:"w-100"},M={class:"form-row align-items-center"},N={class:"col-10"},I={class:"form-row"},Q={class:"col-6"},Z={class:"col-6"},K={class:"col-2 text-right"};function P(t,e,f,b,g,a){return r(),m("div",H,[u("div",M,[u("div",N,[u("div",I,[u("div",Q,[y(t.$slots,"start")]),u("div",Z,[y(t.$slots,"end")])])]),u("div",K,[y(t.$slots,"action")])])])}const G=$(E,[["render",P],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/grid_fees/fixed_hours/TimeRow.vue"]]);k.add(B);k.add(U);const R={name:"TimeTable",components:{FontAwesomeIcon:O,TimeRow:G},inheritAttrs:!1,props:{title:{type:String,required:!0},modelValue:{type:Array,default:()=>[]}},emits:["update:modelValue"],data(){return{endOptions:this.modelValue.map(()=>this.generateTimeOptions("01:00","24:00"))}},computed:{value:{get(){return this.modelValue},set(t){this.$emit("update:modelValue",t)}}},methods:{generateTimeOptions(t,e){const f=[],b=parseInt(t.split(":")[0],10),g=parseInt(e.split(":")[0],10);for(let a=b;a<=g;a++){const d=`${a.toString().padStart(2,"0")}:00`;f.push({value:d,text:d})}return f},addTime(){this.value.push(["",""])},removeTime(t){this.value.splice(t,1)},updateEndOptions(t){const e=this.value[t][0];if(e){const b=(parseInt(e.split(":")[0],10)+1).toString().padStart(2,"0")+":00";this.endOptions[t]=this.generateTimeOptions(b,"24:00")}else this.endOptions[t]=this.generateTimeOptions("01:00","24:00")}}},j={key:0,class:"w-100 alert alert-danger"},L=["onUpdate:modelValue","onChange"],J=["value"],X=["onUpdate:modelValue"],Y=["value"];function ee(t,e,f,b,g,a){const _=s("font-awesome-icon"),d=s("openwb-base-avatar"),h=s("time-row"),T=s("openwb-base-setting-element");return r(),w(T,null,W({title:n(()=>[y(t.$slots,"title",{},()=>[c(S(f.title),1)])]),default:n(()=>[o(h,null,{start:n(()=>[...e[0]||(e[0]=[c(" Beginn ",-1)])]),end:n(()=>[...e[1]||(e[1]=[c(" Ende ",-1)])]),action:n(()=>[o(d,{class:"bg-success clickable",title:"Zeitbereich hinzufügen",onClick:F(a.addTime,["stop"])},{default:n(()=>[o(_,{icon:["fas","plus"]})]),_:1},8,["onClick"])]),_:1}),a.value.length===0?(r(),m("div",j," Keine Zeitbereiche definiert! ")):C("",!0),(r(!0),m(V,null,x(a.value,(p,v)=>(r(),w(h,{key:v},{start:n(()=>[q(u("select",{"onUpdate:modelValue":i=>p[0]=i,class:"form-control",required:"",onChange:i=>a.updateEndOptions(v)},[e[2]||(e[2]=u("option",{value:"",disabled:""}," -- Bitte auswählen -- ",-1)),(r(!0),m(V,null,x(a.generateTimeOptions("00:00","23:00"),i=>(r(),m("option",{key:i.value,value:i.value},S(i.text),9,J))),128))],40,L),[[z,p[0]]])]),end:n(()=>[q(u("select",{"onUpdate:modelValue":i=>p[1]=i,class:"form-control",required:""},[e[3]||(e[3]=u("option",{value:"",disabled:""}," -- Bitte auswählen -- ",-1)),(r(!0),m(V,null,x(g.endOptions[v],i=>(r(),m("option",{key:i.value,value:i.value},S(i.text),9,Y))),128))],8,X),[[z,p[1]]])]),action:n(()=>[a.value.length>1?(r(),w(d,{key:0,class:"bg-danger clickable",title:"Zeitbereich entfernen",onClick:F(i=>a.removeTime(v),["stop"])},{default:n(()=>[o(_,{icon:["fas","trash"]})]),_:1},8,["onClick"])):C("",!0)]),_:2},1024))),128))]),_:2},[t.$slots.help?{name:"help",fn:n(()=>[y(t.$slots,"help")]),key:"0"}:void 0]),1024)}const te=$(R,[["render",ee],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/grid_fees/fixed_hours/TimeTable.vue"]]);k.add(B);k.add(U);const ae={name:"FixedTariff",components:{FontAwesomeIcon:O,TimeTable:te},props:{modelValue:{type:Object,required:!0}},emits:["update:modelValue","delete"],data(){return{weekdayOptions:[{value:0,text:"Montag"},{value:1,text:"Dienstag"},{value:2,text:"Mittwoch"},{value:3,text:"Donnerstag"},{value:4,text:"Freitag"},{value:5,text:"Samstag"},{value:6,text:"Sonntag"}]}},computed:{tariff:{get(){return this.modelValue},set(t){this.$emit("update:modelValue",t)}},dates:{get(){return Array.isArray(this.tariff.active_times?.dates)?this.tariff.active_times.dates.map(([t,e])=>`${t};${e}`):[]},set(t){this.tariff.active_times.dates=t.map(e=>e.split(";"))}},weekdays:{get(){return Array.isArray(this.tariff.active_times?.weekdays)?this.tariff.active_times.weekdays:[]},set(t){this.tariff.active_times.weekdays=t}}}};function ne(t,e,f,b,g,a){const _=s("font-awesome-icon"),d=s("openwb-base-avatar"),h=s("openwb-base-text-input"),T=s("openwb-base-number-input"),p=s("openwb-base-select-input"),v=s("time-table"),i=s("openwb-base-card");return r(),w(i,{subtype:"info",collapsible:!0,collapsed:!0},{header:n(()=>[c(S(a.tariff.name),1)]),actions:n(()=>[o(d,{class:"bg-danger clickable",onClick:e[0]||(e[0]=l=>t.$emit("delete"))},{default:n(()=>[o(_,{icon:["fas","trash"]})]),_:1})]),default:n(()=>[o(h,{modelValue:a.tariff.name,"onUpdate:modelValue":e[1]||(e[1]=l=>a.tariff.name=l),title:"Tarifname"},null,8,["modelValue"]),o(T,{title:"Preis",step:.001,precision:3,required:"",unit:"ct/kWh","model-value":parseFloat((a.tariff.price*1e5).toFixed(4)),"onUpdate:modelValue":e[2]||(e[2]=l=>a.tariff.price=l/1e5)},null,8,["model-value"]),o(p,{modelValue:a.dates,"onUpdate:modelValue":e[3]||(e[3]=l=>a.dates=l),title:"Quartale",required:"",multiple:"",options:[{value:"01-01;31-03",text:"1. Quartal"},{value:"01-04;30-06",text:"2. Quartal"},{value:"01-07;30-09",text:"3. Quartal"},{value:"01-10;31-12",text:"4. Quartal"}]},null,8,["modelValue"]),o(p,{modelValue:a.weekdays,"onUpdate:modelValue":e[4]||(e[4]=l=>a.weekdays=l),title:"Aktive Wochentage",required:"",multiple:"",options:g.weekdayOptions},null,8,["modelValue","options"]),o(v,{modelValue:a.tariff.active_times.times,"onUpdate:modelValue":e[5]||(e[5]=l=>a.tariff.active_times.times=l),title:"Aktive Zeiten"},null,8,["modelValue"])]),_:1})}const ie=$(ae,[["render",ne],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/grid_fees/fixed_hours/FixedTariff.vue"]]);k.add(B);k.add(U);const se={name:"GridFeeFixedHours",components:{FontAwesomeIcon:O,FixedTariff:ie},mixins:[D],computed:{value:{get(){return this.gridFee},set(t){console.log("set",t),this.updateConfiguration(t)}}},methods:{addTariff(){this.value.configuration.tariffs.push({name:"Neuer Tarif",price:0,active_times:{dates:[],weekdays:[],times:[["",""]]}})},removeTariff(t){this.value.configuration.tariffs.splice(t,1)}}},oe={class:"grid-fee-fixed-hours"};function re(t,e,f,b,g,a){const _=s("openwb-base-alert"),d=s("openwb-base-number-input"),h=s("font-awesome-icon"),T=s("openwb-base-avatar"),p=s("openwb-base-heading"),v=s("fixed-tariff");return r(),m("div",oe,[o(_,{subtype:"info"},{default:n(()=>[...e[1]||(e[1]=[c(" Konfiguriert feste Tarifzeiten, z.b. HT, NT und Standardpreis. ",-1)])]),_:1}),o(d,{title:"Standardpreis",step:.001,precision:3,required:"",unit:"ct/kWh","model-value":parseFloat((a.value.configuration.default_price*1e5).toFixed(4)),"onUpdate:modelValue":e[0]||(e[0]=i=>a.value.configuration.default_price=i/1e5)},{help:n(()=>[...e[2]||(e[2]=[c(" Standardpreis sofern kein anderer Tarif aktiv ist. ",-1)])]),_:1},8,["model-value"]),e[5]||(e[5]=u("hr",null,null,-1)),o(p,null,{actions:n(()=>[o(T,{class:"bg-success clickable",onClick:F(a.addTariff,["stop"])},{default:n(()=>[o(h,{icon:["fas","plus"]})]),_:1},8,["onClick"])]),default:n(()=>[e[3]||(e[3]=c(" Tarife ",-1))]),_:1}),a.value.configuration.tariffs.length===0?(r(),w(_,{key:0,subtype:"info"},{default:n(()=>[...e[4]||(e[4]=[c(" Es wurde noch kein Tarif konfiguriert. Klicke auf das Plus-Symbol, um einen neuen Tarif hinzuzufügen.",-1),u("br",null,null,-1),c(" Tarife ermöglichen es, Preise für unterschiedliche Zeiten zu definieren. ",-1)])]),_:1})):C("",!0),(r(!0),m(V,null,x(a.value.configuration.tariffs,(i,l)=>(r(),w(v,{key:l,"model-value":i,"onUpdate:modelValue":A=>a.value.configuration.tariffs[l]=A,onDelete:A=>a.removeTariff(l)},null,8,["model-value","onUpdate:modelValue","onDelete"]))),128))])}const ve=$(se,[["render",re],["__scopeId","data-v-5ed1a321"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/electricity_pricing/grid_fees/fixed_hours/grid_fee.vue"]]);export{ve as default}; diff --git a/web/settings/assets/index-Bv2WLdLZ.js b/web/settings/assets/index-CE-5DBwq.js similarity index 96% rename from web/settings/assets/index-Bv2WLdLZ.js rename to web/settings/assets/index-CE-5DBwq.js index 85b27affe2..473340f011 100644 --- a/web/settings/assets/index-Bv2WLdLZ.js +++ b/web/settings/assets/index-CE-5DBwq.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Status-ZxRyfX38.js","assets/vendor-fortawesome-DplTMxoa.js","assets/vendor-BwGffBs-.js","assets/vendor-Cq9CCOuG.css","assets/vendor-chartjs-C4FabExn.js","assets/vendor-luxon-BDx6lZXm.js","assets/vendor-bootstrap-DxivtUnb.js","assets/vendor-jquery-CEMonh9Y.js","assets/vendor-bootstrap-BJ8HpIhY.css","assets/vendor-axios-C0vEeTtS.js","assets/Status-C2EBkHqs.css","assets/ChargeLog-C6D5JW6I.js","assets/ChargeLog-D2ZLixbI.css","assets/Chart-Bibs_Mk0.js","assets/Chart-W0k1ck0V.css","assets/GeneralConfiguration-BiYqLhF0.js","assets/SystemVersion-eCZ4XHiC.js","assets/dynamic-import-helper-BheWnx7M.js","assets/IdentificationConfiguration-DeRAwqIq.js","assets/DisplayConfiguration-BtMQTY__.js","assets/GeneralChargeConfiguration-ZMe157LV.js","assets/SurplusChargeConfiguration-BuCou0oD.js","assets/ActiveBatControlConfiguration-DCsLHsew.js","assets/HardwareInstallation-Ln-RWgHD.js","assets/DeviceConfigMixin-D2g2-xc_.js","assets/LoadManagementConfiguration-KljkkYHP.js","assets/OpenwbSortableList-CQO_8Mps.js","assets/OpenwbSortableList-BkrTk2sD.css","assets/ChargePointInstallation-u7kPgCv5.js","assets/ChargePointInstallation-37TSBtDo.css","assets/VehicleConfiguration-CDk_8xEa.js","assets/ConsumerConfig-DBNAxLj7.js","assets/IoConfiguration-p0bHlEKR.js","assets/CloudConfiguration-cyqsfdIl.js","assets/MqttBridgeConfiguration-Bt8St25W.js","assets/DebugConfiguration-BZBY-RKS.js","assets/DebugConfiguration-CN753w98.css","assets/Support-kYroR_AI.js","assets/LegalSettings-DeM9kqbo.js","assets/SystemConfiguration-Clo1_d0_.js","assets/SystemConfiguration-BWslT2W-.css","assets/SecurityConfiguration-BzxouWX6.js","assets/DataManagement-CkfxmcJu.js","assets/InstallAssistant-MPSFE3Da.js","assets/TenantEnergyBilling-UAAw2hP7.js","assets/TenantEnergyBilling-CkqmgSr0.css","assets/Error-DFtWFT2X.js","assets/TestingStore-DDIFpUgY.js"])))=>i.map(i=>d[i]); -import{_ as C,f as c,j as _,k as S,l as i,m as g,q as b,u as m,x as u,y as l,z as f,A as E,B as h,D as q,E as O,F as A,G,I as V,J as w,K as M,L as P,M as te,N as me,O as fe,P as ge,Q as he,R as be,S as _e,T as ve,U as ye,V as we,W as j,X as Z,n as ke,Y as J,Z as Ce,$ as Se,a0 as Be,a1 as Ae,a2 as Ie,a3 as Oe,a4 as Te}from"./vendor-BwGffBs-.js";import{l as T,f as se,a as ne,F as $,b as $e,c as Me,d as N,e as Ve,g as U,h as Pe,i as qe,j as De,k as Le,m as Ee,n as Re,o as xe,p as We,q as je,r as ze,s as Ne,t as Ue,u as Fe,v as He,w as oe,x as Ke,y as Ge,z as Ze,A as Je,B as Qe,C as ie,D as Ye,E as Xe,G as et,H as tt,I as st,J as nt,K as ot,L as it,M as at,N as lt,O as rt,P as ae,Q as dt,R as ut,S as ct,T as pt,U as mt}from"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import{p as ft,a as gt}from"./vendor-axios-C0vEeTtS.js";import"./vendor-jquery-CEMonh9Y.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))d(o);new MutationObserver(o=>{for(const n of o)if(n.type==="childList")for(const a of n.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&d(a)}).observe(document,{childList:!0,subtree:!0});function s(o){const n={};return o.integrity&&(n.integrity=o.integrity),o.referrerPolicy&&(n.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?n.credentials="include":o.crossOrigin==="anonymous"?n.credentials="omit":n.credentials="same-origin",n}function d(o){if(o.ep)return;o.ep=!0;const n=s(o);fetch(o.href,n)}})();const ht={name:"OpenwbAlert",props:{subtype:{validator:function(e){return["info","success","warning","danger","primary","secondary","light","dark"].indexOf(e)!==-1},default:"secondary"}}};function bt(e,t,s,d,o,n){return i(),c("div",{class:S(["card-text alert","alert-"+s.subtype])},[_(e.$slots,"default",{},void 0,!0)],2)}const _t=C(ht,[["render",bt],["__scopeId","data-v-055c15aa"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseAlert.vue"]]),vt=Object.freeze(Object.defineProperty({__proto__:null,default:_t},Symbol.toStringTag,{value:"Module"}));T.add(se,ne);const yt={name:"OpenwbBaseSettingElement",components:{FontAwesomeIcon:$},data(){return{showHelp:!1}},methods:{toggleHelp(){this.showHelp=!this.showHelp&&this.$slots.help!==void 0}}},wt={key:0,class:"col-md-4 col-form-label"},kt={class:"form-row"},Ct={key:0,class:"form-text alert alert-info my-1 small flex-fill"};function St(e,t,s,d,o,n){const a=g("font-awesome-icon"),p=g("openwb-base-tooltip");return i(),c("div",{class:S(["form-row",e.$slots.title?"mb-1":"mx-0"])},[e.$slots.title?(i(),c("div",wt,[_(e.$slots,"title",{},void 0,!0),b(p,{description:`Hilfe ${o.showHelp?"verbergen":"anzeigen"}`},{default:m(()=>[e.$slots.help?(i(),f(a,{key:0,icon:o.showHelp?["fas","question-circle"]:["far","question-circle"],class:S(["clickable ml-1",o.showHelp?"text-info":""]),onClick:E(n.toggleHelp,["stop"])},null,8,["icon","class","onClick"])):u("",!0)]),_:1},8,["description"])])):u("",!0),l("div",{class:S(e.$slots.title?"col-md-8":"col px-0")},[l("div",{class:S({"form-row":e.$slots.title})},[_(e.$slots,"default",{},()=>[t[0]||(t[0]=h("*ELEMENT MISSING*",-1))],!0)],2),l("div",kt,[o.showHelp?(i(),c("span",Ct,[_(e.$slots,"help",{},void 0,!0)])):u("",!0)])],2)],2)}const D=C(yt,[["render",St],["__scopeId","data-v-33864f66"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseSettingElement.vue"]]),Bt=Object.freeze(Object.defineProperty({__proto__:null,default:D},Symbol.toStringTag,{value:"Module"})),At={name:"BaseSettingComponents",data(){return{uid:Math.random().toString(36).substring(2,15)}}},L=C(At,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/mixins/BaseSettingComponents.vue"]]);T.add($e,Me,N,Ve);const It={name:"OpenwbArrayInput",components:{FontAwesomeIcon:$,OpenwbBaseSettingElement:D},mixins:[L],inheritAttrs:!1,props:{title:{type:String,required:!0},modelValue:{type:Array,default:()=>[]},validElements:{type:Array,default:()=>[]},noElementsMessage:{type:String,default:()=>"Keine Elemente zugeordnet."},disabled:{type:Boolean,default:()=>!1},readonly:{type:Boolean,default:()=>!1}},emits:["update:modelValue"],data(){return{newTag:""}},computed:{value:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},remainingElements(){return this.validElements.length===0?[]:this.validElements.filter(e=>!this.value.includes(e.value||e))},newTagValid:{get(){return this.newTag.length>0&&!this.value.includes(this.newTag)&&(this.validElements.length===0||this.validElements.includes(this.newTag)||this.validElements.some(e=>e.value===this.newTag))&&this.$refs.tagInput?.checkValidity()}},tagLabel(){return e=>{const t=this.validElements.find(s=>(s.value||s)===e);return t?t.label||t.value||t:e}}},methods:{addTag(){if(this.newTagValid){const e=[...this.value,this.newTag].sort();this.value=e,this.newTag=""}this.$refs.tagInput.focus()},removeTag(e){let t=[...this.value];t.splice(e,1),this.value=t}}},Ot={key:0,class:"w-100"},Tt={class:"input-group"},$t={class:"input-group-prepend"},Mt={class:"input-group-text"},Vt=["id","disabled"],Pt=["id","disabled"],qt={value:"",disabled:""},Dt=["value"],Lt={class:"input-group-append"},Et={class:"tagList mt-1 w-100"},Rt={key:0,class:"noTag"};function xt(e,t,s,d,o,n){const a=g("font-awesome-icon"),p=g("openwb-base-setting-element");return i(),f(p,null,q({title:m(()=>[_(e.$slots,"title",{},()=>[h(w(s.title),1)],!0)]),default:m(()=>[s.readonly||s.disabled?u("",!0):(i(),c("div",Ot,[l("div",Tt,[l("div",$t,[l("div",Mt,[_(e.$slots,"input-prefix",{},()=>[b(a,{icon:["fas","tag"]})],!0)])]),s.validElements.length===0?O((i(),c("input",A({key:0,id:`${e.uid}-tag-input`,ref:"tagInput","onUpdate:modelValue":t[0]||(t[0]=r=>o.newTag=r),type:"text",class:"form-control"},e.$attrs,{disabled:s.disabled,onKeyup:t[1]||(t[1]=G((...r)=>n.addTag&&n.addTag(...r),["enter"]))}),null,16,Vt)),[[V,o.newTag]]):O((i(),c("select",A({key:1,id:`${e.uid}-tag-input`,ref:"tagInput","onUpdate:modelValue":t[2]||(t[2]=r=>o.newTag=r),class:"form-control"},e.$attrs,{disabled:s.disabled,onKeyup:t[3]||(t[3]=G((...r)=>n.addTag&&n.addTag(...r),["enter"]))}),[l("option",qt,w(n.remainingElements.length>0?"Bitte wählen...":"Keine weiteren Optionen verfügbar"),1),(i(!0),c(M,null,P(n.remainingElements,(r,v)=>(i(),c("option",{key:v,value:r.value||r},w(r.label||r.value||r),9,Dt))),128))],16,Pt)),[[te,o.newTag]]),l("div",Lt,[l("div",{class:S(["input-group-text",n.newTagValid?"bg-success clickable":"not-clickable"]),onClick:t[4]||(t[4]=(...r)=>n.addTag&&n.addTag(...r))},[_(e.$slots,"input-add",{},()=>[b(a,{icon:["fas","plus"]})],!0)],2)])])])),l("div",Et,[n.value.length==0?(i(),c("span",Rt,[b(a,{icon:["fas","info-circle"]}),h(" "+w(s.noElementsMessage),1)])):u("",!0),(i(!0),c(M,null,P(n.value,(r,v)=>(i(),c("span",{key:v,class:"tag"},[_(e.$slots,"element-prefix",{},()=>[b(a,{icon:["fas","tag"]})],!0),h(" "+w(n.tagLabel(r))+" ",1),s.readonly||s.disabled?u("",!0):(i(),f(a,{key:0,class:"clickable remove-element",icon:["fas","times-circle"],onClick:k=>n.removeTag(v)},null,8,["onClick"]))]))),128))])]),_:2},[e.$slots.help?{name:"help",fn:m(()=>[_(e.$slots,"help",{},void 0,!0)]),key:"0"}:void 0]),1024)}const Wt=C(It,[["render",xt],["__scopeId","data-v-9de93d37"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseArrayInput.vue"]]),jt=Object.freeze(Object.defineProperty({__proto__:null,default:Wt},Symbol.toStringTag,{value:"Module"})),zt={name:"OpenwbAvatar"},Nt={class:"avatar"};function Ut(e,t,s,d,o,n){return i(),c("div",Nt,[_(e.$slots,"default",{},()=>[t[0]||(t[0]=h("?",-1))],!0)])}const Ft=C(zt,[["render",Ut],["__scopeId","data-v-06082a1a"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseAvatar.vue"]]),Ht=Object.freeze(Object.defineProperty({__proto__:null,default:Ft},Symbol.toStringTag,{value:"Module"}));T.add(U);const Kt={name:"OpenwbButtonRow",components:{FontAwesomeIcon:$},inheritAttrs:!1,props:{buttons:{type:Array,required:!0},modelValue:{type:[String,Number,Boolean],default:null},disabled:{type:Boolean,default:!1},uid:{type:String,required:!0}},emits:["update:modelValue","button-click"],computed:{value:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}}}},Gt={class:"btn-group btn-block btn-group-toggle"},Zt=["for"],Jt=["id","value","disabled","onClick"];function Qt(e,t,s,d,o,n){const a=g("font-awesome-icon");return i(),c("div",Gt,[(i(!0),c(M,null,P(s.buttons,p=>(i(),c("label",{key:p.buttonValue,class:S(["btn btn-same-size btn-centered",[{active:s.modelValue===p.buttonValue},{disabled:s.disabled||p.disabled},p.class?p.class:"btn-outline-info"]]),for:`${s.uid}-${p.buttonValue}`},[l("span",null,[O(l("input",A({id:`${s.uid}-${p.buttonValue}`,"onUpdate:modelValue":t[0]||(t[0]=r=>n.value=r),type:"radio",value:p.buttonValue},{ref_for:!0},e.$attrs,{disabled:s.disabled||p.disabled,onClick:r=>e.$emit("button-click",p.buttonValue)}),null,16,Jt),[[me,n.value]]),_(e.$slots,"label-"+p.buttonValue,{},()=>[h(w(p.text),1)],!0),t[1]||(t[1]=l("span",null," ",-1)),b(a,{icon:["fas","check"],style:fe([n.value==p.buttonValue?"visibility: visible":"visibility: hidden"])},null,8,["style"])])],10,Zt))),128))])}const le=C(Kt,[["render",Qt],["__scopeId","data-v-4bd221b6"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseButtonRow.vue"]]),Yt=Object.freeze(Object.defineProperty({__proto__:null,default:le},Symbol.toStringTag,{value:"Module"})),Xt={name:"OpenwbButtonGroupInput",components:{OpenwbBaseSettingElement:D,OpenwbBaseButtonRow:le},mixins:[L],inheritAttrs:!1,props:{title:{type:String,required:!1,default:""},modelValue:{type:[String,Number,Boolean],default:void 0},buttons:{type:Array,required:!0},disabled:{type:Boolean,required:!1,default:!1},maxButtonsPerRow:{type:Number,default:Number.POSITIVE_INFINITY}},emits:["update:modelValue","button-click"],data(){return{containerWidth:0}},computed:{value:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},maxButtonsPerRowAuto(){return this.containerWidth<=200?1:this.containerWidth<=360?2:this.containerWidth<=550?3:1/0},buttonRows(){const e=[];for(let t=0;t[_(e.$slots,"title",{},()=>[h(w(s.title),1)],!0)]),default:m(()=>[l("div",es,[(i(!0),c(M,null,P(n.buttonRows,(r,v)=>(i(),f(a,A({key:v,buttons:r,uid:e.uid,"model-value":n.value,disabled:s.disabled},{ref_for:!0},e.$attrs,{"onUpdate:modelValue":t[0]||(t[0]=k=>n.value=k),onButtonClick:t[1]||(t[1]=k=>e.$emit("button-click",k))}),q({_:2},[P(r,k=>({name:`label-${k.buttonValue}`,fn:m(y=>[_(e.$slots,`label-${k.buttonValue}`,A({ref_for:!0},y),void 0,!0)])}))]),1040,["buttons","uid","model-value","disabled"]))),128))],512)]),_:2},[e.$slots.help?{name:"help",fn:m(()=>[_(e.$slots,"help",{},void 0,!0)]),key:"0"}:void 0]),1024)}const ss=C(Xt,[["render",ts],["__scopeId","data-v-31e583df"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseButtonGroupInput.vue"]]),ns=Object.freeze(Object.defineProperty({__proto__:null,default:ss},Symbol.toStringTag,{value:"Module"})),os={name:"OpenwbClickButton",props:{title:{type:String,required:!1,default:""},tooltip:{type:String,required:!1,default:""},href:{type:String,default:null}},emits:["buttonClicked"],methods:{handleClick(e){this.href||(e.preventDefault(),this.$emit("buttonClicked",e))}}};function is(e,t,s,d,o,n){return i(),f(ge(s.href?"a":"button"),{href:s.href||null,type:s.href?null:"button",class:"btn btn-block",title:s.tooltip,target:s.href?"_blank":null,rel:"noopener noreferrer",onClick:n.handleClick},{default:m(()=>[_(e.$slots,"default",{},()=>[h(w(s.title),1)],!0)]),_:3},8,["href","type","title","target","onClick"])}const re=C(os,[["render",is],["__scopeId","data-v-2e9c095b"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseClickButton.vue"]]),as=Object.freeze(Object.defineProperty({__proto__:null,default:re},Symbol.toStringTag,{value:"Module"})),ls={name:"OpenwbButtonInput",components:{OpenwbBaseSettingElement:D,OpenwbBaseClickButton:re},inheritAttrs:!1,props:{title:{type:String,required:!1,default:""},buttonText:{type:String,required:!1,default:void 0},disabled:{type:Boolean,default:!1},subtype:{type:String,validator:function(e){return["info","success","warning","danger","primary","secondary","light","dark"].indexOf(e)!==-1},default:"secondary"}},emits:["buttonClicked"],methods:{handleClick(e){this.$emit("buttonClicked",e)}}};function rs(e,t,s,d,o,n){const a=g("openwb-base-click-button"),p=g("openwb-base-setting-element");return i(),f(p,null,q({title:m(()=>[_(e.$slots,"title",{},()=>[h(w(s.title),1)])]),default:m(()=>[b(a,A({class:(s.disabled?"btn-outline-":"btn-")+s.subtype,disabled:s.disabled},e.$attrs,{onButtonClicked:n.handleClick}),{default:m(()=>[h(w(s.buttonText),1)]),_:1},16,["class","disabled","onButtonClicked"])]),_:2},[e.$slots.help?{name:"help",fn:m(()=>[_(e.$slots,"help")]),key:"0"}:void 0]),1024)}const ds=C(ls,[["render",rs],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseButtonInput.vue"]]),us=Object.freeze(Object.defineProperty({__proto__:null,default:ds},Symbol.toStringTag,{value:"Module"}));T.add(Pe,qe);const cs={name:"OpenwbCard",components:{FontAwesomeIcon:$},inheritAttrs:!1,props:{title:{type:String,default:void 0},subtype:{validator:function(e){return["info","success","warning","danger","primary","secondary","light","dark","pink","purple","white"].indexOf(e)!==-1},default:"secondary"},bodyBg:{validator:function(e){return["info","success","warning","danger","primary","secondary","light","dark","pink","purple","white"].indexOf(e)!==-1},default:"light"},collapsible:{type:Boolean,default:!1},collapsed:{type:Boolean,default:!1}},emits:["collapsed","expanded"],data(){return{isCollapsed:this.collapsible&&this.collapsed}},methods:{toggleBody(){this.collapsible===!0&&(this.isCollapsed=!this.isCollapsed,this.$emit(this.isCollapsed?"collapsed":"expanded"))}}},ps={class:"form-group mb-0"},ms={class:"form-row vaRow mb-0"},fs={class:"col"},gs={class:"header-left-wrapper"},hs={class:"card-actions ml-4"},bs={key:0,class:"card-actions mr-2"},_s={key:2,class:"card-footer"};function vs(e,t,s,d,o,n){const a=g("font-awesome-icon");return i(),c("div",{class:S(["card","border-"+s.subtype])},[s.title!==void 0||e.$slots.header?(i(),c("div",{key:0,class:S(["card-header py-1","bg-"+s.subtype]),onClick:t[0]||(t[0]=(...p)=>n.toggleBody&&n.toggleBody(...p))},[l("div",ps,[l("div",ms,[l("div",fs,[l("div",gs,[_(e.$slots,"header",{collapsed:o.isCollapsed},()=>[h(w(s.title),1)],!0)])])])]),l("div",hs,[e.$slots.actions?(i(),c("div",bs,[_(e.$slots,"actions",{collapsed:o.isCollapsed},void 0,!0)])):u("",!0),s.collapsible?(i(),f(a,{key:1,icon:o.isCollapsed?["fas","chevron-right"]:["fas","chevron-down"]},null,8,["icon"])):u("",!0)])],2)):u("",!0),o.isCollapsed===!1?(i(),c("div",A({key:1,class:["card-body",[s.title==null&&!e.$slots.header?"border-radius-top-inherit":"",e.$slots.footer?"":"border-radius-bottom-inherit","bg-"+s.bodyBg]]},e.$attrs),[_(e.$slots,"default",{},void 0,!0)],16)):u("",!0),e.$slots.footer&&o.isCollapsed===!1?(i(),c("div",_s,[_(e.$slots,"footer",{},void 0,!0)])):u("",!0)],2)}const ys=C(cs,[["render",vs],["__scopeId","data-v-9833c353"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseCard.vue"]]),ws=Object.freeze(Object.defineProperty({__proto__:null,default:ys},Symbol.toStringTag,{value:"Module"})),ks={name:"OpenwbCheckboxInput",components:{OpenwbBaseSettingElement:D},mixins:[L],inheritAttrs:!1,props:{title:{type:String,required:!1,default:""},modelValue:{type:Boolean}},emits:["update:modelValue"],computed:{value:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}}}},Cs={class:"col-md-8"},Ss=["id"];function Bs(e,t,s,d,o,n){const a=g("openwb-base-setting-element");return i(),f(a,null,q({title:m(()=>[_(e.$slots,"title",{},()=>[h(w(s.title),1)])]),default:m(()=>[l("div",Cs,[O(l("input",A({id:`${e.uid}-checkbox-input`,"onUpdate:modelValue":t[0]||(t[0]=p=>n.value=p),class:"form-control",type:"checkbox"},e.$attrs),null,16,Ss),[[he,n.value]])])]),_:2},[e.$slots.help?{name:"help",fn:m(()=>[_(e.$slots,"help")]),key:"0"}:void 0]),1024)}const As=C(ks,[["render",Bs],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseCheckboxInput.vue"]]),Is=Object.freeze(Object.defineProperty({__proto__:null,default:As},Symbol.toStringTag,{value:"Module"}));T.add(De);const F={name:"OpenwbColorPicker",components:{FontAwesomeIcon:$,Popper:ve,CompactPicker:_e,SketchPicker:be},mixins:[L],props:{modelValue:{type:String,required:!1,default:void 0,validator:e=>/^#[0-9A-F]{6}$/i.test(e)},defaultColor:{type:String,required:!1,default:void 0,validator:e=>/^#[0-9A-F]{6}$/i.test(e)},colorPalette:{type:Array,required:!1,default:void 0},disabled:{type:Boolean,required:!1,default:!1}},emits:["update:model-value"],computed:{value:{get(){return this.modelValue||this.defaultColor||"#000000"},set(e){this.$emit("update:model-value",e)}}}},Q=()=>{ye(e=>({"1378b599-value":e.value}))},Y=F.setup;F.setup=Y?(e,t)=>(Q(),Y(e,t)):Q;const Os={class:"wrapper"},Ts=["id","disabled"];function $s(e,t,s,d,o,n){const a=g("compact-picker"),p=g("sketch-picker"),r=g("popper"),v=g("font-awesome-icon"),k=g("openwb-base-tooltip");return i(),c("div",Os,[b(r,null,{content:m(()=>[s.colorPalette!==void 0?(i(),f(a,{key:0,modelValue:n.value,"onUpdate:modelValue":t[0]||(t[0]=y=>n.value=y),"disable-alpha":!0,palette:s.colorPalette},null,8,["modelValue","palette"])):(i(),f(p,{key:1,modelValue:n.value,"onUpdate:modelValue":t[1]||(t[1]=y=>n.value=y),"disable-alpha":!0,"preset-colors":s.colorPalette},null,8,["modelValue","preset-colors"]))]),default:m(()=>[l("input",{id:`${e.uid}-color-input`,type:"button",class:S(["custom-color-picker",{disabled:s.disabled}]),disabled:s.disabled},null,10,Ts)]),_:1}),s.defaultColor&&!s.disabled?(i(),f(k,{key:0,description:`Zurücksetzen auf Standardfarbe (${s.defaultColor})`},{default:m(()=>[b(v,{class:"ml-1 clickable",icon:["fas","rotate-left"],disabled:n.value==s.defaultColor,onClick:t[2]||(t[2]=y=>n.value=s.defaultColor)},null,8,["disabled"])]),_:1},8,["description"])):u("",!0)])}const Ms=C(F,[["render",$s],["__scopeId","data-v-1378b599"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseColorPicker.vue"]]),Vs=Object.freeze(Object.defineProperty({__proto__:null,default:Ms},Symbol.toStringTag,{value:"Module"})),{text:X,copy:Ps,copied:qs,isSupported:Ds}=we({copiedDuring:3e3,legacy:!0});T.add(Le,Ee);const Ls={name:"OpenwbCopyToClipboard",components:{FontAwesomeIcon:$},props:{tooltip:{type:String,default:"Wert kopieren"}},data(){return{}},computed:{contentText(){return this.$refs.content?.innerText?this.$refs.content.innerText.trim():""},isCopied(){return qs.value&&X.value===this.contentText},copySupported(){return Ds.value}},methods:{click(){this.copySupported&&Ps(this.contentText).then(()=>{console.debug("Text copied to clipboard:",X.value)}).catch(e=>{console.error("Failed to copy text to clipboard:",e)})}}},Es=["title"],Rs={ref:"content"};function xs(e,t,s,d,o,n){const a=g("font-awesome-icon");return i(),c("span",{title:n.copySupported&&!n.isCopied?s.tooltip:"",class:S({"copy-me":n.copySupported&&!n.isCopied}),onClick:t[0]||(t[0]=E((...p)=>n.click&&n.click(...p),["stop"]))},[l("span",Rs,[_(e.$slots,"default",{},void 0,!0)],512),n.copySupported?(i(),f(a,{key:0,class:"ml-1",icon:n.isCopied?["fas","clipboard-check"]:["fas","clipboard"]},null,8,["icon"])):u("",!0)],10,Es)}const Ws=C(Ls,[["render",xs],["__scopeId","data-v-81826ebe"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseCopyToClipboard.vue"]]),js=Object.freeze(Object.defineProperty({__proto__:null,default:Ws},Symbol.toStringTag,{value:"Module"}));T.add(se,ne,U);const zs={name:"OpenwbHeading",components:{FontAwesomeIcon:$},inheritAttrs:!1,data(){return{showHelp:!1}},methods:{toggleHelp(){this.showHelp=!this.showHelp&&this.$slots.help!==void 0}}},Ns={class:"heading-text"},Us={key:0,class:"actions"},Fs={class:"form-row"},Hs={key:0,class:"form-text alert alert-info small flex-fill"};function Ks(e,t,s,d,o,n){const a=g("font-awesome-icon");return i(),c(M,null,[l("div",A({class:"card-text card-text-heading"},e.$attrs),[l("div",Ns,[_(e.$slots,"default",{},void 0,!0),e.$slots.help?(i(),f(a,{key:0,icon:o.showHelp?["fas","question-circle"]:["far","question-circle"],class:S(["clickable",o.showHelp?"text-info":""]),onClick:E(n.toggleHelp,["stop"])},null,8,["icon","class","onClick"])):u("",!0)]),e.$slots.actions?(i(),c("span",Us,[_(e.$slots,"actions",{},void 0,!0)])):u("",!0)],16),l("div",Fs,[o.showHelp?(i(),c("span",Hs,[_(e.$slots,"help",{},void 0,!0)])):u("",!0)])],64)}const Gs=C(zs,[["render",Ks],["__scopeId","data-v-cbe4e96e"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseHeading.vue"]]),Zs=Object.freeze(Object.defineProperty({__proto__:null,default:Gs},Symbol.toStringTag,{value:"Module"}));T.add(Re,xe,We,je);const x={null:{value:null,icon:["fas","question"],iconClass:"text-secondary",title:"Nicht relevant",nextValue:!0},true:{value:!0,icon:["fas","square"],iconClass:"",title:"Geschlossen",nextValue:!1},false:{value:!1,icon:["far","square"],iconClass:"",title:"Offen",nextValue:null}},Js={name:"OpenwbIoPattern",components:{FontAwesomeIcon:$},inheritAttrs:!1,props:{title:{type:String,required:!1,default:""},modelValue:{type:Array,required:!1,default:()=>[]}},emits:["update:modelValue"],computed:{value:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}}},methods:{getIcon(e){return x[e].icon},getIconClass(e){return x[e].iconClass},getTitle(e){return x[e].title},toggleInput(e,t){this.value[e]=x[t].nextValue}}};function Qs(e,t,s,d,o,n){const a=g("font-awesome-icon"),p=g("openwb-base-tooltip"),r=g("openwb-base-setting-element");return i(),f(r,null,q({title:m(()=>[_(e.$slots,"title",{},()=>[h(w(s.title),1)])]),default:m(()=>[(i(!0),c(M,null,P(n.value,(v,k)=>(i(),c("span",{key:k},[b(p,{description:n.getTitle(v)},{default:m(()=>[b(a,{icon:n.getIcon(v),class:S([n.getIconClass(v),"fa-fw clickable"]),size:"2x",transform:v=="undefined"?"shrink-6":null,mask:v=="undefined"?["fas","square"]:null,onClick:E(y=>n.toggleInput(k,v),["stop","prevent"]),onMousedown:t[0]||(t[0]=E(()=>{},["stop","prevent"])),onMouseup:t[1]||(t[1]=E(()=>{},["stop","prevent"]))},null,8,["icon","class","transform","mask","onClick"])]),_:2},1032,["description"])]))),128))]),_:2},[e.$slots.help?{name:"help",fn:m(()=>[_(e.$slots,"help")]),key:"0"}:void 0]),1024)}const Ys=C(Js,[["render",Qs],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseIoPattern.vue"]]),Xs=Object.freeze(Object.defineProperty({__proto__:null,default:Ys},Symbol.toStringTag,{value:"Module"})),en={name:"OpenwbModalDialog",props:{title:{type:String,required:!1,default:""},subtype:{type:String,validator:function(e){return["info","success","warning","danger","primary","secondary","light","dark"].indexOf(e)!==-1},default:"secondary"},buttons:{type:Array,default:void 0},footerAlignment:{type:String,validator:function(e){return["around","between","center","end","start"].indexOf(e)!==-1},default:"end"},preventClose:{type:Boolean,default:!1},show:{type:Boolean,default:!1}},emits:["modal-result"],computed:{myButtons(){var e=[];return this.buttons!==void 0&&(e=[...this.buttons]),e.findIndex(t=>t.event==="close")===-1&&!this.preventClose&&e.push({text:"Schließen",event:"close"}),e}},methods:{handleClick(e){e.stopPropagation();let t=e.target.getAttribute("data-event");t===null&&(t="close"),(t!="close"||!this.preventClose)&&this.$emit("modal-result",t)}}},tn={class:"modal-content"},sn={class:"modal-title"},nn={class:"modal-body"},on=["disabled","data-event"];function an(e,t,s,d,o,n){return s.show?(i(),f(j,{key:0,to:"body"},[t[5]||(t[5]=l("div",{class:"modal-backdrop fade show"},null,-1)),l("div",{class:"modal fade d-block show",role:"dialog",onClick:t[3]||(t[3]=(...a)=>n.handleClick&&n.handleClick(...a))},[l("div",{class:"modal-dialog modal-dialog-centered modal-dialog-scrollable",role:"document",onClick:t[2]||(t[2]=E(()=>{},["stop"]))},[l("div",tn,[l("div",{class:S(["modal-header","bg-"+s.subtype])},[l("h4",sn,w(s.title),1),s.preventClose?u("",!0):(i(),c("button",{key:0,type:"button",class:"close",onClick:t[0]||(t[0]=(...a)=>n.handleClick&&n.handleClick(...a))}," × "))],2),l("div",nn,[_(e.$slots,"default",{},()=>[t[4]||(t[4]=h("# Body #",-1))])]),n.myButtons.length>0?(i(),c("div",{key:0,class:S(["modal-footer d-flex","justify-content-"+s.footerAlignment])},[(i(!0),c(M,null,P(n.myButtons,a=>(i(),c("button",{key:a.text,disabled:a.disabled===!0,type:"button",class:S(["btn",(a.disabled?"btn-outline-":"btn-")+(a.subtype??"secondary")]),"data-dismiss":"modal","data-event":a.event?a.event:"close",onClick:t[1]||(t[1]=(...p)=>n.handleClick&&n.handleClick(...p))},w(a.text),11,on))),128))],2)):u("",!0)])])])])):u("",!0)}const ln=C(en,[["render",an],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseModalDialog.vue"]]),rn=Object.freeze(Object.defineProperty({__proto__:null,default:ln},Symbol.toStringTag,{value:"Module"}));T.add(ze);const dn={name:"OpenwbNumberInput",components:{FontAwesomeIcon:$,OpenwbBaseSettingElement:D},mixins:[L],inheritAttrs:!1,props:{title:{type:String,required:!1,default:""},modelValue:{type:Number,required:!1,default:void 0},unit:{type:String,required:!1,default:void 0},precision:{type:Number,default:void 0},emptyValue:{type:[Number,null],required:!1,default:null}},emits:["update:modelValue"],computed:{value:{get(){return this.precision!==void 0?parseFloat(Math.round(this.modelValue*Math.pow(10,this.precision))/Math.pow(10,this.precision)):this.modelValue},set(e){(isNaN(e)||typeof e!="number")&&(e=this.emptyValue),this.$emit("update:modelValue",e)}}}},un={class:"input-group"},cn={class:"input-group-prepend"},pn={class:"input-group-text"},mn=["id"],fn={key:0,class:"input-group-append"},gn={class:"input-group-text"},hn={key:1,class:"input-group-append"},bn={class:"input-group-text p-0"};function _n(e,t,s,d,o,n){const a=g("font-awesome-icon"),p=g("openwb-base-setting-element");return i(),f(p,null,q({title:m(()=>[_(e.$slots,"title",{},()=>[h(w(s.title),1)],!0)]),default:m(()=>[l("div",un,[l("div",cn,[l("div",pn,[b(a,{icon:["fas","calculator"]})])]),O(l("input",A({id:`${e.uid}-number-input`,"onUpdate:modelValue":t[0]||(t[0]=r=>n.value=r),type:"number",class:"form-control"},e.$attrs),null,16,mn),[[V,n.value,void 0,{lazy:!0,number:!0}]]),s.unit?(i(),c("div",fn,[l("div",gn,w(s.unit),1)])):u("",!0),e.$slots.append?(i(),c("div",hn,[l("div",bn,[_(e.$slots,"append",{},void 0,!0)])])):u("",!0)])]),_:2},[e.$slots.help?{name:"help",fn:m(()=>[_(e.$slots,"help",{},void 0,!0)]),key:"0"}:void 0]),1024)}const vn=C(dn,[["render",_n],["__scopeId","data-v-c2fb7eef"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseNumberInput.vue"]]),yn=Object.freeze(Object.defineProperty({__proto__:null,default:vn},Symbol.toStringTag,{value:"Module"}));T.add(Ne,Ue);const wn={name:"OpenwbRangeInput",components:{FontAwesomeIcon:$,OpenwbBaseSettingElement:D},mixins:[L],inheritAttrs:!1,props:{title:{type:String,required:!1,default:""},modelValue:{type:Number,required:!1,default:void 0},unit:{type:String,required:!1,default:void 0},min:{type:Number,required:!1,default:0},max:{type:Number,required:!1,default:100},step:{type:Number,required:!1,default:1},labels:{type:Array,required:!1,default:void 0}},emits:["update:modelValue"],computed:{label(){var e;return this.labels&&this.sliderValue!=null?this.sliderValue[_(e.$slots,"title",{},()=>[h(w(s.title),1)],!0)]),default:m(()=>[l("div",kn,[l("div",Cn,[n.label?(i(),c("label",{key:0,class:"col-2 pl-0 col-form-label valueLabel",for:`${e.uid}-button`},w(n.label),9,Sn)):u("",!0),l("button",{id:`${e.uid}-button`,class:"col-1 btn btn-block btn-info px-0",type:"button",onClick:t[0]||(t[0]=(...r)=>n.decrement&&n.decrement(...r))},[b(a,{icon:["fas","step-backward"]})],8,Bn),l("div",An,[O(l("input",A({"onUpdate:modelValue":t[1]||(t[1]=r=>n.sliderValue=r),type:"range",class:"form-control-range rangeInput",min:s.min,max:s.max,step:s.step},e.$attrs),null,16,In),[[V,n.sliderValue,void 0,{number:!0}]])]),l("button",{class:"col-1 btn btn-block btn-info px-0",type:"button",onClick:t[2]||(t[2]=(...r)=>n.increment&&n.increment(...r))},[b(a,{icon:["fas","step-forward"]})])])])]),_:2},[e.$slots.help?{name:"help",fn:m(()=>[_(e.$slots,"help",{},void 0,!0)]),key:"0"}:void 0]),1024)}const Tn=C(wn,[["render",On],["__scopeId","data-v-449fb0a5"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseRangeInput.vue"]]),$n=Object.freeze(Object.defineProperty({__proto__:null,default:Tn},Symbol.toStringTag,{value:"Module"}));T.add(N);const Mn={name:"OpenwbSelectInput",components:{FontAwesomeIcon:$,OpenwbBaseSettingElement:D},mixins:[L],inheritAttrs:!1,props:{title:{type:String,required:!1,default:void 0},modelValue:{type:[String,Number,Array,null],required:!1,default:void 0},emptyValue:{type:[String,Number,Array],required:!1,default:void 0},groups:{type:Array,required:!1,default:void 0},options:{type:Array,required:!1,default:void 0},notSelected:{type:String,default:void 0},addButton:{type:Boolean,default:!1}},emits:["update:modelValue","input:add"],computed:{value:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},addDisabled:{get(){return this.value===void 0}}},methods:{addClicked(){this.addDisabled||this.$emit("input:add")}}},Vn={class:"w-100"},Pn={class:"input-group"},qn={key:0,class:"input-group-prepend"},Dn={class:"input-group-text"},Ln=["id"],En=["value"],Rn=["value"],xn=["label"],Wn=["value"],jn={key:1,class:"input-group-append"};function zn(e,t,s,d,o,n){const a=g("font-awesome-icon"),p=g("openwb-base-setting-element");return i(),f(p,null,q({default:m(()=>[l("div",Vn,[l("div",Pn,[e.$slots.prefix?(i(),c("div",qn,[l("div",Dn,[_(e.$slots,"prefix")])])):u("",!0),O(l("select",A({id:`${e.uid}-select`,"onUpdate:modelValue":t[0]||(t[0]=r=>n.value=r),class:"col form-control"},e.$attrs),[s.notSelected!==void 0?(i(),c("option",{key:0,value:s.emptyValue,disabled:""}," -- "+w(s.notSelected)+" -- ",9,En)):u("",!0),(i(!0),c(M,null,P(s.options,r=>(i(),c("option",{key:r.value,value:r.value},w(r.text),9,Rn))),128)),(i(!0),c(M,null,P(s.groups,r=>(i(),c("optgroup",{key:r.label,label:r.label},[(i(!0),c(M,null,P(r.options,v=>(i(),c("option",{key:v.value,value:v.value},w(v.text),9,Wn))),128))],8,xn))),128))],16,Ln),[[te,n.value]]),s.addButton?(i(),c("div",jn,[l("div",{class:S(["input-group-text",n.addDisabled?"not-clickable":"bg-success clickable"]),onClick:t[1]||(t[1]=r=>n.addClicked())},[_(e.$slots,"inputAdd",{},()=>[b(a,{icon:["fas","plus"]})])],2)])):u("",!0)])])]),_:2},[e.$slots.title||s.title?{name:"title",fn:m(()=>[_(e.$slots,"title",{},()=>[h(w(s.title),1)])]),key:"0"}:void 0,e.$slots.help?{name:"help",fn:m(()=>[_(e.$slots,"help")]),key:"1"}:void 0]),1024)}const Nn=C(Mn,[["render",zn],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseSelectInput.vue"]]),Un=Object.freeze(Object.defineProperty({__proto__:null,default:Nn},Symbol.toStringTag,{value:"Module"}));T.add(U,Fe,He);const Fn={name:"OpenwbSubmitButtons",components:{FontAwesomeIcon:$},props:{formName:{type:String,default:void 0},hideReset:{type:Boolean,default:!1},hideDefaults:{type:Boolean,default:!0},saveLabel:{type:String,default:"Speichern"},saveDisabled:{type:Boolean,default:!1},saveId:{type:String,default:"saveSettingsBtn"},resetLabel:{type:String,default:"Änderungen verwerfen"},resetDisabled:{type:Boolean,default:!1},resetId:{type:String,default:"modalResetBtn"},defaultsLabel:{type:String,default:"Werkseinstellungen"},defaultsDisabled:{type:Boolean,default:!1},defaultsId:{type:String,default:"modalDefaultsBtn"}},emits:["reset","defaults","save"],data(){return{showModalReset:!1,showModalDefaults:!1}},computed:{showModalSave(){return this.$store.state.local.savingData&&this.$store.state.local.preventSavingModal===!1}},methods:{showResetModal(){this.showModalReset=!0},handleModalReset(e){this.showModalReset=!1,e=="confirm"&&this.$emit("reset")},showDefaultsModal(){this.showModalDefaults=!0},handleModalDefaults(e){this.showModalDefaults=!1,e=="confirm"&&this.$emit("defaults")},saveSettings(){if(this.formName){if(!document.forms[this.formName].reportValidity()){console.debug("form invalid");return}}else console.debug("no form to validate");this.$emit("save")}}},Hn={class:"row justify-content-center mb-1 w-100"},Kn={class:"col-md-4 d-flex py-1 justify-content-center"},Gn=["id","disabled"],Zn={key:0,class:"col-md-4 d-flex py-1 justify-content-center"},Jn=["id","disabled"],Qn={key:1,class:"col-md-4 d-flex py-1 justify-content-center"},Yn=["id","disabled"];function Xn(e,t,s,d,o,n){const a=g("openwb-base-modal-dialog"),p=g("font-awesome-icon");return i(),c(M,null,[b(a,{show:n.showModalSave,title:"Speichern",subtype:"success","prevent-close":!0},{default:m(()=>[...t[3]||(t[3]=[h(" Einstellungen werden gespeichert... ",-1)])]),_:1},8,["show"]),b(a,{show:o.showModalReset,title:"Änderungen verwerfen",subtype:"warning",buttons:[{text:"Ok",event:"confirm",subtype:"warning"}],onModalResult:n.handleModalReset},{default:m(()=>[...t[4]||(t[4]=[h(" Willst Du die nicht gespeicherten Änderungen wirklich verwerfen? ",-1)])]),_:1},8,["show","onModalResult"]),b(a,{show:o.showModalDefaults,title:"Werkseinstellungen",subtype:"danger",buttons:[{text:"Ok",event:"confirm",subtype:"danger"}],onModalResult:n.handleModalDefaults},{default:m(()=>[...t[5]||(t[5]=[h(" Willst Du wirklich alle Werte dieser Seite auf die Werkseinstellungen zurücksetzen? ",-1)])]),_:1},8,["show","onModalResult"]),l("div",Hn,[l("div",Kn,[l("button",{id:s.saveId,type:"button",class:S(["btn btn-block",[{disabled:s.saveDisabled},s.saveDisabled?"btn-outline-success":"btn-success"]]),disabled:s.saveDisabled,onClick:t[0]||(t[0]=(...r)=>n.saveSettings&&n.saveSettings(...r))},[h(w(s.saveLabel)+" ",1),b(p,{icon:["fas","check"]})],10,Gn)]),s.hideReset?u("",!0):(i(),c("div",Zn,[l("button",{id:s.resetId,type:"button",class:S(["btn btn-block",[{disabled:s.resetDisabled},s.resetDisabled?"btn-outline-warning":"btn-warning"]]),disabled:s.resetDisabled,onClick:t[1]||(t[1]=(...r)=>n.showResetModal&&n.showResetModal(...r))},[h(w(s.resetLabel)+" ",1),b(p,{icon:["fas","undo"]})],10,Jn)])),s.hideDefaults?u("",!0):(i(),c("div",Qn,[l("button",{id:s.defaultsId,type:"button",class:S(["btn btn-block",[{disabled:s.defaultsDisabled},s.defaultsDisabled?"btn-outline-danger":"btn-danger"]]),disabled:s.defaultsDisabled,onClick:t[2]||(t[2]=(...r)=>n.showDefaultsModal&&n.showDefaultsModal(...r))},[h(w(s.defaultsLabel)+" ",1),b(p,{icon:["fas","times"]})],10,Yn)]))])],64)}const eo=C(Fn,[["render",Xn],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseSubmitButtons.vue"]]),to=Object.freeze(Object.defineProperty({__proto__:null,default:eo},Symbol.toStringTag,{value:"Module"}));T.add(oe,Ke,Ge,Ze,Je,Qe,ie,Ye,Xe,et,tt,N,st,nt);const so={name:"OpenwbTextInput",components:{FontAwesomeIcon:$,OpenwbBaseSettingElement:D},mixins:[L],inheritAttrs:!1,props:{title:{type:String,required:!1,default:""},modelValue:{type:[String,Object],required:!1,default:void 0},subtype:{validator:function(e){return["text","email","host","ipv4","url","user","group","json","password","time","date","month","year"].indexOf(e)!==-1},default:"text"},pattern:{type:String,required:!1,default:void 0},unit:{type:String,required:!1,default:void 0},emptyValue:{type:[String,Object,null],required:!1,default:null},validator:{type:Function,required:!1,default:null},showQuickButtons:{type:Boolean,default:!1},addButton:{type:Boolean,default:!1}},emits:["update:modelValue","input:add"],data(){return{showPassword:!1,inputInvalid:!1,tempValue:this.modelValue}},computed:{value:{get(){return this.subtype=="json"?this.inputInvalid?(console.warn("returning invalid String"),this.tempValue):JSON.stringify(this.tempValue):this.modelValue},set(e){if(this.validator){console.log("Validating input value:",e);const t=this.validator(e);console.log("Validation result:",t);const s=this.inputRef;t!==!0?(console.log("Marking input as invalid",JSON.stringify(this.$refs)),s&&typeof s.setCustomValidity=="function"&&s.setCustomValidity(t),this.inputInvalid=!0,this.tempValue=e):(console.log("Input is valid"),s&&typeof s.setCustomValidity=="function"&&s.setCustomValidity(""),this.inputInvalid=!1)}if(this.subtype=="json")try{let t=JSON.parse(e);this.inputInvalid=!1,this.$refs.jsonInput.setCustomValidity(""),this.tempValue=t,this.$emit("update:modelValue",t)}catch(t){console.error("parsing JSON failed: "+e,t),this.inputInvalid=!0,this.$refs.jsonInput.setCustomValidity("Ungültiger JSON Ausdruck!"),this.tempValue=e}else e==""&&(e=this.emptyValue),this.$emit("update:modelValue",e)}},inputRef(){switch(this.subtype){case"json":return this.$refs.jsonInput;case"password":return this.$refs.passwordInput;case"host":return this.$refs.hostInput;case"ipv4":return this.$refs.ipv4Input;case"email":case"url":return this.$refs.urlInput;case"time":return this.$refs.timeInput;case"date":return this.$refs.dateInput;case"month":return this.$refs.monthInput;case"year":return this.$refs.yearInput}return this.$refs.textInput},hostPattern(){return`^((${this.ipv4Pattern.slice(1,-1)})|((?=.*[a-zA-Z].*$)([a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9]))|(((?=[^.]*[a-zA-Z][^.]*\\.)([a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9]\\.))+((?=[^.]*[a-zA-Z].*$)([a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9]))))$`},ipv4Pattern(){return"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"},addDisabled:{get(){return this.value===this.emptyValue||this.inputInvalid}}},methods:{togglePassword(){this.showPassword=!this.showPassword},modify(e){var t,s=new Date(this.modelValue);switch(this.subtype){case"date":s.setDate(s.getDate()+e),t=String(s.getFullYear())+"-"+String(s.getMonth()+1).padStart(2,"0")+"-"+String(s.getDate()).padStart(2,"0");break;case"month":s.setMonth(s.getMonth()+e),t=String(s.getFullYear())+"-"+String(s.getMonth()+1).padStart(2,"0");break;case"year":s.setYear(s.getFullYear()+e),t=String(s.getFullYear());break;default:console.warn(`cannot modify input of subtype '${this.subtype}'`);return}t>this.inputRef.max||t[_(e.$slots,"title",{},()=>[h(w(s.title),1)],!0)]),default:m(()=>[l("div",no,[l("div",oo,[l("div",io,[l("div",ao,[s.subtype=="text"?(i(),f(a,{key:0,icon:["fas","keyboard"]})):u("",!0),s.subtype=="email"?(i(),f(a,{key:1,icon:["fas","envelope"]})):u("",!0),s.subtype=="host"||s.subtype=="ipv4"?(i(),f(a,{key:2,icon:["fas","network-wired"]})):u("",!0),s.subtype=="url"?(i(),f(a,{key:3,icon:["fas","globe"]})):u("",!0),s.subtype=="user"?(i(),f(a,{key:4,icon:["fas","user"]})):u("",!0),s.subtype=="group"?(i(),f(a,{key:5,icon:["fas","users"]})):u("",!0),s.subtype=="json"?(i(),f(a,{key:6,icon:["fas","code"]})):u("",!0),s.subtype=="password"?(i(),f(a,{key:7,icon:o.showPassword?["fas","unlock"]:["fas","lock"]},null,8,["icon"])):u("",!0),s.subtype=="time"?(i(),f(a,{key:8,icon:["fas","clock"]})):u("",!0),s.subtype=="date"||s.subtype=="month"||s.subtype=="year"?(i(),f(a,{key:9,icon:["fas","calendar-day"]})):u("",!0)])]),["text","user","group"].includes(s.subtype)?O((i(),c("input",A({key:0,id:`${e.uid}-text-input`,ref:"textInput","onUpdate:modelValue":t[0]||(t[0]=r=>n.value=r),type:"text",class:["form-control",{invalid:o.inputInvalid}]},e.$attrs,{pattern:s.pattern}),null,16,lo)),[[V,n.value]]):u("",!0),s.subtype=="json"?O((i(),c("input",A({key:1,id:`${e.uid}-json-input`,ref:"jsonInput","onUpdate:modelValue":t[1]||(t[1]=r=>n.value=r),type:"text",class:"form-control"},e.$attrs,{pattern:s.pattern}),null,16,ro)),[[V,n.value]]):u("",!0),s.subtype=="password"?O((i(),c("input",A({key:2,id:`${e.uid}-password-input`,ref:"passwordInput","onUpdate:modelValue":t[2]||(t[2]=r=>n.value=r),type:o.showPassword?"text":"password",class:"form-control"},e.$attrs,{pattern:s.pattern}),null,16,uo)),[[Z,n.value]]):u("",!0),s.subtype=="host"?O((i(),c("input",A({key:3,id:`${e.uid}-host-input`,ref:"hostInput","onUpdate:modelValue":t[3]||(t[3]=r=>n.value=r),type:"text",class:"form-control"},e.$attrs,{pattern:n.hostPattern}),null,16,co)),[[V,n.value]]):u("",!0),s.subtype=="ipv4"?O((i(),c("input",A({key:4,id:`${e.uid}-ipv4-input`,ref:"ipv4Input","onUpdate:modelValue":t[4]||(t[4]=r=>n.value=r),type:"text",class:"form-control"},e.$attrs,{pattern:n.ipv4Pattern}),null,16,po)),[[V,n.value]]):u("",!0),["email","url"].includes(s.subtype)?O((i(),c("input",A({key:5,id:`${e.uid}-url-input`,ref:"urlInput","onUpdate:modelValue":t[5]||(t[5]=r=>n.value=r),type:s.subtype,class:"form-control"},e.$attrs),null,16,mo)),[[Z,n.value]]):u("",!0),s.subtype=="time"?O((i(),c("input",A({key:6,id:`${e.uid}-time-input`,ref:"timeInput","onUpdate:modelValue":t[6]||(t[6]=r=>n.value=r),type:"time",class:"form-control"},e.$attrs),null,16,fo)),[[V,n.value]]):u("",!0),s.subtype=="date"?O((i(),c("input",A({key:7,id:`${e.uid}-date-input`,ref:"dateInput","onUpdate:modelValue":t[7]||(t[7]=r=>n.value=r),type:"date",class:"form-control"},e.$attrs),null,16,go)),[[V,n.value]]):u("",!0),s.subtype=="month"?O((i(),c("input",A({key:8,id:`${e.uid}-month-input`,ref:"monthInput","onUpdate:modelValue":t[8]||(t[8]=r=>n.value=r),type:"month",class:"form-control"},e.$attrs),null,16,ho)),[[V,n.value]]):u("",!0),s.subtype=="year"?O((i(),c("input",A({key:9,id:`${e.uid}-year-input`,ref:"yearInput","onUpdate:modelValue":t[9]||(t[9]=r=>n.value=r),type:"number",class:"form-control"},e.$attrs),null,16,bo)),[[V,n.value]]):u("",!0),s.unit?(i(),c("div",_o,[l("div",vo,w(s.unit),1)])):u("",!0),s.subtype=="password"?(i(),c("div",{key:11,class:"input-group-append clickable",onClick:t[10]||(t[10]=(...r)=>n.togglePassword&&n.togglePassword(...r))},[l("div",yo,[b(a,{icon:o.showPassword?["far","eye"]:["far","eye-slash"]},null,8,["icon"])])])):u("",!0),s.showQuickButtons&&(s.subtype=="date"||s.subtype=="month"||s.subtype=="year")?(i(),c("div",{key:12,class:"input-group-append clickable",onClick:t[11]||(t[11]=r=>n.modify(-1))},[...t[14]||(t[14]=[l("div",{class:"input-group-text"},"-",-1)])])):u("",!0),s.showQuickButtons&&(s.subtype=="date"||s.subtype=="month"||s.subtype=="year")?(i(),c("div",{key:13,class:"input-group-append clickable",onClick:t[12]||(t[12]=r=>n.modify(1))},[...t[15]||(t[15]=[l("div",{class:"input-group-text"},"+",-1)])])):u("",!0),s.addButton?(i(),c("div",wo,[l("div",{class:S(["input-group-text",n.addDisabled?"not-clickable":"bg-success clickable"]),onClick:t[13]||(t[13]=r=>n.addClicked())},[_(e.$slots,"inputAdd",{},()=>[b(a,{icon:["fas","plus"]})],!0)],2)])):u("",!0),e.$slots.append?(i(),c("div",ko,[l("div",Co,[_(e.$slots,"append",{},void 0,!0)])])):u("",!0)])])]),_:2},[e.$slots.help?{name:"help",fn:m(()=>[_(e.$slots,"help",{},void 0,!0)]),key:"0"}:void 0]),1024)}const Bo=C(so,[["render",So],["__scopeId","data-v-6927d479"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseTextInput.vue"]]),Ao=Object.freeze(Object.defineProperty({__proto__:null,default:Bo},Symbol.toStringTag,{value:"Module"}));T.add(oe,ie);const Io={name:"OpenwbTextareaInput",components:{OpenwbBaseSettingElement:D,FontAwesomeIcon:$},mixins:[L],inheritAttrs:!1,props:{title:{type:String,required:!1,default:""},modelValue:{type:[String,Object],required:!1,default:void 0},subtype:{validator:function(e){return["text","json"].indexOf(e)!==-1},default:"text"}},emits:["update:modelValue"],data(){return{inputInvalid:!1,tempValue:this.modelValue}},computed:{value:{get(){return this.subtype=="json"?this.inputInvalid?(console.debug("returning invalid JSON as String"),this.tempValue):JSON.stringify(this.tempValue,void 0,2):this.modelValue},set(e){if(this.subtype=="json")try{let t=JSON.parse(e);this.inputInvalid=!1,this.$refs.jsonInput.setCustomValidity(""),this.tempValue=t,this.$emit("update:modelValue",t)}catch(t){console.warn("parsing JSON failed: "+e,t),this.inputInvalid=!0,this.$refs.jsonInput.setCustomValidity("Ungültiger JSON Ausdruck!"),this.tempValue=e}else this.$emit("update:modelValue",e)}},length:{get(){return this.value!==void 0?this.value.length:0}}}},Oo={class:"w-100"},To={class:"input-group"},$o={class:"input-group-prepend"},Mo={class:"input-group-text"},Vo=["id"],Po=["id"],qo={key:2,class:"input-group-append"},Do={class:"input-group-text"},Lo={class:"form-text text-muted text-right"};function Eo(e,t,s,d,o,n){const a=g("font-awesome-icon"),p=g("openwb-base-setting-element");return i(),f(p,null,q({title:m(()=>[_(e.$slots,"title",{},()=>[h(w(s.title),1)],!0)]),default:m(()=>[l("div",Oo,[l("div",To,[l("div",$o,[l("div",Mo,[s.subtype=="text"?(i(),f(a,{key:0,icon:["fas","keyboard"]})):u("",!0),s.subtype=="json"?(i(),f(a,{key:1,icon:["fas","code"]})):u("",!0)])]),s.subtype==="json"?O((i(),c("textarea",A({key:0,id:`${e.uid}-textarea`,ref:"jsonInput","onUpdate:modelValue":t[0]||(t[0]=r=>n.value=r),class:"form-control"},e.$attrs),null,16,Vo)),[[V,n.value,void 0,{lazy:!0}]]):O((i(),c("textarea",A({key:1,id:`${e.uid}-textarea`,"onUpdate:modelValue":t[1]||(t[1]=r=>n.value=r),class:"form-control"},e.$attrs),null,16,Po)),[[V,n.value]]),e.$attrs.maxlength?(i(),c("div",qo,[l("div",Do,[l("small",Lo,w(n.length)+" / "+w(e.$attrs.maxlength),1)])])):u("",!0)])])]),_:2},[e.$slots.help?{name:"help",fn:m(()=>[_(e.$slots,"help",{},void 0,!0)]),key:"0"}:void 0]),1024)}const Ro=C(Io,[["render",Eo],["__scopeId","data-v-3d93046b"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseTextarea.vue"]]),xo=Object.freeze(Object.defineProperty({__proto__:null,default:Ro},Symbol.toStringTag,{value:"Module"})),Wo={name:"OpenwbToast",props:{topic:{type:String,required:!0},subtype:{validator:function(e){return["info","success","warning","danger","primary","secondary","light","dark"].indexOf(e)!==-1},default:"secondary"},source:{type:String,required:!0,validator:function(e){return["system","client","command"].indexOf(e)!==-1}},timestamp:{type:Number,required:!0}},emits:["dismiss","hide"],data(){return{handle:void 0,relativeTime:void 0,hidden:!1}},mounted(){this.handle=window.setInterval(this.updateRelativeTime,1e3)},unmounted(){window.clearInterval(this.handle)},methods:{dismiss(){this.$emit("dismiss",{topic:this.topic})},updateRelativeTime(){const e={year:31536e6,month:2628e6,day:864e5,hour:36e5,minute:6e4,second:1e3};var t=new Intl.RelativeTimeFormat("de",{numeric:"auto"});const d=new Date-this.timestamp*1e3;for(var o in e)if(Math.abs(d)>e[o]){this.relativeTime=t.format(Math.round(-d/e[o]),o);break}d>10*1e3&&!this.hidden&&(this.hidden=!0,this.$emit("hide",{topic:this.topic}))}}},jo={key:0,class:"time-diff"},zo={class:"toast-body"};function No(e,t,s,d,o,n){return i(),c("div",{class:S(["toast","border-"+s.subtype]),role:"alert"},[l("div",{class:S(["toast-header","bg-"+s.subtype])},[t[2]||(t[2]=l("strong",{class:"pr-2 mr-auto"},"openWB",-1)),s.timestamp?(i(),c("small",jo,w(o.relativeTime),1)):u("",!0),l("button",{type:"button",class:"ml-2 mb-1 close","data-dismiss":"toast","aria-label":"Close",onClick:t[0]||(t[0]=(...a)=>n.dismiss&&n.dismiss(...a))},[...t[1]||(t[1]=[l("span",{"aria-hidden":"true"},"×",-1)])])],2),l("div",zo,[_(e.$slots,"default",{},void 0,!0)])],2)}const Uo=C(Wo,[["render",No],["__scopeId","data-v-c51b5764"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseToast.vue"]]),Fo=Object.freeze(Object.defineProperty({__proto__:null,default:Uo},Symbol.toStringTag,{value:"Module"})),Ho={name:"OpenwbTooltip",props:{description:{type:String,default:"#TOOLTIP#"},addHint:{type:Boolean,default:!1}}},Ko=["title"];function Go(e,t,s,d,o,n){return i(),c("div",{class:S(["base-text",{dotted:s.addHint}]),title:s.description},[_(e.$slots,"default",{},void 0,!0)],10,Ko)}const Zo=C(Ho,[["render",Go],["__scopeId","data-v-c65a1128"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseTooltip.vue"]]),Jo=Object.freeze(Object.defineProperty({__proto__:null,default:Zo},Symbol.toStringTag,{value:"Module"})),Qo={name:"ComponentState",emits:["reset","defaults","save"],data(){return{mqttTopics:[],weekdays:["Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag"],chargeModes:["instant_charging","pv_charging","scheduled_charging","time_charging","eco_charging","stop"],statusLevel:["success","warning","danger"]}},computed:{mqttTopicsToSubscribe(){return this.mqttTopics.map(e=>e.topic)},mqttTopicsToPublish(){return this.mqttTopics.filter(e=>e.writeable).map(e=>e.topic)}},mounted(){this.mqttTopicsToSubscribe.length>0&&this.$root.doSubscribe(this.mqttTopicsToSubscribe)},unmounted(){this.mqttTopicsToSubscribe.length>0&&this.$root.doUnsubscribe(this.mqttTopicsToSubscribe)},methods:{updateState(e,t,s=void 0){console.debug("updateState:",e,t,s),this.$store.commit({type:"updateTopic",topic:e,objectPath:s,payload:t})},ac_current2dc_power(e){return parseFloat((e*3*230/1e3).toFixed(0))},dc_power2ac_current(e){return parseFloat((e*1e3/230/3).toFixed(2))},getWildcardIndexList(e,t=!1){let s=e;t||(s="^"+e.replaceAll("/","\\/").replaceAll("+","[^+/]+").replaceAll("#","[^#/]+")+"$");let d=Object.keys(this.$store.state.mqtt).filter(o=>o.match(s));return d.forEach((o,n,a)=>{a[n]=parseInt(o.match(/(?:\/)([0-9]+)(?=\/)*/g)[0].replace(/[^0-9]+/g,""))}),d},getWildcardTopics(e,t=!1){let s=e;return t||(s="^"+e.replaceAll("/","\\/").replaceAll("+","[^+/]+").replaceAll("#","[^#/]+")+"$"),Object.keys(this.$store.state.mqtt).filter(d=>d.match(s)).reduce((d,o)=>({...d,[o]:this.$store.state.mqtt[o]}),{})},formatDate(e,t={year:"numeric",month:"2-digit",day:"2-digit"}){return new Date(e).toLocaleDateString(void 0,t)},formatNumber(e,t=0,s=t,d=1){if(!(e==null||isNaN(e)))return e=e*d,e.toLocaleString(void 0,{minimumFractionDigits:t,maximumFractionDigits:s})},formatNumberTopic(e,t=0,s=t,d=1){return this.$store.state.mqtt[e]?this.formatNumber(this.$store.state.mqtt[e],t,s,d):"-"},formatPhaseArrayNumberTopic(e,t=0,s=t,d=1){return this.$store.state.mqtt[e]?this.$store.state.mqtt[e].map(o=>this.formatNumber(o,t,s,d)):["-","-","-"]},translateChargeMode(e){return{instant_charging:"Sofort",pv_charging:"PV",scheduled_charging:"Zielladen",time_charging:"Zeitladen",eco_charging:"Eco",standby:"Standby",stop:"Stop"}[e]||e},getContrastColor(e){if(!e)return"#000000";e=e.replace("#","");const t=parseInt(e.substr(0,2),16),s=parseInt(e.substr(2,2),16),d=parseInt(e.substr(4,2),16);return(t*299+s*587+d*114)/1e3>125?"#212529":"#ffffff"}}},z=C(Qo,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/mixins/ComponentState.vue"]]);T.add(ot);const Yo={name:"OpenwbNavBar",components:{FontAwesomeIcon:$},mixins:[z],data(){return{mqttTopics:[{topic:"openWB/system/security/access/+",writeable:!1},{topic:"openWB/general/legacy_smarthome_active",writeable:!1}]}},computed:{nodeEnv(){return"development"},accessAllowed(){return e=>this.$store.state.mqtt[`openWB/system/security/access/${e}`]===!0},legacySmarthomeActive(){return this.$store.state.mqtt["openWB/general/legacy_smarthome_active"]!==!1}},watch:{$route(){this.$refs.collapsibleNavbar.classList.remove("show"),this.$refs.navbarButton.classList.add("collapsed"),this.$refs.navbarButton.setAttribute("aria-expanded",!1)}}},Xo={class:"navbar navbar-expand-xl bg-dark navbar-dark fixed-top"},ei={ref:"navbarButton",class:"navbar-toggler mr-auto",type:"button","data-toggle":"collapse","data-target":"#collapsibleNavbar"},ti={id:"collapsibleNavbar",ref:"collapsibleNavbar",class:"collapse navbar-collapse navbar-nav-scroll"},si={class:"navbar-nav mr-auto"},ni={key:0,class:"nav-item"},oi={class:"nav-item dropdown nav-separator-before"},ii={class:"dropdown-menu","aria-labelledby":"navbarDropdown"},ai={class:"nav-item dropdown nav-separator-before"},li={class:"dropdown-menu","aria-labelledby":"navbarDropdown"},ri={class:"nav-item dropdown"},di={class:"dropdown-menu","aria-labelledby":"navbarDropdown"},ui={class:"nav-item dropdown"},ci={class:"dropdown-menu","aria-labelledby":"navbarDropdown"},pi={key:5,class:"dropdown-divider"},mi={key:6,href:"modules/legacy_smart_home/smarthomeconfig.php",class:"dropdown-item",target:"_blank"},fi={class:"nav-item dropdown"},gi={class:"dropdown-menu","aria-labelledby":"navbarDropdown"},hi={class:"nav-item nav-separator-before"},bi={class:"nav-link",href:"https://wiki.openwb.de/",target:"_blank"};function _i(e,t,s,d,o,n){const a=g("router-link"),p=g("font-awesome-icon");return i(),c("nav",Xo,[t[32]||(t[32]=l("a",{class:"navbar-brand",href:"/openWB/web/"},[l("span",null,"openWB")],-1)),l("button",ei,[...t[0]||(t[0]=[l("span",{class:"navbar-toggler-icon"},null,-1)])],512),l("div",ti,[l("ul",si,[n.accessAllowed("Status")?(i(),c("li",ni,[b(a,{to:"/Status",class:"nav-link","active-class":"active disabled"},{default:m(()=>[...t[1]||(t[1]=[h(" Status ",-1)])]),_:1})])):u("",!0),l("li",oi,[t[4]||(t[4]=l("a",{class:"nav-link dropdown-toggle",href:"#",role:"button","data-toggle":"dropdown","aria-expanded":"false"}," Auswertungen ",-1)),l("div",ii,[n.accessAllowed("ChargeLog")?(i(),f(a,{key:0,to:"/Logging/ChargeLog",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[2]||(t[2]=[h(" Ladeprotokoll ",-1)])]),_:1})):u("",!0),n.accessAllowed("Chart")?(i(),f(a,{key:1,to:"/Logging/Chart",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[3]||(t[3]=[h(" Diagramme ",-1)])]),_:1})):u("",!0)])]),l("li",ai,[t[8]||(t[8]=l("a",{class:"nav-link dropdown-toggle",href:"#",role:"button","data-toggle":"dropdown","aria-expanded":"false"}," Einstellungen ",-1)),l("div",li,[n.accessAllowed("GeneralConfiguration")?(i(),f(a,{key:0,to:"/GeneralConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[5]||(t[5]=[h(" Allgemein ",-1)])]),_:1})):u("",!0),n.accessAllowed("DisplayConfiguration")?(i(),f(a,{key:1,to:"/DisplayConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[6]||(t[6]=[h(" Display ",-1)])]),_:1})):u("",!0),n.accessAllowed("IdentificationConfiguration")?(i(),f(a,{key:2,to:"/IdentificationConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[7]||(t[7]=[h(" Identifikation ",-1)])]),_:1})):u("",!0)])]),l("li",ri,[t[12]||(t[12]=l("a",{class:"nav-link dropdown-toggle",href:"#",role:"button","data-toggle":"dropdown","aria-expanded":"false"}," Ladeeinstellungen ",-1)),l("div",di,[n.accessAllowed("GeneralChargeConfiguration")?(i(),f(a,{key:0,to:"/GeneralChargeConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[9]||(t[9]=[h(" Übergreifendes ",-1)])]),_:1})):u("",!0),n.accessAllowed("SurplusChargeConfiguration")?(i(),f(a,{key:1,to:"/SurplusChargeConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[10]||(t[10]=[h(" Überschuss-Laden ",-1)])]),_:1})):u("",!0),n.accessAllowed("ActiveBatControlConfiguration")?(i(),f(a,{key:2,to:"/ActiveBatControlConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[11]||(t[11]=[h(" Speichersteuerung ",-1)])]),_:1})):u("",!0)])]),l("li",ui,[t[19]||(t[19]=l("a",{class:"nav-link dropdown-toggle",href:"#",role:"button","data-toggle":"dropdown","aria-expanded":"false"}," Konfiguration ",-1)),l("div",ci,[n.accessAllowed("HardwareInstallation")?(i(),f(a,{key:0,to:"/HardwareInstallation",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[13]||(t[13]=[h(" Geräte und Komponenten ",-1)])]),_:1})):u("",!0),n.accessAllowed("LoadManagementConfiguration")?(i(),f(a,{key:1,to:"/LoadManagementConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[14]||(t[14]=[h(" Lastmanagement ",-1)])]),_:1})):u("",!0),n.accessAllowed("ChargePointInstallation")?(i(),f(a,{key:2,to:"/ChargePointInstallation",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[15]||(t[15]=[h(" Ladepunkte ",-1)])]),_:1})):u("",!0),n.accessAllowed("VehicleConfiguration")?(i(),f(a,{key:3,to:"/VehicleConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[16]||(t[16]=[h(" Fahrzeuge ",-1)])]),_:1})):u("",!0),b(a,{to:"/ConsumerConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[17]||(t[17]=[h(" Verbraucher ",-1)])]),_:1}),n.accessAllowed("IoConfiguration")?(i(),f(a,{key:4,to:"/IoConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[18]||(t[18]=[h(" Ein-/Ausgänge ",-1)])]),_:1})):u("",!0),n.accessAllowed("LegacySmartHomeConfiguration")&&n.legacySmarthomeActive?(i(),c("div",pi)):u("",!0),n.accessAllowed("LegacySmartHomeConfiguration")&&n.legacySmarthomeActive?(i(),c("a",mi," SmartHome ")):u("",!0)])]),l("li",fi,[t[30]||(t[30]=l("a",{class:"nav-link dropdown-toggle",href:"#",role:"button","data-toggle":"dropdown","aria-expanded":"false"}," System ",-1)),l("div",gi,[n.accessAllowed("InstallAssistant")?(i(),f(a,{key:0,to:"/System/InstallAssistant",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[20]||(t[20]=[h(" Einrichtungsassistent ",-1)])]),_:1})):u("",!0),n.accessAllowed("CloudConfiguration")?(i(),f(a,{key:1,to:"/System/CloudConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[21]||(t[21]=[h(" openWB Cloud ",-1)])]),_:1})):u("",!0),n.accessAllowed("MqttBridgeConfiguration")?(i(),f(a,{key:2,to:"/System/MqttBridgeConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[22]||(t[22]=[h(" MQTT-Brücken ",-1)])]),_:1})):u("",!0),n.accessAllowed("DebugConfiguration")?(i(),f(a,{key:3,to:"/System/DebugConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[23]||(t[23]=[h(" Fehlersuche ",-1)])]),_:1})):u("",!0),n.accessAllowed("Support")?(i(),f(a,{key:4,to:"/System/Support",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[24]||(t[24]=[h(" Support ",-1)])]),_:1})):u("",!0),n.accessAllowed("DataManagement")?(i(),f(a,{key:5,to:"/System/DataManagement",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[25]||(t[25]=[h(" Datenverwaltung ",-1)])]),_:1})):u("",!0),n.accessAllowed("SecurityConfiguration")?(i(),f(a,{key:6,to:"/System/SecurityConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[26]||(t[26]=[h(" Sicherheit ",-1)])]),_:1})):u("",!0),n.accessAllowed("SystemConfiguration")?(i(),f(a,{key:7,to:"/System/SystemConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[27]||(t[27]=[h(" System ",-1)])]),_:1})):u("",!0),n.accessAllowed("TenantEnergyConfiguration")?(i(),f(a,{key:8,to:"/System/Abrechnung",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[28]||(t[28]=[h(" Abrechnung ",-1)])]),_:1})):u("",!0),n.accessAllowed("LegalSettings")?(i(),f(a,{key:9,to:"/System/LegalSettings",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[29]||(t[29]=[h(" Rechtliches ",-1)])]),_:1})):u("",!0)])]),l("li",hi,[l("a",bi,[t[31]||(t[31]=h(" Wiki ",-1)),b(p,{icon:["fas","external-link-alt"]})])])])],512),t[33]||(t[33]=l("div",{class:"ml-auto d-flex flex-row align-items-center"},[l("div",{id:"info-target"}),l("div",{id:"user-target"}),l("div",{id:"message-target"})],-1))])}const vi=C(Yo,[["render",_i],["__scopeId","data-v-e7a6d0c0"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbPageNavbar.vue"]]),yi={name:"OpenwbPageFooter"},wi={id:"footer",class:"footer bg-dark text-light font-small"},ki={class:"container text-center"};function Ci(e,t,s,d,o,n){return i(),c("footer",wi,[l("div",ki,[l("small",null," Du befindest dich hier: Einstellungen / "+w(e.$route.meta.heading),1)])])}const Si=C(yi,[["render",Ci],["__scopeId","data-v-3c9a239a"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbPageFooter.vue"]]);T.add(it,at,lt,rt);const Bi={name:"OpenwbPageUser",components:{FontAwesomeIcon:$,FontAwesomeLayers:ae},mixins:[z],emits:["sendCommand"],data(){return{mqttTopics:[{topic:"openWB/system/boot_done",writeable:!1},{topic:"openWB/system/dataprotection_acknowledged",writeable:!1},{topic:"openWB/system/security/access_allowed",writeable:!1},{topic:"openWB/system/security/user_management_active",writeable:!1},{topic:"openWB/system/update_in_progress",writeable:!1}],showLoginModal:!1,showPasswordResetModal:!1,showLogoutModal:!1,username:"",password:"",token:"",passwordConfirm:"",tokenRequested:!1,passwordResetRequested:!1,smallScreen:!1}},computed:{loggedInUser(){return this.$store.state.local.username||null},userManagementActive(){return this.$store.state.mqtt["openWB/system/security/user_management_active"]===!0},accessAllowed(){return this.$store.state.mqtt["openWB/system/security/access_allowed"]===void 0?!1:this.$store.state.mqtt["openWB/system/security/access_allowed"]===!0},anonymousAccessAllowed(){return this.accessAllowed&&this.loggedInUser===null},dataProtectionAcknowledged(){return this.$store.state.mqtt["openWB/system/dataprotection_acknowledged"]===!0},loginButtons(){let e=[{text:"Anmelden",event:"login",subtype:"success",disabled:this.stringIsEmpty(this.username)||this.stringIsEmpty(this.password)}];return this.dataProtectionAcknowledged&&e.push({text:"Kennwort vergessen",event:"forgot_password",subtype:"warning"}),e},requestTokenDisabled(){return this.stringIsEmpty(this.username)||this.tokenRequested},resetPasswordDisabled(){return this.stringIsEmpty(this.username)||this.stringIsEmpty(this.token)||this.stringIsEmpty(this.password)||this.stringIsEmpty(this.passwordConfirm)||this.password!==this.passwordConfirm||this.passwordResetRequested},modalBlockerVisible(){return this.$store.state.local.modalBlockerVisible===!0}},watch:{userManagementActive(){this.checkAutoLogin()},loggedInUser(e){e&&this.checkAutoLogin()},accessAllowed(){this.checkAutoLogin()},modalBlockerVisible(){this.checkAutoLogin()}},mounted(){ke(()=>{this.checkAutoLogin()})},beforeMount(){window.addEventListener("resize",this.updateScreenSize),this.updateScreenSize()},beforeUnmount(){window.removeEventListener("resize",this.updateScreenSize)},methods:{updateScreenSize(){this.smallScreen=window.innerWidth<576},stringIsEmpty(e){return!e||e.length===0},checkAutoLogin(){console.debug("Checking auto login: ",this.userManagementActive,this.accessAllowed,this.loggedInUser),this.userManagementActive&&!this.accessAllowed&&!this.modalBlockerVisible?this.showLoginModal=!0:this.showLoginModal=!1},doLogin(e){switch(e){case"login":if(!this.username||!this.password){this.$root.postClientMessage("Benutzername und Passwort erforderlich.","danger");return}this.$cookies.set("mqtt",`${this.username}:${this.password}`),this.$root.reconnectMqttClient(),location.reload();break;case"forgot_password":console.warn("Password reset requested for user:",this.username),this.showLoginModal=!1,this.username="",this.password="",this.showPasswordResetModal=!0;break;default:this.showLoginModal=!1,this.username="",this.password=""}},processResetResult(e){switch(console.log("Password reset modal result:",e),e){case"request_token":if(!this.username){this.$root.postClientMessage("Benutzername erforderlich.","danger");return}console.warn("Requesting password reset token for:",this.username),this.tokenRequested=!0,this.$emit("sendCommand",{command:"createPasswordResetToken",data:{username:this.username}});break;case"reset_password":if(!this.username||!this.token||!this.password||!this.passwordConfirm||this.password!==this.passwordConfirm){this.$root.postClientMessage("Benutzername, Token und neues Kennwort erforderlich.","danger");return}console.warn("Resetting password for:",this.username,"with token:",this.token,"and new password:",this.password),this.passwordResetRequested=!0,this.$root.postClientMessage("Das Token wird geprüft und bei Erfolg das Passwort zurückgesetzt. Dieser Vorgang dauert ein paar Sekunden.","info"),this.$emit("sendCommand",{command:"resetUserPassword",data:{username:this.username,token:this.token,newPassword:this.password}});break;case"close":this.showPasswordResetModal=!1,this.username="",this.password="",this.token="",this.passwordConfirm="",this.tokenRequested=!1,this.passwordResetRequested=!1,this.showLoginModal=!0;return}},doLogout(e){this.showLogoutModal=!1,e==="confirm"&&(console.warn("Logging out user"),this.$cookies.remove("mqtt"),this.$root.reconnectMqttClient(),location.reload())}}},Ai={id:"user-indicator",class:"ml-2"},Ii={key:0,class:"pill bg-primary"},Oi={key:0,class:"non-selectable"},Ti={key:1,class:"pill bg-secondary"},$i={name:"loginForm"},Mi={name:"requestTokenForm"};function Vi(e,t,s,d,o,n){const a=g("FontAwesomeIcon"),p=g("openwb-base-tooltip"),r=g("FontAwesomeLayers"),v=g("openwb-base-modal-dialog"),k=g("openwb-base-text-input");return i(),c(M,null,[n.userManagementActive===!0?(i(),f(j,{key:0,defer:"",to:"#user-target"},[l("div",Ai,[n.loggedInUser?(i(),c("span",Ii,[b(p,{description:`Angemeldet als ${n.loggedInUser}`},{default:m(()=>[b(a,{icon:["fas","circle-user"],size:"lg"}),o.smallScreen?u("",!0):(i(),c("span",Oi,w(n.loggedInUser),1))]),_:1},8,["description"]),b(p,{description:"Abmelden"},{default:m(()=>[b(a,{class:"text-light clickable px-2",icon:["fas","arrow-right-from-bracket"],size:"lg",onClick:t[0]||(t[0]=y=>o.showLogoutModal=!0)})]),_:1})])):(i(),c("span",Ti,[b(p,{description:"Nicht angemeldet"},{default:m(()=>[b(r,null,{default:m(()=>[b(a,{icon:["fas","circle-user"]}),b(a,{icon:["fas","ban"],color:"red"})]),_:1})]),_:1}),b(p,{description:"Anmelden"},{default:m(()=>[b(a,{class:"text-light clickable px-2",icon:["fas","arrow-right-to-bracket"],size:"lg",onClick:t[1]||(t[1]=y=>o.showLoginModal=!0)})]),_:1})]))])])):u("",!0),n.userManagementActive?(i(),f(v,{key:1,show:o.showLogoutModal,title:"Abmelden",subtype:"warning",buttons:[{text:"Abmelden",event:"confirm",subtype:"danger"}],onModalResult:t[2]||(t[2]=y=>n.doLogout(y))},{default:m(()=>[...t[11]||(t[11]=[l("p",null,"Willst Du Dich wirklich abmelden?",-1)])]),_:1},8,["show"])):u("",!0),n.userManagementActive?(i(),f(v,{key:2,show:o.showLoginModal,"prevent-close":!n.anonymousAccessAllowed,title:"Anmelden",subtype:"success",buttons:n.loginButtons,onModalResult:t[5]||(t[5]=y=>n.doLogin(y))},{default:m(()=>[l("form",$i,[b(k,{modelValue:o.username,"onUpdate:modelValue":t[3]||(t[3]=y=>o.username=y),title:"Benutzername",subtype:"user",required:"",autocomplete:"username"},null,8,["modelValue"]),b(k,{modelValue:o.password,"onUpdate:modelValue":t[4]||(t[4]=y=>o.password=y),title:"Passwort",subtype:"password",required:"",autocomplete:"current-password"},null,8,["modelValue"])])]),_:1},8,["show","prevent-close","buttons"])):u("",!0),n.userManagementActive&&n.dataProtectionAcknowledged?(i(),f(v,{key:3,show:o.showPasswordResetModal,title:"Kennwort zurücksetzen",subtype:"warning",buttons:[{text:"Token anfordern",event:"request_token",subtype:"success",disabled:n.requestTokenDisabled},{text:"Kennwort zurücksetzen",event:"reset_password",subtype:"primary",disabled:n.resetPasswordDisabled},{text:"Zurück",event:"close",subtype:"secondary"}],onModalResult:t[10]||(t[10]=y=>n.processResetResult(y))},{default:m(()=>[l("form",Mi,[b(k,{modelValue:o.username,"onUpdate:modelValue":t[6]||(t[6]=y=>o.username=y),title:"Benutzername",subtype:"user","empty-value":"",required:"",autocomplete:"username"},null,8,["modelValue"]),b(k,{modelValue:o.token,"onUpdate:modelValue":t[7]||(t[7]=y=>o.token=y),title:"Token",subtype:"password","empty-value":"",readonly:o.username.length<=0,disabled:o.username.length<=0},null,8,["modelValue","readonly","disabled"]),b(k,{modelValue:o.password,"onUpdate:modelValue":t[8]||(t[8]=y=>o.password=y),title:"Neues Kennwort",subtype:"password","empty-value":"",readonly:o.username.length===0||o.token.length===0,disabled:o.username.length===0||o.token.length===0},null,8,["modelValue","readonly","disabled"]),b(k,{modelValue:o.passwordConfirm,"onUpdate:modelValue":t[9]||(t[9]=y=>o.passwordConfirm=y),title:"Neues Kennwort bestätigen",subtype:"password","empty-value":"",readonly:o.username.length===0||o.token.length===0,disabled:o.username.length===0||o.token.length===0,validator:y=>y===o.password||"Kennwörter stimmen nicht überein"},null,8,["modelValue","readonly","disabled","validator"])])]),_:1},8,["show","buttons"])):u("",!0)],64)}const Pi=C(Bi,[["render",Vi],["__scopeId","data-v-adc196c2"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbPageUser.vue"]]);T.add(dt,ut);const qi={name:"OpenwbPageMqttConnectionState",components:{FontAwesomeIcon:$},props:{connected:{type:Boolean,required:!0}},data(){return{showIcon:!this.connected,visibilityTimeout:null}},watch:{connected(e){e?(clearTimeout(this.visibilityTimeout),this.visibilityTimeout=setTimeout(()=>{this.showIcon=!1},5e3)):(this.showIcon=!0,clearTimeout(this.visibilityTimeout))}}},Di={id:"connection-state-indicator",class:"ml-2"};function Li(e,t,s,d,o,n){const a=g("FontAwesomeIcon"),p=g("openwb-base-avatar"),r=g("openwb-base-tooltip");return o.showIcon?(i(),f(j,{key:0,defer:"",to:"#info-target"},[l("div",Di,[b(r,{description:`Verbindung ${s.connected?"hergestellt":"getrennt"}`},{default:m(()=>[b(p,{class:S(s.connected?"text-success":"bg-danger")},{default:m(()=>[b(a,{icon:s.connected?["fas","link"]:["fas","link-slash"]},null,8,["icon"])]),_:1},8,["class"])]),_:1},8,["description"])])])):u("",!0)}const Ei=C(qi,[["render",Li],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbPageMqttConnectionState.vue"]]);T.add(ct,pt);const Ri={name:"OpenwbPageMessages",components:{FontAwesomeIcon:$,FontAwesomeLayers:ae,FontAwesomeLayersText:mt},mixins:[z],data(){return{mqttTopics:[{topic:"openWB/command/"+this.$root.mqttClientId+"/messages/+",writeable:!1},{topic:"openWB/system/messages/+",writeable:!1}],showAllMessages:!1,hiddenMessages:[]}},computed:{alertLevel(){return this.messages.reduce((t,s)=>((t=="light"&&["info","success","warning","danger"].includes(s.type)||t=="info"&&["success","warning","danger"].includes(s.type)||t=="success"&&["warning","danger"].includes(s.type)||t=="warning"&&s.type=="danger")&&(t=s.type),t),"light")},messages(){const e=[];return this.systemMessages.forEach(t=>{e.push(t)}),this.localMessages.forEach(t=>{e.push(t)}),this.clientMessages.forEach(t=>{e.push(t)}),e.sort(this.compareMessagesByTimestamp),e},recentMessages(){return this.showAllMessages?this.messages:this.messages.filter(e=>!this.hiddenMessages.includes(e.topic))},messageIndicatorClass(){return"text-"+this.alertLevel},systemMessages(){let e=this.getWildcardTopics("openWB/system/messages/+");var t=[];for(const[s,d]of Object.entries(e))t.push({topic:s,...d});return t},localMessages(){const e=this.$store.state.local.messages||{};var t=[];for(const[s,d]of Object.entries(e))t.push({topic:s,...d});return t},clientMessages(){let e=this.getWildcardTopics("openWB/command/"+this.$root.mqttClientId+"/messages/+");var t=[];for(const[s,d]of Object.entries(e))t.push({topic:s,...d});return t}},methods:{toggleAllMessages(){this.showAllMessages=!this.showAllMessages},compareMessagesByTimestamp(e,t){return t.timestamp-e.timestamp},clearTopic(e){this.$root.doPublish(e,void 0)},dismissMessage(e){this.localMessages.find(s=>s.topic===e.topic)?this.$store.commit("removeClientMessage",e.topic):this.clearTopic(e.topic);var t=this.hiddenMessages.indexOf(e.topic);t>-1&&this.hiddenMessages.splice(t,1)},dismissAllMessages(){this.messages.forEach(e=>{this.dismissMessage({topic:e.topic})}),this.hiddenMessages=[],this.toggleAllMessages()},hideMessage(e){this.hiddenMessages.includes(e.topic)||this.hiddenMessages.push(e.topic)}}},xi=["title"],Wi=["innerHTML"];function ji(e,t,s,d,o,n){const a=g("font-awesome-icon"),p=g("font-awesome-layers-text"),r=g("font-awesome-layers"),v=g("openwb-base-alert"),k=g("openwb-base-click-button"),y=g("openwb-base-toast");return i(),c(M,null,[(i(),f(j,{defer:"",to:"#message-target"},[l("div",{id:"message-indicator",class:S(["text-light clickable",o.showAllMessages?"active":""]),title:o.showAllMessages?"nur neue Nachrichten anzeigen":"Alle Nachrichten anzeigen",onClick:t[0]||(t[0]=(...I)=>n.toggleAllMessages&&n.toggleAllMessages(...I))},[b(r,{"full-width":""},{default:m(()=>[b(a,{icon:o.showAllMessages?["fas","bell"]:["far","bell"],class:S(n.messageIndicatorClass)},null,8,["icon","class"]),n.messages.length>0?(i(),f(p,{key:0,counter:"",value:n.messages.length,position:"top-right",class:"message-counter bg-light text-dark"},null,8,["value"])):u("",!0)]),_:1})],10,xi)])),n.recentMessages.length>0||o.showAllMessages?(i(),c("div",{key:0,class:S(["openwb-toast-container",o.showAllMessages?"full-height":""])},[n.recentMessages.length==0?(i(),f(v,{key:0,subtype:"info"},{default:m(()=>[...t[1]||(t[1]=[h(" Keine Nachrichten vorhanden. ",-1)])]),_:1})):o.showAllMessages?(i(),f(k,{key:1,class:"btn-sm btn-secondary mb-1",onButtonClicked:n.dismissAllMessages},{default:m(()=>[...t[2]||(t[2]=[h(" Alle Nachrichten löschen ",-1)])]),_:1},8,["onButtonClicked"])):u("",!0),(i(!0),c(M,null,P(n.recentMessages,I=>(i(),f(y,{key:I.topic,topic:I.topic,source:I.source,subtype:I.type,timestamp:I.timestamp,onDismiss:n.dismissMessage,onHide:n.hideMessage},{default:m(()=>[l("span",{innerHTML:I.message},null,8,Wi)]),_:2},1032,["topic","source","subtype","timestamp","onDismiss","onHide"]))),128))],2)):u("",!0)],64)}const zi=C(Ri,[["render",ji],["__scopeId","data-v-2c25f0d0"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbPageMessages.vue"]]),Ni={name:"OpenwbPageBlocker",mixins:[z],data(){return{mqttTopics:[{topic:"openWB/system/boot_done",writeable:!1},{topic:"openWB/system/update_in_progress",writeable:!1}],disconnectedTimeout:null}},computed:{title(){return this.bootInProgress||this.updateInProgress?"openWB ist noch nicht bereit":this.mqttClientDisconnected?"Verbindung zur openWB verloren":this.reloadRequired?"Die Seite muss neu geladen werden":"???"},myButtons(){return!(this.bootInProgress||this.updateInProgress||this.mqttClientDisconnected)&&this.reloadRequired?[{text:"Jetzt neu laden",subtype:"success",event:"reload"}]:[]},mqttClientDisconnected(){return!this.$root.$data.connected},bootInProgress(){return this.$store.state.mqtt["openWB/system/boot_done"]==null?!0:!this.$store.state.mqtt["openWB/system/boot_done"]},updateInProgress(){return this.$store.state.mqtt["openWB/system/update_in_progress"]==null?!1:this.$store.state.mqtt["openWB/system/update_in_progress"]},reloadRequired(){return this.$store.state.local.reloadRequired},showModalBlocker(){return this.$store.state.local.modalBlockerVisible},modalType(){return this.mqttClientDisconnected&&!(this.bootInProgress||this.updateInProgress)?"danger":"dark"}},watch:{mqttClientDisconnected(e){e===!0?this.disconnectedTimeout=window.setTimeout(()=>{this.mqttClientDisconnected&&this.updateLocalStore()},2e3):(this.disconnectedTimeout&&(clearTimeout(this.disconnectedTimeout),this.disconnectedTimeout=null),this.updateLocalStore())},bootInProgress(e){e===!0&&this.updateInProgress===!0&&this.$store.commit("storeLocal",{name:"reloadRequired",value:!0}),this.updateLocalStore()},updateInProgress(e){e===!1&&this.bootInProgress===!1&&this.$store.commit("storeLocal",{name:"reloadRequired",value:!1}),this.updateLocalStore()}},methods:{updateLocalStore(){this.$store.commit("storeLocal",{name:"modalBlockerVisible",value:this.bootInProgress||this.updateInProgress||this.reloadRequired||this.mqttClientDisconnected})},handleModalResult(e){e=="reload"?location.reload():console.warn("unknown event",e)}}},Ui={class:"openwb-blocker"},Fi={key:0},Hi={key:1},Ki={key:2},Gi={key:3},Zi={key:4};function Ji(e,t,s,d,o,n){const a=g("openwb-base-modal-dialog");return i(),c("div",Ui,[b(a,{show:n.showModalBlocker,title:n.title,subtype:n.modalType,"prevent-close":!0,buttons:n.myButtons,onModalResult:t[0]||(t[0]=p=>n.handleModalResult(p))},{default:m(()=>[n.bootInProgress?(i(),c("p",Fi,"Der Systemstart ist noch nicht abgeschlossen.")):n.updateInProgress?(i(),c("p",Hi,"Es wird eine Systemaktualisierung ausgeführt.")):n.mqttClientDisconnected?(i(),c("p",Ki,[...t[1]||(t[1]=[h(" Die Verbindung zur openWB wurde unterbrochen.",-1),l("br",null,null,-1),h(" Es wird versucht, die Verbindung wieder herzustellen... ",-1)])])):n.reloadRequired?(i(),c("p",Gi,"Bitte die Seite neu laden.")):(i(),c("p",Zi,"Bitte warten..."))]),_:1},8,["show","title","subtype","buttons"])])}const Qi=C(Ni,[["render",Ji],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbPageBlocker.vue"]]),Yi={name:"OpenwbSettingsApp",components:{NavBar:vi,PageFooter:Si,UserInfo:Pi,MqttConnectionState:Ei,Messages:zi,Blocker:Qi},data(){return{client:null,connected:!1,reconnecting:!1,reconnectAttempts:0,reconnectBackoff:2e3,maxReconnectBackoff:2e4,connection:{protocol:location.protocol=="https:"?"wss":"ws",protocolVersion:5,host:location.hostname,port:parseInt(location.port)||(location.protocol=="https:"?443:80),path:"/ws",connectTimeout:4e3,reconnectPeriod:0,resubscribe:!0,properties:{requestResponseInformation:!0,requestProblemInformation:!0}},dataTimeout:null}},computed:{mqttClientId(){try{return this.client.options.clientId}catch(e){console.error("mqttClientId error",e);return}},topicList(){return Object.keys(this.$store.state.mqtt)},nodeEnv(){return"development"}},created(){this.createConnection()},methods:{async saveValues(e=void 0){function t(d){return new Promise(o=>setTimeout(o,d))}function s(d){return d.includes("#")||d.includes("+")}this.$store.commit("storeLocal",{name:"savingData",value:!0});try{let d={};if(e===void 0){console.error("no topics to save defined!");return}if(Array.isArray(e))e.forEach(o=>{if(s(o)){console.debug("expanding wildcard topic:",o);const n=this.getWildcardTopics(o);Object.entries(n).forEach(([a,p])=>{console.debug("adding topic to save:",a),d[a]=p})}else console.debug("adding topic to save:",o),d[o]=this.$store.state.mqtt[o]});else{console.error("expected array, got ",typeof e);return}for(const[o,n]of Object.entries(d)){if(o.startsWith("$CONTROL")){console.debug("skipping control topic:",o);continue}let a=o.replace("openWB/","openWB/set/");console.debug("saving data:",a,n),this.doPublish(a,n),await t(50)}}finally{this.$store.commit("storeLocal",{name:"savingData",value:!1})}},resetValues(e=this.topicList){console.debug("resetting values..."),console.debug("topics: ",e),this.doUnsubscribe(e),this.doSubscribe(e)},setDefaultValues(){console.debug("setting default values... (ToDo)")},sendCommand(e){console.debug("sendCommand:",e),this.doPublish(`openWB/set/command/${this.client.options.clientId}/todo/${e.command}`,e,!1)},createConnection(){if(this.client){console.debug("MQTT client already exists, skipping createConnection.");return}const{protocol:e,host:t,port:s,path:d,...o}=this.connection,n=`${e}://${t}:${s}${d}`;let[a,p]=this.$cookies.get("mqtt")?.match(/^([^:]+):(.+)$/)?.slice(1)||[null,null];a&&p||console.debug("Anonymous mqtt connection (no cookie set)"),(this.nodeEnv!=="production"||e=="wss")&&a&&p&&(console.debug(`Using mqtt credentials from cookie: "${a}" / "${p.charAt(0)}..."`),o.username=a,o.password=p,a==="admin"&&p==="openwb"&&(console.warn("Using default mqtt credentials! This is insecure and not recommended for production systems."),this.reconnecting||this.postClientMessage("Warnung: Es werden die Standard-Zugangsdaten für MQTT verwendet! Dies ist unsicher und wird für Produktivsysteme nicht empfohlen.","warning"))),console.debug("connecting to broker:",n),this.client=J.connect(n,o),this.client.on("connect",()=>{this.connected=!0,this.reconnectAttempts=0,this.reconnectBackoff=2e3,this.reconnecting=!1,console.debug("Connection succeeded! ClientId: ",this.client.options.clientId),a&&(this.postClientMessage(`Angemeldet als "${a}".`,"success"),this.$store.commit("storeLocal",{name:"username",value:a})),this.dataTimeout=setTimeout(()=>{console.warn("No data received after 5 seconds, connection might not be working. Removing mqtt cookie and trying again with anonymous connection."),a&&(this.$cookies.remove("mqtt"),this.reconnectMqttClient())},5e3),this.doSubscribe(["openWB/system/boot_done","openWB/system/dataprotection_acknowledged","openWB/system/usage_terms_acknowledged","openWB/system/installAssistantDone","openWB/system/security/access/+"],!0)}),this.client.on("error",r=>{this.connected=!1,console.error("Connection failed",r),r instanceof J.ErrorWithReasonCode&&console.error("Reason code:",r.code),[135,137].includes(r.code)&&a!=null?(this.$cookies.remove("mqtt"),this.$store.commit("storeLocal",{name:"username",value:null}),this.postClientMessage("Fehler: Anmeldung fehlgeschlagen. Bitte überprüfen Sie die Zugangsdaten und melden Sie sich erneut an.","danger"),window.setTimeout(()=>{location.reload()},1e3)):this.reconnectMqttClient()}),this.client.on("message",(r,v)=>{if(this.dataTimeout&&(clearTimeout(this.dataTimeout),this.dataTimeout=null),v.toString().length>0){let k;try{k=JSON.parse(v.toString())}catch(y){console.debug("Json parsing failed, fallback to string: ",r,y),k=v.toString()}this.$store.commit("updateTopic",{topic:r,payload:k})}else this.$store.commit("removeTopic",r)}),this.client.on("end",()=>{this.connected=!1,console.error("mqtt connection ended")}),this.client.on("close",()=>{this.connected=!1,console.error("mqtt connection closed"),this.reconnectMqttClient()}),this.client.on("offline",()=>{this.connected=!1,console.error("mqtt connection offline"),this.reconnectMqttClient()}),this.client.on("disconnect",()=>{this.connected=!1,console.error("mqtt connection disconnected"),this.reconnectMqttClient()}),this.client.on("reconnect",()=>{console.error("mqtt connection reconnecting...")})},endConnection(e=!0){if(this.client){console.warn("Ending mqtt connection...");try{this.client.end(e)}catch(t){console.error("Error while ending client",t)}this.connected=!1,this.$store.commit("storeLocal",{name:"username",value:null}),this.dataTimeout&&(clearTimeout(this.dataTimeout),this.dataTimeout=null),this.client=null}else console.error("No mqtt connection to end.")},reconnectMqttClient(){if(this.reconnecting){console.debug("Reconnect already in progress, skipping.");return}this.reconnecting=!0,this.endConnection();const e=Math.min(this.reconnectBackoff*this.reconnectAttempts,this.maxReconnectBackoff);console.warn(`Reconnect attempt #${this.reconnectAttempts+1} in ${e/1e3}s ...`),setTimeout(()=>{this.createConnection(),this.reconnectAttempts++,this.reconnecting=!1},e)},doSubscribe(e,t=!1){e.forEach(s=>{let d=!1;this.$store.commit("addSubscription",s),this.$store.getters.subscriptionCount(s)===1?(s.includes("#")||s.includes("+")?console.debug("skipping init of wildcard topic:",s):this.$store.commit("addTopic",{topic:s,payload:void 0}),d=!0):(console.debug("Already subscribed to topic: ",s),t&&(console.debug("Force subscribing to topic: ",s),d=!0)),d&&(console.debug("Subscribing to topic: ",s),this.client.subscribe(s,{},o=>{if(o){this.postClientMessage(`Daten konnten nicht abonniert werden.
Topic: ${s}
${o}`,"danger"),this.$store.commit("removeSubscription",s);return}}))})},doUnsubscribe(e){e.forEach(t=>{this.$store.commit("removeSubscription",t),this.$store.getters.subscriptionCount(t)==0?(this.client.unsubscribe(t,s=>{s&&(console.error("Unsubscribe error",s),this.postClientMessage(`Daten konnten nicht abbestellt werden.
Topic: ${t}
${s}`,"danger"))}),t.includes("#")||t.includes("+")?(console.debug("expanding wildcard topic:",t),Object.keys(this.getWildcardTopics(t)).forEach(s=>{console.debug("removing wildcardTopic:",s),this.$store.commit("removeTopic",s)})):(console.debug("removing topic:",t),this.$store.commit("removeTopic",t))):console.debug("Still subscribed to topic: ",t)})},doPublish(e,t,s=!0,d=2){let o={qos:d,retain:s};this.client.publish(e,JSON.stringify(t),o,n=>{n&&(console.error("Publish error",n),this.postClientMessage(`Daten konnten nicht geschrieben werden.
Topic: ${e}
${n}`,"danger"))})},postClientMessage(e,t="secondary"){console.debug("postMessage:",e,t);const s=Date.now();this.$store.commit({type:"addClientMessage",timestamp:s,payload:{message:e,type:t,source:"client",timestamp:Math.floor(s/1e3)}})},getWildcardTopics(e,t=!1){let s=e;return t||(s="^"+e.replaceAll("/","\\/").replaceAll("+","[^+/]+").replaceAll("#","[^#/]+")+"$"),Object.keys(this.$store.state.mqtt).filter(d=>d.match(s)).reduce((d,o)=>({...d,[o]:this.$store.state.mqtt[o]}),{})}}},Xi={role:"main",class:"container"},ea={id:"content"};function ta(e,t,s,d,o,n){const a=g("nav-bar"),p=g("router-view"),r=g("page-footer"),v=g("mqtt-connection-state"),k=g("user-info"),y=g("messages"),I=g("blocker");return i(),c(M,null,[l("header",null,[b(a)]),l("div",Xi,[l("div",ea,[l("h1",null,w(e.$route.meta.heading),1),b(p,{onSave:n.saveValues,onReset:n.resetValues,onDefaults:n.setDefaultValues,onSendCommand:n.sendCommand},null,8,["onSave","onReset","onDefaults","onSendCommand"])])]),b(r),b(v,{connected:o.connected},null,8,["connected"]),b(k,{onSendCommand:n.sendCommand},null,8,["onSendCommand"]),b(y),b(I)],64)}const sa=C(Yi,[["render",ta],["__file","/opt/openWB-dev/openwb-ui-settings/src/App.vue"]]),na="modulepreload",oa=function(e){return"/openWB/web/settings/"+e},ee={},B=function(t,s,d){let o=Promise.resolve();if(s&&s.length>0){let r=function(v){return Promise.all(v.map(k=>Promise.resolve(k).then(y=>({status:"fulfilled",value:y}),y=>({status:"rejected",reason:y}))))};document.getElementsByTagName("link");const a=document.querySelector("meta[property=csp-nonce]"),p=a?.nonce||a?.getAttribute("nonce");o=r(s.map(v=>{if(v=oa(v),v in ee)return;ee[v]=!0;const k=v.endsWith(".css"),y=k?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${v}"]${y}`))return;const I=document.createElement("link");if(I.rel=k?"stylesheet":na,k||(I.as="script"),I.crossOrigin="",I.href=v,p&&I.setAttribute("nonce",p),document.head.appendChild(I),k)return new Promise((ce,pe)=>{I.addEventListener("load",ce),I.addEventListener("error",()=>pe(new Error(`Unable to preload CSS for ${v}`)))})}))}function n(a){const p=new Event("vite:preloadError",{cancelable:!0});if(p.payload=a,window.dispatchEvent(p),!p.defaultPrevented)throw a}return o.then(a=>{for(const p of a||[])p.status==="rejected"&&n(p.reason);return t().catch(n)})},ia={namespaced:!0,state:()=>({hiddenDatasets:[]}),mutations:{toggleDataset(e,t){e.hiddenDatasets.includes(t)?e.hiddenDatasets=e.hiddenDatasets.filter(s=>s!==t):e.hiddenDatasets.push(t)},setHiddenDatasets(e,t){e.hiddenDatasets=t}}};let de={mqtt:{},mqttSubscriptions:{},local:{modalBlockerVisible:!1,reloadRequired:!1,savingData:!1,preventSavingModal:!1,username:null}};de.examples={text1:"Text...",text2:"mail@domain.com",text3:"openwb.local",text4:"http://www.openwb.de",text5:"Benutzername",text6:"12:34",text7:"2021-10-31",text8:"Text mit Add-Button",color1:"#ff0000",color2:"#0000ff",number1:5,number2:10,number3:28e-5,password1:"GeHeiM!",textarea1:"Langer Text...",range1:6,range2:10,select1:1,select2:void 0,buttonGroup1:1,checkbox1:!0,json1:{text:"Text",number:123},hierarchy1:[{id:0,type:"counter",children:[{id:3,type:"inverter",children:[]},{id:4,type:"bat",children:[]},{id:1,type:"cp",children:[]},{id:2,type:"cp",children:[]}]}],hierarchy1Labels:{0:"EVU",1:"Ladepunkt 1",2:"Ladepunkt 2",3:"Wechselrichter",4:"Batteriespeicher"},tags:["1234","2345","3456"],ioConfig:{active:!1,pattern:[null,!1,!0],action:{value:"stop_all",options:null}}};const R=Ce({state:de,mutations:{storeLocal(e,t){e.local[t.name]=t.value},addTopic(e,t){Object.keys(e.mqtt).includes(t.topic)?console.warn("topic already exists: ",t.topic):e.mqtt[t.topic]=t.payload},removeTopic(e,t){delete e.mqtt[t]},updateTopic(e,t){const s=(d,o,n)=>o.split(".").reduce((a,p,r)=>a[p]=o.split(".").length===r+1?n:a[p]||{},d);t.topic in e.mqtt||!(t.topic in e.examples)?t.objectPath!=null?s(e.mqtt[t.topic],t.objectPath,t.payload):e.mqtt[t.topic]=t.payload:(console.debug("topic not found in state.mqtt: ",t.topic),t.topic in e.examples?t.objectPath!=null?s(e.examples[t.topic],t.objectPath,t.payload):e.examples[t.topic]=t.payload:console.warn("topic not found in state: ",t.topic," giving up"))},addClientMessage(e,t){e.local.messages||(e.local.messages={}),e.local.messages[t.timestamp]=t.payload},removeClientMessage(e,t){e.local.messages&&t in e.local.messages&&delete e.local.messages[t]},addSubscription(e,t){t in e.mqttSubscriptions?e.mqttSubscriptions[t]+=1:e.mqttSubscriptions[t]=1,console.debug("subscription count: ",t,e.mqttSubscriptions[t])},removeSubscription(e,t){t in e.mqttSubscriptions&&(e.mqttSubscriptions[t]-=1,e.mqttSubscriptions[t]<=0&&delete e.mqttSubscriptions[t])}},actions:{},modules:{chartLegend:ia},getters:{usageTermsAcknowledged(e){return new Promise(t=>{if(e.mqtt["openWB/system/usage_terms_acknowledged"]!==void 0)t(e.mqtt["openWB/system/usage_terms_acknowledged"]);else{var s,d;s=setTimeout(()=>{clearInterval(d),t(!1)},5e3),d=setInterval(()=>{e.mqtt["openWB/system/usage_terms_acknowledged"]!==void 0&&(clearTimeout(s),clearInterval(d),t(e.mqtt["openWB/system/usage_terms_acknowledged"]))},100)}})},installAssistantDone(e){return new Promise(t=>{if(e.mqtt["openWB/system/installAssistantDone"]!==void 0)t(e.mqtt["openWB/system/installAssistantDone"]);else{var s,d;s=setTimeout(()=>{clearInterval(d),t(!1)},5e3),d=setInterval(()=>{e.mqtt["openWB/system/installAssistantDone"]!==void 0&&(clearTimeout(s),clearInterval(d),t(e.mqtt["openWB/system/installAssistantDone"]))},100)}})},accessAllowed(e){return t=>new Promise(s=>{const d=`openWB/system/security/access/${t}`;if(e.mqtt[d]!==void 0)s(e.mqtt[d]);else{var o,n;o=setTimeout(()=>{clearInterval(n),s(!1)},5e3),n=setInterval(()=>{e.mqtt[d]!==void 0&&(clearTimeout(o),clearInterval(n),s(e.mqtt[d]))},100)}})},subscriptionCount:e=>t=>e.mqttSubscriptions[t]||0}}),ue=[{path:"/",redirect:"/GeneralConfiguration"},{path:"/Status",name:"Status",meta:{heading:"Status",checkPermissions:!0},component:()=>B(()=>import("./Status-ZxRyfX38.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10]))},{path:"/Logging/ChargeLog",name:"ChargeLog",meta:{heading:"Auswertungen - Ladeprotokoll",checkPermissions:!0},component:()=>B(()=>import("./ChargeLog-C6D5JW6I.js"),__vite__mapDeps([11,1,2,3,6,7,8,9,12]))},{path:"/Logging/Chart/:chartRange?/:initialDate?",name:"Chart",meta:{heading:"Auswertungen - Diagramme",checkPermissions:!0},component:()=>B(()=>import("./Chart-Bibs_Mk0.js"),__vite__mapDeps([13,1,2,3,4,5,6,7,8,9,14]))},{path:"/GeneralConfiguration",name:"GeneralConfiguration",meta:{heading:"Einstellungen - Allgemein",checkPermissions:!0},component:()=>B(()=>import("./GeneralConfiguration-BiYqLhF0.js").then(e=>e.a),__vite__mapDeps([15,1,2,3,16,17]))},{path:"/IdentificationConfiguration",name:"IdentificationConfiguration",meta:{heading:"Einstellungen - Identifikation",checkPermissions:!0},component:()=>B(()=>import("./IdentificationConfiguration-DeRAwqIq.js"),__vite__mapDeps([18,1,2,3,16,6,7,8,9]))},{path:"/DisplayConfiguration",name:"DisplayConfiguration",meta:{heading:"Einstellungen - Display",checkPermissions:!0},component:()=>B(()=>import("./DisplayConfiguration-BtMQTY__.js").then(e=>e.a),__vite__mapDeps([19,17,1,2,3]))},{path:"/GeneralChargeConfiguration",name:"GeneralChargeConfiguration",meta:{heading:"Ladeeinstellungen - Übergreifendes",checkPermissions:!0},component:()=>B(()=>import("./GeneralChargeConfiguration-ZMe157LV.js").then(e=>e.a),__vite__mapDeps([20,17,1,2,3]))},{path:"/SurplusChargeConfiguration",name:"SurplusChargeConfiguration",meta:{heading:"Ladeeinstellungen - Überschuss-Laden",checkPermissions:!0},component:()=>B(()=>import("./SurplusChargeConfiguration-BuCou0oD.js"),__vite__mapDeps([21,16,2,3,1,6,7,8,9]))},{path:"/ActiveBatControlConfiguration",name:"ActiveBatControlConfiguration",meta:{heading:"Ladeeinstellungen - Speichersteuerung",checkPermissions:!0},component:()=>B(()=>import("./ActiveBatControlConfiguration-DCsLHsew.js"),__vite__mapDeps([22,1,2,3,6,7,8,9]))},{path:"/HardwareInstallation",name:"HardwareInstallation",meta:{heading:"Konfiguration - Geräte und Komponenten",checkPermissions:!0},component:()=>B(()=>import("./HardwareInstallation-Ln-RWgHD.js").then(e=>e.a),__vite__mapDeps([23,1,2,3,17,24]))},{path:"/LoadManagementConfiguration",name:"LoadManagementConfiguration",meta:{heading:"Konfiguration - Lastmanagement",checkPermissions:!0},component:()=>B(()=>import("./LoadManagementConfiguration-KljkkYHP.js"),__vite__mapDeps([25,1,2,3,16,26,27,6,7,8,9]))},{path:"/ChargePointInstallation",name:"ChargePointInstallation",meta:{heading:"Konfiguration - Ladepunkte",checkPermissions:!0},component:()=>B(()=>import("./ChargePointInstallation-u7kPgCv5.js").then(e=>e.c),__vite__mapDeps([28,1,2,3,16,17,29]))},{path:"/VehicleConfiguration/:section?/:section_index?/:section_part?/:action?",name:"VehicleConfiguration",meta:{heading:"Konfiguration - Fahrzeuge",checkPermissions:!0},component:()=>B(()=>import("./VehicleConfiguration-CDk_8xEa.js").then(e=>e.b),__vite__mapDeps([30,1,2,3,17]))},{path:"/ConsumerConfiguration",name:"ConsumerConfiguration",meta:{heading:"Konfiguration - Verbraucher"},component:()=>B(()=>import("./ConsumerConfig-DBNAxLj7.js").then(e=>e.a),__vite__mapDeps([31,1,2,3,17]))},{path:"/IoConfiguration",name:"IoConfiguration",meta:{heading:"Konfiguration - Ein- und Ausgänge",checkPermissions:!0},component:()=>B(()=>import("./IoConfiguration-p0bHlEKR.js").then(e=>e.b),__vite__mapDeps([32,1,2,3,17]))},{path:"/System/CloudConfiguration",name:"CloudConfiguration",meta:{heading:"System - openWB Cloud",checkPermissions:!0},component:()=>B(()=>import("./CloudConfiguration-cyqsfdIl.js"),__vite__mapDeps([33,1,2,3,6,7,8,9]))},{path:"/System/MqttBridgeConfiguration",name:"MqttBridgeConfiguration",meta:{heading:"System - MQTT-Brücken",checkPermissions:!0},component:()=>B(()=>import("./MqttBridgeConfiguration-Bt8St25W.js"),__vite__mapDeps([34,1,2,3,6,7,8,9]))},{path:"/System/DebugConfiguration",name:"DebugConfiguration",meta:{heading:"System - Fehlersuche",checkPermissions:!0},component:()=>B(()=>import("./DebugConfiguration-BZBY-RKS.js"),__vite__mapDeps([35,1,2,3,9,6,7,8,36]))},{path:"/System/Support",name:"Support",meta:{heading:"System - Support",checkPermissions:!0},component:()=>B(()=>import("./Support-kYroR_AI.js"),__vite__mapDeps([37,1,2,3,6,7,8,9]))},{path:"/System/LegalSettings",name:"LegalSettings",meta:{heading:"System - Rechtliches",checkPermissions:!0},component:()=>B(()=>import("./LegalSettings-DeM9kqbo.js"),__vite__mapDeps([38,1,2,3,6,7,8,9]))},{path:"/System/SystemConfiguration",name:"SystemConfiguration",meta:{heading:"System - System",checkPermissions:!0},component:()=>B(()=>import("./SystemConfiguration-Clo1_d0_.js"),__vite__mapDeps([39,1,2,3,6,7,8,9,40]))},{path:"/System/SecurityConfiguration",name:"SecurityConfiguration",meta:{heading:"System - Sicherheit",checkPermissions:!0},component:()=>B(()=>import("./SecurityConfiguration-BzxouWX6.js"),__vite__mapDeps([41,1,2,3,6,7,8,9]))},{path:"/System/DataManagement",name:"DataManagement",meta:{heading:"System - Datenverwaltung",checkPermissions:!0},component:()=>B(()=>import("./DataManagement-CkfxmcJu.js").then(e=>e.a),__vite__mapDeps([42,1,2,3,16,17]))},{path:"/System/InstallAssistant",name:"InstallAssistant",meta:{heading:"System - Einrichtungsassistent",checkPermissions:!0},component:()=>B(()=>import("./InstallAssistant-MPSFE3Da.js"),__vite__mapDeps([43,17,2,3,1,6,7,8,9]))},{path:"/System/Abrechnung",name:"TenantEnergyConfiguration",meta:{heading:"Abrechnung - Mieterstrom",checkPermissions:!0},component:()=>B(()=>import("./TenantEnergyBilling-UAAw2hP7.js"),__vite__mapDeps([44,9,2,3,1,6,7,8,45]))},{path:"/Error",name:"Error",meta:{heading:"Fehler",checkPermissions:!1},component:()=>B(()=>import("./Error-DFtWFT2X.js"),__vite__mapDeps([46,2,3]))}];ue.push({path:"/TestingStore",name:"VUEX Store",meta:{heading:"Beispiele - VUEX Store",checkPermissions:!1},component:()=>B(()=>import("./TestingStore-DDIFpUgY.js"),__vite__mapDeps([47,26,2,3,1,27,6,7,8,9]))});const H=Se({history:Be(),routes:ue});let W=!1;H.beforeEach(async e=>{const t=async n=>{if(n.meta.checkPermissions===!0){const a=await R.getters.accessAllowed(n.name);if(console.debug("access check for",n.name,"->",a),W)return console.debug("route already handled, cancel further processing"),!1;if(!a)return console.warn("no permission to access",n.name),R.state.local.username?{name:"Error"}:(console.debug("not logged in, cancel navigation to",n.name),W=!0,!1)}return!0};if(W=!1,!await R.getters.usageTermsAcknowledged)return e.name!=="LegalSettings"?(console.log("usage terms not acknowledged, redirect to legal settings"),{name:"LegalSettings"}):(console.log("usage terms not acknowledged, but already on legal settings, continue"),await t(e));if(!await R.getters.installAssistantDone)return e.name!=="InstallAssistant"?(console.log("install assistant not done, redirect to install assistant"),{name:"InstallAssistant"}):(console.log("install assistant not done, but already on install assistant, continue"),await t(e));const o=await t(e);return W=!0,o});H.afterEach(e=>{e.meta.heading?document.title="openWB | "+e.meta.heading:document.title="openWB"});const K=Ae(sa);K.use(R).use(H).use(ft,gt).use(Ie,{expire:"30d",path:"/",domain:"",secure:!0,sameSite:"Lax"});const aa=Object.assign({"./components/OpenwbBaseAlert.vue":vt,"./components/OpenwbBaseArrayInput.vue":jt,"./components/OpenwbBaseAvatar.vue":Ht,"./components/OpenwbBaseButtonGroupInput.vue":ns,"./components/OpenwbBaseButtonInput.vue":us,"./components/OpenwbBaseButtonRow.vue":Yt,"./components/OpenwbBaseCard.vue":ws,"./components/OpenwbBaseCheckboxInput.vue":Is,"./components/OpenwbBaseClickButton.vue":as,"./components/OpenwbBaseColorPicker.vue":Vs,"./components/OpenwbBaseCopyToClipboard.vue":js,"./components/OpenwbBaseHeading.vue":Zs,"./components/OpenwbBaseIoPattern.vue":Xs,"./components/OpenwbBaseModalDialog.vue":rn,"./components/OpenwbBaseNumberInput.vue":yn,"./components/OpenwbBaseRangeInput.vue":$n,"./components/OpenwbBaseSelectInput.vue":Un,"./components/OpenwbBaseSettingElement.vue":Bt,"./components/OpenwbBaseSubmitButtons.vue":to,"./components/OpenwbBaseTextInput.vue":Ao,"./components/OpenwbBaseTextarea.vue":xo,"./components/OpenwbBaseToast.vue":Fo,"./components/OpenwbBaseTooltip.vue":Jo});Object.entries(aa).forEach(([e,t])=>{const s=Oe(Te(e.split("/").pop().replace(/\.\w+$/,"")));K.component(s,t.default)});K.mount("#app");export{z as C,D as O,B as _}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Status-DadyXc3Z.js","assets/vendor-fortawesome-DplTMxoa.js","assets/vendor-BwGffBs-.js","assets/vendor-Cq9CCOuG.css","assets/vendor-chartjs-C4FabExn.js","assets/vendor-luxon-BDx6lZXm.js","assets/vendor-bootstrap-DxivtUnb.js","assets/vendor-jquery-CEMonh9Y.js","assets/vendor-bootstrap-BJ8HpIhY.css","assets/vendor-axios-C0vEeTtS.js","assets/Status-C2EBkHqs.css","assets/ChargeLog-CcQqZ_vX.js","assets/ChargeLog-D2ZLixbI.css","assets/Chart-BieonKyw.js","assets/Chart-W0k1ck0V.css","assets/GeneralConfiguration-D0B_yW_W.js","assets/SystemVersion-eCZ4XHiC.js","assets/dynamic-import-helper-BheWnx7M.js","assets/IdentificationConfiguration-BYqaURSL.js","assets/DisplayConfiguration-CqMq051X.js","assets/GeneralChargeConfiguration-Bukx6MR1.js","assets/SurplusChargeConfiguration-D6tHbDfg.js","assets/ActiveBatControlConfiguration-BVUZdovw.js","assets/HardwareInstallation-M-k9qNJb.js","assets/DeviceConfigMixin-D2g2-xc_.js","assets/LoadManagementConfiguration-Rty2qCw0.js","assets/OpenwbSortableList-yQzkYwAQ.js","assets/OpenwbSortableList-BkrTk2sD.css","assets/ChargePointInstallation-CmmRvfWj.js","assets/ChargePointInstallation-37TSBtDo.css","assets/VehicleConfiguration-848lVEbG.js","assets/ConsumerConfig-CDodeLc0.js","assets/IoConfiguration-DWzY_z-Z.js","assets/CloudConfiguration-ByKE05Ar.js","assets/MqttBridgeConfiguration-CQOhLDHm.js","assets/DebugConfiguration-Bn9Ihz1V.js","assets/DebugConfiguration-CN753w98.css","assets/Support-BL8bu-Sw.js","assets/LegalSettings-B0CerJ1j.js","assets/SystemConfiguration-DJZWiSkw.js","assets/SystemConfiguration-BWslT2W-.css","assets/SecurityConfiguration-DvVm9CBI.js","assets/DataManagement-CnuBQnBT.js","assets/InstallAssistant-ght3LRFR.js","assets/TenantEnergyBilling-D7pVN5MV.js","assets/TenantEnergyBilling-CkqmgSr0.css","assets/Error-DFtWFT2X.js","assets/TestingStore-2DRxZG6Y.js"])))=>i.map(i=>d[i]); +import{_ as C,f as c,j as _,k as S,l as i,m as g,q as b,u as m,x as u,y as l,z as f,A as E,B as h,D as q,E as O,F as A,G,I as V,J as w,K as M,L as P,M as te,N as me,O as fe,P as ge,Q as he,R as be,S as _e,T as ve,U as ye,V as we,W as j,X as Z,n as ke,Y as J,Z as Ce,$ as Se,a0 as Be,a1 as Ae,a2 as Ie,a3 as Oe,a4 as Te}from"./vendor-BwGffBs-.js";import{l as T,f as se,a as ne,F as $,b as $e,c as Me,d as N,e as Ve,g as U,h as Pe,i as qe,j as De,k as Le,m as Ee,n as Re,o as xe,p as We,q as je,r as ze,s as Ne,t as Ue,u as Fe,v as He,w as oe,x as Ke,y as Ge,z as Ze,A as Je,B as Qe,C as ie,D as Ye,E as Xe,G as et,H as tt,I as st,J as nt,K as ot,L as it,M as at,N as lt,O as rt,P as ae,Q as dt,R as ut,S as ct,T as pt,U as mt}from"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import{p as ft,a as gt}from"./vendor-axios-C0vEeTtS.js";import"./vendor-jquery-CEMonh9Y.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))d(o);new MutationObserver(o=>{for(const n of o)if(n.type==="childList")for(const a of n.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&d(a)}).observe(document,{childList:!0,subtree:!0});function s(o){const n={};return o.integrity&&(n.integrity=o.integrity),o.referrerPolicy&&(n.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?n.credentials="include":o.crossOrigin==="anonymous"?n.credentials="omit":n.credentials="same-origin",n}function d(o){if(o.ep)return;o.ep=!0;const n=s(o);fetch(o.href,n)}})();const ht={name:"OpenwbAlert",props:{subtype:{validator:function(e){return["info","success","warning","danger","primary","secondary","light","dark"].indexOf(e)!==-1},default:"secondary"}}};function bt(e,t,s,d,o,n){return i(),c("div",{class:S(["card-text alert","alert-"+s.subtype])},[_(e.$slots,"default",{},void 0,!0)],2)}const _t=C(ht,[["render",bt],["__scopeId","data-v-055c15aa"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseAlert.vue"]]),vt=Object.freeze(Object.defineProperty({__proto__:null,default:_t},Symbol.toStringTag,{value:"Module"}));T.add(se,ne);const yt={name:"OpenwbBaseSettingElement",components:{FontAwesomeIcon:$},data(){return{showHelp:!1}},methods:{toggleHelp(){this.showHelp=!this.showHelp&&this.$slots.help!==void 0}}},wt={key:0,class:"col-md-4 col-form-label"},kt={class:"form-row"},Ct={key:0,class:"form-text alert alert-info my-1 small flex-fill"};function St(e,t,s,d,o,n){const a=g("font-awesome-icon"),p=g("openwb-base-tooltip");return i(),c("div",{class:S(["form-row",e.$slots.title?"mb-1":"mx-0"])},[e.$slots.title?(i(),c("div",wt,[_(e.$slots,"title",{},void 0,!0),b(p,{description:`Hilfe ${o.showHelp?"verbergen":"anzeigen"}`},{default:m(()=>[e.$slots.help?(i(),f(a,{key:0,icon:o.showHelp?["fas","question-circle"]:["far","question-circle"],class:S(["clickable ml-1",o.showHelp?"text-info":""]),onClick:E(n.toggleHelp,["stop"])},null,8,["icon","class","onClick"])):u("",!0)]),_:1},8,["description"])])):u("",!0),l("div",{class:S(e.$slots.title?"col-md-8":"col px-0")},[l("div",{class:S({"form-row":e.$slots.title})},[_(e.$slots,"default",{},()=>[t[0]||(t[0]=h("*ELEMENT MISSING*",-1))],!0)],2),l("div",kt,[o.showHelp?(i(),c("span",Ct,[_(e.$slots,"help",{},void 0,!0)])):u("",!0)])],2)],2)}const D=C(yt,[["render",St],["__scopeId","data-v-33864f66"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseSettingElement.vue"]]),Bt=Object.freeze(Object.defineProperty({__proto__:null,default:D},Symbol.toStringTag,{value:"Module"})),At={name:"BaseSettingComponents",data(){return{uid:Math.random().toString(36).substring(2,15)}}},L=C(At,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/mixins/BaseSettingComponents.vue"]]);T.add($e,Me,N,Ve);const It={name:"OpenwbArrayInput",components:{FontAwesomeIcon:$,OpenwbBaseSettingElement:D},mixins:[L],inheritAttrs:!1,props:{title:{type:String,required:!0},modelValue:{type:Array,default:()=>[]},validElements:{type:Array,default:()=>[]},noElementsMessage:{type:String,default:()=>"Keine Elemente zugeordnet."},disabled:{type:Boolean,default:()=>!1},readonly:{type:Boolean,default:()=>!1}},emits:["update:modelValue"],data(){return{newTag:""}},computed:{value:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},remainingElements(){return this.validElements.length===0?[]:this.validElements.filter(e=>!this.value.includes(e.value||e))},newTagValid:{get(){return this.newTag.length>0&&!this.value.includes(this.newTag)&&(this.validElements.length===0||this.validElements.includes(this.newTag)||this.validElements.some(e=>e.value===this.newTag))&&this.$refs.tagInput?.checkValidity()}},tagLabel(){return e=>{const t=this.validElements.find(s=>(s.value||s)===e);return t?t.label||t.value||t:e}}},methods:{addTag(){if(this.newTagValid){const e=[...this.value,this.newTag].sort();this.value=e,this.newTag=""}this.$refs.tagInput.focus()},removeTag(e){let t=[...this.value];t.splice(e,1),this.value=t}}},Ot={key:0,class:"w-100"},Tt={class:"input-group"},$t={class:"input-group-prepend"},Mt={class:"input-group-text"},Vt=["id","disabled"],Pt=["id","disabled"],qt={value:"",disabled:""},Dt=["value"],Lt={class:"input-group-append"},Et={class:"tagList mt-1 w-100"},Rt={key:0,class:"noTag"};function xt(e,t,s,d,o,n){const a=g("font-awesome-icon"),p=g("openwb-base-setting-element");return i(),f(p,null,q({title:m(()=>[_(e.$slots,"title",{},()=>[h(w(s.title),1)],!0)]),default:m(()=>[s.readonly||s.disabled?u("",!0):(i(),c("div",Ot,[l("div",Tt,[l("div",$t,[l("div",Mt,[_(e.$slots,"input-prefix",{},()=>[b(a,{icon:["fas","tag"]})],!0)])]),s.validElements.length===0?O((i(),c("input",A({key:0,id:`${e.uid}-tag-input`,ref:"tagInput","onUpdate:modelValue":t[0]||(t[0]=r=>o.newTag=r),type:"text",class:"form-control"},e.$attrs,{disabled:s.disabled,onKeyup:t[1]||(t[1]=G((...r)=>n.addTag&&n.addTag(...r),["enter"]))}),null,16,Vt)),[[V,o.newTag]]):O((i(),c("select",A({key:1,id:`${e.uid}-tag-input`,ref:"tagInput","onUpdate:modelValue":t[2]||(t[2]=r=>o.newTag=r),class:"form-control"},e.$attrs,{disabled:s.disabled,onKeyup:t[3]||(t[3]=G((...r)=>n.addTag&&n.addTag(...r),["enter"]))}),[l("option",qt,w(n.remainingElements.length>0?"Bitte wählen...":"Keine weiteren Optionen verfügbar"),1),(i(!0),c(M,null,P(n.remainingElements,(r,v)=>(i(),c("option",{key:v,value:r.value||r},w(r.label||r.value||r),9,Dt))),128))],16,Pt)),[[te,o.newTag]]),l("div",Lt,[l("div",{class:S(["input-group-text",n.newTagValid?"bg-success clickable":"not-clickable"]),onClick:t[4]||(t[4]=(...r)=>n.addTag&&n.addTag(...r))},[_(e.$slots,"input-add",{},()=>[b(a,{icon:["fas","plus"]})],!0)],2)])])])),l("div",Et,[n.value.length==0?(i(),c("span",Rt,[b(a,{icon:["fas","info-circle"]}),h(" "+w(s.noElementsMessage),1)])):u("",!0),(i(!0),c(M,null,P(n.value,(r,v)=>(i(),c("span",{key:v,class:"tag"},[_(e.$slots,"element-prefix",{},()=>[b(a,{icon:["fas","tag"]})],!0),h(" "+w(n.tagLabel(r))+" ",1),s.readonly||s.disabled?u("",!0):(i(),f(a,{key:0,class:"clickable remove-element",icon:["fas","times-circle"],onClick:k=>n.removeTag(v)},null,8,["onClick"]))]))),128))])]),_:2},[e.$slots.help?{name:"help",fn:m(()=>[_(e.$slots,"help",{},void 0,!0)]),key:"0"}:void 0]),1024)}const Wt=C(It,[["render",xt],["__scopeId","data-v-9de93d37"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseArrayInput.vue"]]),jt=Object.freeze(Object.defineProperty({__proto__:null,default:Wt},Symbol.toStringTag,{value:"Module"})),zt={name:"OpenwbAvatar"},Nt={class:"avatar"};function Ut(e,t,s,d,o,n){return i(),c("div",Nt,[_(e.$slots,"default",{},()=>[t[0]||(t[0]=h("?",-1))],!0)])}const Ft=C(zt,[["render",Ut],["__scopeId","data-v-06082a1a"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseAvatar.vue"]]),Ht=Object.freeze(Object.defineProperty({__proto__:null,default:Ft},Symbol.toStringTag,{value:"Module"}));T.add(U);const Kt={name:"OpenwbButtonRow",components:{FontAwesomeIcon:$},inheritAttrs:!1,props:{buttons:{type:Array,required:!0},modelValue:{type:[String,Number,Boolean],default:null},disabled:{type:Boolean,default:!1},uid:{type:String,required:!0}},emits:["update:modelValue","button-click"],computed:{value:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}}}},Gt={class:"btn-group btn-block btn-group-toggle"},Zt=["for"],Jt=["id","value","disabled","onClick"];function Qt(e,t,s,d,o,n){const a=g("font-awesome-icon");return i(),c("div",Gt,[(i(!0),c(M,null,P(s.buttons,p=>(i(),c("label",{key:p.buttonValue,class:S(["btn btn-same-size btn-centered",[{active:s.modelValue===p.buttonValue},{disabled:s.disabled||p.disabled},p.class?p.class:"btn-outline-info"]]),for:`${s.uid}-${p.buttonValue}`},[l("span",null,[O(l("input",A({id:`${s.uid}-${p.buttonValue}`,"onUpdate:modelValue":t[0]||(t[0]=r=>n.value=r),type:"radio",value:p.buttonValue},{ref_for:!0},e.$attrs,{disabled:s.disabled||p.disabled,onClick:r=>e.$emit("button-click",p.buttonValue)}),null,16,Jt),[[me,n.value]]),_(e.$slots,"label-"+p.buttonValue,{},()=>[h(w(p.text),1)],!0),t[1]||(t[1]=l("span",null," ",-1)),b(a,{icon:["fas","check"],style:fe([n.value==p.buttonValue?"visibility: visible":"visibility: hidden"])},null,8,["style"])])],10,Zt))),128))])}const le=C(Kt,[["render",Qt],["__scopeId","data-v-4bd221b6"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseButtonRow.vue"]]),Yt=Object.freeze(Object.defineProperty({__proto__:null,default:le},Symbol.toStringTag,{value:"Module"})),Xt={name:"OpenwbButtonGroupInput",components:{OpenwbBaseSettingElement:D,OpenwbBaseButtonRow:le},mixins:[L],inheritAttrs:!1,props:{title:{type:String,required:!1,default:""},modelValue:{type:[String,Number,Boolean],default:void 0},buttons:{type:Array,required:!0},disabled:{type:Boolean,required:!1,default:!1},maxButtonsPerRow:{type:Number,default:Number.POSITIVE_INFINITY}},emits:["update:modelValue","button-click"],data(){return{containerWidth:0}},computed:{value:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},maxButtonsPerRowAuto(){return this.containerWidth<=200?1:this.containerWidth<=360?2:this.containerWidth<=550?3:1/0},buttonRows(){const e=[];for(let t=0;t[_(e.$slots,"title",{},()=>[h(w(s.title),1)],!0)]),default:m(()=>[l("div",es,[(i(!0),c(M,null,P(n.buttonRows,(r,v)=>(i(),f(a,A({key:v,buttons:r,uid:e.uid,"model-value":n.value,disabled:s.disabled},{ref_for:!0},e.$attrs,{"onUpdate:modelValue":t[0]||(t[0]=k=>n.value=k),onButtonClick:t[1]||(t[1]=k=>e.$emit("button-click",k))}),q({_:2},[P(r,k=>({name:`label-${k.buttonValue}`,fn:m(y=>[_(e.$slots,`label-${k.buttonValue}`,A({ref_for:!0},y),void 0,!0)])}))]),1040,["buttons","uid","model-value","disabled"]))),128))],512)]),_:2},[e.$slots.help?{name:"help",fn:m(()=>[_(e.$slots,"help",{},void 0,!0)]),key:"0"}:void 0]),1024)}const ss=C(Xt,[["render",ts],["__scopeId","data-v-31e583df"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseButtonGroupInput.vue"]]),ns=Object.freeze(Object.defineProperty({__proto__:null,default:ss},Symbol.toStringTag,{value:"Module"})),os={name:"OpenwbClickButton",props:{title:{type:String,required:!1,default:""},tooltip:{type:String,required:!1,default:""},href:{type:String,default:null}},emits:["buttonClicked"],methods:{handleClick(e){this.href||(e.preventDefault(),this.$emit("buttonClicked",e))}}};function is(e,t,s,d,o,n){return i(),f(ge(s.href?"a":"button"),{href:s.href||null,type:s.href?null:"button",class:"btn btn-block",title:s.tooltip,target:s.href?"_blank":null,rel:"noopener noreferrer",onClick:n.handleClick},{default:m(()=>[_(e.$slots,"default",{},()=>[h(w(s.title),1)],!0)]),_:3},8,["href","type","title","target","onClick"])}const re=C(os,[["render",is],["__scopeId","data-v-2e9c095b"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseClickButton.vue"]]),as=Object.freeze(Object.defineProperty({__proto__:null,default:re},Symbol.toStringTag,{value:"Module"})),ls={name:"OpenwbButtonInput",components:{OpenwbBaseSettingElement:D,OpenwbBaseClickButton:re},inheritAttrs:!1,props:{title:{type:String,required:!1,default:""},buttonText:{type:String,required:!1,default:void 0},disabled:{type:Boolean,default:!1},subtype:{type:String,validator:function(e){return["info","success","warning","danger","primary","secondary","light","dark"].indexOf(e)!==-1},default:"secondary"}},emits:["buttonClicked"],methods:{handleClick(e){this.$emit("buttonClicked",e)}}};function rs(e,t,s,d,o,n){const a=g("openwb-base-click-button"),p=g("openwb-base-setting-element");return i(),f(p,null,q({title:m(()=>[_(e.$slots,"title",{},()=>[h(w(s.title),1)])]),default:m(()=>[b(a,A({class:(s.disabled?"btn-outline-":"btn-")+s.subtype,disabled:s.disabled},e.$attrs,{onButtonClicked:n.handleClick}),{default:m(()=>[h(w(s.buttonText),1)]),_:1},16,["class","disabled","onButtonClicked"])]),_:2},[e.$slots.help?{name:"help",fn:m(()=>[_(e.$slots,"help")]),key:"0"}:void 0]),1024)}const ds=C(ls,[["render",rs],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseButtonInput.vue"]]),us=Object.freeze(Object.defineProperty({__proto__:null,default:ds},Symbol.toStringTag,{value:"Module"}));T.add(Pe,qe);const cs={name:"OpenwbCard",components:{FontAwesomeIcon:$},inheritAttrs:!1,props:{title:{type:String,default:void 0},subtype:{validator:function(e){return["info","success","warning","danger","primary","secondary","light","dark","pink","purple","white"].indexOf(e)!==-1},default:"secondary"},bodyBg:{validator:function(e){return["info","success","warning","danger","primary","secondary","light","dark","pink","purple","white"].indexOf(e)!==-1},default:"light"},collapsible:{type:Boolean,default:!1},collapsed:{type:Boolean,default:!1}},emits:["collapsed","expanded"],data(){return{isCollapsed:this.collapsible&&this.collapsed}},methods:{toggleBody(){this.collapsible===!0&&(this.isCollapsed=!this.isCollapsed,this.$emit(this.isCollapsed?"collapsed":"expanded"))}}},ps={class:"form-group mb-0"},ms={class:"form-row vaRow mb-0"},fs={class:"col"},gs={class:"header-left-wrapper"},hs={class:"card-actions ml-4"},bs={key:0,class:"card-actions mr-2"},_s={key:2,class:"card-footer"};function vs(e,t,s,d,o,n){const a=g("font-awesome-icon");return i(),c("div",{class:S(["card","border-"+s.subtype])},[s.title!==void 0||e.$slots.header?(i(),c("div",{key:0,class:S(["card-header py-1","bg-"+s.subtype]),onClick:t[0]||(t[0]=(...p)=>n.toggleBody&&n.toggleBody(...p))},[l("div",ps,[l("div",ms,[l("div",fs,[l("div",gs,[_(e.$slots,"header",{collapsed:o.isCollapsed},()=>[h(w(s.title),1)],!0)])])])]),l("div",hs,[e.$slots.actions?(i(),c("div",bs,[_(e.$slots,"actions",{collapsed:o.isCollapsed},void 0,!0)])):u("",!0),s.collapsible?(i(),f(a,{key:1,icon:o.isCollapsed?["fas","chevron-right"]:["fas","chevron-down"]},null,8,["icon"])):u("",!0)])],2)):u("",!0),o.isCollapsed===!1?(i(),c("div",A({key:1,class:["card-body",[s.title==null&&!e.$slots.header?"border-radius-top-inherit":"",e.$slots.footer?"":"border-radius-bottom-inherit","bg-"+s.bodyBg]]},e.$attrs),[_(e.$slots,"default",{},void 0,!0)],16)):u("",!0),e.$slots.footer&&o.isCollapsed===!1?(i(),c("div",_s,[_(e.$slots,"footer",{},void 0,!0)])):u("",!0)],2)}const ys=C(cs,[["render",vs],["__scopeId","data-v-9833c353"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseCard.vue"]]),ws=Object.freeze(Object.defineProperty({__proto__:null,default:ys},Symbol.toStringTag,{value:"Module"})),ks={name:"OpenwbCheckboxInput",components:{OpenwbBaseSettingElement:D},mixins:[L],inheritAttrs:!1,props:{title:{type:String,required:!1,default:""},modelValue:{type:Boolean}},emits:["update:modelValue"],computed:{value:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}}}},Cs={class:"col-md-8"},Ss=["id"];function Bs(e,t,s,d,o,n){const a=g("openwb-base-setting-element");return i(),f(a,null,q({title:m(()=>[_(e.$slots,"title",{},()=>[h(w(s.title),1)])]),default:m(()=>[l("div",Cs,[O(l("input",A({id:`${e.uid}-checkbox-input`,"onUpdate:modelValue":t[0]||(t[0]=p=>n.value=p),class:"form-control",type:"checkbox"},e.$attrs),null,16,Ss),[[he,n.value]])])]),_:2},[e.$slots.help?{name:"help",fn:m(()=>[_(e.$slots,"help")]),key:"0"}:void 0]),1024)}const As=C(ks,[["render",Bs],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseCheckboxInput.vue"]]),Is=Object.freeze(Object.defineProperty({__proto__:null,default:As},Symbol.toStringTag,{value:"Module"}));T.add(De);const F={name:"OpenwbColorPicker",components:{FontAwesomeIcon:$,Popper:ve,CompactPicker:_e,SketchPicker:be},mixins:[L],props:{modelValue:{type:String,required:!1,default:void 0,validator:e=>/^#[0-9A-F]{6}$/i.test(e)},defaultColor:{type:String,required:!1,default:void 0,validator:e=>/^#[0-9A-F]{6}$/i.test(e)},colorPalette:{type:Array,required:!1,default:void 0},disabled:{type:Boolean,required:!1,default:!1}},emits:["update:model-value"],computed:{value:{get(){return this.modelValue||this.defaultColor||"#000000"},set(e){this.$emit("update:model-value",e)}}}},Q=()=>{ye(e=>({"1378b599-value":e.value}))},Y=F.setup;F.setup=Y?(e,t)=>(Q(),Y(e,t)):Q;const Os={class:"wrapper"},Ts=["id","disabled"];function $s(e,t,s,d,o,n){const a=g("compact-picker"),p=g("sketch-picker"),r=g("popper"),v=g("font-awesome-icon"),k=g("openwb-base-tooltip");return i(),c("div",Os,[b(r,null,{content:m(()=>[s.colorPalette!==void 0?(i(),f(a,{key:0,modelValue:n.value,"onUpdate:modelValue":t[0]||(t[0]=y=>n.value=y),"disable-alpha":!0,palette:s.colorPalette},null,8,["modelValue","palette"])):(i(),f(p,{key:1,modelValue:n.value,"onUpdate:modelValue":t[1]||(t[1]=y=>n.value=y),"disable-alpha":!0,"preset-colors":s.colorPalette},null,8,["modelValue","preset-colors"]))]),default:m(()=>[l("input",{id:`${e.uid}-color-input`,type:"button",class:S(["custom-color-picker",{disabled:s.disabled}]),disabled:s.disabled},null,10,Ts)]),_:1}),s.defaultColor&&!s.disabled?(i(),f(k,{key:0,description:`Zurücksetzen auf Standardfarbe (${s.defaultColor})`},{default:m(()=>[b(v,{class:"ml-1 clickable",icon:["fas","rotate-left"],disabled:n.value==s.defaultColor,onClick:t[2]||(t[2]=y=>n.value=s.defaultColor)},null,8,["disabled"])]),_:1},8,["description"])):u("",!0)])}const Ms=C(F,[["render",$s],["__scopeId","data-v-1378b599"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseColorPicker.vue"]]),Vs=Object.freeze(Object.defineProperty({__proto__:null,default:Ms},Symbol.toStringTag,{value:"Module"})),{text:X,copy:Ps,copied:qs,isSupported:Ds}=we({copiedDuring:3e3,legacy:!0});T.add(Le,Ee);const Ls={name:"OpenwbCopyToClipboard",components:{FontAwesomeIcon:$},props:{tooltip:{type:String,default:"Wert kopieren"}},data(){return{}},computed:{contentText(){return this.$refs.content?.innerText?this.$refs.content.innerText.trim():""},isCopied(){return qs.value&&X.value===this.contentText},copySupported(){return Ds.value}},methods:{click(){this.copySupported&&Ps(this.contentText).then(()=>{console.debug("Text copied to clipboard:",X.value)}).catch(e=>{console.error("Failed to copy text to clipboard:",e)})}}},Es=["title"],Rs={ref:"content"};function xs(e,t,s,d,o,n){const a=g("font-awesome-icon");return i(),c("span",{title:n.copySupported&&!n.isCopied?s.tooltip:"",class:S({"copy-me":n.copySupported&&!n.isCopied}),onClick:t[0]||(t[0]=E((...p)=>n.click&&n.click(...p),["stop"]))},[l("span",Rs,[_(e.$slots,"default",{},void 0,!0)],512),n.copySupported?(i(),f(a,{key:0,class:"ml-1",icon:n.isCopied?["fas","clipboard-check"]:["fas","clipboard"]},null,8,["icon"])):u("",!0)],10,Es)}const Ws=C(Ls,[["render",xs],["__scopeId","data-v-81826ebe"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseCopyToClipboard.vue"]]),js=Object.freeze(Object.defineProperty({__proto__:null,default:Ws},Symbol.toStringTag,{value:"Module"}));T.add(se,ne,U);const zs={name:"OpenwbHeading",components:{FontAwesomeIcon:$},inheritAttrs:!1,data(){return{showHelp:!1}},methods:{toggleHelp(){this.showHelp=!this.showHelp&&this.$slots.help!==void 0}}},Ns={class:"heading-text"},Us={key:0,class:"actions"},Fs={class:"form-row"},Hs={key:0,class:"form-text alert alert-info small flex-fill"};function Ks(e,t,s,d,o,n){const a=g("font-awesome-icon");return i(),c(M,null,[l("div",A({class:"card-text card-text-heading"},e.$attrs),[l("div",Ns,[_(e.$slots,"default",{},void 0,!0),e.$slots.help?(i(),f(a,{key:0,icon:o.showHelp?["fas","question-circle"]:["far","question-circle"],class:S(["clickable",o.showHelp?"text-info":""]),onClick:E(n.toggleHelp,["stop"])},null,8,["icon","class","onClick"])):u("",!0)]),e.$slots.actions?(i(),c("span",Us,[_(e.$slots,"actions",{},void 0,!0)])):u("",!0)],16),l("div",Fs,[o.showHelp?(i(),c("span",Hs,[_(e.$slots,"help",{},void 0,!0)])):u("",!0)])],64)}const Gs=C(zs,[["render",Ks],["__scopeId","data-v-cbe4e96e"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseHeading.vue"]]),Zs=Object.freeze(Object.defineProperty({__proto__:null,default:Gs},Symbol.toStringTag,{value:"Module"}));T.add(Re,xe,We,je);const x={null:{value:null,icon:["fas","question"],iconClass:"text-secondary",title:"Nicht relevant",nextValue:!0},true:{value:!0,icon:["fas","square"],iconClass:"",title:"Geschlossen",nextValue:!1},false:{value:!1,icon:["far","square"],iconClass:"",title:"Offen",nextValue:null}},Js={name:"OpenwbIoPattern",components:{FontAwesomeIcon:$},inheritAttrs:!1,props:{title:{type:String,required:!1,default:""},modelValue:{type:Array,required:!1,default:()=>[]}},emits:["update:modelValue"],computed:{value:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}}},methods:{getIcon(e){return x[e].icon},getIconClass(e){return x[e].iconClass},getTitle(e){return x[e].title},toggleInput(e,t){this.value[e]=x[t].nextValue}}};function Qs(e,t,s,d,o,n){const a=g("font-awesome-icon"),p=g("openwb-base-tooltip"),r=g("openwb-base-setting-element");return i(),f(r,null,q({title:m(()=>[_(e.$slots,"title",{},()=>[h(w(s.title),1)])]),default:m(()=>[(i(!0),c(M,null,P(n.value,(v,k)=>(i(),c("span",{key:k},[b(p,{description:n.getTitle(v)},{default:m(()=>[b(a,{icon:n.getIcon(v),class:S([n.getIconClass(v),"fa-fw clickable"]),size:"2x",transform:v=="undefined"?"shrink-6":null,mask:v=="undefined"?["fas","square"]:null,onClick:E(y=>n.toggleInput(k,v),["stop","prevent"]),onMousedown:t[0]||(t[0]=E(()=>{},["stop","prevent"])),onMouseup:t[1]||(t[1]=E(()=>{},["stop","prevent"]))},null,8,["icon","class","transform","mask","onClick"])]),_:2},1032,["description"])]))),128))]),_:2},[e.$slots.help?{name:"help",fn:m(()=>[_(e.$slots,"help")]),key:"0"}:void 0]),1024)}const Ys=C(Js,[["render",Qs],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseIoPattern.vue"]]),Xs=Object.freeze(Object.defineProperty({__proto__:null,default:Ys},Symbol.toStringTag,{value:"Module"})),en={name:"OpenwbModalDialog",props:{title:{type:String,required:!1,default:""},subtype:{type:String,validator:function(e){return["info","success","warning","danger","primary","secondary","light","dark"].indexOf(e)!==-1},default:"secondary"},buttons:{type:Array,default:void 0},footerAlignment:{type:String,validator:function(e){return["around","between","center","end","start"].indexOf(e)!==-1},default:"end"},preventClose:{type:Boolean,default:!1},show:{type:Boolean,default:!1}},emits:["modal-result"],computed:{myButtons(){var e=[];return this.buttons!==void 0&&(e=[...this.buttons]),e.findIndex(t=>t.event==="close")===-1&&!this.preventClose&&e.push({text:"Schließen",event:"close"}),e}},methods:{handleClick(e){e.stopPropagation();let t=e.target.getAttribute("data-event");t===null&&(t="close"),(t!="close"||!this.preventClose)&&this.$emit("modal-result",t)}}},tn={class:"modal-content"},sn={class:"modal-title"},nn={class:"modal-body"},on=["disabled","data-event"];function an(e,t,s,d,o,n){return s.show?(i(),f(j,{key:0,to:"body"},[t[5]||(t[5]=l("div",{class:"modal-backdrop fade show"},null,-1)),l("div",{class:"modal fade d-block show",role:"dialog",onClick:t[3]||(t[3]=(...a)=>n.handleClick&&n.handleClick(...a))},[l("div",{class:"modal-dialog modal-dialog-centered modal-dialog-scrollable",role:"document",onClick:t[2]||(t[2]=E(()=>{},["stop"]))},[l("div",tn,[l("div",{class:S(["modal-header","bg-"+s.subtype])},[l("h4",sn,w(s.title),1),s.preventClose?u("",!0):(i(),c("button",{key:0,type:"button",class:"close",onClick:t[0]||(t[0]=(...a)=>n.handleClick&&n.handleClick(...a))}," × "))],2),l("div",nn,[_(e.$slots,"default",{},()=>[t[4]||(t[4]=h("# Body #",-1))])]),n.myButtons.length>0?(i(),c("div",{key:0,class:S(["modal-footer d-flex","justify-content-"+s.footerAlignment])},[(i(!0),c(M,null,P(n.myButtons,a=>(i(),c("button",{key:a.text,disabled:a.disabled===!0,type:"button",class:S(["btn",(a.disabled?"btn-outline-":"btn-")+(a.subtype??"secondary")]),"data-dismiss":"modal","data-event":a.event?a.event:"close",onClick:t[1]||(t[1]=(...p)=>n.handleClick&&n.handleClick(...p))},w(a.text),11,on))),128))],2)):u("",!0)])])])])):u("",!0)}const ln=C(en,[["render",an],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseModalDialog.vue"]]),rn=Object.freeze(Object.defineProperty({__proto__:null,default:ln},Symbol.toStringTag,{value:"Module"}));T.add(ze);const dn={name:"OpenwbNumberInput",components:{FontAwesomeIcon:$,OpenwbBaseSettingElement:D},mixins:[L],inheritAttrs:!1,props:{title:{type:String,required:!1,default:""},modelValue:{type:Number,required:!1,default:void 0},unit:{type:String,required:!1,default:void 0},precision:{type:Number,default:void 0},emptyValue:{type:[Number,null],required:!1,default:null}},emits:["update:modelValue"],computed:{value:{get(){return this.precision!==void 0?parseFloat(Math.round(this.modelValue*Math.pow(10,this.precision))/Math.pow(10,this.precision)):this.modelValue},set(e){(isNaN(e)||typeof e!="number")&&(e=this.emptyValue),this.$emit("update:modelValue",e)}}}},un={class:"input-group"},cn={class:"input-group-prepend"},pn={class:"input-group-text"},mn=["id"],fn={key:0,class:"input-group-append"},gn={class:"input-group-text"},hn={key:1,class:"input-group-append"},bn={class:"input-group-text p-0"};function _n(e,t,s,d,o,n){const a=g("font-awesome-icon"),p=g("openwb-base-setting-element");return i(),f(p,null,q({title:m(()=>[_(e.$slots,"title",{},()=>[h(w(s.title),1)],!0)]),default:m(()=>[l("div",un,[l("div",cn,[l("div",pn,[b(a,{icon:["fas","calculator"]})])]),O(l("input",A({id:`${e.uid}-number-input`,"onUpdate:modelValue":t[0]||(t[0]=r=>n.value=r),type:"number",class:"form-control"},e.$attrs),null,16,mn),[[V,n.value,void 0,{lazy:!0,number:!0}]]),s.unit?(i(),c("div",fn,[l("div",gn,w(s.unit),1)])):u("",!0),e.$slots.append?(i(),c("div",hn,[l("div",bn,[_(e.$slots,"append",{},void 0,!0)])])):u("",!0)])]),_:2},[e.$slots.help?{name:"help",fn:m(()=>[_(e.$slots,"help",{},void 0,!0)]),key:"0"}:void 0]),1024)}const vn=C(dn,[["render",_n],["__scopeId","data-v-c2fb7eef"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseNumberInput.vue"]]),yn=Object.freeze(Object.defineProperty({__proto__:null,default:vn},Symbol.toStringTag,{value:"Module"}));T.add(Ne,Ue);const wn={name:"OpenwbRangeInput",components:{FontAwesomeIcon:$,OpenwbBaseSettingElement:D},mixins:[L],inheritAttrs:!1,props:{title:{type:String,required:!1,default:""},modelValue:{type:Number,required:!1,default:void 0},unit:{type:String,required:!1,default:void 0},min:{type:Number,required:!1,default:0},max:{type:Number,required:!1,default:100},step:{type:Number,required:!1,default:1},labels:{type:Array,required:!1,default:void 0}},emits:["update:modelValue"],computed:{label(){var e;return this.labels&&this.sliderValue!=null?this.sliderValue[_(e.$slots,"title",{},()=>[h(w(s.title),1)],!0)]),default:m(()=>[l("div",kn,[l("div",Cn,[n.label?(i(),c("label",{key:0,class:"col-2 pl-0 col-form-label valueLabel",for:`${e.uid}-button`},w(n.label),9,Sn)):u("",!0),l("button",{id:`${e.uid}-button`,class:"col-1 btn btn-block btn-info px-0",type:"button",onClick:t[0]||(t[0]=(...r)=>n.decrement&&n.decrement(...r))},[b(a,{icon:["fas","step-backward"]})],8,Bn),l("div",An,[O(l("input",A({"onUpdate:modelValue":t[1]||(t[1]=r=>n.sliderValue=r),type:"range",class:"form-control-range rangeInput",min:s.min,max:s.max,step:s.step},e.$attrs),null,16,In),[[V,n.sliderValue,void 0,{number:!0}]])]),l("button",{class:"col-1 btn btn-block btn-info px-0",type:"button",onClick:t[2]||(t[2]=(...r)=>n.increment&&n.increment(...r))},[b(a,{icon:["fas","step-forward"]})])])])]),_:2},[e.$slots.help?{name:"help",fn:m(()=>[_(e.$slots,"help",{},void 0,!0)]),key:"0"}:void 0]),1024)}const Tn=C(wn,[["render",On],["__scopeId","data-v-449fb0a5"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseRangeInput.vue"]]),$n=Object.freeze(Object.defineProperty({__proto__:null,default:Tn},Symbol.toStringTag,{value:"Module"}));T.add(N);const Mn={name:"OpenwbSelectInput",components:{FontAwesomeIcon:$,OpenwbBaseSettingElement:D},mixins:[L],inheritAttrs:!1,props:{title:{type:String,required:!1,default:void 0},modelValue:{type:[String,Number,Array,null],required:!1,default:void 0},emptyValue:{type:[String,Number,Array],required:!1,default:void 0},groups:{type:Array,required:!1,default:void 0},options:{type:Array,required:!1,default:void 0},notSelected:{type:String,default:void 0},addButton:{type:Boolean,default:!1}},emits:["update:modelValue","input:add"],computed:{value:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},addDisabled:{get(){return this.value===void 0}}},methods:{addClicked(){this.addDisabled||this.$emit("input:add")}}},Vn={class:"w-100"},Pn={class:"input-group"},qn={key:0,class:"input-group-prepend"},Dn={class:"input-group-text"},Ln=["id"],En=["value"],Rn=["value"],xn=["label"],Wn=["value"],jn={key:1,class:"input-group-append"};function zn(e,t,s,d,o,n){const a=g("font-awesome-icon"),p=g("openwb-base-setting-element");return i(),f(p,null,q({default:m(()=>[l("div",Vn,[l("div",Pn,[e.$slots.prefix?(i(),c("div",qn,[l("div",Dn,[_(e.$slots,"prefix")])])):u("",!0),O(l("select",A({id:`${e.uid}-select`,"onUpdate:modelValue":t[0]||(t[0]=r=>n.value=r),class:"col form-control"},e.$attrs),[s.notSelected!==void 0?(i(),c("option",{key:0,value:s.emptyValue,disabled:""}," -- "+w(s.notSelected)+" -- ",9,En)):u("",!0),(i(!0),c(M,null,P(s.options,r=>(i(),c("option",{key:r.value,value:r.value},w(r.text),9,Rn))),128)),(i(!0),c(M,null,P(s.groups,r=>(i(),c("optgroup",{key:r.label,label:r.label},[(i(!0),c(M,null,P(r.options,v=>(i(),c("option",{key:v.value,value:v.value},w(v.text),9,Wn))),128))],8,xn))),128))],16,Ln),[[te,n.value]]),s.addButton?(i(),c("div",jn,[l("div",{class:S(["input-group-text",n.addDisabled?"not-clickable":"bg-success clickable"]),onClick:t[1]||(t[1]=r=>n.addClicked())},[_(e.$slots,"inputAdd",{},()=>[b(a,{icon:["fas","plus"]})])],2)])):u("",!0)])])]),_:2},[e.$slots.title||s.title?{name:"title",fn:m(()=>[_(e.$slots,"title",{},()=>[h(w(s.title),1)])]),key:"0"}:void 0,e.$slots.help?{name:"help",fn:m(()=>[_(e.$slots,"help")]),key:"1"}:void 0]),1024)}const Nn=C(Mn,[["render",zn],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseSelectInput.vue"]]),Un=Object.freeze(Object.defineProperty({__proto__:null,default:Nn},Symbol.toStringTag,{value:"Module"}));T.add(U,Fe,He);const Fn={name:"OpenwbSubmitButtons",components:{FontAwesomeIcon:$},props:{formName:{type:String,default:void 0},hideReset:{type:Boolean,default:!1},hideDefaults:{type:Boolean,default:!0},saveLabel:{type:String,default:"Speichern"},saveDisabled:{type:Boolean,default:!1},saveId:{type:String,default:"saveSettingsBtn"},resetLabel:{type:String,default:"Änderungen verwerfen"},resetDisabled:{type:Boolean,default:!1},resetId:{type:String,default:"modalResetBtn"},defaultsLabel:{type:String,default:"Werkseinstellungen"},defaultsDisabled:{type:Boolean,default:!1},defaultsId:{type:String,default:"modalDefaultsBtn"}},emits:["reset","defaults","save"],data(){return{showModalReset:!1,showModalDefaults:!1}},computed:{showModalSave(){return this.$store.state.local.savingData&&this.$store.state.local.preventSavingModal===!1}},methods:{showResetModal(){this.showModalReset=!0},handleModalReset(e){this.showModalReset=!1,e=="confirm"&&this.$emit("reset")},showDefaultsModal(){this.showModalDefaults=!0},handleModalDefaults(e){this.showModalDefaults=!1,e=="confirm"&&this.$emit("defaults")},saveSettings(){if(this.formName){if(!document.forms[this.formName].reportValidity()){console.debug("form invalid");return}}else console.debug("no form to validate");this.$emit("save")}}},Hn={class:"row justify-content-center mb-1 w-100"},Kn={class:"col-md-4 d-flex py-1 justify-content-center"},Gn=["id","disabled"],Zn={key:0,class:"col-md-4 d-flex py-1 justify-content-center"},Jn=["id","disabled"],Qn={key:1,class:"col-md-4 d-flex py-1 justify-content-center"},Yn=["id","disabled"];function Xn(e,t,s,d,o,n){const a=g("openwb-base-modal-dialog"),p=g("font-awesome-icon");return i(),c(M,null,[b(a,{show:n.showModalSave,title:"Speichern",subtype:"success","prevent-close":!0},{default:m(()=>[...t[3]||(t[3]=[h(" Einstellungen werden gespeichert... ",-1)])]),_:1},8,["show"]),b(a,{show:o.showModalReset,title:"Änderungen verwerfen",subtype:"warning",buttons:[{text:"Ok",event:"confirm",subtype:"warning"}],onModalResult:n.handleModalReset},{default:m(()=>[...t[4]||(t[4]=[h(" Willst Du die nicht gespeicherten Änderungen wirklich verwerfen? ",-1)])]),_:1},8,["show","onModalResult"]),b(a,{show:o.showModalDefaults,title:"Werkseinstellungen",subtype:"danger",buttons:[{text:"Ok",event:"confirm",subtype:"danger"}],onModalResult:n.handleModalDefaults},{default:m(()=>[...t[5]||(t[5]=[h(" Willst Du wirklich alle Werte dieser Seite auf die Werkseinstellungen zurücksetzen? ",-1)])]),_:1},8,["show","onModalResult"]),l("div",Hn,[l("div",Kn,[l("button",{id:s.saveId,type:"button",class:S(["btn btn-block",[{disabled:s.saveDisabled},s.saveDisabled?"btn-outline-success":"btn-success"]]),disabled:s.saveDisabled,onClick:t[0]||(t[0]=(...r)=>n.saveSettings&&n.saveSettings(...r))},[h(w(s.saveLabel)+" ",1),b(p,{icon:["fas","check"]})],10,Gn)]),s.hideReset?u("",!0):(i(),c("div",Zn,[l("button",{id:s.resetId,type:"button",class:S(["btn btn-block",[{disabled:s.resetDisabled},s.resetDisabled?"btn-outline-warning":"btn-warning"]]),disabled:s.resetDisabled,onClick:t[1]||(t[1]=(...r)=>n.showResetModal&&n.showResetModal(...r))},[h(w(s.resetLabel)+" ",1),b(p,{icon:["fas","undo"]})],10,Jn)])),s.hideDefaults?u("",!0):(i(),c("div",Qn,[l("button",{id:s.defaultsId,type:"button",class:S(["btn btn-block",[{disabled:s.defaultsDisabled},s.defaultsDisabled?"btn-outline-danger":"btn-danger"]]),disabled:s.defaultsDisabled,onClick:t[2]||(t[2]=(...r)=>n.showDefaultsModal&&n.showDefaultsModal(...r))},[h(w(s.defaultsLabel)+" ",1),b(p,{icon:["fas","times"]})],10,Yn)]))])],64)}const eo=C(Fn,[["render",Xn],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseSubmitButtons.vue"]]),to=Object.freeze(Object.defineProperty({__proto__:null,default:eo},Symbol.toStringTag,{value:"Module"}));T.add(oe,Ke,Ge,Ze,Je,Qe,ie,Ye,Xe,et,tt,N,st,nt);const so={name:"OpenwbTextInput",components:{FontAwesomeIcon:$,OpenwbBaseSettingElement:D},mixins:[L],inheritAttrs:!1,props:{title:{type:String,required:!1,default:""},modelValue:{type:[String,Object],required:!1,default:void 0},subtype:{validator:function(e){return["text","email","host","ipv4","url","user","group","json","password","time","date","month","year"].indexOf(e)!==-1},default:"text"},pattern:{type:String,required:!1,default:void 0},unit:{type:String,required:!1,default:void 0},emptyValue:{type:[String,Object,null],required:!1,default:null},validator:{type:Function,required:!1,default:null},showQuickButtons:{type:Boolean,default:!1},addButton:{type:Boolean,default:!1}},emits:["update:modelValue","input:add"],data(){return{showPassword:!1,inputInvalid:!1,tempValue:this.modelValue}},computed:{value:{get(){return this.subtype=="json"?this.inputInvalid?(console.warn("returning invalid String"),this.tempValue):JSON.stringify(this.tempValue):this.modelValue},set(e){if(this.validator){console.log("Validating input value:",e);const t=this.validator(e);console.log("Validation result:",t);const s=this.inputRef;t!==!0?(console.log("Marking input as invalid",JSON.stringify(this.$refs)),s&&typeof s.setCustomValidity=="function"&&s.setCustomValidity(t),this.inputInvalid=!0,this.tempValue=e):(console.log("Input is valid"),s&&typeof s.setCustomValidity=="function"&&s.setCustomValidity(""),this.inputInvalid=!1)}if(this.subtype=="json")try{let t=JSON.parse(e);this.inputInvalid=!1,this.$refs.jsonInput.setCustomValidity(""),this.tempValue=t,this.$emit("update:modelValue",t)}catch(t){console.error("parsing JSON failed: "+e,t),this.inputInvalid=!0,this.$refs.jsonInput.setCustomValidity("Ungültiger JSON Ausdruck!"),this.tempValue=e}else e==""&&(e=this.emptyValue),this.$emit("update:modelValue",e)}},inputRef(){switch(this.subtype){case"json":return this.$refs.jsonInput;case"password":return this.$refs.passwordInput;case"host":return this.$refs.hostInput;case"ipv4":return this.$refs.ipv4Input;case"email":case"url":return this.$refs.urlInput;case"time":return this.$refs.timeInput;case"date":return this.$refs.dateInput;case"month":return this.$refs.monthInput;case"year":return this.$refs.yearInput}return this.$refs.textInput},hostPattern(){return`^((${this.ipv4Pattern.slice(1,-1)})|((?=.*[a-zA-Z].*$)([a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9]))|(((?=[^.]*[a-zA-Z][^.]*\\.)([a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9]\\.))+((?=[^.]*[a-zA-Z].*$)([a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9]))))$`},ipv4Pattern(){return"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"},addDisabled:{get(){return this.value===this.emptyValue||this.inputInvalid}}},methods:{togglePassword(){this.showPassword=!this.showPassword},modify(e){var t,s=new Date(this.modelValue);switch(this.subtype){case"date":s.setDate(s.getDate()+e),t=String(s.getFullYear())+"-"+String(s.getMonth()+1).padStart(2,"0")+"-"+String(s.getDate()).padStart(2,"0");break;case"month":s.setMonth(s.getMonth()+e),t=String(s.getFullYear())+"-"+String(s.getMonth()+1).padStart(2,"0");break;case"year":s.setYear(s.getFullYear()+e),t=String(s.getFullYear());break;default:console.warn(`cannot modify input of subtype '${this.subtype}'`);return}t>this.inputRef.max||t[_(e.$slots,"title",{},()=>[h(w(s.title),1)],!0)]),default:m(()=>[l("div",no,[l("div",oo,[l("div",io,[l("div",ao,[s.subtype=="text"?(i(),f(a,{key:0,icon:["fas","keyboard"]})):u("",!0),s.subtype=="email"?(i(),f(a,{key:1,icon:["fas","envelope"]})):u("",!0),s.subtype=="host"||s.subtype=="ipv4"?(i(),f(a,{key:2,icon:["fas","network-wired"]})):u("",!0),s.subtype=="url"?(i(),f(a,{key:3,icon:["fas","globe"]})):u("",!0),s.subtype=="user"?(i(),f(a,{key:4,icon:["fas","user"]})):u("",!0),s.subtype=="group"?(i(),f(a,{key:5,icon:["fas","users"]})):u("",!0),s.subtype=="json"?(i(),f(a,{key:6,icon:["fas","code"]})):u("",!0),s.subtype=="password"?(i(),f(a,{key:7,icon:o.showPassword?["fas","unlock"]:["fas","lock"]},null,8,["icon"])):u("",!0),s.subtype=="time"?(i(),f(a,{key:8,icon:["fas","clock"]})):u("",!0),s.subtype=="date"||s.subtype=="month"||s.subtype=="year"?(i(),f(a,{key:9,icon:["fas","calendar-day"]})):u("",!0)])]),["text","user","group"].includes(s.subtype)?O((i(),c("input",A({key:0,id:`${e.uid}-text-input`,ref:"textInput","onUpdate:modelValue":t[0]||(t[0]=r=>n.value=r),type:"text",class:["form-control",{invalid:o.inputInvalid}]},e.$attrs,{pattern:s.pattern}),null,16,lo)),[[V,n.value]]):u("",!0),s.subtype=="json"?O((i(),c("input",A({key:1,id:`${e.uid}-json-input`,ref:"jsonInput","onUpdate:modelValue":t[1]||(t[1]=r=>n.value=r),type:"text",class:"form-control"},e.$attrs,{pattern:s.pattern}),null,16,ro)),[[V,n.value]]):u("",!0),s.subtype=="password"?O((i(),c("input",A({key:2,id:`${e.uid}-password-input`,ref:"passwordInput","onUpdate:modelValue":t[2]||(t[2]=r=>n.value=r),type:o.showPassword?"text":"password",class:"form-control"},e.$attrs,{pattern:s.pattern}),null,16,uo)),[[Z,n.value]]):u("",!0),s.subtype=="host"?O((i(),c("input",A({key:3,id:`${e.uid}-host-input`,ref:"hostInput","onUpdate:modelValue":t[3]||(t[3]=r=>n.value=r),type:"text",class:"form-control"},e.$attrs,{pattern:n.hostPattern}),null,16,co)),[[V,n.value]]):u("",!0),s.subtype=="ipv4"?O((i(),c("input",A({key:4,id:`${e.uid}-ipv4-input`,ref:"ipv4Input","onUpdate:modelValue":t[4]||(t[4]=r=>n.value=r),type:"text",class:"form-control"},e.$attrs,{pattern:n.ipv4Pattern}),null,16,po)),[[V,n.value]]):u("",!0),["email","url"].includes(s.subtype)?O((i(),c("input",A({key:5,id:`${e.uid}-url-input`,ref:"urlInput","onUpdate:modelValue":t[5]||(t[5]=r=>n.value=r),type:s.subtype,class:"form-control"},e.$attrs),null,16,mo)),[[Z,n.value]]):u("",!0),s.subtype=="time"?O((i(),c("input",A({key:6,id:`${e.uid}-time-input`,ref:"timeInput","onUpdate:modelValue":t[6]||(t[6]=r=>n.value=r),type:"time",class:"form-control"},e.$attrs),null,16,fo)),[[V,n.value]]):u("",!0),s.subtype=="date"?O((i(),c("input",A({key:7,id:`${e.uid}-date-input`,ref:"dateInput","onUpdate:modelValue":t[7]||(t[7]=r=>n.value=r),type:"date",class:"form-control"},e.$attrs),null,16,go)),[[V,n.value]]):u("",!0),s.subtype=="month"?O((i(),c("input",A({key:8,id:`${e.uid}-month-input`,ref:"monthInput","onUpdate:modelValue":t[8]||(t[8]=r=>n.value=r),type:"month",class:"form-control"},e.$attrs),null,16,ho)),[[V,n.value]]):u("",!0),s.subtype=="year"?O((i(),c("input",A({key:9,id:`${e.uid}-year-input`,ref:"yearInput","onUpdate:modelValue":t[9]||(t[9]=r=>n.value=r),type:"number",class:"form-control"},e.$attrs),null,16,bo)),[[V,n.value]]):u("",!0),s.unit?(i(),c("div",_o,[l("div",vo,w(s.unit),1)])):u("",!0),s.subtype=="password"?(i(),c("div",{key:11,class:"input-group-append clickable",onClick:t[10]||(t[10]=(...r)=>n.togglePassword&&n.togglePassword(...r))},[l("div",yo,[b(a,{icon:o.showPassword?["far","eye"]:["far","eye-slash"]},null,8,["icon"])])])):u("",!0),s.showQuickButtons&&(s.subtype=="date"||s.subtype=="month"||s.subtype=="year")?(i(),c("div",{key:12,class:"input-group-append clickable",onClick:t[11]||(t[11]=r=>n.modify(-1))},[...t[14]||(t[14]=[l("div",{class:"input-group-text"},"-",-1)])])):u("",!0),s.showQuickButtons&&(s.subtype=="date"||s.subtype=="month"||s.subtype=="year")?(i(),c("div",{key:13,class:"input-group-append clickable",onClick:t[12]||(t[12]=r=>n.modify(1))},[...t[15]||(t[15]=[l("div",{class:"input-group-text"},"+",-1)])])):u("",!0),s.addButton?(i(),c("div",wo,[l("div",{class:S(["input-group-text",n.addDisabled?"not-clickable":"bg-success clickable"]),onClick:t[13]||(t[13]=r=>n.addClicked())},[_(e.$slots,"inputAdd",{},()=>[b(a,{icon:["fas","plus"]})],!0)],2)])):u("",!0),e.$slots.append?(i(),c("div",ko,[l("div",Co,[_(e.$slots,"append",{},void 0,!0)])])):u("",!0)])])]),_:2},[e.$slots.help?{name:"help",fn:m(()=>[_(e.$slots,"help",{},void 0,!0)]),key:"0"}:void 0]),1024)}const Bo=C(so,[["render",So],["__scopeId","data-v-6927d479"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseTextInput.vue"]]),Ao=Object.freeze(Object.defineProperty({__proto__:null,default:Bo},Symbol.toStringTag,{value:"Module"}));T.add(oe,ie);const Io={name:"OpenwbTextareaInput",components:{OpenwbBaseSettingElement:D,FontAwesomeIcon:$},mixins:[L],inheritAttrs:!1,props:{title:{type:String,required:!1,default:""},modelValue:{type:[String,Object],required:!1,default:void 0},subtype:{validator:function(e){return["text","json"].indexOf(e)!==-1},default:"text"}},emits:["update:modelValue"],data(){return{inputInvalid:!1,tempValue:this.modelValue}},computed:{value:{get(){return this.subtype=="json"?this.inputInvalid?(console.debug("returning invalid JSON as String"),this.tempValue):JSON.stringify(this.tempValue,void 0,2):this.modelValue},set(e){if(this.subtype=="json")try{let t=JSON.parse(e);this.inputInvalid=!1,this.$refs.jsonInput.setCustomValidity(""),this.tempValue=t,this.$emit("update:modelValue",t)}catch(t){console.warn("parsing JSON failed: "+e,t),this.inputInvalid=!0,this.$refs.jsonInput.setCustomValidity("Ungültiger JSON Ausdruck!"),this.tempValue=e}else this.$emit("update:modelValue",e)}},length:{get(){return this.value!==void 0?this.value.length:0}}}},Oo={class:"w-100"},To={class:"input-group"},$o={class:"input-group-prepend"},Mo={class:"input-group-text"},Vo=["id"],Po=["id"],qo={key:2,class:"input-group-append"},Do={class:"input-group-text"},Lo={class:"form-text text-muted text-right"};function Eo(e,t,s,d,o,n){const a=g("font-awesome-icon"),p=g("openwb-base-setting-element");return i(),f(p,null,q({title:m(()=>[_(e.$slots,"title",{},()=>[h(w(s.title),1)],!0)]),default:m(()=>[l("div",Oo,[l("div",To,[l("div",$o,[l("div",Mo,[s.subtype=="text"?(i(),f(a,{key:0,icon:["fas","keyboard"]})):u("",!0),s.subtype=="json"?(i(),f(a,{key:1,icon:["fas","code"]})):u("",!0)])]),s.subtype==="json"?O((i(),c("textarea",A({key:0,id:`${e.uid}-textarea`,ref:"jsonInput","onUpdate:modelValue":t[0]||(t[0]=r=>n.value=r),class:"form-control"},e.$attrs),null,16,Vo)),[[V,n.value,void 0,{lazy:!0}]]):O((i(),c("textarea",A({key:1,id:`${e.uid}-textarea`,"onUpdate:modelValue":t[1]||(t[1]=r=>n.value=r),class:"form-control"},e.$attrs),null,16,Po)),[[V,n.value]]),e.$attrs.maxlength?(i(),c("div",qo,[l("div",Do,[l("small",Lo,w(n.length)+" / "+w(e.$attrs.maxlength),1)])])):u("",!0)])])]),_:2},[e.$slots.help?{name:"help",fn:m(()=>[_(e.$slots,"help",{},void 0,!0)]),key:"0"}:void 0]),1024)}const Ro=C(Io,[["render",Eo],["__scopeId","data-v-3d93046b"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseTextarea.vue"]]),xo=Object.freeze(Object.defineProperty({__proto__:null,default:Ro},Symbol.toStringTag,{value:"Module"})),Wo={name:"OpenwbToast",props:{topic:{type:String,required:!0},subtype:{validator:function(e){return["info","success","warning","danger","primary","secondary","light","dark"].indexOf(e)!==-1},default:"secondary"},source:{type:String,required:!0,validator:function(e){return["system","client","command"].indexOf(e)!==-1}},timestamp:{type:Number,required:!0}},emits:["dismiss","hide"],data(){return{handle:void 0,relativeTime:void 0,hidden:!1}},mounted(){this.handle=window.setInterval(this.updateRelativeTime,1e3)},unmounted(){window.clearInterval(this.handle)},methods:{dismiss(){this.$emit("dismiss",{topic:this.topic})},updateRelativeTime(){const e={year:31536e6,month:2628e6,day:864e5,hour:36e5,minute:6e4,second:1e3};var t=new Intl.RelativeTimeFormat("de",{numeric:"auto"});const d=new Date-this.timestamp*1e3;for(var o in e)if(Math.abs(d)>e[o]){this.relativeTime=t.format(Math.round(-d/e[o]),o);break}d>10*1e3&&!this.hidden&&(this.hidden=!0,this.$emit("hide",{topic:this.topic}))}}},jo={key:0,class:"time-diff"},zo={class:"toast-body"};function No(e,t,s,d,o,n){return i(),c("div",{class:S(["toast","border-"+s.subtype]),role:"alert"},[l("div",{class:S(["toast-header","bg-"+s.subtype])},[t[2]||(t[2]=l("strong",{class:"pr-2 mr-auto"},"openWB",-1)),s.timestamp?(i(),c("small",jo,w(o.relativeTime),1)):u("",!0),l("button",{type:"button",class:"ml-2 mb-1 close","data-dismiss":"toast","aria-label":"Close",onClick:t[0]||(t[0]=(...a)=>n.dismiss&&n.dismiss(...a))},[...t[1]||(t[1]=[l("span",{"aria-hidden":"true"},"×",-1)])])],2),l("div",zo,[_(e.$slots,"default",{},void 0,!0)])],2)}const Uo=C(Wo,[["render",No],["__scopeId","data-v-c51b5764"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseToast.vue"]]),Fo=Object.freeze(Object.defineProperty({__proto__:null,default:Uo},Symbol.toStringTag,{value:"Module"})),Ho={name:"OpenwbTooltip",props:{description:{type:String,default:"#TOOLTIP#"},addHint:{type:Boolean,default:!1}}},Ko=["title"];function Go(e,t,s,d,o,n){return i(),c("div",{class:S(["base-text",{dotted:s.addHint}]),title:s.description},[_(e.$slots,"default",{},void 0,!0)],10,Ko)}const Zo=C(Ho,[["render",Go],["__scopeId","data-v-c65a1128"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbBaseTooltip.vue"]]),Jo=Object.freeze(Object.defineProperty({__proto__:null,default:Zo},Symbol.toStringTag,{value:"Module"})),Qo={name:"ComponentState",emits:["reset","defaults","save"],data(){return{mqttTopics:[],weekdays:["Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag"],chargeModes:["instant_charging","pv_charging","scheduled_charging","time_charging","eco_charging","stop"],statusLevel:["success","warning","danger"]}},computed:{mqttTopicsToSubscribe(){return this.mqttTopics.map(e=>e.topic)},mqttTopicsToPublish(){return this.mqttTopics.filter(e=>e.writeable).map(e=>e.topic)}},mounted(){this.mqttTopicsToSubscribe.length>0&&this.$root.doSubscribe(this.mqttTopicsToSubscribe)},unmounted(){this.mqttTopicsToSubscribe.length>0&&this.$root.doUnsubscribe(this.mqttTopicsToSubscribe)},methods:{updateState(e,t,s=void 0){console.debug("updateState:",e,t,s),this.$store.commit({type:"updateTopic",topic:e,objectPath:s,payload:t})},ac_current2dc_power(e){return parseFloat((e*3*230/1e3).toFixed(0))},dc_power2ac_current(e){return parseFloat((e*1e3/230/3).toFixed(2))},getWildcardIndexList(e,t=!1){let s=e;t||(s="^"+e.replaceAll("/","\\/").replaceAll("+","[^+/]+").replaceAll("#","[^#/]+")+"$");let d=Object.keys(this.$store.state.mqtt).filter(o=>o.match(s));return d.forEach((o,n,a)=>{a[n]=parseInt(o.match(/(?:\/)([0-9]+)(?=\/)*/g)[0].replace(/[^0-9]+/g,""))}),d},getWildcardTopics(e,t=!1){let s=e;return t||(s="^"+e.replaceAll("/","\\/").replaceAll("+","[^+/]+").replaceAll("#","[^#/]+")+"$"),Object.keys(this.$store.state.mqtt).filter(d=>d.match(s)).reduce((d,o)=>({...d,[o]:this.$store.state.mqtt[o]}),{})},formatDate(e,t={year:"numeric",month:"2-digit",day:"2-digit"}){return new Date(e).toLocaleDateString(void 0,t)},formatNumber(e,t=0,s=t,d=1){if(!(e==null||isNaN(e)))return e=e*d,e.toLocaleString(void 0,{minimumFractionDigits:t,maximumFractionDigits:s})},formatNumberTopic(e,t=0,s=t,d=1){return this.$store.state.mqtt[e]?this.formatNumber(this.$store.state.mqtt[e],t,s,d):"-"},formatPhaseArrayNumberTopic(e,t=0,s=t,d=1){return this.$store.state.mqtt[e]?this.$store.state.mqtt[e].map(o=>this.formatNumber(o,t,s,d)):["-","-","-"]},translateChargeMode(e){return{instant_charging:"Sofort",pv_charging:"PV",scheduled_charging:"Zielladen",time_charging:"Zeitladen",eco_charging:"Eco",standby:"Standby",stop:"Stop"}[e]||e},getContrastColor(e){if(!e)return"#000000";e=e.replace("#","");const t=parseInt(e.substr(0,2),16),s=parseInt(e.substr(2,2),16),d=parseInt(e.substr(4,2),16);return(t*299+s*587+d*114)/1e3>125?"#212529":"#ffffff"}}},z=C(Qo,[["__file","/opt/openWB-dev/openwb-ui-settings/src/components/mixins/ComponentState.vue"]]);T.add(ot);const Yo={name:"OpenwbNavBar",components:{FontAwesomeIcon:$},mixins:[z],data(){return{mqttTopics:[{topic:"openWB/system/security/access/+",writeable:!1},{topic:"openWB/general/legacy_smarthome_active",writeable:!1}]}},computed:{nodeEnv(){return"development"},accessAllowed(){return e=>this.$store.state.mqtt[`openWB/system/security/access/${e}`]===!0},legacySmarthomeActive(){return this.$store.state.mqtt["openWB/general/legacy_smarthome_active"]!==!1}},watch:{$route(){this.$refs.collapsibleNavbar.classList.remove("show"),this.$refs.navbarButton.classList.add("collapsed"),this.$refs.navbarButton.setAttribute("aria-expanded",!1)}}},Xo={class:"navbar navbar-expand-xl bg-dark navbar-dark fixed-top"},ei={ref:"navbarButton",class:"navbar-toggler mr-auto",type:"button","data-toggle":"collapse","data-target":"#collapsibleNavbar"},ti={id:"collapsibleNavbar",ref:"collapsibleNavbar",class:"collapse navbar-collapse navbar-nav-scroll"},si={class:"navbar-nav mr-auto"},ni={key:0,class:"nav-item"},oi={class:"nav-item dropdown nav-separator-before"},ii={class:"dropdown-menu","aria-labelledby":"navbarDropdown"},ai={class:"nav-item dropdown nav-separator-before"},li={class:"dropdown-menu","aria-labelledby":"navbarDropdown"},ri={class:"nav-item dropdown"},di={class:"dropdown-menu","aria-labelledby":"navbarDropdown"},ui={class:"nav-item dropdown"},ci={class:"dropdown-menu","aria-labelledby":"navbarDropdown"},pi={key:5,class:"dropdown-divider"},mi={key:6,href:"modules/legacy_smart_home/smarthomeconfig.php",class:"dropdown-item",target:"_blank"},fi={class:"nav-item dropdown"},gi={class:"dropdown-menu","aria-labelledby":"navbarDropdown"},hi={class:"nav-item nav-separator-before"},bi={class:"nav-link",href:"https://wiki.openwb.de/",target:"_blank"};function _i(e,t,s,d,o,n){const a=g("router-link"),p=g("font-awesome-icon");return i(),c("nav",Xo,[t[32]||(t[32]=l("a",{class:"navbar-brand",href:"/openWB/web/"},[l("span",null,"openWB")],-1)),l("button",ei,[...t[0]||(t[0]=[l("span",{class:"navbar-toggler-icon"},null,-1)])],512),l("div",ti,[l("ul",si,[n.accessAllowed("Status")?(i(),c("li",ni,[b(a,{to:"/Status",class:"nav-link","active-class":"active disabled"},{default:m(()=>[...t[1]||(t[1]=[h(" Status ",-1)])]),_:1})])):u("",!0),l("li",oi,[t[4]||(t[4]=l("a",{class:"nav-link dropdown-toggle",href:"#",role:"button","data-toggle":"dropdown","aria-expanded":"false"}," Auswertungen ",-1)),l("div",ii,[n.accessAllowed("ChargeLog")?(i(),f(a,{key:0,to:"/Logging/ChargeLog",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[2]||(t[2]=[h(" Ladeprotokoll ",-1)])]),_:1})):u("",!0),n.accessAllowed("Chart")?(i(),f(a,{key:1,to:"/Logging/Chart",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[3]||(t[3]=[h(" Diagramme ",-1)])]),_:1})):u("",!0)])]),l("li",ai,[t[8]||(t[8]=l("a",{class:"nav-link dropdown-toggle",href:"#",role:"button","data-toggle":"dropdown","aria-expanded":"false"}," Einstellungen ",-1)),l("div",li,[n.accessAllowed("GeneralConfiguration")?(i(),f(a,{key:0,to:"/GeneralConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[5]||(t[5]=[h(" Allgemein ",-1)])]),_:1})):u("",!0),n.accessAllowed("DisplayConfiguration")?(i(),f(a,{key:1,to:"/DisplayConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[6]||(t[6]=[h(" Display ",-1)])]),_:1})):u("",!0),n.accessAllowed("IdentificationConfiguration")?(i(),f(a,{key:2,to:"/IdentificationConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[7]||(t[7]=[h(" Identifikation ",-1)])]),_:1})):u("",!0)])]),l("li",ri,[t[12]||(t[12]=l("a",{class:"nav-link dropdown-toggle",href:"#",role:"button","data-toggle":"dropdown","aria-expanded":"false"}," Ladeeinstellungen ",-1)),l("div",di,[n.accessAllowed("GeneralChargeConfiguration")?(i(),f(a,{key:0,to:"/GeneralChargeConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[9]||(t[9]=[h(" Übergreifendes ",-1)])]),_:1})):u("",!0),n.accessAllowed("SurplusChargeConfiguration")?(i(),f(a,{key:1,to:"/SurplusChargeConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[10]||(t[10]=[h(" Überschuss-Laden ",-1)])]),_:1})):u("",!0),n.accessAllowed("ActiveBatControlConfiguration")?(i(),f(a,{key:2,to:"/ActiveBatControlConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[11]||(t[11]=[h(" Speichersteuerung ",-1)])]),_:1})):u("",!0)])]),l("li",ui,[t[19]||(t[19]=l("a",{class:"nav-link dropdown-toggle",href:"#",role:"button","data-toggle":"dropdown","aria-expanded":"false"}," Konfiguration ",-1)),l("div",ci,[n.accessAllowed("HardwareInstallation")?(i(),f(a,{key:0,to:"/HardwareInstallation",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[13]||(t[13]=[h(" Geräte und Komponenten ",-1)])]),_:1})):u("",!0),n.accessAllowed("LoadManagementConfiguration")?(i(),f(a,{key:1,to:"/LoadManagementConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[14]||(t[14]=[h(" Lastmanagement ",-1)])]),_:1})):u("",!0),n.accessAllowed("ChargePointInstallation")?(i(),f(a,{key:2,to:"/ChargePointInstallation",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[15]||(t[15]=[h(" Ladepunkte ",-1)])]),_:1})):u("",!0),n.accessAllowed("VehicleConfiguration")?(i(),f(a,{key:3,to:"/VehicleConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[16]||(t[16]=[h(" Fahrzeuge ",-1)])]),_:1})):u("",!0),b(a,{to:"/ConsumerConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[17]||(t[17]=[h(" Verbraucher ",-1)])]),_:1}),n.accessAllowed("IoConfiguration")?(i(),f(a,{key:4,to:"/IoConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[18]||(t[18]=[h(" Ein-/Ausgänge ",-1)])]),_:1})):u("",!0),n.accessAllowed("LegacySmartHomeConfiguration")&&n.legacySmarthomeActive?(i(),c("div",pi)):u("",!0),n.accessAllowed("LegacySmartHomeConfiguration")&&n.legacySmarthomeActive?(i(),c("a",mi," SmartHome ")):u("",!0)])]),l("li",fi,[t[30]||(t[30]=l("a",{class:"nav-link dropdown-toggle",href:"#",role:"button","data-toggle":"dropdown","aria-expanded":"false"}," System ",-1)),l("div",gi,[n.accessAllowed("InstallAssistant")?(i(),f(a,{key:0,to:"/System/InstallAssistant",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[20]||(t[20]=[h(" Einrichtungsassistent ",-1)])]),_:1})):u("",!0),n.accessAllowed("CloudConfiguration")?(i(),f(a,{key:1,to:"/System/CloudConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[21]||(t[21]=[h(" openWB Cloud ",-1)])]),_:1})):u("",!0),n.accessAllowed("MqttBridgeConfiguration")?(i(),f(a,{key:2,to:"/System/MqttBridgeConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[22]||(t[22]=[h(" MQTT-Brücken ",-1)])]),_:1})):u("",!0),n.accessAllowed("DebugConfiguration")?(i(),f(a,{key:3,to:"/System/DebugConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[23]||(t[23]=[h(" Fehlersuche ",-1)])]),_:1})):u("",!0),n.accessAllowed("Support")?(i(),f(a,{key:4,to:"/System/Support",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[24]||(t[24]=[h(" Support ",-1)])]),_:1})):u("",!0),n.accessAllowed("DataManagement")?(i(),f(a,{key:5,to:"/System/DataManagement",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[25]||(t[25]=[h(" Datenverwaltung ",-1)])]),_:1})):u("",!0),n.accessAllowed("SecurityConfiguration")?(i(),f(a,{key:6,to:"/System/SecurityConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[26]||(t[26]=[h(" Sicherheit ",-1)])]),_:1})):u("",!0),n.accessAllowed("SystemConfiguration")?(i(),f(a,{key:7,to:"/System/SystemConfiguration",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[27]||(t[27]=[h(" System ",-1)])]),_:1})):u("",!0),n.accessAllowed("TenantEnergyConfiguration")?(i(),f(a,{key:8,to:"/System/Abrechnung",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[28]||(t[28]=[h(" Abrechnung ",-1)])]),_:1})):u("",!0),n.accessAllowed("LegalSettings")?(i(),f(a,{key:9,to:"/System/LegalSettings",class:"dropdown-item","active-class":"active disabled"},{default:m(()=>[...t[29]||(t[29]=[h(" Rechtliches ",-1)])]),_:1})):u("",!0)])]),l("li",hi,[l("a",bi,[t[31]||(t[31]=h(" Wiki ",-1)),b(p,{icon:["fas","external-link-alt"]})])])])],512),t[33]||(t[33]=l("div",{class:"ml-auto d-flex flex-row align-items-center"},[l("div",{id:"info-target"}),l("div",{id:"user-target"}),l("div",{id:"message-target"})],-1))])}const vi=C(Yo,[["render",_i],["__scopeId","data-v-e7a6d0c0"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbPageNavbar.vue"]]),yi={name:"OpenwbPageFooter"},wi={id:"footer",class:"footer bg-dark text-light font-small"},ki={class:"container text-center"};function Ci(e,t,s,d,o,n){return i(),c("footer",wi,[l("div",ki,[l("small",null," Du befindest dich hier: Einstellungen / "+w(e.$route.meta.heading),1)])])}const Si=C(yi,[["render",Ci],["__scopeId","data-v-3c9a239a"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbPageFooter.vue"]]);T.add(it,at,lt,rt);const Bi={name:"OpenwbPageUser",components:{FontAwesomeIcon:$,FontAwesomeLayers:ae},mixins:[z],emits:["sendCommand"],data(){return{mqttTopics:[{topic:"openWB/system/boot_done",writeable:!1},{topic:"openWB/system/dataprotection_acknowledged",writeable:!1},{topic:"openWB/system/security/access_allowed",writeable:!1},{topic:"openWB/system/security/user_management_active",writeable:!1},{topic:"openWB/system/update_in_progress",writeable:!1}],showLoginModal:!1,showPasswordResetModal:!1,showLogoutModal:!1,username:"",password:"",token:"",passwordConfirm:"",tokenRequested:!1,passwordResetRequested:!1,smallScreen:!1}},computed:{loggedInUser(){return this.$store.state.local.username||null},userManagementActive(){return this.$store.state.mqtt["openWB/system/security/user_management_active"]===!0},accessAllowed(){return this.$store.state.mqtt["openWB/system/security/access_allowed"]===void 0?!1:this.$store.state.mqtt["openWB/system/security/access_allowed"]===!0},anonymousAccessAllowed(){return this.accessAllowed&&this.loggedInUser===null},dataProtectionAcknowledged(){return this.$store.state.mqtt["openWB/system/dataprotection_acknowledged"]===!0},loginButtons(){let e=[{text:"Anmelden",event:"login",subtype:"success",disabled:this.stringIsEmpty(this.username)||this.stringIsEmpty(this.password)}];return this.dataProtectionAcknowledged&&e.push({text:"Kennwort vergessen",event:"forgot_password",subtype:"warning"}),e},requestTokenDisabled(){return this.stringIsEmpty(this.username)||this.tokenRequested},resetPasswordDisabled(){return this.stringIsEmpty(this.username)||this.stringIsEmpty(this.token)||this.stringIsEmpty(this.password)||this.stringIsEmpty(this.passwordConfirm)||this.password!==this.passwordConfirm||this.passwordResetRequested},modalBlockerVisible(){return this.$store.state.local.modalBlockerVisible===!0}},watch:{userManagementActive(){this.checkAutoLogin()},loggedInUser(e){e&&this.checkAutoLogin()},accessAllowed(){this.checkAutoLogin()},modalBlockerVisible(){this.checkAutoLogin()}},mounted(){ke(()=>{this.checkAutoLogin()})},beforeMount(){window.addEventListener("resize",this.updateScreenSize),this.updateScreenSize()},beforeUnmount(){window.removeEventListener("resize",this.updateScreenSize)},methods:{updateScreenSize(){this.smallScreen=window.innerWidth<576},stringIsEmpty(e){return!e||e.length===0},checkAutoLogin(){console.debug("Checking auto login: ",this.userManagementActive,this.accessAllowed,this.loggedInUser),this.userManagementActive&&!this.accessAllowed&&!this.modalBlockerVisible?this.showLoginModal=!0:this.showLoginModal=!1},doLogin(e){switch(e){case"login":if(!this.username||!this.password){this.$root.postClientMessage("Benutzername und Passwort erforderlich.","danger");return}this.$cookies.set("mqtt",`${this.username}:${this.password}`),this.$root.reconnectMqttClient(),location.reload();break;case"forgot_password":console.warn("Password reset requested for user:",this.username),this.showLoginModal=!1,this.username="",this.password="",this.showPasswordResetModal=!0;break;default:this.showLoginModal=!1,this.username="",this.password=""}},processResetResult(e){switch(console.log("Password reset modal result:",e),e){case"request_token":if(!this.username){this.$root.postClientMessage("Benutzername erforderlich.","danger");return}console.warn("Requesting password reset token for:",this.username),this.tokenRequested=!0,this.$emit("sendCommand",{command:"createPasswordResetToken",data:{username:this.username}});break;case"reset_password":if(!this.username||!this.token||!this.password||!this.passwordConfirm||this.password!==this.passwordConfirm){this.$root.postClientMessage("Benutzername, Token und neues Kennwort erforderlich.","danger");return}console.warn("Resetting password for:",this.username,"with token:",this.token,"and new password:",this.password),this.passwordResetRequested=!0,this.$root.postClientMessage("Das Token wird geprüft und bei Erfolg das Passwort zurückgesetzt. Dieser Vorgang dauert ein paar Sekunden.","info"),this.$emit("sendCommand",{command:"resetUserPassword",data:{username:this.username,token:this.token,newPassword:this.password}});break;case"close":this.showPasswordResetModal=!1,this.username="",this.password="",this.token="",this.passwordConfirm="",this.tokenRequested=!1,this.passwordResetRequested=!1,this.showLoginModal=!0;return}},doLogout(e){this.showLogoutModal=!1,e==="confirm"&&(console.warn("Logging out user"),this.$cookies.remove("mqtt"),this.$root.reconnectMqttClient(),location.reload())}}},Ai={id:"user-indicator",class:"ml-2"},Ii={key:0,class:"pill bg-primary"},Oi={key:0,class:"non-selectable"},Ti={key:1,class:"pill bg-secondary"},$i={name:"loginForm"},Mi={name:"requestTokenForm"};function Vi(e,t,s,d,o,n){const a=g("FontAwesomeIcon"),p=g("openwb-base-tooltip"),r=g("FontAwesomeLayers"),v=g("openwb-base-modal-dialog"),k=g("openwb-base-text-input");return i(),c(M,null,[n.userManagementActive===!0?(i(),f(j,{key:0,defer:"",to:"#user-target"},[l("div",Ai,[n.loggedInUser?(i(),c("span",Ii,[b(p,{description:`Angemeldet als ${n.loggedInUser}`},{default:m(()=>[b(a,{icon:["fas","circle-user"],size:"lg"}),o.smallScreen?u("",!0):(i(),c("span",Oi,w(n.loggedInUser),1))]),_:1},8,["description"]),b(p,{description:"Abmelden"},{default:m(()=>[b(a,{class:"text-light clickable px-2",icon:["fas","arrow-right-from-bracket"],size:"lg",onClick:t[0]||(t[0]=y=>o.showLogoutModal=!0)})]),_:1})])):(i(),c("span",Ti,[b(p,{description:"Nicht angemeldet"},{default:m(()=>[b(r,null,{default:m(()=>[b(a,{icon:["fas","circle-user"]}),b(a,{icon:["fas","ban"],color:"red"})]),_:1})]),_:1}),b(p,{description:"Anmelden"},{default:m(()=>[b(a,{class:"text-light clickable px-2",icon:["fas","arrow-right-to-bracket"],size:"lg",onClick:t[1]||(t[1]=y=>o.showLoginModal=!0)})]),_:1})]))])])):u("",!0),n.userManagementActive?(i(),f(v,{key:1,show:o.showLogoutModal,title:"Abmelden",subtype:"warning",buttons:[{text:"Abmelden",event:"confirm",subtype:"danger"}],onModalResult:t[2]||(t[2]=y=>n.doLogout(y))},{default:m(()=>[...t[11]||(t[11]=[l("p",null,"Willst Du Dich wirklich abmelden?",-1)])]),_:1},8,["show"])):u("",!0),n.userManagementActive?(i(),f(v,{key:2,show:o.showLoginModal,"prevent-close":!n.anonymousAccessAllowed,title:"Anmelden",subtype:"success",buttons:n.loginButtons,onModalResult:t[5]||(t[5]=y=>n.doLogin(y))},{default:m(()=>[l("form",$i,[b(k,{modelValue:o.username,"onUpdate:modelValue":t[3]||(t[3]=y=>o.username=y),title:"Benutzername",subtype:"user",required:"",autocomplete:"username"},null,8,["modelValue"]),b(k,{modelValue:o.password,"onUpdate:modelValue":t[4]||(t[4]=y=>o.password=y),title:"Passwort",subtype:"password",required:"",autocomplete:"current-password"},null,8,["modelValue"])])]),_:1},8,["show","prevent-close","buttons"])):u("",!0),n.userManagementActive&&n.dataProtectionAcknowledged?(i(),f(v,{key:3,show:o.showPasswordResetModal,title:"Kennwort zurücksetzen",subtype:"warning",buttons:[{text:"Token anfordern",event:"request_token",subtype:"success",disabled:n.requestTokenDisabled},{text:"Kennwort zurücksetzen",event:"reset_password",subtype:"primary",disabled:n.resetPasswordDisabled},{text:"Zurück",event:"close",subtype:"secondary"}],onModalResult:t[10]||(t[10]=y=>n.processResetResult(y))},{default:m(()=>[l("form",Mi,[b(k,{modelValue:o.username,"onUpdate:modelValue":t[6]||(t[6]=y=>o.username=y),title:"Benutzername",subtype:"user","empty-value":"",required:"",autocomplete:"username"},null,8,["modelValue"]),b(k,{modelValue:o.token,"onUpdate:modelValue":t[7]||(t[7]=y=>o.token=y),title:"Token",subtype:"password","empty-value":"",readonly:o.username.length<=0,disabled:o.username.length<=0},null,8,["modelValue","readonly","disabled"]),b(k,{modelValue:o.password,"onUpdate:modelValue":t[8]||(t[8]=y=>o.password=y),title:"Neues Kennwort",subtype:"password","empty-value":"",readonly:o.username.length===0||o.token.length===0,disabled:o.username.length===0||o.token.length===0},null,8,["modelValue","readonly","disabled"]),b(k,{modelValue:o.passwordConfirm,"onUpdate:modelValue":t[9]||(t[9]=y=>o.passwordConfirm=y),title:"Neues Kennwort bestätigen",subtype:"password","empty-value":"",readonly:o.username.length===0||o.token.length===0,disabled:o.username.length===0||o.token.length===0,validator:y=>y===o.password||"Kennwörter stimmen nicht überein"},null,8,["modelValue","readonly","disabled","validator"])])]),_:1},8,["show","buttons"])):u("",!0)],64)}const Pi=C(Bi,[["render",Vi],["__scopeId","data-v-adc196c2"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbPageUser.vue"]]);T.add(dt,ut);const qi={name:"OpenwbPageMqttConnectionState",components:{FontAwesomeIcon:$},props:{connected:{type:Boolean,required:!0}},data(){return{showIcon:!this.connected,visibilityTimeout:null}},watch:{connected(e){e?(clearTimeout(this.visibilityTimeout),this.visibilityTimeout=setTimeout(()=>{this.showIcon=!1},5e3)):(this.showIcon=!0,clearTimeout(this.visibilityTimeout))}}},Di={id:"connection-state-indicator",class:"ml-2"};function Li(e,t,s,d,o,n){const a=g("FontAwesomeIcon"),p=g("openwb-base-avatar"),r=g("openwb-base-tooltip");return o.showIcon?(i(),f(j,{key:0,defer:"",to:"#info-target"},[l("div",Di,[b(r,{description:`Verbindung ${s.connected?"hergestellt":"getrennt"}`},{default:m(()=>[b(p,{class:S(s.connected?"text-success":"bg-danger")},{default:m(()=>[b(a,{icon:s.connected?["fas","link"]:["fas","link-slash"]},null,8,["icon"])]),_:1},8,["class"])]),_:1},8,["description"])])])):u("",!0)}const Ei=C(qi,[["render",Li],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbPageMqttConnectionState.vue"]]);T.add(ct,pt);const Ri={name:"OpenwbPageMessages",components:{FontAwesomeIcon:$,FontAwesomeLayers:ae,FontAwesomeLayersText:mt},mixins:[z],data(){return{mqttTopics:[{topic:"openWB/command/"+this.$root.mqttClientId+"/messages/+",writeable:!1},{topic:"openWB/system/messages/+",writeable:!1}],showAllMessages:!1,hiddenMessages:[]}},computed:{alertLevel(){return this.messages.reduce((t,s)=>((t=="light"&&["info","success","warning","danger"].includes(s.type)||t=="info"&&["success","warning","danger"].includes(s.type)||t=="success"&&["warning","danger"].includes(s.type)||t=="warning"&&s.type=="danger")&&(t=s.type),t),"light")},messages(){const e=[];return this.systemMessages.forEach(t=>{e.push(t)}),this.localMessages.forEach(t=>{e.push(t)}),this.clientMessages.forEach(t=>{e.push(t)}),e.sort(this.compareMessagesByTimestamp),e},recentMessages(){return this.showAllMessages?this.messages:this.messages.filter(e=>!this.hiddenMessages.includes(e.topic))},messageIndicatorClass(){return"text-"+this.alertLevel},systemMessages(){let e=this.getWildcardTopics("openWB/system/messages/+");var t=[];for(const[s,d]of Object.entries(e))t.push({topic:s,...d});return t},localMessages(){const e=this.$store.state.local.messages||{};var t=[];for(const[s,d]of Object.entries(e))t.push({topic:s,...d});return t},clientMessages(){let e=this.getWildcardTopics("openWB/command/"+this.$root.mqttClientId+"/messages/+");var t=[];for(const[s,d]of Object.entries(e))t.push({topic:s,...d});return t}},methods:{toggleAllMessages(){this.showAllMessages=!this.showAllMessages},compareMessagesByTimestamp(e,t){return t.timestamp-e.timestamp},clearTopic(e){this.$root.doPublish(e,void 0)},dismissMessage(e){this.localMessages.find(s=>s.topic===e.topic)?this.$store.commit("removeClientMessage",e.topic):this.clearTopic(e.topic);var t=this.hiddenMessages.indexOf(e.topic);t>-1&&this.hiddenMessages.splice(t,1)},dismissAllMessages(){this.messages.forEach(e=>{this.dismissMessage({topic:e.topic})}),this.hiddenMessages=[],this.toggleAllMessages()},hideMessage(e){this.hiddenMessages.includes(e.topic)||this.hiddenMessages.push(e.topic)}}},xi=["title"],Wi=["innerHTML"];function ji(e,t,s,d,o,n){const a=g("font-awesome-icon"),p=g("font-awesome-layers-text"),r=g("font-awesome-layers"),v=g("openwb-base-alert"),k=g("openwb-base-click-button"),y=g("openwb-base-toast");return i(),c(M,null,[(i(),f(j,{defer:"",to:"#message-target"},[l("div",{id:"message-indicator",class:S(["text-light clickable",o.showAllMessages?"active":""]),title:o.showAllMessages?"nur neue Nachrichten anzeigen":"Alle Nachrichten anzeigen",onClick:t[0]||(t[0]=(...I)=>n.toggleAllMessages&&n.toggleAllMessages(...I))},[b(r,{"full-width":""},{default:m(()=>[b(a,{icon:o.showAllMessages?["fas","bell"]:["far","bell"],class:S(n.messageIndicatorClass)},null,8,["icon","class"]),n.messages.length>0?(i(),f(p,{key:0,counter:"",value:n.messages.length,position:"top-right",class:"message-counter bg-light text-dark"},null,8,["value"])):u("",!0)]),_:1})],10,xi)])),n.recentMessages.length>0||o.showAllMessages?(i(),c("div",{key:0,class:S(["openwb-toast-container",o.showAllMessages?"full-height":""])},[n.recentMessages.length==0?(i(),f(v,{key:0,subtype:"info"},{default:m(()=>[...t[1]||(t[1]=[h(" Keine Nachrichten vorhanden. ",-1)])]),_:1})):o.showAllMessages?(i(),f(k,{key:1,class:"btn-sm btn-secondary mb-1",onButtonClicked:n.dismissAllMessages},{default:m(()=>[...t[2]||(t[2]=[h(" Alle Nachrichten löschen ",-1)])]),_:1},8,["onButtonClicked"])):u("",!0),(i(!0),c(M,null,P(n.recentMessages,I=>(i(),f(y,{key:I.topic,topic:I.topic,source:I.source,subtype:I.type,timestamp:I.timestamp,onDismiss:n.dismissMessage,onHide:n.hideMessage},{default:m(()=>[l("span",{innerHTML:I.message},null,8,Wi)]),_:2},1032,["topic","source","subtype","timestamp","onDismiss","onHide"]))),128))],2)):u("",!0)],64)}const zi=C(Ri,[["render",ji],["__scopeId","data-v-2c25f0d0"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbPageMessages.vue"]]),Ni={name:"OpenwbPageBlocker",mixins:[z],data(){return{mqttTopics:[{topic:"openWB/system/boot_done",writeable:!1},{topic:"openWB/system/update_in_progress",writeable:!1}],disconnectedTimeout:null}},computed:{title(){return this.bootInProgress||this.updateInProgress?"openWB ist noch nicht bereit":this.mqttClientDisconnected?"Verbindung zur openWB verloren":this.reloadRequired?"Die Seite muss neu geladen werden":"???"},myButtons(){return!(this.bootInProgress||this.updateInProgress||this.mqttClientDisconnected)&&this.reloadRequired?[{text:"Jetzt neu laden",subtype:"success",event:"reload"}]:[]},mqttClientDisconnected(){return!this.$root.$data.connected},bootInProgress(){return this.$store.state.mqtt["openWB/system/boot_done"]==null?!0:!this.$store.state.mqtt["openWB/system/boot_done"]},updateInProgress(){return this.$store.state.mqtt["openWB/system/update_in_progress"]==null?!1:this.$store.state.mqtt["openWB/system/update_in_progress"]},reloadRequired(){return this.$store.state.local.reloadRequired},showModalBlocker(){return this.$store.state.local.modalBlockerVisible},modalType(){return this.mqttClientDisconnected&&!(this.bootInProgress||this.updateInProgress)?"danger":"dark"}},watch:{mqttClientDisconnected(e){e===!0?this.disconnectedTimeout=window.setTimeout(()=>{this.mqttClientDisconnected&&this.updateLocalStore()},2e3):(this.disconnectedTimeout&&(clearTimeout(this.disconnectedTimeout),this.disconnectedTimeout=null),this.updateLocalStore())},bootInProgress(e){e===!0&&this.updateInProgress===!0&&this.$store.commit("storeLocal",{name:"reloadRequired",value:!0}),this.updateLocalStore()},updateInProgress(e){e===!1&&this.bootInProgress===!1&&this.$store.commit("storeLocal",{name:"reloadRequired",value:!1}),this.updateLocalStore()}},methods:{updateLocalStore(){this.$store.commit("storeLocal",{name:"modalBlockerVisible",value:this.bootInProgress||this.updateInProgress||this.reloadRequired||this.mqttClientDisconnected})},handleModalResult(e){e=="reload"?location.reload():console.warn("unknown event",e)}}},Ui={class:"openwb-blocker"},Fi={key:0},Hi={key:1},Ki={key:2},Gi={key:3},Zi={key:4};function Ji(e,t,s,d,o,n){const a=g("openwb-base-modal-dialog");return i(),c("div",Ui,[b(a,{show:n.showModalBlocker,title:n.title,subtype:n.modalType,"prevent-close":!0,buttons:n.myButtons,onModalResult:t[0]||(t[0]=p=>n.handleModalResult(p))},{default:m(()=>[n.bootInProgress?(i(),c("p",Fi,"Der Systemstart ist noch nicht abgeschlossen.")):n.updateInProgress?(i(),c("p",Hi,"Es wird eine Systemaktualisierung ausgeführt.")):n.mqttClientDisconnected?(i(),c("p",Ki,[...t[1]||(t[1]=[h(" Die Verbindung zur openWB wurde unterbrochen.",-1),l("br",null,null,-1),h(" Es wird versucht, die Verbindung wieder herzustellen... ",-1)])])):n.reloadRequired?(i(),c("p",Gi,"Bitte die Seite neu laden.")):(i(),c("p",Zi,"Bitte warten..."))]),_:1},8,["show","title","subtype","buttons"])])}const Qi=C(Ni,[["render",Ji],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/OpenwbPageBlocker.vue"]]),Yi={name:"OpenwbSettingsApp",components:{NavBar:vi,PageFooter:Si,UserInfo:Pi,MqttConnectionState:Ei,Messages:zi,Blocker:Qi},data(){return{client:null,connected:!1,reconnecting:!1,reconnectAttempts:0,reconnectBackoff:2e3,maxReconnectBackoff:2e4,connection:{protocol:location.protocol=="https:"?"wss":"ws",protocolVersion:5,host:location.hostname,port:parseInt(location.port)||(location.protocol=="https:"?443:80),path:"/ws",connectTimeout:4e3,reconnectPeriod:0,resubscribe:!0,properties:{requestResponseInformation:!0,requestProblemInformation:!0}},dataTimeout:null}},computed:{mqttClientId(){try{return this.client.options.clientId}catch(e){console.error("mqttClientId error",e);return}},topicList(){return Object.keys(this.$store.state.mqtt)},nodeEnv(){return"development"}},created(){this.createConnection()},methods:{async saveValues(e=void 0){function t(d){return new Promise(o=>setTimeout(o,d))}function s(d){return d.includes("#")||d.includes("+")}this.$store.commit("storeLocal",{name:"savingData",value:!0});try{let d={};if(e===void 0){console.error("no topics to save defined!");return}if(Array.isArray(e))e.forEach(o=>{if(s(o)){console.debug("expanding wildcard topic:",o);const n=this.getWildcardTopics(o);Object.entries(n).forEach(([a,p])=>{console.debug("adding topic to save:",a),d[a]=p})}else console.debug("adding topic to save:",o),d[o]=this.$store.state.mqtt[o]});else{console.error("expected array, got ",typeof e);return}for(const[o,n]of Object.entries(d)){if(o.startsWith("$CONTROL")){console.debug("skipping control topic:",o);continue}let a=o.replace("openWB/","openWB/set/");console.debug("saving data:",a,n),this.doPublish(a,n),await t(50)}}finally{this.$store.commit("storeLocal",{name:"savingData",value:!1})}},resetValues(e=this.topicList){console.debug("resetting values..."),console.debug("topics: ",e),this.doUnsubscribe(e),this.doSubscribe(e)},setDefaultValues(){console.debug("setting default values... (ToDo)")},sendCommand(e){console.debug("sendCommand:",e),this.doPublish(`openWB/set/command/${this.client.options.clientId}/todo/${e.command}`,e,!1)},createConnection(){if(this.client){console.debug("MQTT client already exists, skipping createConnection.");return}const{protocol:e,host:t,port:s,path:d,...o}=this.connection,n=`${e}://${t}:${s}${d}`;let[a,p]=this.$cookies.get("mqtt")?.match(/^([^:]+):(.+)$/)?.slice(1)||[null,null];a&&p||console.debug("Anonymous mqtt connection (no cookie set)"),(this.nodeEnv!=="production"||e=="wss")&&a&&p&&(console.debug(`Using mqtt credentials from cookie: "${a}" / "${p.charAt(0)}..."`),o.username=a,o.password=p,a==="admin"&&p==="openwb"&&(console.warn("Using default mqtt credentials! This is insecure and not recommended for production systems."),this.reconnecting||this.postClientMessage("Warnung: Es werden die Standard-Zugangsdaten für MQTT verwendet! Dies ist unsicher und wird für Produktivsysteme nicht empfohlen.","warning"))),console.debug("connecting to broker:",n),this.client=J.connect(n,o),this.client.on("connect",()=>{this.connected=!0,this.reconnectAttempts=0,this.reconnectBackoff=2e3,this.reconnecting=!1,console.debug("Connection succeeded! ClientId: ",this.client.options.clientId),a&&(this.postClientMessage(`Angemeldet als "${a}".`,"success"),this.$store.commit("storeLocal",{name:"username",value:a})),this.dataTimeout=setTimeout(()=>{console.warn("No data received after 5 seconds, connection might not be working. Removing mqtt cookie and trying again with anonymous connection."),a&&(this.$cookies.remove("mqtt"),this.reconnectMqttClient())},5e3),this.doSubscribe(["openWB/system/boot_done","openWB/system/dataprotection_acknowledged","openWB/system/usage_terms_acknowledged","openWB/system/installAssistantDone","openWB/system/security/access/+"],!0)}),this.client.on("error",r=>{this.connected=!1,console.error("Connection failed",r),r instanceof J.ErrorWithReasonCode&&console.error("Reason code:",r.code),[135,137].includes(r.code)&&a!=null?(this.$cookies.remove("mqtt"),this.$store.commit("storeLocal",{name:"username",value:null}),this.postClientMessage("Fehler: Anmeldung fehlgeschlagen. Bitte überprüfen Sie die Zugangsdaten und melden Sie sich erneut an.","danger"),window.setTimeout(()=>{location.reload()},1e3)):this.reconnectMqttClient()}),this.client.on("message",(r,v)=>{if(this.dataTimeout&&(clearTimeout(this.dataTimeout),this.dataTimeout=null),v.toString().length>0){let k;try{k=JSON.parse(v.toString())}catch(y){console.debug("Json parsing failed, fallback to string: ",r,y),k=v.toString()}this.$store.commit("updateTopic",{topic:r,payload:k})}else this.$store.commit("removeTopic",r)}),this.client.on("end",()=>{this.connected=!1,console.error("mqtt connection ended")}),this.client.on("close",()=>{this.connected=!1,console.error("mqtt connection closed"),this.reconnectMqttClient()}),this.client.on("offline",()=>{this.connected=!1,console.error("mqtt connection offline"),this.reconnectMqttClient()}),this.client.on("disconnect",()=>{this.connected=!1,console.error("mqtt connection disconnected"),this.reconnectMqttClient()}),this.client.on("reconnect",()=>{console.error("mqtt connection reconnecting...")})},endConnection(e=!0){if(this.client){console.warn("Ending mqtt connection...");try{this.client.end(e)}catch(t){console.error("Error while ending client",t)}this.connected=!1,this.$store.commit("storeLocal",{name:"username",value:null}),this.dataTimeout&&(clearTimeout(this.dataTimeout),this.dataTimeout=null),this.client=null}else console.error("No mqtt connection to end.")},reconnectMqttClient(){if(this.reconnecting){console.debug("Reconnect already in progress, skipping.");return}this.reconnecting=!0,this.endConnection();const e=Math.min(this.reconnectBackoff*this.reconnectAttempts,this.maxReconnectBackoff);console.warn(`Reconnect attempt #${this.reconnectAttempts+1} in ${e/1e3}s ...`),setTimeout(()=>{this.createConnection(),this.reconnectAttempts++,this.reconnecting=!1},e)},doSubscribe(e,t=!1){e.forEach(s=>{let d=!1;this.$store.commit("addSubscription",s),this.$store.getters.subscriptionCount(s)===1?(s.includes("#")||s.includes("+")?console.debug("skipping init of wildcard topic:",s):this.$store.commit("addTopic",{topic:s,payload:void 0}),d=!0):(console.debug("Already subscribed to topic: ",s),t&&(console.debug("Force subscribing to topic: ",s),d=!0)),d&&(console.debug("Subscribing to topic: ",s),this.client.subscribe(s,{},o=>{if(o){this.postClientMessage(`Daten konnten nicht abonniert werden.
Topic: ${s}
${o}`,"danger"),this.$store.commit("removeSubscription",s);return}}))})},doUnsubscribe(e){e.forEach(t=>{this.$store.commit("removeSubscription",t),this.$store.getters.subscriptionCount(t)==0?(this.client.unsubscribe(t,s=>{s&&(console.error("Unsubscribe error",s),this.postClientMessage(`Daten konnten nicht abbestellt werden.
Topic: ${t}
${s}`,"danger"))}),t.includes("#")||t.includes("+")?(console.debug("expanding wildcard topic:",t),Object.keys(this.getWildcardTopics(t)).forEach(s=>{console.debug("removing wildcardTopic:",s),this.$store.commit("removeTopic",s)})):(console.debug("removing topic:",t),this.$store.commit("removeTopic",t))):console.debug("Still subscribed to topic: ",t)})},doPublish(e,t,s=!0,d=2){let o={qos:d,retain:s};this.client.publish(e,JSON.stringify(t),o,n=>{n&&(console.error("Publish error",n),this.postClientMessage(`Daten konnten nicht geschrieben werden.
Topic: ${e}
${n}`,"danger"))})},postClientMessage(e,t="secondary"){console.debug("postMessage:",e,t);const s=Date.now();this.$store.commit({type:"addClientMessage",timestamp:s,payload:{message:e,type:t,source:"client",timestamp:Math.floor(s/1e3)}})},getWildcardTopics(e,t=!1){let s=e;return t||(s="^"+e.replaceAll("/","\\/").replaceAll("+","[^+/]+").replaceAll("#","[^#/]+")+"$"),Object.keys(this.$store.state.mqtt).filter(d=>d.match(s)).reduce((d,o)=>({...d,[o]:this.$store.state.mqtt[o]}),{})}}},Xi={role:"main",class:"container"},ea={id:"content"};function ta(e,t,s,d,o,n){const a=g("nav-bar"),p=g("router-view"),r=g("page-footer"),v=g("mqtt-connection-state"),k=g("user-info"),y=g("messages"),I=g("blocker");return i(),c(M,null,[l("header",null,[b(a)]),l("div",Xi,[l("div",ea,[l("h1",null,w(e.$route.meta.heading),1),b(p,{onSave:n.saveValues,onReset:n.resetValues,onDefaults:n.setDefaultValues,onSendCommand:n.sendCommand},null,8,["onSave","onReset","onDefaults","onSendCommand"])])]),b(r),b(v,{connected:o.connected},null,8,["connected"]),b(k,{onSendCommand:n.sendCommand},null,8,["onSendCommand"]),b(y),b(I)],64)}const sa=C(Yi,[["render",ta],["__file","/opt/openWB-dev/openwb-ui-settings/src/App.vue"]]),na="modulepreload",oa=function(e){return"/openWB/web/settings/"+e},ee={},B=function(t,s,d){let o=Promise.resolve();if(s&&s.length>0){let r=function(v){return Promise.all(v.map(k=>Promise.resolve(k).then(y=>({status:"fulfilled",value:y}),y=>({status:"rejected",reason:y}))))};document.getElementsByTagName("link");const a=document.querySelector("meta[property=csp-nonce]"),p=a?.nonce||a?.getAttribute("nonce");o=r(s.map(v=>{if(v=oa(v),v in ee)return;ee[v]=!0;const k=v.endsWith(".css"),y=k?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${v}"]${y}`))return;const I=document.createElement("link");if(I.rel=k?"stylesheet":na,k||(I.as="script"),I.crossOrigin="",I.href=v,p&&I.setAttribute("nonce",p),document.head.appendChild(I),k)return new Promise((ce,pe)=>{I.addEventListener("load",ce),I.addEventListener("error",()=>pe(new Error(`Unable to preload CSS for ${v}`)))})}))}function n(a){const p=new Event("vite:preloadError",{cancelable:!0});if(p.payload=a,window.dispatchEvent(p),!p.defaultPrevented)throw a}return o.then(a=>{for(const p of a||[])p.status==="rejected"&&n(p.reason);return t().catch(n)})},ia={namespaced:!0,state:()=>({hiddenDatasets:[]}),mutations:{toggleDataset(e,t){e.hiddenDatasets.includes(t)?e.hiddenDatasets=e.hiddenDatasets.filter(s=>s!==t):e.hiddenDatasets.push(t)},setHiddenDatasets(e,t){e.hiddenDatasets=t}}};let de={mqtt:{},mqttSubscriptions:{},local:{modalBlockerVisible:!1,reloadRequired:!1,savingData:!1,preventSavingModal:!1,username:null}};de.examples={text1:"Text...",text2:"mail@domain.com",text3:"openwb.local",text4:"http://www.openwb.de",text5:"Benutzername",text6:"12:34",text7:"2021-10-31",text8:"Text mit Add-Button",color1:"#ff0000",color2:"#0000ff",number1:5,number2:10,number3:28e-5,password1:"GeHeiM!",textarea1:"Langer Text...",range1:6,range2:10,select1:1,select2:void 0,buttonGroup1:1,checkbox1:!0,json1:{text:"Text",number:123},hierarchy1:[{id:0,type:"counter",children:[{id:3,type:"inverter",children:[]},{id:4,type:"bat",children:[]},{id:1,type:"cp",children:[]},{id:2,type:"cp",children:[]}]}],hierarchy1Labels:{0:"EVU",1:"Ladepunkt 1",2:"Ladepunkt 2",3:"Wechselrichter",4:"Batteriespeicher"},tags:["1234","2345","3456"],ioConfig:{active:!1,pattern:[null,!1,!0],action:{value:"stop_all",options:null}}};const R=Ce({state:de,mutations:{storeLocal(e,t){e.local[t.name]=t.value},addTopic(e,t){Object.keys(e.mqtt).includes(t.topic)?console.warn("topic already exists: ",t.topic):e.mqtt[t.topic]=t.payload},removeTopic(e,t){delete e.mqtt[t]},updateTopic(e,t){const s=(d,o,n)=>o.split(".").reduce((a,p,r)=>a[p]=o.split(".").length===r+1?n:a[p]||{},d);t.topic in e.mqtt||!(t.topic in e.examples)?t.objectPath!=null?s(e.mqtt[t.topic],t.objectPath,t.payload):e.mqtt[t.topic]=t.payload:(console.debug("topic not found in state.mqtt: ",t.topic),t.topic in e.examples?t.objectPath!=null?s(e.examples[t.topic],t.objectPath,t.payload):e.examples[t.topic]=t.payload:console.warn("topic not found in state: ",t.topic," giving up"))},addClientMessage(e,t){e.local.messages||(e.local.messages={}),e.local.messages[t.timestamp]=t.payload},removeClientMessage(e,t){e.local.messages&&t in e.local.messages&&delete e.local.messages[t]},addSubscription(e,t){t in e.mqttSubscriptions?e.mqttSubscriptions[t]+=1:e.mqttSubscriptions[t]=1,console.debug("subscription count: ",t,e.mqttSubscriptions[t])},removeSubscription(e,t){t in e.mqttSubscriptions&&(e.mqttSubscriptions[t]-=1,e.mqttSubscriptions[t]<=0&&delete e.mqttSubscriptions[t])}},actions:{},modules:{chartLegend:ia},getters:{usageTermsAcknowledged(e){return new Promise(t=>{if(e.mqtt["openWB/system/usage_terms_acknowledged"]!==void 0)t(e.mqtt["openWB/system/usage_terms_acknowledged"]);else{var s,d;s=setTimeout(()=>{clearInterval(d),t(!1)},5e3),d=setInterval(()=>{e.mqtt["openWB/system/usage_terms_acknowledged"]!==void 0&&(clearTimeout(s),clearInterval(d),t(e.mqtt["openWB/system/usage_terms_acknowledged"]))},100)}})},installAssistantDone(e){return new Promise(t=>{if(e.mqtt["openWB/system/installAssistantDone"]!==void 0)t(e.mqtt["openWB/system/installAssistantDone"]);else{var s,d;s=setTimeout(()=>{clearInterval(d),t(!1)},5e3),d=setInterval(()=>{e.mqtt["openWB/system/installAssistantDone"]!==void 0&&(clearTimeout(s),clearInterval(d),t(e.mqtt["openWB/system/installAssistantDone"]))},100)}})},accessAllowed(e){return t=>new Promise(s=>{const d=`openWB/system/security/access/${t}`;if(e.mqtt[d]!==void 0)s(e.mqtt[d]);else{var o,n;o=setTimeout(()=>{clearInterval(n),s(!1)},5e3),n=setInterval(()=>{e.mqtt[d]!==void 0&&(clearTimeout(o),clearInterval(n),s(e.mqtt[d]))},100)}})},subscriptionCount:e=>t=>e.mqttSubscriptions[t]||0}}),ue=[{path:"/",redirect:"/GeneralConfiguration"},{path:"/Status",name:"Status",meta:{heading:"Status",checkPermissions:!0},component:()=>B(()=>import("./Status-DadyXc3Z.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10]))},{path:"/Logging/ChargeLog",name:"ChargeLog",meta:{heading:"Auswertungen - Ladeprotokoll",checkPermissions:!0},component:()=>B(()=>import("./ChargeLog-CcQqZ_vX.js"),__vite__mapDeps([11,1,2,3,6,7,8,9,12]))},{path:"/Logging/Chart/:chartRange?/:initialDate?",name:"Chart",meta:{heading:"Auswertungen - Diagramme",checkPermissions:!0},component:()=>B(()=>import("./Chart-BieonKyw.js"),__vite__mapDeps([13,1,2,3,4,5,6,7,8,9,14]))},{path:"/GeneralConfiguration",name:"GeneralConfiguration",meta:{heading:"Einstellungen - Allgemein",checkPermissions:!0},component:()=>B(()=>import("./GeneralConfiguration-D0B_yW_W.js").then(e=>e.a),__vite__mapDeps([15,1,2,3,16,17]))},{path:"/IdentificationConfiguration",name:"IdentificationConfiguration",meta:{heading:"Einstellungen - Identifikation",checkPermissions:!0},component:()=>B(()=>import("./IdentificationConfiguration-BYqaURSL.js"),__vite__mapDeps([18,1,2,3,16,6,7,8,9]))},{path:"/DisplayConfiguration",name:"DisplayConfiguration",meta:{heading:"Einstellungen - Display",checkPermissions:!0},component:()=>B(()=>import("./DisplayConfiguration-CqMq051X.js").then(e=>e.a),__vite__mapDeps([19,17,1,2,3]))},{path:"/GeneralChargeConfiguration",name:"GeneralChargeConfiguration",meta:{heading:"Ladeeinstellungen - Übergreifendes",checkPermissions:!0},component:()=>B(()=>import("./GeneralChargeConfiguration-Bukx6MR1.js").then(e=>e.a),__vite__mapDeps([20,17,1,2,3]))},{path:"/SurplusChargeConfiguration",name:"SurplusChargeConfiguration",meta:{heading:"Ladeeinstellungen - Überschuss-Laden",checkPermissions:!0},component:()=>B(()=>import("./SurplusChargeConfiguration-D6tHbDfg.js"),__vite__mapDeps([21,16,2,3,1,6,7,8,9]))},{path:"/ActiveBatControlConfiguration",name:"ActiveBatControlConfiguration",meta:{heading:"Ladeeinstellungen - Speichersteuerung",checkPermissions:!0},component:()=>B(()=>import("./ActiveBatControlConfiguration-BVUZdovw.js"),__vite__mapDeps([22,1,2,3,6,7,8,9]))},{path:"/HardwareInstallation",name:"HardwareInstallation",meta:{heading:"Konfiguration - Geräte und Komponenten",checkPermissions:!0},component:()=>B(()=>import("./HardwareInstallation-M-k9qNJb.js").then(e=>e.a),__vite__mapDeps([23,1,2,3,17,24]))},{path:"/LoadManagementConfiguration",name:"LoadManagementConfiguration",meta:{heading:"Konfiguration - Lastmanagement",checkPermissions:!0},component:()=>B(()=>import("./LoadManagementConfiguration-Rty2qCw0.js"),__vite__mapDeps([25,1,2,3,16,26,27,6,7,8,9]))},{path:"/ChargePointInstallation",name:"ChargePointInstallation",meta:{heading:"Konfiguration - Ladepunkte",checkPermissions:!0},component:()=>B(()=>import("./ChargePointInstallation-CmmRvfWj.js").then(e=>e.c),__vite__mapDeps([28,1,2,3,16,17,29]))},{path:"/VehicleConfiguration/:section?/:section_index?/:section_part?/:action?",name:"VehicleConfiguration",meta:{heading:"Konfiguration - Fahrzeuge",checkPermissions:!0},component:()=>B(()=>import("./VehicleConfiguration-848lVEbG.js").then(e=>e.b),__vite__mapDeps([30,1,2,3,17]))},{path:"/ConsumerConfiguration",name:"ConsumerConfiguration",meta:{heading:"Konfiguration - Verbraucher"},component:()=>B(()=>import("./ConsumerConfig-CDodeLc0.js").then(e=>e.a),__vite__mapDeps([31,1,2,3,17]))},{path:"/IoConfiguration",name:"IoConfiguration",meta:{heading:"Konfiguration - Ein- und Ausgänge",checkPermissions:!0},component:()=>B(()=>import("./IoConfiguration-DWzY_z-Z.js").then(e=>e.b),__vite__mapDeps([32,1,2,3,17]))},{path:"/System/CloudConfiguration",name:"CloudConfiguration",meta:{heading:"System - openWB Cloud",checkPermissions:!0},component:()=>B(()=>import("./CloudConfiguration-ByKE05Ar.js"),__vite__mapDeps([33,1,2,3,6,7,8,9]))},{path:"/System/MqttBridgeConfiguration",name:"MqttBridgeConfiguration",meta:{heading:"System - MQTT-Brücken",checkPermissions:!0},component:()=>B(()=>import("./MqttBridgeConfiguration-CQOhLDHm.js"),__vite__mapDeps([34,1,2,3,6,7,8,9]))},{path:"/System/DebugConfiguration",name:"DebugConfiguration",meta:{heading:"System - Fehlersuche",checkPermissions:!0},component:()=>B(()=>import("./DebugConfiguration-Bn9Ihz1V.js"),__vite__mapDeps([35,1,2,3,9,6,7,8,36]))},{path:"/System/Support",name:"Support",meta:{heading:"System - Support",checkPermissions:!0},component:()=>B(()=>import("./Support-BL8bu-Sw.js"),__vite__mapDeps([37,1,2,3,6,7,8,9]))},{path:"/System/LegalSettings",name:"LegalSettings",meta:{heading:"System - Rechtliches",checkPermissions:!0},component:()=>B(()=>import("./LegalSettings-B0CerJ1j.js"),__vite__mapDeps([38,1,2,3,6,7,8,9]))},{path:"/System/SystemConfiguration",name:"SystemConfiguration",meta:{heading:"System - System",checkPermissions:!0},component:()=>B(()=>import("./SystemConfiguration-DJZWiSkw.js"),__vite__mapDeps([39,1,2,3,6,7,8,9,40]))},{path:"/System/SecurityConfiguration",name:"SecurityConfiguration",meta:{heading:"System - Sicherheit",checkPermissions:!0},component:()=>B(()=>import("./SecurityConfiguration-DvVm9CBI.js"),__vite__mapDeps([41,1,2,3,6,7,8,9]))},{path:"/System/DataManagement",name:"DataManagement",meta:{heading:"System - Datenverwaltung",checkPermissions:!0},component:()=>B(()=>import("./DataManagement-CnuBQnBT.js").then(e=>e.a),__vite__mapDeps([42,1,2,3,16,17]))},{path:"/System/InstallAssistant",name:"InstallAssistant",meta:{heading:"System - Einrichtungsassistent",checkPermissions:!0},component:()=>B(()=>import("./InstallAssistant-ght3LRFR.js"),__vite__mapDeps([43,17,2,3,1,6,7,8,9]))},{path:"/System/Abrechnung",name:"TenantEnergyConfiguration",meta:{heading:"Abrechnung - Mieterstrom",checkPermissions:!0},component:()=>B(()=>import("./TenantEnergyBilling-D7pVN5MV.js"),__vite__mapDeps([44,9,2,3,1,6,7,8,45]))},{path:"/Error",name:"Error",meta:{heading:"Fehler",checkPermissions:!1},component:()=>B(()=>import("./Error-DFtWFT2X.js"),__vite__mapDeps([46,2,3]))}];ue.push({path:"/TestingStore",name:"VUEX Store",meta:{heading:"Beispiele - VUEX Store",checkPermissions:!1},component:()=>B(()=>import("./TestingStore-2DRxZG6Y.js"),__vite__mapDeps([47,26,2,3,1,27,6,7,8,9]))});const H=Se({history:Be(),routes:ue});let W=!1;H.beforeEach(async e=>{const t=async n=>{if(n.meta.checkPermissions===!0){const a=await R.getters.accessAllowed(n.name);if(console.debug("access check for",n.name,"->",a),W)return console.debug("route already handled, cancel further processing"),!1;if(!a)return console.warn("no permission to access",n.name),R.state.local.username?{name:"Error"}:(console.debug("not logged in, cancel navigation to",n.name),W=!0,!1)}return!0};if(W=!1,!await R.getters.usageTermsAcknowledged)return e.name!=="LegalSettings"?(console.log("usage terms not acknowledged, redirect to legal settings"),{name:"LegalSettings"}):(console.log("usage terms not acknowledged, but already on legal settings, continue"),await t(e));if(!await R.getters.installAssistantDone)return e.name!=="InstallAssistant"?(console.log("install assistant not done, redirect to install assistant"),{name:"InstallAssistant"}):(console.log("install assistant not done, but already on install assistant, continue"),await t(e));const o=await t(e);return W=!0,o});H.afterEach(e=>{e.meta.heading?document.title="openWB | "+e.meta.heading:document.title="openWB"});const K=Ae(sa);K.use(R).use(H).use(ft,gt).use(Ie,{expire:"30d",path:"/",domain:"",secure:!0,sameSite:"Lax"});const aa=Object.assign({"./components/OpenwbBaseAlert.vue":vt,"./components/OpenwbBaseArrayInput.vue":jt,"./components/OpenwbBaseAvatar.vue":Ht,"./components/OpenwbBaseButtonGroupInput.vue":ns,"./components/OpenwbBaseButtonInput.vue":us,"./components/OpenwbBaseButtonRow.vue":Yt,"./components/OpenwbBaseCard.vue":ws,"./components/OpenwbBaseCheckboxInput.vue":Is,"./components/OpenwbBaseClickButton.vue":as,"./components/OpenwbBaseColorPicker.vue":Vs,"./components/OpenwbBaseCopyToClipboard.vue":js,"./components/OpenwbBaseHeading.vue":Zs,"./components/OpenwbBaseIoPattern.vue":Xs,"./components/OpenwbBaseModalDialog.vue":rn,"./components/OpenwbBaseNumberInput.vue":yn,"./components/OpenwbBaseRangeInput.vue":$n,"./components/OpenwbBaseSelectInput.vue":Un,"./components/OpenwbBaseSettingElement.vue":Bt,"./components/OpenwbBaseSubmitButtons.vue":to,"./components/OpenwbBaseTextInput.vue":Ao,"./components/OpenwbBaseTextarea.vue":xo,"./components/OpenwbBaseToast.vue":Fo,"./components/OpenwbBaseTooltip.vue":Jo});Object.entries(aa).forEach(([e,t])=>{const s=Oe(Te(e.split("/").pop().replace(/\.\w+$/,"")));K.component(s,t.default)});K.mount("#app");export{z as C,D as O,B as _}; diff --git a/web/settings/assets/inverter-Ddz53W4s.js b/web/settings/assets/inverter-80yGCcKd.js similarity index 94% rename from web/settings/assets/inverter-Ddz53W4s.js rename to web/settings/assets/inverter-80yGCcKd.js index 39a6707cae..1dfe278918 100644 --- a/web/settings/assets/inverter-Ddz53W4s.js +++ b/web/settings/assets/inverter-80yGCcKd.js @@ -1 +1 @@ -import{C as m}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as f,m as t,l as s,f as g,q as d,u as i,B as o,z as w,y as a,J as _,x as h}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const b={name:"DeviceFroniusInverter",mixins:[m],computed:{isSecondary(){const n=this.component.configuration.secondary_id;return n!=null},powerFlowUrl(){return`http://${this.device.configuration.ip_address}/solar_api/v1/GetPowerFlowRealtimeData.fcgi?Scope=System`}},methods:{toggleSecondary(n){this.updateConfiguration(n?1:null,"configuration.secondary_id")}}},v={class:"device-fronius-inverter"},k=["href"];function y(n,e,D,S,C,r){const l=t("openwb-base-heading"),u=t("openwb-base-checkbox-input"),p=t("openwb-base-number-input");return s(),g("div",v,[d(l,null,{default:i(()=>[...e[1]||(e[1]=[o(" Einstellungen für Fronius Wechselrichter ",-1)])]),_:1}),d(u,{title:"Sekundärer Wechselrichter","model-value":r.isSecondary,"onUpdate:modelValue":r.toggleSecondary},{help:i(()=>[...e[2]||(e[2]=[o(' Aktivieren, wenn dieser Wechselrichter nicht direkt als primärer Wechselrichter ausgelesen wird, sondern als sekundärer/companion Wechselrichter über die "SecondaryMeters" der PowerFlow-Antwort erfasst wird (z.B. bei mehreren per Fronius Solar Net / DATCOM verbundenen Wechselrichtern). ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),r.isSecondary?(s(),w(p,{key:0,title:"ID","model-value":n.component.configuration.secondary_id,min:"0",required:"","onUpdate:modelValue":e[0]||(e[0]=c=>n.updateConfiguration(c,"configuration.secondary_id"))},{help:i(()=>[e[3]||(e[3]=o(" Die ID des sekundären Wechselrichters. Diese ist für jede Installation individuell und muss ermittelt werden. Dafür kann der folgende Link verwendet werden. Die ID kann den zurückgegebenen JSON entnommen werden. ",-1)),a("a",{href:r.powerFlowUrl,target:"_blank",rel:"noopener noreferrer"},_(r.powerFlowUrl),9,k),e[4]||(e[4]=a("br",null,null,-1)),e[5]||(e[5]=o(' Im Abschnitt "Body" -> "Data" -> "SecondaryMeters" werden die installierten Zähler angezeigt. Die ID ist die Zahl vor dem Doppelpunkt und den zugehörigen Daten. ',-1))]),_:1},8,["model-value"])):h("",!0)])}const A=f(b,[["render",y],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fronius/fronius_http_api/inverter.vue"]]);export{A as default}; +import{C as m}from"./HardwareInstallation-M-k9qNJb.js";import{_ as f,m as t,l as s,f as g,q as d,u as i,B as o,z as w,y as a,J as _,x as h}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const b={name:"DeviceFroniusInverter",mixins:[m],computed:{isSecondary(){const n=this.component.configuration.secondary_id;return n!=null},powerFlowUrl(){return`http://${this.device.configuration.ip_address}/solar_api/v1/GetPowerFlowRealtimeData.fcgi?Scope=System`}},methods:{toggleSecondary(n){this.updateConfiguration(n?1:null,"configuration.secondary_id")}}},v={class:"device-fronius-inverter"},k=["href"];function y(n,e,D,S,C,r){const l=t("openwb-base-heading"),u=t("openwb-base-checkbox-input"),p=t("openwb-base-number-input");return s(),g("div",v,[d(l,null,{default:i(()=>[...e[1]||(e[1]=[o(" Einstellungen für Fronius Wechselrichter ",-1)])]),_:1}),d(u,{title:"Sekundärer Wechselrichter","model-value":r.isSecondary,"onUpdate:modelValue":r.toggleSecondary},{help:i(()=>[...e[2]||(e[2]=[o(' Aktivieren, wenn dieser Wechselrichter nicht direkt als primärer Wechselrichter ausgelesen wird, sondern als sekundärer/companion Wechselrichter über die "SecondaryMeters" der PowerFlow-Antwort erfasst wird (z.B. bei mehreren per Fronius Solar Net / DATCOM verbundenen Wechselrichtern). ',-1)])]),_:1},8,["model-value","onUpdate:modelValue"]),r.isSecondary?(s(),w(p,{key:0,title:"ID","model-value":n.component.configuration.secondary_id,min:"0",required:"","onUpdate:modelValue":e[0]||(e[0]=c=>n.updateConfiguration(c,"configuration.secondary_id"))},{help:i(()=>[e[3]||(e[3]=o(" Die ID des sekundären Wechselrichters. Diese ist für jede Installation individuell und muss ermittelt werden. Dafür kann der folgende Link verwendet werden. Die ID kann den zurückgegebenen JSON entnommen werden. ",-1)),a("a",{href:r.powerFlowUrl,target:"_blank",rel:"noopener noreferrer"},_(r.powerFlowUrl),9,k),e[4]||(e[4]=a("br",null,null,-1)),e[5]||(e[5]=o(' Im Abschnitt "Body" -> "Data" -> "SecondaryMeters" werden die installierten Zähler angezeigt. Die ID ist die Zahl vor dem Doppelpunkt und den zugehörigen Daten. ',-1))]),_:1},8,["model-value"])):h("",!0)])}const A=f(b,[["render",y],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fronius/fronius_http_api/inverter.vue"]]);export{A as default}; diff --git a/web/settings/assets/inverter-y4sIEMSG.js b/web/settings/assets/inverter-8glg04uQ.js similarity index 91% rename from web/settings/assets/inverter-y4sIEMSG.js rename to web/settings/assets/inverter-8glg04uQ.js index 8f72b82f53..ee5ebb84b7 100644 --- a/web/settings/assets/inverter-y4sIEMSG.js +++ b/web/settings/assets/inverter-8glg04uQ.js @@ -1 +1 @@ -import{C as s}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as a,m as t,l as u,f as m,q as i,u as d,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const v={name:"DeviceOpenwbFlexInverter",mixins:[s]},b={class:"device-openwb-flex-inverter"};function f(o,e,_,w,x,g){const r=t("openwb-base-heading"),l=t("openwb-base-select-input"),p=t("openwb-base-number-input");return u(),m("div",b,[i(r,null,{default:d(()=>[...e[2]||(e[2]=[c(" Einstellungen für openWB-Flex Wechselrichter ",-1)])]),_:1}),i(l,{title:"Zählermodell","not-selected":"Bitte auswählen",options:[{value:0,text:"MPM3PM"},{value:1,text:"Lovato"},{value:2,text:"SDM630/SDM72D-M"},{value:3,text:"SDM120"}],"model-value":o.component.configuration.version,required:"","onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.version"))},null,8,["model-value"]),i(p,{title:"Modbus-ID",required:"",min:1,max:255,"model-value":o.component.configuration.id,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.id"))},null,8,["model-value"])])}const W=a(v,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/openwb/openwb_flex/inverter.vue"]]);export{W as default}; +import{C as s}from"./HardwareInstallation-M-k9qNJb.js";import{_ as a,m as t,l as u,f as m,q as i,u as d,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const v={name:"DeviceOpenwbFlexInverter",mixins:[s]},b={class:"device-openwb-flex-inverter"};function f(o,e,_,w,x,g){const r=t("openwb-base-heading"),l=t("openwb-base-select-input"),p=t("openwb-base-number-input");return u(),m("div",b,[i(r,null,{default:d(()=>[...e[2]||(e[2]=[c(" Einstellungen für openWB-Flex Wechselrichter ",-1)])]),_:1}),i(l,{title:"Zählermodell","not-selected":"Bitte auswählen",options:[{value:0,text:"MPM3PM"},{value:1,text:"Lovato"},{value:2,text:"SDM630/SDM72D-M"},{value:3,text:"SDM120"}],"model-value":o.component.configuration.version,required:"","onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.version"))},null,8,["model-value"]),i(p,{title:"Modbus-ID",required:"",min:1,max:255,"model-value":o.component.configuration.id,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.id"))},null,8,["model-value"])])}const W=a(v,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/openwb/openwb_flex/inverter.vue"]]);export{W as default}; diff --git a/web/settings/assets/inverter-EScnj--j.js b/web/settings/assets/inverter-BD6-8GhL.js similarity index 88% rename from web/settings/assets/inverter-EScnj--j.js rename to web/settings/assets/inverter-BD6-8GhL.js index 53bfee9df0..2cf01b4ad4 100644 --- a/web/settings/assets/inverter-EScnj--j.js +++ b/web/settings/assets/inverter-BD6-8GhL.js @@ -1 +1 @@ -import{C as m}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as d,m as o,l as u,f as l,q as t,u as i,B as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceEnphaseInverter",mixins:[m]},f={class:"device-enphase-inverter"};function _(n,e,v,b,g,h){const s=o("openwb-base-heading"),p=o("openwb-base-number-input");return u(),l("div",f,[t(s,null,{default:i(()=>[...e[1]||(e[1]=[r(" Einstellungen für Enphase Envoy / IQ Gateway Wechselrichter ",-1)])]),_:1}),t(p,{title:"EID",required:"","model-value":n.component.configuration.eid,"onUpdate:modelValue":e[0]||(e[0]=a=>n.updateConfiguration(a,"configuration.eid"))},{help:i(()=>[...e[2]||(e[2]=[r(' EID für "production" ',-1)])]),_:1},8,["model-value"])])}const k=d(c,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/enphase/enphase/inverter.vue"]]);export{k as default}; +import{C as m}from"./HardwareInstallation-M-k9qNJb.js";import{_ as d,m as o,l as u,f as l,q as t,u as i,B as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceEnphaseInverter",mixins:[m]},f={class:"device-enphase-inverter"};function _(n,e,v,b,g,h){const s=o("openwb-base-heading"),p=o("openwb-base-number-input");return u(),l("div",f,[t(s,null,{default:i(()=>[...e[1]||(e[1]=[r(" Einstellungen für Enphase Envoy / IQ Gateway Wechselrichter ",-1)])]),_:1}),t(p,{title:"EID",required:"","model-value":n.component.configuration.eid,"onUpdate:modelValue":e[0]||(e[0]=a=>n.updateConfiguration(a,"configuration.eid"))},{help:i(()=>[...e[2]||(e[2]=[r(' EID für "production" ',-1)])]),_:1},8,["model-value"])])}const k=d(c,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/enphase/enphase/inverter.vue"]]);export{k as default}; diff --git a/web/settings/assets/inverter-DM70X-Bj.js b/web/settings/assets/inverter-BY4QGubE.js similarity index 90% rename from web/settings/assets/inverter-DM70X-Bj.js rename to web/settings/assets/inverter-BY4QGubE.js index f5e2a43f02..0e73bce2e1 100644 --- a/web/settings/assets/inverter-DM70X-Bj.js +++ b/web/settings/assets/inverter-BY4QGubE.js @@ -1 +1 @@ -import{C as s}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as a,m as t,l as m,f as l,q as i,u as d,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const b={name:"DeviceVictronInverter",mixins:[s]},_={class:"device-victron-inverter"};function f(o,e,v,g,w,V){const r=t("openwb-base-heading"),p=t("openwb-base-number-input"),u=t("openwb-base-button-group-input");return m(),l("div",_,[i(r,null,{default:d(()=>[...e[2]||(e[2]=[c(" Einstellungen für Victron Wechselrichter ",-1)])]),_:1}),i(p,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"]),i(u,{title:"MPPT",buttons:[{buttonValue:!1,text:"Nein"},{buttonValue:!0,text:"Ja"}],"model-value":o.component.configuration.mppt,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.mppt"))},null,8,["model-value"])])}const E=a(b,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/victron/victron/inverter.vue"]]);export{E as default}; +import{C as s}from"./HardwareInstallation-M-k9qNJb.js";import{_ as a,m as t,l as m,f as l,q as i,u as d,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const b={name:"DeviceVictronInverter",mixins:[s]},_={class:"device-victron-inverter"};function f(o,e,v,g,w,V){const r=t("openwb-base-heading"),p=t("openwb-base-number-input"),u=t("openwb-base-button-group-input");return m(),l("div",_,[i(r,null,{default:d(()=>[...e[2]||(e[2]=[c(" Einstellungen für Victron Wechselrichter ",-1)])]),_:1}),i(p,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.modbus_id"))},null,8,["model-value"]),i(u,{title:"MPPT",buttons:[{buttonValue:!1,text:"Nein"},{buttonValue:!0,text:"Ja"}],"model-value":o.component.configuration.mppt,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.mppt"))},null,8,["model-value"])])}const E=a(b,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/victron/victron/inverter.vue"]]);export{E as default}; diff --git a/web/settings/assets/inverter-B_yh5lUv.js b/web/settings/assets/inverter-BZZcq6as.js similarity index 81% rename from web/settings/assets/inverter-B_yh5lUv.js rename to web/settings/assets/inverter-BZZcq6as.js index 9debdfefa4..5ea26f31f8 100644 --- a/web/settings/assets/inverter-B_yh5lUv.js +++ b/web/settings/assets/inverter-BZZcq6as.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as a,m as n,l as m,f as d,q as t,u,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceDeyeInverter",mixins:[p]},_={class:"device-deye-inverter"};function f(o,e,b,v,g,w){const i=n("openwb-base-heading"),r=n("openwb-base-number-input");return m(),d("div",_,[t(i,null,{default:u(()=>[...e[1]||(e[1]=[l(" Einstellungen für Deye Wechselrichter ",-1)])]),_:1}),t(r,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.modbus_id"))},null,8,["model-value"])])}const q=a(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/deye/deye/inverter.vue"]]);export{q as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as a,m as n,l as m,f as d,q as t,u,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceDeyeInverter",mixins:[p]},_={class:"device-deye-inverter"};function f(o,e,b,v,g,w){const i=n("openwb-base-heading"),r=n("openwb-base-number-input");return m(),d("div",_,[t(i,null,{default:u(()=>[...e[1]||(e[1]=[l(" Einstellungen für Deye Wechselrichter ",-1)])]),_:1}),t(r,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.modbus_id"))},null,8,["model-value"])])}const q=a(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/deye/deye/inverter.vue"]]);export{q as default}; diff --git a/web/settings/assets/inverter-BvFrtgVp.js b/web/settings/assets/inverter-B_6AQnTo.js similarity index 88% rename from web/settings/assets/inverter-BvFrtgVp.js rename to web/settings/assets/inverter-B_6AQnTo.js index 0f2d17fb11..14532a83c1 100644 --- a/web/settings/assets/inverter-BvFrtgVp.js +++ b/web/settings/assets/inverter-B_6AQnTo.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as a,m as n,l as m,f as u,q as t,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceFoxEssInverter",mixins:[p]},c={class:"device-fox_ess-inverter"};function f(o,e,b,v,x,g){const s=n("openwb-base-heading"),i=n("openwb-base-number-input");return m(),u("div",c,[t(s,null,{default:d(()=>[...e[1]||(e[1]=[l(" Einstellungen für FoxEss Wechselrichter ",-1)])]),_:1}),t(i,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=r=>o.updateConfiguration(r,"configuration.modbus_id"))},null,8,["model-value"])])}const D=a(_,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fox_ess/fox_ess/inverter.vue"]]);export{D as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as a,m as n,l as m,f as u,q as t,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceFoxEssInverter",mixins:[p]},c={class:"device-fox_ess-inverter"};function f(o,e,b,v,x,g){const s=n("openwb-base-heading"),i=n("openwb-base-number-input");return m(),u("div",c,[t(s,null,{default:d(()=>[...e[1]||(e[1]=[l(" Einstellungen für FoxEss Wechselrichter ",-1)])]),_:1}),t(i,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=r=>o.updateConfiguration(r,"configuration.modbus_id"))},null,8,["model-value"])])}const D=a(_,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fox_ess/fox_ess/inverter.vue"]]);export{D as default}; diff --git a/web/settings/assets/inverter-BrPPorIx.js b/web/settings/assets/inverter-B_S53BXW.js similarity index 88% rename from web/settings/assets/inverter-BrPPorIx.js rename to web/settings/assets/inverter-B_S53BXW.js index d18045b7e1..e470019e74 100644 --- a/web/settings/assets/inverter-BrPPorIx.js +++ b/web/settings/assets/inverter-B_S53BXW.js @@ -1 +1 @@ -import{C as u}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as a,m as t,l as p,f as l,q as n,u as m,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceYoulessInverter",mixins:[u]},d={class:"device-youless-inverter"};function f(o,e,b,v,g,x){const s=t("openwb-base-heading"),i=t("openwb-base-button-group-input");return p(),l("div",d,[n(s,null,{default:m(()=>[...e[1]||(e[1]=[c(" Einstellungen für Youless LS120 Wechselrichter ",-1)])]),_:1}),n(i,{title:"S0-Eingang auslesen",buttons:[{buttonValue:!1,text:"nein"},{buttonValue:!0,text:"ja"}],"model-value":o.component.configuration.source_s0,"onUpdate:modelValue":e[0]||(e[0]=r=>o.updateConfiguration(r,"configuration.source_s0"))},null,8,["model-value"])])}const N=a(_,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/youless/youless/inverter.vue"]]);export{N as default}; +import{C as u}from"./HardwareInstallation-M-k9qNJb.js";import{_ as a,m as t,l as p,f as l,q as n,u as m,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceYoulessInverter",mixins:[u]},d={class:"device-youless-inverter"};function f(o,e,b,v,g,x){const s=t("openwb-base-heading"),i=t("openwb-base-button-group-input");return p(),l("div",d,[n(s,null,{default:m(()=>[...e[1]||(e[1]=[c(" Einstellungen für Youless LS120 Wechselrichter ",-1)])]),_:1}),n(i,{title:"S0-Eingang auslesen",buttons:[{buttonValue:!1,text:"nein"},{buttonValue:!0,text:"ja"}],"model-value":o.component.configuration.source_s0,"onUpdate:modelValue":e[0]||(e[0]=r=>o.updateConfiguration(r,"configuration.source_s0"))},null,8,["model-value"])])}const N=a(_,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/youless/youless/inverter.vue"]]);export{N as default}; diff --git a/web/settings/assets/inverter-wt0jUIdX.js b/web/settings/assets/inverter-BamFQOpg.js similarity index 82% rename from web/settings/assets/inverter-wt0jUIdX.js rename to web/settings/assets/inverter-BamFQOpg.js index 0314b3795e..df468030f5 100644 --- a/web/settings/assets/inverter-wt0jUIdX.js +++ b/web/settings/assets/inverter-BamFQOpg.js @@ -1 +1 @@ -import{C as a}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as p,m as n,l as m,f as l,q as t,u,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSolakonOneInverter",mixins:[a]},_={class:"device-solakon-one-inverter"};function f(o,e,b,v,g,k){const i=n("openwb-base-heading"),r=n("openwb-base-number-input");return m(),l("div",_,[t(i,null,{default:u(()=>[...e[1]||(e[1]=[d(" Einstellungen für Solakon One Wechselrichter ",-1)])]),_:1}),t(r,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.modbus_id"))},null,8,["model-value"])])}const E=p(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solakon/solakon_one/inverter.vue"]]);export{E as default}; +import{C as a}from"./HardwareInstallation-M-k9qNJb.js";import{_ as p,m as n,l as m,f as l,q as t,u,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSolakonOneInverter",mixins:[a]},_={class:"device-solakon-one-inverter"};function f(o,e,b,v,g,k){const i=n("openwb-base-heading"),r=n("openwb-base-number-input");return m(),l("div",_,[t(i,null,{default:u(()=>[...e[1]||(e[1]=[d(" Einstellungen für Solakon One Wechselrichter ",-1)])]),_:1}),t(r,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.modbus_id"))},null,8,["model-value"])])}const E=p(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solakon/solakon_one/inverter.vue"]]);export{E as default}; diff --git a/web/settings/assets/inverter-C2Y5Ecgw.js b/web/settings/assets/inverter-Bd2SPbtu.js similarity index 83% rename from web/settings/assets/inverter-C2Y5Ecgw.js rename to web/settings/assets/inverter-Bd2SPbtu.js index 9511a8127f..04c821592c 100644 --- a/web/settings/assets/inverter-C2Y5Ecgw.js +++ b/web/settings/assets/inverter-Bd2SPbtu.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as a,m as o,l,f as u,q as n,u as m,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceOpenwbEvukitInverter",mixins:[p]},v={class:"device-openwb-evukit-inverter"};function _(t,e,f,b,w,g){const i=o("openwb-base-heading"),r=o("openwb-base-select-input");return l(),u("div",v,[n(i,null,{default:m(()=>[...e[1]||(e[1]=[c(" Einstellungen für openWB EVU-Kit Wechselrichter ",-1)])]),_:1}),n(r,{title:"Zählermodell","not-selected":"Bitte auswählen",options:[{value:0,text:"MPM3PM"},{value:1,text:"Lovato"},{value:2,text:"SDM630/SDM72D-M"}],"model-value":t.component.configuration.version,required:"","onUpdate:modelValue":e[0]||(e[0]=s=>t.updateConfiguration(s,"configuration.version"))},null,8,["model-value"])])}const $=a(d,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/openwb/openwb_evu_kit/inverter.vue"]]);export{$ as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as a,m as o,l,f as u,q as n,u as m,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceOpenwbEvukitInverter",mixins:[p]},v={class:"device-openwb-evukit-inverter"};function _(t,e,f,b,w,g){const i=o("openwb-base-heading"),r=o("openwb-base-select-input");return l(),u("div",v,[n(i,null,{default:m(()=>[...e[1]||(e[1]=[c(" Einstellungen für openWB EVU-Kit Wechselrichter ",-1)])]),_:1}),n(r,{title:"Zählermodell","not-selected":"Bitte auswählen",options:[{value:0,text:"MPM3PM"},{value:1,text:"Lovato"},{value:2,text:"SDM630/SDM72D-M"}],"model-value":t.component.configuration.version,required:"","onUpdate:modelValue":e[0]||(e[0]=s=>t.updateConfiguration(s,"configuration.version"))},null,8,["model-value"])])}const $=a(d,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/openwb/openwb_evu_kit/inverter.vue"]]);export{$ as default}; diff --git a/web/settings/assets/inverter-ByAQHSYq.js b/web/settings/assets/inverter-Bn2pFrXI.js similarity index 87% rename from web/settings/assets/inverter-ByAQHSYq.js rename to web/settings/assets/inverter-Bn2pFrXI.js index 4dfdff88a6..4425d73f5f 100644 --- a/web/settings/assets/inverter-ByAQHSYq.js +++ b/web/settings/assets/inverter-Bn2pFrXI.js @@ -1 +1 @@ -import{C as r}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as n,m as s,l as o,f as i,q as a,u as p,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const m={name:"DeviceVartaInverter",mixins:[r]},d={class:"varta-inverter"};function _(l,e,u,v,f,b){const t=s("openwb-base-alert");return o(),i("div",d,[a(t,{subtype:"info"},{default:p(()=>[...e[0]||(e[0]=[c(" Die Leistung des Wechselrichters ist nur verfügbar, wenn dieser über Sensor an Varta angebunden ist. Wechselrichter die per Modbus mit dem Speicher kommunizieren lassen sich nicht über den Varta PV-Sensor auslesen. ",-1)])]),_:1})])}const S=n(m,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/varta/varta/inverter.vue"]]);export{S as default}; +import{C as r}from"./HardwareInstallation-M-k9qNJb.js";import{_ as n,m as s,l as o,f as i,q as a,u as p,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const m={name:"DeviceVartaInverter",mixins:[r]},d={class:"varta-inverter"};function _(l,e,u,v,f,b){const t=s("openwb-base-alert");return o(),i("div",d,[a(t,{subtype:"info"},{default:p(()=>[...e[0]||(e[0]=[c(" Die Leistung des Wechselrichters ist nur verfügbar, wenn dieser über Sensor an Varta angebunden ist. Wechselrichter die per Modbus mit dem Speicher kommunizieren lassen sich nicht über den Varta PV-Sensor auslesen. ",-1)])]),_:1})])}const S=n(m,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/varta/varta/inverter.vue"]]);export{S as default}; diff --git a/web/settings/assets/inverter-C6WRP55i.js b/web/settings/assets/inverter-BtwGJEqd.js similarity index 89% rename from web/settings/assets/inverter-C6WRP55i.js rename to web/settings/assets/inverter-BtwGJEqd.js index ca2021c5fe..ab89edc59d 100644 --- a/web/settings/assets/inverter-C6WRP55i.js +++ b/web/settings/assets/inverter-BtwGJEqd.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as a,m as o,l,f as m,q as n,u,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceOpenwbPvkitInverter",mixins:[p]},v={class:"device-openwb-pvkit-inverter"};function _(t,e,f,b,w,g){const i=o("openwb-base-heading"),r=o("openwb-base-select-input");return l(),m("div",v,[n(i,null,{default:u(()=>[...e[1]||(e[1]=[c(" Einstellungen für openWB PV-Kit Wechselrichter ",-1)])]),_:1}),n(r,{title:"Zählermodell","not-selected":"Bitte auswählen",options:[{value:0,text:"MPM3PM"},{value:1,text:"Lovato"},{value:2,text:"SDM630/SDM72D-M"}],"model-value":t.component.configuration.version,required:"","onUpdate:modelValue":e[0]||(e[0]=s=>t.updateConfiguration(s,"configuration.version"))},null,8,["model-value"])])}const $=a(d,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/openwb/openwb_pv_kit/inverter.vue"]]);export{$ as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as a,m as o,l,f as m,q as n,u,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceOpenwbPvkitInverter",mixins:[p]},v={class:"device-openwb-pvkit-inverter"};function _(t,e,f,b,w,g){const i=o("openwb-base-heading"),r=o("openwb-base-select-input");return l(),m("div",v,[n(i,null,{default:u(()=>[...e[1]||(e[1]=[c(" Einstellungen für openWB PV-Kit Wechselrichter ",-1)])]),_:1}),n(r,{title:"Zählermodell","not-selected":"Bitte auswählen",options:[{value:0,text:"MPM3PM"},{value:1,text:"Lovato"},{value:2,text:"SDM630/SDM72D-M"}],"model-value":t.component.configuration.version,required:"","onUpdate:modelValue":e[0]||(e[0]=s=>t.updateConfiguration(s,"configuration.version"))},null,8,["model-value"])])}const $=a(d,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/openwb/openwb_pv_kit/inverter.vue"]]);export{$ as default}; diff --git a/web/settings/assets/inverter-BESdF3o1.js b/web/settings/assets/inverter-C-IPT7iP.js similarity index 82% rename from web/settings/assets/inverter-BESdF3o1.js rename to web/settings/assets/inverter-C-IPT7iP.js index e47231dcae..97073cb3b1 100644 --- a/web/settings/assets/inverter-BESdF3o1.js +++ b/web/settings/assets/inverter-C-IPT7iP.js @@ -1 +1 @@ -import{C as a}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as m,m as n,l as p,f as l,q as t,u,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSolarmaxInverter",mixins:[a]},_={class:"device-solarmax-inverter"};function f(o,e,b,v,x,g){const r=n("openwb-base-heading"),i=n("openwb-base-number-input");return p(),l("div",_,[t(r,null,{default:u(()=>[...e[1]||(e[1]=[d(" Einstellungen für Solarmax Wechselrichter ",-1)])]),_:1}),t(i,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.modbus_id"))},null,8,["model-value"])])}const E=m(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solarmax/solarmax/inverter.vue"]]);export{E as default}; +import{C as a}from"./HardwareInstallation-M-k9qNJb.js";import{_ as m,m as n,l as p,f as l,q as t,u,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSolarmaxInverter",mixins:[a]},_={class:"device-solarmax-inverter"};function f(o,e,b,v,x,g){const r=n("openwb-base-heading"),i=n("openwb-base-number-input");return p(),l("div",_,[t(r,null,{default:u(()=>[...e[1]||(e[1]=[d(" Einstellungen für Solarmax Wechselrichter ",-1)])]),_:1}),t(i,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.modbus_id"))},null,8,["model-value"])])}const E=m(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solarmax/solarmax/inverter.vue"]]);export{E as default}; diff --git a/web/settings/assets/inverter-fPQd3WC-.js b/web/settings/assets/inverter-C1ZmnoCj.js similarity index 96% rename from web/settings/assets/inverter-fPQd3WC-.js rename to web/settings/assets/inverter-C1ZmnoCj.js index db0b59c7e0..a000393c16 100644 --- a/web/settings/assets/inverter-fPQd3WC-.js +++ b/web/settings/assets/inverter-C1ZmnoCj.js @@ -1 +1 @@ -import{C as m}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as a,m as p,l as g,f as b,q as i,u as o,B as t,y as n,J as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const f={name:"DeviceMqttInverter",mixins:[m]},B={class:"device-mqtt-inverter"};function v(l,e,z,w,k,W){const d=p("openwb-base-heading"),u=p("openwb-base-alert"),r=p("openwb-base-copy-to-clipboard");return g(),b("div",B,[i(d,null,{default:o(()=>[...e[0]||(e[0]=[t(" Einstellungen für MQTT Wechselrichter ",-1)])]),_:1}),i(u,{subtype:"warning"},{default:o(()=>[e[1]||(e[1]=t(" Ist die ",-1)),e[2]||(e[2]=n("strong",null,"Benutzerverwaltung",-1)),e[3]||(e[3]=t(" aktiviert, dann muss ein Benutzer mit Schreibrechten für die entsprechenden Topics angelegt werden, damit openWB die Daten akzeptiert. Hierfür werden automatisch die benötigten Berechtigungen in der Rolle ",-1)),n("strong",null,`"Daten: Wechselrichter '`+s(l.component.name)+"' ("+s(l.component.id)+') MQTT-Input"',1),e[4]||(e[4]=t(" angelegt, die einem Benutzer zugewiesen werden kann. ",-1))]),_:1}),i(u,{subtype:"info"},{default:o(()=>[e[23]||(e[23]=t(" Die folgenden Topics sind für einen reibungslosen Betrieb unbedingt erforderlich: ",-1)),n("ul",null,[n("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:o(()=>[t(" openWB/set/mqtt/pv/"+s(l.component.id)+"/get/power ",1)]),_:1}),e[5]||(e[5]=n("br",null,null,-1)),e[6]||(e[6]=t(" PV-Leistung in Watt als Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen. Produzierte Leistung muss ein negatives Vorzeichen haben. (In bestimmten Konstellationen, z.B. wenn ein Hybridsystem über einen zweiten Wechselrichter geladen wird, hat die Leistung ein positives Vorzeichen.) Beispiel: ",-1)),e[7]||(e[7]=n("span",{class:"text-info"},"-123",-1))])]),e[24]||(e[24]=t(" Falls keine Wert für den Zählerstand übermittelt wird, berechnet openWB den Zählerstand anhand der Leistung. ",-1)),n("ul",null,[n("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:o(()=>[t(" openWB/set/mqtt/pv/"+s(l.component.id)+"/get/exported ",1)]),_:1}),e[8]||(e[8]=n("br",null,null,-1)),e[9]||(e[9]=t(" Erzeugte Energie in Wh, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, nur positiv",-1)),e[10]||(e[10]=n("br",null,null,-1)),e[11]||(e[11]=t(" Beispiel: ",-1)),e[12]||(e[12]=n("span",{class:"text-info"},"123.45",-1))]),n("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:o(()=>[t(" openWB/set/mqtt/pv/"+s(l.component.id)+"/get/imported ",1)]),_:1}),e[13]||(e[13]=n("br",null,null,-1)),e[14]||(e[14]=t(" Bezogene Energie in Wh (optional, zB für Hybridsysteme, die den Speicher aus dem Netz laden), Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, nur positiv",-1)),e[15]||(e[15]=n("br",null,null,-1)),e[16]||(e[16]=t(" Beispiel: ",-1)),e[17]||(e[17]=n("span",{class:"text-info"},"123.45",-1))])]),e[25]||(e[25]=t(" Ströme je Phase sind optional, jedoch für phasenbasiertes Lastmanagement in Verbindung mit einem virtuellen Zähler unbedingt erforderlich. Ansonsten erfolgt das Lastmanagement ausschließlich auf Basis der Gesamtleistung an diesem Zähler: ",-1)),n("ul",null,[n("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:o(()=>[t(" openWB/set/mqtt/pv/"+s(l.component.id)+"/get/currents ",1)]),_:1}),e[18]||(e[18]=n("br",null,null,-1)),e[19]||(e[19]=t(" Array mit den Strömen je Phase in Ampere, mit Nachkommastellen (Float), positiv Bezug, negativ Einspeisung",-1)),e[20]||(e[20]=n("br",null,null,-1)),e[21]||(e[21]=t(" Beispiel: ",-1)),e[22]||(e[22]=n("span",{class:"text-info"},"[1.2,2.3,-2.1]",-1))])])]),_:1})])}const Z=a(f,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/mqtt/inverter.vue"]]);export{Z as default}; +import{C as m}from"./HardwareInstallation-M-k9qNJb.js";import{_ as a,m as p,l as g,f as b,q as i,u as o,B as t,y as n,J as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const f={name:"DeviceMqttInverter",mixins:[m]},B={class:"device-mqtt-inverter"};function v(l,e,z,w,k,W){const d=p("openwb-base-heading"),u=p("openwb-base-alert"),r=p("openwb-base-copy-to-clipboard");return g(),b("div",B,[i(d,null,{default:o(()=>[...e[0]||(e[0]=[t(" Einstellungen für MQTT Wechselrichter ",-1)])]),_:1}),i(u,{subtype:"warning"},{default:o(()=>[e[1]||(e[1]=t(" Ist die ",-1)),e[2]||(e[2]=n("strong",null,"Benutzerverwaltung",-1)),e[3]||(e[3]=t(" aktiviert, dann muss ein Benutzer mit Schreibrechten für die entsprechenden Topics angelegt werden, damit openWB die Daten akzeptiert. Hierfür werden automatisch die benötigten Berechtigungen in der Rolle ",-1)),n("strong",null,`"Daten: Wechselrichter '`+s(l.component.name)+"' ("+s(l.component.id)+') MQTT-Input"',1),e[4]||(e[4]=t(" angelegt, die einem Benutzer zugewiesen werden kann. ",-1))]),_:1}),i(u,{subtype:"info"},{default:o(()=>[e[23]||(e[23]=t(" Die folgenden Topics sind für einen reibungslosen Betrieb unbedingt erforderlich: ",-1)),n("ul",null,[n("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:o(()=>[t(" openWB/set/mqtt/pv/"+s(l.component.id)+"/get/power ",1)]),_:1}),e[5]||(e[5]=n("br",null,null,-1)),e[6]||(e[6]=t(" PV-Leistung in Watt als Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen. Produzierte Leistung muss ein negatives Vorzeichen haben. (In bestimmten Konstellationen, z.B. wenn ein Hybridsystem über einen zweiten Wechselrichter geladen wird, hat die Leistung ein positives Vorzeichen.) Beispiel: ",-1)),e[7]||(e[7]=n("span",{class:"text-info"},"-123",-1))])]),e[24]||(e[24]=t(" Falls keine Wert für den Zählerstand übermittelt wird, berechnet openWB den Zählerstand anhand der Leistung. ",-1)),n("ul",null,[n("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:o(()=>[t(" openWB/set/mqtt/pv/"+s(l.component.id)+"/get/exported ",1)]),_:1}),e[8]||(e[8]=n("br",null,null,-1)),e[9]||(e[9]=t(" Erzeugte Energie in Wh, Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, nur positiv",-1)),e[10]||(e[10]=n("br",null,null,-1)),e[11]||(e[11]=t(" Beispiel: ",-1)),e[12]||(e[12]=n("span",{class:"text-info"},"123.45",-1))]),n("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:o(()=>[t(" openWB/set/mqtt/pv/"+s(l.component.id)+"/get/imported ",1)]),_:1}),e[13]||(e[13]=n("br",null,null,-1)),e[14]||(e[14]=t(" Bezogene Energie in Wh (optional, zB für Hybridsysteme, die den Speicher aus dem Netz laden), Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen, nur positiv",-1)),e[15]||(e[15]=n("br",null,null,-1)),e[16]||(e[16]=t(" Beispiel: ",-1)),e[17]||(e[17]=n("span",{class:"text-info"},"123.45",-1))])]),e[25]||(e[25]=t(" Ströme je Phase sind optional, jedoch für phasenbasiertes Lastmanagement in Verbindung mit einem virtuellen Zähler unbedingt erforderlich. Ansonsten erfolgt das Lastmanagement ausschließlich auf Basis der Gesamtleistung an diesem Zähler: ",-1)),n("ul",null,[n("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:o(()=>[t(" openWB/set/mqtt/pv/"+s(l.component.id)+"/get/currents ",1)]),_:1}),e[18]||(e[18]=n("br",null,null,-1)),e[19]||(e[19]=t(" Array mit den Strömen je Phase in Ampere, mit Nachkommastellen (Float), positiv Bezug, negativ Einspeisung",-1)),e[20]||(e[20]=n("br",null,null,-1)),e[21]||(e[21]=t(" Beispiel: ",-1)),e[22]||(e[22]=n("span",{class:"text-info"},"[1.2,2.3,-2.1]",-1))])])]),_:1})])}const Z=a(f,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/mqtt/inverter.vue"]]);export{Z as default}; diff --git a/web/settings/assets/inverter-D3RnIGNF.js b/web/settings/assets/inverter-C9hQ-qD6.js similarity index 94% rename from web/settings/assets/inverter-D3RnIGNF.js rename to web/settings/assets/inverter-C9hQ-qD6.js index 03024ad36c..4f8cc95f41 100644 --- a/web/settings/assets/inverter-D3RnIGNF.js +++ b/web/settings/assets/inverter-C9hQ-qD6.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as u,m as l,l as m,f as g,q as r,u as o,B as n,y as a}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const h={name:"DeviceHttpInverter",mixins:[p]},c={class:"device-http-inverter"};function b(t,e,v,f,w,_){const d=l("openwb-base-heading"),s=l("openwb-base-text-input");return m(),g("div",c,[r(d,null,{default:o(()=>[...e[2]||(e[2]=[n(" Einstellungen für Http Wechselrichter ",-1)])]),_:1}),r(s,{title:"Pfad für Leistung",subtype:"text",required:"",pattern:"^/[-a-zA-Z0-9@:%_\\+.~#?&/=]*","model-value":t.component.configuration.power_path,"onUpdate:modelValue":e[0]||(e[0]=i=>t.updateConfiguration(i,"configuration.power_path"))},{help:o(()=>[...e[3]||(e[3]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),a("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Leistung in Watt darstellt. Produzierte Leistung muss ein negatives Vorzeichen haben. (In bestimmten Konstellationen, z.B. wenn ein Hybridsystem über einen zweiten Wechselrichter geladen wird, hat die Leistung ein positives Vorzeichen.) ",-1)])]),_:1},8,["model-value"]),r(s,{title:"Pfad für Zählerstand Erzeugung",subtype:"text",pattern:"^(/[-a-zA-Z0-9@:%_\\+.~#?&/=]*)","model-value":t.component.configuration.exported_path,"onUpdate:modelValue":e[1]||(e[1]=i=>t.updateConfiguration(i,"configuration.exported_path"))},{help:o(()=>[...e[4]||(e[4]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),a("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche den aktuellen absoluten Zählerstand in Wh darstellt.",-1),a("br",null,null,-1),n(" Wird dieses Feld leer gelassen, wird der Zählerstand intern simuliert. ",-1)])]),_:1},8,["model-value"])])}const W=u(h,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/http/inverter.vue"]]);export{W as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as u,m as l,l as m,f as g,q as r,u as o,B as n,y as a}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const h={name:"DeviceHttpInverter",mixins:[p]},c={class:"device-http-inverter"};function b(t,e,v,f,w,_){const d=l("openwb-base-heading"),s=l("openwb-base-text-input");return m(),g("div",c,[r(d,null,{default:o(()=>[...e[2]||(e[2]=[n(" Einstellungen für Http Wechselrichter ",-1)])]),_:1}),r(s,{title:"Pfad für Leistung",subtype:"text",required:"",pattern:"^/[-a-zA-Z0-9@:%_\\+.~#?&/=]*","model-value":t.component.configuration.power_path,"onUpdate:modelValue":e[0]||(e[0]=i=>t.updateConfiguration(i,"configuration.power_path"))},{help:o(()=>[...e[3]||(e[3]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),a("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Leistung in Watt darstellt. Produzierte Leistung muss ein negatives Vorzeichen haben. (In bestimmten Konstellationen, z.B. wenn ein Hybridsystem über einen zweiten Wechselrichter geladen wird, hat die Leistung ein positives Vorzeichen.) ",-1)])]),_:1},8,["model-value"]),r(s,{title:"Pfad für Zählerstand Erzeugung",subtype:"text",pattern:"^(/[-a-zA-Z0-9@:%_\\+.~#?&/=]*)","model-value":t.component.configuration.exported_path,"onUpdate:modelValue":e[1]||(e[1]=i=>t.updateConfiguration(i,"configuration.exported_path"))},{help:o(()=>[...e[4]||(e[4]=[n(' Diese Angabe wird an die Server-URL angehängt und muss mit einem Schrägstrich "/" beginnen.',-1),a("br",null,null,-1),n(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche den aktuellen absoluten Zählerstand in Wh darstellt.",-1),a("br",null,null,-1),n(" Wird dieses Feld leer gelassen, wird der Zählerstand intern simuliert. ",-1)])]),_:1},8,["model-value"])])}const W=u(h,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/http/inverter.vue"]]);export{W as default}; diff --git a/web/settings/assets/inverter-4q1c4sTB.js b/web/settings/assets/inverter-CD6oD4dy.js similarity index 89% rename from web/settings/assets/inverter-4q1c4sTB.js rename to web/settings/assets/inverter-CD6oD4dy.js index 2a4ff718ae..0b6170d9b4 100644 --- a/web/settings/assets/inverter-4q1c4sTB.js +++ b/web/settings/assets/inverter-CD6oD4dy.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as d,m as n,l as u,f as l,q as t,u as s,B as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceFoxEssH3SmartInverter",mixins:[p]},f={class:"device-foxess-h3-smart-inverter"};function c(o,e,b,v,x,g){const r=n("openwb-base-heading"),a=n("openwb-base-number-input");return u(),l("div",f,[t(r,null,{default:s(()=>[...e[1]||(e[1]=[i(" Einstellungen für FoxEss H3 Smart Wechselrichter ",-1)])]),_:1}),t(a,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=m=>o.updateConfiguration(m,"configuration.modbus_id"))},{help:s(()=>[...e[2]||(e[2]=[i(" Die Standard-Modbus-ID von FoxEss ist 247 ",-1)])]),_:1},8,["model-value"])])}const M=d(_,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fox_ess/fox_ess_h3_smart/inverter.vue"]]);export{M as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as d,m as n,l as u,f as l,q as t,u as s,B as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceFoxEssH3SmartInverter",mixins:[p]},f={class:"device-foxess-h3-smart-inverter"};function c(o,e,b,v,x,g){const r=n("openwb-base-heading"),a=n("openwb-base-number-input");return u(),l("div",f,[t(r,null,{default:s(()=>[...e[1]||(e[1]=[i(" Einstellungen für FoxEss H3 Smart Wechselrichter ",-1)])]),_:1}),t(a,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=m=>o.updateConfiguration(m,"configuration.modbus_id"))},{help:s(()=>[...e[2]||(e[2]=[i(" Die Standard-Modbus-ID von FoxEss ist 247 ",-1)])]),_:1},8,["model-value"])])}const M=d(_,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fox_ess/fox_ess_h3_smart/inverter.vue"]]);export{M as default}; diff --git a/web/settings/assets/inverter-DDR03ckG.js b/web/settings/assets/inverter-CFBN3P6A.js similarity index 94% rename from web/settings/assets/inverter-DDR03ckG.js rename to web/settings/assets/inverter-CFBN3P6A.js index 8b4d6a1587..3db78775e2 100644 --- a/web/settings/assets/inverter-DDR03ckG.js +++ b/web/settings/assets/inverter-CFBN3P6A.js @@ -1 +1 @@ -import{C as d}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as m,m as t,l as s,f as c,q as a,u as r,B as o,z as h,x as g}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const v={name:"DeviceFroniusSunspecInverter",mixins:[d]},f={class:"device-fronius-sunspec-inverter"};function b(n,e,_,P,w,C){const u=t("openwb-base-heading"),p=t("openwb-base-select-input"),l=t("openwb-base-array-input");return s(),c("div",f,[a(u,null,{default:r(()=>[...e[2]||(e[2]=[o(" Einstellungen für Fronius SunSpec Wechselrichter ",-1)])]),_:1}),a(p,{title:"Version","not-selected":"Bitte auswählen",options:[{value:0,text:"PV-Erzeugung aus MPPT-Kanälen (Hybrid-Wechselrichter mit Speicher)"},{value:1,text:"AC-Leistung direkt (nicht-hybride Wechselrichter, z.B. Argeno)"}],"model-value":n.component.configuration.version,required:"","onUpdate:modelValue":e[0]||(e[0]=i=>n.updateConfiguration(i,"configuration.version"))},{help:r(()=>[...e[3]||(e[3]=[o(" Bei Hybrid-Wechselrichtern mit Speicher ist die AC-Leistung bereits mit dem Speicherfluss verrechnet, die reine PV-Erzeugung muss dann aus den DC-MPPT-Kanälen summiert werden. Bei nicht-hybriden Wechselrichtern kann die AC-Leistung direkt verwendet werden. ",-1)])]),_:1},8,["model-value"]),n.component.configuration.version===0?(s(),h(l,{key:0,title:"PV-MPPT-Kanäle","model-value":n.component.configuration.pv_mppt_indices,"valid-elements":[1,2,3,4,5,6,7,8],"no-elements-message":"Keine PV-MPPT-Kanäle zugeordnet.","onUpdate:modelValue":e[1]||(e[1]=i=>n.updateConfiguration(i,"configuration.pv_mppt_indices"))},{help:r(()=>[...e[4]||(e[4]=[o(' Welche MPPT-Kanäle (siehe Kanalbezeichnung im Fronius-Webinterface bzw. per Modbus-Tool) die PV-Strings sind. Bei Hybrid-Geräten belegen Speicher-Lade-/Entladekanäle eigene, höhere Kanalnummern (siehe Speicher-Einstellung "MPPT-Kanal") -- welche Nummern tatsächlich PV vs. Speicher sind, unterscheidet sich zwischen Geräteserien und muss am Gerät geprüft werden. ',-1)])]),_:1},8,["model-value"])):g("",!0)])}const W=m(v,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fronius/fronius_sunspec/inverter.vue"]]);export{W as default}; +import{C as d}from"./HardwareInstallation-M-k9qNJb.js";import{_ as m,m as t,l as s,f as c,q as a,u as r,B as o,z as h,x as g}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const v={name:"DeviceFroniusSunspecInverter",mixins:[d]},f={class:"device-fronius-sunspec-inverter"};function b(n,e,_,P,w,C){const u=t("openwb-base-heading"),p=t("openwb-base-select-input"),l=t("openwb-base-array-input");return s(),c("div",f,[a(u,null,{default:r(()=>[...e[2]||(e[2]=[o(" Einstellungen für Fronius SunSpec Wechselrichter ",-1)])]),_:1}),a(p,{title:"Version","not-selected":"Bitte auswählen",options:[{value:0,text:"PV-Erzeugung aus MPPT-Kanälen (Hybrid-Wechselrichter mit Speicher)"},{value:1,text:"AC-Leistung direkt (nicht-hybride Wechselrichter, z.B. Argeno)"}],"model-value":n.component.configuration.version,required:"","onUpdate:modelValue":e[0]||(e[0]=i=>n.updateConfiguration(i,"configuration.version"))},{help:r(()=>[...e[3]||(e[3]=[o(" Bei Hybrid-Wechselrichtern mit Speicher ist die AC-Leistung bereits mit dem Speicherfluss verrechnet, die reine PV-Erzeugung muss dann aus den DC-MPPT-Kanälen summiert werden. Bei nicht-hybriden Wechselrichtern kann die AC-Leistung direkt verwendet werden. ",-1)])]),_:1},8,["model-value"]),n.component.configuration.version===0?(s(),h(l,{key:0,title:"PV-MPPT-Kanäle","model-value":n.component.configuration.pv_mppt_indices,"valid-elements":[1,2,3,4,5,6,7,8],"no-elements-message":"Keine PV-MPPT-Kanäle zugeordnet.","onUpdate:modelValue":e[1]||(e[1]=i=>n.updateConfiguration(i,"configuration.pv_mppt_indices"))},{help:r(()=>[...e[4]||(e[4]=[o(' Welche MPPT-Kanäle (siehe Kanalbezeichnung im Fronius-Webinterface bzw. per Modbus-Tool) die PV-Strings sind. Bei Hybrid-Geräten belegen Speicher-Lade-/Entladekanäle eigene, höhere Kanalnummern (siehe Speicher-Einstellung "MPPT-Kanal") -- welche Nummern tatsächlich PV vs. Speicher sind, unterscheidet sich zwischen Geräteserien und muss am Gerät geprüft werden. ',-1)])]),_:1},8,["model-value"])):g("",!0)])}const W=m(v,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fronius/fronius_sunspec/inverter.vue"]]);export{W as default}; diff --git a/web/settings/assets/inverter-Dq1iPHd6.js b/web/settings/assets/inverter-CFRhVi2Z.js similarity index 94% rename from web/settings/assets/inverter-Dq1iPHd6.js rename to web/settings/assets/inverter-CFRhVi2Z.js index 9239959091..bb42f1cd55 100644 --- a/web/settings/assets/inverter-Dq1iPHd6.js +++ b/web/settings/assets/inverter-CFRhVi2Z.js @@ -1 +1 @@ -import{C as k}from"./HardwareInstallation-Ln-RWgHD.js";import h from"./ModbusRegisterFields-CkQ0333X.js";import{_ as y,m as s,l as r,f as o,q as d,u as w,B as C,K as l,L as m,y as a,J as p,x as L}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const x=[{id:"power_total",title:"Leistung",entries:[{key:"power",addressRequired:!0}]},{id:"current",title:"Strom",entries:[{key:"current_L1",label:"Phase L1"},{key:"current_L2",label:"Phase L2"},{key:"current_L3",label:"Phase L3"}]},{id:"import",title:"Import",entries:[{key:"imported"}]},{id:"export",title:"Export",entries:[{key:"exported"}]},{id:"dc_power",title:"DC Leistung",entries:[{key:"dc_power"}]},{id:"serial_number",title:"Seriennummer",entries:[{key:"serial_number"}]}],S={name:"DeviceGenericModbusInverter",components:{ModbusRegisterFields:h},mixins:[k],data(){return{registerSections:x}},methods:{handleRegisterModelUpdate(n,{field:e,value:u}){this.updateConfiguration(u,`configuration.${n}.${e}`)}}},M={class:"device-generic-modbus-inverter"},R={key:0};function V(n,e,u,q,c,_){const b=s("openwb-base-heading"),g=s("openwb-base-number-input"),f=s("modbus-register-fields");return r(),o("div",M,[d(b,null,{default:w(()=>[...e[1]||(e[1]=[C(" Einstellungen für Universell Modbus Wechselrichter ",-1)])]),_:1}),d(g,{title:"Modbus ID",required:"","model-value":n.component.configuration.modbus_id,min:0,max:255,"onUpdate:modelValue":e[0]||(e[0]=i=>n.updateConfiguration(i,"configuration.modbus_id"))},null,8,["model-value"]),(r(!0),o(l,null,m(c.registerSections,i=>(r(),o("div",{key:i.id},[a("h4",null,p(i.title),1),(r(!0),o(l,null,m(i.entries,t=>(r(),o(l,{key:t.key},[e[2]||(e[2]=a("hr",{class:"modbus-divider"},null,-1)),a("div",null,[t.label?(r(),o("h5",R,p(t.label),1)):L("",!0),d(f,{"model-value":n.component.configuration[t.key],"address-required":!!t.addressRequired,"onUpdate:modelValue":v=>_.handleRegisterModelUpdate(t.key,v)},null,8,["model-value","address-required","onUpdate:modelValue"])])],64))),128))]))),128))])}const G=y(S,[["render",V],["__scopeId","data-v-66a21c6a"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/modbus/inverter.vue"]]);export{G as default}; +import{C as k}from"./HardwareInstallation-M-k9qNJb.js";import h from"./ModbusRegisterFields-CkQ0333X.js";import{_ as y,m as s,l as r,f as o,q as d,u as w,B as C,K as l,L as m,y as a,J as p,x as L}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const x=[{id:"power_total",title:"Leistung",entries:[{key:"power",addressRequired:!0}]},{id:"current",title:"Strom",entries:[{key:"current_L1",label:"Phase L1"},{key:"current_L2",label:"Phase L2"},{key:"current_L3",label:"Phase L3"}]},{id:"import",title:"Import",entries:[{key:"imported"}]},{id:"export",title:"Export",entries:[{key:"exported"}]},{id:"dc_power",title:"DC Leistung",entries:[{key:"dc_power"}]},{id:"serial_number",title:"Seriennummer",entries:[{key:"serial_number"}]}],S={name:"DeviceGenericModbusInverter",components:{ModbusRegisterFields:h},mixins:[k],data(){return{registerSections:x}},methods:{handleRegisterModelUpdate(n,{field:e,value:u}){this.updateConfiguration(u,`configuration.${n}.${e}`)}}},M={class:"device-generic-modbus-inverter"},R={key:0};function V(n,e,u,q,c,_){const b=s("openwb-base-heading"),g=s("openwb-base-number-input"),f=s("modbus-register-fields");return r(),o("div",M,[d(b,null,{default:w(()=>[...e[1]||(e[1]=[C(" Einstellungen für Universell Modbus Wechselrichter ",-1)])]),_:1}),d(g,{title:"Modbus ID",required:"","model-value":n.component.configuration.modbus_id,min:0,max:255,"onUpdate:modelValue":e[0]||(e[0]=i=>n.updateConfiguration(i,"configuration.modbus_id"))},null,8,["model-value"]),(r(!0),o(l,null,m(c.registerSections,i=>(r(),o("div",{key:i.id},[a("h4",null,p(i.title),1),(r(!0),o(l,null,m(i.entries,t=>(r(),o(l,{key:t.key},[e[2]||(e[2]=a("hr",{class:"modbus-divider"},null,-1)),a("div",null,[t.label?(r(),o("h5",R,p(t.label),1)):L("",!0),d(f,{"model-value":n.component.configuration[t.key],"address-required":!!t.addressRequired,"onUpdate:modelValue":v=>_.handleRegisterModelUpdate(t.key,v)},null,8,["model-value","address-required","onUpdate:modelValue"])])],64))),128))]))),128))])}const G=y(S,[["render",V],["__scopeId","data-v-66a21c6a"],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/modbus/inverter.vue"]]);export{G as default}; diff --git a/web/settings/assets/inverter-DzTd3kss.js b/web/settings/assets/inverter-CTEMEBsb.js similarity index 87% rename from web/settings/assets/inverter-DzTd3kss.js rename to web/settings/assets/inverter-CTEMEBsb.js index 2754cbdb45..bd49e197cd 100644 --- a/web/settings/assets/inverter-DzTd3kss.js +++ b/web/settings/assets/inverter-CTEMEBsb.js @@ -1 +1 @@ -import{C as a}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as m,m as o,l as p,f as l,q as n,u as d,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSmartMeInverter",mixins:[a]},_={class:"device-smart-me-inverter"};function f(t,e,v,b,g,x){const r=o("openwb-base-heading"),i=o("openwb-base-text-input");return p(),l("div",_,[n(r,null,{default:d(()=>[...e[1]||(e[1]=[u(" Einstellungen für smart-me Wechselrichter ",-1)])]),_:1}),n(i,{title:"Geräte-ID",required:"","model-value":t.component.configuration.id,"onUpdate:modelValue":e[0]||(e[0]=s=>t.updateConfiguration(s,"configuration.id"))},null,8,["model-value"])])}const E=m(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/smart_me/smart_me/inverter.vue"]]);export{E as default}; +import{C as a}from"./HardwareInstallation-M-k9qNJb.js";import{_ as m,m as o,l as p,f as l,q as n,u as d,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSmartMeInverter",mixins:[a]},_={class:"device-smart-me-inverter"};function f(t,e,v,b,g,x){const r=o("openwb-base-heading"),i=o("openwb-base-text-input");return p(),l("div",_,[n(r,null,{default:d(()=>[...e[1]||(e[1]=[u(" Einstellungen für smart-me Wechselrichter ",-1)])]),_:1}),n(i,{title:"Geräte-ID",required:"","model-value":t.component.configuration.id,"onUpdate:modelValue":e[0]||(e[0]=s=>t.updateConfiguration(s,"configuration.id"))},null,8,["model-value"])])}const E=m(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/smart_me/smart_me/inverter.vue"]]);export{E as default}; diff --git a/web/settings/assets/inverter-xEKKUyk6.js b/web/settings/assets/inverter-CWbg2AmV.js similarity index 96% rename from web/settings/assets/inverter-xEKKUyk6.js rename to web/settings/assets/inverter-CWbg2AmV.js index be84b1f28d..78d9757a44 100644 --- a/web/settings/assets/inverter-xEKKUyk6.js +++ b/web/settings/assets/inverter-CWbg2AmV.js @@ -1 +1 @@ -import{C}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as E,m as h,l as d,f as g,q as i,u as m,B as f,K as v,L as V,J as _,z as x,x as L}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const S={name:"DeviceEneCessEcoMainInverter",mixins:[C],computed:{channelOptions(){return Array.from({length:10},(e,t)=>{const n=t+1;return{value:n,text:String(n)}})},validationError(){const e=this.component.configuration;if(![1,3].includes(e.phase_count))return"Die Phasenanzahl muss 1 oder 3 sein.";if(e.channels.length!==e.phase_count)return"Die Anzahl der EcoMain-Kanäle stimmt nicht mit der Phasenanzahl überein.";for(const n of e.channels){if(![1,2,3].includes(n.phase))return"Die Phase muss L1, L2 oder L3 sein.";if(![0,1,2,3].includes(n.source))return"Die Quelle muss Hauptgerät oder Slave 1 bis 3 sein.";if(n.channel<1||n.channel>10)return"Der EcoMain-Kanal muss zwischen 1 und 10 liegen."}return e.phase_count===3&&new Set(e.channels.map(({phase:n})=>n)).size!==3?"Bei dreiphasiger Messung müssen L1, L2 und L3 jeweils einmal konfiguriert sein.":new Set(e.channels.map(({source:n,channel:a})=>`${n}:${a}`)).size!==e.channels.length?"Eine EcoMain-Quelle und ein Kanal dürfen nicht mehrfach verwendet werden.":""}},methods:{updateChannel(e,t,n){const a=this.component.configuration.channels.map(p=>({...p}));a[e]={...a[e],[t]:n},this.updateConfiguration(a,"configuration.channels")},changePhaseCount(e){const t=this.component.configuration.channels.map(a=>({...a}));let n;if(e===1)n=[t[0]||{phase:1,source:0,channel:1}];else{const a=t[0]||{phase:1,source:0,channel:1},p=[1,2,3].filter(l=>l!==a.phase),o=new Set([`${a.source}:${a.channel}`]);n=[a];for(const l of p){let s=1;for(;o.has(`0:${s}`);)s+=1;n.push({phase:l,source:0,channel:s}),o.add(`0:${s}`)}}this.updateConfiguration(e,"configuration.phase_count"),this.updateConfiguration(n,"configuration.channels")}}},k={class:"device-enecess-ecomain-inverter"};function M(e,t,n,a,p,o){const l=h("openwb-base-heading"),s=h("openwb-base-select-input"),b=h("openwb-base-checkbox-input"),w=h("openwb-base-alert");return d(),g("div",k,[i(l,null,{default:m(()=>[...t[1]||(t[1]=[f(" Einstellungen für EcoMain Wechselrichter ",-1)])]),_:1}),i(s,{title:"Phasenanzahl",required:"",options:[{value:1,text:"Einphasig"},{value:3,text:"Dreiphasig"}],"model-value":e.component.configuration.phase_count,"onUpdate:modelValue":o.changePhaseCount},null,8,["model-value","onUpdate:modelValue"]),i(b,{title:"Messrichtung invertieren","model-value":e.component.configuration.invert,"onUpdate:modelValue":t[0]||(t[0]=r=>e.updateConfiguration(r,"configuration.invert"))},{help:m(()=>[...t[2]||(t[2]=[f(" Aktivieren, wenn die Stromwandler entgegen der vorgesehenen Messrichtung montiert wurden. ",-1)])]),_:1},8,["model-value"]),(d(!0),g(v,null,V(e.component.configuration.channels,(r,u)=>(d(),g(v,{key:u},[i(l,null,{default:m(()=>[f(" Kanal "+_(u+1),1)]),_:2},1024),i(s,{title:"Phase",required:"",options:[{value:1,text:"L1"},{value:2,text:"L2"},{value:3,text:"L3"}],"model-value":r.phase,"onUpdate:modelValue":c=>o.updateChannel(u,"phase",c)},null,8,["model-value","onUpdate:modelValue"]),i(s,{title:"Quelle",required:"",options:[{value:0,text:"Hauptgerät"},{value:1,text:"Slave 1"},{value:2,text:"Slave 2"},{value:3,text:"Slave 3"}],"model-value":r.source,"onUpdate:modelValue":c=>o.updateChannel(u,"source",c)},null,8,["model-value","onUpdate:modelValue"]),i(s,{title:"Kanal",required:"",options:o.channelOptions,"model-value":r.channel,"onUpdate:modelValue":c=>o.updateChannel(u,"channel",c)},null,8,["options","model-value","onUpdate:modelValue"])],64))),128)),o.validationError?(d(),x(w,{key:0,subtype:"danger"},{default:m(()=>[f(_(o.validationError),1)]),_:1})):L("",!0)])}const N=E(S,[["render",M],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/enecess/ecomain/inverter.vue"]]);export{N as default}; +import{C}from"./HardwareInstallation-M-k9qNJb.js";import{_ as E,m as h,l as d,f as g,q as i,u as m,B as f,K as v,L as V,J as _,z as x,x as L}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const S={name:"DeviceEneCessEcoMainInverter",mixins:[C],computed:{channelOptions(){return Array.from({length:10},(e,t)=>{const n=t+1;return{value:n,text:String(n)}})},validationError(){const e=this.component.configuration;if(![1,3].includes(e.phase_count))return"Die Phasenanzahl muss 1 oder 3 sein.";if(e.channels.length!==e.phase_count)return"Die Anzahl der EcoMain-Kanäle stimmt nicht mit der Phasenanzahl überein.";for(const n of e.channels){if(![1,2,3].includes(n.phase))return"Die Phase muss L1, L2 oder L3 sein.";if(![0,1,2,3].includes(n.source))return"Die Quelle muss Hauptgerät oder Slave 1 bis 3 sein.";if(n.channel<1||n.channel>10)return"Der EcoMain-Kanal muss zwischen 1 und 10 liegen."}return e.phase_count===3&&new Set(e.channels.map(({phase:n})=>n)).size!==3?"Bei dreiphasiger Messung müssen L1, L2 und L3 jeweils einmal konfiguriert sein.":new Set(e.channels.map(({source:n,channel:a})=>`${n}:${a}`)).size!==e.channels.length?"Eine EcoMain-Quelle und ein Kanal dürfen nicht mehrfach verwendet werden.":""}},methods:{updateChannel(e,t,n){const a=this.component.configuration.channels.map(p=>({...p}));a[e]={...a[e],[t]:n},this.updateConfiguration(a,"configuration.channels")},changePhaseCount(e){const t=this.component.configuration.channels.map(a=>({...a}));let n;if(e===1)n=[t[0]||{phase:1,source:0,channel:1}];else{const a=t[0]||{phase:1,source:0,channel:1},p=[1,2,3].filter(l=>l!==a.phase),o=new Set([`${a.source}:${a.channel}`]);n=[a];for(const l of p){let s=1;for(;o.has(`0:${s}`);)s+=1;n.push({phase:l,source:0,channel:s}),o.add(`0:${s}`)}}this.updateConfiguration(e,"configuration.phase_count"),this.updateConfiguration(n,"configuration.channels")}}},k={class:"device-enecess-ecomain-inverter"};function M(e,t,n,a,p,o){const l=h("openwb-base-heading"),s=h("openwb-base-select-input"),b=h("openwb-base-checkbox-input"),w=h("openwb-base-alert");return d(),g("div",k,[i(l,null,{default:m(()=>[...t[1]||(t[1]=[f(" Einstellungen für EcoMain Wechselrichter ",-1)])]),_:1}),i(s,{title:"Phasenanzahl",required:"",options:[{value:1,text:"Einphasig"},{value:3,text:"Dreiphasig"}],"model-value":e.component.configuration.phase_count,"onUpdate:modelValue":o.changePhaseCount},null,8,["model-value","onUpdate:modelValue"]),i(b,{title:"Messrichtung invertieren","model-value":e.component.configuration.invert,"onUpdate:modelValue":t[0]||(t[0]=r=>e.updateConfiguration(r,"configuration.invert"))},{help:m(()=>[...t[2]||(t[2]=[f(" Aktivieren, wenn die Stromwandler entgegen der vorgesehenen Messrichtung montiert wurden. ",-1)])]),_:1},8,["model-value"]),(d(!0),g(v,null,V(e.component.configuration.channels,(r,u)=>(d(),g(v,{key:u},[i(l,null,{default:m(()=>[f(" Kanal "+_(u+1),1)]),_:2},1024),i(s,{title:"Phase",required:"",options:[{value:1,text:"L1"},{value:2,text:"L2"},{value:3,text:"L3"}],"model-value":r.phase,"onUpdate:modelValue":c=>o.updateChannel(u,"phase",c)},null,8,["model-value","onUpdate:modelValue"]),i(s,{title:"Quelle",required:"",options:[{value:0,text:"Hauptgerät"},{value:1,text:"Slave 1"},{value:2,text:"Slave 2"},{value:3,text:"Slave 3"}],"model-value":r.source,"onUpdate:modelValue":c=>o.updateChannel(u,"source",c)},null,8,["model-value","onUpdate:modelValue"]),i(s,{title:"Kanal",required:"",options:o.channelOptions,"model-value":r.channel,"onUpdate:modelValue":c=>o.updateChannel(u,"channel",c)},null,8,["options","model-value","onUpdate:modelValue"])],64))),128)),o.validationError?(d(),x(w,{key:0,subtype:"danger"},{default:m(()=>[f(_(o.validationError),1)]),_:1})):L("",!0)])}const N=E(S,[["render",M],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/enecess/ecomain/inverter.vue"]]);export{N as default}; diff --git a/web/settings/assets/inverter-fs5ob91Q.js b/web/settings/assets/inverter-CrSs7KEe.js similarity index 81% rename from web/settings/assets/inverter-fs5ob91Q.js rename to web/settings/assets/inverter-CrSs7KEe.js index 80d882cbd0..39068a28ed 100644 --- a/web/settings/assets/inverter-fs5ob91Q.js +++ b/web/settings/assets/inverter-CrSs7KEe.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as a,m as n,l as m,f as l,q as t,u,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSolisInverter",mixins:[p]},_={class:"device-solis-inverter"};function f(o,e,b,v,g,w){const i=n("openwb-base-heading"),s=n("openwb-base-number-input");return m(),l("div",_,[t(i,null,{default:u(()=>[...e[1]||(e[1]=[d(" Einstellungen für Solis Wechselrichter ",-1)])]),_:1}),t(s,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=r=>o.updateConfiguration(r,"configuration.modbus_id"))},null,8,["model-value"])])}const E=a(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solis/solis/inverter.vue"]]);export{E as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as a,m as n,l as m,f as l,q as t,u,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSolisInverter",mixins:[p]},_={class:"device-solis-inverter"};function f(o,e,b,v,g,w){const i=n("openwb-base-heading"),s=n("openwb-base-number-input");return m(),l("div",_,[t(i,null,{default:u(()=>[...e[1]||(e[1]=[d(" Einstellungen für Solis Wechselrichter ",-1)])]),_:1}),t(s,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=r=>o.updateConfiguration(r,"configuration.modbus_id"))},null,8,["model-value"])])}const E=a(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solis/solis/inverter.vue"]]);export{E as default}; diff --git a/web/settings/assets/inverter-ldOqf1dz.js b/web/settings/assets/inverter-CtXYfZIc.js similarity index 88% rename from web/settings/assets/inverter-ldOqf1dz.js rename to web/settings/assets/inverter-CtXYfZIc.js index bbdaa346d4..397b5b5306 100644 --- a/web/settings/assets/inverter-ldOqf1dz.js +++ b/web/settings/assets/inverter-CtXYfZIc.js @@ -1 +1 @@ -import{C as a}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as p,m as n,l as m,f as d,q as t,u as l,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSolaredgeInverter",mixins:[a]},_={class:"device-solaredge-inverter"};function f(o,e,g,b,v,w){const r=n("openwb-base-heading"),i=n("openwb-base-number-input");return m(),d("div",_,[t(r,null,{default:l(()=>[...e[1]||(e[1]=[u(" Einstellungen für SolarEdge Wechselrichter ",-1)])]),_:1}),t(i,{title:"SolarEdge-Geräte-ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.modbus_id"))},null,8,["model-value"])])}const q=p(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solaredge/solaredge/inverter.vue"]]);export{q as default}; +import{C as a}from"./HardwareInstallation-M-k9qNJb.js";import{_ as p,m as n,l as m,f as d,q as t,u as l,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceSolaredgeInverter",mixins:[a]},_={class:"device-solaredge-inverter"};function f(o,e,g,b,v,w){const r=n("openwb-base-heading"),i=n("openwb-base-number-input");return m(),d("div",_,[t(r,null,{default:l(()=>[...e[1]||(e[1]=[u(" Einstellungen für SolarEdge Wechselrichter ",-1)])]),_:1}),t(i,{title:"SolarEdge-Geräte-ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.modbus_id"))},null,8,["model-value"])])}const q=p(c,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solaredge/solaredge/inverter.vue"]]);export{q as default}; diff --git a/web/settings/assets/inverter-CIAtxhWQ.js b/web/settings/assets/inverter-CvTg-i8P.js similarity index 80% rename from web/settings/assets/inverter-CIAtxhWQ.js rename to web/settings/assets/inverter-CvTg-i8P.js index b3279633f2..544d9bf641 100644 --- a/web/settings/assets/inverter-CIAtxhWQ.js +++ b/web/settings/assets/inverter-CvTg-i8P.js @@ -1 +1 @@ -import{C as e}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as n,l as t,f as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const o={name:"DeviceBenningInverter",mixins:[e]},r={class:"device-benning-inverter"};function s(p,c,m,a,_,f){return t(),i("div",r)}const C=n(o,[["render",s],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/benning/benning/inverter.vue"]]);export{C as default}; +import{C as e}from"./HardwareInstallation-M-k9qNJb.js";import{_ as n,l as t,f as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const o={name:"DeviceBenningInverter",mixins:[e]},r={class:"device-benning-inverter"};function s(p,c,m,a,_,f){return t(),i("div",r)}const C=n(o,[["render",s],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/benning/benning/inverter.vue"]]);export{C as default}; diff --git a/web/settings/assets/inverter-DegAEuIC.js b/web/settings/assets/inverter-D5BodfIi.js similarity index 91% rename from web/settings/assets/inverter-DegAEuIC.js rename to web/settings/assets/inverter-D5BodfIi.js index 910fdca0fe..16687ba103 100644 --- a/web/settings/assets/inverter-DegAEuIC.js +++ b/web/settings/assets/inverter-D5BodfIi.js @@ -1 +1 @@ -import{C as u}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as m,m as r,l as d,f as g,q as o,u as l,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const f={name:"DeviceVZLoggerInverter",mixins:[u]},_={class:"device-vzlogger-inverter"};function c(n,e,v,b,w,Z){const a=r("openwb-base-heading"),p=r("openwb-base-alert"),i=r("openwb-base-number-input");return d(),g("div",_,[o(a,null,{default:l(()=>[...e[2]||(e[2]=[s(" Einstellungen für VZLogger Wechselrichter ",-1)])]),_:1}),o(p,{subtype:"info"},{default:l(()=>[...e[3]||(e[3]=[s(' Bitte auf der Shell ausführen: "curl -s IPdesVZLogger:Port | jq .|cat -n" Zählen, in welcher Zeile der gesuchte Wert steht. Bei der ersten Zeile mit 1 anfangen zu zählen. ',-1)])]),_:1}),o(i,{title:"Zeile der Leistung",required:"",min:0,"model-value":n.component.configuration.line_power,"onUpdate:modelValue":e[0]||(e[0]=t=>n.updateConfiguration(t,"configuration.line_power"))},null,8,["model-value"]),o(i,{title:"Zeile der exportierten Energie (Ertrag)",min:0,"model-value":n.component.configuration.line_exported,"onUpdate:modelValue":e[1]||(e[1]=t=>n.updateConfiguration(t,"configuration.line_exported"))},null,8,["model-value"])])}const q=m(f,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/vzlogger/vzlogger/inverter.vue"]]);export{q as default}; +import{C as u}from"./HardwareInstallation-M-k9qNJb.js";import{_ as m,m as r,l as d,f as g,q as o,u as l,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const f={name:"DeviceVZLoggerInverter",mixins:[u]},_={class:"device-vzlogger-inverter"};function c(n,e,v,b,w,Z){const a=r("openwb-base-heading"),p=r("openwb-base-alert"),i=r("openwb-base-number-input");return d(),g("div",_,[o(a,null,{default:l(()=>[...e[2]||(e[2]=[s(" Einstellungen für VZLogger Wechselrichter ",-1)])]),_:1}),o(p,{subtype:"info"},{default:l(()=>[...e[3]||(e[3]=[s(' Bitte auf der Shell ausführen: "curl -s IPdesVZLogger:Port | jq .|cat -n" Zählen, in welcher Zeile der gesuchte Wert steht. Bei der ersten Zeile mit 1 anfangen zu zählen. ',-1)])]),_:1}),o(i,{title:"Zeile der Leistung",required:"",min:0,"model-value":n.component.configuration.line_power,"onUpdate:modelValue":e[0]||(e[0]=t=>n.updateConfiguration(t,"configuration.line_power"))},null,8,["model-value"]),o(i,{title:"Zeile der exportierten Energie (Ertrag)",min:0,"model-value":n.component.configuration.line_exported,"onUpdate:modelValue":e[1]||(e[1]=t=>n.updateConfiguration(t,"configuration.line_exported"))},null,8,["model-value"])])}const q=m(f,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/vzlogger/vzlogger/inverter.vue"]]);export{q as default}; diff --git a/web/settings/assets/inverter-Ci5gD6Ti.js b/web/settings/assets/inverter-D9Q2ncuJ.js similarity index 89% rename from web/settings/assets/inverter-Ci5gD6Ti.js rename to web/settings/assets/inverter-D9Q2ncuJ.js index 8729126051..92d738ef53 100644 --- a/web/settings/assets/inverter-Ci5gD6Ti.js +++ b/web/settings/assets/inverter-D9Q2ncuJ.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as l,m as n,l as d,f as c,q as t,u as i,B as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const u={name:"DeviceSolarViewInverter",mixins:[p]},_={class:"device-solar-view-inverter"};function f(o,e,v,g,w,b){const s=n("openwb-base-heading"),a=n("openwb-base-text-input");return d(),c("div",_,[t(s,null,{default:i(()=>[...e[1]||(e[1]=[r(" Einstellungen für SolarView Wechselrichter ",-1)])]),_:1}),t(a,{title:"Kommando für die Abfrage",required:"","model-value":o.component.configuration.command,"onUpdate:modelValue":e[0]||(e[0]=m=>o.updateConfiguration(m,"configuration.command"))},{help:i(()=>[...e[2]||(e[2]=[r(" Kommandos gemäß SolarView-Dokumentation, z.B.: 00* (gesamte Anlage), 01* (Wechselrichter 1), 02* (Wechselrichter 2) ",-1)])]),_:1},8,["model-value"])])}const q=l(u,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solar_view/solar_view/inverter.vue"]]);export{q as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as l,m as n,l as d,f as c,q as t,u as i,B as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const u={name:"DeviceSolarViewInverter",mixins:[p]},_={class:"device-solar-view-inverter"};function f(o,e,v,g,w,b){const s=n("openwb-base-heading"),a=n("openwb-base-text-input");return d(),c("div",_,[t(s,null,{default:i(()=>[...e[1]||(e[1]=[r(" Einstellungen für SolarView Wechselrichter ",-1)])]),_:1}),t(a,{title:"Kommando für die Abfrage",required:"","model-value":o.component.configuration.command,"onUpdate:modelValue":e[0]||(e[0]=m=>o.updateConfiguration(m,"configuration.command"))},{help:i(()=>[...e[2]||(e[2]=[r(" Kommandos gemäß SolarView-Dokumentation, z.B.: 00* (gesamte Anlage), 01* (Wechselrichter 1), 02* (Wechselrichter 2) ",-1)])]),_:1},8,["model-value"])])}const q=l(u,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solar_view/solar_view/inverter.vue"]]);export{q as default}; diff --git a/web/settings/assets/inverter-cbej_kAy.js b/web/settings/assets/inverter-DUQFRbCE.js similarity index 80% rename from web/settings/assets/inverter-cbej_kAy.js rename to web/settings/assets/inverter-DUQFRbCE.js index 931216834a..7616de715b 100644 --- a/web/settings/assets/inverter-cbej_kAy.js +++ b/web/settings/assets/inverter-DUQFRbCE.js @@ -1 +1 @@ -import{C as e}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as t,l as o,f as n}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const r={name:"DeviceOpenDTUInverter",mixins:[e]},i={class:"device-opendtu-inverter"};function p(s,c,m,a,_,d){return o(),n("div",i)}const h=t(r,[["render",p],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/opendtu/opendtu/inverter.vue"]]);export{h as default}; +import{C as e}from"./HardwareInstallation-M-k9qNJb.js";import{_ as t,l as o,f as n}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const r={name:"DeviceOpenDTUInverter",mixins:[e]},i={class:"device-opendtu-inverter"};function p(s,c,m,a,_,d){return o(),n("div",i)}const h=t(r,[["render",p],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/opendtu/opendtu/inverter.vue"]]);export{h as default}; diff --git a/web/settings/assets/inverter-nGKS2t5a.js b/web/settings/assets/inverter-DWPT4O18.js similarity index 88% rename from web/settings/assets/inverter-nGKS2t5a.js rename to web/settings/assets/inverter-DWPT4O18.js index 92d3b95954..83f09c5d8b 100644 --- a/web/settings/assets/inverter-nGKS2t5a.js +++ b/web/settings/assets/inverter-DWPT4O18.js @@ -1 +1 @@ -import{C as a}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as m,m as n,l as p,f as u,q as t,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceHuaweiSmartLoggerInverter",mixins:[a]},_={class:"device-huawei-smart-logger-inverter"};function g(o,e,f,b,v,w){const i=n("openwb-base-heading"),r=n("openwb-base-number-input");return p(),u("div",_,[t(i,null,{default:d(()=>[...e[1]||(e[1]=[l(" Einstellungen für Huawei SmartLogger Wechselrichter ",-1)])]),_:1}),t(r,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.modbus_id"))},null,8,["model-value"])])}const E=m(c,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/huawei/huawei_smartlogger/inverter.vue"]]);export{E as default}; +import{C as a}from"./HardwareInstallation-M-k9qNJb.js";import{_ as m,m as n,l as p,f as u,q as t,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const c={name:"DeviceHuaweiSmartLoggerInverter",mixins:[a]},_={class:"device-huawei-smart-logger-inverter"};function g(o,e,f,b,v,w){const i=n("openwb-base-heading"),r=n("openwb-base-number-input");return p(),u("div",_,[t(i,null,{default:d(()=>[...e[1]||(e[1]=[l(" Einstellungen für Huawei SmartLogger Wechselrichter ",-1)])]),_:1}),t(r,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.modbus_id"))},null,8,["model-value"])])}const E=m(c,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/huawei/huawei_smartlogger/inverter.vue"]]);export{E as default}; diff --git a/web/settings/assets/inverter-C52-BkWD.js b/web/settings/assets/inverter-DyV-lL89.js similarity index 84% rename from web/settings/assets/inverter-C52-BkWD.js rename to web/settings/assets/inverter-DyV-lL89.js index d00fbeb009..ae8199be1c 100644 --- a/web/settings/assets/inverter-C52-BkWD.js +++ b/web/settings/assets/inverter-DyV-lL89.js @@ -1 +1 @@ -import{C as r}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as p,m as o,l,f as u,q as n,u as c,B as m}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceKostalStecaInverter",mixins:[r]},_={class:"device-kostal-steca-inverter"};function f(t,e,v,b,g,k){const a=o("openwb-base-heading"),i=o("openwb-base-button-group-input");return l(),u("div",_,[n(a,null,{default:c(()=>[...e[1]||(e[1]=[m(" Einstellungen für Kostal Piko MP oder Steca Grid Coolcept Wechselrichter ",-1)])]),_:1}),n(i,{title:"Variante",buttons:[{buttonValue:!1,text:"Kostal Piko MP (non-plus)"},{buttonValue:!0,text:"Kostal Piko MP oder Steca Grid Coolcept"}],"model-value":t.component.configuration.variant_steca,"onUpdate:modelValue":e[0]||(e[0]=s=>t.updateConfiguration(s,"configuration.variant_steca"))},null,8,["model-value"])])}const h=p(d,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/kostal/kostal_steca/inverter.vue"]]);export{h as default}; +import{C as r}from"./HardwareInstallation-M-k9qNJb.js";import{_ as p,m as o,l,f as u,q as n,u as c,B as m}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceKostalStecaInverter",mixins:[r]},_={class:"device-kostal-steca-inverter"};function f(t,e,v,b,g,k){const a=o("openwb-base-heading"),i=o("openwb-base-button-group-input");return l(),u("div",_,[n(a,null,{default:c(()=>[...e[1]||(e[1]=[m(" Einstellungen für Kostal Piko MP oder Steca Grid Coolcept Wechselrichter ",-1)])]),_:1}),n(i,{title:"Variante",buttons:[{buttonValue:!1,text:"Kostal Piko MP (non-plus)"},{buttonValue:!0,text:"Kostal Piko MP oder Steca Grid Coolcept"}],"model-value":t.component.configuration.variant_steca,"onUpdate:modelValue":e[0]||(e[0]=s=>t.updateConfiguration(s,"configuration.variant_steca"))},null,8,["model-value"])])}const h=p(d,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/kostal/kostal_steca/inverter.vue"]]);export{h as default}; diff --git a/web/settings/assets/inverter-DRqfc3BL.js b/web/settings/assets/inverter-JP7I-dv9.js similarity index 88% rename from web/settings/assets/inverter-DRqfc3BL.js rename to web/settings/assets/inverter-JP7I-dv9.js index f2fb8ca9c8..b7774f6fb9 100644 --- a/web/settings/assets/inverter-DRqfc3BL.js +++ b/web/settings/assets/inverter-JP7I-dv9.js @@ -1 +1 @@ -import{C as a}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as p,m as t,l as u,f as l,q as n,u as m,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceKostalPikoInverter",mixins:[a]},_={class:"device-kostal-piko-inverter"};function f(o,e,b,v,g,k){const i=t("openwb-base-heading"),r=t("openwb-base-button-group-input");return u(),l("div",_,[n(i,null,{default:m(()=>[...e[1]||(e[1]=[c(" Einstellungen für Kostal Piko Wechselrichter ",-1)])]),_:1}),n(r,{title:"Speicher",buttons:[{buttonValue:!1,text:"nicht vorhanden"},{buttonValue:!0,text:"vorhanden"}],"model-value":o.component.configuration.bat_configured,"onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.bat_configured"))},null,8,["model-value"])])}const N=p(d,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/kostal/kostal_piko/inverter.vue"]]);export{N as default}; +import{C as a}from"./HardwareInstallation-M-k9qNJb.js";import{_ as p,m as t,l as u,f as l,q as n,u as m,B as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceKostalPikoInverter",mixins:[a]},_={class:"device-kostal-piko-inverter"};function f(o,e,b,v,g,k){const i=t("openwb-base-heading"),r=t("openwb-base-button-group-input");return u(),l("div",_,[n(i,null,{default:m(()=>[...e[1]||(e[1]=[c(" Einstellungen für Kostal Piko Wechselrichter ",-1)])]),_:1}),n(r,{title:"Speicher",buttons:[{buttonValue:!1,text:"nicht vorhanden"},{buttonValue:!0,text:"vorhanden"}],"model-value":o.component.configuration.bat_configured,"onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.bat_configured"))},null,8,["model-value"])])}const N=p(d,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/kostal/kostal_piko/inverter.vue"]]);export{N as default}; diff --git a/web/settings/assets/inverter-DY7Mgnuo.js b/web/settings/assets/inverter-R8XihLvk.js similarity index 87% rename from web/settings/assets/inverter-DY7Mgnuo.js rename to web/settings/assets/inverter-R8XihLvk.js index 5348a3a5f4..df0686b0ce 100644 --- a/web/settings/assets/inverter-DY7Mgnuo.js +++ b/web/settings/assets/inverter-R8XihLvk.js @@ -1 +1 @@ -import{C as s}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as p,m as n,l as m,f as c,q as t,u as l,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceKacoNHInverter",mixins:[s]},_={class:"device-kaco-nh-inverter"};function f(o,e,v,b,g,w){const i=n("openwb-base-heading"),r=n("openwb-base-number-input");return m(),c("div",_,[t(i,null,{default:l(()=>[...e[1]||(e[1]=[u(" Einstellungen für Kaco NH Wechselrichter ",-1)])]),_:1}),t(r,{title:"ID",required:"",min:"0",max:"65535","model-value":o.component.configuration.id,"onUpdate:modelValue":e[0]||(e[0]=a=>o.updateConfiguration(a,"configuration.id"))},null,8,["model-value"])])}const D=p(d,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/kaco/kaco_nh/inverter.vue"]]);export{D as default}; +import{C as s}from"./HardwareInstallation-M-k9qNJb.js";import{_ as p,m as n,l as m,f as c,q as t,u as l,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const d={name:"DeviceKacoNHInverter",mixins:[s]},_={class:"device-kaco-nh-inverter"};function f(o,e,v,b,g,w){const i=n("openwb-base-heading"),r=n("openwb-base-number-input");return m(),c("div",_,[t(i,null,{default:l(()=>[...e[1]||(e[1]=[u(" Einstellungen für Kaco NH Wechselrichter ",-1)])]),_:1}),t(r,{title:"ID",required:"",min:"0",max:"65535","model-value":o.component.configuration.id,"onUpdate:modelValue":e[0]||(e[0]=a=>o.updateConfiguration(a,"configuration.id"))},null,8,["model-value"])])}const D=p(d,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/kaco/kaco_nh/inverter.vue"]]);export{D as default}; diff --git a/web/settings/assets/inverter-BDS1q9FY.js b/web/settings/assets/inverter-SRAKxWUU.js similarity index 91% rename from web/settings/assets/inverter-BDS1q9FY.js rename to web/settings/assets/inverter-SRAKxWUU.js index 3cc669ef26..9c65bbda49 100644 --- a/web/settings/assets/inverter-BDS1q9FY.js +++ b/web/settings/assets/inverter-SRAKxWUU.js @@ -1 +1 @@ -import{C as s}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as d,m as n,l as m,f as c,q as r,u as i,B as a}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceStuderInverter",mixins:[s]},b={class:"device-studer-inverter"};function v(t,e,f,g,V,S){const u=n("openwb-base-heading"),p=n("openwb-base-button-group-input"),l=n("openwb-base-number-input");return m(),c("div",b,[r(u,null,{default:i(()=>[...e[2]||(e[2]=[a(" Einstellungen für Studer Wechselrichter ",-1)])]),_:1}),r(p,{title:"Typ der MPPT Solarladeregler",buttons:[{buttonValue:"VT",text:"Variotrack (VT-40/VT-65/VT-80)"},{buttonValue:"VS",text:"VarioString (VS-70/VS-120)"}],"model-value":t.component.configuration.vc_type,required:"","onUpdate:modelValue":e[0]||(e[0]=o=>t.updateConfiguration(o,"configuration.vc_type"))},null,8,["model-value"]),r(l,{title:"Anzahl MPPT Solarladeregler",required:"",min:1,max:9,"model-value":t.component.configuration.vc_count,"onUpdate:modelValue":e[1]||(e[1]=o=>t.updateConfiguration(o,"configuration.vc_count"))},{help:i(()=>[...e[3]||(e[3]=[a(" Anzahl (1-9) der Studer MPPT Solarladeregler im System (VS/VT) ",-1)])]),_:1},8,["model-value"])])}const k=d(_,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/studer/studer/inverter.vue"]]);export{k as default}; +import{C as s}from"./HardwareInstallation-M-k9qNJb.js";import{_ as d,m as n,l as m,f as c,q as r,u as i,B as a}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceStuderInverter",mixins:[s]},b={class:"device-studer-inverter"};function v(t,e,f,g,V,S){const u=n("openwb-base-heading"),p=n("openwb-base-button-group-input"),l=n("openwb-base-number-input");return m(),c("div",b,[r(u,null,{default:i(()=>[...e[2]||(e[2]=[a(" Einstellungen für Studer Wechselrichter ",-1)])]),_:1}),r(p,{title:"Typ der MPPT Solarladeregler",buttons:[{buttonValue:"VT",text:"Variotrack (VT-40/VT-65/VT-80)"},{buttonValue:"VS",text:"VarioString (VS-70/VS-120)"}],"model-value":t.component.configuration.vc_type,required:"","onUpdate:modelValue":e[0]||(e[0]=o=>t.updateConfiguration(o,"configuration.vc_type"))},null,8,["model-value"]),r(l,{title:"Anzahl MPPT Solarladeregler",required:"",min:1,max:9,"model-value":t.component.configuration.vc_count,"onUpdate:modelValue":e[1]||(e[1]=o=>t.updateConfiguration(o,"configuration.vc_count"))},{help:i(()=>[...e[3]||(e[3]=[a(" Anzahl (1-9) der Studer MPPT Solarladeregler im System (VS/VT) ",-1)])]),_:1},8,["model-value"])])}const k=d(_,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/studer/studer/inverter.vue"]]);export{k as default}; diff --git a/web/settings/assets/inverter-BhwdqJVC.js b/web/settings/assets/inverter-TK6MuB-M.js similarity index 95% rename from web/settings/assets/inverter-BhwdqJVC.js rename to web/settings/assets/inverter-TK6MuB-M.js index 6a567e1ded..e1f67e24d2 100644 --- a/web/settings/assets/inverter-BhwdqJVC.js +++ b/web/settings/assets/inverter-TK6MuB-M.js @@ -1 +1 @@ -import{C as s}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as d,m as a,l as p,f as m,q as o,u as l,B as i,y as f}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const g={name:"DeviceJsonInverter",mixins:[s]},b={class:"device-json-inverter"};function v(n,e,w,c,j,_){const u=a("openwb-base-heading"),r=a("openwb-base-text-input");return p(),m("div",b,[o(u,null,{default:l(()=>[...e[5]||(e[5]=[i(" Einstellungen für JSON Wechselrichter ",-1)])]),_:1}),o(r,{title:"Abfrage für Leistung",subtype:"text",required:"","model-value":n.component.configuration.jq_power,"onUpdate:modelValue":e[0]||(e[0]=t=>n.updateConfiguration(t,"configuration.jq_power"))},{help:l(()=>[...e[6]||(e[6]=[i(' Zur Analyse der Werte aus dem json-Objekt wird jq benutzt. Ist die Json Antwort z.B. {"PowerInstalledPeak":4655, "PowerProduced":132, "PowerOut":897.08172362555717, "PowerSelfSupplied":234.9182763744428} So muss hier .PowerOut eingetragen werden. ',-1),f("br",null,null,-1),i(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Leistung in Watt darstellt. Produzierte Leistung muss ein negatives Vorzeichen haben. (In bestimmten Konstellationen, z.B. wenn ein Hybridsystem über einen zweiten Wechselrichter geladen wird, hat die Leistung ein positives Vorzeichen.) ",-1)])]),_:1},8,["model-value"]),o(r,{title:"Abfrage für Zählerstand",subtype:"text","model-value":n.component.configuration.jq_exported,"onUpdate:modelValue":e[1]||(e[1]=t=>n.updateConfiguration(t,"configuration.jq_exported"))},{help:l(()=>[...e[7]||(e[7]=[i(" Wird dieses Feld leer gelassen, dann werden Zählerstände intern simuliert. ",-1)])]),_:1},8,["model-value"]),o(r,{title:"Abfrage für Strom auf Phase 1",subtype:"text","model-value":n.component.configuration.jq_current_l1,"onUpdate:modelValue":e[2]||(e[2]=t=>n.updateConfiguration(t,"configuration.jq_current_l1"))},null,8,["model-value"]),o(r,{title:"Abfrage für Strom auf Phase 2",subtype:"text","model-value":n.component.configuration.jq_current_l2,"onUpdate:modelValue":e[3]||(e[3]=t=>n.updateConfiguration(t,"configuration.jq_current_l2"))},null,8,["model-value"]),o(r,{title:"Abfrage für Strom auf Phase 3",subtype:"text","model-value":n.component.configuration.jq_current_l3,"onUpdate:modelValue":e[4]||(e[4]=t=>n.updateConfiguration(t,"configuration.jq_current_l3"))},null,8,["model-value"])])}const A=d(g,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/json/inverter.vue"]]);export{A as default}; +import{C as s}from"./HardwareInstallation-M-k9qNJb.js";import{_ as d,m as a,l as p,f as m,q as o,u as l,B as i,y as f}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const g={name:"DeviceJsonInverter",mixins:[s]},b={class:"device-json-inverter"};function v(n,e,w,c,j,_){const u=a("openwb-base-heading"),r=a("openwb-base-text-input");return p(),m("div",b,[o(u,null,{default:l(()=>[...e[5]||(e[5]=[i(" Einstellungen für JSON Wechselrichter ",-1)])]),_:1}),o(r,{title:"Abfrage für Leistung",subtype:"text",required:"","model-value":n.component.configuration.jq_power,"onUpdate:modelValue":e[0]||(e[0]=t=>n.updateConfiguration(t,"configuration.jq_power"))},{help:l(()=>[...e[6]||(e[6]=[i(' Zur Analyse der Werte aus dem json-Objekt wird jq benutzt. Ist die Json Antwort z.B. {"PowerInstalledPeak":4655, "PowerProduced":132, "PowerOut":897.08172362555717, "PowerSelfSupplied":234.9182763744428} So muss hier .PowerOut eingetragen werden. ',-1),f("br",null,null,-1),i(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Leistung in Watt darstellt. Produzierte Leistung muss ein negatives Vorzeichen haben. (In bestimmten Konstellationen, z.B. wenn ein Hybridsystem über einen zweiten Wechselrichter geladen wird, hat die Leistung ein positives Vorzeichen.) ",-1)])]),_:1},8,["model-value"]),o(r,{title:"Abfrage für Zählerstand",subtype:"text","model-value":n.component.configuration.jq_exported,"onUpdate:modelValue":e[1]||(e[1]=t=>n.updateConfiguration(t,"configuration.jq_exported"))},{help:l(()=>[...e[7]||(e[7]=[i(" Wird dieses Feld leer gelassen, dann werden Zählerstände intern simuliert. ",-1)])]),_:1},8,["model-value"]),o(r,{title:"Abfrage für Strom auf Phase 1",subtype:"text","model-value":n.component.configuration.jq_current_l1,"onUpdate:modelValue":e[2]||(e[2]=t=>n.updateConfiguration(t,"configuration.jq_current_l1"))},null,8,["model-value"]),o(r,{title:"Abfrage für Strom auf Phase 2",subtype:"text","model-value":n.component.configuration.jq_current_l2,"onUpdate:modelValue":e[3]||(e[3]=t=>n.updateConfiguration(t,"configuration.jq_current_l2"))},null,8,["model-value"]),o(r,{title:"Abfrage für Strom auf Phase 3",subtype:"text","model-value":n.component.configuration.jq_current_l3,"onUpdate:modelValue":e[4]||(e[4]=t=>n.updateConfiguration(t,"configuration.jq_current_l3"))},null,8,["model-value"])])}const A=d(g,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/generic/json/inverter.vue"]]);export{A as default}; diff --git a/web/settings/assets/inverter-DwjEHaq5.js b/web/settings/assets/inverter-Wr7p7n3V.js similarity index 92% rename from web/settings/assets/inverter-DwjEHaq5.js rename to web/settings/assets/inverter-Wr7p7n3V.js index 7b3531e777..82b24b3e00 100644 --- a/web/settings/assets/inverter-DwjEHaq5.js +++ b/web/settings/assets/inverter-Wr7p7n3V.js @@ -1 +1 @@ -import{C as p}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as l,m as t,l as m,f as b,q as r,u as i,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const f={name:"DeviceSunnyBoyInverter",mixins:[p]},v={class:"device-sunnyboy-inverter"};function _(n,e,c,g,C,w){const a=t("openwb-base-heading"),u=t("openwb-base-select-input"),d=t("openwb-base-number-input");return m(),b("div",v,[r(a,null,{default:i(()=>[...e[2]||(e[2]=[s(" Einstellungen für SMA Sunny Boy / Tripower Wechselrichter ",-1)])]),_:1}),r(u,{title:"Version","not-selected":"Bitte auswählen",options:[{value:0,text:"Standard"},{value:1,text:"Core-2"},{value:2,text:"Data Manager/Cluster Controller"}],"model-value":n.component.configuration.version,required:"","onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.version"))},null,8,["model-value"]),r(d,{title:"Modbus ID",required:"","model-value":n.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.modbus_id"))},{help:i(()=>[...e[3]||(e[3]=[s(" Für die Standardversion ist die Standardmodbus-ID 3, für Core-2 ist sie 1 und für Data Manager/Cluster Controller 2. Wurde eine abweichende Modbus ID konfiguriert, entsprechend anpassen. ",-1)])]),_:1},8,["model-value"])])}const h=l(f,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/sma/sma_sunny_boy/inverter.vue"]]);export{h as default}; +import{C as p}from"./HardwareInstallation-M-k9qNJb.js";import{_ as l,m as t,l as m,f as b,q as r,u as i,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const f={name:"DeviceSunnyBoyInverter",mixins:[p]},v={class:"device-sunnyboy-inverter"};function _(n,e,c,g,C,w){const a=t("openwb-base-heading"),u=t("openwb-base-select-input"),d=t("openwb-base-number-input");return m(),b("div",v,[r(a,null,{default:i(()=>[...e[2]||(e[2]=[s(" Einstellungen für SMA Sunny Boy / Tripower Wechselrichter ",-1)])]),_:1}),r(u,{title:"Version","not-selected":"Bitte auswählen",options:[{value:0,text:"Standard"},{value:1,text:"Core-2"},{value:2,text:"Data Manager/Cluster Controller"}],"model-value":n.component.configuration.version,required:"","onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.version"))},null,8,["model-value"]),r(d,{title:"Modbus ID",required:"","model-value":n.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.modbus_id"))},{help:i(()=>[...e[3]||(e[3]=[s(" Für die Standardversion ist die Standardmodbus-ID 3, für Core-2 ist sie 1 und für Data Manager/Cluster Controller 2. Wurde eine abweichende Modbus ID konfiguriert, entsprechend anpassen. ",-1)])]),_:1},8,["model-value"])])}const h=l(f,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/sma/sma_sunny_boy/inverter.vue"]]);export{h as default}; diff --git a/web/settings/assets/inverter-BoZH5Xyl.js b/web/settings/assets/inverter-Y1PklCXz.js similarity index 90% rename from web/settings/assets/inverter-BoZH5Xyl.js rename to web/settings/assets/inverter-Y1PklCXz.js index 4d29d0c191..7902fbfbcb 100644 --- a/web/settings/assets/inverter-BoZH5Xyl.js +++ b/web/settings/assets/inverter-Y1PklCXz.js @@ -1 +1 @@ -import{C as l}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as u,m as n,l as d,f as c,q as o,u as r,B as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceSmahmInverter",mixins:[l]},f={class:"device-smahm-inverter"};function b(t,e,v,g,h,w){const s=n("openwb-base-heading"),a=n("openwb-base-alert"),m=n("openwb-base-number-input");return d(),c("div",f,[o(s,null,{default:r(()=>[...e[1]||(e[1]=[i(" Einstellungen für SMA-HM/EM Wechselrichter ",-1)])]),_:1}),o(a,{subtype:"info"},{default:r(()=>[...e[2]||(e[2]=[i(' Dies ist nur die richtige Komponente, wenn ein extra EnergyMeter ausschließlich für die PV-Messung vorhanden ist. Wenn nur ein HomeManager vorhanden ist, muss ein Gerät "SMA Sunny Boy" mit der entsprechenden Wechselrichter-Komponente angelegt werden. ',-1)])]),_:1}),o(m,{title:"Seriennummer",required:"","model-value":t.component.configuration.serials,"onUpdate:modelValue":e[0]||(e[0]=p=>t.updateConfiguration(p,"configuration.serials"))},null,8,["model-value"])])}const $=u(_,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/sma/sma_shm/inverter.vue"]]);export{$ as default}; +import{C as l}from"./HardwareInstallation-M-k9qNJb.js";import{_ as u,m as n,l as d,f as c,q as o,u as r,B as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceSmahmInverter",mixins:[l]},f={class:"device-smahm-inverter"};function b(t,e,v,g,h,w){const s=n("openwb-base-heading"),a=n("openwb-base-alert"),m=n("openwb-base-number-input");return d(),c("div",f,[o(s,null,{default:r(()=>[...e[1]||(e[1]=[i(" Einstellungen für SMA-HM/EM Wechselrichter ",-1)])]),_:1}),o(a,{subtype:"info"},{default:r(()=>[...e[2]||(e[2]=[i(' Dies ist nur die richtige Komponente, wenn ein extra EnergyMeter ausschließlich für die PV-Messung vorhanden ist. Wenn nur ein HomeManager vorhanden ist, muss ein Gerät "SMA Sunny Boy" mit der entsprechenden Wechselrichter-Komponente angelegt werden. ',-1)])]),_:1}),o(m,{title:"Seriennummer",required:"","model-value":t.component.configuration.serials,"onUpdate:modelValue":e[0]||(e[0]=p=>t.updateConfiguration(p,"configuration.serials"))},null,8,["model-value"])])}const $=u(_,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/sma/sma_shm/inverter.vue"]]);export{$ as default}; diff --git a/web/settings/assets/inverter-DXGg9_NH.js b/web/settings/assets/inverter-_GY_UkQu.js similarity index 89% rename from web/settings/assets/inverter-DXGg9_NH.js rename to web/settings/assets/inverter-_GY_UkQu.js index 3c0d2469e6..eb989c502d 100644 --- a/web/settings/assets/inverter-DXGg9_NH.js +++ b/web/settings/assets/inverter-_GY_UkQu.js @@ -1 +1 @@ -import{C as m}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as d,m as o,l as u,f as l,q as t,u as i,B as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const g={name:"DeviceSigenergyInverter",mixins:[m]},_={class:"device-sigenergy-inverter"};function c(n,e,b,f,v,w){const s=o("openwb-base-heading"),p=o("openwb-base-number-input");return u(),l("div",_,[t(s,null,{default:i(()=>[...e[1]||(e[1]=[r(" Einstellungen für Sigenergy Wechselrichter ",-1)])]),_:1}),t(p,{title:"Modbus ID",required:"","model-value":n.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=a=>n.updateConfiguration(a,"configuration.modbus_id"))},{help:i(()=>[...e[2]||(e[2]=[r(" Die Standard-Modbus-ID von Sigenergy ist 247 ",-1)])]),_:1},8,["model-value"])])}const V=d(g,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/sigenergy/sigenergy/inverter.vue"]]);export{V as default}; +import{C as m}from"./HardwareInstallation-M-k9qNJb.js";import{_ as d,m as o,l as u,f as l,q as t,u as i,B as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const g={name:"DeviceSigenergyInverter",mixins:[m]},_={class:"device-sigenergy-inverter"};function c(n,e,b,f,v,w){const s=o("openwb-base-heading"),p=o("openwb-base-number-input");return u(),l("div",_,[t(s,null,{default:i(()=>[...e[1]||(e[1]=[r(" Einstellungen für Sigenergy Wechselrichter ",-1)])]),_:1}),t(p,{title:"Modbus ID",required:"","model-value":n.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=a=>n.updateConfiguration(a,"configuration.modbus_id"))},{help:i(()=>[...e[2]||(e[2]=[r(" Die Standard-Modbus-ID von Sigenergy ist 247 ",-1)])]),_:1},8,["model-value"])])}const V=d(g,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/sigenergy/sigenergy/inverter.vue"]]);export{V as default}; diff --git a/web/settings/assets/inverter-ClHZ9qff.js b/web/settings/assets/inverter-_cnPWFFm.js similarity index 92% rename from web/settings/assets/inverter-ClHZ9qff.js rename to web/settings/assets/inverter-_cnPWFFm.js index 0b42d4aac3..f040240e72 100644 --- a/web/settings/assets/inverter-ClHZ9qff.js +++ b/web/settings/assets/inverter-_cnPWFFm.js @@ -1 +1 @@ -import{C as u}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as l,m as t,l as m,f as c,q as r,u as i,B as n,y as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const f={name:"DevicePowerfoxInverter",mixins:[u]},b={class:"device-powerfox-inverter"};function g(o,e,v,w,_,x){const a=t("openwb-base-heading"),p=t("openwb-base-text-input");return m(),c("div",b,[r(a,null,{default:i(()=>[...e[1]||(e[1]=[n(" Einstellungen für Powerfox Wechselrichter ",-1)])]),_:1}),r(p,{title:"ID",required:"","model-value":o.component.configuration.id,"onUpdate:modelValue":e[0]||(e[0]=d=>o.updateConfiguration(d,"configuration.id"))},{help:i(()=>[...e[2]||(e[2]=[n(" Um die ID herauszufinden mit dem Browser die Adresse ",-1),s("a",{href:"https://backend.powerfox.energy/api/2.0/my/all/devices",target:"_blank",rel:"noopener noreferrer"}," https://backend.powerfox.energy/api/2.0/my/all/devices ",-1),n(" aufrufen und dort Benutzername und Passwort eingeben. Die DeviceID ist exakt so einzutragen, wie in der Antwort des Servers. Das bedeutet insbesondere auch, die Groß-/Kleinschreibung ist zu beachten! In dem Feld ist nur die Zeichenfolge direkt hinter ",-1),s("span",{class:"font-weight-bold text-monospace",style:{display:"contents"}},' "DeviceID" ',-1),n(" ohne den Doppelpunkt und Anführungszeichen einzutragen. ",-1)])]),_:1},8,["model-value"])])}const $=l(f,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/powerfox/powerfox/inverter.vue"]]);export{$ as default}; +import{C as u}from"./HardwareInstallation-M-k9qNJb.js";import{_ as l,m as t,l as m,f as c,q as r,u as i,B as n,y as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const f={name:"DevicePowerfoxInverter",mixins:[u]},b={class:"device-powerfox-inverter"};function g(o,e,v,w,_,x){const a=t("openwb-base-heading"),p=t("openwb-base-text-input");return m(),c("div",b,[r(a,null,{default:i(()=>[...e[1]||(e[1]=[n(" Einstellungen für Powerfox Wechselrichter ",-1)])]),_:1}),r(p,{title:"ID",required:"","model-value":o.component.configuration.id,"onUpdate:modelValue":e[0]||(e[0]=d=>o.updateConfiguration(d,"configuration.id"))},{help:i(()=>[...e[2]||(e[2]=[n(" Um die ID herauszufinden mit dem Browser die Adresse ",-1),s("a",{href:"https://backend.powerfox.energy/api/2.0/my/all/devices",target:"_blank",rel:"noopener noreferrer"}," https://backend.powerfox.energy/api/2.0/my/all/devices ",-1),n(" aufrufen und dort Benutzername und Passwort eingeben. Die DeviceID ist exakt so einzutragen, wie in der Antwort des Servers. Das bedeutet insbesondere auch, die Groß-/Kleinschreibung ist zu beachten! In dem Feld ist nur die Zeichenfolge direkt hinter ",-1),s("span",{class:"font-weight-bold text-monospace",style:{display:"contents"}},' "DeviceID" ',-1),n(" ohne den Doppelpunkt und Anführungszeichen einzutragen. ",-1)])]),_:1},8,["model-value"])])}const $=l(f,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/powerfox/powerfox/inverter.vue"]]);export{$ as default}; diff --git a/web/settings/assets/inverter-CQxRN57y.js b/web/settings/assets/inverter-m-w_Sb1C.js similarity index 81% rename from web/settings/assets/inverter-CQxRN57y.js rename to web/settings/assets/inverter-m-w_Sb1C.js index c1cbd1edb4..daf1d9033e 100644 --- a/web/settings/assets/inverter-CQxRN57y.js +++ b/web/settings/assets/inverter-m-w_Sb1C.js @@ -1 +1 @@ -import{C as a}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as p,m as n,l as m,f as c,q as t,u,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const l={name:"DeviceKacoInverter",mixins:[a]},_={class:"device-kaco-inverter"};function f(o,e,b,v,g,x){const i=n("openwb-base-heading"),r=n("openwb-base-number-input");return m(),c("div",_,[t(i,null,{default:u(()=>[...e[1]||(e[1]=[d(" Einstellungen für Kaco Wechselrichter ",-1)])]),_:1}),t(r,{title:"Kaco-Modbus-ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.modbus_id"))},null,8,["model-value"])])}const D=p(l,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/kaco/kaco_tx/inverter.vue"]]);export{D as default}; +import{C as a}from"./HardwareInstallation-M-k9qNJb.js";import{_ as p,m as n,l as m,f as c,q as t,u,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const l={name:"DeviceKacoInverter",mixins:[a]},_={class:"device-kaco-inverter"};function f(o,e,b,v,g,x){const i=n("openwb-base-heading"),r=n("openwb-base-number-input");return m(),c("div",_,[t(i,null,{default:u(()=>[...e[1]||(e[1]=[d(" Einstellungen für Kaco Wechselrichter ",-1)])]),_:1}),t(r,{title:"Kaco-Modbus-ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=s=>o.updateConfiguration(s,"configuration.modbus_id"))},null,8,["model-value"])])}const D=p(l,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/kaco/kaco_tx/inverter.vue"]]);export{D as default}; diff --git a/web/settings/assets/inverter-gZKhptDj.js b/web/settings/assets/inverter-qSzAx1zR.js similarity index 91% rename from web/settings/assets/inverter-gZKhptDj.js rename to web/settings/assets/inverter-qSzAx1zR.js index d7a682f98f..5c583e5104 100644 --- a/web/settings/assets/inverter-gZKhptDj.js +++ b/web/settings/assets/inverter-qSzAx1zR.js @@ -1 +1 @@ -import{C as d}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as m,m as r,l as u,f as c,q as n,u as i,B as o,y as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const v={name:"DeviceDiscovergyInverter",mixins:[d]},f={class:"device-discovergy-inverter"};function g(t,e,_,b,w,y){const s=r("openwb-base-heading"),a=r("openwb-base-text-input");return u(),c("div",f,[n(s,null,{default:i(()=>[...e[1]||(e[1]=[o(" Einstellungen für Discovergy Wechselrichter ",-1)])]),_:1}),n(a,{title:"Meter-ID",required:"","model-value":t.component.configuration.meter_id,"onUpdate:modelValue":e[0]||(e[0]=p=>t.updateConfiguration(p,"configuration.meter_id"))},{help:i(()=>[...e[2]||(e[2]=[o(" Um die ID herauszufinden mit dem Browser die Adresse ",-1),l("a",{href:"https://api.discovergy.com/public/v1/meters",target:"_blank",rel:"noopener noreferrer"}," https://api.discovergy.com/public/v1/meters ",-1),o(" aufrufen und dort Benutzername und Passwort eingeben. Hier wird nun u.a. die ID des Zählers angezeigt. ",-1)])]),_:1},8,["model-value"])])}const z=m(v,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/discovergy/discovergy/inverter.vue"]]);export{z as default}; +import{C as d}from"./HardwareInstallation-M-k9qNJb.js";import{_ as m,m as r,l as u,f as c,q as n,u as i,B as o,y as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const v={name:"DeviceDiscovergyInverter",mixins:[d]},f={class:"device-discovergy-inverter"};function g(t,e,_,b,w,y){const s=r("openwb-base-heading"),a=r("openwb-base-text-input");return u(),c("div",f,[n(s,null,{default:i(()=>[...e[1]||(e[1]=[o(" Einstellungen für Discovergy Wechselrichter ",-1)])]),_:1}),n(a,{title:"Meter-ID",required:"","model-value":t.component.configuration.meter_id,"onUpdate:modelValue":e[0]||(e[0]=p=>t.updateConfiguration(p,"configuration.meter_id"))},{help:i(()=>[...e[2]||(e[2]=[o(" Um die ID herauszufinden mit dem Browser die Adresse ",-1),l("a",{href:"https://api.discovergy.com/public/v1/meters",target:"_blank",rel:"noopener noreferrer"}," https://api.discovergy.com/public/v1/meters ",-1),o(" aufrufen und dort Benutzername und Passwort eingeben. Hier wird nun u.a. die ID des Zählers angezeigt. ",-1)])]),_:1},8,["model-value"])])}const z=m(v,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/discovergy/discovergy/inverter.vue"]]);export{z as default}; diff --git a/web/settings/assets/inverter-g3CWikff.js b/web/settings/assets/inverter-syB6JXhR.js similarity index 88% rename from web/settings/assets/inverter-g3CWikff.js rename to web/settings/assets/inverter-syB6JXhR.js index 831b9cfd20..53aabd6c90 100644 --- a/web/settings/assets/inverter-g3CWikff.js +++ b/web/settings/assets/inverter-syB6JXhR.js @@ -1 +1 @@ -import{C as a}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as d,m as n,l as u,f as c,q as t,u as i,B as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const l={name:"DeviceMTecInverter",mixins:[a]},_={class:"device-mtec-inverter"};function b(o,e,f,v,g,w){const s=n("openwb-base-heading"),m=n("openwb-base-number-input");return u(),c("div",_,[t(s,null,{default:i(()=>[...e[1]||(e[1]=[r(" Einstellungen für M-Tec Wechselrichter ",-1)])]),_:1}),t(m,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=p=>o.updateConfiguration(p,"configuration.modbus_id"))},{help:i(()=>[...e[2]||(e[2]=[r(" Die Standard-Modbus-ID von M-Tec ist 247 ",-1)])]),_:1},8,["model-value"])])}const h=d(l,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/mtec/mtec/inverter.vue"]]);export{h as default}; +import{C as a}from"./HardwareInstallation-M-k9qNJb.js";import{_ as d,m as n,l as u,f as c,q as t,u as i,B as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const l={name:"DeviceMTecInverter",mixins:[a]},_={class:"device-mtec-inverter"};function b(o,e,f,v,g,w){const s=n("openwb-base-heading"),m=n("openwb-base-number-input");return u(),c("div",_,[t(s,null,{default:i(()=>[...e[1]||(e[1]=[r(" Einstellungen für M-Tec Wechselrichter ",-1)])]),_:1}),t(m,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=p=>o.updateConfiguration(p,"configuration.modbus_id"))},{help:i(()=>[...e[2]||(e[2]=[r(" Die Standard-Modbus-ID von M-Tec ist 247 ",-1)])]),_:1},8,["model-value"])])}const h=d(l,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/mtec/mtec/inverter.vue"]]);export{h as default}; diff --git a/web/settings/assets/inverter-CLVuKxRd.js b/web/settings/assets/inverter-wOgKFwTd.js similarity index 83% rename from web/settings/assets/inverter-CLVuKxRd.js rename to web/settings/assets/inverter-wOgKFwTd.js index e62eda3f87..0f5eb17f04 100644 --- a/web/settings/assets/inverter-CLVuKxRd.js +++ b/web/settings/assets/inverter-wOgKFwTd.js @@ -1 +1 @@ -import{C as m}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as d,m as t,l,f as u,q as n,u as i,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceKostalPikoCiInverter",mixins:[m]},c={class:"device-kostal-piko-ci-inverter"};function b(o,e,f,v,k,C){const r=t("openwb-base-heading"),a=t("openwb-base-number-input");return l(),u("div",c,[n(r,null,{default:i(()=>[...e[1]||(e[1]=[s(" Einstellungen für Kostal Piko CI Wechselrichter ",-1)])]),_:1}),n(a,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=p=>o.updateConfiguration(p,"configuration.modbus_id"))},{help:i(()=>[...e[2]||(e[2]=[s(" Die Standard-Modbus-ID von Kostal Piko CI ist 75 ",-1)])]),_:1},8,["model-value"])])}const P=d(_,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/kostal/kostal_piko_ci/inverter.vue"]]);export{P as default}; +import{C as m}from"./HardwareInstallation-M-k9qNJb.js";import{_ as d,m as t,l,f as u,q as n,u as i,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceKostalPikoCiInverter",mixins:[m]},c={class:"device-kostal-piko-ci-inverter"};function b(o,e,f,v,k,C){const r=t("openwb-base-heading"),a=t("openwb-base-number-input");return l(),u("div",c,[n(r,null,{default:i(()=>[...e[1]||(e[1]=[s(" Einstellungen für Kostal Piko CI Wechselrichter ",-1)])]),_:1}),n(a,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=p=>o.updateConfiguration(p,"configuration.modbus_id"))},{help:i(()=>[...e[2]||(e[2]=[s(" Die Standard-Modbus-ID von Kostal Piko CI ist 75 ",-1)])]),_:1},8,["model-value"])])}const P=d(_,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/kostal/kostal_piko_ci/inverter.vue"]]);export{P as default}; diff --git a/web/settings/assets/inverter-BGBpQiIJ.js b/web/settings/assets/inverter-yd8WQcwg.js similarity index 80% rename from web/settings/assets/inverter-BGBpQiIJ.js rename to web/settings/assets/inverter-yd8WQcwg.js index 82b19f6ad1..e4e982c66e 100644 --- a/web/settings/assets/inverter-BGBpQiIJ.js +++ b/web/settings/assets/inverter-yd8WQcwg.js @@ -1 +1 @@ -import{C as e}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as r,l as t,f as o}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const n={name:"DeviceZendureInverter",mixins:[e]},i={class:"device-zendure-inverter"};function s(p,c,m,a,d,_){return t(),o("div",i)}const g=r(n,[["render",s],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/zendure/zendure/inverter.vue"]]);export{g as default}; +import{C as e}from"./HardwareInstallation-M-k9qNJb.js";import{_ as r,l as t,f as o}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const n={name:"DeviceZendureInverter",mixins:[e]},i={class:"device-zendure-inverter"};function s(p,c,m,a,d,_){return t(),o("div",i)}const g=r(n,[["render",s],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/zendure/zendure/inverter.vue"]]);export{g as default}; diff --git a/web/settings/assets/inverter_maxstorage-C0MYf9Zn.js b/web/settings/assets/inverter_maxstorage-DbnWXUyZ.js similarity index 82% rename from web/settings/assets/inverter_maxstorage-C0MYf9Zn.js rename to web/settings/assets/inverter_maxstorage-DbnWXUyZ.js index a0298aa7f1..9bd529c643 100644 --- a/web/settings/assets/inverter_maxstorage-C0MYf9Zn.js +++ b/web/settings/assets/inverter_maxstorage-DbnWXUyZ.js @@ -1 +1 @@ -import{C as s}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as m,m as n,l as p,f as l,q as t,u,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceSolarmaxMsInverter",mixins:[s]},c={class:"device-solarmax-inverter-maxstorage"};function f(o,e,b,x,v,g){const r=n("openwb-base-heading"),a=n("openwb-base-number-input");return p(),l("div",c,[t(r,null,{default:u(()=>[...e[1]||(e[1]=[d(" Einstellungen für Solarmax MAX.STORAGE / MAX.STORAGE Ultimate Wechselrichter ",-1)])]),_:1}),t(a,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=i=>o.updateConfiguration(i,"configuration.modbus_id"))},null,8,["model-value"])])}const T=m(_,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solarmax/solarmax/inverter_maxstorage.vue"]]);export{T as default}; +import{C as s}from"./HardwareInstallation-M-k9qNJb.js";import{_ as m,m as n,l as p,f as l,q as t,u,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const _={name:"DeviceSolarmaxMsInverter",mixins:[s]},c={class:"device-solarmax-inverter-maxstorage"};function f(o,e,b,x,v,g){const r=n("openwb-base-heading"),a=n("openwb-base-number-input");return p(),l("div",c,[t(r,null,{default:u(()=>[...e[1]||(e[1]=[d(" Einstellungen für Solarmax MAX.STORAGE / MAX.STORAGE Ultimate Wechselrichter ",-1)])]),_:1}),t(a,{title:"Modbus ID",required:"","model-value":o.component.configuration.modbus_id,min:"1",max:"255","onUpdate:modelValue":e[0]||(e[0]=i=>o.updateConfiguration(i,"configuration.modbus_id"))},null,8,["model-value"])])}const T=m(_,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/solarmax/solarmax/inverter_maxstorage.vue"]]);export{T as default}; diff --git a/web/settings/assets/inverter_production_meter-BiC0A6Jg.js b/web/settings/assets/inverter_production_meter-DFCXG47y.js similarity index 95% rename from web/settings/assets/inverter_production_meter-BiC0A6Jg.js rename to web/settings/assets/inverter_production_meter-DFCXG47y.js index 57d09508f8..d6d5a7d1ae 100644 --- a/web/settings/assets/inverter_production_meter-BiC0A6Jg.js +++ b/web/settings/assets/inverter_production_meter-DFCXG47y.js @@ -1 +1 @@ -import{C as f}from"./HardwareInstallation-Ln-RWgHD.js";import{_ as g,m as r,l as b,f as _,q as i,u as o,B as t,y as l,J as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const v={name:"DeviceFroniusInverterProductionMeter",mixins:[f],computed:{meterRealtimeUrl:{get(){return`http://${this.device.configuration.ip_address}/solar_api/v1/GetMeterRealtimeData.cgi?Scope=System`}}}},w={class:"device-fronius-inverter-production-meter"},D=["href"];function h(n,e,M,k,S,s){const d=r("openwb-base-heading"),u=r("openwb-base-alert"),m=r("openwb-base-select-input"),p=r("openwb-base-number-input");return b(),_("div",w,[i(d,null,{default:o(()=>[...e[2]||(e[2]=[t(" Einstellungen für Fronius Erzeugerzähler ",-1)])]),_:1}),i(u,{subtype:"info"},{default:o(()=>[...e[3]||(e[3]=[t(" Zusätzlicher, externer Erzeuger, welcher über einen Smartmeter erfasst wird. ",-1)])]),_:1}),i(m,{title:"Kompatibilitätsmodus","not-selected":"Bitte auswählen",required:"",options:[{value:0,text:"Aus"},{value:1,text:"Variante 1"},{value:2,text:"Variante 2"}],"model-value":n.component.configuration.variant,"onUpdate:modelValue":e[0]||(e[0]=a=>n.updateConfiguration(a,"configuration.variant"))},{help:o(()=>[...e[4]||(e[4]=[t(" Gegebenenfalls auch für alte Modelle nach einem Softwareupdate erforderlich. Fronius hat derzeit keine Konsistente Schnittstelle. Speziell beim Gen24 kann Variante 1 oder 2 erforderlich sein. Nach speichern sollten nach etwa 10-20 Sekunden Daten angezeigt werden. Ist dies nicht der Fall die andere Variante ausprobieren. ",-1)])]),_:1},8,["model-value"]),i(p,{title:"Meter ID",required:"",min:"0",max:"65535","model-value":n.component.configuration.meter_id,"onUpdate:modelValue":e[1]||(e[1]=a=>n.updateConfiguration(a,"configuration.meter_id"))},{help:o(()=>[e[5]||(e[5]=t(" Die Meter ID des SmartMeters. Diese ist normalerweise 1. Bei mehreren SmartMetern im System kann es notwendig sein, die Meter ID zu ändern. Zur Ermittlung kann der folgende Link verwendet werden. Die Meter ID kann den zurückgegebenen JSON Daten entnommen werden. ",-1)),l("a",{href:s.meterRealtimeUrl,target:"_blank",rel:"noopener noreferrer"},c(s.meterRealtimeUrl),9,D),e[6]||(e[6]=l("br",null,null,-1)),e[7]||(e[7]=t(' Im Abschnitt "Body" -> "Data" werden die installierten SmartMeter mit aktuellen Messwerten angezeigt. Die Meter ID ist die Zahl vor dem Doppelpunkt und den zugehörigen Messwerten. ',-1))]),_:1},8,["model-value"])])}const U=g(v,[["render",h],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fronius/fronius_http_api/inverter_production_meter.vue"]]);export{U as default}; +import{C as f}from"./HardwareInstallation-M-k9qNJb.js";import{_ as g,m as r,l as b,f as _,q as i,u as o,B as t,y as l,J as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";import"./DeviceConfigMixin-D2g2-xc_.js";const v={name:"DeviceFroniusInverterProductionMeter",mixins:[f],computed:{meterRealtimeUrl:{get(){return`http://${this.device.configuration.ip_address}/solar_api/v1/GetMeterRealtimeData.cgi?Scope=System`}}}},w={class:"device-fronius-inverter-production-meter"},D=["href"];function h(n,e,M,k,S,s){const d=r("openwb-base-heading"),u=r("openwb-base-alert"),m=r("openwb-base-select-input"),p=r("openwb-base-number-input");return b(),_("div",w,[i(d,null,{default:o(()=>[...e[2]||(e[2]=[t(" Einstellungen für Fronius Erzeugerzähler ",-1)])]),_:1}),i(u,{subtype:"info"},{default:o(()=>[...e[3]||(e[3]=[t(" Zusätzlicher, externer Erzeuger, welcher über einen Smartmeter erfasst wird. ",-1)])]),_:1}),i(m,{title:"Kompatibilitätsmodus","not-selected":"Bitte auswählen",required:"",options:[{value:0,text:"Aus"},{value:1,text:"Variante 1"},{value:2,text:"Variante 2"}],"model-value":n.component.configuration.variant,"onUpdate:modelValue":e[0]||(e[0]=a=>n.updateConfiguration(a,"configuration.variant"))},{help:o(()=>[...e[4]||(e[4]=[t(" Gegebenenfalls auch für alte Modelle nach einem Softwareupdate erforderlich. Fronius hat derzeit keine Konsistente Schnittstelle. Speziell beim Gen24 kann Variante 1 oder 2 erforderlich sein. Nach speichern sollten nach etwa 10-20 Sekunden Daten angezeigt werden. Ist dies nicht der Fall die andere Variante ausprobieren. ",-1)])]),_:1},8,["model-value"]),i(p,{title:"Meter ID",required:"",min:"0",max:"65535","model-value":n.component.configuration.meter_id,"onUpdate:modelValue":e[1]||(e[1]=a=>n.updateConfiguration(a,"configuration.meter_id"))},{help:o(()=>[e[5]||(e[5]=t(" Die Meter ID des SmartMeters. Diese ist normalerweise 1. Bei mehreren SmartMetern im System kann es notwendig sein, die Meter ID zu ändern. Zur Ermittlung kann der folgende Link verwendet werden. Die Meter ID kann den zurückgegebenen JSON Daten entnommen werden. ",-1)),l("a",{href:s.meterRealtimeUrl,target:"_blank",rel:"noopener noreferrer"},c(s.meterRealtimeUrl),9,D),e[6]||(e[6]=l("br",null,null,-1)),e[7]||(e[7]=t(' Im Abschnitt "Body" -> "Data" werden die installierten SmartMeter mit aktuellen Messwerten angezeigt. Die Meter ID ist die Zahl vor dem Doppelpunkt und den zugehörigen Messwerten. ',-1))]),_:1},8,["model-value"])])}const U=g(v,[["render",h],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/devices/fronius/fronius_http_api/inverter_production_meter.vue"]]);export{U as default}; diff --git a/web/settings/assets/io_action-BJjfa9Ux.js b/web/settings/assets/io_action-CSe0TL5K.js similarity index 93% rename from web/settings/assets/io_action-BJjfa9Ux.js rename to web/settings/assets/io_action-CSe0TL5K.js index 8cfe7d076d..06ca90affb 100644 --- a/web/settings/assets/io_action-BJjfa9Ux.js +++ b/web/settings/assets/io_action-CSe0TL5K.js @@ -1 +1 @@ -import{a as u}from"./IoConfiguration-p0bHlEKR.js";import{_ as d,m as i,l as f,f as _,q as t,u as s,y as o,B as r,J as b,K as g}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const w={name:"IoActionLoadManager",mixins:[u]};function c(n,e,x,B,v,k){const m=i("openwb-base-copy-to-clipboard"),p=i("openwb-base-alert"),l=i("openwb-base-number-input");return f(),_(g,null,[t(p,{subtype:"info"},{default:s(()=>[e[7]||(e[7]=o("p",null,"Über dieses MQTT-Topic können die Parameter des Lastmanagers gesetzt werden.",-1)),o("ol",null,[o("li",null,[t(m,{class:"text-info",tooltip:"Topic kopieren"},{default:s(()=>[r(" openWB/set/mqtt/loadmanager/"+b(n.ioAction.id)+"/set/loadmanager ",1)]),_:1}),e[2]||(e[2]=o("br",null,null,-1)),e[3]||(e[3]=r(" Das Topic erwartet ein JSON-Objekt mit den Parametern des Lastmanagements. ",-1)),e[4]||(e[4]=o("br",null,null,-1)),e[5]||(e[5]=r(" Beispiel: ",-1)),e[6]||(e[6]=o("span",{class:"text-info"},' { "max_power": 10000, "max_current": [6, 6, 6], "timestamp": 1783596593.635847 } ',-1))])])]),_:1}),t(l,{title:"maximale Bezugsleistung im Fehlerfall",unit:"kW",min:"0",step:"0.01",required:"","model-value":(n.ioAction.configuration.max_power_on_failure||0)/1e3,"onUpdate:modelValue":e[0]||(e[0]=a=>n.updateConfiguration(a*1e3,"configuration.max_power_on_failure"))},null,8,["model-value"]),t(l,{title:"maximaler Strom im Fehlerfall",unit:"A",min:"0",step:"0.01",required:"","model-value":(n.ioAction.configuration.max_current_on_failure||0)/1e3,"onUpdate:modelValue":e[1]||(e[1]=a=>n.updateConfiguration(a*1e3,"configuration.max_current_on_failure"))},null,8,["model-value"])],64)}const F=d(w,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_actions/controllable_consumers/load_manager/io_action.vue"]]);export{F as default}; +import{a as u}from"./IoConfiguration-DWzY_z-Z.js";import{_ as d,m as i,l as f,f as _,q as t,u as s,y as o,B as r,J as b,K as g}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const w={name:"IoActionLoadManager",mixins:[u]};function c(n,e,x,B,v,k){const m=i("openwb-base-copy-to-clipboard"),p=i("openwb-base-alert"),l=i("openwb-base-number-input");return f(),_(g,null,[t(p,{subtype:"info"},{default:s(()=>[e[7]||(e[7]=o("p",null,"Über dieses MQTT-Topic können die Parameter des Lastmanagers gesetzt werden.",-1)),o("ol",null,[o("li",null,[t(m,{class:"text-info",tooltip:"Topic kopieren"},{default:s(()=>[r(" openWB/set/mqtt/loadmanager/"+b(n.ioAction.id)+"/set/loadmanager ",1)]),_:1}),e[2]||(e[2]=o("br",null,null,-1)),e[3]||(e[3]=r(" Das Topic erwartet ein JSON-Objekt mit den Parametern des Lastmanagements. ",-1)),e[4]||(e[4]=o("br",null,null,-1)),e[5]||(e[5]=r(" Beispiel: ",-1)),e[6]||(e[6]=o("span",{class:"text-info"},' { "max_power": 10000, "max_current": [6, 6, 6], "timestamp": 1783596593.635847 } ',-1))])])]),_:1}),t(l,{title:"maximale Bezugsleistung im Fehlerfall",unit:"kW",min:"0",step:"0.01",required:"","model-value":(n.ioAction.configuration.max_power_on_failure||0)/1e3,"onUpdate:modelValue":e[0]||(e[0]=a=>n.updateConfiguration(a*1e3,"configuration.max_power_on_failure"))},null,8,["model-value"]),t(l,{title:"maximaler Strom im Fehlerfall",unit:"A",min:"0",step:"0.01",required:"","model-value":(n.ioAction.configuration.max_current_on_failure||0)/1e3,"onUpdate:modelValue":e[1]||(e[1]=a=>n.updateConfiguration(a*1e3,"configuration.max_current_on_failure"))},null,8,["model-value"])],64)}const F=d(w,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_actions/controllable_consumers/load_manager/io_action.vue"]]);export{F as default}; diff --git a/web/settings/assets/io_action-CgPzOu6J.js b/web/settings/assets/io_action-CZ8ZhCvu.js similarity index 97% rename from web/settings/assets/io_action-CgPzOu6J.js rename to web/settings/assets/io_action-CZ8ZhCvu.js index 088030e11b..67f86a852f 100644 --- a/web/settings/assets/io_action-CgPzOu6J.js +++ b/web/settings/assets/io_action-CZ8ZhCvu.js @@ -1 +1 @@ -import{a as k}from"./IoConfiguration-p0bHlEKR.js";import{O as w}from"./OpenwbIoPattern-eN9BCLqK.js";import{_ as A,m as p,l as i,f as r,z as m,u as a,B as s,J as b,x as l,q as v,K as d,y as g}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const D={name:"IoActionStepwiseControl",components:{OpenwbIoPattern:w},mixins:[k],computed:{ioDeviceList(){return this.availableIoDevices.filter(t=>t?.type!=="eebus").map(t=>({value:t?.id,text:t?.name}))},outputIoDevice(){return this.availableIoDevices.find(t=>t?.id===this.ioAction?.configuration?.io_output_device&&t?.type!=="eebus")||null},outputContacts(){return this.outputIoDevice?.output?.digital||{}},availableDevices(){let t=this.availableComponents.filter(o=>o.type==="inverter").map(o=>({value:{type:o.type,id:o.value},text:o.text}));return[{label:t.length>0?"Wechselrichter":"Keine Wechselrichter verfügbar",options:t}]}},methods:{updateIoDevice(t){if(this.updateConfiguration(t,"configuration.io_output_device"),Array.isArray(this.ioAction.configuration?.output_pattern)){let e=this.ioAction.configuration.output_pattern.map(o=>({value:o.value,matrix:{}}));this.updateConfiguration(e,"configuration.output_pattern")}}}},y={key:1},E={key:0},B={key:1};function V(t,e,o,_,L,u){const c=p("openwb-io-pattern"),f=p("openwb-base-select-input"),h=p("openwb-base-button-group-input");return i(),r(d,null,[t.ioDevice?.type!=="eebus"?(i(),m(c,{key:0,modelValue:t.ioAction.configuration.input_pattern,"onUpdate:modelValue":e[0]||(e[0]=n=>t.ioAction.configuration.input_pattern=n),contacts:t.ioDevice.input.digital,"action-title":"Leistungsstufen","enable-add-delete":!1,class:"text-center"},{default:a(n=>[s(b(n.pattern.value*100+"%"),1)]),_:1},8,["modelValue","contacts"])):l("",!0),t.ioDevice?.type!=="eebus"?(i(),r("hr",y)):l("",!0),v(f,{modelValue:t.ioAction.configuration.devices,"onUpdate:modelValue":e[1]||(e[1]=n=>t.ioAction.configuration.devices=n),title:"Zugeordnete Erzeugungsanlagen...","not-selected":"Bitte auswählen","empty-value":[],groups:u.availableDevices,required:"",multiple:""},{help:a(()=>[e[10]||(e[10]=s(" Bitte die Erzeugungsanlagen auswählen, welche mit dieser Aktion gekoppelt sind. Es können mehrere Erzeugungsanlagen ausgewählt werden. Die aktuell gültige Leistungsstufe wird im Status der zugeordneten Erzeugungsanlagen angezeigt. ",-1)),t.ioDevice?.type==="eebus"?(i(),r(d,{key:0},[e[5]||(e[5]=g("hr",null,null,-1)),t.ioAction.configuration.passthrough_enabled?(i(),r("strong",E," Zugeordnete WR werden aktuell noch nicht direkt vom openWB-EMS per EEBUS in ihrer Leistung begrenzt (LPP - limit power production), da hierfür Gerätetreiber nötig sind, die eine vollständige EEBUS-Dokumentation der WR-Hersteller bedingen. ")):(i(),r("strong",B," Zugeordnete WR werden aktuell noch nicht vom openWB-EMS per EEBUS in ihrer Leistung begrenzt (LPP - limit power production), da hierfür Gerätetreiber nötig sind, die eine vollständige EEBUS-Dokumentation der WR-Hersteller bedingen. "))],64)):l("",!0),t.ioAction.configuration.passthrough_enabled?(i(),r(d,{key:1},[e[6]||(e[6]=g("hr",null,null,-1)),e[7]||(e[7]=s(' Da "Ausgänge aktivieren" eingeschaltet ist, wird die empfangene Leistungsstufe über die Kontakte des unten konfigurierten Ausgangs-Geräts an die Wechselrichter weitergegeben. Dafür müssen die Wechselrichter an diese Ausgänge angeschlossen sein. ',-1))],64)):(i(),r(d,{key:2},[e[8]||(e[8]=g("hr",null,null,-1)),e[9]||(e[9]=s(' Die zugeordneten Erzeugungsanlagen werden von openWB nicht selbst gedrosselt. Über "Ausgänge aktivieren" kann die Leistungsstufe an die Ausgänge eines Dimm- & Control-Kits oder einer AddOn-Platine durchgereicht werden. ',-1))],64))]),_:1},8,["modelValue","groups"]),e[13]||(e[13]=g("hr",null,null,-1)),v(h,{modelValue:t.ioAction.configuration.passthrough_enabled,"onUpdate:modelValue":e[2]||(e[2]=n=>t.ioAction.configuration.passthrough_enabled=n),title:"Ausgänge aktivieren",buttons:[{buttonValue:!1,text:"Nein"},{buttonValue:!0,text:"Ja"}],class:"mb-2",required:""},{help:a(()=>[...e[11]||(e[11]=[s(' Optional kann die erkannte Leistungsstufe an Ausgänge durchgereicht ("durchgeschliffen") werden. Wird z.B. die Leistungsstufe 60% erkannt, dann wird das hier festgelegte Ausgangsmuster für 60% aktiviert. Die Leistungsstufe kann dabei über Eingangskontakte oder per EEBus empfangen werden. Damit die Erzeugungsanlagen gedrosselt werden, müssen sie an die Ausgänge angeschlossen sein. ',-1)])]),_:1},8,["modelValue"]),t.ioAction.configuration.passthrough_enabled?(i(),m(f,{key:2,title:"Ausgangs-Gerät","not-selected":"Bitte auswählen","empty-value":null,required:"",options:u.ioDeviceList,"model-value":t.ioAction?.configuration.io_output_device,"onUpdate:modelValue":e[3]||(e[3]=n=>u.updateIoDevice(n))},{help:a(()=>[...e[12]||(e[12]=[s(" Bitte das Gerät auswählen, über das der Schaltbefehl ausgegeben werden soll. Für jede Aktion kann nur ein Gerät ausgewählt werden. ",-1)])]),_:1},8,["options","model-value"])):l("",!0),t.ioAction.configuration.passthrough_enabled&&u.outputIoDevice?(i(),m(c,{key:3,modelValue:t.ioAction.configuration.output_pattern,"onUpdate:modelValue":e[4]||(e[4]=n=>t.ioAction.configuration.output_pattern=n),contacts:u.outputContacts,title:"Ausgangsmuster","action-title":"Leistungsstufen","enable-add-delete":!1,class:"text-center"},{default:a(n=>[s(b(n.pattern.value*100+"%"),1)]),_:1},8,["modelValue","contacts"])):l("",!0)],64)}const N=A(D,[["render",V],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_actions/generator_systems/stepwise_control/io_action.vue"]]);export{N as default}; +import{a as k}from"./IoConfiguration-DWzY_z-Z.js";import{O as w}from"./OpenwbIoPattern-eN9BCLqK.js";import{_ as A,m as p,l as i,f as r,z as m,u as a,B as s,J as b,x as l,q as v,K as d,y as g}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const D={name:"IoActionStepwiseControl",components:{OpenwbIoPattern:w},mixins:[k],computed:{ioDeviceList(){return this.availableIoDevices.filter(t=>t?.type!=="eebus").map(t=>({value:t?.id,text:t?.name}))},outputIoDevice(){return this.availableIoDevices.find(t=>t?.id===this.ioAction?.configuration?.io_output_device&&t?.type!=="eebus")||null},outputContacts(){return this.outputIoDevice?.output?.digital||{}},availableDevices(){let t=this.availableComponents.filter(o=>o.type==="inverter").map(o=>({value:{type:o.type,id:o.value},text:o.text}));return[{label:t.length>0?"Wechselrichter":"Keine Wechselrichter verfügbar",options:t}]}},methods:{updateIoDevice(t){if(this.updateConfiguration(t,"configuration.io_output_device"),Array.isArray(this.ioAction.configuration?.output_pattern)){let e=this.ioAction.configuration.output_pattern.map(o=>({value:o.value,matrix:{}}));this.updateConfiguration(e,"configuration.output_pattern")}}}},y={key:1},E={key:0},B={key:1};function V(t,e,o,_,L,u){const c=p("openwb-io-pattern"),f=p("openwb-base-select-input"),h=p("openwb-base-button-group-input");return i(),r(d,null,[t.ioDevice?.type!=="eebus"?(i(),m(c,{key:0,modelValue:t.ioAction.configuration.input_pattern,"onUpdate:modelValue":e[0]||(e[0]=n=>t.ioAction.configuration.input_pattern=n),contacts:t.ioDevice.input.digital,"action-title":"Leistungsstufen","enable-add-delete":!1,class:"text-center"},{default:a(n=>[s(b(n.pattern.value*100+"%"),1)]),_:1},8,["modelValue","contacts"])):l("",!0),t.ioDevice?.type!=="eebus"?(i(),r("hr",y)):l("",!0),v(f,{modelValue:t.ioAction.configuration.devices,"onUpdate:modelValue":e[1]||(e[1]=n=>t.ioAction.configuration.devices=n),title:"Zugeordnete Erzeugungsanlagen...","not-selected":"Bitte auswählen","empty-value":[],groups:u.availableDevices,required:"",multiple:""},{help:a(()=>[e[10]||(e[10]=s(" Bitte die Erzeugungsanlagen auswählen, welche mit dieser Aktion gekoppelt sind. Es können mehrere Erzeugungsanlagen ausgewählt werden. Die aktuell gültige Leistungsstufe wird im Status der zugeordneten Erzeugungsanlagen angezeigt. ",-1)),t.ioDevice?.type==="eebus"?(i(),r(d,{key:0},[e[5]||(e[5]=g("hr",null,null,-1)),t.ioAction.configuration.passthrough_enabled?(i(),r("strong",E," Zugeordnete WR werden aktuell noch nicht direkt vom openWB-EMS per EEBUS in ihrer Leistung begrenzt (LPP - limit power production), da hierfür Gerätetreiber nötig sind, die eine vollständige EEBUS-Dokumentation der WR-Hersteller bedingen. ")):(i(),r("strong",B," Zugeordnete WR werden aktuell noch nicht vom openWB-EMS per EEBUS in ihrer Leistung begrenzt (LPP - limit power production), da hierfür Gerätetreiber nötig sind, die eine vollständige EEBUS-Dokumentation der WR-Hersteller bedingen. "))],64)):l("",!0),t.ioAction.configuration.passthrough_enabled?(i(),r(d,{key:1},[e[6]||(e[6]=g("hr",null,null,-1)),e[7]||(e[7]=s(' Da "Ausgänge aktivieren" eingeschaltet ist, wird die empfangene Leistungsstufe über die Kontakte des unten konfigurierten Ausgangs-Geräts an die Wechselrichter weitergegeben. Dafür müssen die Wechselrichter an diese Ausgänge angeschlossen sein. ',-1))],64)):(i(),r(d,{key:2},[e[8]||(e[8]=g("hr",null,null,-1)),e[9]||(e[9]=s(' Die zugeordneten Erzeugungsanlagen werden von openWB nicht selbst gedrosselt. Über "Ausgänge aktivieren" kann die Leistungsstufe an die Ausgänge eines Dimm- & Control-Kits oder einer AddOn-Platine durchgereicht werden. ',-1))],64))]),_:1},8,["modelValue","groups"]),e[13]||(e[13]=g("hr",null,null,-1)),v(h,{modelValue:t.ioAction.configuration.passthrough_enabled,"onUpdate:modelValue":e[2]||(e[2]=n=>t.ioAction.configuration.passthrough_enabled=n),title:"Ausgänge aktivieren",buttons:[{buttonValue:!1,text:"Nein"},{buttonValue:!0,text:"Ja"}],class:"mb-2",required:""},{help:a(()=>[...e[11]||(e[11]=[s(' Optional kann die erkannte Leistungsstufe an Ausgänge durchgereicht ("durchgeschliffen") werden. Wird z.B. die Leistungsstufe 60% erkannt, dann wird das hier festgelegte Ausgangsmuster für 60% aktiviert. Die Leistungsstufe kann dabei über Eingangskontakte oder per EEBus empfangen werden. Damit die Erzeugungsanlagen gedrosselt werden, müssen sie an die Ausgänge angeschlossen sein. ',-1)])]),_:1},8,["modelValue"]),t.ioAction.configuration.passthrough_enabled?(i(),m(f,{key:2,title:"Ausgangs-Gerät","not-selected":"Bitte auswählen","empty-value":null,required:"",options:u.ioDeviceList,"model-value":t.ioAction?.configuration.io_output_device,"onUpdate:modelValue":e[3]||(e[3]=n=>u.updateIoDevice(n))},{help:a(()=>[...e[12]||(e[12]=[s(" Bitte das Gerät auswählen, über das der Schaltbefehl ausgegeben werden soll. Für jede Aktion kann nur ein Gerät ausgewählt werden. ",-1)])]),_:1},8,["options","model-value"])):l("",!0),t.ioAction.configuration.passthrough_enabled&&u.outputIoDevice?(i(),m(c,{key:3,modelValue:t.ioAction.configuration.output_pattern,"onUpdate:modelValue":e[4]||(e[4]=n=>t.ioAction.configuration.output_pattern=n),contacts:u.outputContacts,title:"Ausgangsmuster","action-title":"Leistungsstufen","enable-add-delete":!1,class:"text-center"},{default:a(n=>[s(b(n.pattern.value*100+"%"),1)]),_:1},8,["modelValue","contacts"])):l("",!0)],64)}const N=A(D,[["render",V],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_actions/generator_systems/stepwise_control/io_action.vue"]]);export{N as default}; diff --git a/web/settings/assets/io_action-l8MF-fIU.js b/web/settings/assets/io_action-CaULNlPp.js similarity index 96% rename from web/settings/assets/io_action-l8MF-fIU.js rename to web/settings/assets/io_action-CaULNlPp.js index 589c17fa20..077a52a929 100644 --- a/web/settings/assets/io_action-l8MF-fIU.js +++ b/web/settings/assets/io_action-CaULNlPp.js @@ -1 +1 @@ -import{a as b}from"./IoConfiguration-p0bHlEKR.js";import{O as h}from"./OpenwbIoSinglePattern-Bacb85Zu.js";import{_ as v,m as u,l as a,f as l,z as d,x as s,q as f,u as w,B as g,y as k,K as _}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const A={name:"IoActionDimming",components:{OpenwbIoSinglePattern:h},mixins:[b],computed:{value:{get(){return this.ioAction?.configuration?.input_pattern||[]},set(e){this.updateConfiguration(e,"configuration.input_pattern")}},isPatternConfigured(){return this.value?.length>0&&this.value[0].matrix&&Object.keys(this.value[0].matrix).length>0},ioDevicesOutputOptions(){let e=[];return this.availableIoDevices?.forEach(t=>{let o=[];Object.keys(t?.output?.digital||{}).forEach(r=>{o.push({text:`${r}`,value:{type:"io",id:t.id,digital_output:r}})}),o.length>0&&e.push({label:t.name,options:o})}),e},availableDevices(){return[{label:"Ladepunkte",options:this.availableChargePoints?.map(t=>({value:{type:"cp",id:t.value},text:t.text}))||[]}].concat(this.ioDevicesOutputOptions)}}},V={key:2};function D(e,t,o,r,y,n){const m=u("openwb-io-single-pattern"),p=u("openwb-base-number-input"),c=u("openwb-base-select-input");return a(),l(_,null,[e.ioDevice?.type!=="eebus"&&n.value&&n.value.length>0?(a(),d(m,{key:0,modelValue:n.value,"onUpdate:modelValue":t[0]||(t[0]=i=>n.value=i),contacts:e.ioDevice?.input?.digital||{}},null,8,["modelValue","contacts"])):s("",!0),e.ioAction?.configuration&&e.ioDevice?.type!=="eebus"?(a(),d(p,{key:1,title:"maximale Bezugsleistung",unit:"kW",min:"0",step:"0.01",required:"",disabled:!n.isPatternConfigured,"model-value":(e.ioAction.configuration.max_import_power||0)/1e3,"onUpdate:modelValue":t[1]||(t[1]=i=>e.updateConfiguration(i*1e3,"configuration.max_import_power"))},null,8,["disabled","model-value"])):s("",!0),e.ioDevice?.type!=="eebus"?(a(),l("hr",V)):s("",!0),f(c,{title:"Anwenden auf...",groups:n.availableDevices,required:"",multiple:"",disabled:e.ioDevice?.type!=="eebus"&&!n.isPatternConfigured,"model-value":e.ioAction?.configuration?.devices||[],"onUpdate:modelValue":t[2]||(t[2]=i=>e.updateConfiguration(i,"configuration.devices"))},{help:w(()=>[...t[3]||(t[3]=[g(" Bitte die Ladepunkte und/oder digitale Ausgänge auswählen, welche berücksichtigt werden sollen. Es können mehrere Einträge ausgewählt werden. Bei steuerbaren Verbrauchseinrichtungen, die über einen digitalen Ausgang angesteuert werden, wird eine Leistung von 4,2 kW bei aktiver Dimmung angenommen. Ladepunkte werden so gesteuert, dass die angegebene Leistung am EVU-Punkt nicht überschritten wird. Eigene PV-Erzeugung und vorhandene Speicher werden berücksichtigt und zusätzlich genutzt.",-1),k("br",null,null,-1),g(' Zugeordnete digitale Ausgänge werden im nicht gedimmten Zustand aktiviert und im gedimmten Zustand deaktiviert. So ist sichergestellt, dass bei einem Verbindungsabbruch oder einem Ausfall der Steuerung die Verbraucher nicht ungewollt mit voller Leistung betrieben werden. An den digitalen Ausgängen gibt es Anschlussmöglichkeiten für Normalzustand offen ("NO") und Normalzustand geschlossen ("NC"). Ein mit "NO" bezeichneter digitaler Ausgang ist also für den nicht gedimmten Zustand geschlossen und bei aktivierter Dimmung geöffnet. ',-1)])]),_:1},8,["groups","disabled","model-value"])],64)}const I=v(A,[["render",D],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_actions/controllable_consumers/dimming/io_action.vue"]]);export{I as default}; +import{a as b}from"./IoConfiguration-DWzY_z-Z.js";import{O as h}from"./OpenwbIoSinglePattern-Bacb85Zu.js";import{_ as v,m as u,l as a,f as l,z as d,x as s,q as f,u as w,B as g,y as k,K as _}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const A={name:"IoActionDimming",components:{OpenwbIoSinglePattern:h},mixins:[b],computed:{value:{get(){return this.ioAction?.configuration?.input_pattern||[]},set(e){this.updateConfiguration(e,"configuration.input_pattern")}},isPatternConfigured(){return this.value?.length>0&&this.value[0].matrix&&Object.keys(this.value[0].matrix).length>0},ioDevicesOutputOptions(){let e=[];return this.availableIoDevices?.forEach(t=>{let o=[];Object.keys(t?.output?.digital||{}).forEach(r=>{o.push({text:`${r}`,value:{type:"io",id:t.id,digital_output:r}})}),o.length>0&&e.push({label:t.name,options:o})}),e},availableDevices(){return[{label:"Ladepunkte",options:this.availableChargePoints?.map(t=>({value:{type:"cp",id:t.value},text:t.text}))||[]}].concat(this.ioDevicesOutputOptions)}}},V={key:2};function D(e,t,o,r,y,n){const m=u("openwb-io-single-pattern"),p=u("openwb-base-number-input"),c=u("openwb-base-select-input");return a(),l(_,null,[e.ioDevice?.type!=="eebus"&&n.value&&n.value.length>0?(a(),d(m,{key:0,modelValue:n.value,"onUpdate:modelValue":t[0]||(t[0]=i=>n.value=i),contacts:e.ioDevice?.input?.digital||{}},null,8,["modelValue","contacts"])):s("",!0),e.ioAction?.configuration&&e.ioDevice?.type!=="eebus"?(a(),d(p,{key:1,title:"maximale Bezugsleistung",unit:"kW",min:"0",step:"0.01",required:"",disabled:!n.isPatternConfigured,"model-value":(e.ioAction.configuration.max_import_power||0)/1e3,"onUpdate:modelValue":t[1]||(t[1]=i=>e.updateConfiguration(i*1e3,"configuration.max_import_power"))},null,8,["disabled","model-value"])):s("",!0),e.ioDevice?.type!=="eebus"?(a(),l("hr",V)):s("",!0),f(c,{title:"Anwenden auf...",groups:n.availableDevices,required:"",multiple:"",disabled:e.ioDevice?.type!=="eebus"&&!n.isPatternConfigured,"model-value":e.ioAction?.configuration?.devices||[],"onUpdate:modelValue":t[2]||(t[2]=i=>e.updateConfiguration(i,"configuration.devices"))},{help:w(()=>[...t[3]||(t[3]=[g(" Bitte die Ladepunkte und/oder digitale Ausgänge auswählen, welche berücksichtigt werden sollen. Es können mehrere Einträge ausgewählt werden. Bei steuerbaren Verbrauchseinrichtungen, die über einen digitalen Ausgang angesteuert werden, wird eine Leistung von 4,2 kW bei aktiver Dimmung angenommen. Ladepunkte werden so gesteuert, dass die angegebene Leistung am EVU-Punkt nicht überschritten wird. Eigene PV-Erzeugung und vorhandene Speicher werden berücksichtigt und zusätzlich genutzt.",-1),k("br",null,null,-1),g(' Zugeordnete digitale Ausgänge werden im nicht gedimmten Zustand aktiviert und im gedimmten Zustand deaktiviert. So ist sichergestellt, dass bei einem Verbindungsabbruch oder einem Ausfall der Steuerung die Verbraucher nicht ungewollt mit voller Leistung betrieben werden. An den digitalen Ausgängen gibt es Anschlussmöglichkeiten für Normalzustand offen ("NO") und Normalzustand geschlossen ("NC"). Ein mit "NO" bezeichneter digitaler Ausgang ist also für den nicht gedimmten Zustand geschlossen und bei aktivierter Dimmung geöffnet. ',-1)])]),_:1},8,["groups","disabled","model-value"])],64)}const I=v(A,[["render",D],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_actions/controllable_consumers/dimming/io_action.vue"]]);export{I as default}; diff --git a/web/settings/assets/io_action-DRS7-ewM.js b/web/settings/assets/io_action-DCPf-V2m.js similarity index 95% rename from web/settings/assets/io_action-DRS7-ewM.js rename to web/settings/assets/io_action-DCPf-V2m.js index fb611c8e9a..a6a1492023 100644 --- a/web/settings/assets/io_action-DRS7-ewM.js +++ b/web/settings/assets/io_action-DCPf-V2m.js @@ -1 +1 @@ -import{a as v}from"./IoConfiguration-p0bHlEKR.js";import{O as f}from"./OpenwbIoSinglePattern-Bacb85Zu.js";import{_ as h,m as s,l as n,f as p,z as r,u as d,B as m,x as u,K as _}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const w={name:"IoActionDimmingDirectControl",components:{OpenwbIoSinglePattern:f},mixins:[v],computed:{value:{get(){return this.ioAction.configuration.input_pattern},set(e){this.updateConfiguration(e,"configuration.input_pattern")}},ioDevicesOutputOptions(){let e=[];return this.availableIoDevices.forEach(t=>{let i=[];Object.keys(t?.output?.digital||{}).forEach(a=>{i.push({text:`${a}`,value:{type:"io",id:t.id,digital_output:a}})}),i.length>0&&e.push({label:t.name,options:i})}),e.length===0&&e.push({label:"Keine digitalen Ausgänge verfügbar",options:[]}),e},availableDevices(){return[{label:this.availableChargePoints.length>0?"Ladepunkte":"Keine Ladepunkte verfügbar",options:this.availableChargePoints.map(t=>({value:{type:"cp",id:t.value},text:t.text}))}].concat(this.ioDevicesOutputOptions)}}},k={key:2};function D(e,t,i,a,y,o){const c=s("openwb-base-alert"),g=s("openwb-io-single-pattern"),b=s("openwb-base-select-input");return n(),p(_,null,[e.ioDevice?.type==="eebus"?(n(),r(c,{key:0,subtype:"warning"},{default:d(()=>[...t[2]||(t[2]=[m(" Steuerboxen mit EEBus-Schnistelle sind für Dimmen per Direktsteuerung nicht geeignet. Bitte wähle ein anderes I/O-Gerät aus. ",-1)])]),_:1})):e.ioDevice?(n(),r(g,{key:1,modelValue:o.value,"onUpdate:modelValue":t[0]||(t[0]=l=>o.value=l),contacts:e.ioDevice?.input?.digital},null,8,["modelValue","contacts"])):u("",!0),e.ioDevice?.type!=="eebus"?(n(),p("hr",k)):u("",!0),e.ioDevice?.type!=="eebus"?(n(),r(b,{key:3,title:"Verhalten anwenden auf...","not-selected":"Bitte auswählen","empty-value":[],groups:o.availableDevices,multiple:"",required:"",disabled:!(Object.keys(o.value[0].matrix).length>0),"model-value":e.ioAction?.configuration.devices,"onUpdate:modelValue":t[1]||(t[1]=l=>e.updateConfiguration(l,"configuration.devices"))},{help:d(()=>[...t[3]||(t[3]=[m(" Bitte die Ladepunkte und/oder digitalen Ausgänge auswählen, auf welche das Verhalten angewendet werden soll. Es können mehrere Einträge ausgewählt werden. Ladepunkte werden auf 4,2kW gedimmt, eine Verrechnung mit PV-Erzeugung findet nicht statt. ",-1)])]),_:1},8,["groups","disabled","model-value"])):u("",!0)],64)}const P=h(w,[["render",D],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_actions/controllable_consumers/dimming_direct_control/io_action.vue"]]);export{P as default}; +import{a as v}from"./IoConfiguration-DWzY_z-Z.js";import{O as f}from"./OpenwbIoSinglePattern-Bacb85Zu.js";import{_ as h,m as s,l as n,f as p,z as r,u as d,B as m,x as u,K as _}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const w={name:"IoActionDimmingDirectControl",components:{OpenwbIoSinglePattern:f},mixins:[v],computed:{value:{get(){return this.ioAction.configuration.input_pattern},set(e){this.updateConfiguration(e,"configuration.input_pattern")}},ioDevicesOutputOptions(){let e=[];return this.availableIoDevices.forEach(t=>{let i=[];Object.keys(t?.output?.digital||{}).forEach(a=>{i.push({text:`${a}`,value:{type:"io",id:t.id,digital_output:a}})}),i.length>0&&e.push({label:t.name,options:i})}),e.length===0&&e.push({label:"Keine digitalen Ausgänge verfügbar",options:[]}),e},availableDevices(){return[{label:this.availableChargePoints.length>0?"Ladepunkte":"Keine Ladepunkte verfügbar",options:this.availableChargePoints.map(t=>({value:{type:"cp",id:t.value},text:t.text}))}].concat(this.ioDevicesOutputOptions)}}},k={key:2};function D(e,t,i,a,y,o){const c=s("openwb-base-alert"),g=s("openwb-io-single-pattern"),b=s("openwb-base-select-input");return n(),p(_,null,[e.ioDevice?.type==="eebus"?(n(),r(c,{key:0,subtype:"warning"},{default:d(()=>[...t[2]||(t[2]=[m(" Steuerboxen mit EEBus-Schnistelle sind für Dimmen per Direktsteuerung nicht geeignet. Bitte wähle ein anderes I/O-Gerät aus. ",-1)])]),_:1})):e.ioDevice?(n(),r(g,{key:1,modelValue:o.value,"onUpdate:modelValue":t[0]||(t[0]=l=>o.value=l),contacts:e.ioDevice?.input?.digital},null,8,["modelValue","contacts"])):u("",!0),e.ioDevice?.type!=="eebus"?(n(),p("hr",k)):u("",!0),e.ioDevice?.type!=="eebus"?(n(),r(b,{key:3,title:"Verhalten anwenden auf...","not-selected":"Bitte auswählen","empty-value":[],groups:o.availableDevices,multiple:"",required:"",disabled:!(Object.keys(o.value[0].matrix).length>0),"model-value":e.ioAction?.configuration.devices,"onUpdate:modelValue":t[1]||(t[1]=l=>e.updateConfiguration(l,"configuration.devices"))},{help:d(()=>[...t[3]||(t[3]=[m(" Bitte die Ladepunkte und/oder digitalen Ausgänge auswählen, auf welche das Verhalten angewendet werden soll. Es können mehrere Einträge ausgewählt werden. Ladepunkte werden auf 4,2kW gedimmt, eine Verrechnung mit PV-Erzeugung findet nicht statt. ",-1)])]),_:1},8,["groups","disabled","model-value"])):u("",!0)],64)}const P=h(w,[["render",D],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_actions/controllable_consumers/dimming_direct_control/io_action.vue"]]);export{P as default}; diff --git a/web/settings/assets/io_action-BhHdRCsk.js b/web/settings/assets/io_action-DdUO_cY2.js similarity index 94% rename from web/settings/assets/io_action-BhHdRCsk.js rename to web/settings/assets/io_action-DdUO_cY2.js index 2baaed312d..1a6a378494 100644 --- a/web/settings/assets/io_action-BhHdRCsk.js +++ b/web/settings/assets/io_action-DdUO_cY2.js @@ -1 +1 @@ -import{a as b}from"./IoConfiguration-p0bHlEKR.js";import{O as f}from"./OpenwbIoPattern-eN9BCLqK.js";import{_ as g,m as i,l as o,f as p,z as l,u as r,B as d,q as _,x as u,K as w}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const h={name:"IoActionRippleControlReceiver",components:{OpenwbIoPattern:f},mixins:[b],computed:{value:{get(){return this.ioAction.configuration.input_pattern},set(t){this.updateConfiguration(t,"configuration.input_pattern")}},availableDevices(){return[{label:this.availableChargePoints.length>0?"Ladepunkte":"Keine Ladepunkte verfügbar",options:this.availableChargePoints.map(e=>({value:{type:"cp",id:e.value},text:e.text}))}]}}},k={key:2};function V(t,e,y,B,C,a){const m=i("openwb-base-alert"),s=i("openwb-base-select-input"),c=i("openwb-io-pattern");return o(),p(w,null,[t.ioDevice?.type==="eebus"?(o(),l(m,{key:0,subtype:"warning"},{default:r(()=>[...e[2]||(e[2]=[d(" Steuerboxen mit EEBus-Schnistelle sind für Rundsteuerempfänger-Aktionen nicht geeignet. Bitte wähle ein anderes I/O-Gerät aus. ",-1)])]),_:1})):t.ioDevice?(o(),l(c,{key:1,modelValue:a.value,"onUpdate:modelValue":e[0]||(e[0]=n=>a.value=n),contacts:t.ioDevice.input.digital,"enable-add-delete":!0,"min-patterns":2},{default:r(n=>[_(s,{modelValue:n.pattern.value,"onUpdate:modelValue":v=>n.pattern.value=v,required:"","not-selected":"Bitte auswählen","empty-value":null,options:[{value:0,text:"sperren"},{value:1,text:"freigeben"}]},null,8,["modelValue","onUpdate:modelValue"])]),_:1},8,["modelValue","contacts"])):u("",!0),t.ioDevice?.type!=="eebus"?(o(),p("hr",k)):u("",!0),t.ioDevice?.type!=="eebus"?(o(),l(s,{key:3,title:"Anwenden auf...","empty-value":[],groups:a.availableDevices,required:"",multiple:"","model-value":t.ioAction?.configuration.devices,"onUpdate:modelValue":e[1]||(e[1]=n=>t.updateConfiguration(n,"configuration.devices"))},{help:r(()=>[...e[3]||(e[3]=[d(" Bitte die Ladepunkte auswählen, auf die das Verhalten angewendet werden soll. Es können mehrere Einträge ausgewählt werden. ",-1)])]),_:1},8,["groups","model-value"])):u("",!0)],64)}const N=g(h,[["render",V],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_actions/controllable_consumers/ripple_control_receiver/io_action.vue"]]);export{N as default}; +import{a as b}from"./IoConfiguration-DWzY_z-Z.js";import{O as f}from"./OpenwbIoPattern-eN9BCLqK.js";import{_ as g,m as i,l as o,f as p,z as l,u as r,B as d,q as _,x as u,K as w}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const h={name:"IoActionRippleControlReceiver",components:{OpenwbIoPattern:f},mixins:[b],computed:{value:{get(){return this.ioAction.configuration.input_pattern},set(t){this.updateConfiguration(t,"configuration.input_pattern")}},availableDevices(){return[{label:this.availableChargePoints.length>0?"Ladepunkte":"Keine Ladepunkte verfügbar",options:this.availableChargePoints.map(e=>({value:{type:"cp",id:e.value},text:e.text}))}]}}},k={key:2};function V(t,e,y,B,C,a){const m=i("openwb-base-alert"),s=i("openwb-base-select-input"),c=i("openwb-io-pattern");return o(),p(w,null,[t.ioDevice?.type==="eebus"?(o(),l(m,{key:0,subtype:"warning"},{default:r(()=>[...e[2]||(e[2]=[d(" Steuerboxen mit EEBus-Schnistelle sind für Rundsteuerempfänger-Aktionen nicht geeignet. Bitte wähle ein anderes I/O-Gerät aus. ",-1)])]),_:1})):t.ioDevice?(o(),l(c,{key:1,modelValue:a.value,"onUpdate:modelValue":e[0]||(e[0]=n=>a.value=n),contacts:t.ioDevice.input.digital,"enable-add-delete":!0,"min-patterns":2},{default:r(n=>[_(s,{modelValue:n.pattern.value,"onUpdate:modelValue":v=>n.pattern.value=v,required:"","not-selected":"Bitte auswählen","empty-value":null,options:[{value:0,text:"sperren"},{value:1,text:"freigeben"}]},null,8,["modelValue","onUpdate:modelValue"])]),_:1},8,["modelValue","contacts"])):u("",!0),t.ioDevice?.type!=="eebus"?(o(),p("hr",k)):u("",!0),t.ioDevice?.type!=="eebus"?(o(),l(s,{key:3,title:"Anwenden auf...","empty-value":[],groups:a.availableDevices,required:"",multiple:"","model-value":t.ioAction?.configuration.devices,"onUpdate:modelValue":e[1]||(e[1]=n=>t.updateConfiguration(n,"configuration.devices"))},{help:r(()=>[...e[3]||(e[3]=[d(" Bitte die Ladepunkte auswählen, auf die das Verhalten angewendet werden soll. Es können mehrere Einträge ausgewählt werden. ",-1)])]),_:1},8,["groups","model-value"])):u("",!0)],64)}const N=g(h,[["render",V],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_actions/controllable_consumers/ripple_control_receiver/io_action.vue"]]);export{N as default}; diff --git a/web/settings/assets/io_device-B9VauT5h.js b/web/settings/assets/io_device-BMg8FqtU.js similarity index 95% rename from web/settings/assets/io_device-B9VauT5h.js rename to web/settings/assets/io_device-BMg8FqtU.js index c126599b45..21f41c7006 100644 --- a/web/settings/assets/io_device-B9VauT5h.js +++ b/web/settings/assets/io_device-BMg8FqtU.js @@ -1 +1 @@ -import{O as m}from"./IoConfiguration-p0bHlEKR.js";import{C as f}from"./index-Bv2WLdLZ.js";import{_ as g,m as s,l as h,f as b,q as a,u as l,B as i,y as n}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./dynamic-import-helper-BheWnx7M.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";const _={name:"IoDeviceAddOn",mixins:[f,m],data(){return{mqttTopics:[{topic:"openWB/chargepoint/+/config",writeable:!1},{topic:"openWB/general/extern",writeable:!1}]}},computed:{configuredChargePoints(){const t=this.getWildcardTopics("openWB/chargepoint/+/config");let e=[];for(const o of Object.values(t))if(["external_openwb"].includes(o.type)){if(e.find(r=>r.value===o.configuration.ip_address))continue;e.push({value:o.configuration.ip_address,text:o.name})}return e},configuredDisplays(){return[]},availableIoSources:{get(){return this.$store.state.mqtt["openWB/general/extern"]===!0?[]:[{label:"Ladepunkte",options:this.configuredChargePoints},{label:"Zusatzdisplays",options:this.configuredDisplays}].filter(t=>t.options.length>0)}}}},v={class:"io-device-add-on"};function w(t,e,o,r,B,d){const u=s("openwb-base-alert"),p=s("openwb-base-select-input");return h(),b("div",v,[a(u,{subtype:"warning"},{default:l(()=>[...e[1]||(e[1]=[i(" Die Kontakte der AddOn-Platine sind nicht galvanisch oder optisch getrennt. Es wird dringend empfohlen, mit Koppelrelais zu arbeiten.",-1),n("br",null,null,-1),i(" Weiterhin muss für die Verwendung der Kontakte in einer openWB series2 eine weitere Kabeldurchführung in das Gehäuse gebohrt werden. Da es hierbei zu Undichtigkeiten kommen kann, ist dies nur von fachkundigen Personen durchzuführen.",-1),n("br",null,null,-1),i(" Es wird keine Haftung für Schäden übernommen, die durch die direkte Beschaltung der Kontakte oder eine zusätzliche Bohrung im Gehäuse entstehen.",-1),n("br",null,null,-1),i(" Es wird der Einsatz des Dimm- & Control-Kits empfohlen! ",-1)])]),_:1}),a(p,{title:"Installiert auf...","not-selected":"Bitte auswählen","empty-value":null,options:[{value:"localhost",text:"dieser openWB"}],groups:d.availableIoSources,"model-value":t.ioDevice.configuration.host,"onUpdate:modelValue":e[0]||(e[0]=c=>t.updateConfiguration(c,"configuration.host"))},{help:l(()=>[...e[2]||(e[2]=[i(" Bitte die Komponente auswählen, an der die Add-On-Platine installiert ist.",-1),n("br",null,null,-1),i(" Unterstützt werden:",-1),n("br",null,null,-1),n("ul",null,[n("li",null,"openWB standalone (als primary oder Zusatzdisplay)"),n("li",null,'openWB Ladepunkte als primary ("interne openWB") und secondary ("externe openWB")')],-1)])]),_:1},8,["groups","model-value"])])}const P=g(_,[["render",w],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_devices/add_on/io_device.vue"]]);export{P as default}; +import{O as m}from"./IoConfiguration-DWzY_z-Z.js";import{C as f}from"./index-CE-5DBwq.js";import{_ as g,m as s,l as h,f as b,q as a,u as l,B as i,y as n}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./dynamic-import-helper-BheWnx7M.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";const _={name:"IoDeviceAddOn",mixins:[f,m],data(){return{mqttTopics:[{topic:"openWB/chargepoint/+/config",writeable:!1},{topic:"openWB/general/extern",writeable:!1}]}},computed:{configuredChargePoints(){const t=this.getWildcardTopics("openWB/chargepoint/+/config");let e=[];for(const o of Object.values(t))if(["external_openwb"].includes(o.type)){if(e.find(r=>r.value===o.configuration.ip_address))continue;e.push({value:o.configuration.ip_address,text:o.name})}return e},configuredDisplays(){return[]},availableIoSources:{get(){return this.$store.state.mqtt["openWB/general/extern"]===!0?[]:[{label:"Ladepunkte",options:this.configuredChargePoints},{label:"Zusatzdisplays",options:this.configuredDisplays}].filter(t=>t.options.length>0)}}}},v={class:"io-device-add-on"};function w(t,e,o,r,B,d){const u=s("openwb-base-alert"),p=s("openwb-base-select-input");return h(),b("div",v,[a(u,{subtype:"warning"},{default:l(()=>[...e[1]||(e[1]=[i(" Die Kontakte der AddOn-Platine sind nicht galvanisch oder optisch getrennt. Es wird dringend empfohlen, mit Koppelrelais zu arbeiten.",-1),n("br",null,null,-1),i(" Weiterhin muss für die Verwendung der Kontakte in einer openWB series2 eine weitere Kabeldurchführung in das Gehäuse gebohrt werden. Da es hierbei zu Undichtigkeiten kommen kann, ist dies nur von fachkundigen Personen durchzuführen.",-1),n("br",null,null,-1),i(" Es wird keine Haftung für Schäden übernommen, die durch die direkte Beschaltung der Kontakte oder eine zusätzliche Bohrung im Gehäuse entstehen.",-1),n("br",null,null,-1),i(" Es wird der Einsatz des Dimm- & Control-Kits empfohlen! ",-1)])]),_:1}),a(p,{title:"Installiert auf...","not-selected":"Bitte auswählen","empty-value":null,options:[{value:"localhost",text:"dieser openWB"}],groups:d.availableIoSources,"model-value":t.ioDevice.configuration.host,"onUpdate:modelValue":e[0]||(e[0]=c=>t.updateConfiguration(c,"configuration.host"))},{help:l(()=>[...e[2]||(e[2]=[i(" Bitte die Komponente auswählen, an der die Add-On-Platine installiert ist.",-1),n("br",null,null,-1),i(" Unterstützt werden:",-1),n("br",null,null,-1),n("ul",null,[n("li",null,"openWB standalone (als primary oder Zusatzdisplay)"),n("li",null,'openWB Ladepunkte als primary ("interne openWB") und secondary ("externe openWB")')],-1)])]),_:1},8,["groups","model-value"])])}const P=g(_,[["render",w],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_devices/add_on/io_device.vue"]]);export{P as default}; diff --git a/web/settings/assets/io_device-BQVrxO7a.js b/web/settings/assets/io_device-C5cnwx0W.js similarity index 92% rename from web/settings/assets/io_device-BQVrxO7a.js rename to web/settings/assets/io_device-C5cnwx0W.js index cc480236e7..829b135714 100644 --- a/web/settings/assets/io_device-BQVrxO7a.js +++ b/web/settings/assets/io_device-C5cnwx0W.js @@ -1 +1 @@ -import{O as m}from"./IoConfiguration-p0bHlEKR.js";import{_ as p,m as r,l as c,f as b,q as n,u as l,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"IoDeviceEebus",mixins:[m]},v={class:"io-device-eebus"};function g(e,o,_,w,k,D){const a=r("openwb-base-number-input"),t=r("openwb-base-text-input"),s=r("openwb-base-button-input"),d=r("openwb-base-alert");return c(),b("div",v,[n(a,{title:"Port",required:"",min:1,max:65535,"model-value":e.ioDevice.configuration.port,"onUpdate:modelValue":o[0]||(o[0]=i=>e.updateConfiguration(i,"configuration.port"))},null,8,["model-value"]),n(t,{title:"SKI-Schlüssel des VNB","model-value":e.ioDevice.configuration.remote_ski,"onUpdate:modelValue":o[1]||(o[1]=i=>e.updateConfiguration(i,"configuration.remote_ski"))},null,8,["model-value"]),n(s,{title:"Zertifikat und SKI-Schlüssel","button-text":"Zertifikat und SKI-Schlüssel generieren",subtype:"warning",onButtonClicked:o[2]||(o[2]=i=>e.sendSystemCommand("createEebusCert",{io_device:e.ioDevice.id}))},{help:l(()=>[...o[3]||(o[3]=[u(" Zugangstoken wird abgerufen und gespeichert, damit das Backup durchgeführt werden kann. Zugangstoken werden nur lokal auf dieser openWB gespeichert. ",-1)])]),_:1}),n(d,{subtype:"danger"},{default:l(()=>[...o[4]||(o[4]=[u(" Vorhandene Zertifikate werden gelöscht. Der SKI-Schlüssel muss danach beim Netzbetreiber (VNB) neu eingetragen werden. ",-1)])]),_:1}),n(t,{title:"SKI-Schlüssel (zum Eintragen beim VNB)","model-value":e.ioDevice.configuration.cert_info.client_ski,readonly:!0},null,8,["model-value"]),n(t,{title:"Zertifikat gültig ab","model-value":e.ioDevice.configuration.cert_info.not_before,readonly:!0},null,8,["model-value"]),n(t,{title:"Zertifikat gültig bis","model-value":e.ioDevice.configuration.cert_info.not_after,readonly:!0},null,8,["model-value"]),n(t,{title:"Aussteller","model-value":e.ioDevice.configuration.cert_info.issuer,readonly:!0},null,8,["model-value"]),n(t,{title:"weitere Informationen","model-value":e.ioDevice.configuration.cert_info.subject,readonly:!0},null,8,["model-value"])])}const N=p(f,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_devices/eebus/io_device.vue"]]);export{N as default}; +import{O as m}from"./IoConfiguration-DWzY_z-Z.js";import{_ as p,m as r,l as c,f as b,q as n,u as l,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"IoDeviceEebus",mixins:[m]},v={class:"io-device-eebus"};function g(e,o,_,w,k,D){const a=r("openwb-base-number-input"),t=r("openwb-base-text-input"),s=r("openwb-base-button-input"),d=r("openwb-base-alert");return c(),b("div",v,[n(a,{title:"Port",required:"",min:1,max:65535,"model-value":e.ioDevice.configuration.port,"onUpdate:modelValue":o[0]||(o[0]=i=>e.updateConfiguration(i,"configuration.port"))},null,8,["model-value"]),n(t,{title:"SKI-Schlüssel des VNB","model-value":e.ioDevice.configuration.remote_ski,"onUpdate:modelValue":o[1]||(o[1]=i=>e.updateConfiguration(i,"configuration.remote_ski"))},null,8,["model-value"]),n(s,{title:"Zertifikat und SKI-Schlüssel","button-text":"Zertifikat und SKI-Schlüssel generieren",subtype:"warning",onButtonClicked:o[2]||(o[2]=i=>e.sendSystemCommand("createEebusCert",{io_device:e.ioDevice.id}))},{help:l(()=>[...o[3]||(o[3]=[u(" Zugangstoken wird abgerufen und gespeichert, damit das Backup durchgeführt werden kann. Zugangstoken werden nur lokal auf dieser openWB gespeichert. ",-1)])]),_:1}),n(d,{subtype:"danger"},{default:l(()=>[...o[4]||(o[4]=[u(" Vorhandene Zertifikate werden gelöscht. Der SKI-Schlüssel muss danach beim Netzbetreiber (VNB) neu eingetragen werden. ",-1)])]),_:1}),n(t,{title:"SKI-Schlüssel (zum Eintragen beim VNB)","model-value":e.ioDevice.configuration.cert_info.client_ski,readonly:!0},null,8,["model-value"]),n(t,{title:"Zertifikat gültig ab","model-value":e.ioDevice.configuration.cert_info.not_before,readonly:!0},null,8,["model-value"]),n(t,{title:"Zertifikat gültig bis","model-value":e.ioDevice.configuration.cert_info.not_after,readonly:!0},null,8,["model-value"]),n(t,{title:"Aussteller","model-value":e.ioDevice.configuration.cert_info.issuer,readonly:!0},null,8,["model-value"]),n(t,{title:"weitere Informationen","model-value":e.ioDevice.configuration.cert_info.subject,readonly:!0},null,8,["model-value"])])}const N=p(f,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_devices/eebus/io_device.vue"]]);export{N as default}; diff --git a/web/settings/assets/io_device-CcaG1xZb.js b/web/settings/assets/io_device-CNwYX7pQ.js similarity index 90% rename from web/settings/assets/io_device-CcaG1xZb.js rename to web/settings/assets/io_device-CNwYX7pQ.js index 1ebf8fe9df..5d6f598a05 100644 --- a/web/settings/assets/io_device-CcaG1xZb.js +++ b/web/settings/assets/io_device-CNwYX7pQ.js @@ -1 +1 @@ -import{O as m}from"./IoConfiguration-p0bHlEKR.js";import{_ as a,m as r,l as p,f as s,q as t}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const d={name:"IoDeviceDimmKit",mixins:[m]},l={class:"io-device-dimm-kit"};function f(e,o,v,c,_,b){const u=r("openwb-base-text-input"),n=r("openwb-base-number-input");return p(),s("div",l,[t(u,{title:"IP oder Hostname",subtype:"host",required:"","model-value":e.ioDevice.configuration.host,"onUpdate:modelValue":o[0]||(o[0]=i=>e.updateConfiguration(i,"configuration.host"))},null,8,["model-value"]),t(n,{title:"Port",required:"","model-value":e.ioDevice.configuration.port,"onUpdate:modelValue":o[1]||(o[1]=i=>e.updateConfiguration(i,"configuration.port"))},null,8,["model-value"]),t(n,{title:"Modbus-ID",required:"",min:1,max:255,"model-value":e.ioDevice.configuration.modbus_id,"onUpdate:modelValue":o[2]||(o[2]=i=>e.updateConfiguration(i,"configuration.modbus_id"))},null,8,["model-value"])])}const $=a(d,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_devices/dimm_kit/io_device.vue"]]);export{$ as default}; +import{O as m}from"./IoConfiguration-DWzY_z-Z.js";import{_ as a,m as r,l as p,f as s,q as t}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const d={name:"IoDeviceDimmKit",mixins:[m]},l={class:"io-device-dimm-kit"};function f(e,o,v,c,_,b){const u=r("openwb-base-text-input"),n=r("openwb-base-number-input");return p(),s("div",l,[t(u,{title:"IP oder Hostname",subtype:"host",required:"","model-value":e.ioDevice.configuration.host,"onUpdate:modelValue":o[0]||(o[0]=i=>e.updateConfiguration(i,"configuration.host"))},null,8,["model-value"]),t(n,{title:"Port",required:"","model-value":e.ioDevice.configuration.port,"onUpdate:modelValue":o[1]||(o[1]=i=>e.updateConfiguration(i,"configuration.port"))},null,8,["model-value"]),t(n,{title:"Modbus-ID",required:"",min:1,max:255,"model-value":e.ioDevice.configuration.modbus_id,"onUpdate:modelValue":o[2]||(o[2]=i=>e.updateConfiguration(i,"configuration.modbus_id"))},null,8,["model-value"])])}const $=a(d,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/io_devices/dimm_kit/io_device.vue"]]);export{$ as default}; diff --git a/web/settings/assets/monitoring-Cgm9-SlF.js b/web/settings/assets/monitoring-Da0eqTxE.js similarity index 93% rename from web/settings/assets/monitoring-Cgm9-SlF.js rename to web/settings/assets/monitoring-Da0eqTxE.js index 4d2ae2da44..44f35f30f8 100644 --- a/web/settings/assets/monitoring-Cgm9-SlF.js +++ b/web/settings/assets/monitoring-Da0eqTxE.js @@ -1 +1 @@ -import{M as l}from"./DataManagement-CkfxmcJu.js";import{_ as p,m as a,l as d,f as m,q as t,u as g,B as r,y as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"MonitoringZabbix",mixins:[l]},b={class:"monitoring-zabbix"};function v(n,e,k,_,w,y){const u=a("openwb-base-alert"),i=a("openwb-base-text-input");return d(),m("div",b,[t(u,{subtype:"info"},{default:g(()=>[...e[4]||(e[4]=[r(" Mit dem Monitoring-Service von openWB kannst Du Dein System ganz einfach überwachen. Einfach ",-1),s("a",{href:"https://wb-solution.de/produkt/aktives-monitoring-openwb-installation-2/",target:"_blank",rel:"noopener noreferrer"}," hier ",-1),r(" anmelden und Deine Zugangsdaten erhalten.",-1),s("br",null,null,-1),r("Alternativ kannst Du auch deinen eigenen Zabbix-Server aufsetzen und die Zugangsdaten hier eintragen. ",-1)])]),_:1}),t(i,{title:"Zielhost",subtype:"host",required:"","model-value":n.monitoring.configuration.destination_host,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.destination_host"))},null,8,["model-value"]),t(i,{title:"Eigener Hostname",subtype:"user",required:"","model-value":n.monitoring.configuration.hostname,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.hostname"))},null,8,["model-value"]),t(i,{title:"PSK Identifier",subtype:"text",required:"","model-value":n.monitoring.configuration.psk_identifier,"onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.psk_identifier"))},null,8,["model-value"]),t(i,{title:"PSK Key",subtype:"password",required:"","model-value":n.monitoring.configuration.psk_key,"onUpdate:modelValue":e[3]||(e[3]=o=>n.updateConfiguration(o,"configuration.psk_key"))},null,8,["model-value"])])}const Z=p(f,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/monitoring/zabbix/monitoring.vue"]]);export{Z as default}; +import{M as l}from"./DataManagement-CnuBQnBT.js";import{_ as p,m as a,l as d,f as m,q as t,u as g,B as r,y as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"MonitoringZabbix",mixins:[l]},b={class:"monitoring-zabbix"};function v(n,e,k,_,w,y){const u=a("openwb-base-alert"),i=a("openwb-base-text-input");return d(),m("div",b,[t(u,{subtype:"info"},{default:g(()=>[...e[4]||(e[4]=[r(" Mit dem Monitoring-Service von openWB kannst Du Dein System ganz einfach überwachen. Einfach ",-1),s("a",{href:"https://wb-solution.de/produkt/aktives-monitoring-openwb-installation-2/",target:"_blank",rel:"noopener noreferrer"}," hier ",-1),r(" anmelden und Deine Zugangsdaten erhalten.",-1),s("br",null,null,-1),r("Alternativ kannst Du auch deinen eigenen Zabbix-Server aufsetzen und die Zugangsdaten hier eintragen. ",-1)])]),_:1}),t(i,{title:"Zielhost",subtype:"host",required:"","model-value":n.monitoring.configuration.destination_host,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.destination_host"))},null,8,["model-value"]),t(i,{title:"Eigener Hostname",subtype:"user",required:"","model-value":n.monitoring.configuration.hostname,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.hostname"))},null,8,["model-value"]),t(i,{title:"PSK Identifier",subtype:"text",required:"","model-value":n.monitoring.configuration.psk_identifier,"onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.psk_identifier"))},null,8,["model-value"]),t(i,{title:"PSK Key",subtype:"password",required:"","model-value":n.monitoring.configuration.psk_key,"onUpdate:modelValue":e[3]||(e[3]=o=>n.updateConfiguration(o,"configuration.psk_key"))},null,8,["model-value"])])}const Z=p(f,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/monitoring/zabbix/monitoring.vue"]]);export{Z as default}; diff --git a/web/settings/assets/vehicle-CS4L8UkR.js b/web/settings/assets/vehicle--gFlgBg9.js similarity index 93% rename from web/settings/assets/vehicle-CS4L8UkR.js rename to web/settings/assets/vehicle--gFlgBg9.js index 93f3547e79..d039c3a2ca 100644 --- a/web/settings/assets/vehicle-CS4L8UkR.js +++ b/web/settings/assets/vehicle--gFlgBg9.js @@ -1 +1 @@ -import{V as s}from"./VehicleConfiguration-CDk_8xEa.js";import{_ as d,m as a,l as p,f as m,q as o,u as i,B as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const c={name:"VehicleSocHttp",mixins:[s]},g={class:"vehicle-soc-http"};function b(t,e,f,v,h,w){const l=a("openwb-base-text-input"),u=a("openwb-base-button-group-input");return p(),m("div",g,[o(l,{title:"SoC URL",subtype:"url",required:"","model-value":t.vehicle.configuration.soc_url,"onUpdate:modelValue":e[0]||(e[0]=n=>t.updateConfiguration(n,"configuration.soc_url"))},{help:i(()=>[...e[3]||(e[3]=[r(" Es wird vom Server eine Zahl (Float mit Punkt als Dezimaltrennzeichen oder Integer) erwartet, welche den aktuellen Ladestand in Prozent (0 bis 100) zurückgibt. ",-1)])]),_:1},8,["model-value"]),o(l,{title:"Reichweiten URL",subtype:"url","model-value":t.vehicle.configuration.range_url,"onUpdate:modelValue":e[1]||(e[1]=n=>t.updateConfiguration(n,"configuration.range_url"))},{help:i(()=>[...e[4]||(e[4]=[r(" Es wird vom Server eine Zahl (Float mit Punkt als Dezimaltrennzeichen oder Integer) erwartet, welche die aktuelle Reichweite in Kilometern darstellt. Diese Angabe ist optional. ",-1)])]),_:1},8,["model-value"]),o(u,{title:"SoC während der Ladung berechnen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.vehicle.configuration.calculate_soc,"onUpdate:modelValue":e[2]||(e[2]=n=>t.updateConfiguration(n,"configuration.calculate_soc"))},{help:i(()=>[...e[5]||(e[5]=[r(" Berechnet den Ladestand (SoC) während der Ladung. Dies ist notwendig, wenn der SoC während der Ladung nicht aktualisiert wird. Die Berechnung erfolgt über die Ladeleistung und die Ladedauer. ",-1)])]),_:1},8,["model-value"])])}const x=d(c,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/http/vehicle.vue"]]);export{x as default}; +import{V as s}from"./VehicleConfiguration-848lVEbG.js";import{_ as d,m as a,l as p,f as m,q as o,u as i,B as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const c={name:"VehicleSocHttp",mixins:[s]},g={class:"vehicle-soc-http"};function b(t,e,f,v,h,w){const l=a("openwb-base-text-input"),u=a("openwb-base-button-group-input");return p(),m("div",g,[o(l,{title:"SoC URL",subtype:"url",required:"","model-value":t.vehicle.configuration.soc_url,"onUpdate:modelValue":e[0]||(e[0]=n=>t.updateConfiguration(n,"configuration.soc_url"))},{help:i(()=>[...e[3]||(e[3]=[r(" Es wird vom Server eine Zahl (Float mit Punkt als Dezimaltrennzeichen oder Integer) erwartet, welche den aktuellen Ladestand in Prozent (0 bis 100) zurückgibt. ",-1)])]),_:1},8,["model-value"]),o(l,{title:"Reichweiten URL",subtype:"url","model-value":t.vehicle.configuration.range_url,"onUpdate:modelValue":e[1]||(e[1]=n=>t.updateConfiguration(n,"configuration.range_url"))},{help:i(()=>[...e[4]||(e[4]=[r(" Es wird vom Server eine Zahl (Float mit Punkt als Dezimaltrennzeichen oder Integer) erwartet, welche die aktuelle Reichweite in Kilometern darstellt. Diese Angabe ist optional. ",-1)])]),_:1},8,["model-value"]),o(u,{title:"SoC während der Ladung berechnen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.vehicle.configuration.calculate_soc,"onUpdate:modelValue":e[2]||(e[2]=n=>t.updateConfiguration(n,"configuration.calculate_soc"))},{help:i(()=>[...e[5]||(e[5]=[r(" Berechnet den Ladestand (SoC) während der Ladung. Dies ist notwendig, wenn der SoC während der Ladung nicht aktualisiert wird. Die Berechnung erfolgt über die Ladeleistung und die Ladedauer. ",-1)])]),_:1},8,["model-value"])])}const x=d(c,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/http/vehicle.vue"]]);export{x as default}; diff --git a/web/settings/assets/vehicle-DUyc8QHW.js b/web/settings/assets/vehicle-1foLpIDD.js similarity index 93% rename from web/settings/assets/vehicle-DUyc8QHW.js rename to web/settings/assets/vehicle-1foLpIDD.js index 2eb294c846..516caaef25 100644 --- a/web/settings/assets/vehicle-DUyc8QHW.js +++ b/web/settings/assets/vehicle-1foLpIDD.js @@ -1 +1 @@ -import{V as u}from"./VehicleConfiguration-CDk_8xEa.js";import{_ as a,m as s,l as d,f as p,q as i,u as r,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const m={name:"VehicleSocRenault",mixins:[u]},f={class:"vehicle-soc-renault"};function v(n,e,g,V,w,b){const t=s("openwb-base-text-input");return d(),p("div",f,[i(t,{title:"Benutzername",required:"",subtype:"user","model-value":n.vehicle.configuration.user_id,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.user_id"))},{help:r(()=>[...e[4]||(e[4]=[l(" Der Benutzername für die Anmeldung an den Renault-Servern. ",-1)])]),_:1},8,["model-value"]),i(t,{title:"Kennwort",required:"",subtype:"password","model-value":n.vehicle.configuration.password,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.password"))},{help:r(()=>[...e[5]||(e[5]=[l(" Das Passwort für die Anmeldung an den Renault-Servern. ",-1)])]),_:1},8,["model-value"]),i(t,{title:"Land",required:"","model-value":n.vehicle.configuration.country,"onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.country"))},{help:r(()=>[...e[6]||(e[6]=[l(" Land des Fahrzeugs, z.b. DE für Deutschland. ",-1)])]),_:1},8,["model-value"]),i(t,{title:"VIN","model-value":n.vehicle.configuration.vin,"onUpdate:modelValue":e[3]||(e[3]=o=>n.updateConfiguration(o,"configuration.vin"))},{help:r(()=>[...e[7]||(e[7]=[l(" Die Fahrgestellnummer des Fahrzeugs falls mehrere Fahrzeuge im Account vorhanden sind. ",-1)])]),_:1},8,["model-value"])])}const F=a(m,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/renault/vehicle.vue"]]);export{F as default}; +import{V as u}from"./VehicleConfiguration-848lVEbG.js";import{_ as a,m as s,l as d,f as p,q as i,u as r,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const m={name:"VehicleSocRenault",mixins:[u]},f={class:"vehicle-soc-renault"};function v(n,e,g,V,w,b){const t=s("openwb-base-text-input");return d(),p("div",f,[i(t,{title:"Benutzername",required:"",subtype:"user","model-value":n.vehicle.configuration.user_id,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.user_id"))},{help:r(()=>[...e[4]||(e[4]=[l(" Der Benutzername für die Anmeldung an den Renault-Servern. ",-1)])]),_:1},8,["model-value"]),i(t,{title:"Kennwort",required:"",subtype:"password","model-value":n.vehicle.configuration.password,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.password"))},{help:r(()=>[...e[5]||(e[5]=[l(" Das Passwort für die Anmeldung an den Renault-Servern. ",-1)])]),_:1},8,["model-value"]),i(t,{title:"Land",required:"","model-value":n.vehicle.configuration.country,"onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.country"))},{help:r(()=>[...e[6]||(e[6]=[l(" Land des Fahrzeugs, z.b. DE für Deutschland. ",-1)])]),_:1},8,["model-value"]),i(t,{title:"VIN","model-value":n.vehicle.configuration.vin,"onUpdate:modelValue":e[3]||(e[3]=o=>n.updateConfiguration(o,"configuration.vin"))},{help:r(()=>[...e[7]||(e[7]=[l(" Die Fahrgestellnummer des Fahrzeugs falls mehrere Fahrzeuge im Account vorhanden sind. ",-1)])]),_:1},8,["model-value"])])}const F=a(m,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/renault/vehicle.vue"]]);export{F as default}; diff --git a/web/settings/assets/vehicle-CO4-BD2n.js b/web/settings/assets/vehicle-BJCG3IQ9.js similarity index 96% rename from web/settings/assets/vehicle-CO4-BD2n.js rename to web/settings/assets/vehicle-BJCG3IQ9.js index bfae1a6266..ec41634b96 100644 --- a/web/settings/assets/vehicle-CO4-BD2n.js +++ b/web/settings/assets/vehicle-BJCG3IQ9.js @@ -1 +1 @@ -import{V as s}from"./VehicleConfiguration-CDk_8xEa.js";import{_ as d,m as u,l as p,f as v,q as a,u as n,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const m={name:"VehicleSocEVCC",mixins:[s]},g={class:"vehicle-soc-evcc"};function f(t,e,x,V,w,b){const i=u("openwb-base-text-input"),r=u("openwb-base-select-input");return p(),v("div",g,[a(i,{title:"EVCC Sponsor Token",subtype:"password",required:"","model-value":t.vehicle.configuration.sponsor_token,"onUpdate:modelValue":e[0]||(e[0]=o=>t.updateConfiguration(o,"configuration.sponsor_token"))},{help:n(()=>[...e[5]||(e[5]=[l(" EVCC Sponsor Token angeben, dies ist notwendig um SoC über EVCC abrufen zu können. https://sponsor.evcc.io/ ",-1)])]),_:1},8,["model-value"]),a(i,{title:"Benutzername",subtype:"user",required:"","model-value":t.vehicle.configuration.user_id,"onUpdate:modelValue":e[1]||(e[1]=o=>t.updateConfiguration(o,"configuration.user_id"))},{help:n(()=>[...e[6]||(e[6]=[l(" Benutzername beim Fahrzeughersteller. ",-1)])]),_:1},8,["model-value"]),a(i,{title:"Kennwort",subtype:"password",required:"","model-value":t.vehicle.configuration.password,"onUpdate:modelValue":e[2]||(e[2]=o=>t.updateConfiguration(o,"configuration.password"))},{help:n(()=>[...e[7]||(e[7]=[l(" Kennwort beim Fahrzeughersteller. ",-1)])]),_:1},8,["model-value"]),a(r,{title:"Marke",required:"","not-selected":"Bitte auswählen",options:[{value:"aiways",text:"Aiways"},{value:"audi",text:"Audi"},{value:"etron",text:"Audi e-tron"},{value:"bmw",text:"BMW"},{value:"dacia",text:"Dacia"},{value:"fiat",text:"Fiat"},{value:"ford",text:"Ford"},{value:"hyundai",text:"Hyundai"},{value:"jaguar",text:"Jaguar"},{value:"kia",text:"Kia"},{value:"landrover",text:"Landrover"},{value:"mg",text:"Mg"},{value:"mini",text:"Mini"},{value:"nissan",text:"Nissan"},{value:"carwings",text:"Nissan (Leaf pre 2019)"},{value:"ovms",text:"OVMS"},{value:"polestar",text:"Polestar"},{value:"porsche",text:"Porsche"},{value:"renault",text:"Renault"},{value:"seat",text:"Seat"},{value:"cupra",text:"Seat Cupra"},{value:"skoda",text:"Škoda"},{value:"enyaq",text:"Škoda Enyaq"},{value:"smart",text:"Smart"},{value:"smart-hello",text:"Smart-Hello"},{value:"template",text:"Template"},{value:"volvo",text:"Volvo"},{value:"volvo-connected",text:"Volvo-Connected"},{value:"vw",text:"VW"},{value:"id",text:"VW ID"}],"model-value":t.vehicle.configuration.vehicle_type,"onUpdate:modelValue":e[3]||(e[3]=o=>t.updateConfiguration(o,"configuration.vehicle_type"))},{help:n(()=>[...e[8]||(e[8]=[l(" Marke aus des Fahrzeugs. ",-1)])]),_:1},8,["model-value"]),a(i,{title:"VIN",subtype:"text","model-value":t.vehicle.configuration.VIN,"onUpdate:modelValue":e[4]||(e[4]=o=>t.updateConfiguration(o,"configuration.VIN"))},{help:n(()=>[...e[9]||(e[9]=[l(" Fahrgestellnummer (VIN) des Fahrzeugs. Notwendig falls mehrere Fahrzeuge im Account des Herstellers vorhanden sind. ",-1)])]),_:1},8,["model-value"])])}const B=d(m,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/evcc/vehicle.vue"]]);export{B as default}; +import{V as s}from"./VehicleConfiguration-848lVEbG.js";import{_ as d,m as u,l as p,f as v,q as a,u as n,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const m={name:"VehicleSocEVCC",mixins:[s]},g={class:"vehicle-soc-evcc"};function f(t,e,x,V,w,b){const i=u("openwb-base-text-input"),r=u("openwb-base-select-input");return p(),v("div",g,[a(i,{title:"EVCC Sponsor Token",subtype:"password",required:"","model-value":t.vehicle.configuration.sponsor_token,"onUpdate:modelValue":e[0]||(e[0]=o=>t.updateConfiguration(o,"configuration.sponsor_token"))},{help:n(()=>[...e[5]||(e[5]=[l(" EVCC Sponsor Token angeben, dies ist notwendig um SoC über EVCC abrufen zu können. https://sponsor.evcc.io/ ",-1)])]),_:1},8,["model-value"]),a(i,{title:"Benutzername",subtype:"user",required:"","model-value":t.vehicle.configuration.user_id,"onUpdate:modelValue":e[1]||(e[1]=o=>t.updateConfiguration(o,"configuration.user_id"))},{help:n(()=>[...e[6]||(e[6]=[l(" Benutzername beim Fahrzeughersteller. ",-1)])]),_:1},8,["model-value"]),a(i,{title:"Kennwort",subtype:"password",required:"","model-value":t.vehicle.configuration.password,"onUpdate:modelValue":e[2]||(e[2]=o=>t.updateConfiguration(o,"configuration.password"))},{help:n(()=>[...e[7]||(e[7]=[l(" Kennwort beim Fahrzeughersteller. ",-1)])]),_:1},8,["model-value"]),a(r,{title:"Marke",required:"","not-selected":"Bitte auswählen",options:[{value:"aiways",text:"Aiways"},{value:"audi",text:"Audi"},{value:"etron",text:"Audi e-tron"},{value:"bmw",text:"BMW"},{value:"dacia",text:"Dacia"},{value:"fiat",text:"Fiat"},{value:"ford",text:"Ford"},{value:"hyundai",text:"Hyundai"},{value:"jaguar",text:"Jaguar"},{value:"kia",text:"Kia"},{value:"landrover",text:"Landrover"},{value:"mg",text:"Mg"},{value:"mini",text:"Mini"},{value:"nissan",text:"Nissan"},{value:"carwings",text:"Nissan (Leaf pre 2019)"},{value:"ovms",text:"OVMS"},{value:"polestar",text:"Polestar"},{value:"porsche",text:"Porsche"},{value:"renault",text:"Renault"},{value:"seat",text:"Seat"},{value:"cupra",text:"Seat Cupra"},{value:"skoda",text:"Škoda"},{value:"enyaq",text:"Škoda Enyaq"},{value:"smart",text:"Smart"},{value:"smart-hello",text:"Smart-Hello"},{value:"template",text:"Template"},{value:"volvo",text:"Volvo"},{value:"volvo-connected",text:"Volvo-Connected"},{value:"vw",text:"VW"},{value:"id",text:"VW ID"}],"model-value":t.vehicle.configuration.vehicle_type,"onUpdate:modelValue":e[3]||(e[3]=o=>t.updateConfiguration(o,"configuration.vehicle_type"))},{help:n(()=>[...e[8]||(e[8]=[l(" Marke aus des Fahrzeugs. ",-1)])]),_:1},8,["model-value"]),a(i,{title:"VIN",subtype:"text","model-value":t.vehicle.configuration.VIN,"onUpdate:modelValue":e[4]||(e[4]=o=>t.updateConfiguration(o,"configuration.VIN"))},{help:n(()=>[...e[9]||(e[9]=[l(" Fahrgestellnummer (VIN) des Fahrzeugs. Notwendig falls mehrere Fahrzeuge im Account des Herstellers vorhanden sind. ",-1)])]),_:1},8,["model-value"])])}const B=d(m,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/evcc/vehicle.vue"]]);export{B as default}; diff --git a/web/settings/assets/vehicle-BpfOe2gD.js b/web/settings/assets/vehicle-BQhZ80iD.js similarity index 94% rename from web/settings/assets/vehicle-BpfOe2gD.js rename to web/settings/assets/vehicle-BQhZ80iD.js index 0bc4853a74..81c14b8f25 100644 --- a/web/settings/assets/vehicle-BpfOe2gD.js +++ b/web/settings/assets/vehicle-BQhZ80iD.js @@ -1 +1 @@ -import{V as a}from"./VehicleConfiguration-CDk_8xEa.js";import{_ as d,m as u,l as p,f as g,q as o,u as l,B as i,y as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const m={name:"VehicleSocTronity",mixins:[a]},f={class:"vehicle-soc-tronity"};function b(n,e,v,C,w,h){const r=u("openwb-base-text-input"),s=u("openwb-base-button-group-input");return p(),g("div",f,[o(r,{title:"Vehicle ID",subtype:"text",required:"","model-value":n.vehicle.configuration.vehicle_id,"onUpdate:modelValue":e[0]||(e[0]=t=>n.updateConfiguration(t,"configuration.vehicle_id"))},{help:l(()=>[...e[4]||(e[4]=[i(' Vehicle ID aus Tronity angeben. Diese ist in den "Assigned Vehicles" zu finden. ',-1)])]),_:1},8,["model-value"]),o(r,{title:"Client ID",subtype:"text",required:"","model-value":n.vehicle.configuration.client_id,"onUpdate:modelValue":e[1]||(e[1]=t=>n.updateConfiguration(t,"configuration.client_id"))},{help:l(()=>[...e[5]||(e[5]=[i(' Client ID aus Tronity angeben. Diese ist in den "Application Settings" zu finden. ',-1)])]),_:1},8,["model-value"]),o(r,{title:"Client Secret",subtype:"password",required:"","model-value":n.vehicle.configuration.client_secret,"onUpdate:modelValue":e[2]||(e[2]=t=>n.updateConfiguration(t,"configuration.client_secret"))},{help:l(()=>[...e[6]||(e[6]=[i(' Client Secret aus Tronity angeben. Diese ist in den "Application Settings" zu finden. Das Client Secret kann nur einmalig abgerufen werden. Ggf. neu erzeugen, womit frühere Client Secrets ungültig werden. ',-1)])]),_:1},8,["model-value"]),o(s,{title:"SoC während der Ladung berechnen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":n.vehicle.configuration.calculate_soc,"onUpdate:modelValue":e[3]||(e[3]=t=>n.updateConfiguration(t,"configuration.calculate_soc"))},{help:l(()=>[...e[7]||(e[7]=[i(" Berechnet den Ladestand (SoC) während der Ladung. Dies ist notwendig, wenn der SoC nicht über die Schnittstelle des Fahrzeugs abgerufen werden kann. Die Berechnung erfolgt über die Ladeleistung und die Ladedauer. ",-1),c("br",null,null,-1),i(" Derzeit notwendig für Peugeot, Opel, Citroen und DS. ",-1)])]),_:1},8,["model-value"])])}const L=d(m,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/tronity/vehicle.vue"]]);export{L as default}; +import{V as a}from"./VehicleConfiguration-848lVEbG.js";import{_ as d,m as u,l as p,f as g,q as o,u as l,B as i,y as c}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const m={name:"VehicleSocTronity",mixins:[a]},f={class:"vehicle-soc-tronity"};function b(n,e,v,C,w,h){const r=u("openwb-base-text-input"),s=u("openwb-base-button-group-input");return p(),g("div",f,[o(r,{title:"Vehicle ID",subtype:"text",required:"","model-value":n.vehicle.configuration.vehicle_id,"onUpdate:modelValue":e[0]||(e[0]=t=>n.updateConfiguration(t,"configuration.vehicle_id"))},{help:l(()=>[...e[4]||(e[4]=[i(' Vehicle ID aus Tronity angeben. Diese ist in den "Assigned Vehicles" zu finden. ',-1)])]),_:1},8,["model-value"]),o(r,{title:"Client ID",subtype:"text",required:"","model-value":n.vehicle.configuration.client_id,"onUpdate:modelValue":e[1]||(e[1]=t=>n.updateConfiguration(t,"configuration.client_id"))},{help:l(()=>[...e[5]||(e[5]=[i(' Client ID aus Tronity angeben. Diese ist in den "Application Settings" zu finden. ',-1)])]),_:1},8,["model-value"]),o(r,{title:"Client Secret",subtype:"password",required:"","model-value":n.vehicle.configuration.client_secret,"onUpdate:modelValue":e[2]||(e[2]=t=>n.updateConfiguration(t,"configuration.client_secret"))},{help:l(()=>[...e[6]||(e[6]=[i(' Client Secret aus Tronity angeben. Diese ist in den "Application Settings" zu finden. Das Client Secret kann nur einmalig abgerufen werden. Ggf. neu erzeugen, womit frühere Client Secrets ungültig werden. ',-1)])]),_:1},8,["model-value"]),o(s,{title:"SoC während der Ladung berechnen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":n.vehicle.configuration.calculate_soc,"onUpdate:modelValue":e[3]||(e[3]=t=>n.updateConfiguration(t,"configuration.calculate_soc"))},{help:l(()=>[...e[7]||(e[7]=[i(" Berechnet den Ladestand (SoC) während der Ladung. Dies ist notwendig, wenn der SoC nicht über die Schnittstelle des Fahrzeugs abgerufen werden kann. Die Berechnung erfolgt über die Ladeleistung und die Ladedauer. ",-1),c("br",null,null,-1),i(" Derzeit notwendig für Peugeot, Opel, Citroen und DS. ",-1)])]),_:1},8,["model-value"])])}const L=d(m,[["render",b],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/tronity/vehicle.vue"]]);export{L as default}; diff --git a/web/settings/assets/vehicle-B8TuinsQ.js b/web/settings/assets/vehicle-BTDD_mpD.js similarity index 92% rename from web/settings/assets/vehicle-B8TuinsQ.js rename to web/settings/assets/vehicle-BTDD_mpD.js index f2c540a433..7c02e8cf26 100644 --- a/web/settings/assets/vehicle-B8TuinsQ.js +++ b/web/settings/assets/vehicle-BTDD_mpD.js @@ -1 +1 @@ -import{V as a}from"./VehicleConfiguration-CDk_8xEa.js";import{S as p}from"./SystemVersion-eCZ4XHiC.js";import{_ as m,m as u,l as f,f as v,q as t,u as l,B as n,y as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const b={name:"VehicleSocOVMS",mixins:[a,p]},g={class:"vehicle-soc-ovms"},V=["href"];function w(o,e,S,h,M,c){const d=u("openwb-base-alert"),s=u("openwb-base-text-input");return f(),v("div",g,[t(d,{subtype:"info"},{default:l(()=>[e[4]||(e[4]=n(" Beschreibung der Konfiguration und weitere Hinweise im Wiki: ",-1)),i("a",{href:`https://wiki.openwb.de/doku.php?id=openwb:vc:${o.systemVersion}:software:fahrzeug-infos:ovms`,target:"_blank",rel:"noopener noreferrer"},"Wiki für SoC-Modul OVMS",8,V)]),_:1}),t(s,{title:"Server URL",required:"","model-value":o.vehicle.configuration.server_url,"onUpdate:modelValue":e[0]||(e[0]=r=>o.updateConfiguration(r,"configuration.server_url"))},{help:l(()=>[...e[5]||(e[5]=[n(" Die URL (incl. Port) des API des OVMS-Servers, an dem das OVMS-Modul angemeldet ist, z.B. ",-1),i("br",null,null,-1),n(" https://ovms.dexters-web.de:6869",-1),i("br",null,null,-1),n(" oder",-1),i("br",null,null,-1),n(" https://api.openvehicles.com:6869",-1),i("br",null,null,-1),n(" oder ein custom server",-1),i("br",null,null,-1)])]),_:1},8,["model-value"]),t(s,{title:"Benutzername",required:"",subtype:"user","model-value":o.vehicle.configuration.user_id,"onUpdate:modelValue":e[1]||(e[1]=r=>o.updateConfiguration(r,"configuration.user_id"))},{help:l(()=>[...e[6]||(e[6]=[n(" Der Benutzername für die Anmeldung am benutzen OVMS-Servers. ",-1)])]),_:1},8,["model-value"]),t(s,{title:"Kennwort",required:"",subtype:"password","model-value":o.vehicle.configuration.password,"onUpdate:modelValue":e[2]||(e[2]=r=>o.updateConfiguration(r,"configuration.password"))},{help:l(()=>[...e[7]||(e[7]=[n(" Das Passwort für die Anmeldung am OVMS-Server. ",-1)])]),_:1},8,["model-value"]),t(s,{title:"Vehicle Id",required:"","model-value":o.vehicle.configuration.vehicleId,"onUpdate:modelValue":e[3]||(e[3]=r=>o.updateConfiguration(r,"configuration.vehicleId"))},{help:l(()=>[...e[8]||(e[8]=[n(" Die Id des Fahrzeugs im OVMS, auch Module Id genannt. ",-1)])]),_:1},8,["model-value"])])}const q=m(b,[["render",w],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/ovms/vehicle.vue"]]);export{q as default}; +import{V as a}from"./VehicleConfiguration-848lVEbG.js";import{S as p}from"./SystemVersion-eCZ4XHiC.js";import{_ as m,m as u,l as f,f as v,q as t,u as l,B as n,y as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const b={name:"VehicleSocOVMS",mixins:[a,p]},g={class:"vehicle-soc-ovms"},V=["href"];function w(o,e,S,h,M,c){const d=u("openwb-base-alert"),s=u("openwb-base-text-input");return f(),v("div",g,[t(d,{subtype:"info"},{default:l(()=>[e[4]||(e[4]=n(" Beschreibung der Konfiguration und weitere Hinweise im Wiki: ",-1)),i("a",{href:`https://wiki.openwb.de/doku.php?id=openwb:vc:${o.systemVersion}:software:fahrzeug-infos:ovms`,target:"_blank",rel:"noopener noreferrer"},"Wiki für SoC-Modul OVMS",8,V)]),_:1}),t(s,{title:"Server URL",required:"","model-value":o.vehicle.configuration.server_url,"onUpdate:modelValue":e[0]||(e[0]=r=>o.updateConfiguration(r,"configuration.server_url"))},{help:l(()=>[...e[5]||(e[5]=[n(" Die URL (incl. Port) des API des OVMS-Servers, an dem das OVMS-Modul angemeldet ist, z.B. ",-1),i("br",null,null,-1),n(" https://ovms.dexters-web.de:6869",-1),i("br",null,null,-1),n(" oder",-1),i("br",null,null,-1),n(" https://api.openvehicles.com:6869",-1),i("br",null,null,-1),n(" oder ein custom server",-1),i("br",null,null,-1)])]),_:1},8,["model-value"]),t(s,{title:"Benutzername",required:"",subtype:"user","model-value":o.vehicle.configuration.user_id,"onUpdate:modelValue":e[1]||(e[1]=r=>o.updateConfiguration(r,"configuration.user_id"))},{help:l(()=>[...e[6]||(e[6]=[n(" Der Benutzername für die Anmeldung am benutzen OVMS-Servers. ",-1)])]),_:1},8,["model-value"]),t(s,{title:"Kennwort",required:"",subtype:"password","model-value":o.vehicle.configuration.password,"onUpdate:modelValue":e[2]||(e[2]=r=>o.updateConfiguration(r,"configuration.password"))},{help:l(()=>[...e[7]||(e[7]=[n(" Das Passwort für die Anmeldung am OVMS-Server. ",-1)])]),_:1},8,["model-value"]),t(s,{title:"Vehicle Id",required:"","model-value":o.vehicle.configuration.vehicleId,"onUpdate:modelValue":e[3]||(e[3]=r=>o.updateConfiguration(r,"configuration.vehicleId"))},{help:l(()=>[...e[8]||(e[8]=[n(" Die Id des Fahrzeugs im OVMS, auch Module Id genannt. ",-1)])]),_:1},8,["model-value"])])}const q=m(b,[["render",w],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/ovms/vehicle.vue"]]);export{q as default}; diff --git a/web/settings/assets/vehicle-pEaX82JV.js b/web/settings/assets/vehicle-BWlLh3Ow.js similarity index 97% rename from web/settings/assets/vehicle-pEaX82JV.js rename to web/settings/assets/vehicle-BWlLh3Ow.js index 0b6930fd63..7be4263b5b 100644 --- a/web/settings/assets/vehicle-pEaX82JV.js +++ b/web/settings/assets/vehicle-BWlLh3Ow.js @@ -1 +1 @@ -import{V as y}from"./VehicleConfiguration-CDk_8xEa.js";import{_ as C,m as h,l as i,f as b,z as p,u as o,y as t,B as n,q as l,J as f,x as m}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const k={name:"VehicleSocPorsche",mixins:[y],data(){return{authStatus:{message:"",error:"",captchaImage:"",justConnected:!1},captchaInput:"",sid:null,password:""}},computed:{isConnected(){return!!this.vehicle.configuration.access_token}},methods:{async startAuth(){this.authStatus={message:"Anmeldung läuft…",error:"",captchaImage:"",justConnected:!1};const a={email:this.vehicle.configuration.email,password:this.password,captcha:this.captchaInput||null,sid:this.sid};try{const r=await(await fetch("/openWB/web/settings/modules/vehicles/porsche/porsche_auth_login.php",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)})).json();r.status==="ok"?(this.updateConfiguration(r.access_token,"configuration.access_token"),this.updateConfiguration(r.refresh_token,"configuration.refresh_token"),this.updateConfiguration(r.expires_at,"configuration.expires_at"),this.authStatus={message:"",error:"",captchaImage:"",justConnected:!0},this.sid=null,this.captchaInput="",this.password=""):r.status==="captcha"?(this.sid=r.sid,this.authStatus={message:"",error:"",captchaImage:r.image,justConnected:!1}):this.authStatus={message:"",error:r.message||"Unbekannter Fehler.",captchaImage:"",justConnected:!1}}catch(e){this.authStatus={message:"",error:"Netzwerkfehler: "+e,captchaImage:"",justConnected:!1}}}}},S={class:"vehicle-soc-porsche"},I={key:3},P=["src"];function V(a,e,r,x,s,g){const d=h("openwb-base-alert"),c=h("openwb-base-text-input"),v=h("openwb-base-button-input"),w=h("openwb-base-button-group-input");return i(),b("div",S,[g.isConnected?(i(),p(d,{key:0,subtype:"success"},{default:o(()=>[...e[5]||(e[5]=[t("b",null,"Porsche verbunden",-1),t("br",null,null,-1),n(" Anmeldung vorhanden. Der Ladestand wird über Porsche Connect abgerufen. ",-1)])]),_:1})):(i(),p(d,{key:1,subtype:"warning"},{default:o(()=>[...e[6]||(e[6]=[t("b",null,"Nicht verbunden",-1),t("br",null,null,-1),n(" Bitte unten mit den My-Porsche-Zugangsdaten anmelden. ",-1)])]),_:1})),l(c,{title:"My-Porsche E-Mail (Porsche ID)",subtype:"email",required:"","model-value":a.vehicle.configuration.email,"onUpdate:modelValue":e[0]||(e[0]=u=>a.updateConfiguration(u,"configuration.email"))},{help:o(()=>[...e[7]||(e[7]=[n(" E-Mail-Adresse der Porsche ID, mit der Ihr Euch in der My-Porsche-App bzw. auf my.porsche.com anmeldet. ",-1)])]),_:1},8,["model-value"]),l(c,{title:"My-Porsche Passwort",subtype:"password","model-value":s.password,"onUpdate:modelValue":e[1]||(e[1]=u=>s.password=u)},{help:o(()=>[...e[8]||(e[8]=[n(" Passwort der Porsche ID. Wird nur für die Anmeldung verwendet und ",-1),t("b",null,"nicht gespeichert",-1),n(". ",-1)])]),_:1},8,["model-value"]),l(c,{title:"Fahrgestellnummer (VIN)",subtype:"text","model-value":a.vehicle.configuration.vin,"onUpdate:modelValue":e[2]||(e[2]=u=>a.updateConfiguration(u,"configuration.vin"))},{help:o(()=>[...e[9]||(e[9]=[n(" Optional. Nur nötig, wenn mehrere Fahrzeuge mit der Porsche ID verknüpft sind. Bleibt das Feld leer, wird das erste Fahrzeug im Konto verwendet. ",-1)])]),_:1},8,["model-value"]),l(v,{title:"Porsche Anmeldung","button-text":"Porsche verbinden",subtype:"primary",onButtonClicked:g.startAuth},{help:o(()=>[...e[10]||(e[10]=[n(" Meldet sich bei Porsche Connect an und speichert die Zugangs-Token. Nur bei der Ersteinrichtung nötig oder wenn die Verbindung verloren gegangen ist. ",-1)])]),_:1},8,["onButtonClicked"]),s.authStatus.message?(i(),p(d,{key:2,subtype:"info"},{default:o(()=>[n(f(s.authStatus.message),1)]),_:1})):m("",!0),s.authStatus.captchaImage?(i(),b("div",I,[l(d,{subtype:"secondary"},{default:o(()=>[e[11]||(e[11]=t("b",null,"Captcha",-1)),e[12]||(e[12]=t("br",null,null,-1)),e[13]||(e[13]=n(" Bitte das angezeigte Captcha eingeben und erneut auf „Porsche verbinden“ klicken. ",-1)),e[14]||(e[14]=t("br",null,null,-1)),t("img",{src:s.authStatus.captchaImage,alt:"Captcha",style:{"margin-top":"8px","max-width":"100%",background:"#fff",padding:"6px","border-radius":"6px"}},null,8,P)]),_:1}),l(c,{title:"Captcha",subtype:"text","model-value":s.captchaInput,"onUpdate:modelValue":e[3]||(e[3]=u=>s.captchaInput=u)},null,8,["model-value"])])):m("",!0),s.authStatus.justConnected?(i(),p(d,{key:4,subtype:"success"},{default:o(()=>[...e[15]||(e[15]=[t("b",null,"Erfolgreich verbunden!",-1),t("br",null,null,-1),n(" Bitte jetzt auf ",-1),t("b",null,'"Speichern"',-1),n(" klicken, um die Verbindung dauerhaft zu sichern. ",-1)])]),_:1})):m("",!0),s.authStatus.error?(i(),p(d,{key:5,subtype:"danger"},{default:o(()=>[e[16]||(e[16]=t("b",null,"Fehler",-1)),e[17]||(e[17]=t("br",null,null,-1)),n(" "+f(s.authStatus.error),1)]),_:1})):m("",!0),l(w,{title:"SoC während der Ladung berechnen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":a.vehicle.configuration.calculate_soc,"onUpdate:modelValue":e[4]||(e[4]=u=>a.updateConfiguration(u,"configuration.calculate_soc"))},{help:o(()=>[...e[18]||(e[18]=[n(" Berechnet den Ladestand (SoC) während der Ladung aus Ladeleistung und Ladedauer. Nur nötig, wenn der SoC nicht oft genug über die Porsche-Schnittstelle abgerufen werden kann. ",-1)])]),_:1},8,["model-value"])])}const E=C(k,[["render",V],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/porsche/vehicle.vue"]]);export{E as default}; +import{V as y}from"./VehicleConfiguration-848lVEbG.js";import{_ as C,m as h,l as i,f as b,z as p,u as o,y as t,B as n,q as l,J as f,x as m}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const k={name:"VehicleSocPorsche",mixins:[y],data(){return{authStatus:{message:"",error:"",captchaImage:"",justConnected:!1},captchaInput:"",sid:null,password:""}},computed:{isConnected(){return!!this.vehicle.configuration.access_token}},methods:{async startAuth(){this.authStatus={message:"Anmeldung läuft…",error:"",captchaImage:"",justConnected:!1};const a={email:this.vehicle.configuration.email,password:this.password,captcha:this.captchaInput||null,sid:this.sid};try{const r=await(await fetch("/openWB/web/settings/modules/vehicles/porsche/porsche_auth_login.php",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)})).json();r.status==="ok"?(this.updateConfiguration(r.access_token,"configuration.access_token"),this.updateConfiguration(r.refresh_token,"configuration.refresh_token"),this.updateConfiguration(r.expires_at,"configuration.expires_at"),this.authStatus={message:"",error:"",captchaImage:"",justConnected:!0},this.sid=null,this.captchaInput="",this.password=""):r.status==="captcha"?(this.sid=r.sid,this.authStatus={message:"",error:"",captchaImage:r.image,justConnected:!1}):this.authStatus={message:"",error:r.message||"Unbekannter Fehler.",captchaImage:"",justConnected:!1}}catch(e){this.authStatus={message:"",error:"Netzwerkfehler: "+e,captchaImage:"",justConnected:!1}}}}},S={class:"vehicle-soc-porsche"},I={key:3},P=["src"];function V(a,e,r,x,s,g){const d=h("openwb-base-alert"),c=h("openwb-base-text-input"),v=h("openwb-base-button-input"),w=h("openwb-base-button-group-input");return i(),b("div",S,[g.isConnected?(i(),p(d,{key:0,subtype:"success"},{default:o(()=>[...e[5]||(e[5]=[t("b",null,"Porsche verbunden",-1),t("br",null,null,-1),n(" Anmeldung vorhanden. Der Ladestand wird über Porsche Connect abgerufen. ",-1)])]),_:1})):(i(),p(d,{key:1,subtype:"warning"},{default:o(()=>[...e[6]||(e[6]=[t("b",null,"Nicht verbunden",-1),t("br",null,null,-1),n(" Bitte unten mit den My-Porsche-Zugangsdaten anmelden. ",-1)])]),_:1})),l(c,{title:"My-Porsche E-Mail (Porsche ID)",subtype:"email",required:"","model-value":a.vehicle.configuration.email,"onUpdate:modelValue":e[0]||(e[0]=u=>a.updateConfiguration(u,"configuration.email"))},{help:o(()=>[...e[7]||(e[7]=[n(" E-Mail-Adresse der Porsche ID, mit der Ihr Euch in der My-Porsche-App bzw. auf my.porsche.com anmeldet. ",-1)])]),_:1},8,["model-value"]),l(c,{title:"My-Porsche Passwort",subtype:"password","model-value":s.password,"onUpdate:modelValue":e[1]||(e[1]=u=>s.password=u)},{help:o(()=>[...e[8]||(e[8]=[n(" Passwort der Porsche ID. Wird nur für die Anmeldung verwendet und ",-1),t("b",null,"nicht gespeichert",-1),n(". ",-1)])]),_:1},8,["model-value"]),l(c,{title:"Fahrgestellnummer (VIN)",subtype:"text","model-value":a.vehicle.configuration.vin,"onUpdate:modelValue":e[2]||(e[2]=u=>a.updateConfiguration(u,"configuration.vin"))},{help:o(()=>[...e[9]||(e[9]=[n(" Optional. Nur nötig, wenn mehrere Fahrzeuge mit der Porsche ID verknüpft sind. Bleibt das Feld leer, wird das erste Fahrzeug im Konto verwendet. ",-1)])]),_:1},8,["model-value"]),l(v,{title:"Porsche Anmeldung","button-text":"Porsche verbinden",subtype:"primary",onButtonClicked:g.startAuth},{help:o(()=>[...e[10]||(e[10]=[n(" Meldet sich bei Porsche Connect an und speichert die Zugangs-Token. Nur bei der Ersteinrichtung nötig oder wenn die Verbindung verloren gegangen ist. ",-1)])]),_:1},8,["onButtonClicked"]),s.authStatus.message?(i(),p(d,{key:2,subtype:"info"},{default:o(()=>[n(f(s.authStatus.message),1)]),_:1})):m("",!0),s.authStatus.captchaImage?(i(),b("div",I,[l(d,{subtype:"secondary"},{default:o(()=>[e[11]||(e[11]=t("b",null,"Captcha",-1)),e[12]||(e[12]=t("br",null,null,-1)),e[13]||(e[13]=n(" Bitte das angezeigte Captcha eingeben und erneut auf „Porsche verbinden“ klicken. ",-1)),e[14]||(e[14]=t("br",null,null,-1)),t("img",{src:s.authStatus.captchaImage,alt:"Captcha",style:{"margin-top":"8px","max-width":"100%",background:"#fff",padding:"6px","border-radius":"6px"}},null,8,P)]),_:1}),l(c,{title:"Captcha",subtype:"text","model-value":s.captchaInput,"onUpdate:modelValue":e[3]||(e[3]=u=>s.captchaInput=u)},null,8,["model-value"])])):m("",!0),s.authStatus.justConnected?(i(),p(d,{key:4,subtype:"success"},{default:o(()=>[...e[15]||(e[15]=[t("b",null,"Erfolgreich verbunden!",-1),t("br",null,null,-1),n(" Bitte jetzt auf ",-1),t("b",null,'"Speichern"',-1),n(" klicken, um die Verbindung dauerhaft zu sichern. ",-1)])]),_:1})):m("",!0),s.authStatus.error?(i(),p(d,{key:5,subtype:"danger"},{default:o(()=>[e[16]||(e[16]=t("b",null,"Fehler",-1)),e[17]||(e[17]=t("br",null,null,-1)),n(" "+f(s.authStatus.error),1)]),_:1})):m("",!0),l(w,{title:"SoC während der Ladung berechnen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":a.vehicle.configuration.calculate_soc,"onUpdate:modelValue":e[4]||(e[4]=u=>a.updateConfiguration(u,"configuration.calculate_soc"))},{help:o(()=>[...e[18]||(e[18]=[n(" Berechnet den Ladestand (SoC) während der Ladung aus Ladeleistung und Ladedauer. Nur nötig, wenn der SoC nicht oft genug über die Porsche-Schnittstelle abgerufen werden kann. ",-1)])]),_:1},8,["model-value"])])}const E=C(k,[["render",V],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/porsche/vehicle.vue"]]);export{E as default}; diff --git a/web/settings/assets/vehicle-BshhPeos.js b/web/settings/assets/vehicle-B_OH6GMe.js similarity index 96% rename from web/settings/assets/vehicle-BshhPeos.js rename to web/settings/assets/vehicle-B_OH6GMe.js index 29cc7a8158..6d6323d2f4 100644 --- a/web/settings/assets/vehicle-BshhPeos.js +++ b/web/settings/assets/vehicle-B_OH6GMe.js @@ -1 +1 @@ -import{V as m}from"./VehicleConfiguration-CDk_8xEa.js";import{_ as b,m as u,l as f,f as g,q as i,u as o,B as n,y as t,J as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const v={name:"VehicleSocMqtt",mixins:[m]},w={class:"vehicle-soc-mqtt"};function B(l,e,k,z,x,I){const p=u("openwb-base-alert"),r=u("openwb-base-copy-to-clipboard"),d=u("openwb-base-button-group-input");return f(),g("div",w,[i(p,{subtype:"warning"},{default:o(()=>[e[1]||(e[1]=n(" Ist die ",-1)),e[2]||(e[2]=t("strong",null,"Benutzerverwaltung",-1)),e[3]||(e[3]=n(" aktiviert, dann muss ein Benutzer mit Schreibrechten für die entsprechenden Topics angelegt werden, damit openWB die Daten akzeptiert. Hierfür werden automatisch die benötigten Berechtigungen in der Rolle ",-1)),t("strong",null,`"Daten: Fahrzeug '`+s(l.vehicle.name)+"' ("+s(l.vehicleId)+') MQTT-Input"',1),e[4]||(e[4]=n(" angelegt, die einem Benutzer zugewiesen werden kann. ",-1))]),_:1}),i(p,{subtype:"info"},{default:o(()=>[t("ul",null,[t("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:o(()=>[n(" openWB/set/mqtt/vehicle/"+s(l.vehicleId)+"/get/soc ",1)]),_:1}),e[5]||(e[5]=t("br",null,null,-1)),e[6]||(e[6]=n(" Fahrzeug-SoC mit Nachkommastellen (Float) oder Ganzzahl",-1)),e[7]||(e[7]=t("br",null,null,-1)),e[8]||(e[8]=n(" Beispiel: ",-1)),e[9]||(e[9]=t("span",{class:"text-info"},"89.5",-1))]),t("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:o(()=>[n(" openWB/set/mqtt/vehicle/"+s(l.vehicleId)+"/get/soc_timestamp ",1)]),_:1}),e[10]||(e[10]=t("br",null,null,-1)),e[11]||(e[11]=n(" Zeitstempel des SoCs in s als Unix-Zeitstempel",-1)),e[12]||(e[12]=t("br",null,null,-1)),e[13]||(e[13]=n(" Diese Info ist optional. Wird kein Wert für das Topic veröffentlicht, wird bei der Abfrage automatisch der aktuelle Zeitstempel gesetzt.",-1)),e[14]||(e[14]=t("br",null,null,-1)),e[15]||(e[15]=n(" Beispiel: ",-1)),e[16]||(e[16]=t("span",{class:"text-info"},"1748339524",-1))]),t("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:o(()=>[n(" openWB/set/mqtt/vehicle/"+s(l.vehicleId)+"/get/range ",1)]),_:1}),e[17]||(e[17]=t("br",null,null,-1)),e[18]||(e[18]=n(" Reichweite des Fahrzeugs in km mit Nachkommastellen (Float) oder Ganzzahl",-1)),e[19]||(e[19]=t("br",null,null,-1)),e[20]||(e[20]=n(" Diese Info ist optional.",-1)),e[21]||(e[21]=t("br",null,null,-1)),e[22]||(e[22]=n(" Beispiel: ",-1)),e[23]||(e[23]=t("span",{class:"text-info"},"356.5",-1))]),t("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:o(()=>[n(" openWB/set/mqtt/vehicle/"+s(l.vehicleId)+"/get/odometer ",1)]),_:1}),e[24]||(e[24]=t("br",null,null,-1)),e[25]||(e[25]=n(" Aktueller Km-Stand des Fahrzeugs in km mit Nachkommastellen (Float) oder Ganzzahl",-1)),e[26]||(e[26]=t("br",null,null,-1)),e[27]||(e[27]=n(" Diese Info ist optional.",-1)),e[28]||(e[28]=t("br",null,null,-1)),e[29]||(e[29]=n(" Beispiel: ",-1)),e[30]||(e[30]=t("span",{class:"text-info"},"20356.5",-1))])])]),_:1}),i(d,{title:"SoC während der Ladung berechnen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":l.vehicle.configuration.calculate_soc,"onUpdate:modelValue":e[0]||(e[0]=a=>l.updateConfiguration(a,"configuration.calculate_soc"))},{help:o(()=>[...e[31]||(e[31]=[n(" Berechnet den Ladestand (SoC) während der Ladung. Dies ist notwendig, wenn der SoC während der Ladung nicht aktualisiert wird. Die Berechnung erfolgt über die Ladeleistung und die Ladedauer. ",-1)])]),_:1},8,["model-value"])])}const N=b(v,[["render",B],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/mqtt/vehicle.vue"]]);export{N as default}; +import{V as m}from"./VehicleConfiguration-848lVEbG.js";import{_ as b,m as u,l as f,f as g,q as i,u as o,B as n,y as t,J as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const v={name:"VehicleSocMqtt",mixins:[m]},w={class:"vehicle-soc-mqtt"};function B(l,e,k,z,x,I){const p=u("openwb-base-alert"),r=u("openwb-base-copy-to-clipboard"),d=u("openwb-base-button-group-input");return f(),g("div",w,[i(p,{subtype:"warning"},{default:o(()=>[e[1]||(e[1]=n(" Ist die ",-1)),e[2]||(e[2]=t("strong",null,"Benutzerverwaltung",-1)),e[3]||(e[3]=n(" aktiviert, dann muss ein Benutzer mit Schreibrechten für die entsprechenden Topics angelegt werden, damit openWB die Daten akzeptiert. Hierfür werden automatisch die benötigten Berechtigungen in der Rolle ",-1)),t("strong",null,`"Daten: Fahrzeug '`+s(l.vehicle.name)+"' ("+s(l.vehicleId)+') MQTT-Input"',1),e[4]||(e[4]=n(" angelegt, die einem Benutzer zugewiesen werden kann. ",-1))]),_:1}),i(p,{subtype:"info"},{default:o(()=>[t("ul",null,[t("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:o(()=>[n(" openWB/set/mqtt/vehicle/"+s(l.vehicleId)+"/get/soc ",1)]),_:1}),e[5]||(e[5]=t("br",null,null,-1)),e[6]||(e[6]=n(" Fahrzeug-SoC mit Nachkommastellen (Float) oder Ganzzahl",-1)),e[7]||(e[7]=t("br",null,null,-1)),e[8]||(e[8]=n(" Beispiel: ",-1)),e[9]||(e[9]=t("span",{class:"text-info"},"89.5",-1))]),t("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:o(()=>[n(" openWB/set/mqtt/vehicle/"+s(l.vehicleId)+"/get/soc_timestamp ",1)]),_:1}),e[10]||(e[10]=t("br",null,null,-1)),e[11]||(e[11]=n(" Zeitstempel des SoCs in s als Unix-Zeitstempel",-1)),e[12]||(e[12]=t("br",null,null,-1)),e[13]||(e[13]=n(" Diese Info ist optional. Wird kein Wert für das Topic veröffentlicht, wird bei der Abfrage automatisch der aktuelle Zeitstempel gesetzt.",-1)),e[14]||(e[14]=t("br",null,null,-1)),e[15]||(e[15]=n(" Beispiel: ",-1)),e[16]||(e[16]=t("span",{class:"text-info"},"1748339524",-1))]),t("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:o(()=>[n(" openWB/set/mqtt/vehicle/"+s(l.vehicleId)+"/get/range ",1)]),_:1}),e[17]||(e[17]=t("br",null,null,-1)),e[18]||(e[18]=n(" Reichweite des Fahrzeugs in km mit Nachkommastellen (Float) oder Ganzzahl",-1)),e[19]||(e[19]=t("br",null,null,-1)),e[20]||(e[20]=n(" Diese Info ist optional.",-1)),e[21]||(e[21]=t("br",null,null,-1)),e[22]||(e[22]=n(" Beispiel: ",-1)),e[23]||(e[23]=t("span",{class:"text-info"},"356.5",-1))]),t("li",null,[i(r,{class:"text-info",tooltip:"Topic kopieren"},{default:o(()=>[n(" openWB/set/mqtt/vehicle/"+s(l.vehicleId)+"/get/odometer ",1)]),_:1}),e[24]||(e[24]=t("br",null,null,-1)),e[25]||(e[25]=n(" Aktueller Km-Stand des Fahrzeugs in km mit Nachkommastellen (Float) oder Ganzzahl",-1)),e[26]||(e[26]=t("br",null,null,-1)),e[27]||(e[27]=n(" Diese Info ist optional.",-1)),e[28]||(e[28]=t("br",null,null,-1)),e[29]||(e[29]=n(" Beispiel: ",-1)),e[30]||(e[30]=t("span",{class:"text-info"},"20356.5",-1))])])]),_:1}),i(d,{title:"SoC während der Ladung berechnen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":l.vehicle.configuration.calculate_soc,"onUpdate:modelValue":e[0]||(e[0]=a=>l.updateConfiguration(a,"configuration.calculate_soc"))},{help:o(()=>[...e[31]||(e[31]=[n(" Berechnet den Ladestand (SoC) während der Ladung. Dies ist notwendig, wenn der SoC während der Ladung nicht aktualisiert wird. Die Berechnung erfolgt über die Ladeleistung und die Ladedauer. ",-1)])]),_:1},8,["model-value"])])}const N=b(v,[["render",B],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/mqtt/vehicle.vue"]]);export{N as default}; diff --git a/web/settings/assets/vehicle-CDGTUfuy.js b/web/settings/assets/vehicle-CECHBQbr.js similarity index 89% rename from web/settings/assets/vehicle-CDGTUfuy.js rename to web/settings/assets/vehicle-CECHBQbr.js index fe0bced4bb..7be76f790e 100644 --- a/web/settings/assets/vehicle-CDGTUfuy.js +++ b/web/settings/assets/vehicle-CECHBQbr.js @@ -1 +1 @@ -import{V as r}from"./VehicleConfiguration-CDk_8xEa.js";import{_ as u,m as l,l as p,f as s,q as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const m={name:"VehicleSocEvnotify",mixins:[r]},d={class:"vehicle-soc-evnotify"};function f(e,o,c,v,b,g){const a=l("openwb-base-number-input"),t=l("openwb-base-text-input");return p(),s("div",d,[i(a,{title:"ID",required:"",min:0,"model-value":e.vehicle.configuration.id,"onUpdate:modelValue":o[0]||(o[0]=n=>e.updateConfiguration(n,"configuration.id"))},null,8,["model-value"]),i(t,{title:"AKey",required:"","model-value":e.vehicle.configuration.akey,"onUpdate:modelValue":o[1]||(o[1]=n=>e.updateConfiguration(n,"configuration.akey"))},null,8,["model-value"]),i(t,{title:"Token",required:"","model-value":e.vehicle.configuration.token,"onUpdate:modelValue":o[2]||(o[2]=n=>e.updateConfiguration(n,"configuration.token"))},null,8,["model-value"])])}const $=u(m,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/evnotify/vehicle.vue"]]);export{$ as default}; +import{V as r}from"./VehicleConfiguration-848lVEbG.js";import{_ as u,m as l,l as p,f as s,q as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const m={name:"VehicleSocEvnotify",mixins:[r]},d={class:"vehicle-soc-evnotify"};function f(e,o,c,v,b,g){const a=l("openwb-base-number-input"),t=l("openwb-base-text-input");return p(),s("div",d,[i(a,{title:"ID",required:"",min:0,"model-value":e.vehicle.configuration.id,"onUpdate:modelValue":o[0]||(o[0]=n=>e.updateConfiguration(n,"configuration.id"))},null,8,["model-value"]),i(t,{title:"AKey",required:"","model-value":e.vehicle.configuration.akey,"onUpdate:modelValue":o[1]||(o[1]=n=>e.updateConfiguration(n,"configuration.akey"))},null,8,["model-value"]),i(t,{title:"Token",required:"","model-value":e.vehicle.configuration.token,"onUpdate:modelValue":o[2]||(o[2]=n=>e.updateConfiguration(n,"configuration.token"))},null,8,["model-value"])])}const $=u(m,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/evnotify/vehicle.vue"]]);export{$ as default}; diff --git a/web/settings/assets/vehicle-BSiBNQ9u.js b/web/settings/assets/vehicle-CU0ewb5h.js similarity index 95% rename from web/settings/assets/vehicle-BSiBNQ9u.js rename to web/settings/assets/vehicle-CU0ewb5h.js index f35c17a66f..f998f17312 100644 --- a/web/settings/assets/vehicle-BSiBNQ9u.js +++ b/web/settings/assets/vehicle-CU0ewb5h.js @@ -1 +1 @@ -import{V as g}from"./VehicleConfiguration-CDk_8xEa.js";import{_ as b,m as d,l as r,f as a,q as p,u as s,B as t,y as o,z as c,J as k,K as m,x as f}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const h=14,x={name:"VehicleSocMyskoda",mixins:[g],computed:{keyExpiryDate(){const n=this.vehicle.configuration.key_expires_at;return n?new Date(n):null},keyExpiryFormatted(){return this.keyExpiryDate?this.keyExpiryDate.toLocaleDateString("de-DE"):""},keyExpiryDaysLeft(){return this.keyExpiryDate?Math.ceil((this.keyExpiryDate-new Date)/(1e3*60*60*24)):null},keyExpirySoon(){return this.keyExpiryDaysLeft!==null&&this.keyExpiryDaysLeft<=h},keyExpirySubtype(){return this.keyExpirySoon?"warning":"secondary"}}},E={class:"vehicle-soc-myskoda"},v={key:0};function D(n,e,_,w,A,i){const u=d("openwb-base-alert"),y=d("openwb-base-text-input");return r(),a("div",E,[p(u,{subtype:"info"},{default:s(()=>[...e[2]||(e[2]=[t(" Für diese Anbindung wird ein persönlicher API-Schlüssel für die MyŠkoda Public API benötigt. Dieser wird in der ",-1),o("strong",null,"MyŠkoda-App",-1),t(" erzeugt und verwaltet (App-Version mind. 8.16), nicht auf einer Website: auf dem Handy mit installierter App ",-1),o("a",{href:"https://go.skoda.eu/api-keys",target:"_blank",rel:"noopener"},"go.skoda.eu/api-keys",-1),t(" öffnen, oder den QR-Code aus der ",-1),o("a",{href:"https://public.api.connect.skoda-auto.cz/docs",target:"_blank",rel:"noopener"},"offiziellen API-Doku",-1),t(" mit dem Handy scannen. Der Key ist an die beim Erstellen ausgewählten Fahrzeuge gebunden und läuft ab - rechtzeitig in der App erneuern. ",-1)])]),_:1}),p(y,{title:"API-Schlüssel",subtype:"password",required:"","model-value":n.vehicle.configuration.api_key,"onUpdate:modelValue":e[0]||(e[0]=l=>n.updateConfiguration(l,"configuration.api_key"))},{help:s(()=>[...e[3]||(e[3]=[t(" In der MyŠkoda-App unter Schlüsselverwaltung erzeugt (App-Version mind. 8.16). ",-1)])]),_:1},8,["model-value"]),p(y,{title:"VIN",required:"","model-value":n.vehicle.configuration.vin,"onUpdate:modelValue":e[1]||(e[1]=l=>n.updateConfiguration(l,"configuration.vin"))},{help:s(()=>[...e[4]||(e[4]=[t(" Die Fahrgestellnummer des Fahrzeugs. ",-1)])]),_:1},8,["model-value"]),n.vehicle.configuration.key_expires_at?(r(),c(u,{key:0,subtype:i.keyExpirySubtype},{default:s(()=>[e[7]||(e[7]=o("b",null,"API-Schlüssel gültig bis:",-1)),t(" "+k(i.keyExpiryFormatted)+" ",1),i.keyExpirySoon?(r(),a("span",v,[e[5]||(e[5]=o("br",null,null,-1)),i.keyExpiryDaysLeft>0?(r(),a(m,{key:0},[t("Läuft in "+k(i.keyExpiryDaysLeft)+" Tagen ab",1)],64)):(r(),a(m,{key:1},[t("Ist abgelaufen")],64)),e[6]||(e[6]=t(" - bitte rechtzeitig in der MyŠkoda-App erneuern. ",-1))])):f("",!0)]),_:1},8,["subtype"])):f("",!0)])}const P=b(x,[["render",D],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/myskoda/vehicle.vue"]]);export{P as default}; +import{V as g}from"./VehicleConfiguration-848lVEbG.js";import{_ as b,m as d,l as r,f as a,q as p,u as s,B as t,y as o,z as c,J as k,K as m,x as f}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const h=14,x={name:"VehicleSocMyskoda",mixins:[g],computed:{keyExpiryDate(){const n=this.vehicle.configuration.key_expires_at;return n?new Date(n):null},keyExpiryFormatted(){return this.keyExpiryDate?this.keyExpiryDate.toLocaleDateString("de-DE"):""},keyExpiryDaysLeft(){return this.keyExpiryDate?Math.ceil((this.keyExpiryDate-new Date)/(1e3*60*60*24)):null},keyExpirySoon(){return this.keyExpiryDaysLeft!==null&&this.keyExpiryDaysLeft<=h},keyExpirySubtype(){return this.keyExpirySoon?"warning":"secondary"}}},E={class:"vehicle-soc-myskoda"},v={key:0};function D(n,e,_,w,A,i){const u=d("openwb-base-alert"),y=d("openwb-base-text-input");return r(),a("div",E,[p(u,{subtype:"info"},{default:s(()=>[...e[2]||(e[2]=[t(" Für diese Anbindung wird ein persönlicher API-Schlüssel für die MyŠkoda Public API benötigt. Dieser wird in der ",-1),o("strong",null,"MyŠkoda-App",-1),t(" erzeugt und verwaltet (App-Version mind. 8.16), nicht auf einer Website: auf dem Handy mit installierter App ",-1),o("a",{href:"https://go.skoda.eu/api-keys",target:"_blank",rel:"noopener"},"go.skoda.eu/api-keys",-1),t(" öffnen, oder den QR-Code aus der ",-1),o("a",{href:"https://public.api.connect.skoda-auto.cz/docs",target:"_blank",rel:"noopener"},"offiziellen API-Doku",-1),t(" mit dem Handy scannen. Der Key ist an die beim Erstellen ausgewählten Fahrzeuge gebunden und läuft ab - rechtzeitig in der App erneuern. ",-1)])]),_:1}),p(y,{title:"API-Schlüssel",subtype:"password",required:"","model-value":n.vehicle.configuration.api_key,"onUpdate:modelValue":e[0]||(e[0]=l=>n.updateConfiguration(l,"configuration.api_key"))},{help:s(()=>[...e[3]||(e[3]=[t(" In der MyŠkoda-App unter Schlüsselverwaltung erzeugt (App-Version mind. 8.16). ",-1)])]),_:1},8,["model-value"]),p(y,{title:"VIN",required:"","model-value":n.vehicle.configuration.vin,"onUpdate:modelValue":e[1]||(e[1]=l=>n.updateConfiguration(l,"configuration.vin"))},{help:s(()=>[...e[4]||(e[4]=[t(" Die Fahrgestellnummer des Fahrzeugs. ",-1)])]),_:1},8,["model-value"]),n.vehicle.configuration.key_expires_at?(r(),c(u,{key:0,subtype:i.keyExpirySubtype},{default:s(()=>[e[7]||(e[7]=o("b",null,"API-Schlüssel gültig bis:",-1)),t(" "+k(i.keyExpiryFormatted)+" ",1),i.keyExpirySoon?(r(),a("span",v,[e[5]||(e[5]=o("br",null,null,-1)),i.keyExpiryDaysLeft>0?(r(),a(m,{key:0},[t("Läuft in "+k(i.keyExpiryDaysLeft)+" Tagen ab",1)],64)):(r(),a(m,{key:1},[t("Ist abgelaufen")],64)),e[6]||(e[6]=t(" - bitte rechtzeitig in der MyŠkoda-App erneuern. ",-1))])):f("",!0)]),_:1},8,["subtype"])):f("",!0)])}const P=b(x,[["render",D],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/myskoda/vehicle.vue"]]);export{P as default}; diff --git a/web/settings/assets/vehicle--I9xDm5i.js b/web/settings/assets/vehicle-Ct8gNMK1.js similarity index 95% rename from web/settings/assets/vehicle--I9xDm5i.js rename to web/settings/assets/vehicle-Ct8gNMK1.js index 67c7d9558c..a0796f9795 100644 --- a/web/settings/assets/vehicle--I9xDm5i.js +++ b/web/settings/assets/vehicle-Ct8gNMK1.js @@ -1 +1 @@ -import{V as p}from"./VehicleConfiguration-CDk_8xEa.js";import{_ as m,m as u,l as b,f as g,q as a,u as i,y as n,B as t}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"VehicleSocVweuda",mixins:[p]},v={class:"vehicle-soc-vweuda"};function c(o,e,w,h,V,D){const d=u("openwb-base-alert"),l=u("openwb-base-text-input"),s=u("openwb-base-button-group-input");return b(),g("div",v,[a(d,{subtype:"info"},{default:i(()=>[...e[4]||(e[4]=[n("p",null,[t(" Das VWEUDA-Modul kann Fahrzeugdaten für mehrere Marken des VW-Konzerns abrufen. Das VWEUDA-Modul holt die Daten aus dem "),n("a",{href:"https://eu-data-act.drivesomethinggreater.com/de/de",target:"_blank",rel:"noopener noreferrer"},"VW-EU-DATA Portal"),t(" ab. ")],-1),n("p",null,' Im Portal muss zuerst für jedes Fahrzeug ein "Benutzerdefinierter bzw. kontinuierlicher Datenabruf" eingerichtet werden mit folgenden Parametern: ',-1),n("ul",null,[n("li",null,"Data Clusters:All Data"),n("li",null,"Intervall: 15 min"),n("li",null,"kein Ende")],-1),n("p",null,[t(" Nach Einrichtung des Abrufs werden vom Portal im Abstand von ca. 15 Minuten zip-Dateien bereitgestellt."),n("br"),t(" Zu Beginn können die Dateien den Zusatz _no_content im Namen haben und sind weitgehend leer."),n("br"),t(" Nach einigen Stunden kommen dann die Dateien mit Inhalt. Diese werden dann vom VWEUDA-Modul abgeholt. ")],-1)])]),_:1}),a(l,{title:"Benutzername",required:"",subtype:"user","model-value":o.vehicle.configuration.user_id,"onUpdate:modelValue":e[0]||(e[0]=r=>o.updateConfiguration(r,"configuration.user_id"))},{help:i(()=>[...e[5]||(e[5]=[t(" Der Benutzername(Email-Adresse) für die Anmeldung im Account der VW-Marke. ",-1)])]),_:1},8,["model-value"]),a(l,{title:"Kennwort",required:"",subtype:"password","model-value":o.vehicle.configuration.password,"onUpdate:modelValue":e[1]||(e[1]=r=>o.updateConfiguration(r,"configuration.password"))},{help:i(()=>[...e[6]||(e[6]=[t(" Das Passwort für die Anmeldung im Account. ",-1)])]),_:1},8,["model-value"]),a(l,{title:"VIN",required:"","model-value":o.vehicle.configuration.vin,"onUpdate:modelValue":e[2]||(e[2]=r=>o.updateConfiguration(r,"configuration.vin"))},{help:i(()=>[...e[7]||(e[7]=[t(" Die Fahrgestellnummer des Fahrzeugs. ",-1)])]),_:1},8,["model-value"]),a(s,{title:"SoC während der Ladung berechnen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":o.vehicle.configuration.calculate_soc,"onUpdate:modelValue":e[3]||(e[3]=r=>o.updateConfiguration(r,"configuration.calculate_soc"))},{help:i(()=>[...e[8]||(e[8]=[t(" Berechnet den Ladestand (SoC) während der Ladung. ",-1),n("br",null,null,-1),t(" Die Berechnung erfolgt über die Ladeleistung und die Ladedauer. ",-1),n("br",null,null,-1)])]),_:1},8,["model-value"])])}const U=m(f,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/vweuda/vehicle.vue"]]);export{U as default}; +import{V as p}from"./VehicleConfiguration-848lVEbG.js";import{_ as m,m as u,l as b,f as g,q as a,u as i,y as n,B as t}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"VehicleSocVweuda",mixins:[p]},v={class:"vehicle-soc-vweuda"};function c(o,e,w,h,V,D){const d=u("openwb-base-alert"),l=u("openwb-base-text-input"),s=u("openwb-base-button-group-input");return b(),g("div",v,[a(d,{subtype:"info"},{default:i(()=>[...e[4]||(e[4]=[n("p",null,[t(" Das VWEUDA-Modul kann Fahrzeugdaten für mehrere Marken des VW-Konzerns abrufen. Das VWEUDA-Modul holt die Daten aus dem "),n("a",{href:"https://eu-data-act.drivesomethinggreater.com/de/de",target:"_blank",rel:"noopener noreferrer"},"VW-EU-DATA Portal"),t(" ab. ")],-1),n("p",null,' Im Portal muss zuerst für jedes Fahrzeug ein "Benutzerdefinierter bzw. kontinuierlicher Datenabruf" eingerichtet werden mit folgenden Parametern: ',-1),n("ul",null,[n("li",null,"Data Clusters:All Data"),n("li",null,"Intervall: 15 min"),n("li",null,"kein Ende")],-1),n("p",null,[t(" Nach Einrichtung des Abrufs werden vom Portal im Abstand von ca. 15 Minuten zip-Dateien bereitgestellt."),n("br"),t(" Zu Beginn können die Dateien den Zusatz _no_content im Namen haben und sind weitgehend leer."),n("br"),t(" Nach einigen Stunden kommen dann die Dateien mit Inhalt. Diese werden dann vom VWEUDA-Modul abgeholt. ")],-1)])]),_:1}),a(l,{title:"Benutzername",required:"",subtype:"user","model-value":o.vehicle.configuration.user_id,"onUpdate:modelValue":e[0]||(e[0]=r=>o.updateConfiguration(r,"configuration.user_id"))},{help:i(()=>[...e[5]||(e[5]=[t(" Der Benutzername(Email-Adresse) für die Anmeldung im Account der VW-Marke. ",-1)])]),_:1},8,["model-value"]),a(l,{title:"Kennwort",required:"",subtype:"password","model-value":o.vehicle.configuration.password,"onUpdate:modelValue":e[1]||(e[1]=r=>o.updateConfiguration(r,"configuration.password"))},{help:i(()=>[...e[6]||(e[6]=[t(" Das Passwort für die Anmeldung im Account. ",-1)])]),_:1},8,["model-value"]),a(l,{title:"VIN",required:"","model-value":o.vehicle.configuration.vin,"onUpdate:modelValue":e[2]||(e[2]=r=>o.updateConfiguration(r,"configuration.vin"))},{help:i(()=>[...e[7]||(e[7]=[t(" Die Fahrgestellnummer des Fahrzeugs. ",-1)])]),_:1},8,["model-value"]),a(s,{title:"SoC während der Ladung berechnen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":o.vehicle.configuration.calculate_soc,"onUpdate:modelValue":e[3]||(e[3]=r=>o.updateConfiguration(r,"configuration.calculate_soc"))},{help:i(()=>[...e[8]||(e[8]=[t(" Berechnet den Ladestand (SoC) während der Ladung. ",-1),n("br",null,null,-1),t(" Die Berechnung erfolgt über die Ladeleistung und die Ladedauer. ",-1),n("br",null,null,-1)])]),_:1},8,["model-value"])])}const U=m(f,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/vweuda/vehicle.vue"]]);export{U as default}; diff --git a/web/settings/assets/vehicle-DERZuDMD.js b/web/settings/assets/vehicle-CueU6Sby.js similarity index 98% rename from web/settings/assets/vehicle-DERZuDMD.js rename to web/settings/assets/vehicle-CueU6Sby.js index b3a52cc238..441a643182 100644 --- a/web/settings/assets/vehicle-DERZuDMD.js +++ b/web/settings/assets/vehicle-CueU6Sby.js @@ -1 +1 @@ -import{V as _}from"./VehicleConfiguration-CDk_8xEa.js";import{_ as C,m as f,l as r,f as g,z as a,u as i,y as t,B as n,q as l,J as c,x as p}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const y={name:"VehicleSocBmwCardata",mixins:[_],data(){return{authStatus:{message:"",user_code:"",verification_uri:"",error:"",justConnected:!1},pollTimer:null,pollInterval:5}},computed:{isConnected(){return!!this.vehicle.configuration.access_token}},beforeUnmount(){this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null)},methods:{async startAuth(){this.authStatus={message:"Anmeldung wird gestartet...",user_code:"",verification_uri:"",error:"",justConnected:!1};try{const e=await(await fetch("/openWB/web/settings/modules/vehicles/bmw_cardata/bmw_cardata_auth_start.php",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({client_id:this.vehicle.configuration.client_id})})).json();if(e.error){this.authStatus.error=e.error;return}this.updateConfiguration(e.device_code||"","configuration.auth_device_code"),this.updateConfiguration(e.code_verifier||"","configuration.auth_code_verifier"),this.updateConfiguration(e.expires_at||0,"configuration.auth_expires_at"),this.updateConfiguration(!1,"configuration.auth_connected"),this.authStatus={message:e.message||"",user_code:e.user_code||"",verification_uri:e.verification_uri||"",error:"",justConnected:!1},e.user_code&&!this.pollTimer&&(e.interval&&(this.pollInterval=e.interval),this.pollTimer=setInterval(()=>this.pollAuthStatus(),this.pollInterval*1e3))}catch{this.authStatus.error="BMW Anmeldung konnte nicht gestartet werden."}},async pollAuthStatus(){try{const e=await(await fetch("/openWB/web/settings/modules/vehicles/bmw_cardata/bmw_cardata_auth_status.php",{method:"POST",headers:{"Content-Type":"application/json"},cache:"no-store",body:JSON.stringify({client_id:this.vehicle.configuration.client_id,device_code:this.vehicle.configuration.auth_device_code,code_verifier:this.vehicle.configuration.auth_code_verifier,expires_at:this.vehicle.configuration.auth_expires_at})})).json();if(e.error){this.authStatus.error=e.error,this.authStatus.message="",clearInterval(this.pollTimer),this.pollTimer=null;return}if(e.connected&&e.access_token){clearInterval(this.pollTimer),this.pollTimer=null,this.updateConfiguration(e.access_token,"configuration.access_token"),this.updateConfiguration(e.refresh_token||"","configuration.refresh_token"),this.updateConfiguration(e.expires_at||0,"configuration.expires_at"),this.updateConfiguration("","configuration.container_id"),this.updateConfiguration("","configuration.auth_device_code"),this.updateConfiguration("","configuration.auth_code_verifier"),this.updateConfiguration(0,"configuration.auth_expires_at"),this.updateConfiguration(!0,"configuration.auth_connected"),this.authStatus={message:"",user_code:"",verification_uri:"",error:"",justConnected:!0};return}e.interval&&e.interval!==this.pollInterval&&(this.pollInterval=e.interval,clearInterval(this.pollTimer),this.pollTimer=setInterval(()=>this.pollAuthStatus(),this.pollInterval*1e3)),this.authStatus.message=e.message||"Warte auf BMW-Bestätigung..."}catch{this.authStatus.error="Anmeldungs-Status konnte nicht geladen werden.",clearInterval(this.pollTimer),this.pollTimer=null}}}},w={class:"vehicle-soc-bmw-cardata"},S={key:0},B={key:1},k={key:2};function T(o,e,I,W,u,h){const s=f("openwb-base-alert"),b=f("openwb-base-text-input"),m=f("openwb-base-button-input"),v=f("openwb-base-button-group-input");return r(),g("div",w,[h.isConnected?(r(),a(s,{key:0,subtype:"success"},{default:i(()=>[...e[3]||(e[3]=[t("b",null,"BMW verbunden",-1),t("br",null,null,-1),n(" Tokens vorhanden. BMW CarData kann genutzt werden. ",-1)])]),_:1})):(r(),a(s,{key:1,subtype:"warning"},{default:i(()=>[...e[4]||(e[4]=[t("b",null,"Nicht verbunden",-1),t("br",null,null,-1),n(" Bitte BMW-Kopplung durchführen. ",-1)])]),_:1})),l(b,{title:"Client ID",subtype:"text",required:"","model-value":o.vehicle.configuration.client_id,"onUpdate:modelValue":e[0]||(e[0]=d=>o.updateConfiguration(d,"configuration.client_id"))},{help:i(()=>[...e[5]||(e[5]=[n(" BMW CarData Client ID aus dem BMW Portal. ",-1)])]),_:1},8,["model-value"]),l(b,{title:"VIN",subtype:"text",required:"",pattern:"^[A-HJ-NPR-Z0-9]{17}$","model-value":o.vehicle.configuration.vin,"onUpdate:modelValue":e[1]||(e[1]=d=>o.updateConfiguration(d,"configuration.vin"))},{help:i(()=>[...e[6]||(e[6]=[n(" Fahrzeug-Identifikationsnummer (17 Zeichen). ",-1)])]),_:1},8,["model-value"]),l(s,{subtype:"secondary"},{default:i(()=>[e[9]||(e[9]=t("b",null,"BMW Verbindung",-1)),e[10]||(e[10]=t("br",null,null,-1)),e[11]||(e[11]=n(" Status: ",-1)),h.isConnected?(r(),g("span",S,[...e[7]||(e[7]=[t("b",null,"Verbunden",-1)])])):(r(),g("span",B,[...e[8]||(e[8]=[t("b",null,"Nicht verbunden",-1)])])),e[12]||(e[12]=t("br",null,null,-1)),u.authStatus.message?(r(),g("span",k,c(u.authStatus.message),1)):p("",!0)]),_:1}),h.isConnected?(r(),a(s,{key:2,subtype:"info"},{default:i(()=>[...e[13]||(e[13]=[n(" Die BMW-Verbindung ist aktiv. Eine erneute Kopplung ist nur nötig, wenn die Verbindung verloren gegangen ist. ",-1)])]),_:1})):p("",!0),l(m,{title:"BMW Anmeldung","button-text":"BMW koppeln",subtype:"primary",onButtonClicked:h.startAuth},{help:i(()=>[...e[14]||(e[14]=[n(" Startet die BMW-Anmeldung. Nur nötig bei erstmaliger Einrichtung oder wenn die Verbindung verloren gegangen ist. ",-1)])]),_:1},8,["onButtonClicked"]),u.authStatus.user_code?(r(),a(s,{key:3,subtype:"info"},{default:i(()=>[e[15]||(e[15]=t("b",null,"BMW Anmeldung läuft",-1)),e[16]||(e[16]=t("br",null,null,-1)),n(" URL: "+c(u.authStatus.verification_uri),1),e[17]||(e[17]=t("br",null,null,-1)),e[18]||(e[18]=n(" Code: ",-1)),t("b",null,c(u.authStatus.user_code),1)]),_:1})):p("",!0),u.authStatus.justConnected?(r(),a(s,{key:4,subtype:"success"},{default:i(()=>[...e[19]||(e[19]=[t("b",null,"BMW erfolgreich verbunden!",-1),t("br",null,null,-1),n(" Bitte jetzt auf ",-1),t("b",null,'"Speichern"',-1),n(" klicken, um die Verbindung dauerhaft zu sichern. ",-1)])]),_:1})):p("",!0),u.authStatus.error?(r(),a(s,{key:5,subtype:"danger"},{default:i(()=>[e[20]||(e[20]=t("b",null,"Fehler",-1)),e[21]||(e[21]=t("br",null,null,-1)),n(" "+c(u.authStatus.error),1)]),_:1})):p("",!0),l(v,{title:"SoC während der Ladung berechnen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":o.vehicle.configuration.calculate_soc,"onUpdate:modelValue":e[2]||(e[2]=d=>o.updateConfiguration(d,"configuration.calculate_soc"))},{help:i(()=>[...e[22]||(e[22]=[n(" openWB berechnet den Ladestand während der Ladung selbst. ",-1)])]),_:1},8,["model-value"]),l(s,{subtype:"secondary"},{default:i(()=>[...e[23]||(e[23]=[t("b",null,"Technische Hinweise:",-1),t("br",null,null,-1),n(" • BMW CarData API: max. 50 Abfragen pro Tag",-1),t("br",null,null,-1),n(" • Empfohlenes Intervall während Ladung: 30-60 Minuten",-1),t("br",null,null,-1),n(" • Empfohlenes Intervall ohne Ladung: 720 Minuten ",-1)])]),_:1})])}const z=C(y,[["render",T],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/bmw_cardata/vehicle.vue"]]);export{z as default}; +import{V as _}from"./VehicleConfiguration-848lVEbG.js";import{_ as C,m as f,l as r,f as g,z as a,u as i,y as t,B as n,q as l,J as c,x as p}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const y={name:"VehicleSocBmwCardata",mixins:[_],data(){return{authStatus:{message:"",user_code:"",verification_uri:"",error:"",justConnected:!1},pollTimer:null,pollInterval:5}},computed:{isConnected(){return!!this.vehicle.configuration.access_token}},beforeUnmount(){this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null)},methods:{async startAuth(){this.authStatus={message:"Anmeldung wird gestartet...",user_code:"",verification_uri:"",error:"",justConnected:!1};try{const e=await(await fetch("/openWB/web/settings/modules/vehicles/bmw_cardata/bmw_cardata_auth_start.php",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({client_id:this.vehicle.configuration.client_id})})).json();if(e.error){this.authStatus.error=e.error;return}this.updateConfiguration(e.device_code||"","configuration.auth_device_code"),this.updateConfiguration(e.code_verifier||"","configuration.auth_code_verifier"),this.updateConfiguration(e.expires_at||0,"configuration.auth_expires_at"),this.updateConfiguration(!1,"configuration.auth_connected"),this.authStatus={message:e.message||"",user_code:e.user_code||"",verification_uri:e.verification_uri||"",error:"",justConnected:!1},e.user_code&&!this.pollTimer&&(e.interval&&(this.pollInterval=e.interval),this.pollTimer=setInterval(()=>this.pollAuthStatus(),this.pollInterval*1e3))}catch{this.authStatus.error="BMW Anmeldung konnte nicht gestartet werden."}},async pollAuthStatus(){try{const e=await(await fetch("/openWB/web/settings/modules/vehicles/bmw_cardata/bmw_cardata_auth_status.php",{method:"POST",headers:{"Content-Type":"application/json"},cache:"no-store",body:JSON.stringify({client_id:this.vehicle.configuration.client_id,device_code:this.vehicle.configuration.auth_device_code,code_verifier:this.vehicle.configuration.auth_code_verifier,expires_at:this.vehicle.configuration.auth_expires_at})})).json();if(e.error){this.authStatus.error=e.error,this.authStatus.message="",clearInterval(this.pollTimer),this.pollTimer=null;return}if(e.connected&&e.access_token){clearInterval(this.pollTimer),this.pollTimer=null,this.updateConfiguration(e.access_token,"configuration.access_token"),this.updateConfiguration(e.refresh_token||"","configuration.refresh_token"),this.updateConfiguration(e.expires_at||0,"configuration.expires_at"),this.updateConfiguration("","configuration.container_id"),this.updateConfiguration("","configuration.auth_device_code"),this.updateConfiguration("","configuration.auth_code_verifier"),this.updateConfiguration(0,"configuration.auth_expires_at"),this.updateConfiguration(!0,"configuration.auth_connected"),this.authStatus={message:"",user_code:"",verification_uri:"",error:"",justConnected:!0};return}e.interval&&e.interval!==this.pollInterval&&(this.pollInterval=e.interval,clearInterval(this.pollTimer),this.pollTimer=setInterval(()=>this.pollAuthStatus(),this.pollInterval*1e3)),this.authStatus.message=e.message||"Warte auf BMW-Bestätigung..."}catch{this.authStatus.error="Anmeldungs-Status konnte nicht geladen werden.",clearInterval(this.pollTimer),this.pollTimer=null}}}},w={class:"vehicle-soc-bmw-cardata"},S={key:0},B={key:1},k={key:2};function T(o,e,I,W,u,h){const s=f("openwb-base-alert"),b=f("openwb-base-text-input"),m=f("openwb-base-button-input"),v=f("openwb-base-button-group-input");return r(),g("div",w,[h.isConnected?(r(),a(s,{key:0,subtype:"success"},{default:i(()=>[...e[3]||(e[3]=[t("b",null,"BMW verbunden",-1),t("br",null,null,-1),n(" Tokens vorhanden. BMW CarData kann genutzt werden. ",-1)])]),_:1})):(r(),a(s,{key:1,subtype:"warning"},{default:i(()=>[...e[4]||(e[4]=[t("b",null,"Nicht verbunden",-1),t("br",null,null,-1),n(" Bitte BMW-Kopplung durchführen. ",-1)])]),_:1})),l(b,{title:"Client ID",subtype:"text",required:"","model-value":o.vehicle.configuration.client_id,"onUpdate:modelValue":e[0]||(e[0]=d=>o.updateConfiguration(d,"configuration.client_id"))},{help:i(()=>[...e[5]||(e[5]=[n(" BMW CarData Client ID aus dem BMW Portal. ",-1)])]),_:1},8,["model-value"]),l(b,{title:"VIN",subtype:"text",required:"",pattern:"^[A-HJ-NPR-Z0-9]{17}$","model-value":o.vehicle.configuration.vin,"onUpdate:modelValue":e[1]||(e[1]=d=>o.updateConfiguration(d,"configuration.vin"))},{help:i(()=>[...e[6]||(e[6]=[n(" Fahrzeug-Identifikationsnummer (17 Zeichen). ",-1)])]),_:1},8,["model-value"]),l(s,{subtype:"secondary"},{default:i(()=>[e[9]||(e[9]=t("b",null,"BMW Verbindung",-1)),e[10]||(e[10]=t("br",null,null,-1)),e[11]||(e[11]=n(" Status: ",-1)),h.isConnected?(r(),g("span",S,[...e[7]||(e[7]=[t("b",null,"Verbunden",-1)])])):(r(),g("span",B,[...e[8]||(e[8]=[t("b",null,"Nicht verbunden",-1)])])),e[12]||(e[12]=t("br",null,null,-1)),u.authStatus.message?(r(),g("span",k,c(u.authStatus.message),1)):p("",!0)]),_:1}),h.isConnected?(r(),a(s,{key:2,subtype:"info"},{default:i(()=>[...e[13]||(e[13]=[n(" Die BMW-Verbindung ist aktiv. Eine erneute Kopplung ist nur nötig, wenn die Verbindung verloren gegangen ist. ",-1)])]),_:1})):p("",!0),l(m,{title:"BMW Anmeldung","button-text":"BMW koppeln",subtype:"primary",onButtonClicked:h.startAuth},{help:i(()=>[...e[14]||(e[14]=[n(" Startet die BMW-Anmeldung. Nur nötig bei erstmaliger Einrichtung oder wenn die Verbindung verloren gegangen ist. ",-1)])]),_:1},8,["onButtonClicked"]),u.authStatus.user_code?(r(),a(s,{key:3,subtype:"info"},{default:i(()=>[e[15]||(e[15]=t("b",null,"BMW Anmeldung läuft",-1)),e[16]||(e[16]=t("br",null,null,-1)),n(" URL: "+c(u.authStatus.verification_uri),1),e[17]||(e[17]=t("br",null,null,-1)),e[18]||(e[18]=n(" Code: ",-1)),t("b",null,c(u.authStatus.user_code),1)]),_:1})):p("",!0),u.authStatus.justConnected?(r(),a(s,{key:4,subtype:"success"},{default:i(()=>[...e[19]||(e[19]=[t("b",null,"BMW erfolgreich verbunden!",-1),t("br",null,null,-1),n(" Bitte jetzt auf ",-1),t("b",null,'"Speichern"',-1),n(" klicken, um die Verbindung dauerhaft zu sichern. ",-1)])]),_:1})):p("",!0),u.authStatus.error?(r(),a(s,{key:5,subtype:"danger"},{default:i(()=>[e[20]||(e[20]=t("b",null,"Fehler",-1)),e[21]||(e[21]=t("br",null,null,-1)),n(" "+c(u.authStatus.error),1)]),_:1})):p("",!0),l(v,{title:"SoC während der Ladung berechnen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":o.vehicle.configuration.calculate_soc,"onUpdate:modelValue":e[2]||(e[2]=d=>o.updateConfiguration(d,"configuration.calculate_soc"))},{help:i(()=>[...e[22]||(e[22]=[n(" openWB berechnet den Ladestand während der Ladung selbst. ",-1)])]),_:1},8,["model-value"]),l(s,{subtype:"secondary"},{default:i(()=>[...e[23]||(e[23]=[t("b",null,"Technische Hinweise:",-1),t("br",null,null,-1),n(" • BMW CarData API: max. 50 Abfragen pro Tag",-1),t("br",null,null,-1),n(" • Empfohlenes Intervall während Ladung: 30-60 Minuten",-1),t("br",null,null,-1),n(" • Empfohlenes Intervall ohne Ladung: 720 Minuten ",-1)])]),_:1})])}const z=C(y,[["render",T],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/bmw_cardata/vehicle.vue"]]);export{z as default}; diff --git a/web/settings/assets/vehicle-CMYRNHSe.js b/web/settings/assets/vehicle-D-Y1XPzL.js similarity index 97% rename from web/settings/assets/vehicle-CMYRNHSe.js rename to web/settings/assets/vehicle-D-Y1XPzL.js index 410e2fdbd9..03f8cd4ecb 100644 --- a/web/settings/assets/vehicle-CMYRNHSe.js +++ b/web/settings/assets/vehicle-D-Y1XPzL.js @@ -1 +1 @@ -import{V as m}from"./VehicleConfiguration-CDk_8xEa.js";import{_ as p,m as s,l as g,f as b,q as i,u as l,B as t,y as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"VehicleSocJson",mixins:[m]},w={class:"vehicle-soc-json"};function h(n,e,v,c,k,z){const a=s("openwb-base-text-input"),u=s("openwb-base-button-group-input"),d=s("openwb-base-number-input");return g(),b("div",w,[i(a,{title:"URL",subtype:"url",required:"","model-value":n.vehicle.configuration.url,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.url"))},{help:l(()=>[...e[7]||(e[7]=[t(" Es wird eine komplette URL erwartet mit Angaben zum Protokoll, IP oder Hostnamen, optional einem Port und einem Pfad. Die Antwort muss ein json-Objekt sein. Beispiel: http://192.168.1.1:8080/json?data=1 ",-1)])]),_:1},8,["model-value"]),i(a,{title:"Abfrage für SoC",subtype:"text",required:"","model-value":n.vehicle.configuration.soc_pattern,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.soc_pattern"))},{help:l(()=>[...e[8]||(e[8]=[t(' Zur Analyse der Werte aus dem json-Objekt wird jq benutzt. Ist die Json Antwort z.B. {"response":{"soc":"39.8", "range": "207", "timestamp":1734054449, "odometer": "123456"}} So muss hier .response.soc eingetragen werden. ',-1),r("br",null,null,-1),t(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche den aktuellen Ladestand (SoC) darstellt. ",-1)])]),_:1},8,["model-value"]),i(a,{title:"Abfrage für Reichweite",subtype:"text","model-value":n.vehicle.configuration.range_pattern,"onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.range_pattern"))},{help:l(()=>[...e[9]||(e[9]=[t(' Zur Analyse der Werte aus dem json-Objekt wird jq benutzt. Ist die Json Antwort z.B. {"response":{"soc":"39.8", "range": "207", "timestamp":1734054449, "odometer": "123456"}} So muss hier .response.range eingetragen werden. ',-1),r("br",null,null,-1),t(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Reichweite darstellt.",-1),r("br",null,null,-1),t(" Ohne Angabe wird die Reichweite nicht abgefragt und auf Null gesetzt. ",-1)])]),_:1},8,["model-value"]),i(a,{title:"Abfrage für Zeitstempel",subtype:"text","model-value":n.vehicle.configuration.timestamp_pattern,"onUpdate:modelValue":e[3]||(e[3]=o=>n.updateConfiguration(o,"configuration.timestamp_pattern"))},{help:l(()=>[...e[10]||(e[10]=[t(' Zur Analyse der Werte aus dem json-Objekt wird jq benutzt. Ist die Json Antwort z.B. {"response":{"soc":"39.8", "range": "207", "timestamp":1734054449, "odometer": "123456"}} So muss hier .response.timestamp eingetragen werden.',-1),r("br",null,null,-1),t(" Es wird vom Server entweder eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen als Epoch Zeitstempel oder eine ISO 8601 formatierte Zeit erwartet welche den Zeitstempel der gelieferten Werte darstellt.",-1),r("br",null,null,-1),t(" Ohne Angabe wird der Zeitpunkt des Datenabrufs als Zeitstempel verwendet. ",-1)])]),_:1},8,["model-value"]),i(a,{title:"Abfrage für Kilometerstand",subtype:"text","model-value":n.vehicle.configuration.odometer_pattern,"onUpdate:modelValue":e[4]||(e[4]=o=>n.updateConfiguration(o,"configuration.odometer_pattern"))},{help:l(()=>[...e[11]||(e[11]=[t(' Zur Analyse der Werte aus dem json-Objekt wird jq benutzt. Ist die Json Antwort z.B. {"response":{"soc":"39.8", "range": "207", "timestamp":1734054449, "odometer": "123456"}} So muss hier .response.odometer eingetragen werden.',-1),r("br",null,null,-1),t(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche den aktuellen Kilometerstand darstellt.",-1),r("br",null,null,-1),t(" Ohne Angabe wird der Kilometerstand nicht abgefragt und auf Null gesetzt. ",-1)])]),_:1},8,["model-value"]),i(u,{title:"SoC während der Ladung berechnen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":n.vehicle.configuration.calculate_soc,"onUpdate:modelValue":e[5]||(e[5]=o=>n.updateConfiguration(o,"configuration.calculate_soc"))},{help:l(()=>[...e[12]||(e[12]=[t(" Berechnet den Ladestand (SoC) während der Ladung. Dies ist notwendig, wenn der SoC nicht über die Schnittstelle des Fahrzeugs abgerufen werden kann. Die Berechnung erfolgt über die Ladeleistung und die Ladedauer. ",-1),r("br",null,null,-1),t(" Derzeit u.a. notwendig für Peugeot, Opel, Citroen und DS. ",-1)])]),_:1},8,["model-value"]),i(d,{title:"Timeout für http-Abfragen",subtype:"number","model-value":n.vehicle.configuration.timeout,"onUpdate:modelValue":e[6]||(e[6]=o=>n.updateConfiguration(o,"configuration.timeout"))},{help:l(()=>[...e[13]||(e[13]=[t(" Ermöglicht es einen Timeout für die http-Abfragen zu setzen. Der Wert wird in Sekunden angegeben. Standardwert ist 5 Sekunden sofern kein anderer Wert angegeben ist. ",-1)])]),_:1},8,["model-value"])])}const D=p(f,[["render",h],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/json/vehicle.vue"]]);export{D as default}; +import{V as m}from"./VehicleConfiguration-848lVEbG.js";import{_ as p,m as s,l as g,f as b,q as i,u as l,B as t,y as r}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"VehicleSocJson",mixins:[m]},w={class:"vehicle-soc-json"};function h(n,e,v,c,k,z){const a=s("openwb-base-text-input"),u=s("openwb-base-button-group-input"),d=s("openwb-base-number-input");return g(),b("div",w,[i(a,{title:"URL",subtype:"url",required:"","model-value":n.vehicle.configuration.url,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.url"))},{help:l(()=>[...e[7]||(e[7]=[t(" Es wird eine komplette URL erwartet mit Angaben zum Protokoll, IP oder Hostnamen, optional einem Port und einem Pfad. Die Antwort muss ein json-Objekt sein. Beispiel: http://192.168.1.1:8080/json?data=1 ",-1)])]),_:1},8,["model-value"]),i(a,{title:"Abfrage für SoC",subtype:"text",required:"","model-value":n.vehicle.configuration.soc_pattern,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.soc_pattern"))},{help:l(()=>[...e[8]||(e[8]=[t(' Zur Analyse der Werte aus dem json-Objekt wird jq benutzt. Ist die Json Antwort z.B. {"response":{"soc":"39.8", "range": "207", "timestamp":1734054449, "odometer": "123456"}} So muss hier .response.soc eingetragen werden. ',-1),r("br",null,null,-1),t(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche den aktuellen Ladestand (SoC) darstellt. ",-1)])]),_:1},8,["model-value"]),i(a,{title:"Abfrage für Reichweite",subtype:"text","model-value":n.vehicle.configuration.range_pattern,"onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.range_pattern"))},{help:l(()=>[...e[9]||(e[9]=[t(' Zur Analyse der Werte aus dem json-Objekt wird jq benutzt. Ist die Json Antwort z.B. {"response":{"soc":"39.8", "range": "207", "timestamp":1734054449, "odometer": "123456"}} So muss hier .response.range eingetragen werden. ',-1),r("br",null,null,-1),t(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche die aktuelle Reichweite darstellt.",-1),r("br",null,null,-1),t(" Ohne Angabe wird die Reichweite nicht abgefragt und auf Null gesetzt. ",-1)])]),_:1},8,["model-value"]),i(a,{title:"Abfrage für Zeitstempel",subtype:"text","model-value":n.vehicle.configuration.timestamp_pattern,"onUpdate:modelValue":e[3]||(e[3]=o=>n.updateConfiguration(o,"configuration.timestamp_pattern"))},{help:l(()=>[...e[10]||(e[10]=[t(' Zur Analyse der Werte aus dem json-Objekt wird jq benutzt. Ist die Json Antwort z.B. {"response":{"soc":"39.8", "range": "207", "timestamp":1734054449, "odometer": "123456"}} So muss hier .response.timestamp eingetragen werden.',-1),r("br",null,null,-1),t(" Es wird vom Server entweder eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen als Epoch Zeitstempel oder eine ISO 8601 formatierte Zeit erwartet welche den Zeitstempel der gelieferten Werte darstellt.",-1),r("br",null,null,-1),t(" Ohne Angabe wird der Zeitpunkt des Datenabrufs als Zeitstempel verwendet. ",-1)])]),_:1},8,["model-value"]),i(a,{title:"Abfrage für Kilometerstand",subtype:"text","model-value":n.vehicle.configuration.odometer_pattern,"onUpdate:modelValue":e[4]||(e[4]=o=>n.updateConfiguration(o,"configuration.odometer_pattern"))},{help:l(()=>[...e[11]||(e[11]=[t(' Zur Analyse der Werte aus dem json-Objekt wird jq benutzt. Ist die Json Antwort z.B. {"response":{"soc":"39.8", "range": "207", "timestamp":1734054449, "odometer": "123456"}} So muss hier .response.odometer eingetragen werden.',-1),r("br",null,null,-1),t(" Es wird vom Server eine Zahl mit oder ohne Nachkommastellen (Float, Integer) und einem Punkt als Dezimaltrennzeichen erwartet, welche den aktuellen Kilometerstand darstellt.",-1),r("br",null,null,-1),t(" Ohne Angabe wird der Kilometerstand nicht abgefragt und auf Null gesetzt. ",-1)])]),_:1},8,["model-value"]),i(u,{title:"SoC während der Ladung berechnen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":n.vehicle.configuration.calculate_soc,"onUpdate:modelValue":e[5]||(e[5]=o=>n.updateConfiguration(o,"configuration.calculate_soc"))},{help:l(()=>[...e[12]||(e[12]=[t(" Berechnet den Ladestand (SoC) während der Ladung. Dies ist notwendig, wenn der SoC nicht über die Schnittstelle des Fahrzeugs abgerufen werden kann. Die Berechnung erfolgt über die Ladeleistung und die Ladedauer. ",-1),r("br",null,null,-1),t(" Derzeit u.a. notwendig für Peugeot, Opel, Citroen und DS. ",-1)])]),_:1},8,["model-value"]),i(d,{title:"Timeout für http-Abfragen",subtype:"number","model-value":n.vehicle.configuration.timeout,"onUpdate:modelValue":e[6]||(e[6]=o=>n.updateConfiguration(o,"configuration.timeout"))},{help:l(()=>[...e[13]||(e[13]=[t(" Ermöglicht es einen Timeout für die http-Abfragen zu setzen. Der Wert wird in Sekunden angegeben. Standardwert ist 5 Sekunden sofern kein anderer Wert angegeben ist. ",-1)])]),_:1},8,["model-value"])])}const D=p(f,[["render",h],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/json/vehicle.vue"]]);export{D as default}; diff --git a/web/settings/assets/vehicle-DIpqULEt.js b/web/settings/assets/vehicle-D6IYlEOk.js similarity index 96% rename from web/settings/assets/vehicle-DIpqULEt.js rename to web/settings/assets/vehicle-D6IYlEOk.js index c8668f840d..6de47d25f5 100644 --- a/web/settings/assets/vehicle-DIpqULEt.js +++ b/web/settings/assets/vehicle-D6IYlEOk.js @@ -1 +1 @@ -import{V as d}from"./VehicleConfiguration-CDk_8xEa.js";import{_ as p,m as r,l as m,f as g,q as o,u as l,B as i,y as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"VehicleSocHomeAssistant",mixins:[d]},b={class:"vehicle-soc-homeassistant"};function v(t,e,w,h,D,C){const s=r("openwb-base-text-input"),a=r("openwb-base-button-group-input");return m(),g("div",b,[o(s,{title:"URL",subtype:"url",required:"","model-value":t.vehicle.configuration.url,"onUpdate:modelValue":e[0]||(e[0]=n=>t.updateConfiguration(n,"configuration.url"))},{help:l(()=>[...e[6]||(e[6]=[i(" Es wird eine komplette URL erwartet mit Angaben zum Protokoll, IP oder Hostnamen und idealerweise Port. Beispiel: http://192.168.1.1:8123 ",-1)])]),_:1},8,["model-value"]),o(s,{title:"Token",subtype:"text",required:"","model-value":t.vehicle.configuration.token,"onUpdate:modelValue":e[1]||(e[1]=n=>t.updateConfiguration(n,"configuration.token"))},{help:l(()=>[...e[7]||(e[7]=[i(" Das Token kann in HomeAssistant hier erstellt werden:",-1),u("br",null,null,-1),i(' "Dein Profil" → oberer Reiter "Sicherheit" → ganz unten "Langlebiges Zugriffstoken erstellen" ',-1)])]),_:1},8,["model-value"]),o(s,{title:"Entitäts-ID SoC",subtype:"text",required:"","model-value":t.vehicle.configuration.entity_soc,"onUpdate:modelValue":e[2]||(e[2]=n=>t.updateConfiguration(n,"configuration.entity_soc"))},{help:l(()=>[...e[8]||(e[8]=[i(' Die Entitäts ID findet sich im HomeAssistant unter "Einstellungen" → "Geräte & Dienste" → im oberen Reiter "Entitäten" auswählen ',-1)])]),_:1},8,["model-value"]),o(s,{title:"Entitäts-ID Reichweite",subtype:"text","model-value":t.vehicle.configuration.entity_range,"onUpdate:modelValue":e[3]||(e[3]=n=>t.updateConfiguration(n,"configuration.entity_range"))},{help:l(()=>[...e[9]||(e[9]=[i(' Die Entitäts ID findet sich im HomeAssistant unter "Einstellungen" → "Geräte & Dienste" → im oberen Reiter "Entitäten" auswählen ',-1)])]),_:1},8,["model-value"]),o(s,{title:"Entitäts-ID Kilometerstand",subtype:"text","model-value":t.vehicle.configuration.entity_odometer,"onUpdate:modelValue":e[4]||(e[4]=n=>t.updateConfiguration(n,"configuration.entity_odometer"))},{help:l(()=>[...e[10]||(e[10]=[i(' Die Entitäts ID findet sich im HomeAssistant unter "Einstellungen" → "Geräte & Dienste" → im oberen Reiter "Entitäten" auswählen ',-1)])]),_:1},8,["model-value"]),o(a,{title:"SoC während der Ladung berechnen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.vehicle.configuration.calculate_soc,"onUpdate:modelValue":e[5]||(e[5]=n=>t.updateConfiguration(n,"configuration.calculate_soc"))},{help:l(()=>[...e[11]||(e[11]=[i(" Berechnet den Ladestand (SoC) während der Ladung. Dies ist notwendig, wenn der SoC nicht über die Schnittstelle des Fahrzeugs abgerufen werden kann. Die Berechnung erfolgt über die Ladeleistung und die Ladedauer. ",-1),u("br",null,null,-1),i(" Derzeit notwendig für Peugeot, Opel, Citroen und DS. ",-1)])]),_:1},8,["model-value"])])}const U=p(f,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/homeassistant/vehicle.vue"]]);export{U as default}; +import{V as d}from"./VehicleConfiguration-848lVEbG.js";import{_ as p,m as r,l as m,f as g,q as o,u as l,B as i,y as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"VehicleSocHomeAssistant",mixins:[d]},b={class:"vehicle-soc-homeassistant"};function v(t,e,w,h,D,C){const s=r("openwb-base-text-input"),a=r("openwb-base-button-group-input");return m(),g("div",b,[o(s,{title:"URL",subtype:"url",required:"","model-value":t.vehicle.configuration.url,"onUpdate:modelValue":e[0]||(e[0]=n=>t.updateConfiguration(n,"configuration.url"))},{help:l(()=>[...e[6]||(e[6]=[i(" Es wird eine komplette URL erwartet mit Angaben zum Protokoll, IP oder Hostnamen und idealerweise Port. Beispiel: http://192.168.1.1:8123 ",-1)])]),_:1},8,["model-value"]),o(s,{title:"Token",subtype:"text",required:"","model-value":t.vehicle.configuration.token,"onUpdate:modelValue":e[1]||(e[1]=n=>t.updateConfiguration(n,"configuration.token"))},{help:l(()=>[...e[7]||(e[7]=[i(" Das Token kann in HomeAssistant hier erstellt werden:",-1),u("br",null,null,-1),i(' "Dein Profil" → oberer Reiter "Sicherheit" → ganz unten "Langlebiges Zugriffstoken erstellen" ',-1)])]),_:1},8,["model-value"]),o(s,{title:"Entitäts-ID SoC",subtype:"text",required:"","model-value":t.vehicle.configuration.entity_soc,"onUpdate:modelValue":e[2]||(e[2]=n=>t.updateConfiguration(n,"configuration.entity_soc"))},{help:l(()=>[...e[8]||(e[8]=[i(' Die Entitäts ID findet sich im HomeAssistant unter "Einstellungen" → "Geräte & Dienste" → im oberen Reiter "Entitäten" auswählen ',-1)])]),_:1},8,["model-value"]),o(s,{title:"Entitäts-ID Reichweite",subtype:"text","model-value":t.vehicle.configuration.entity_range,"onUpdate:modelValue":e[3]||(e[3]=n=>t.updateConfiguration(n,"configuration.entity_range"))},{help:l(()=>[...e[9]||(e[9]=[i(' Die Entitäts ID findet sich im HomeAssistant unter "Einstellungen" → "Geräte & Dienste" → im oberen Reiter "Entitäten" auswählen ',-1)])]),_:1},8,["model-value"]),o(s,{title:"Entitäts-ID Kilometerstand",subtype:"text","model-value":t.vehicle.configuration.entity_odometer,"onUpdate:modelValue":e[4]||(e[4]=n=>t.updateConfiguration(n,"configuration.entity_odometer"))},{help:l(()=>[...e[10]||(e[10]=[i(' Die Entitäts ID findet sich im HomeAssistant unter "Einstellungen" → "Geräte & Dienste" → im oberen Reiter "Entitäten" auswählen ',-1)])]),_:1},8,["model-value"]),o(a,{title:"SoC während der Ladung berechnen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.vehicle.configuration.calculate_soc,"onUpdate:modelValue":e[5]||(e[5]=n=>t.updateConfiguration(n,"configuration.calculate_soc"))},{help:l(()=>[...e[11]||(e[11]=[i(" Berechnet den Ladestand (SoC) während der Ladung. Dies ist notwendig, wenn der SoC nicht über die Schnittstelle des Fahrzeugs abgerufen werden kann. Die Berechnung erfolgt über die Ladeleistung und die Ladedauer. ",-1),u("br",null,null,-1),i(" Derzeit notwendig für Peugeot, Opel, Citroen und DS. ",-1)])]),_:1},8,["model-value"])])}const U=p(f,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/homeassistant/vehicle.vue"]]);export{U as default}; diff --git a/web/settings/assets/vehicle-CU9E07u1.js b/web/settings/assets/vehicle-D6SkOafW.js similarity index 91% rename from web/settings/assets/vehicle-CU9E07u1.js rename to web/settings/assets/vehicle-D6SkOafW.js index cfb670b606..d3375ef06f 100644 --- a/web/settings/assets/vehicle-CU9E07u1.js +++ b/web/settings/assets/vehicle-D6SkOafW.js @@ -1 +1 @@ -import{V as l}from"./VehicleConfiguration-CDk_8xEa.js";import{_ as p,m as a,l as m,f,q as r,u as t,B as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const g={name:"VehicleSocPSACC",mixins:[l]},v={class:"vehicle-soc-psacc"};function c(n,e,b,_,C,h){const d=a("openwb-base-alert"),s=a("openwb-base-text-input"),u=a("openwb-base-number-input");return m(),f("div",v,[r(d,{subtype:"info"},{default:t(()=>[...e[3]||(e[3]=[i(' Der PSA Car Controller muss auf einem eigenen Host installiert werden, mit Zugangsdaten konfiguriert werden und dauerhaft laufen. Die openWB ruft den SoC zu Beginn der Ladung vom PSA Car Controller ab. Während der Ladung liefert PSA keine Updates. Daher wird der SoC während der Ladung aus dem Zählerstand berechnet. Ausschlaggebend für die Genauigkeit dieser Berechnung sind die beiden Einstellungen "Kapazität der Batterie" und "Wirkungsgrad der Ladeelektronik" im Fahrzeug-Profil. ',-1)])]),_:1}),r(s,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.vehicle.configuration.psacc_server_or_ip,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.psacc_server_or_ip"))},{help:t(()=>[...e[4]||(e[4]=[i("Host, auf dem der PSA Car Controller läuft.",-1)])]),_:1},8,["model-value"]),r(u,{title:"Port",required:"",min:1,max:65535,"model-value":n.vehicle.configuration.psacc_port,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.psacc_port"))},{help:t(()=>[...e[5]||(e[5]=[i("Nummer des Ports, den der PSA Car Controller verwendet.",-1)])]),_:1},8,["model-value"]),r(s,{title:"VIN",subtype:"text",required:"","model-value":n.vehicle.configuration.vehicle_vin,"onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.vehicle_vin"))},{help:t(()=>[...e[6]||(e[6]=[i("Fahrzeug-Identifizierungsnummer des Fahrzeugs, von dem der SoC abgefragt wird.",-1)])]),_:1},8,["model-value"])])}const x=p(g,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/psacc/vehicle.vue"]]);export{x as default}; +import{V as l}from"./VehicleConfiguration-848lVEbG.js";import{_ as p,m as a,l as m,f,q as r,u as t,B as i}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const g={name:"VehicleSocPSACC",mixins:[l]},v={class:"vehicle-soc-psacc"};function c(n,e,b,_,C,h){const d=a("openwb-base-alert"),s=a("openwb-base-text-input"),u=a("openwb-base-number-input");return m(),f("div",v,[r(d,{subtype:"info"},{default:t(()=>[...e[3]||(e[3]=[i(' Der PSA Car Controller muss auf einem eigenen Host installiert werden, mit Zugangsdaten konfiguriert werden und dauerhaft laufen. Die openWB ruft den SoC zu Beginn der Ladung vom PSA Car Controller ab. Während der Ladung liefert PSA keine Updates. Daher wird der SoC während der Ladung aus dem Zählerstand berechnet. Ausschlaggebend für die Genauigkeit dieser Berechnung sind die beiden Einstellungen "Kapazität der Batterie" und "Wirkungsgrad der Ladeelektronik" im Fahrzeug-Profil. ',-1)])]),_:1}),r(s,{title:"IP oder Hostname",subtype:"host",required:"","model-value":n.vehicle.configuration.psacc_server_or_ip,"onUpdate:modelValue":e[0]||(e[0]=o=>n.updateConfiguration(o,"configuration.psacc_server_or_ip"))},{help:t(()=>[...e[4]||(e[4]=[i("Host, auf dem der PSA Car Controller läuft.",-1)])]),_:1},8,["model-value"]),r(u,{title:"Port",required:"",min:1,max:65535,"model-value":n.vehicle.configuration.psacc_port,"onUpdate:modelValue":e[1]||(e[1]=o=>n.updateConfiguration(o,"configuration.psacc_port"))},{help:t(()=>[...e[5]||(e[5]=[i("Nummer des Ports, den der PSA Car Controller verwendet.",-1)])]),_:1},8,["model-value"]),r(s,{title:"VIN",subtype:"text",required:"","model-value":n.vehicle.configuration.vehicle_vin,"onUpdate:modelValue":e[2]||(e[2]=o=>n.updateConfiguration(o,"configuration.vehicle_vin"))},{help:t(()=>[...e[6]||(e[6]=[i("Fahrzeug-Identifizierungsnummer des Fahrzeugs, von dem der SoC abgefragt wird.",-1)])]),_:1},8,["model-value"])])}const x=p(g,[["render",c],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/psacc/vehicle.vue"]]);export{x as default}; diff --git a/web/settings/assets/vehicle-DBcTnZxE.js b/web/settings/assets/vehicle-D79ErGmr.js similarity index 89% rename from web/settings/assets/vehicle-DBcTnZxE.js rename to web/settings/assets/vehicle-D79ErGmr.js index e900e89407..3b77bc7e23 100644 --- a/web/settings/assets/vehicle-DBcTnZxE.js +++ b/web/settings/assets/vehicle-D79ErGmr.js @@ -1 +1 @@ -import{V as l}from"./VehicleConfiguration-CDk_8xEa.js";import{S as d}from"./SystemVersion-eCZ4XHiC.js";import{_ as p,m as t,l as m,f as b,q as o,u as f,B as r,y as a}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const g={name:"VehicleSocManual",mixins:[l,d]},c={class:"vehicle-soc-manual"},h=["href"];function _(n,e,k,w,v,z){const s=t("openwb-base-alert"),i=t("openwb-base-button-group-input");return m(),b("div",c,[o(s,{subtype:"info"},{default:f(()=>[e[1]||(e[1]=r(' Beim Anstecken des Fahrzeugs muss der aktuelle SoC-Wert des Fahrzeugs über die Hauptseite oder (wenn verbaut) am Display der openWB angegeben werden. Anhand des geladenen Stroms wird der aktuelle SoC-Wert des Fahrzeugs während der Ladung berechnet. Ausschlaggebend für die Genauigkeit der Berechnung sind die beiden Einstellungen "Kapazität der Batterie" und "Wirkungsgrad der Ladeelektronik" im Fahrzeug-Profil. Weitere Infos dazu im ',-1)),a("a",{href:`https://wiki.openwb.de/doku.php?id=openwb:vc:${n.systemVersion}:software:fahrzeug-infos:manueller-soc`,target:"_blank",rel:"noopener noreferrer"}," Wiki-Beitrag zum manuellen SoC ",8,h),e[2]||(e[2]=r(".",-1)),e[3]||(e[3]=a("br",null,null,-1))]),_:1}),o(i,{title:"SoC ohne manuelle Eingabe",buttons:[{buttonValue:!1,text:"letzten SoC beibehalten"},{buttonValue:!0,text:"nach dem Abstecken auf 0% zurücksetzen"}],"model-value":n.vehicle.configuration.reset_after_unplug,"onUpdate:modelValue":e[0]||(e[0]=u=>n.updateConfiguration(u,"configuration.reset_after_unplug"))},null,8,["model-value"])])}const F=p(g,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/manual/vehicle.vue"]]);export{F as default}; +import{V as l}from"./VehicleConfiguration-848lVEbG.js";import{S as d}from"./SystemVersion-eCZ4XHiC.js";import{_ as p,m as t,l as m,f as b,q as o,u as f,B as r,y as a}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const g={name:"VehicleSocManual",mixins:[l,d]},c={class:"vehicle-soc-manual"},h=["href"];function _(n,e,k,w,v,z){const s=t("openwb-base-alert"),i=t("openwb-base-button-group-input");return m(),b("div",c,[o(s,{subtype:"info"},{default:f(()=>[e[1]||(e[1]=r(' Beim Anstecken des Fahrzeugs muss der aktuelle SoC-Wert des Fahrzeugs über die Hauptseite oder (wenn verbaut) am Display der openWB angegeben werden. Anhand des geladenen Stroms wird der aktuelle SoC-Wert des Fahrzeugs während der Ladung berechnet. Ausschlaggebend für die Genauigkeit der Berechnung sind die beiden Einstellungen "Kapazität der Batterie" und "Wirkungsgrad der Ladeelektronik" im Fahrzeug-Profil. Weitere Infos dazu im ',-1)),a("a",{href:`https://wiki.openwb.de/doku.php?id=openwb:vc:${n.systemVersion}:software:fahrzeug-infos:manueller-soc`,target:"_blank",rel:"noopener noreferrer"}," Wiki-Beitrag zum manuellen SoC ",8,h),e[2]||(e[2]=r(".",-1)),e[3]||(e[3]=a("br",null,null,-1))]),_:1}),o(i,{title:"SoC ohne manuelle Eingabe",buttons:[{buttonValue:!1,text:"letzten SoC beibehalten"},{buttonValue:!0,text:"nach dem Abstecken auf 0% zurücksetzen"}],"model-value":n.vehicle.configuration.reset_after_unplug,"onUpdate:modelValue":e[0]||(e[0]=u=>n.updateConfiguration(u,"configuration.reset_after_unplug"))},null,8,["model-value"])])}const F=p(g,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/manual/vehicle.vue"]]);export{F as default}; diff --git a/web/settings/assets/vehicle-BFTlCCmN.js b/web/settings/assets/vehicle-DBl5-B6E.js similarity index 92% rename from web/settings/assets/vehicle-BFTlCCmN.js rename to web/settings/assets/vehicle-DBl5-B6E.js index d6132e19b7..1cf1ec8fdb 100644 --- a/web/settings/assets/vehicle-BFTlCCmN.js +++ b/web/settings/assets/vehicle-DBl5-B6E.js @@ -1 +1 @@ -import{V as u}from"./VehicleConfiguration-CDk_8xEa.js";import{_ as a,m as s,l as d,f as p,q as t,u as r,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const m={name:"VehicleSocKia",mixins:[u]},f={class:"vehicle-soc-kia"};function v(o,e,g,w,V,b){const i=s("openwb-base-text-input");return d(),p("div",f,[t(i,{title:"Benutzername",required:"",subtype:"user","model-value":o.vehicle.configuration.user_id,"onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.user_id"))},{help:r(()=>[...e[4]||(e[4]=[l(" Der Benutzername für die Anmeldung an den Servern. ",-1)])]),_:1},8,["model-value"]),t(i,{title:"Kennwort",required:"",subtype:"password","model-value":o.vehicle.configuration.password,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.password"))},{help:r(()=>[...e[5]||(e[5]=[l(" Das Passwort für die Anmeldung an den Servern. ",-1)])]),_:1},8,["model-value"]),t(i,{title:"PIN",required:"",subtype:"password","model-value":o.vehicle.configuration.pin,"onUpdate:modelValue":e[2]||(e[2]=n=>o.updateConfiguration(n,"configuration.pin"))},{help:r(()=>[...e[6]||(e[6]=[l(" Die PIN für die Anmeldung an den Servern. ",-1)])]),_:1},8,["model-value"]),t(i,{title:"VIN",required:"","model-value":o.vehicle.configuration.vin,"onUpdate:modelValue":e[3]||(e[3]=n=>o.updateConfiguration(n,"configuration.vin"))},{help:r(()=>[...e[7]||(e[7]=[l(" Die Fahrgestellnummer des Fahrzeugs. ",-1)])]),_:1},8,["model-value"])])}const $=a(m,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/kia/vehicle.vue"]]);export{$ as default}; +import{V as u}from"./VehicleConfiguration-848lVEbG.js";import{_ as a,m as s,l as d,f as p,q as t,u as r,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const m={name:"VehicleSocKia",mixins:[u]},f={class:"vehicle-soc-kia"};function v(o,e,g,w,V,b){const i=s("openwb-base-text-input");return d(),p("div",f,[t(i,{title:"Benutzername",required:"",subtype:"user","model-value":o.vehicle.configuration.user_id,"onUpdate:modelValue":e[0]||(e[0]=n=>o.updateConfiguration(n,"configuration.user_id"))},{help:r(()=>[...e[4]||(e[4]=[l(" Der Benutzername für die Anmeldung an den Servern. ",-1)])]),_:1},8,["model-value"]),t(i,{title:"Kennwort",required:"",subtype:"password","model-value":o.vehicle.configuration.password,"onUpdate:modelValue":e[1]||(e[1]=n=>o.updateConfiguration(n,"configuration.password"))},{help:r(()=>[...e[5]||(e[5]=[l(" Das Passwort für die Anmeldung an den Servern. ",-1)])]),_:1},8,["model-value"]),t(i,{title:"PIN",required:"",subtype:"password","model-value":o.vehicle.configuration.pin,"onUpdate:modelValue":e[2]||(e[2]=n=>o.updateConfiguration(n,"configuration.pin"))},{help:r(()=>[...e[6]||(e[6]=[l(" Die PIN für die Anmeldung an den Servern. ",-1)])]),_:1},8,["model-value"]),t(i,{title:"VIN",required:"","model-value":o.vehicle.configuration.vin,"onUpdate:modelValue":e[3]||(e[3]=n=>o.updateConfiguration(n,"configuration.vin"))},{help:r(()=>[...e[7]||(e[7]=[l(" Die Fahrgestellnummer des Fahrzeugs. ",-1)])]),_:1},8,["model-value"])])}const $=a(m,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/kia/vehicle.vue"]]);export{$ as default}; diff --git a/web/settings/assets/vehicle-Dws-gOo2.js b/web/settings/assets/vehicle-DHrlYT3X.js similarity index 96% rename from web/settings/assets/vehicle-Dws-gOo2.js rename to web/settings/assets/vehicle-DHrlYT3X.js index 7ef759ce97..4f0f71c897 100644 --- a/web/settings/assets/vehicle-Dws-gOo2.js +++ b/web/settings/assets/vehicle-DHrlYT3X.js @@ -1 +1 @@ -import{V as d}from"./VehicleConfiguration-CDk_8xEa.js";import{_ as m,m as u,l as f,f as b,q as i,u as r,B as n,y as a}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const g={name:"VehicleSocIoBroker",mixins:[d]},v={class:"vehicle-soc-iobroker"};function k(t,e,w,B,V,C){const s=u("openwb-base-alert"),l=u("openwb-base-text-input"),p=u("openwb-base-button-group-input");return f(),b("div",v,[i(s,{subtype:"info"},{default:r(()=>[...e[7]||(e[7]=[n(" Für diese Anbindung wird der Adapter ",-1),a("a",{href:"https://github.com/ioBroker/ioBroker.rest-api",target:"_blank",rel:"noopener"},"ioBroker.rest-api",-1),n(" benötigt. Bitte in ioBroker installieren und starten, Standardport ist ",-1),a("strong",null,"8093",-1),n(". ",-1)])]),_:1}),i(l,{title:"ioBroker-URL",subtype:"url",required:"","model-value":t.vehicle.configuration.url,"onUpdate:modelValue":e[0]||(e[0]=o=>t.updateConfiguration(o,"configuration.url"))},{help:r(()=>[...e[8]||(e[8]=[n(" Komplette URL mit Protokoll, IP/Hostname und Port des rest-api-Adapters.",-1),a("br",null,null,-1),n(" Beispiel: http://192.168.1.20:8093 ",-1)])]),_:1},8,["model-value"]),i(l,{title:"Benutzer (optional)",subtype:"text","model-value":t.vehicle.configuration.user,"onUpdate:modelValue":e[1]||(e[1]=o=>t.updateConfiguration(o,"configuration.user"))},{help:r(()=>[...e[9]||(e[9]=[n("Nur nötig, wenn im rest-api-Adapter die Authentifizierung aktiviert ist.",-1)])]),_:1},8,["model-value"]),i(l,{title:"Passwort (optional)",subtype:"password","model-value":t.vehicle.configuration.password,"onUpdate:modelValue":e[2]||(e[2]=o=>t.updateConfiguration(o,"configuration.password"))},{help:r(()=>[...e[10]||(e[10]=[n("Nur nötig, wenn im rest-api-Adapter die Authentifizierung aktiviert ist.",-1)])]),_:1},8,["model-value"]),i(l,{title:"State-ID SoC",subtype:"text",required:"","model-value":t.vehicle.configuration.state_soc,"onUpdate:modelValue":e[3]||(e[3]=o=>t.updateConfiguration(o,"configuration.state_soc"))},{help:r(()=>[...e[11]||(e[11]=[n(" Vollständige State-ID aus ioBroker, z.B. der Objektbaum-Pfad eines Adapters.",-1),a("br",null,null,-1),n(" Beispiel: ",-1),a("span",{class:"text-info"},"renault.0.folder.soc",-1),a("br",null,null,-1),n(' Zu finden im ioBroker Admin unter "Objekte", per Klick auf den State kopierbar. ',-1)])]),_:1},8,["model-value"]),i(l,{title:"State-ID Reichweite",subtype:"text","model-value":t.vehicle.configuration.state_range,"onUpdate:modelValue":e[4]||(e[4]=o=>t.updateConfiguration(o,"configuration.state_range"))},{help:r(()=>[...e[12]||(e[12]=[n("Optional. Leer lassen, wenn nicht verfügbar.",-1)])]),_:1},8,["model-value"]),i(l,{title:"State-ID Kilometerstand",subtype:"text","model-value":t.vehicle.configuration.state_odometer,"onUpdate:modelValue":e[5]||(e[5]=o=>t.updateConfiguration(o,"configuration.state_odometer"))},{help:r(()=>[...e[13]||(e[13]=[n("Optional. Leer lassen, wenn nicht verfügbar.",-1)])]),_:1},8,["model-value"]),i(p,{title:"SoC während der Ladung berechnen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.vehicle.configuration.calculate_soc,"onUpdate:modelValue":e[6]||(e[6]=o=>t.updateConfiguration(o,"configuration.calculate_soc"))},{help:r(()=>[...e[14]||(e[14]=[n(" Berechnet den Ladestand (SoC) während der Ladung, falls ioBroker den Wert nicht laufend aktualisiert. ",-1)])]),_:1},8,["model-value"])])}const P=m(g,[["render",k],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/iobroker/vehicle.vue"]]);export{P as default}; +import{V as d}from"./VehicleConfiguration-848lVEbG.js";import{_ as m,m as u,l as f,f as b,q as i,u as r,B as n,y as a}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const g={name:"VehicleSocIoBroker",mixins:[d]},v={class:"vehicle-soc-iobroker"};function k(t,e,w,B,V,C){const s=u("openwb-base-alert"),l=u("openwb-base-text-input"),p=u("openwb-base-button-group-input");return f(),b("div",v,[i(s,{subtype:"info"},{default:r(()=>[...e[7]||(e[7]=[n(" Für diese Anbindung wird der Adapter ",-1),a("a",{href:"https://github.com/ioBroker/ioBroker.rest-api",target:"_blank",rel:"noopener"},"ioBroker.rest-api",-1),n(" benötigt. Bitte in ioBroker installieren und starten, Standardport ist ",-1),a("strong",null,"8093",-1),n(". ",-1)])]),_:1}),i(l,{title:"ioBroker-URL",subtype:"url",required:"","model-value":t.vehicle.configuration.url,"onUpdate:modelValue":e[0]||(e[0]=o=>t.updateConfiguration(o,"configuration.url"))},{help:r(()=>[...e[8]||(e[8]=[n(" Komplette URL mit Protokoll, IP/Hostname und Port des rest-api-Adapters.",-1),a("br",null,null,-1),n(" Beispiel: http://192.168.1.20:8093 ",-1)])]),_:1},8,["model-value"]),i(l,{title:"Benutzer (optional)",subtype:"text","model-value":t.vehicle.configuration.user,"onUpdate:modelValue":e[1]||(e[1]=o=>t.updateConfiguration(o,"configuration.user"))},{help:r(()=>[...e[9]||(e[9]=[n("Nur nötig, wenn im rest-api-Adapter die Authentifizierung aktiviert ist.",-1)])]),_:1},8,["model-value"]),i(l,{title:"Passwort (optional)",subtype:"password","model-value":t.vehicle.configuration.password,"onUpdate:modelValue":e[2]||(e[2]=o=>t.updateConfiguration(o,"configuration.password"))},{help:r(()=>[...e[10]||(e[10]=[n("Nur nötig, wenn im rest-api-Adapter die Authentifizierung aktiviert ist.",-1)])]),_:1},8,["model-value"]),i(l,{title:"State-ID SoC",subtype:"text",required:"","model-value":t.vehicle.configuration.state_soc,"onUpdate:modelValue":e[3]||(e[3]=o=>t.updateConfiguration(o,"configuration.state_soc"))},{help:r(()=>[...e[11]||(e[11]=[n(" Vollständige State-ID aus ioBroker, z.B. der Objektbaum-Pfad eines Adapters.",-1),a("br",null,null,-1),n(" Beispiel: ",-1),a("span",{class:"text-info"},"renault.0.folder.soc",-1),a("br",null,null,-1),n(' Zu finden im ioBroker Admin unter "Objekte", per Klick auf den State kopierbar. ',-1)])]),_:1},8,["model-value"]),i(l,{title:"State-ID Reichweite",subtype:"text","model-value":t.vehicle.configuration.state_range,"onUpdate:modelValue":e[4]||(e[4]=o=>t.updateConfiguration(o,"configuration.state_range"))},{help:r(()=>[...e[12]||(e[12]=[n("Optional. Leer lassen, wenn nicht verfügbar.",-1)])]),_:1},8,["model-value"]),i(l,{title:"State-ID Kilometerstand",subtype:"text","model-value":t.vehicle.configuration.state_odometer,"onUpdate:modelValue":e[5]||(e[5]=o=>t.updateConfiguration(o,"configuration.state_odometer"))},{help:r(()=>[...e[13]||(e[13]=[n("Optional. Leer lassen, wenn nicht verfügbar.",-1)])]),_:1},8,["model-value"]),i(p,{title:"SoC während der Ladung berechnen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.vehicle.configuration.calculate_soc,"onUpdate:modelValue":e[6]||(e[6]=o=>t.updateConfiguration(o,"configuration.calculate_soc"))},{help:r(()=>[...e[14]||(e[14]=[n(" Berechnet den Ladestand (SoC) während der Ladung, falls ioBroker den Wert nicht laufend aktualisiert. ",-1)])]),_:1},8,["model-value"])])}const P=m(g,[["render",k],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/iobroker/vehicle.vue"]]);export{P as default}; diff --git a/web/settings/assets/vehicle-DgJ8MTZf.js b/web/settings/assets/vehicle-qZNjoXbf.js similarity index 95% rename from web/settings/assets/vehicle-DgJ8MTZf.js rename to web/settings/assets/vehicle-qZNjoXbf.js index 55d48e4f11..50f4e79921 100644 --- a/web/settings/assets/vehicle-DgJ8MTZf.js +++ b/web/settings/assets/vehicle-qZNjoXbf.js @@ -1 +1 @@ -import{V as m}from"./VehicleConfiguration-CDk_8xEa.js";import{_ as b,m as s,l as g,f,q as i,u as o,B as n,y as u,J as v}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"VehicleSocMercedesEq",mixins:[m],computed:{callback_url(){return`${location.origin}/openWB/web/settings/modules/vehicles/mercedeseq/callback_vehicle.php`},login_url(){return`https://ssoalpha.dvb.corpinter.net/v1/auth?response_type=code&state=${this.vehicleId}&client_id=${this.vehicle.configuration.client_id}&redirect_uri=${this.callback_url}&scope=mb:vehicle:mbdata:evstatus%20offline_access%20openid`},input_complete(){return this.vehicle.configuration.client_id&&this.vehicle.configuration.client_secret&&this.vehicle.configuration.vin}},methods:{login_window(){console.debug("callback url",this.callback_url),console.debug("login url",this.login_url);var t=window.open(this.login_url,"MercedesLogin","width=800,height=600,status=yes,scrollbars=yes,resizable=yes");t.focus()}}},h={class:"vehicle-soc-mercedeseq"};function w(t,e,k,C,y,r){const a=s("openwb-base-text-input"),d=s("openwb-base-copy-to-clipboard"),p=s("openwb-base-alert"),c=s("openwb-base-button-input");return g(),f("div",h,[i(a,{title:"Client-ID",required:"",subtype:"user","model-value":t.vehicle.configuration.client_id,"onUpdate:modelValue":e[0]||(e[0]=l=>t.updateConfiguration(l,"configuration.client_id"))},{help:o(()=>[...e[3]||(e[3]=[n(" Die im Developer Portal angelegte Client-ID. ",-1)])]),_:1},8,["model-value"]),i(a,{title:"Client Secret",required:"",subtype:"password","model-value":t.vehicle.configuration.client_secret,"onUpdate:modelValue":e[1]||(e[1]=l=>t.updateConfiguration(l,"configuration.client_secret"))},{help:o(()=>[...e[4]||(e[4]=[n(" Das im Developer Portal angelegte Client Secret. ",-1)])]),_:1},8,["model-value"]),i(a,{title:"VIN",required:"","model-value":t.vehicle.configuration.vin,"onUpdate:modelValue":e[2]||(e[2]=l=>t.updateConfiguration(l,"configuration.vin"))},{help:o(()=>[...e[5]||(e[5]=[n(" Die Fahrgestellnummer des Fahrzeugs. ",-1)])]),_:1},8,["model-value"]),i(p,{subtype:"info"},{default:o(()=>[e[6]||(e[6]=n(" Vor dem Anmelden bitte die Angaben speichern.",-1)),e[7]||(e[7]=u("br",null,null,-1)),e[8]||(e[8]=n(" Die Callback-URL für die Anmeldung lautet:",-1)),e[9]||(e[9]=u("br",null,null,-1)),i(d,{class:"text-info",tooltip:"URL kopieren"},{default:o(()=>[n(v(r.callback_url),1)]),_:1})]),_:1}),i(c,{title:"Anmelden","button-text":"Bei Mercedes Anmelden",subtype:"success",disabled:!r.input_complete,onButtonClicked:r.login_window},{help:o(()=>[...e[10]||(e[10]=[n(" Es wird ein neues Browserfenster geöffnet, in dem Du dich bei Mercedes mit Deinen Zugangsdaten anmelden kannst.",-1),u("br",null,null,-1)])]),_:1},8,["disabled","onButtonClicked"])])}const $=b(_,[["render",w],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/mercedeseq/vehicle.vue"]]);export{$ as default}; +import{V as m}from"./VehicleConfiguration-848lVEbG.js";import{_ as b,m as s,l as g,f,q as i,u as o,B as n,y as u,J as v}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"VehicleSocMercedesEq",mixins:[m],computed:{callback_url(){return`${location.origin}/openWB/web/settings/modules/vehicles/mercedeseq/callback_vehicle.php`},login_url(){return`https://ssoalpha.dvb.corpinter.net/v1/auth?response_type=code&state=${this.vehicleId}&client_id=${this.vehicle.configuration.client_id}&redirect_uri=${this.callback_url}&scope=mb:vehicle:mbdata:evstatus%20offline_access%20openid`},input_complete(){return this.vehicle.configuration.client_id&&this.vehicle.configuration.client_secret&&this.vehicle.configuration.vin}},methods:{login_window(){console.debug("callback url",this.callback_url),console.debug("login url",this.login_url);var t=window.open(this.login_url,"MercedesLogin","width=800,height=600,status=yes,scrollbars=yes,resizable=yes");t.focus()}}},h={class:"vehicle-soc-mercedeseq"};function w(t,e,k,C,y,r){const a=s("openwb-base-text-input"),d=s("openwb-base-copy-to-clipboard"),p=s("openwb-base-alert"),c=s("openwb-base-button-input");return g(),f("div",h,[i(a,{title:"Client-ID",required:"",subtype:"user","model-value":t.vehicle.configuration.client_id,"onUpdate:modelValue":e[0]||(e[0]=l=>t.updateConfiguration(l,"configuration.client_id"))},{help:o(()=>[...e[3]||(e[3]=[n(" Die im Developer Portal angelegte Client-ID. ",-1)])]),_:1},8,["model-value"]),i(a,{title:"Client Secret",required:"",subtype:"password","model-value":t.vehicle.configuration.client_secret,"onUpdate:modelValue":e[1]||(e[1]=l=>t.updateConfiguration(l,"configuration.client_secret"))},{help:o(()=>[...e[4]||(e[4]=[n(" Das im Developer Portal angelegte Client Secret. ",-1)])]),_:1},8,["model-value"]),i(a,{title:"VIN",required:"","model-value":t.vehicle.configuration.vin,"onUpdate:modelValue":e[2]||(e[2]=l=>t.updateConfiguration(l,"configuration.vin"))},{help:o(()=>[...e[5]||(e[5]=[n(" Die Fahrgestellnummer des Fahrzeugs. ",-1)])]),_:1},8,["model-value"]),i(p,{subtype:"info"},{default:o(()=>[e[6]||(e[6]=n(" Vor dem Anmelden bitte die Angaben speichern.",-1)),e[7]||(e[7]=u("br",null,null,-1)),e[8]||(e[8]=n(" Die Callback-URL für die Anmeldung lautet:",-1)),e[9]||(e[9]=u("br",null,null,-1)),i(d,{class:"text-info",tooltip:"URL kopieren"},{default:o(()=>[n(v(r.callback_url),1)]),_:1})]),_:1}),i(c,{title:"Anmelden","button-text":"Bei Mercedes Anmelden",subtype:"success",disabled:!r.input_complete,onButtonClicked:r.login_window},{help:o(()=>[...e[10]||(e[10]=[n(" Es wird ein neues Browserfenster geöffnet, in dem Du dich bei Mercedes mit Deinen Zugangsdaten anmelden kannst.",-1),u("br",null,null,-1)])]),_:1},8,["disabled","onButtonClicked"])])}const $=b(_,[["render",w],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/mercedeseq/vehicle.vue"]]);export{$ as default}; diff --git a/web/settings/assets/vehicle-BTd1rrQA.js b/web/settings/assets/vehicle-ssdLmZa0.js similarity index 93% rename from web/settings/assets/vehicle-BTd1rrQA.js rename to web/settings/assets/vehicle-ssdLmZa0.js index 0e0e32aff4..bb16097555 100644 --- a/web/settings/assets/vehicle-BTd1rrQA.js +++ b/web/settings/assets/vehicle-ssdLmZa0.js @@ -1 +1 @@ -import{V as u}from"./VehicleConfiguration-CDk_8xEa.js";import{_ as p,m as r,l as d,f as m,q as o,u as i,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"VehicleSocLeaf",mixins:[u]},v={class:"vehicle-soc-leaf"};function g(t,e,c,b,w,N){const a=r("openwb-base-text-input"),l=r("openwb-base-select-input");return d(),m("div",v,[o(a,{title:"Benutzername",required:"",subtype:"user","model-value":t.vehicle.configuration.user_id,"onUpdate:modelValue":e[0]||(e[0]=n=>t.updateConfiguration(n,"configuration.user_id"))},{help:i(()=>[...e[3]||(e[3]=[s(" Der Benutzername für die Anmeldung an den Nissan-Servern. ",-1)])]),_:1},8,["model-value"]),o(a,{title:"Kennwort",required:"",subtype:"password","model-value":t.vehicle.configuration.password,"onUpdate:modelValue":e[1]||(e[1]=n=>t.updateConfiguration(n,"configuration.password"))},{help:i(()=>[...e[4]||(e[4]=[s(" Das Passwort für die Anmeldung an den Nissan-Servern. ",-1)])]),_:1},8,["model-value"]),o(l,{title:"Region",required:"","not-selected":"Bitte auswählen",options:[{value:"NE",text:"Europa (getestet)"},{value:"NNA",text:"USA (nicht getestet)"},{value:"NCI",text:"Kanada (nicht getestet)"},{value:"NMA",text:"Australien (nicht getestet)"},{value:"NML",text:"Japan (nicht getestet)"}],"model-value":t.vehicle.configuration.region,"onUpdate:modelValue":e[2]||(e[2]=n=>t.updateConfiguration(n,"configuration.region"))},{help:i(()=>[...e[5]||(e[5]=[s(" Die Region, in der das Fahrzeug betrieben wird. ",-1)])]),_:1},8,["model-value"])])}const S=p(f,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/leaf/vehicle.vue"]]);export{S as default}; +import{V as u}from"./VehicleConfiguration-848lVEbG.js";import{_ as p,m as r,l as d,f as m,q as o,u as i,B as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const f={name:"VehicleSocLeaf",mixins:[u]},v={class:"vehicle-soc-leaf"};function g(t,e,c,b,w,N){const a=r("openwb-base-text-input"),l=r("openwb-base-select-input");return d(),m("div",v,[o(a,{title:"Benutzername",required:"",subtype:"user","model-value":t.vehicle.configuration.user_id,"onUpdate:modelValue":e[0]||(e[0]=n=>t.updateConfiguration(n,"configuration.user_id"))},{help:i(()=>[...e[3]||(e[3]=[s(" Der Benutzername für die Anmeldung an den Nissan-Servern. ",-1)])]),_:1},8,["model-value"]),o(a,{title:"Kennwort",required:"",subtype:"password","model-value":t.vehicle.configuration.password,"onUpdate:modelValue":e[1]||(e[1]=n=>t.updateConfiguration(n,"configuration.password"))},{help:i(()=>[...e[4]||(e[4]=[s(" Das Passwort für die Anmeldung an den Nissan-Servern. ",-1)])]),_:1},8,["model-value"]),o(l,{title:"Region",required:"","not-selected":"Bitte auswählen",options:[{value:"NE",text:"Europa (getestet)"},{value:"NNA",text:"USA (nicht getestet)"},{value:"NCI",text:"Kanada (nicht getestet)"},{value:"NMA",text:"Australien (nicht getestet)"},{value:"NML",text:"Japan (nicht getestet)"}],"model-value":t.vehicle.configuration.region,"onUpdate:modelValue":e[2]||(e[2]=n=>t.updateConfiguration(n,"configuration.region"))},{help:i(()=>[...e[5]||(e[5]=[s(" Die Region, in der das Fahrzeug betrieben wird. ",-1)])]),_:1},8,["model-value"])])}const S=p(f,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/leaf/vehicle.vue"]]);export{S as default}; diff --git a/web/settings/assets/vehicle-Dn1HsCTy.js b/web/settings/assets/vehicle-tamLRu3G.js similarity index 93% rename from web/settings/assets/vehicle-Dn1HsCTy.js rename to web/settings/assets/vehicle-tamLRu3G.js index f66bcf920b..39d7cba2ee 100644 --- a/web/settings/assets/vehicle-Dn1HsCTy.js +++ b/web/settings/assets/vehicle-tamLRu3G.js @@ -1 +1 @@ -import{C as p}from"./index-Bv2WLdLZ.js";import{V as d}from"./VehicleConfiguration-CDk_8xEa.js";import{_ as f,m as i,l as c,f as h,q as a,u as s,B as r,y as n}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"VehicleSocTesla",mixins:[p,d],data(){return{}}},b={class:"vehicle-soc-tesla"};function g(o,e,k,v,w,T){const l=i("openwb-base-number-input"),u=i("openwb-base-alert"),m=i("openwb-base-text-input");return c(),h("div",b,[a(l,{title:"Fahrzeug-ID",required:"",min:0,"model-value":o.vehicle.configuration.tesla_ev_num,"onUpdate:modelValue":e[0]||(e[0]=t=>o.updateConfiguration(t,"configuration.tesla_ev_num"))},{help:s(()=>[...e[2]||(e[2]=[r(' Die ID des Fahrzeugs bei Tesla. Normalerweise "0" bei nur einem Fahrzeug im Konto. ',-1)])]),_:1},8,["model-value"]),a(u,{subtype:"warning",class:"mt-2"},{default:s(()=>[...e[3]||(e[3]=[n("p",null," Das erforderliche Token kann nicht mehr automatisiert in einem Browser abgerufen werden. Es gibt jedoch ein paar Wege, um an das Token zu kommen: ",-1),n("ul",null,[n("li",null,[n("a",{href:"https://tesla-info.com/tesla-token.php",target:"_blank"}," manuell über die Dev-Tools im Browser (siehe tesla-info.com) ")]),n("li",null,[n("a",{href:"https://github.com/adriankumpf/tesla_auth",target:"_blank"}," mit einem Hilfsprogramm (siehe GitHub Repo adriankumpf/tesla_auth) ")])],-1),n("p",null,[r(" Das "),n("strong",null,"Refresh Token"),r(" wird verwendet, um ein Access Token zu generieren, das für die Kommunikation mit der Tesla API erforderlich ist. ")],-1)])]),_:1}),a(m,{title:"Refresh Token",pattern:"^(ey).*",required:"","model-value":o.vehicle.configuration.token?o.vehicle.configuration.token.refresh_token:"","onUpdate:modelValue":e[1]||(e[1]=t=>o.updateConfiguration(t,"configuration.token.refresh_token"))},null,8,["model-value"])])}const q=f(_,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/tesla/vehicle.vue"]]);export{q as default}; +import{C as p}from"./index-CE-5DBwq.js";import{V as d}from"./VehicleConfiguration-848lVEbG.js";import{_ as f,m as i,l as c,f as h,q as a,u as s,B as r,y as n}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const _={name:"VehicleSocTesla",mixins:[p,d],data(){return{}}},b={class:"vehicle-soc-tesla"};function g(o,e,k,v,w,T){const l=i("openwb-base-number-input"),u=i("openwb-base-alert"),m=i("openwb-base-text-input");return c(),h("div",b,[a(l,{title:"Fahrzeug-ID",required:"",min:0,"model-value":o.vehicle.configuration.tesla_ev_num,"onUpdate:modelValue":e[0]||(e[0]=t=>o.updateConfiguration(t,"configuration.tesla_ev_num"))},{help:s(()=>[...e[2]||(e[2]=[r(' Die ID des Fahrzeugs bei Tesla. Normalerweise "0" bei nur einem Fahrzeug im Konto. ',-1)])]),_:1},8,["model-value"]),a(u,{subtype:"warning",class:"mt-2"},{default:s(()=>[...e[3]||(e[3]=[n("p",null," Das erforderliche Token kann nicht mehr automatisiert in einem Browser abgerufen werden. Es gibt jedoch ein paar Wege, um an das Token zu kommen: ",-1),n("ul",null,[n("li",null,[n("a",{href:"https://tesla-info.com/tesla-token.php",target:"_blank"}," manuell über die Dev-Tools im Browser (siehe tesla-info.com) ")]),n("li",null,[n("a",{href:"https://github.com/adriankumpf/tesla_auth",target:"_blank"}," mit einem Hilfsprogramm (siehe GitHub Repo adriankumpf/tesla_auth) ")])],-1),n("p",null,[r(" Das "),n("strong",null,"Refresh Token"),r(" wird verwendet, um ein Access Token zu generieren, das für die Kommunikation mit der Tesla API erforderlich ist. ")],-1)])]),_:1}),a(m,{title:"Refresh Token",pattern:"^(ey).*",required:"","model-value":o.vehicle.configuration.token?o.vehicle.configuration.token.refresh_token:"","onUpdate:modelValue":e[1]||(e[1]=t=>o.updateConfiguration(t,"configuration.token.refresh_token"))},null,8,["model-value"])])}const q=f(_,[["render",g],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/tesla/vehicle.vue"]]);export{q as default}; diff --git a/web/settings/assets/vehicle-BNauWjS9.js b/web/settings/assets/vehicle-wpAWS7lm.js similarity index 91% rename from web/settings/assets/vehicle-BNauWjS9.js rename to web/settings/assets/vehicle-wpAWS7lm.js index 5eac69a232..97e011443a 100644 --- a/web/settings/assets/vehicle-BNauWjS9.js +++ b/web/settings/assets/vehicle-wpAWS7lm.js @@ -1 +1 @@ -import{V as r}from"./VehicleConfiguration-CDk_8xEa.js";import{_ as l,m as s,l as a,f as u,q as i,u as p,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const m={name:"VehicleSocSmartHello",mixins:[r]},f={class:"vehicle-soc-smart-hello"};function v(o,e,c,g,h,V){const n=s("openwb-base-text-input");return a(),u("div",f,[i(n,{title:"Benutzername",subtype:"user",required:"","model-value":o.vehicle.configuration.user_id,"onUpdate:modelValue":e[0]||(e[0]=t=>o.updateConfiguration(t,"configuration.user_id"))},null,8,["model-value"]),i(n,{title:"Kennwort",subtype:"password",required:"","model-value":o.vehicle.configuration.password,"onUpdate:modelValue":e[1]||(e[1]=t=>o.updateConfiguration(t,"configuration.password"))},null,8,["model-value"]),i(n,{title:"VIN",subtype:"text","model-value":o.vehicle.configuration.VIN,"onUpdate:modelValue":e[2]||(e[2]=t=>o.updateConfiguration(t,"configuration.VIN"))},{help:p(()=>[...e[3]||(e[3]=[d(" Fahrgestellnummer (VIN) des Fahrzeugs. Notwendig falls mehrere Fahrzeuge im Account des Herstellers vorhanden sind. ",-1)])]),_:1},8,["model-value"])])}const $=l(m,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/smarthello/vehicle.vue"]]);export{$ as default}; +import{V as r}from"./VehicleConfiguration-848lVEbG.js";import{_ as l,m as s,l as a,f as u,q as i,u as p,B as d}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./dynamic-import-helper-BheWnx7M.js";const m={name:"VehicleSocSmartHello",mixins:[r]},f={class:"vehicle-soc-smart-hello"};function v(o,e,c,g,h,V){const n=s("openwb-base-text-input");return a(),u("div",f,[i(n,{title:"Benutzername",subtype:"user",required:"","model-value":o.vehicle.configuration.user_id,"onUpdate:modelValue":e[0]||(e[0]=t=>o.updateConfiguration(t,"configuration.user_id"))},null,8,["model-value"]),i(n,{title:"Kennwort",subtype:"password",required:"","model-value":o.vehicle.configuration.password,"onUpdate:modelValue":e[1]||(e[1]=t=>o.updateConfiguration(t,"configuration.password"))},null,8,["model-value"]),i(n,{title:"VIN",subtype:"text","model-value":o.vehicle.configuration.VIN,"onUpdate:modelValue":e[2]||(e[2]=t=>o.updateConfiguration(t,"configuration.VIN"))},{help:p(()=>[...e[3]||(e[3]=[d(" Fahrgestellnummer (VIN) des Fahrzeugs. Notwendig falls mehrere Fahrzeuge im Account des Herstellers vorhanden sind. ",-1)])]),_:1},8,["model-value"])])}const $=l(m,[["render",v],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/vehicles/smarthello/vehicle.vue"]]);export{$ as default}; diff --git a/web/settings/assets/webTheme-Djb-XQZh.js b/web/settings/assets/webTheme-C9YxyerO.js similarity index 88% rename from web/settings/assets/webTheme-Djb-XQZh.js rename to web/settings/assets/webTheme-C9YxyerO.js index 86b8e8ad21..48c3df278c 100644 --- a/web/settings/assets/webTheme-Djb-XQZh.js +++ b/web/settings/assets/webTheme-C9YxyerO.js @@ -1 +1 @@ -import{W as a}from"./GeneralConfiguration-BiYqLhF0.js";import{_ as r,m as i,l as s,f as m,q as p,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const u={name:"WebThemeKoala",mixins:[a]},f={class:"web-theme-standard-legacy"};function _(t,e,c,h,g,b){const n=i("openwb-base-range-input");return s(),m("div",f,[p(n,{title:"Zeitfenster Verlaufsdiagramm",min:15,max:120,step:15,unit:"Min.","model-value":Math.round(t.webTheme.configuration.history_chart_range/(60*1e3)),"onUpdate:modelValue":e[0]||(e[0]=o=>t.updateConfiguration(o*60*1e3,"configuration.history_chart_range"))},{help:d(()=>[...e[1]||(e[1]=[l(" Das Zeitfenster für das Verlaufsdiagramm wird auf die hier eingestellte Anzahl Minuten beschränkt. ",-1)])]),_:1},8,["model-value"])])}const W=r(u,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/web_themes/standard_legacy/webTheme.vue"]]);export{W as default}; +import{W as a}from"./GeneralConfiguration-D0B_yW_W.js";import{_ as r,m as i,l as s,f as m,q as p,u as d,B as l}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const u={name:"WebThemeKoala",mixins:[a]},f={class:"web-theme-standard-legacy"};function _(t,e,c,h,g,b){const n=i("openwb-base-range-input");return s(),m("div",f,[p(n,{title:"Zeitfenster Verlaufsdiagramm",min:15,max:120,step:15,unit:"Min.","model-value":Math.round(t.webTheme.configuration.history_chart_range/(60*1e3)),"onUpdate:modelValue":e[0]||(e[0]=o=>t.updateConfiguration(o*60*1e3,"configuration.history_chart_range"))},{help:d(()=>[...e[1]||(e[1]=[l(" Das Zeitfenster für das Verlaufsdiagramm wird auf die hier eingestellte Anzahl Minuten beschränkt. ",-1)])]),_:1},8,["model-value"])])}const W=r(u,[["render",_],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/web_themes/standard_legacy/webTheme.vue"]]);export{W as default}; diff --git a/web/settings/assets/webTheme-meC97XgZ.js b/web/settings/assets/webTheme-Cb0hLMND.js similarity index 98% rename from web/settings/assets/webTheme-meC97XgZ.js rename to web/settings/assets/webTheme-Cb0hLMND.js index 6959b0eb59..65473eac2a 100644 --- a/web/settings/assets/webTheme-meC97XgZ.js +++ b/web/settings/assets/webTheme-Cb0hLMND.js @@ -1 +1 @@ -import{W as s}from"./GeneralConfiguration-BiYqLhF0.js";import{_ as d,m as r,l as m,f as g,q as o,u as l,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const b={name:"WebThemeColors",components:{},mixins:[s],data(){return{slideLabels:{daily_totals:"Tageswerte",history_chart:"Verlaufsdiagramm",flow_diagram:"Energiefluss"}}}},p={class:"web-theme-colors"};function f(t,e,V,w,v,h){const a=r("openwb-base-button-group-input"),i=r("openwb-base-range-input");return m(),g("div",p,[o(a,{title:"Farbschema",buttons:[{buttonValue:"dark",text:"Dunkel"},{buttonValue:"light",text:"Hell"},{buttonValue:"blue",text:"Blau"}],"model-value":t.webTheme.configuration.displayMode,"onUpdate:modelValue":e[0]||(e[0]=n=>t.updateConfiguration(n,"configuration.displayMode"))},{help:l(()=>[...e[14]||(e[14]=[u(" Hintergrundfarbe ",-1)])]),_:1},8,["model-value"]),o(a,{title:"Farbschema Smarthome-Geräte",buttons:[{buttonValue:"normal",text:"Orange"},{buttonValue:"standard",text:"Grün/Violett"},{buttonValue:"advanced",text:"Bunt"}],"model-value":t.webTheme.configuration.smartHomeColors,"onUpdate:modelValue":e[1]||(e[1]=n=>t.updateConfiguration(n,"configuration.smartHomeColors"))},{help:l(()=>[...e[15]||(e[15]=[u(" Für die Smart-Home-Geräte stehen mehrere Schemata zur Verfügung. ",-1)])]),_:1},8,["model-value"]),o(i,{title:"Zeitfenster Live-Graph",min:15,max:120,step:15,unit:"Min.","model-value":t.webTheme.configuration.liveGraphDuration/60,"onUpdate:modelValue":e[2]||(e[2]=n=>t.updateConfiguration(n*60,"configuration.liveGraphDuration"))},{help:l(()=>[...e[16]||(e[16]=[u(" Das Zeitfenster für den Live-Graphen wird auf die hier eingestellte Anzahl Minuten beschränkt. ",-1)])]),_:1},8,["model-value"]),o(a,{title:"Grafik: Raster",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.webTheme.configuration.showGrid,"onUpdate:modelValue":e[3]||(e[3]=n=>t.updateConfiguration(n,"configuration.showGrid"))},{help:l(()=>[...e[17]||(e[17]=[u(" Verwende ein Hintergrundraster in den Grafiken ",-1)])]),_:1},8,["model-value"]),o(a,{title:"Anzahl Dezimalstellen",buttons:[{buttonValue:0,text:"3 kW"},{buttonValue:1,text:"3.1 kW"},{buttonValue:2,text:"3.14 kW"},{buttonValue:3,text:"3.141 kW"},{buttonValue:4,text:"3141 W"}],"model-value":t.webTheme.configuration.decimalPlaces,"onUpdate:modelValue":e[4]||(e[4]=n=>t.updateConfiguration(n,"configuration.decimalPlaces"))},{help:l(()=>[...e[18]||(e[18]=[u(" Alle kW- und kWh-Werte werden mit der gewählten Anzahl an Stellen angezeigt. ",-1)])]),_:1},8,["model-value"]),o(a,{title:"Variable Bogenlänge",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.webTheme.configuration.showRelativeArcs,"onUpdate:modelValue":e[5]||(e[5]=n=>t.updateConfiguration(n,"configuration.showRelativeArcs"))},{help:l(()=>[...e[19]||(e[19]=[u(" Im Graph 'Aktuelle Leistung' können die Bögen immer die volle Länge haben, oder entsprechend des aktuellen Gesamtleistung verkürzt dargestellt werden. ",-1)])]),_:1},8,["model-value"]),o(a,{title:"Wechselrichter anzeigen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.webTheme.configuration.showInverters,"onUpdate:modelValue":e[6]||(e[6]=n=>t.updateConfiguration(n,"configuration.showInverters"))},{help:l(()=>[...e[20]||(e[20]=[u(" Zeige Details zu den einzelnen Wechselrichtern ",-1)])]),_:1},8,["model-value"]),o(a,{title:"Fahrzeugliste anzeigen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.webTheme.configuration.showVehicles,"onUpdate:modelValue":e[7]||(e[7]=n=>t.updateConfiguration(n,"configuration.showVehicles"))},{help:l(()=>[...e[21]||(e[21]=[u(" Zeige alle Fahrzeuge mit Ladestand und Reichweite. ",-1)])]),_:1},8,["model-value"]),o(a,{title:"Zähler anzeigen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.webTheme.configuration.showCounters,"onUpdate:modelValue":e[8]||(e[8]=n=>t.updateConfiguration(n,"configuration.showCounters"))},{help:l(()=>[...e[22]||(e[22]=[u(" Zeige die Werte zusätzlich angelegter Zähler. ",-1)])]),_:1},8,["model-value"]),o(a,{title:"Preistabelle anzeigen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.webTheme.configuration.showPrices,"onUpdate:modelValue":e[9]||(e[9]=n=>t.updateConfiguration(n,"configuration.showPrices"))},{help:l(()=>[...e[23]||(e[23]=[u(" Zeige den Verlauf des dynamischen Strompreises auf der Hauptseite. ",-1)])]),_:1},8,["model-value"]),o(i,{title:"Untere Markierung in der Preistabelle",min:-25,max:95,step:.1,unit:"ct","model-value":t.webTheme.configuration.lowerPriceBound,"onUpdate:modelValue":e[10]||(e[10]=n=>t.updateConfiguration(n,"configuration.lowerPriceBound"))},{help:l(()=>[...e[24]||(e[24]=[u(" Position der unteren Markierung festlegen. ",-1)])]),_:1},8,["model-value"]),o(i,{title:"Obere Markierung in der Preistabelle",min:-25,max:95,step:.1,unit:"ct","model-value":t.webTheme.configuration.upperPriceBound,"onUpdate:modelValue":e[11]||(e[11]=n=>t.updateConfiguration(n,"configuration.upperPriceBound"))},{help:l(()=>[...e[25]||(e[25]=[u(" Position der oberen Markierung festlegen. ",-1)])]),_:1},8,["model-value"]),o(a,{title:"Alternatives Energie-Widget",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.webTheme.configuration.alternativeEnergy,"onUpdate:modelValue":e[12]||(e[12]=n=>t.updateConfiguration(n,"configuration.alternativeEnergy"))},{help:l(()=>[...e[26]||(e[26]=[u(" Horizontale Darstellung der Energie-Werte. ",-1)])]),_:1},8,["model-value"]),o(a,{title:"Standard-Fahrzeug anzeigen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.webTheme.configuration.showStandardVehicle,"onUpdate:modelValue":e[13]||(e[13]=n=>t.updateConfiguration(n,"configuration.showStandardVehicle"))},{help:l(()=>[...e[27]||(e[27]=[u(" Legt fest, ob das Standardfahrzeug in Listen und Auswahlmenus angezeigt wird.",-1)])]),_:1},8,["model-value"])])}const N=d(b,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/web_themes/colors/webTheme.vue"]]);export{N as default}; +import{W as s}from"./GeneralConfiguration-D0B_yW_W.js";import{_ as d,m as r,l as m,f as g,q as o,u as l,B as u}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const b={name:"WebThemeColors",components:{},mixins:[s],data(){return{slideLabels:{daily_totals:"Tageswerte",history_chart:"Verlaufsdiagramm",flow_diagram:"Energiefluss"}}}},p={class:"web-theme-colors"};function f(t,e,V,w,v,h){const a=r("openwb-base-button-group-input"),i=r("openwb-base-range-input");return m(),g("div",p,[o(a,{title:"Farbschema",buttons:[{buttonValue:"dark",text:"Dunkel"},{buttonValue:"light",text:"Hell"},{buttonValue:"blue",text:"Blau"}],"model-value":t.webTheme.configuration.displayMode,"onUpdate:modelValue":e[0]||(e[0]=n=>t.updateConfiguration(n,"configuration.displayMode"))},{help:l(()=>[...e[14]||(e[14]=[u(" Hintergrundfarbe ",-1)])]),_:1},8,["model-value"]),o(a,{title:"Farbschema Smarthome-Geräte",buttons:[{buttonValue:"normal",text:"Orange"},{buttonValue:"standard",text:"Grün/Violett"},{buttonValue:"advanced",text:"Bunt"}],"model-value":t.webTheme.configuration.smartHomeColors,"onUpdate:modelValue":e[1]||(e[1]=n=>t.updateConfiguration(n,"configuration.smartHomeColors"))},{help:l(()=>[...e[15]||(e[15]=[u(" Für die Smart-Home-Geräte stehen mehrere Schemata zur Verfügung. ",-1)])]),_:1},8,["model-value"]),o(i,{title:"Zeitfenster Live-Graph",min:15,max:120,step:15,unit:"Min.","model-value":t.webTheme.configuration.liveGraphDuration/60,"onUpdate:modelValue":e[2]||(e[2]=n=>t.updateConfiguration(n*60,"configuration.liveGraphDuration"))},{help:l(()=>[...e[16]||(e[16]=[u(" Das Zeitfenster für den Live-Graphen wird auf die hier eingestellte Anzahl Minuten beschränkt. ",-1)])]),_:1},8,["model-value"]),o(a,{title:"Grafik: Raster",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.webTheme.configuration.showGrid,"onUpdate:modelValue":e[3]||(e[3]=n=>t.updateConfiguration(n,"configuration.showGrid"))},{help:l(()=>[...e[17]||(e[17]=[u(" Verwende ein Hintergrundraster in den Grafiken ",-1)])]),_:1},8,["model-value"]),o(a,{title:"Anzahl Dezimalstellen",buttons:[{buttonValue:0,text:"3 kW"},{buttonValue:1,text:"3.1 kW"},{buttonValue:2,text:"3.14 kW"},{buttonValue:3,text:"3.141 kW"},{buttonValue:4,text:"3141 W"}],"model-value":t.webTheme.configuration.decimalPlaces,"onUpdate:modelValue":e[4]||(e[4]=n=>t.updateConfiguration(n,"configuration.decimalPlaces"))},{help:l(()=>[...e[18]||(e[18]=[u(" Alle kW- und kWh-Werte werden mit der gewählten Anzahl an Stellen angezeigt. ",-1)])]),_:1},8,["model-value"]),o(a,{title:"Variable Bogenlänge",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.webTheme.configuration.showRelativeArcs,"onUpdate:modelValue":e[5]||(e[5]=n=>t.updateConfiguration(n,"configuration.showRelativeArcs"))},{help:l(()=>[...e[19]||(e[19]=[u(" Im Graph 'Aktuelle Leistung' können die Bögen immer die volle Länge haben, oder entsprechend des aktuellen Gesamtleistung verkürzt dargestellt werden. ",-1)])]),_:1},8,["model-value"]),o(a,{title:"Wechselrichter anzeigen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.webTheme.configuration.showInverters,"onUpdate:modelValue":e[6]||(e[6]=n=>t.updateConfiguration(n,"configuration.showInverters"))},{help:l(()=>[...e[20]||(e[20]=[u(" Zeige Details zu den einzelnen Wechselrichtern ",-1)])]),_:1},8,["model-value"]),o(a,{title:"Fahrzeugliste anzeigen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.webTheme.configuration.showVehicles,"onUpdate:modelValue":e[7]||(e[7]=n=>t.updateConfiguration(n,"configuration.showVehicles"))},{help:l(()=>[...e[21]||(e[21]=[u(" Zeige alle Fahrzeuge mit Ladestand und Reichweite. ",-1)])]),_:1},8,["model-value"]),o(a,{title:"Zähler anzeigen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.webTheme.configuration.showCounters,"onUpdate:modelValue":e[8]||(e[8]=n=>t.updateConfiguration(n,"configuration.showCounters"))},{help:l(()=>[...e[22]||(e[22]=[u(" Zeige die Werte zusätzlich angelegter Zähler. ",-1)])]),_:1},8,["model-value"]),o(a,{title:"Preistabelle anzeigen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.webTheme.configuration.showPrices,"onUpdate:modelValue":e[9]||(e[9]=n=>t.updateConfiguration(n,"configuration.showPrices"))},{help:l(()=>[...e[23]||(e[23]=[u(" Zeige den Verlauf des dynamischen Strompreises auf der Hauptseite. ",-1)])]),_:1},8,["model-value"]),o(i,{title:"Untere Markierung in der Preistabelle",min:-25,max:95,step:.1,unit:"ct","model-value":t.webTheme.configuration.lowerPriceBound,"onUpdate:modelValue":e[10]||(e[10]=n=>t.updateConfiguration(n,"configuration.lowerPriceBound"))},{help:l(()=>[...e[24]||(e[24]=[u(" Position der unteren Markierung festlegen. ",-1)])]),_:1},8,["model-value"]),o(i,{title:"Obere Markierung in der Preistabelle",min:-25,max:95,step:.1,unit:"ct","model-value":t.webTheme.configuration.upperPriceBound,"onUpdate:modelValue":e[11]||(e[11]=n=>t.updateConfiguration(n,"configuration.upperPriceBound"))},{help:l(()=>[...e[25]||(e[25]=[u(" Position der oberen Markierung festlegen. ",-1)])]),_:1},8,["model-value"]),o(a,{title:"Alternatives Energie-Widget",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.webTheme.configuration.alternativeEnergy,"onUpdate:modelValue":e[12]||(e[12]=n=>t.updateConfiguration(n,"configuration.alternativeEnergy"))},{help:l(()=>[...e[26]||(e[26]=[u(" Horizontale Darstellung der Energie-Werte. ",-1)])]),_:1},8,["model-value"]),o(a,{title:"Standard-Fahrzeug anzeigen",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.webTheme.configuration.showStandardVehicle,"onUpdate:modelValue":e[13]||(e[13]=n=>t.updateConfiguration(n,"configuration.showStandardVehicle"))},{help:l(()=>[...e[27]||(e[27]=[u(" Legt fest, ob das Standardfahrzeug in Listen und Auswahlmenus angezeigt wird.",-1)])]),_:1},8,["model-value"])])}const N=d(b,[["render",f],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/web_themes/colors/webTheme.vue"]]);export{N as default}; diff --git a/web/settings/assets/webTheme-C6RtS5le.js b/web/settings/assets/webTheme-FN-GXJUO.js similarity index 94% rename from web/settings/assets/webTheme-C6RtS5le.js rename to web/settings/assets/webTheme-FN-GXJUO.js index 4d9178a568..68b93fc876 100644 --- a/web/settings/assets/webTheme-C6RtS5le.js +++ b/web/settings/assets/webTheme-FN-GXJUO.js @@ -1 +1 @@ -import{W as g}from"./GeneralConfiguration-BiYqLhF0.js";import{S as f}from"./OpenwbSortableList-CQO_8Mps.js";import{_ as h,m as o,l as w,f as _,q as i,u as a,B as r,y as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-Bv2WLdLZ.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const v={name:"WebThemeKoala",components:{SortableList:f},mixins:[g],data(){return{slideLabels:{daily_totals:"Tageswerte",history_chart:"Verlaufsdiagramm",flow_diagram:"Energiefluss",sankey_chart:"Sankey-Diagramm"}}},computed:{slideOrderList:{get(){return(this.webTheme.configuration.top_carousel_slide_order||["flow_diagram","history_chart","daily_totals","sankey_chart"]).map(e=>({id:e}))},set(t){const e=t.map(l=>l.id);this.updateConfiguration(e,"configuration.top_carousel_slide_order")}},numberedSlideLabels(){return this.slideOrderList.reduce((t,e,l)=>(t[e.id]=`${l+1}. ${this.slideLabels[e.id]||e.id}`,t),{})}}},c={class:"web-theme-koala"};function k(t,e,l,V,z,u){const d=o("openwb-base-button-group-input"),b=o("openwb-base-range-input"),p=o("sortable-list"),m=o("openwb-base-number-input");return w(),_("div",c,[i(d,{title:"Standard-Fahrzeug ausblenden",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.webTheme.configuration.hide_standard_vehicle,"onUpdate:modelValue":e[0]||(e[0]=n=>t.updateConfiguration(n,"configuration.hide_standard_vehicle"))},{help:a(()=>[...e[7]||(e[7]=[r(" Legt fest, ob das Standardfahrzeug im Fahrzeugkarten- bzw. Ladepunkt-Fahrzeugauswahlmenü ausgeblendet wird. ",-1)])]),_:1},8,["model-value"]),e[14]||(e[14]=s("hr",null,null,-1)),i(b,{title:"Zeitfenster Verlaufsdiagramm",min:15,max:120,step:15,unit:"Min.","model-value":t.webTheme.configuration.history_chart_range/60,"onUpdate:modelValue":e[1]||(e[1]=n=>t.updateConfiguration(n*60,"configuration.history_chart_range"))},{help:a(()=>[...e[8]||(e[8]=[r(" Das Zeitfenster für das Verlaufsdiagramm wird auf die hier eingestellte Anzahl Minuten beschränkt. ",-1)])]),_:1},8,["model-value"]),e[15]||(e[15]=s("hr",null,null,-1)),i(p,{modelValue:u.slideOrderList,"onUpdate:modelValue":e[2]||(e[2]=n=>u.slideOrderList=n),title:"Oberer Infobereich",labels:u.numberedSlideLabels,nesting:!1},{help:a(()=>[...e[9]||(e[9]=[r(" Anordnung/Reihenfolge des oberen Informationsbereiches. ",-1)])]),_:1},8,["modelValue","labels"]),e[16]||(e[16]=s("hr",null,null,-1)),i(m,{title:"Ladepunkt Kartenansicht Grenzwert",min:0,step:1,"model-value":t.webTheme.configuration.chargePoint_card_view_breakpoint,"onUpdate:modelValue":e[3]||(e[3]=n=>t.updateConfiguration(n,"configuration.chargePoint_card_view_breakpoint"))},{help:a(()=>[...e[10]||(e[10]=[r(" Legt fest, bis zu wie vielen Ladepunkten die Kartenansicht verwendet wird. Bei mehr Ladepunkten wird automatisch zur Tabellenansicht gewechselt. ",-1)])]),_:1},8,["model-value"]),i(d,{title:"Suchfeld in Ladepunkt Tabellenansicht",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.webTheme.configuration.chargePoint_table_search_input_field,"onUpdate:modelValue":e[4]||(e[4]=n=>t.updateConfiguration(n,"configuration.chargePoint_table_search_input_field"))},{help:a(()=>[...e[11]||(e[11]=[r(' Legt fest, ob in der Tabellenansicht ein Suchfeld angezeigt wird. Mit diesem Suchfeld können die Felder "Ladepunkt" und "Fahrzeug" durchsucht werden. ',-1)])]),_:1},8,["model-value"]),e[17]||(e[17]=s("hr",null,null,-1)),i(m,{title:"Fahrzeug Kartenansicht Grenzwert",min:0,step:1,"model-value":t.webTheme.configuration.vehicle_card_view_breakpoint,"onUpdate:modelValue":e[5]||(e[5]=n=>t.updateConfiguration(n,"configuration.vehicle_card_view_breakpoint"))},{help:a(()=>[...e[12]||(e[12]=[r(" Legt fest, bis zu wie vielen Fahrzeugen die Kartenansicht verwendet wird. Bei mehr Fahrzeugen wird automatisch zur Tabellenansicht gewechselt. ",-1)])]),_:1},8,["model-value"]),i(d,{title:"Suchfeld in Fahrzeug Tabellenansicht",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.webTheme.configuration.vehicle_table_search_input_field,"onUpdate:modelValue":e[6]||(e[6]=n=>t.updateConfiguration(n,"configuration.vehicle_table_search_input_field"))},{help:a(()=>[...e[13]||(e[13]=[r(' Legt fest, ob in der Tabellenansicht ein Suchfeld angezeigt wird. Mit diesem Suchfeld können die Felder "Fahrzeug", "Hersteller" und "Modell" durchsucht werden. ',-1)])]),_:1},8,["model-value"])])}const N=h(v,[["render",k],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/web_themes/koala/webTheme.vue"]]);export{N as default}; +import{W as g}from"./GeneralConfiguration-D0B_yW_W.js";import{S as f}from"./OpenwbSortableList-yQzkYwAQ.js";import{_ as h,m as o,l as w,f as _,q as i,u as a,B as r,y as s}from"./vendor-BwGffBs-.js";import"./vendor-fortawesome-DplTMxoa.js";import"./index-CE-5DBwq.js";import"./vendor-bootstrap-DxivtUnb.js";import"./vendor-jquery-CEMonh9Y.js";import"./vendor-axios-C0vEeTtS.js";import"./SystemVersion-eCZ4XHiC.js";import"./dynamic-import-helper-BheWnx7M.js";const v={name:"WebThemeKoala",components:{SortableList:f},mixins:[g],data(){return{slideLabels:{daily_totals:"Tageswerte",history_chart:"Verlaufsdiagramm",flow_diagram:"Energiefluss",sankey_chart:"Sankey-Diagramm"}}},computed:{slideOrderList:{get(){return(this.webTheme.configuration.top_carousel_slide_order||["flow_diagram","history_chart","daily_totals","sankey_chart"]).map(e=>({id:e}))},set(t){const e=t.map(l=>l.id);this.updateConfiguration(e,"configuration.top_carousel_slide_order")}},numberedSlideLabels(){return this.slideOrderList.reduce((t,e,l)=>(t[e.id]=`${l+1}. ${this.slideLabels[e.id]||e.id}`,t),{})}}},c={class:"web-theme-koala"};function k(t,e,l,V,z,u){const d=o("openwb-base-button-group-input"),b=o("openwb-base-range-input"),p=o("sortable-list"),m=o("openwb-base-number-input");return w(),_("div",c,[i(d,{title:"Standard-Fahrzeug ausblenden",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.webTheme.configuration.hide_standard_vehicle,"onUpdate:modelValue":e[0]||(e[0]=n=>t.updateConfiguration(n,"configuration.hide_standard_vehicle"))},{help:a(()=>[...e[7]||(e[7]=[r(" Legt fest, ob das Standardfahrzeug im Fahrzeugkarten- bzw. Ladepunkt-Fahrzeugauswahlmenü ausgeblendet wird. ",-1)])]),_:1},8,["model-value"]),e[14]||(e[14]=s("hr",null,null,-1)),i(b,{title:"Zeitfenster Verlaufsdiagramm",min:15,max:120,step:15,unit:"Min.","model-value":t.webTheme.configuration.history_chart_range/60,"onUpdate:modelValue":e[1]||(e[1]=n=>t.updateConfiguration(n*60,"configuration.history_chart_range"))},{help:a(()=>[...e[8]||(e[8]=[r(" Das Zeitfenster für das Verlaufsdiagramm wird auf die hier eingestellte Anzahl Minuten beschränkt. ",-1)])]),_:1},8,["model-value"]),e[15]||(e[15]=s("hr",null,null,-1)),i(p,{modelValue:u.slideOrderList,"onUpdate:modelValue":e[2]||(e[2]=n=>u.slideOrderList=n),title:"Oberer Infobereich",labels:u.numberedSlideLabels,nesting:!1},{help:a(()=>[...e[9]||(e[9]=[r(" Anordnung/Reihenfolge des oberen Informationsbereiches. ",-1)])]),_:1},8,["modelValue","labels"]),e[16]||(e[16]=s("hr",null,null,-1)),i(m,{title:"Ladepunkt Kartenansicht Grenzwert",min:0,step:1,"model-value":t.webTheme.configuration.chargePoint_card_view_breakpoint,"onUpdate:modelValue":e[3]||(e[3]=n=>t.updateConfiguration(n,"configuration.chargePoint_card_view_breakpoint"))},{help:a(()=>[...e[10]||(e[10]=[r(" Legt fest, bis zu wie vielen Ladepunkten die Kartenansicht verwendet wird. Bei mehr Ladepunkten wird automatisch zur Tabellenansicht gewechselt. ",-1)])]),_:1},8,["model-value"]),i(d,{title:"Suchfeld in Ladepunkt Tabellenansicht",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.webTheme.configuration.chargePoint_table_search_input_field,"onUpdate:modelValue":e[4]||(e[4]=n=>t.updateConfiguration(n,"configuration.chargePoint_table_search_input_field"))},{help:a(()=>[...e[11]||(e[11]=[r(' Legt fest, ob in der Tabellenansicht ein Suchfeld angezeigt wird. Mit diesem Suchfeld können die Felder "Ladepunkt" und "Fahrzeug" durchsucht werden. ',-1)])]),_:1},8,["model-value"]),e[17]||(e[17]=s("hr",null,null,-1)),i(m,{title:"Fahrzeug Kartenansicht Grenzwert",min:0,step:1,"model-value":t.webTheme.configuration.vehicle_card_view_breakpoint,"onUpdate:modelValue":e[5]||(e[5]=n=>t.updateConfiguration(n,"configuration.vehicle_card_view_breakpoint"))},{help:a(()=>[...e[12]||(e[12]=[r(" Legt fest, bis zu wie vielen Fahrzeugen die Kartenansicht verwendet wird. Bei mehr Fahrzeugen wird automatisch zur Tabellenansicht gewechselt. ",-1)])]),_:1},8,["model-value"]),i(d,{title:"Suchfeld in Fahrzeug Tabellenansicht",buttons:[{buttonValue:!1,text:"Nein",class:"btn-outline-danger"},{buttonValue:!0,text:"Ja",class:"btn-outline-success"}],"model-value":t.webTheme.configuration.vehicle_table_search_input_field,"onUpdate:modelValue":e[6]||(e[6]=n=>t.updateConfiguration(n,"configuration.vehicle_table_search_input_field"))},{help:a(()=>[...e[13]||(e[13]=[r(' Legt fest, ob in der Tabellenansicht ein Suchfeld angezeigt wird. Mit diesem Suchfeld können die Felder "Fahrzeug", "Hersteller" und "Modell" durchsucht werden. ',-1)])]),_:1},8,["model-value"])])}const N=h(v,[["render",k],["__file","/opt/openWB-dev/openwb-ui-settings/src/components/web_themes/koala/webTheme.vue"]]);export{N as default}; diff --git a/web/settings/index.html b/web/settings/index.html index 4383c9230c..b7c3e07e50 100644 --- a/web/settings/index.html +++ b/web/settings/index.html @@ -7,7 +7,7 @@ openWB - +