fix(myuplink): file the heat pump as a heat pump - #63
Merged
Conversation
myuplink declared ders: [], so the one MyUplink cloud heat-pump driver was absent from the Heat pump filter and from every other device type on the catalog page -- unreachable by the thing an owner actually searches for. It is now ders: [heatpump]. This revisits a deliberate choice. srcfl#27 widened the DER vocabulary and set myuplink to none, reading ders as the emit stream a driver produces rather than the device it covers. srcfl#53 settled it the other way for nibe_local, citing heishamon. All three report a pump through host.emit_metric and never call host.emit; myuplink and heishamon emit the same hp_* metric names. Two of the three already declared heatpump, so myuplink was the one left behind rather than the one holding a line. 1.1.0 -> 1.1.1 because ders is copied into the signed artifact's capabilities, so this changes the published bytes with no Lua moved -- the same reason nibe_local took 1.1.1. Unlike srcfl#53 the channel never got the chance to refuse it: the preflight check answers on the pull request, and putting the version back to 1.1.0 there reproduces the refusal. spec/manifest-v2.md documented four DER types where validate_manifest.py accepts seven. ev, heatpump and vehicle have been valid since srcfl#27 and are used by seven manifests, but the field table a driver author reads never listed them -- and the missing vocabulary is exactly what myuplink needed. The table is now complete and says what the field means for a metrics-only driver, which is the ambiguity that produced three different answers for three drivers doing the same thing. Signed-off-by: HuggeK <48095810+HuggeK@users.noreply.github.com> Co-authored-by: HuggeK <48095810+HuggeK@users.noreply.github.com>
HuggeK
marked this pull request as ready for review
July 31, 2026 10:26
srcfl#62 landed the catalog page's vendor-document section on main. Both branches wrote to CHANGELOG.md and git merged them without conflict; this also closes a stray blank line inside the Fixed list. The two changes meet here for the first time, so both were checked together: myuplink's card now carries the Heat pump badge and its vendor document link, the generators reproduce every catalog file unchanged, and the channel still reports myuplink as the one driver whose bytes moved. Signed-off-by: HuggeK <48095810+HuggeK@users.noreply.github.com> Co-authored-by: HuggeK <48095810+HuggeK@users.noreply.github.com>
HuggeK
added a commit
to HuggeK/device-drivers
that referenced
this pull request
Jul 31, 2026
This branch was cut before srcfl#48, srcfl#57, srcfl#62 and srcfl#63 landed. Five files conflicted; all five were additions on both sides and keep both: CHANGELOG.md both wrote under the same ### Added heading spec/manifest-v2.md Connectivity/Setup beside main's DER Types, and the numbered validation list renumbered so the upstream_docs rule survives manifests/myuplink.yaml connectivity/setup from here, ders [heatpump] and 1.1.1 from srcfl#63 -- the empty ders this branch was written against no longer exists tools/generate_site.py Reach labels beside the vendor-document labels index.yaml regenerated rather than hand-merged Also records V2.4 in the migration ledger. The branch adds two manifest fields and updated the field table and validation rules, but never recorded the version the way V2.3 did for upstream_docs. The claim that neither field reaches the signed artifact is checked rather than trusted: with all 80 manifests carrying connectivity, stripping both fields back out moves no artifact digest, so no driver needs a version bump. Signed-off-by: HuggeK <48095810+HuggeK@users.noreply.github.com> Co-authored-by: HuggeK <48095810+HuggeK@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
myuplinkdeclaredders: [], so the one MyUplink cloud heat-pump driver wasfiled under no device type at all — absent from the Heat pump filter and
from every other one on the catalog page.
An owner searches for the device they own, and this driver could not be found
that way.
host.emitcallsdersbeforedersafterheishamonemit_metric[heatpump][heatpump]nibe_localemit_metric[heatpump](#53)[heatpump]myuplinkemit_metric[][heatpump]All three heat pumps now appear under Heat pump, and no driver in the
catalog is filed under nothing.
Important
This revisits a deliberate decision, so it deserves an explicit look rather
than a rubber stamp.
Why reversing #27's choice is the consistent move, not a new one
When #27 widened the DER vocabulary it set
myuplinkto none, on the readingthat
dersnames the emit stream a driver produces rather than the device itcovers — the driver reports through
host.emit_metricand never callshost.emit("heatpump", …).#53 then settled the same question the other way for
nibe_local, citingheishamonas the precedent. The three drivers are the same case: all report apump through
emit_metriconly, none callshost.emit, andmyuplinkandheishamonemit the samehp_*metric names. Two of the three already declaredheatpump, somyuplinkwas the one left behind rather than the one holding aline.
If the opposite reading is preferred, the consistent form of it would be to
strip
heatpumpfromheishamonandnibe_localtoo — which would remove theHeat pump filter from the page entirely.
Why the version has to move — and how we know before merging
dersis copied into the signed artifact'scapabilities, so this edit changesthe published bytes even though no Lua moved. That is exactly what took the
release down in #53.
This time the channel never got the chance to refuse it. The
signed channel accepts this treecheck (#57) answers on the pull request, andrunning it locally against the published manifest gives:
A patch: no register, parameter or emitted metric changed, only the device
type the catalog files it under — the same call #53/#55 made for
nibe_local.The
DRIVERtable is left alone, keeping the driver byte-identical to its FTWbaseline the way #29 established.
The spec gap that allowed this
spec/manifest-v2.mddocumented four DER types —pv,battery,meter,v2x_charger— wheretools/validate_manifest.pyaccepts seven.ev,heatpumpandvehiclehave been valid since #27 and are used by sevenmanifests, but the field table a driver author reads never listed them. The
missing vocabulary is precisely what
myuplinkneeded.The table is now complete, and says what the field means for a metrics-only
driver — the ambiguity that produced three different answers for three drivers
doing the same thing. It also records that
dersreaches the signed artifact,so changing it costs a version.
Catalogs regenerated;
sha256and the Lua source are untouched.🤖 Generated with Claude Code