[RFC] Streamlined Device Onboarding: Active/Passive Bus Discovery with a "Pending Devices" Staging & Management View #270
Replies: 39 comments 15 replies
|
So HA does not have a “inbox” for Discovery results like in openHAB ?? |
|
Regarding the identification workflow, I would leave the resources in a pending state as you already proposed. The topic of the buffer sniffer to eventually identify devices not discovered in the first instance is also interesting.
If I may contribute, I would approach the issue with a dedicated side panel, which can then be left active in case of system maintenance or to visually control all MyHOME devices from a single dashboard, without having to search for entities or customize them on the user's home screen.
It depends on how you want to configure it; some CEN and CEN+ scenario switches trigger automations configured directly by Home+Control. However, it is possible that the scenario you want to trigger involves another MyHOME device, so pressing an unassigned button on Home+Control triggers an action in HA.
Yes, I find this correct.
Personally, I would leave the file configuration as the "base" to identify the friendly names of the entities, I would leave the pending queue for new addresses as proposed, but I would provide the ability to modify them in the sidebar. I would divide the interface by OpenWebNet "WHO" identifier, roughly mirroring how MyHomeSuite and the "Project" mobile app behave. |
|
Thanks for the thoughtful feedback and ideas, @TheDarkWizard and @anotherjulien! To keep expectations aligned with our current release schedule: we're going to keep this RFC open for continued community input and design refinement, but we plan to queue the implementation for the v2.1 milestone. Our primary focus right now is reaching a rock-solid v2.0.0 general release (we're currently on In the meantime, for users setting up medium-to-large installations during the v2.0 lifecycle, two pragmatic workflows are fully functional today:
Please feel free to continue sharing ideas, UI preferences (such as the sidebar panel concept vs. Lovelace integration), and edge cases here so we have a well-defined specification ready when we kick off v2.1! |
|
Having mulled over this over night, I think it might be confusing for new users to not find devices immediately. IF there was a unified way HA handled this scenario and the UI was super clear about it, we could leverage this. This could be appropriate for more "technical" devices, like the CEN devices that might clutter the device list while potentially unused, but the basics (lights, covers, thermo, etc...) are probably better off being discovered and auto added as they are now. What's your opinion? |
|
Thanks for raising this point, @anotherjulien — having thought through this further, I think your intuition is completely spot-on. Putting all newly detected devices into a custom staging queue creates two major problems:
How Other Large-Scale Integrations Do It (The Native HA Way)Systems that handle dozens or hundreds of devices/zones don't build custom inboxes. Instead, they strictly follow the Home Assistant Architecture Guidelines:
Proposed Unified DirectionInstead of building a bespoke custom UI or staging queue from scratch, we propose adhering strictly to native Home Assistant architecture:
This approach keeps onboarding instant for new users, provides a clean opt-in path for noisy/scenario devices, leverages HA's built-in bulk editing/area assignment tools, and keeps the integration 100% pure Python without frontend maintenance overhead. What do you all think of this native approach? |
|
Hi to all I would vote for a dedicated MyHOME configuration panel, similar to the approach used by my integration ha-s7plc. (See attached screeshot below) In my opinion, the standard Home Assistant Config Flow / Options Flow is perfect for the initial gateway setup and for relatively simple settings, but MyHOME is becoming complex enough that managing everything through a sequence of dialogs could become limiting. A dedicated panel could provide a much better overview of the complete installation, for example:
The important point for me is that the panel should not introduce a separate configuration system or a second source of truth. I would keep the actual configuration in the native Home Assistant structures (Config Entries / Subentries, entity registry, etc.) and use the panel only as a richer frontend over them, ideally through backend/WebSocket APIs. This is the approach we adopted in ha-s7plc: the normal Config Flow is used to configure the PLC connection, while a dedicated side panel is used to manage the entities and their more advanced configuration. It works particularly well when an integration has many entity types and device-specific options. I think MyHOME is moving in a similar direction: with multiple WHO families, auto-discovery, different gateway types and increasingly advanced entity configuration, a panel would probably scale much better than continuously expanding the Options Flow. It would also leave room in the future for a more installation-oriented view of the MyHOME bus, without changing how the integration stores or manages its configuration internally. So my vote would be: Config Flow for gateway/onboarding + dedicated panel for device/entity management.
|
|
Thank you for bringing this up and sharing the screenshot, @xtimmy86x — this is a really compelling and elegant idea! I looked through the architecture in ha-s7plc, and I am definitely not against good ideas that significantly elevate the user experience. Why This Concept ResonatesYou hit the most critical nail on the head with this point:
Having inspected how You are also completely right that as MyHOME grows across multiple WHO families (lighting, shutters, thermo, energy, CEN/CEN+), squeezing everything into standard HA Options Flow modal popups becomes painful for medium-to-large installations. A dedicated side panel organized by WHO subsystem, with diagnostics and bus monitoring integrated, would feel like a modern, web-native MyHomeSuite right inside Home Assistant. Maintainability & Staying NativeMy main concern with custom frontends has always been the long-term maintenance overhead and breakage risk across monthly Home Assistant core releases (frontend DOM changes, LitElement/webcomponent updates, and mobile companion app rendering). Since you have real-world experience maintaining
Roadmap PerspectiveThis fits naturally into our roadmap: keeping v2.0 focused on rock-solid core stabilization, multi-gateway compatibility, and native entity platforms, while designing a dedicated MyHOME configuration & diagnostic panel along the lines of Really appreciate you sharing this approach — curious to hear your and Julien's thoughts! |
|
So, silly question. |
|
@anotherjulien @GreenGrassBlueOcean Not a silly question at all — I think it is actually an important architectural distinction. I did think about the Z-Wave JS UI model, but in my opinion there is one major difference. Z-Wave JS UI is not just a frontend sitting on top of the Home Assistant integration. Z-Wave has a separate server/driver which actually owns the communication with the Z-Wave network, and Home Assistant connects to that server through WebSocket. So the architecture is essentially:
and a separate UI can naturally manage the same underlying server. With MyHOME today, the integration itself owns the gateway connection and the OpenWebNet runtime. If we created a completely separate application now, we would either have to:
The second option could be a very interesting architecture one day, but it would be a much bigger project and architectural change. For the current integration I would therefore prefer:
The panel would only be the frontend. The integration would still own discovery, gateway connections, entities and configuration. That also keeps installation very simple: install the integration and everything is there. No additional container, add-on or application to configure. Regarding frontend maintenance, my experience with ha-s7plc has been quite positive. The important thing is to avoid depending too much on private Home Assistant frontend internals or manipulating HA's DOM. The panel itself can be a normal custom web component with its own responsive layout and communicate with the integration through stable Home Assistant WebSocket APIs.
The same applies to mobile. In ha-s7plc I use responsive layouts rather than separate mobile/desktop implementations. Home Assistant gives the panel the And I completely agree with the proposed onboarding model: normal devices should still be discovered and created automatically. The panel should not become a mandatory setup wizard. I see it more as an advanced MyHOME cockpit:
And then Julien's dangerous WHO 1001 idea 😅 could eventually take it one step further. If we ever manage to reliably enumerate the actual physical commands and actuators and eventually configure them through WHO 1001, the panel could evolve from an integration configuration UI into something much closer to a modern MyHomeSuite. At that point, discussing a standalone MyHOME server/application architecture like Z-Wave JS would make much more sense. So personally I would take this incrementally: v2.0: stabilize the integration and automatic discovery That keeps the architecture simple today without closing the door to something much more ambitious later. |
|
So @xtimmy86x, I've starting documenting the danger 😉 (cc: @GreenGrassBlueOcean, @fedem95 you guys might be interested as well) |
|
@anotherjulien This is exactly the kind of “danger” I was hoping for 😄 Thank you for recovering your notes and documenting all of this! After reading the wiki, I think there is already enough information to start exploring something useful in the sidepanel, beginning with read-only hardware discovery and inspection. A first experimental version could:
The physical grouping is particularly interesting. The panel currently groups entities by their HA device, but this could let us show an actual physical actuator with its different channels, addresses and associated entities underneath it. The same approach could help explain how command modules are configured and which addresses they target. We could start by defining a small backend/WebSocket contract for discovery progress, hardware inventory and individual device inspection. I can build the panel views around that, while we validate the diagnostic sequences and decoding on real hardware. I would be happy to help test this with my F454. I would keep the first iteration focused on WHO1001 and preserve unknown values explicitly, since some fields and other diagnostic domains still need investigation. Physical programming could follow once the read path and device-specific behaviour are sufficiently understood. This would already make the panel much more useful for understanding and troubleshooting an installation, while keeping normal automatic entity discovery unchanged. It feels like a very concrete first step towards the MyHomeSuite-like experience we were discussing! |
|
Late to this one, but it's close to home: the panel you describe is what I've been running on my fork since this weekend, for one area only (cover calibration and its profiles): a built-in panel with a small Lit bundle, admin-only WebSocket commands with a written contract, in-place refresh when the store changes, drag and drop with a tap alternative on the phone, and no HA internals touched. It's unreleased but on master: docs/panel.md describes the screen, and I've just published the contract it runs on, docs/panel-websocket-api.md: every command, payload, answer and refusal, plus the undo and subscribe semantics. It was a good test of the approach. The contract is what made it manageable: the frontend was written against the document, the backend against the same document, and a parity test keeps the two honest. The costs were where @xtimmy86x said they'd be (theme tokens, the companion app, keyboard access), not in the panel registration. Take whatever is useful for the spec, so a v2.1 panel doesn't start from zero on that section. One thing I'd hold on to from the thread above: management belongs in the panel and the bus card stays a bus monitor. It's tempting to add tools to the card because it's already there, but every tool that lands there now is one the panel has to absorb later. |
|
@Interstellar0verdrive Thanks for sharing this! The documented WebSocket contract and the parity test sound particularly useful, and I’d be happy to look at how we can bring your calibration work into the shared panel. I’m already developing the MyHOME sidepanel here: It already includes gateway selection, devices grouped by WHO, expandable device groups, address information, name/area editing through HA’s native registries, and access to the existing bus monitor. It can also be opened from the integration’s Configure menu, with an optional sidebar shortcut. On the bus card, I would take the idea one step further: my preferred end state is a single MyHOME panel containing all advanced management and diagnostic tools, including the bus monitor, with the standalone custom card eventually retired. For users, that provides one clear place to inspect devices, investigate traffic, calibrate covers and, eventually, explore physical hardware configuration. It also gives us one interface to maintain and document, without requiring users to install a dashboard card to access diagnostics. The monitor currently reuses the existing card inside the panel as an intermediate step. Once the panel provides the full functionality, I would favour a planned deprecation and removal of the standalone card. Internally, these features can remain separate modules with clear API contracts. Your calibration tools could fit naturally into that structure, alongside the monitor and future hardware inspection. That is the direction I’ve been working towards, and I’d like us to coordinate our implementations around this shared panel. What do you think? |
|
Agreed on the end state: one panel, the bus monitor inside it, the standalone card retired once the panel covers it. And agreed on the structure: separate modules behind their own contracts, so the calibration screens can be one module without the panel knowing how the store works. Your "open from the Configure menu, optional sidebar shortcut" is exactly what I did for the calibration panel, so the two should feel like one thing. Practically: my screens run on the store of my fork, which isn't v2's cover model yet, so the honest sequence is contract first, port later. I'll read |
|
@Interstellar0verdrive Thanks, that sounds like a good way forward. We agree on the destination: one MyHOME panel, with the bus monitor inside it and the standalone card retired once its functionality is fully covered. Contract first, port later makes sense, especially given the differences between your calibration store and v2’s cover model. Since my previous comment, the experimental branch has gained reusable cover profiles with separate opening and closing times, assignment/reset actions, and deletion of unused profiles. These extend the existing linear timing model; they don’t yet implement your advanced calibration mechanics. I’ll document the current profile API and prepare a proposed shared contract covering gateway selection, translations, refresh subscriptions, errors and configuration changes. That should give us something concrete to compare with your implementation before extending the calibration UI further. The current API can evolve as we agree on that contract. No rush on your side. I can move the documentation forward in the meantime, and we can review the differences together when you have time. I’m also happy to help validate the resulting integration on my F454. |
|
@Interstellar0verdrive I reviewed your implementation at Your implementation provides several valuable additions:
One important architectural distinction is that profile management already lives in your panel, while physical calibration still runs through the Options Flow. Bringing the complete workflow into the shared panel therefore requires extracting the calibration controller and exposing it through backend APIs. My proposed integration would be to:
There are a few details I would like us to align before implementation:
I think the implementations complement each other well. Agreeing on the profile schema, parameter provenance and calibration session states would give us a concrete starting point for incremental integration. |
|
@xtimmy86x
I'll write the storage schema and the calibration session states as the next thing: profiles with reference travel, per-direction times, slat time, per-direction roll, per-cover overrides, provenance per value, and the session as a state machine with its transitions and refusals. Give me a few days; I'd rather hand you something you can implement against than a sketch. On your video, since you asked for feedback. The shell, the inventory and the WHO grouping are good, and the dialog is clear about what it does. Four things I'd change, all about what the user is doing at that moment rather than about looks:
None of that is about my design surviving: it's the four decisions that changed the most over days of running the flow on real shutters. |
|
@Interstellar0verdrive Thanks for confirming the direction and for taking on the schema and session states. I would like to clarify the UI feedback, because several of the things you describe are already present in the version shown in my video:
Some of your suggestions may therefore be about a different organisation rather than missing functionality. For example, putting management and measurement on separate screens instead of collapsible sections is a navigation choice we can discuss. I also see two potentially distinct additions: grouping all associated covers visibly under each profile, and showing the before/after impact on every affected cover when editing a shared profile. That second preview is different from the calibration results we already show before saving. Could you point to specific moments in the video where the current interaction causes a problem, and clarify which changes you mean? That would help us discuss concrete improvements without overlooking what is already implemented. I’m happy to evolve the interface together. I would just like us to start from an accurate understanding of both implementations and preserve the parts that already work well. |
|
Before anything else: thanks for taking this so seriously, and for the video! I'm genuinely glad we're doing this together rather than in two forks, and between your shell and inventory and what I've worked out on covers, I think the result is going to be something neither of us would have built alone. Everything below is in that spirit. And to be clear about what I bring and what I don't: I'm a UI/UX designer by trade, not a Home Assistant developer, so on architecture and HA internals I'll follow your lead. Where I can be genuinely useful is the interface and the flow, which is why I go into that level of detail on the screens: it's the part I can make excellent. First, let me check we mean the same thing by "profile", because I suspect part of this is a not shared vocabulary. :) You're right that I described some of it as missing when it's a matter of organisation. Concretely, going by the states in your video: Where I was wrong: the primary action is already the one big button, the secondary controls are already quiet, the sections are already collapsible, and the two measured times are already shown for review before anything is saved. The mobile layout I can't judge, it isn't in the video, of course I'll take your word that it adapts, and the thing I'd check there is the measuring screen used one-handed. Where I still see something, by screen:
Three of those apply to my own flow, too:
The live "Measured elapsed time: 2.86 s" during the run is a nice touch, by the way, and something my flow doesn't show. And I think the before/after impact preview is the distinct one: not the two times of this measurement, but "these five covers follow this profile and their values change from these to these" before a shared edit is written, with the same screen carrying the undo afterwards. |
|
@Interstellar0verdrive Thanks for clarifying your feedback. I’m attaching two screenshots to show functionality that may not have been clear in the video: selecting a profile that already exists, and editing an existing profile. Both are already available, although they are separate from the calibration result screen. I’d also like to explain my perspective. I work as a systems integrator, so I deal with different installations, different users and very different ways of using a home automation system. From that experience, I think the calibration functionality you proposed is an excellent addition. My priority, though, is to keep the ordinary user’s task simple: open calibration, follow the necessary steps, review the result and save. In most installations, I would expect this to be an occasional setup operation—potentially done once for the lifetime of the shutter, unless something mechanical changes. That is why I’m less convinced about making drag-and-drop profile management a central part of the experience. I understand its purpose, but in everyday use I suspect it would offer limited benefit to most users and could make the relationship between shutters, profiles and calibration less obvious. Choosing an existing profile from a clear selector may be enough for their needs. I’m not questioning the value of shared profiles, height scaling or accurate calibration. I’m questioning how much of the management interface needs to be prominent for someone who simply wants their shutter to work correctly. Your experience designing and using this on your shutters is valuable, and mine comes from configuring systems for different people. I’d like us to compare those perspectives, hear from the other members too, and decide together what belongs in the final version and what should remain an optional advanced function. |
|
Brands assets — one more item for this panel work While going through the Integration Quality Scale audit on Phase 0 — Gold (independent of everything else)
@xtimmy86x — the MyHOME artwork you already show in the header of your experimental panel (#270 (comment)) looks like exactly what the brands repo wants. Could we reuse that? If you have the source (SVG or a large PNG) I can do the resizing and the PR to The typing side (Platinum) I'll track separately — that's an OWNd release plus burning down the remaining mypy baseline in MyHOME, and doesn't block Gold. |
|
@xtimmy86x Where I'd push back is on what management is for. Assigning is rare, I agree. The frequent question isn't "assign this cover", it's "why does this one stop badly?", six months later, and answering it means seeing which profile a cover follows, what values are in force and where they came from (measured, inherited, from the file). In a per-cover dialog that answer costs one dialog per cover. In a list grouped by profile it's one screen, and the same screen is what makes editing a shared profile safe, because it tells you who is affected before you write. That's also why I'd change one thing on the calibration result screen: thanks for the two screenshots, choosing and editing an existing profile are clearly there, and you're right that assigning an existing profile belongs at the start, not at the end. What I mean is the exit from a measurement, which today is only "save as a new profile and assign" (right?). The two that are missing are "update the profile this cover already follows", which is where the before/after preview earns its keep because it touches the other followers, and "keep these values for this cover only", which is the answer to "one shutter drifts from its group" and the thing that stops a plant accumulating one profile per cover. And a suggestion on how we decide the rest, rather than trading preferences: pick the tasks, then judge the screens against them. Mine would be: calibrate a cover; make every similar cover use that result; understand why one cover behaves differently; correct that one cover; change a profile and know what it affects. If you'd add or remove tasks from that list, that's the useful disagreement, and it's the kind others here can weigh in on too. One thing still open from my previous message, because a lot depends on it: does a profile on your side carry a reference travel? If it doesn't, assigning the same profile to a shorter cover gives it the wrong times, and "pick a profile from the selector" only works for identical covers. That's the piece that makes sharing real, and it's in the schema I'm writing. Incidentally, the strongest case for the group view isn't my twelve shutters, it's your job: commissioning a building with forty covers, where two or three profiles cover the lot and you need to see at a glance which ones aren't following any. |
|
@Interstellar0verdrive Thanks, this makes the distinction much clearer. I’m happy with the selector as the primary path and drag-and-drop as an optional desktop shortcut. To answer your technical question: our current profiles store separate opening and closing times, but no reference travel yet. They can already be shared between covers with compatible timings; your height-based scaling would extend that to compatible shutters with different travel lengths. That is part of the model we agreed to include in the shared schema. You’re also right about the exit from calibration: currently it creates and assigns a new profile. Updating the assigned profile—with an impact preview—or keeping the measured values as an override for that cover are useful additions. I can see the value of a profile-grouped overview for commissioning and troubleshooting. My preference is to make it available without requiring users to go through it for a straightforward calibration. Someone configuring one shutter should still have a short, direct path. Your task list is a good basis for comparing the interfaces. I would add one acceptance criterion across those tasks: the simple case should stay simple, while the more advanced management remains accessible when needed. Let’s use those tasks alongside your proposed schema and session states, and invite the others to weigh in. That should help us agree on the final flow based on actual use cases. |
|
Here it is, as promised: docs/calibration-contract-proposal.md. A proposal, not a description of my code: the names are up for discussion, and anything a backend can't support should be absent rather than present and empty. What's in it:
On the numbers: they're what twelve shutters of two kinds in one house showed, so treat them as evidence rather than a promise. That's also why the thorough level ends on a check at a position nothing was fitted to: each installation gets its own figure instead of trusting mine. One thing I got wrong in my own implementation and wrote down rather than hid: the check that path B offers compares the gap against a fixed threshold, but what a gap means depends on how the profile itself was measured. A profile measured only at the basic level is worth a few centimetres to start with, so a 3 cm gap on a cover following it says nothing about that cover. A profile should carry its own accuracy, and that threshold should be read against it. @xtimmy86x, the part I'd most like you to challenge is the storage: if anything in it doesn't fit your revision and atomicity model, better to bend the schema now than to adapt around it later. @anotherjulien @fedem95 @GreenGrassBlueOcean, comments welcome, especially from hardware I don't have. |
|
@Interstellar0verdrive Thanks for writing this up. I compared your proposal at The storage model fits our revision and atomicity approach. We already validate writes under a per-gateway lock, reject stale revisions, and persist the complete change before publishing it to the runtime. We can extend that to cover records and individual overrides. There are a few points I would settle before implementing the migration:
My proposed order would be: agree on the schema and migration rules, introduce one backend resolver for effective values and their origins, then add individual overrides and shared-edit previews. Height scaling and nonlinear calibration can follow with their own physical acceptance checks. That keeps the straightforward flow intact—calibrate, review, save—while giving the advanced interface a consistent backend to build on. |
|
@xtimmy86x
Your order works for me: schema and migration rules, one backend resolver for effective values and origins, then overrides and shared-edit previews, then scaling and the nonlinear part with their physical checks. |
|
@Interstellar0verdrive Thanks for incorporating the feedback. The migration approach, per-key provenance and assigning the first measured cover without automatically creating overrides address the main storage concerns I found. Two details remain worth making explicit before implementation:
Keeping Close as “request Stop and end the measurement” in our UI works for me, while leaving the API operations distinct. A detached run would need to retain backend ownership and supervision until it terminates. The distinction between a press that causes a stop and one that confirms an endpoint also makes sense. We should retain those as separate measurement types and avoid presenting command delivery as proof of physical arrest. With those points clarified, I think we have a good basis for the first implementation step: the shared schema, migration rules and one resolver returning effective values and their origins, while preserving existing behavior. |
|
@xtimmy86x Both clarifications are right and are in the document now ( Reference travel. Your timing-only paths produce a profile that is explicitly unscaled, and that's a legitimate result rather than a missing one: it's the short calibration, and it stays valid for the cover it was measured on and for any cover the user knowingly gives it to. The invariant now reads "a measurement that measures the travel records it", so no path is asked to invent a number it never collected, and scaling requires both halves. Ownership. You're right that I conflated two things. Client ownership ends when the session ends or the lease expires; the gateway's reservation is separate and outlives it, because writing a stop frame is not proof that a motor stopped, and discarding provisional values doesn't mean the shutter came to rest. So the gateway stays reserved until the backend's completion rules are satisfied — the actuator reports a stop, or a guard period at least as long as the movement still owed has elapsed, falling back to the full travel time when nothing better is known — and a detached run keeps its supervision: somebody has to notice that it ended, or that it didn't. Keeping Close as "request a stop and end the measurement" in your UI is fine by me as long as the three API operations stay distinct, and yes: the two press types stay separate measurement kinds, and command delivery is never presented as physical arrest. Agreed on the first implementation step, and it's the right half to start from: shared schema, migration rules, one resolver returning effective values and their origins, existing behaviour preserved. That's backend and it's yours — the revision and atomicity machinery is already there. On my side, the natural next piece after the contract is the screen flow for the covers section: which states become which screens, what each one says, and the two entry points we settled (calibrate straight from a cover, the profile-grouped view when there's a fleet to look after). That way you have something to build against when the backend is ready. Build whatever quick UI you need to exercise the resolver in the meantime — I'll work from it rather than around it. |
|
@Interstellar0verdrive Agreed, the latest clarifications give us a solid basis to start. I’ll open a draft PR in the main repository, based on my current panel branch, so we can share the work and review the changes as they develop. It will remain experimental while we work towards the agreed scope. I’ll start with the shared schema, migration rules and backend resolver, preserving existing behavior and exposing effective values with their origins. For the screen flow, the covers section should remain consistent with the other WHO sections: shared navigation, device grouping, collapsible sections and familiar interaction patterns. Calibration controls and the optional profile-grouped overview should fit into that structure without fundamentally reorganising it. That gives us a shared place to coordinate the backend and interface work, while keeping straightforward calibration short and direct. |
|
@xtimmy86x Sounds right, and a draft PR in the main repo is the best place for it. On consistency: agreed, and I'd rather work inside your structure than bend it. The only thing worth thinking about together is that covers carry one object the other sections don't have — the profile, which belongs to several devices at once — so there's a relationship to show that doesn't fit inside a single device card. I'd like to find the way to fold that in gracefully, using the same shell, the same components and the same patterns, rather than bolting a different-looking screen onto the side. And it stays a second view, never something you pass through to calibrate one shutter. I'll design inside your patterns and raise anything that seems to need a different shape, with the task it serves, so we can judge it together. Ping me when the resolver is far enough along that the read model is real, and I'll work the screens against it. |



Uh oh!
There was an error while loading. Please reload this page.
Background & Context
This RFC is spun off from the discussion in Issue #229 (comment #5619446957) between @xtimmy86x, @anotherjulien, and @GreenGrassBlueOcean.
The goal is to design an optimal, Home Assistant-compliant onboarding experience for MyHOME SCS installations—especially medium-to-large homes with 50 to 100+ physical bus addresses—without overwhelming users with generic entity clutter.
The Problem Statement
When setting up a fresh MyHOME integration on an existing installation:
light.light_1,cover.cover_31, etc.), leaving the user with the daunting chore of clicking through every single entity to identify, rename, and assign it to an area.WHO=1address could be a ceiling light, an extractor fan, or a switched socket (which should logically be aswitchrather than alight).WHO=15and CEN+WHO=25) never answer status polling. They only emit telegrams when physically pressed, so a static startup scan will miss them entirely.Constraints & Architectural Boundaries
During our initial investigation, two major boundaries were highlighted:
1. Home Assistant Architectural Standards (ADR-0010 & Quality Scale)
2. OpenWebNet Protocol Realities
WHO=1for lighting,WHO=2for shutters,WHO=4for HVAC, etc.).Proposed Solution: The "Staged Pending Devices" Workflow
To resolve this, @xtimmy86x and @anotherjulien proposed moving from immediate auto-creation to a staged onboarding pipeline:
1. Dual Discovery Pipeline
myhome.scan_busbutton/service), a rate-limited background task polls known address ranges across common subsystems without blocking the user.2. Staging Queue ("Pending Devices")
pending_devices) rather than immediately creating HA entities.WHO)WHERE)3. Interactive Management & Review View
myhome-bus-cardor a custom panel) displays all pending devices.WHO=1device is a Light or a Switch.4. Clean Registry Updates
config/entity_registry/updateandconfig/device_registry/update) to apply the chosen Name and Area directly to the core registries.Open Questions for Community Feedback
myhome-bus-cardLovelace card?myhome-device-manager)?event.*entity, HA Device Automation Triggers, or both?myhome.yaml:myhome.yamlfor pre-configured wiring schedules? (e.g. YAML devices pre-populate as already approved, leaving only newly detected unmapped addresses in the pending queue).We would love to hear your thoughts, use cases, and feedback on this design!
Cc @xtimmy86x @anotherjulien @TheDarkWizard
All reactions