Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
244ee90
Add myenergi integration design spec and implementation plan
springfall2008 Aug 23, 2026
8989e37
Add myenergi device model and payload normalisation
springfall2008 Aug 23, 2026
ff743e6
Add the myenergi transport abstraction with stubbed controls
springfall2008 Aug 23, 2026
7cae447
Add the direct myenergi transport with ASN resolution
springfall2008 Aug 23, 2026
742457e
Add missing docstring on the mock session's nested _get() helper
springfall2008 Aug 23, 2026
adc6cf9
Fix ASN-resolution error handling and record_api_call reason vocabulary
springfall2008 Aug 23, 2026
8aa4963
Add the cloud myenergi transport for the 3rd party API
springfall2008 Aug 23, 2026
5a10bd3
Fix cloud transport decode-error handling and direct transport's reas…
springfall2008 Aug 23, 2026
14a8da5
Close the matching decode-error gap in the direct myenergi transport
springfall2008 Aug 23, 2026
c51b37b
Add the myenergi component core with polling and entity publishing
springfall2008 Aug 23, 2026
f48962b
Cover the oauth branch's missing-credentials path in the myenergi com…
springfall2008 Aug 23, 2026
61c6e2f
Fix myenergi's OAuth handling and close three test gaps from review
springfall2008 Aug 23, 2026
6b5da13
Register the myenergi component and its apps.yaml schema
springfall2008 Aug 23, 2026
69d25bb
Address review: descriptive myenergi display name, bidirectional arg …
springfall2008 Aug 23, 2026
ef9b4ad
Wire myenergi devices into car_charging_energy and iboost_energy_today
springfall2008 Aug 23, 2026
5b6bcb1
Address review: pin auto-config ordering, guard the Eddi kind, cover …
springfall2008 Aug 23, 2026
a1a22fb
Add myenergi send and cancel boost controls
springfall2008 Aug 23, 2026
332ae73
Add the myenergi command line harness and documentation
springfall2008 Aug 23, 2026
4a4fdb8
Fix myenergi CLI and docs per review: transport name, rounding, OAuth…
springfall2008 Aug 23, 2026
0f2499e
Accept the Zappi "EV ready to charge" plug state when planning car ch…
springfall2008 Aug 23, 2026
7d07062
Fix the myenergi cache expiry, error ordering, boost results and OAut…
springfall2008 Aug 23, 2026
c3886de
Correct the myenergi session-reset limitation and what auto-config co…
springfall2008 Aug 23, 2026
a53b9e1
Merge remote-tracking branch 'origin/main' into feat/myenergi-component
springfall2008 Aug 23, 2026
39aab68
Address Copilot review: OAuth gate, unsupported kinds, new template
springfall2008 Aug 23, 2026
a5c6cad
Restore the shared my_predbat fixture in the debug-history route tests
springfall2008 Aug 23, 2026
5dd20e1
Treat a cloud poll that reads no device as a failed poll
springfall2008 Aug 23, 2026
db03a61
Correct how the small-session limitation is described
springfall2008 Aug 23, 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
11 changes: 11 additions & 0 deletions .cspell/custom-dictionary-workspace.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ argname
armhf
armv
ASHP
asn
asyncio
atfork
atleast
Expand All @@ -53,6 +54,7 @@ batteryb
batusecap
beforeunload
bierner
boostable
brickatius
byok
cadata
Expand Down Expand Up @@ -235,6 +237,7 @@ hanchu
hanchuess
hanres
HAOS
harvi
hasattr
hass
hassapi
Expand Down Expand Up @@ -272,7 +275,9 @@ isort
itemsize
itemtype
ivtime
jdayhour
jedlix
jstatus
jsyaml
kaiming
keepalive
Expand All @@ -291,6 +296,7 @@ kwhb
labelcolor
labelnames
larr
libbi
libc
LIFEPO
linebreak
Expand Down Expand Up @@ -352,6 +358,7 @@ mpxn
mqtt
mtok
mult
myaccount
myenergi
mypy
nanmean
Expand Down Expand Up @@ -441,6 +448,7 @@ pvwatts
pwindow
pyjwt
pylint
pymyenergi
pypi
pyproject
pytest
Expand All @@ -454,6 +462,7 @@ readbacks
recp
redownload
Referer
refetched
refetches
regionid
regname
Expand Down Expand Up @@ -589,6 +598,7 @@ typecode
typecodes
tzfile
tzpath
unasserted
unconfigured
underivable
undiscounted
Expand Down Expand Up @@ -636,4 +646,5 @@ ylabel
YOURSERIAL
yuanzhi
zappi
Zappis
zigbee
28 changes: 28 additions & 0 deletions apps/predbat/components.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
from solcast import SolarAPI
from gecloud import GECloudDirect, GECloudData
from ohme import OhmeAPI
from myenergi import MyEnergiAPI
from octopus import OctopusAPI
from carbon import CarbonAPI
from temperature import TemperatureAPI
Expand Down Expand Up @@ -219,6 +220,33 @@
},
"phase": 1,
},
"myenergi": {
"class": MyEnergiAPI,
"name": "myenergi Zappi/Eddi",
"event_filter": "predbat_myenergi_",
"args": {
"auth_method": {"required": False, "config": "myenergi_auth_method", "default": "direct"},
"hub_serial": {"required": False, "config": "myenergi_hub_serial"},
"api_key": {"required": False, "config": "myenergi_api_key"},
"key": {"required": False, "config": "myenergi_key"},
"token_expires_at": {"required": False, "config": "myenergi_token_expires_at"},
"token_hash": {"required": False, "config": "myenergi_token_hash"},
"automatic": {"required": False, "config": "myenergi_automatic", "default": True},
"enable_controls": {"required": False, "config": "myenergi_enable_controls", "default": True},
"poll_seconds": {"required": False, "config": "myenergi_poll_seconds", "default": 60},
},
# Gate activation on having at least one auth path — api_key is the direct
# transport's local hub credential, key is the cloud transport's access token.
# Without this the component would start for every instance since all
# individual args are optional to allow either auth mode.
# api_key is the direct transport's credential; key (the OAuth access token) and
# token_hash (which the refresh chain exchanges for one) are the cloud transport's.
# token_hash has to be listed too: a refresh-only OAuth setup carries no key, and
# initialize() accepts that, so gating on key alone would never construct it.
"required_or": ["api_key", "key", "token_hash"],
"phase": 1,
"can_restart": True,
},
"fox": {
"class": FoxAPI,
"name": "Fox API",
Expand Down
9 changes: 9 additions & 0 deletions apps/predbat/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -2581,6 +2581,15 @@
"solis_access_token": {"type": "string", "empty": False},
"solis_token_expires_at": {"type": "string", "empty": False},
"solis_token_hash": {"type": "string", "empty": False},
"myenergi_auth_method": {"type": "string", "empty": False},
"myenergi_hub_serial": {"type": "string", "empty": False},
"myenergi_api_key": {"type": "string", "empty": False},
"myenergi_key": {"type": "string", "empty": False},
"myenergi_token_expires_at": {"type": "string", "empty": False},
"myenergi_token_hash": {"type": "string", "empty": False},
"myenergi_automatic": {"type": "boolean"},
"myenergi_enable_controls": {"type": "boolean"},
"myenergi_poll_seconds": {"type": "integer", "zero": False},
"fox_key": {"type": "string", "empty": False},
"fox_automatic": {"type": "boolean"},
"fox_automatic_ignore_pv": {"type": "boolean"},
Expand Down
Loading
Loading