Feature: EMS Aktiv-Checkbox pro Kathrein-Wallbox-Gerät (v1.8.4)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
name: ShineBridge
|
name: ShineBridge
|
||||||
version: "1.8.3"
|
version: "1.8.4"
|
||||||
slug: shinebridge
|
slug: shinebridge
|
||||||
description: Growatt Wechselrichter lokal in Home Assistant — Modbus TCP via ShineLAN-X, MQTT Discovery, Web UI
|
description: Growatt Wechselrichter lokal in Home Assistant — Modbus TCP via ShineLAN-X, MQTT Discovery, Web UI
|
||||||
url: https://gitea.bitfire.work/retr0/shinebridge
|
url: https://gitea.bitfire.work/retr0/shinebridge
|
||||||
|
|||||||
@@ -254,7 +254,7 @@ def _poll_loop(inv_cfg: Dict[str, Any], stop: threading.Event):
|
|||||||
values["grid_power"] = values["total_power"]
|
values["grid_power"] = values["total_power"]
|
||||||
|
|
||||||
# EMS: PV-Überschuss aus anderen Geräten holen und Ladestrom regeln
|
# EMS: PV-Überschuss aus anderen Geräten holen und Ladestrom regeln
|
||||||
if ems is not None and values is not None:
|
if ems is not None and values is not None and inv_cfg.get("ems_enabled", True):
|
||||||
pv_surplus = _get_pv_surplus()
|
pv_surplus = _get_pv_surplus()
|
||||||
# 0x0060 manchmal nicht lesbar → 1 (EV Connected) annehmen,
|
# 0x0060 manchmal nicht lesbar → 1 (EV Connected) annehmen,
|
||||||
# damit EMS aktiviert; Wallbox ignoriert Befehle wenn kein Auto da
|
# damit EMS aktiviert; Wallbox ignoriert Befehle wenn kein Auto da
|
||||||
|
|||||||
@@ -290,7 +290,12 @@
|
|||||||
<input type="number" id="modal-interval" value="30" min="5"></div>
|
<input type="number" id="modal-interval" value="30" min="5"></div>
|
||||||
|
|
||||||
<div id="ems-section" style="display:none; border-top:1px solid var(--border); margin-top:14px; padding-top:14px;">
|
<div id="ems-section" style="display:none; border-top:1px solid var(--border); margin-top:14px; padding-top:14px;">
|
||||||
<div style="font-size:12px; font-weight:600; text-transform:uppercase; letter-spacing:.06em; color:var(--accent); margin-bottom:12px;">EMS — Ladesteuerung</div>
|
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;">
|
||||||
|
<div style="font-size:12px; font-weight:600; text-transform:uppercase; letter-spacing:.06em; color:var(--accent);">EMS — Ladesteuerung</div>
|
||||||
|
<label style="cursor:pointer;display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text-dim)">
|
||||||
|
<input type="checkbox" id="ems-enabled" checked style="width:auto;margin:0"> Aktiv
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
<div class="field"><label>Mindest-PV-Überschuss (W)</label>
|
<div class="field"><label>Mindest-PV-Überschuss (W)</label>
|
||||||
<input type="number" id="ems-min-pv" value="1400" min="100" step="100">
|
<input type="number" id="ems-min-pv" value="1400" min="100" step="100">
|
||||||
<div style="font-size:11px;color:var(--muted);margin-top:3px">Mindestleistung für PV-Laden (min. 6A × 230V = 1380W)</div></div>
|
<div style="font-size:11px;color:var(--muted);margin-top:3px">Mindestleistung für PV-Laden (min. 6A × 230V = 1380W)</div></div>
|
||||||
@@ -781,6 +786,7 @@ async function openModal(invId) {
|
|||||||
document.getElementById("ems-timeout").value = inv.ems_timeout ?? 4;
|
document.getElementById("ems-timeout").value = inv.ems_timeout ?? 4;
|
||||||
document.getElementById("ems-target-hour").value = inv.ems_target_hour ?? 6;
|
document.getElementById("ems-target-hour").value = inv.ems_target_hour ?? 6;
|
||||||
document.getElementById("ems-phases").value = inv.ems_phases ?? 3;
|
document.getElementById("ems-phases").value = inv.ems_phases ?? 3;
|
||||||
|
document.getElementById("ems-enabled").checked = inv.ems_enabled ?? true;
|
||||||
} else {
|
} else {
|
||||||
document.getElementById("modal-title").textContent = "Gerät hinzufügen";
|
document.getElementById("modal-title").textContent = "Gerät hinzufügen";
|
||||||
document.getElementById("modal-id").value = "";
|
document.getElementById("modal-id").value = "";
|
||||||
@@ -828,6 +834,7 @@ async function saveInverter() {
|
|||||||
inv.ems_timeout = parseFloat(document.getElementById("ems-timeout").value);
|
inv.ems_timeout = parseFloat(document.getElementById("ems-timeout").value);
|
||||||
inv.ems_target_hour = parseInt(document.getElementById("ems-target-hour").value);
|
inv.ems_target_hour = parseInt(document.getElementById("ems-target-hour").value);
|
||||||
inv.ems_phases = parseInt(document.getElementById("ems-phases").value);
|
inv.ems_phases = parseInt(document.getElementById("ems-phases").value);
|
||||||
|
inv.ems_enabled = document.getElementById("ems-enabled").checked;
|
||||||
}
|
}
|
||||||
const idx = invertersList.findIndex(i => i.id === id);
|
const idx = invertersList.findIndex(i => i.id === id);
|
||||||
if (idx >= 0) invertersList[idx] = inv; else invertersList.push(inv);
|
if (idx >= 0) invertersList[idx] = inv; else invertersList.push(inv);
|
||||||
|
|||||||
Reference in New Issue
Block a user