Repository navigation
Conversation
…den) Co-Authored-By: Claude Opus 5.5 <[email protected]>
… Netzanteil Die Aufteilung je Tarifzeitraum enthält jetzt die gesamte geladene Energie des Intervalls (über alle Quellen) und seine Kosten, wie sie in costs eingehen. Die Kosten je Tarifzeitraum ergeben so in Summe data.costs. CSV-Spalten heißen "Energie <Name>" / "Kosten <Name>". Co-Authored-By: Claude Opus 5.5 <[email protected]>
Ohne Tarifzeitraum (dynamische Tarife, kein Preismodul, Rückfallpfad) bleibt der Preis-Eintrag im Tageslog unverändert. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Konflikt in packages/control/optional_test.py mit openWB#3782 (PV-Prognose): beide Seiten ergänzen Importe und Tests, beide behalten. Co-Authored-By: Claude Opus 5.5 <[email protected]>
openWB#4110 hat create_entry nach process_log_entry_builder.py verschoben: die tariff_name-Zeilen stehen jetzt dort, write_log.py übernimmt die master-Seite. chargelog_test.py: beide Seiten behalten, dazu ein Test, dass das angebrochene letzte Intervall den Tarifzeitraum der aktuellen Messung bekommt. Co-Authored-By: Claude Opus 5.5 <[email protected]>
master took datastore version 155 (obsolete prio fields); the tariff-split column default moves to upgrade_datastore_156.
upgrade_datastore_156 is now the Energy-Charts price cap (openWB#4284); data_tariff_split moves to 157.
Reviewer's GuideSchema and migrationsAdd a datastore upgrade that opts the new tariff-split log column out by default while preserving any existing user setting, and advance the datastore version.
Data structuresAdd tariff-period energy and cost totals to the charge-log state so charge-log calculation and entry creation can persist the split.
APIExpose a tariff-period name for the same price timeslot, returning no name when fixed tariff hours do not apply.
Include tariff-period names in daily price records only when the price module provides one, leaving fallback and dynamic-tariff records unchanged.
Uses of the APIUse the current fixed-hours tariff name when accumulating interval energy and costs, and include a rounded tariff split in charge-log entries when one exists.
Aggregate tariff-split values across filtered charge-log entries while continuing to tolerate records without the new field.
ImplementationResolve the tariff-period label for the first current-price timeslot only when all configured pricing modules use fixed tariff hours.
Assign each positive-energy interval and its calculated cost to its tariff, and extract rounded splits from accumulated log state.
Introduce an optional tariff-split column in the charge-log column defaults.
Add datastore migration coverage for the default-hidden tariff-split column and preservation of an existing preference.
UIAppend energy and cost CSV columns for each tariff period found in charge-log entries, leaving blanks where an entry has no matching split.
TestsTest tariff-name lookup for fixed-hours, default-price, missing configuration fields, and consistency with the matching price.
Test optional-module tariff-name resolution for fixed-hour combinations and cases where a tariff name is unavailable.
Cover charge-log tariff accumulation across tariff changes, current-entry assignment, absent tariff names, serialization, and reset behavior.
Test totals aggregation with mixed legacy and split entries, including malformed split data and the no-split case.
Test that daily price entries include a tariff name only when a price is available and the tariff module returns a name.
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
…ariff_split # Conflicts: # packages/helpermodules/update_config.py
…ariff_split # Conflicts: # packages/helpermodules/update_config_test.py
Umsetzung von #4111. Oberfläche: openWB/openwb-ui-settings#1129
Ladeprotokoll: Energie (Zähler des Ladepunkts) und Kosten je Zeitfenster der Festen Tarifstunden, z. B. „NT: 18,40 kWh / 4,73 €". Opt-in (Spalte standardmäßig aus,
upgrade_datastore_158), dynamische Tarife unverändert.data.costs)tariff_split, Eintrag unverändertGetestet per pytest, nicht auf einer Box.