github davidusb-geek/emhass v0.18.9
EMHASS version 0.18.9

one hour ago

Version 0.18.9 delivers critical web API security hardening alongside major functional upgrades, including full multi-inverter optimization and UI support, per-step availability masks for deferrable loads and heat sources, expanded Python 3.12–3.14 compatibility, and numerous reliability fixes across forecasting, thermal modeling, and atomic configuration saving. Many thanks to @LesIT1, @MMicieli, @thorstenhornung1, @JustAnotherPU, and @snauwaertc for their outstanding work, testing, and documentation contributions that made this release possible.

Improvement

  • test: add asymmetric-efficiency battery physics invariants (Stage 2C of #1269) (@MMicieli)
  • Document runtime parameters and configurations (@davidusb-geek)
  • test: Stage 2B (#1269) - tolerate solver noise in SOC deficit regression (@MMicieli)
  • test: Stage 2A (#1269) - detect ignored per-load cost overrides (@MMicieli)
  • feat: publish per-inverter sensors and the inverter attribute (#1150) (@LesIT1)
  • feat: web UI per-inverter lists follow number_of_inverters (#1150 PR 5) (@LesIT1)
  • feat: run more than one inverter, with PV clip and hybrid spill (#1150 PR 3b) (@LesIT1)
  • feat: guards for more than one inverter, refusal kept (#1150 PR 3b, part 1) (@LesIT1)
  • test: add aiohttp test-server fixture and migrate representative HTTP tests (@MMicieli)
  • feat: per-inverter optimizer model, refusal kept (#1150 PR 3a) (@LesIT1)
  • test: frozen-number pins for the one-inverter optimizer (#1150) (@LesIT1)
  • feat: per-plant PV forecast series and P_PV_plant columns (#1150 PR 2) (@LesIT1)
  • Stage 2 of #1220: Python 3.12-3.14 support and aioresponses/aiohttp 3.14 test compatibility (@MMicieli)
  • feat: per-inverter config keys and validation (#1150, PR 1 of 6) (@LesIT1)
  • chore: cleaning Dockerfile and github Workflows warnings (@davidusb-geek)
  • feat: per-step availability mask for deferrable loads and heat sources (def_availability) (@thorstenhornung1)

Documentation

  • docs(cookbook): add custom PV forecast injection recipe (@JustAnotherPU)
  • docs: cookbook recipe for two hybrid inverters (#1150) (@LesIT1)
  • test/docs: AC-coupled battery-only inverter curve accounting (#1271) (@MMicieli)
  • docs: count EV deadlines in elapsed steps from the first step and keep them strict (#1223) (@MMicieli)
  • docs: make DST- and start-time-sensitive examples follow the first-step time grid (#1223) (@MMicieli)
  • docs: fix parseable examples and fail-closed Node-RED SOC input (#1223) (@MMicieli)

Fix

  • fix: prevent log injection from cached battery-identification values (@MMicieli)
  • fix: use interval-average PV power for Open-Meteo forecasts (@MMicieli)
  • fix: do not enforce thermal_config bounds inside the thermal_inertia lag window (@snauwaertc)
  • fix: validate battery_stress_segments and inverter_stress_segments (@LesIT1)
  • fix: single-flight guard and atomic result files for live optimizations (refs #1304) (@MMicieli)
  • fix: write config.json and params.pkl whole, one save at a time (@LesIT1)
  • fix: refuse a request body orjson cannot write with a 400 (@LesIT1)
  • fix: bound number_of_batteries at 100 and refuse a bad count with a 400 (@LesIT1)
  • fix: replace deprecated aiohttp.BasicAuth in VictoriaMetrics authentication (@MMicieli)
  • fix: read inverter_stress_segments for the inverter stress cost (@LesIT1)
  • fix: hold near-ceiling battery identification fits backed only by the same-source cross-check (#1072) (@LesIT1)
  • fix: stop Forecast.Solar overnight gaps becoming phantom PV (#1267) (@MMicieli)
  • Fix config UI HTML-encoding of configuration values (#1290) (@MMicieli)
  • fix: patching the thermal excess building gains (@davidusb-geek)

What's Changed

  • feat: per-step availability mask for deferrable loads and heat sources (def_availability) by @thorstenhornung1 in #1288
  • fix: patching the thermal excess building gains by @davidusb-geek in #1289
  • Fix config UI HTML-encoding of configuration values (#1290) by @MMicieli in #1291
  • fix: stop Forecast.Solar overnight gaps becoming phantom PV (#1267) by @MMicieli in #1292
  • fix: hold near-ceiling battery identification fits backed only by the same-source cross-check (#1072) by @LesIT1 in #1293
  • chore: cleaning Dockerfile and github Workflows warnings by @davidusb-geek in #1295
  • feat: per-inverter config keys and validation (#1150, PR 1 of 6) by @LesIT1 in #1297
  • fix: read inverter_stress_segments for the inverter stress cost by @LesIT1 in #1299
  • Stage 2 of #1220: Python 3.12-3.14 support and aioresponses/aiohttp 3.14 test compatibility by @MMicieli in #1300
  • docs: fix parseable examples and fail-closed Node-RED SOC input (#1223) by @MMicieli in #1302
  • docs: make DST- and start-time-sensitive examples follow the first-step time grid (#1223) by @MMicieli in #1303
  • docs: count EV deadlines in elapsed steps from the first step and keep them strict (#1223) by @MMicieli in #1305
  • fix: replace deprecated aiohttp.BasicAuth in VictoriaMetrics authentication by @MMicieli in #1307
  • fix: bound number_of_batteries at 100 and refuse a bad count with a 400 by @LesIT1 in #1308
  • fix: refuse a request body orjson cannot write with a 400 by @LesIT1 in #1309
  • fix: write config.json and params.pkl whole, one save at a time by @LesIT1 in #1310
  • feat: per-plant PV forecast series and P_PV_plant columns (#1150 PR 2) by @LesIT1 in #1311
  • fix: single-flight guard and atomic result files for live optimizations (refs #1304) by @MMicieli in #1312
  • test: frozen-number pins for the one-inverter optimizer (#1150) by @LesIT1 in #1313
  • feat: per-inverter optimizer model, refusal kept (#1150 PR 3a) by @LesIT1 in #1314
  • test: add aiohttp test-server fixture and migrate representative HTTP tests by @MMicieli in #1315
  • fix: validate battery_stress_segments and inverter_stress_segments by @LesIT1 in #1317
  • feat: guards for more than one inverter, refusal kept (#1150 PR 3b, part 1) by @LesIT1 in #1318
  • feat: run more than one inverter, with PV clip and hybrid spill (#1150 PR 3b) by @LesIT1 in #1319
  • feat: web UI per-inverter lists follow number_of_inverters (#1150 PR 5) by @LesIT1 in #1320
  • feat: publish per-inverter sensors and the inverter attribute (#1150) by @LesIT1 in #1323
  • test/docs: AC-coupled battery-only inverter curve accounting (#1271) by @MMicieli in #1326
  • docs: cookbook recipe for two hybrid inverters (#1150) by @LesIT1 in #1331
  • fix: do not enforce thermal_config bounds inside the thermal_inertia lag window by @snauwaertc in #1332
  • Document runtime parameters and configurations by @davidusb-geek in #1338
  • test: Stage 2A (#1269) - detect ignored per-load cost overrides by @MMicieli in #1335
  • test: Stage 2B (#1269) - tolerate solver noise in SOC deficit regression by @MMicieli in #1336
  • test: add asymmetric-efficiency battery physics invariants (Stage 2C of #1269) by @MMicieli in #1339
  • fix: use interval-average PV power for Open-Meteo forecasts by @MMicieli in #1340
  • fix: prevent log injection from cached battery-identification values by @MMicieli in #1343
  • docs(cookbook): add custom PV forecast injection recipe by @JustAnotherPU in #1344

New Contributors

Full Changelog: v0.18.8...v0.18.9

Don't miss a new emhass release

NewReleases is sending notifications on new releases.