diff --git a/haos-addon/config.yaml b/haos-addon/config.yaml index b319975..f890ec6 100644 --- a/haos-addon/config.yaml +++ b/haos-addon/config.yaml @@ -1,5 +1,5 @@ name: ShineBridge -version: "1.8.19" +version: "1.8.20" slug: shinebridge description: Growatt Wechselrichter lokal in Home Assistant — Modbus TCP via ShineLAN-X, MQTT Discovery, Web UI url: https://gitea.bitfire.work/retr0/shinebridge diff --git a/haos-addon/src/main.py b/haos-addon/src/main.py index f597df8..b990f72 100644 --- a/haos-addon/src/main.py +++ b/haos-addon/src/main.py @@ -480,22 +480,25 @@ def api_save_config(): State.mqtt_cfg[k] = data[k] if data.get("mqtt_pass"): State.mqtt_cfg["mqtt_pass"] = data["mqtt_pass"] - for k in ("price_import", "price_export", "spot_markup"): - if k in data: - State.mqtt_cfg[k] = float(data[k]) + for k in ("price_import", "price_export", "spot_markup", "monthly_rate_eur", "grundpreis_eur_per_month"): + if k in data and data[k] is not None: + try: + State.mqtt_cfg[k] = float(data[k]) + except (ValueError, TypeError): + pass for k in ("billing_day", "billing_month"): - if k in data: - State.mqtt_cfg[k] = int(data[k]) + if k in data and data[k] is not None: + try: + State.mqtt_cfg[k] = int(data[k]) + except (ValueError, TypeError): + pass for k in ("tariff_type", "spot_country"): - if k in data: + if k in data and data[k] is not None: State.mqtt_cfg[k] = str(data[k]) if "spot_chart" in data: State.mqtt_cfg["spot_chart"] = bool(data["spot_chart"]) if "billing_tracker_enabled" in data: State.mqtt_cfg["billing_tracker_enabled"] = bool(data["billing_tracker_enabled"]) - for k in ("monthly_rate_eur", "grundpreis_eur_per_month"): - if k in data: - State.mqtt_cfg[k] = float(data[k]) save_config() threading.Thread(target=_restart_all, daemon=True).start() return jsonify({"ok": True}) @@ -569,8 +572,8 @@ def api_period_energy(): pv_total = entry.get("total_energy_total") grid_exp = entry.get("grid_export_kwh") bat_dch = entry.get("bat_discharge_total") - if pv_total is not None and grid_exp is not None: - savings = round(max(0.0, pv_total - grid_exp), 2) + if pv_total is not None: + savings = round(max(0.0, pv_total - (grid_exp or 0.0)), 2) entry["savings_kwh"] = savings entry["savings_eur"] = round(savings * eff_price, 2) elif bat_dch is not None: diff --git a/haos-addon/src/web/index.html b/haos-addon/src/web/index.html index 01291e5..4eb41b3 100644 --- a/haos-addon/src/web/index.html +++ b/haos-addon/src/web/index.html @@ -1319,8 +1319,8 @@ async function savePrices() { spot_markup: parseFloat(document.getElementById("cfg-spot-markup").value || 0), spot_country: document.getElementById("cfg-spot-country").value, spot_chart: document.getElementById("cfg-spot-chart").checked, - billing_day: parseInt(document.getElementById("cfg-billing-day").value), - billing_month: parseInt(document.getElementById("cfg-billing-month").value), + billing_day: parseInt(document.getElementById("cfg-billing-day").value) || 1, + billing_month: parseInt(document.getElementById("cfg-billing-month").value) || 1, billing_tracker_enabled: document.getElementById("cfg-billing-tracker").checked, monthly_rate_eur: parseFloat(document.getElementById("cfg-monthly-rate").value || 0), grundpreis_eur_per_month: parseFloat(document.getElementById("cfg-grundpreis").value || 0),