Skip to content

Überschuss-Einstellungen verschieben - #3812

Merged
LKuemmel merged 11 commits into
masterfrom
feature_move_feed_in_limit
Sep 9, 2026
Merged

LKuemmel merged 11 commits into
masterfrom
feature_move_feed_in_limit

Conversation

@LKuemmel

@LKuemmel LKuemmel commented Aug 18, 2026 •

Copy link
Copy Markdown
Contributor

UI openWB/openwb-ui-settings#1049

  • feed in limit aktiv übernehmen, Einträge aus Ladeprofil entfernen
  • feed in limit inaktiv übernehmen, Einträge aus Ladeprofil entfernen
  • feed in limit aktivieren
  • feed in yield mit 5 kW übernehmen, auf 7kW ändern
  • bat mode mit Speicher-SoC übernehmen, auf Fahrzeug umstellen
  • switch on threshold mit 1500W übernehmen, auf 2kW ändern
  • switch on delay mit 70s übernehmen, auf 55s ändern
  • switch off threshold mit 500W übernehmen, auf 1kW ändern
  • switch off delay mit 90s übernehmen, auf 75s ändern
  • phase switch delay mit 6 Min übernehmen, auf 8 Min ändern
  • control range mit Bezug übernehmen, auf Einspeisung ändern
  • bat min soc mit 55% übernehmen, auf 60% ändern
  • bat max soc auf 75% übernehmen, auf 80% ändern
  • power discharge mit 4.5 kW übernehmen, auf 6.2kW ändern
  • power discharge active mit True übernehmen, auf False ändern
  • power reserve mit 2.3kW übernehmen, auf 2.6kW ändern
  • power reserve active mit True übernehmen, auf False ändern
  • retry failed phase switches mit True übernehmen, auf False ändern

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Moves PV-surplus and battery configuration into dedicated MQTT topic hierarchies and makes the feed-in limit global.

Changes:

  • Migrates MQTT topics and datastore configuration.
  • Updates charging control logic and data models.
  • Removes per-charge-point feed-in-limit controls and updates themes/APIs.

Reviewed changes

Copilot reviewed 38 out of 38 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
simpleAPI/src/ParameterHandler.php Updates battery-mode topic.
simpleAPI/simpleAPI_mqtt.py Updates battery API topics.
packages/modules/web_themes/standard_legacy/web/setupMqttServices.js Updates subscription topic.
packages/modules/web_themes/standard_legacy/web/processAllMqttMsg.js Updates message handling and removes per-vehicle setting.
packages/modules/web_themes/standard_legacy/web/index.html Updates battery topic and removes feed-in toggle.
packages/modules/web_themes/koala/source/src/stores/mqtt-store.ts Migrates store topics and feed-in API.
packages/modules/web_themes/koala/source/src/stores/mqtt-store-model.ts Removes per-template feed-in field.
packages/modules/web_themes/koala/source/src/components/ChargePointPvSettings.vue Removes feed-in toggle.
packages/modules/web_themes/colors/source/src/components/chargePointList/model.ts Removes feed-in model property.
packages/modules/web_themes/colors/source/src/components/chargePointList/cpConfig/ConfigPv.vue Removes feed-in control.
packages/modules/display_themes/colors/source/src/components/chargePointList/model.ts Removes feed-in model property.
packages/modules/display_themes/colors/source/src/components/chargePointList/configPanels/ConfigPv.vue Removes feed-in control.
packages/modules/display_themes/cards/source/src/views/ChargePointsView.vue Removes feed-in UI and handler.
packages/modules/display_themes/cards/source/src/stores/mqtt.js Updates battery topic and removes getter.
packages/modules/display_themes/cards/source/src/components/Battery/BatteryModeModal.vue Updates battery-mode publishing.
packages/modules/display_themes/cards/source/src/App.vue Updates battery subscription.
packages/helpermodules/update_config.py Adds datastore migration and new defaults.
packages/helpermodules/subdata.py Routes nested surplus topics.
packages/helpermodules/setdata.py Validates new topic hierarchy.
packages/helpermodules/create_debug.py Reads reorganized configuration.
packages/control/loadmanagement.py Applies global feed-in configuration.
packages/control/loadmanagement_test.py Updates changed helper signature.
packages/control/general.py Introduces battery and surplus configuration models.
packages/control/ev/ev.py Uses global surplus configuration.
packages/control/ev/charge_template.py Removes per-template feed-in setting.
packages/control/counter.py Uses global feed-in and surplus settings.
packages/control/counter_test.py Updates surplus tests.
packages/control/chargepoint/get_phases_test.py Updates phase-switch configuration path.
packages/control/chargepoint/chargepoint.py Uses relocated phase-switch setting.
packages/control/chargepoint/chargepoint_test.py Updates configuration path.
packages/control/bat_all.py Uses dedicated battery configuration.
packages/control/bat_all_test.py Updates battery configuration tests.
packages/control/auto_phase_switch_test.py Updates phase-switch signature.
packages/control/algorithm/surplus_controlled.py Applies one global feed-in policy.
packages/control/algorithm/surplus_controlled_test.py Updates surplus-control fixtures.
packages/control/algorithm/integration_test/conftest.py Updates integration configuration.
packages/control/algorithm/algorithm.py Updates phase-switch invocation.
data/config/mosquitto/public/default-dynamic-security.json Migrates MQTT ACL topics.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread packages/helpermodules/update_config.py Outdated
Comment thread packages/helpermodules/subdata.py
Comment thread packages/control/loadmanagement.py Outdated
Comment on lines +108 to +110
surplus_config = data.data.general_data.data.chargemode_config.surplus
if surplus_config.feed_in_limit:
raw_power_left = max(raw_power_left - surplus_config.feed_in_yield, 0)

try {
$topic = "openWB/set/general/chargemode_config/pv_charging/bat_mode";
$topic = "openWB/set/general/chargemode_config/bat/mode";
Comment on lines +771 to +774
elif ("openWB/set/general/chargemode_config/surplus/feed_in_yield" in msg.topic or
"openWB/set/general/chargemode_config/surplus/vehicle/switch_on_threshold" in msg.topic or
"openWB/set/general/chargemode_config/surplus/vehicle/switch_on_delay" in msg.topic or
"openWB/set/general/chargemode_config/surplus/vehicle/switch_off_delay" in msg.topic):

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 38 out of 38 changed files in this pull request and generated 1 comment.

Suppressed comments (4)

simpleAPI/simpleAPI_mqtt.py:853

  • This updates the Python MQTT handler, but the same SimpleAPI operation in simpleAPI/src/ParameterHandler.php:1619 still publishes openWB/set/general/chargemode_config/pv_charging/bat_power_reserve. Requests routed through the PHP handler will therefore report success while writing a topic that the updated backend no longer accepts. Move the PHP handler and its docblock to .../bat/power_reserve as well.
    packages/modules/web_themes/colors/source/src/components/chargePointList/model.ts:73
  • The colors web theme migration is incomplete: src/assets/js/sendMessages.ts:16 still publishes battery priority to .../pv_charging/bat_mode, while processMessages.ts:41 subscribes only to .../pv_charging/# and parses bat_mode. After the backend moves the value to .../bat/mode, this theme can neither receive nor change battery priority. Update the source topic map/subscription/parser and rebuild its committed web assets.
	private _instantTargetPhases = 0

packages/modules/display_themes/colors/source/src/components/chargePointList/model.ts:159

  • The colors display theme still uses the removed battery-mode namespace: src/assets/js/sendMessages.ts:22 publishes .../pv_charging/bat_mode, and processMessages.ts:32 subscribes only to .../pv_charging/#. Consequently battery priority becomes stale and its controls write an ignored topic after this migration. Update its publish/subscription/parsing paths to .../bat/mode and rebuild the committed assets.
	get pvMinCurrent() {

packages/helpermodules/update_config.py:3487

  • There is no test for datastore upgrade 138, although this migration deletes a field from every charge template, merges multiple per-template booleans, moves 15 retained topics, and deletes the old topics. packages/helpermodules/update_config_test.py tests earlier migrations but never invokes this one, so a regression could silently discard user configuration. Add a migration test covering true/false templates, preservation of moved payloads, removal of old topics, and version 138 being recorded.
    def upgrade_datastore_138(self) -> None:

("openWB/general/chargemode_config/pv_charging/phase_switch_delay", 7),
("openWB/general/chargemode_config/pv_charging/retry_failed_phase_switches",
PvCharging().retry_failed_phase_switches),
("openWB/general/chargemode_config/bat/mode", BatConsiderationMode.EV_MODE.value),
@LKuemmel
LKuemmel marked this pull request as ready for review August 19, 2026 09:04
@LKuemmel
LKuemmel force-pushed the feature_move_feed_in_limit branch 3 times, most recently from e4e7e49 to 9a69dab Compare August 20, 2026 08:44
@LKuemmel
LKuemmel changed the base branch from master to feature_chargemode_enums August 20, 2026 08:46
@LKuemmel
LKuemmel force-pushed the feature_move_feed_in_limit branch from 9a69dab to daafaaf Compare August 21, 2026 07:49
@LKuemmel
LKuemmel force-pushed the feature_move_feed_in_limit branch from daafaaf to 3e84345 Compare August 24, 2026 11:58
@LKuemmel
LKuemmel force-pushed the feature_move_feed_in_limit branch from 3e84345 to afa929c Compare August 26, 2026 13:42
@LKuemmel
LKuemmel force-pushed the feature_move_feed_in_limit branch from afa929c to f38ddf9 Compare August 28, 2026 13:09
@LKuemmel
LKuemmel force-pushed the feature_move_feed_in_limit branch from f38ddf9 to 1139779 Compare September 7, 2026 13:36
Base automatically changed from feature_chargemode_enums to master September 8, 2026 12:32
LKuemmel and others added 5 commits September 8, 2026 14:32
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
@LKuemmel
LKuemmel force-pushed the feature_move_feed_in_limit branch from 1139779 to 41e10c4 Compare September 8, 2026 12:32
@LKuemmel LKuemmel changed the title move feed_in_limit and feed_in_yield Überschuss-Einstellungen verschieben Sep 9, 2026
@LKuemmel
LKuemmel merged commit d07e2b9 into master Sep 9, 2026
5 checks passed
@LKuemmel
LKuemmel deleted the feature_move_feed_in_limit branch September 9, 2026 12:21
LKuemmel pushed a commit that referenced this pull request Sep 15, 2026
…3941)

processAllMqttMsg.js: standard_legacy's message dispatcher still only matched the old
chargemode_config/pv_charging/ prefix, so the retained bat_mode message never reached
processPvConfigMessages() after it moved to chargemode_config/bat/mode - the
Überschussverwendung radio buttons never showed the persisted selection on page load
(only after manually clicking one, via a separate local handler).

ParameterHandler.php: setBatPowerReserve() was left publishing to the old
pv_charging/bat_power_reserve topic, which setdata.py no longer validates - the endpoint
reported success without actually changing the reserve (same migration Copilot already
flagged for bat_mode on PR #3812, but missed for bat_power_reserve).
LKuemmel added a commit to LKuemmel/core that referenced this pull request Sep 15, 2026
LKuemmel added a commit to LKuemmel/core that referenced this pull request Sep 17, 2026
LKuemmel added a commit that referenced this pull request Sep 28, 2026
AlexanderHa98 pushed a commit to AlexanderHa98/core that referenced this pull request Sep 29, 2026
LKuemmel added a commit that referenced this pull request Sep 30, 2026
* dimm kit: improve error handling, handle deleted output devices (#3868)

* dimm kit: improve error handling, handle deleted output devices

* review, complete logging

* Apply batched suggestions from code review

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fixes

* add pytest

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* PV-Reset: NO_CHARGING_ALLOWED blockiert den robustness-Reset nicht mehr (#3968)

Nach PR #3966 blockierte ein eingesteckter, aber unterhalb der Einschaltschwelle wartender Ladepunkt (Zustand NO_CHARGING_ALLOWED) weiterhin dauerhaft den
Reset von reserved_surplus/released_surplus - das ist aber der mit Abstand häufigste, langlebigste Zustand eines PV-ladenden Fahrzeugs. Jede Reservierung
wird jedoch bereits beim Übergang in diesen Zustand freigegeben (siehe zB Counter.reset_switch_on_off()), sodass er nie mit einer noch offenen Reservierung erreicht wird - er gehörte also nie in die Blockierliste.

Betroffen war zB ein Fall, in dem eine verwaiste reserved_surplus-Reservierung aus einem unterbrochenen Vorgang nie mehr zurückgesetzt wurde, wodurch die
Einschaltschwelle dauerhaft nicht mehr erreicht werden konnte (PV-Laden startet gar nicht mehr) - siehe Diskussion.

Ersetzt die 5 Einzelvergleiche + Chargepoint/Consumer-Fallunterscheidung + plug_state-Sonderfall durch eine einzige Zustandsliste der tatsächlich
reservierungshaltenden Zustände (PERFORMING_PHASE_SWITCH, PHASE_SWITCH_DELAY, SWITCH_OFF_DELAY, SWITCH_ON_DELAY), verifiziert gegen jede +=/-=-Stelle in
counter.py/ev.py/chargepoint.py.

references #3908 (reply in thread)

* fix: external_openwb chargepoint crashes when fault_state topic is missing (#3970)

get_values() indexed received_topics[fault_state] directly, including
inside its own KeyError handler - if the paired internal chargepoint
hadn't published fault_state yet (startup, reconnect), the fallback
crashed on the exact same missing key instead of handling it.

* consumer: fix hierarchy, default usage (#3975)

* consumer: fix hierarchy, default usage

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix: external_openwb occasionally missed retained MQTT topics under load (#3976)

start_finite_loop()'s fixed 1s collection window left little margin for
connection/handshake overhead when the paired internal chargepoint was
busy (eg mid-charge), occasionally causing get_values() to miss a
retained topic despite retain=True. Made the timeout configurable
(default unchanged for the other 17 call sites) and doubled it for
external_openwb specifically, which has to reliably collect ~20 topics
over a real network hop rather than one or two local values.

* Systembericht Verbraucher (#3956)

* add consumers; reorganize structure

* improve

* fix: Ladepunkte nutzen die Abschaltschwelle der Verbraucher (#3984)

calc_switch_off_threshold() liest fuer alle Lasten surplus.consumer.switch_off_threshold. surplus.vehicle.switch_off_threshold ist konfigurierbar, wird migriert und in der Debug-Ausgabe angezeigt, aber im Regelalgorithmus nirgends gelesen.

Die Migration verschiebt den alten pv_charging/switch_off_threshold nach surplus/vehicle/switch_off_threshold. Damit regeln bestehende Anlagen seit dem Update mit dem neu angelegten Consumer-Default 0 statt mit dem konfigurierten Wert.

* removing meter-only consumers from load management priority (#3998)

* removing meter-only consumers from load management priority

* review

* extend for self_controlled

* Potential fix for pull request finding 'Preserve pre-existing empty groups during migration'

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* build UI (#3999)

* Update: Hausverbrauch Zähler (#3991)

* EVU auf Auto entspricht Ja

* fix

* avm: fix consumer switch_on/off using unresolved ain, fix bare return in session lookup (#3987)

* build UI (#4000)

* Feature negative dc charging (#3795)

* Add Bidi to instant-charging

* Update Koala-UI min/max DC-Sollleistung

* fix

* Build Themes

* avm consumer: invertierte Session-Refresh-Bedingung beheben (#4001)

ensure_valid_session_id() erneuerte die Session nur, wenn
check_valid_session_id() False war - die Funktion liefert aber "ist
ungültig" zurück, nicht "ist gültig". Dadurch wurde nie erneuert,
sobald session_id einmal None oder abgelaufen war: alle Anfragen
liefen dauerhaft mit sid=None und schlugen mit HTTP 403 fehl.

Umbenannt zu session_id_expired(), passend zum tatsächlichen
Rückgabewert.

* Peak Filter: bei Rückwärtssprüngen auf Wert größer/gleich Höchststand warten (#4007)

* Peak Filter: bei Rückwärtssprüngen auf Wert größer/gleich Höchststand warten

* review

* build UI (#4008)

* Consumer: Add Daikin, EGO and EMS-ESP (#3969)

* Add Daikin, EGO and EMS-ESP consumer modules

* daikin: Air2Air-Fixes aus Review (Lena, PR #3969) + neues Altherma-Modul

Air2Air: Name korrigiert ("Daikin Air2Air (HomeHub EKRHH)"), METER_ONLY entfernt
(keine Leistungsmessung verfügbar).

Neu: daikin_homehub_altherma - eigenes Modul für Daikin Altherma, da eigene
Modbus-Register (EKRHH Installer Reference Guide 4PDE744838, Kap. 9, separat von
Air2Air/Kap. 10). Register gegen das offizielle Handbuch geprüft:
- switch_on/off: Reg 56 (Smart-Grid-Modus), analog zu Air2Airs Reg 1000
- set_power_limit: Reg 58 (Allgemeine Leistungsbegrenzung, gilt laut Handbuch
  unabhängig vom Smart-Grid-Modus, anders als Reg 57)
- update: Input-Reg 51 (Stromverbrauch Wärmepumpe) - Altherma kann im Gegensatz
  zu Air2Air tatsächlich Leistung melden, daher METER_ONLY hier sinnvoll

* Consumer: Add Mitsubishi and Gree AC modules (#3973)

* Add Mitsubishi and Gree AC consumer modules

* Mitsubishi/Gree: METER_ONLY entfernt, da keine Leistungsmessung

Beide Module haben keine update()-Funktion und liefern somit keine
Leistungsmessung; ConsumerUsage.METER_ONLY war daher nicht zutreffend.

* Gree: tcid im Bind-Request ergänzt (Review Lena)

cid muss beim Binden konstant "app" sein, tcid identifiziert das
Zielgerät per MAC - bestätigt gegen tomikaa87/gree-remote und
cmroche/greeclimate.

* build UI (#4010)

* Fixed Hours Tariff: migrate fixed-hours weekdays to Python weekday format (#4009)

* Hierarchie: Entferne mit Verbraucher verknüpften Zähler (#4011)

* Hierarchie: Entferne mit Verbraucher verknüpften Zähler

* flake8

* Speicher-Vorrang bei Erholung von Mindest- bis Maximal-SoC (#3986)

* bat_all: restore Speicher-Vorrang beim Erholen von Mindest-SoC bis Maximal-SoC

* bat_all: Speicherleistung nicht ans Fahrzeug weitergeben, wenn Entladung nicht erlaubt ist

* build UI (#4025)

* Add ACLs consumer and load management topics (#3964)

* Add acls

* Add load management prio to status

* fix colors theme: leftover pv_charging topic paths from PR #3812 topic migration (#3946)

* Build Themes

* Consumer: Add Kermi, LG Therma V, Luxtronik (#3971)

* Add Kermi, LG Therma V and Luxtronik consumer modules

* kermi, luxtronik: Skalierungsfaktoren korrigiert (Review #3971)

Kermi Reg 301 (PV-Überschuss): war /10, muss *10 sein.
Luxtronik Reg 10301 (el. Leistung): war *10, muss *100 sein.
Reg 108 (Kermi) war bereits korrekt.

* Sonnenbatterie: add OperationMode Optimization (#3769)

* add Mode Optimization

* check for valid OperatingMode

* Fix load management single phase netting and Bidi discharge currents (#4012)

* Lastmanagement: eigenen Ladestrom bei ein-/zweiphasigem Laden nicht mehr als Fremdlast zählen

_set_current_left() entschied per min(element_current) < 0, ob der Strom
eines Ladepunkts als Verbrauch oder Einspeisung zählt. Bei ein-/zweiphasigem
Laden reicht dafür schon minimales negatives Messrauschen auf einer
ungenutzten Phase - der eigene Ladestrom wurde dann nirgends vom
Zähler-Rohwert abgezogen, das Lastmanagement hielt die eigene Ladung für
Fremdlast (falsche "Maximalstromstärke erreicht"/Schieflast-Meldungen,
siehe Discussion #3908). _set_power_left() hat exakt dasselbe Problem
nicht, da dort schon die Gesamtleistung statt einzelner Phasenströme
geprüft wird - jetzt angeglichen.

* Bidi-Entladung: eigene Hardware-Stromgrenze des Ladepunkts durchsetzen

check_min_max_current() rief check_cp_max_current() (setzt dc_max_current
des Ladepunkt-Templates durch) nur im Lade-Zweig auf, nicht beim Entladen
(BIDI_CHARGING, required_current < 0) - die vom Fahrzeug gemeldete
max_discharge_power wurde beachtet, die eigene Hardwaregrenze des
Ladepunkts nicht. Bug in #3795, check_cp_max_current() behandelt negative
Werte bereits korrekt (Vorzeichen wird erhalten).

* build UI (#4026)

* Improve Monthly/Yearly Log (#3829)

* Improve Log

* Move generate_totals-Logger in logger.py

* Fix

* Fix Circular Import

* Update .gitignore

* fix

* Ensure ramdisk folder exists

* retrigger Copilot

* Add Copilot suggestions

* fix

* Fix Tesla/Powerwall data handling and improve robustness of control loop (#3232)

* tesla/powerwall: implement load management, add fail-fast handling and gateway diagnostics

- add structured HTTP error handling in PowerwallHttpClient
  - distinguish transport, HTTP and JSON parsing failures
  - support fail_fast=False for non-critical requests
  - track cycle_failed and cookie_renewed state across one polling cycle

- add fail-fast handling in device.py
  - stop remaining Tesla component updates once a critical Powerwall request fails
  - log native TCP connection state diagnostics via /proc/net/tcp(/tcp6)
  - emit periodic session / connection health logs
  - keep cookie reuse, but mark startup + reauth cycles explicitly

- reduce /api/status traffic in counter.py
  - fetch firmware only after startup or after a new auth cookie was negotiated
  - treat /api/status as non-critical so it cannot fail the whole cycle

- keep import/export counters based on aggregate["site"]["energy_imported/exported"]
  - do not use summed per-phase energy counters as meter source
  - keep /api/meters/site for phase details only
  - add derived fallback currents and signed power factors from P/Q/U when Tesla/Neurio currents are 0
  - expose additional diagnostics such as frequency / serial number
  - add throttled debug logging to compare aggregate counters with per-phase sums
  - restore aggregate-based site counters so load management works correctly again

* tesla/powerwall: simplify device/http client and keep cookie reauth handling

- remove session / connection diagnostics and analysis-only helpers
- remove /proc-based connection stats and periodic session logging
- keep fail-fast handling for the Tesla update cycle
- keep cookie reuse and 401/403 reauthentication flow
- keep support for non-critical requests via fail_fast=False
- reduce implementation closer to upstream while preserving Powerwall-specific fixes

* tesla/powerwall: simplify device/http client and keep local current fallback

- remove analysis-only diagnostics and session tracking from device.py
- remove connection stats and other debug-only helpers
- simplify http_client.py to a minimal request wrapper
- keep cookie reuse and 401/403 reauthentication flow in device.py
- use fail-fast handling in device.py via SingleComponentUpdateContext(..., reraise=True)
- move Tesla-specific robustness back into the counter module only
- keep aggregate["site"]["energy_imported/exported"] as sole source for EVU counters
- keep local current and power factor calculation when Neurio/Tesla returns only 0 currents
- remove /api/status handling from counter.py
- fix formatting / lint issues (newline at EOF, spaces instead of tabs)

* Fix Tesla error handling and compatibility note

- use central openWB component error handling
- remove Tesla-specific fail-fast handling
- rely on the shared HTTP response hook
- remove obsolete local API compatibility warning

* se standard error handling in Tesla counter

- remove _safe_float and module-specific defaults
- propagate HTTP errors to central error handling
- keep compatibility fallback for missing phase data
- calculate phase currents from P/Q/U when Tesla reports zero currents

* Fix Tesla module lint errors

* Adjust Tesla API compatibility note

* Error status table (#3943)

* add error and warning icons to chargepoint table

* Align warning icons - remove extra warning column

* No tooltip for mobile - ellipsis title only if truncated

* Build Themes

* add consumer temperature readings to consumer card (#3974)

* add consumer temperature readings to consumer card

* check if temperature data is present

* use getValueObject for formatting

* Build Themes

* Consumer: Add M-TEC, Weishaupt, Xtherma (#3972)

* Add M-TEC, Weishaupt and Xtherma consumer modules

* M-TEC: Reg 707 durch evcc-Quelle bestätigt, Kommentar aktualisiert

Reg 707 (elektrische Leistungsaufnahme) ist in evcc's mtec.yaml als
holding register mit scale 1 gelistet, identisch zu unserer Implementierung.

* Weishaupt: Reg 33126 entfernt (nicht verifizierbar), Xtherma: SG-Ready on/off ergänzt

Weishaupt: Reg 33126 (el. Leistungsaufnahme) ist weder in der offiziellen
Datenpunktliste (83807301) noch in einer ausgereiften Community-Implementierung
(OStrama/weishaupt_modbus) zu finden - update()/METER_ONLY entfernt,
SollwertPV (Reg 40002, offiziell dokumentiert) bleibt unverändert.

Xtherma: Reg 60 (SG-Ready-Modus) ergänzt switch_on/switch_off
(SUSPENDABLE_ONOFF), eigener 30min-Throttle laut Protokoll.

* Fix charge cost calc (#4022)

* fix chargelog energy source calculation

* Add Test

* fix circular error

---------

Co-authored-by: LKuemmel <76958050+LKuemmel@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: SeaSpotter <florian.horch@gmail.com>
Co-authored-by: ndrsnhs <156670705+ndrsnhs@users.noreply.github.com>
Co-authored-by: s0170071 <33855380+s0170071@users.noreply.github.com>
Co-authored-by: GitHub Actions <actions@github.com>
Co-authored-by: BrettS <168732306+Brett-S-OWB@users.noreply.github.com>
Co-authored-by: NicoP-codeing <nico.prenzel@pn-systeme.de>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants