Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
de96526
test(replay): replay a Predbat log forwards from a debug yaml
chalfontchubby Oct 3, 2026
2ea3b57
test(replay): rescan the candidate rate windows on every replayed re-…
chalfontchubby Oct 3, 2026
4ca258d
test(replay): chart a replay - actual SoC against live and replayed e…
chalfontchubby Oct 3, 2026
2772ff6
test(replay): simulated mode, and date-aware plan windows
chalfontchubby Oct 3, 2026
9e7005a
test(replay): use the logged load divergence on every replayed re-plan
chalfontchubby Oct 3, 2026
ffc530e
feat(dummy_inverter): simulated inverter and battery component; repla…
chalfontchubby Oct 3, 2026
077c98f
test(replay): compare like with like, and replay the inputs fetch reb…
chalfontchubby Oct 3, 2026
14d008e
test(replay): stop at a logged version change
chalfontchubby Oct 3, 2026
d521e0c
test(replay): mark a logged version change rather than stopping at it
chalfontchubby Oct 3, 2026
8287c0c
test(replay): use the logged PV and load forecasts when the log has them
chalfontchubby Oct 3, 2026
f5f4015
test(replay): --replay_set name=value overrides a setting for what-if…
chalfontchubby Oct 3, 2026
7c893dc
test(replay): rename --replay_set to --override and apply it to singl…
chalfontchubby Oct 3, 2026
64dc533
docs(debug-journal): forward log replay traps - single day, Replay in…
chalfontchubby Oct 4, 2026
ece1184
test(replay): rescan the rate min/max and forward rate curves from no…
chalfontchubby Oct 4, 2026
3ebf58c
test(replay): start each re-plan from the SoC the live plan used, not…
chalfontchubby Oct 4, 2026
6fd3422
test(replay): carry a log replay across midnight
chalfontchubby Oct 4, 2026
86e566d
test(replay): follow a live re-plan of an invalid plan
chalfontchubby Oct 4, 2026
316d98c
test(replay): clear the p90 guard's signatures every run, as fetch do…
chalfontchubby Oct 4, 2026
3b6e8e5
test(replay): read the exact state and rates lines from the log
chalfontchubby Oct 4, 2026
4d3a560
test(replay): tell a sensor-triggered recompute from an invalid plan
chalfontchubby Oct 4, 2026
14f136b
test(replay): read the exact load forecast line
chalfontchubby Oct 4, 2026
b5e0734
test(replay): read the exact PV forecast line
chalfontchubby Oct 4, 2026
ccc8ca6
test(replay): refresh the load forecast every run, as live does, not …
chalfontchubby Oct 5, 2026
61a84c7
test(replay): read the logged car state
chalfontchubby Oct 5, 2026
89b5b79
test(replay): read the logged inverter state, the rates in force and …
chalfontchubby Oct 6, 2026
060340f
test(replay): read the compact load forecast line, and the battery te…
chalfontchubby Oct 6, 2026
378108d
test(replay): chart a full plan timeline - charge, hold, freeze, expo…
chalfontchubby Oct 6, 2026
3c69a8d
test(replay): model a car charging now outside its plan every run, as…
chalfontchubby Oct 6, 2026
98254ca
docs(replay): list the inputs the replay now reads, and describe the …
chalfontchubby Oct 6, 2026
07a1416
test(replay): read a logged load divergence of None, as the plan now …
chalfontchubby Oct 7, 2026
9ea72cb
test(replay): replay logs from before the "Replay input:" lines, appr…
chalfontchubby Oct 7, 2026
b90658d
test(replay): total the SoC across inverters when a log has no totals…
chalfontchubby Oct 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .cspell/custom-dictionary-workspace.txt
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ autoflake
automations
autopep
autoupdate
axisbelow
axvline
axvspan
Backfeed
Expand Down Expand Up @@ -173,6 +174,7 @@ echargingpile
ecosmart
Eddi
eddis
edgecolor
efgh
elif
elinter
Expand Down Expand Up @@ -216,6 +218,7 @@ exog
expmsg
exportlimit
exportvalue
facecolor
fdpwr
fdsoc
feedin
Expand All @@ -235,6 +238,7 @@ formmethod
foxcloud
foxess
foxesscloud
frameon
freephase
fromisoformat
fronius
Expand Down Expand Up @@ -265,6 +269,7 @@ gridcharge
gridcode
gridconsumption
gridconsumptionpower
gridspec
Groq
growatt
growattsph
Expand Down Expand Up @@ -424,6 +429,7 @@ nanstd
nattribute
nbytes
ncalls
ncol
nearr
nemotron
NESO
Expand Down Expand Up @@ -585,6 +591,7 @@ setpoints
setstate
SFMB
sg05lp1
sharex
SIGALRM
sigcloud
sigen
Expand Down Expand Up @@ -637,6 +644,7 @@ substep
sunspec
sunsynk
supabase
suptitle
suspendedev
suspendedevse
synkctl
Expand Down Expand Up @@ -749,7 +757,9 @@ yaxis
yaxistooltip
yday
ylabel
ylim
YOURSERIAL
yticks
yuanzhi
zappi
zappis
Expand Down
14 changes: 14 additions & 0 deletions apps/predbat/components.py
Original file line number Diff line number Diff line change
Expand Up @@ -636,6 +636,20 @@ def load_component_class(component_info):
"phase": 1,
"can_restart": True,
},
"dummy_inverter": {
"class": "dummy_inverter.DummyInverter",
"name": "Dummy Inverter",
"inverter": True,
"event_filter": "predbat_dummy_",
# A simulated inverter and battery for demos and log replay, enabled by a dummy_inverter apps.yaml block.
# Defaults for every setting in the block live in dummy_inverter.py beside the model that uses them.
"args": {
"config": {"required": True, "config": "dummy_inverter"},
"automatic": {"required": False, "config": "dummy_inverter_automatic", "default": True},
},
"phase": 1,
"can_restart": True,
},
"teslemetry": {
"class": "teslemetry.TeslemetryAPI",
"name": "Tesla Powerwall (Teslemetry)",
Expand Down
29 changes: 29 additions & 0 deletions apps/predbat/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -2513,6 +2513,35 @@
"charge_discharge_with_rate": False,
"target_soc_used_for_discharge": False,
},
"DUMMY": {
"name": "Dummy (simulated)",
"has_rest_api": False,
"has_mqtt_api": False,
"output_charge_control": "power",
"charge_control_immediate": False,
"has_charge_enable_time": True,
"has_discharge_enable_time": True,
"has_target_soc": True,
"has_reserve_soc": True,
"has_timed_pause": False,
"charge_time_format": "HH:MM:SS",
"charge_time_entity_is_option": True,
"soc_units": "%",
"num_load_entities": 1,
"has_ge_inverter_mode": False,
"has_ge_eco_toggle": False,
"time_button_press": False,
"clock_time_format": "%Y-%m-%d %H:%M:%S",
"write_and_poll_sleep": 2,
"has_time_window": False,
"support_charge_freeze": True,
"support_discharge_freeze": True,
"support_feedin_first": False,
"has_idle_time": False,
"can_span_midnight": True,
"charge_discharge_with_rate": False,
"target_soc_used_for_discharge": False,
},
"GWMQTT": {
"name": "ESP32 Gateway MQTT",
"has_rest_api": False,
Expand Down
Loading
Loading