Skip to Content

Installed, running, stopped — and none of it says the bus is up

four states, four evidence layers
KNXD Guide · Part 2

Installed, running, stopped — and none of it says the bus is up

The KNXD Add-on has a lifecycle you already recognize from every other Home Assistant add-on: add a repository, install, start, restart, stop, remove. What is different here is that the thing at the other end of the daemon moves lights, blinds and HVAC in a building somebody is standing in. So this part treats each of those states as an evidence layer rather than as progress, walks the gates that have to close before any of them may be pressed, and then does two paper exercises — classifying serial-interface candidates without writing down anything that identifies a site, and picking a driver family from pinned documentation instead of from a product name.

6 conditions
Proven by the administrator present before the repository is even added
0 installs
No approved artifact digest exists here, so every lifecycle step stays read-only
9 names
Accepted by the Add-on 0.6.1 schema. Three of them are documented by name upstream
Four states, four kinds of evidence

A running daemon is a statement about a process, not about a bus

The Add-on details page in Home Assistant can tell you a small number of things, and it is worth being precise about which ones. It can tell you the Add-on is installed. It can tell you the process is running or stopped. It can tell you the instance has been removed. And, in a future approved exercise, a briefly viewed log can tell you that a de-identified category of message appeared.

That is the whole list. None of it establishes a result for the KNX interface, the bus, ETS, the Home Assistant KNX integration, group operations, or physical control. A running Add-on does not prove the bus is connected.

In plain terms

Think of the daemon as a service counter with a translator behind it. Installing is moving the counter into the building. Starting it is the translator arriving for the shift. Restarting is a shift change, stopping is the translator going home, removing is the counter being carted out again. Every one of those is a fact about the counter. None of them is a fact about whether the shutters between that counter and the street have been raised, or whether anybody outside has walked up to it yet.

flowchart LR
  subgraph OUT["Layers this part cannot reach"]
    direction LR
    O1["A driver is loaded"] --> O2["An interface answers"] --> O3["The KNX bus carries telegrams"] --> O4["A luminaire actually switches"]
  end
  subgraph IN["What the Add-on page can show"]
    direction LR
    I1["installed"] --> I2["running"] --> I3["stopped"] --> I4["removed"]
  end
Two lanes, no arrow between themThe upper lane is everything the Add-on details page can report. The lower lane is everything an installer actually wants to know. No edge joins the lanes, and that missing edge is the point of the whole chapter — each lane is its own class of evidence.

Cross-layer inference is the mistake this part exists to prevent. Program state, driver, interface, listener and bus are separate evidence layers, and reading one of them upward into another is how an installer ends up telling a client the system is live when nothing has touched the bus at all.

The claim“The Add-on is running, so the interface must be recognized.” — process state, read up into driver state. It does not carry.
The claim“The store shows 0.6.1, so I know what is installed.” — a version string, read as build evidence. Section 04 is about why it is not.
The claim“I removed the Add-on, so Home Assistant is back to how it was.” — an Add-on-scoped change, read as a whole-system restore.
What this part changes on a system: nothing. This site currently has no approved artifact or image digest, so no repository is added and the Add-on is not installed, started or stopped. Adding a repository, installing, starting, restarting, stopping, removing and restoring are all environment changes, and every one of them sits behind the gates described below. The correct outcome of Chapter 4 as things stand is “stopped before the first change, because artifact provenance is incomplete.”
The prohibitions from Part 1 still hold, without exception. They do not stand alone either: before any gate in this part is entered, all eight preflight checks from Part 1 must already be satisfied, and the six isolation conditions, the approval records and the artifact provenance must have been verified by authorized managers. A gate opened without that set behind it is not a gate. Do not connect to a KNX interface or bus. Do not transmit a KNX telegram. No group reads, no group writes, no ETS programming or downloads, no physical control. Do not copy, collect, share or publish real hosts, IP addresses, KNX addresses, USB serial numbers, credentials, tokens or device paths.
And stop whenever you cannot describe the impact of the change or how to revert it. That is the second stop condition on this chapter’s task card, and it stands level with the prohibitions above rather than below them. It binds every one of the seven lifecycle actions in section 05: before a control is pressed, you must be able to say what that action changes and what the route back from it is. Being unable to describe either one is not a reason to press it carefully and watch what happens — it is a stop, before the change.
Six conditions before anything is added

The isolated-test gate, checked one item at a time

Before the repository is added and before the Add-on is installed, the administrator present verifies each of six conditions. Only a non-production Home Assistant test instance is eligible to continue. These are checked individually, not waved through as a group.

  • A non-production test instance. Not a system providing service in a home, an office or a customer site. If it is doing a job for somebody right now, it is out of scope.
  • No device paths mapped. The system has no KNX, USB or other device paths mapped into it.
  • Interface and bus disconnected. The physical interface and the bus stay disconnected, and there is no alternative connection by which the test program could reach a field device.
  • Bounded network scope. Any services that may be enabled stay inside the bounded network test scope the administrator approved, and cannot be reached inadvertently from a general local network or from the public internet.
  • Backups and roles reviewed first. Pre-installation Home Assistant backups, a minimal recovery method, and the roles responsible for stopping, removing or restoring have all been reviewed before anything begins.
  • An administrator present throughout. Someone with Add-on management rights stays present for the whole process and can stop immediately if anything behaves unexpectedly.

If any one of those cannot be proven, stop before adding the repository and before installing. A Home Assistant instance in production use cannot install Add-ons that have not passed this gate — there is no reduced version of it for a system that is only mostly idle.

Unknown counts as failed. The six conditions have three possible answers, not two: conforming, non-conforming, and unknown. Unknown is not a reason to look harder at the live system; it is a reason to stop and get the evidence through the controlled record. Probing the running environment to resolve an unknown is itself a change.
On finding the controls at all. Home Assistant's add-on store, repository management and backup interface change between versions. Use the official Home Assistant add-on documentation to identify the controls and the process for the version in front of you. If a name or a location differs from what you expected, go back to the official documentation. Do not guess which control to use, and do not let this guide invent a button for you — it deliberately does not name them.

Everything from here on is performed manually, step by step, by the administrator present. No shells, no APIs, no scripts, no automation. That constraint is not fussiness about tooling; it is what makes each step individually stoppable.

The written approval record

Eight fields, and the ones that must stay out of them

A privacy-safe change record is established before operation, not written up afterwards. It splits in two: only identifiers with no environmental clues go into public or educational records, while the private approval, the precise operating scope and the six pieces of isolation evidence stay in access-controlled records. If one of the eight fields is missing, the work does not continue.

FieldWhat goes in it
Change / approval record ID An organization-issued privacy-safe ID carrying no name, host, address or time clue. This guide deliberately publishes no sample value, because a sample value can be reused as though it were a real record
Controlled record reference Only a reference that authorized personnel can retrieve. It ties to the private approval, the precise operating scope and the six items of isolation evidence — with no name, no system path and no link to a public page
Approver role The role only, never a person's name. “Home Assistant administrator” is the shape of it. Evidence of the private approval stays in the controlled record
Approved actions and scope Item by item, whether this approval covers adding a repository, installing, starting once, restarting once, stopping, removing, or backup and restore. The precise scope does not include the KNX interface, the bus, telegrams, ETS or physical equipment
Isolation evidence reference The controlled record behind the six checks above. It discloses only the conforming / non-conforming / unknown classification, never the environmental values behind them
Approval date and time Kept in the controlled record. The public guide shows only that the status is recorded, so that a timestamp cannot cascade into identifying live-environment activity
Stop conditions The stop conditions binding for this particular action. Isolation fails, a status is unknown, proofs are inconsistent, or behavior is unexpected — any of those means stop immediately
Privacy boundaries The explicit list of what is never recorded, restated in the record itself so that the person filling it in has it in front of them

That last field is worth spelling out, because it is the one people fill in from memory and get wrong. None of the following belongs in the record:

host name
host ID
IP address
KNX address
USB serial number
device path
account
password
token
certificate
Any other secret joins that list. The ten above are the named ones; the rule is the category, not the enumeration. If a value would let a reader work out which building, which host or which account this was, it stays in the controlled record.
Source lock is not build proof

A pinned commit and a store version answer different questions

This series is built on a source lock. It pins da-anda/hass-io-addons at commit 60d4a702e2011e75c90a0f1012dfbd916eb24ce0, which declares Add-on version 0.6.1. That is a real and useful thing to have, and it proves exactly one thing: the content of the source at that commit.

It does not prove that the image Home Assistant would fetch and install was built from that commit. The 0.6.1 the store displays is mutable text on a page. It is not build evidence, and it cannot be promoted into build evidence by being read carefully.

In plain terms

You have a recipe in a book, and the page number is written down so anybody can turn to the same page. Then a sealed box arrives at the door with the name of the dish printed on the label. The recipe is not in question. What nobody has checked is whether what is inside the box came out of the kitchen that recipe belongs to. The label on the box is the store version. The seal you have not yet verified is the artifact digest.

Three conditions turn a mutable display into immutable build evidence, and all three have to hold at once.

An approved digest

The controlled record holds an artifact or image digest approved by the administrator, and the algorithm has been checked against the full digest — not a truncated prefix that happens to match.

Attestation back to the source

There is verifiable source-to-build attestation, and it ties that digest to the pinned commit and to the build process. The digest identifies the actual build bytes; the attestation is what connects those bytes back to the pinned source.

Verifiable at fetch time

The operator can verify that the artifact Home Assistant will actually retrieve is the approved digest. Not the name. Not the version text. The digest of the thing being pulled.

Currently blocked, and stated as such. This site has no approved artifact or image digest, and no source-to-build attestation available for this chapter. The walkthroughs for adding the repository, installing, starting, restarting, stopping, removing and restoring are therefore read-only. They are not executable until the required evidence and approvals are complete. The honest record to keep today is a blocked one.

Put the three gates in order and the decision has a fixed shape. It is not a scoring exercise where a strong pass on one gate compensates for a gap in another.

flowchart TD
  A["A lifecycle action is proposed:
add repository, install, start,
restart, stop, remove, restore"] --> B{"All six isolation
conditions proven?"} B -->|"no, or unknown"| S["Stop before the change.
Record it as blocked"] B -->|"yes"| C{"Privacy-safe approval
record complete?"} C -->|"a field is missing"| S C -->|"yes"| D{"Artifact digest and
source-to-build attestation
approved and verifiable?"} D -->|"no. This site has neither"| S D -->|"yes"| E{"Administrator present
for the whole action?"} E -->|"no"| S E -->|"yes"| F["One approved action,
by hand, confirmed step by step"]
Four questions, one exit each wayFour labeled refusals — including the one that applies to this site today, at the artifact-digest question — all arrive at the same Stop box on the left. Only a clean pass through all four reaches the single action box beside it on the right.
Where the pinned files actually help. The pinned initialization and service scripts for Add-on 0.6.1 describe source-level initialization behavior and the pattern by which the daemon is invoked. That is their entire remit. They say nothing about the current store artifact, nothing about where a control sits on a Home Assistant screen, nothing about local process state, and nothing about network function. Reading them is worthwhile. Reading conclusions out of them is not.
Seven actions, all read-only

What each lifecycle step would look like, and where it stops

What follows describes interface landmarks, the observable state you would expect, and the point at which you stop — deliberately written to survive version differences in the Home Assistant interface. An administrator may perform these manually, using the then-current Home Assistant documentation, and only once the controlled records satisfy every gate above. Seven actions, in this order.

Look again before every action, not once at the start. All six isolation checks still pass; the privacy-safe approval record is still complete; the artifact digest and source-to-build attestation are approved and verifiable through the controlled procedure; the administrator is still present; and you can still describe what this particular action changes and how it would be reverted. If any item does not pass, stop before the action — including in the middle of a sequence that was fine an hour ago.
  1. 1

    Add the repository

    With the approval record and the artifact digest evidence both valid, find the Add-on management landmark from the Home Assistant configuration area, then follow the official documentation into repository management. Once added, accept only the list of approved repository identities. Stop if the items differ from what was approved, if the source is unrecognizable, or if the interface makes you guess. This site currently lacks an approved digest, so do not execute it.

  2. 2

    Install, manually, into a clean instance

    With both proofs still valid, find the KNXD details page for the approved source in the add-on store. After installation the page should let you distinguish the installed state from the lifecycle control area. Do not read the store version as a statement about which commit you got. If it starts automatically, or if it asks for real KNX values, stop immediately. This site currently lacks an approved digest, so do not execute it.

  3. 3

    Start, once

    While both proofs remain valid, the administrator present may use the start control on the details page once. The expected observation is narrow: the Add-on process moves from a stopped state to a running state, in whatever wording that version uses. That is the entire observation, and it does not prove the bus is operational. This site currently lacks an approved digest, so do not perform this step.

  4. 4

    Restart, once

    Use the restart control once, and only while both proofs remain valid and you can explain the previous state. Expect a brief transition and a return to the running state. If the state is unclear afterwards, stop rather than retry — a second restart to see whether it looks better the second time is a change made without an explanation. This site currently lacks an approved digest, so do not perform this step.

  5. 5

    Stop

    Use the stop control when the controlled approval scope includes stopping and the preceding evidence is still valid. The expected state is no longer running, but stopped. Do not repeat the operation because the screen has not changed — stay isolated and fall back to the stop-and-restore guidance instead. No operation has been performed on this site, so there is nothing here to stop.

  6. 6

    Remove

    Only when the approval scope includes removal and the Add-on has already been stopped, identify the removal or uninstall action from the details page. Expect the installed state and the lifecycle controls for that instance to disappear, or the page to return to an installable state. That does not prove Home Assistant as a whole has been restored. Nothing has been installed through this site, so there is nothing here to remove.

  7. 7

    Restore

    Only when backup coverage is fully consistent with the controlled approval, the administrator selects the pre-verified recovery point from the Home Assistant backup management landmark, reviews the scope of impact first, and then confirms. Expect to return only to the state that backup covers. Recheck the Add-ons and any other affected items afterwards. This site currently has no lifecycle changes that need restoring.

Stop, remove, restore: take the smallest response that fits

When something does need undoing, the instinct to reach for the backup first is the expensive one. Narrow the scope of the change before you choose the response.

flowchart TD
  A["Something has to be undone"] --> B{"Did the change involve
only the Add-on?"} B -->|"yes"| C["Stop the Add-on"] C --> D["Remove the Add-on"] D --> E["Confirm only: process not running,
instance gone. Not the same as
Home Assistant restored"] B -->|"no, other changes happened"| F{"Does a pre-approved backup
cover exactly that scope?"} F -->|"no"| G["Stay isolated and stop.
Do not widen the restore"] F -->|"yes"| H["Administrator reviews backup time,
content and what else it covers,
then confirms by hand"] H --> I["Recheck afterwards, by hand:
Home Assistant in range, Add-on in the
expected state, no unintended effects"]
Three ways this ends, and only one of them is a backupThe left-hand column is the Add-on-only response: stop, then remove, then a deliberately modest confirmation. The wider restore lives on the right and carries its own refusal in the middle — a backup whose scope does not match is not the smaller of two evils, it is a second change.

Three things about the right-hand route are worth stating on their own. The administrator checks the backup time, the content, and what other changes that backup may quietly cover, before confirming. The Home Assistant official backup and restore process is followed as documented for that version. And after restoring, it is the administrator who confirms Home Assistant is back within the expected range, that the KNXD Add-on is in the expected stopped or removed state, and that there are no unintended effects. If any result is unclear, stay isolated and stop rather than continuing.

The three failures you are most likely to hit here

What you are seeingWhat to do about it
Digest or attestation missing Remain blocked. Do not add another repository, and do not install a similar version from somewhere else in the hope that it is close enough
Process status unknown Record the de-identified error category and stop. Do not fill in a bus value, do not change the driver, and do not connect the interface to see what happens
The log contains environmental information Stop sharing it and delete the copy. If a secret has already been exposed, have the administrator revoke or rotate it
If a log is ever viewed, it is viewed briefly and de-identified before it travels. Keep only the time range, the component and the error category. Remove the host, the IP address, the KNX address, the account, the token, the session, the certificate, the device name, the path and the serial number. Do not publish the complete log. If you are filing an issue upstream, submit only the error categories needed to reproduce it, and confirm before sending that you have excluded complete logs, backups, settings, screenshots, controlled records and secrets.

What a finished pass through this section looks like

  • You can state what a pinned commit proves. Source content, and nothing further. A store version does not stand in for an artifact digest with source-to-build attestation.
  • You checked the six isolation conditions and the complete approval record before adding a repository or installing. The digest is missing, so no change was made.
  • You can describe the observable scope of installed, running, stopped, removed and restored separately, without reading one of them into another.
  • You did not connect the interface or the bus, did not send telegrams, did not perform group operations, did not perform ETS programming or downloads, and did not control physical equipment.

Next step from here: keep every KNX interface, device mapping and bus disconnected. When you need to interpret process status, interpret it as process status. Without artifact provenance, the only record you keep is the blocked one.

Candidate A and Candidate B

Classifying interface candidates without writing down a single device path

This is a paper exercise, and it takes about fifteen minutes. You are producing one thing: a candidate-classification table with no identifying information in it. You are not listing the devices a computer can see, and you are not identifying suitable hardware. Filling the sheet in completely still establishes nothing about hardware compatibility.

There is no live enumeration step in this chapter and none is provided. Do not prepare terminal commands, device lists or screenshots. Do not view real device paths and do not copy serial numbers. If existing material already contains any of that, stop transferring it and handle it under the safe log-sharing rules from the previous section.

In plain terms

A cloakroom hands you two tickets, numbered 1 and 2. The ticket does the one job it needs to do: it tells you these are two different items rather than the same item written down twice. It does not tell you what the coats are made of, whose they are, or which hook they hang on — and the cloakroom is designed that way on purpose, because a ticket that told you all of that would be a security problem the moment somebody dropped it.

The sheet has five columns and starts empty. Create the fields; do not fill in any environment values.

ColumnWhat it holds
Candidate codename A meaningless label — Candidate A, Candidate B. Never derived from a path, a serial number, a model or a location
Data category One of three: a documented fact, an item pending manual review, or information that must not be disclosed
Field role Whether this data might be an interface input. The role, not the value
Current conclusion Always starts at hardware suitability not proven, and stays there for the length of this exercise
Reason for stopping An unapproved record, data that might identify an environment, or a source-version mismatch

Six steps, all of them on offline paper. You do not need to touch the execution environment for any of them.

  1. 1

    Write the shared conclusion at the top first

    Put it in the header, before any rows exist: this list is for candidate classification only; hardware compatibility, driver operation and bus status have not been confirmed. Writing it first means every row inherits it, rather than each row having to earn a caveat later.

  2. 2

    Create neutral codenames

    When you need to distinguish between de-identified records you already hold, label them Candidate A and Candidate B in order. Do not generate a code from a path, a serial number, a model or a location — a codename that encodes any of those is still the thing it encodes.

  3. 3

    Classify each record by role

    Each item goes into one of three buckets: documented fact, pending manual review, or must not be disclosed. If there is not enough content to place it, mark it unknown and leave it there.

  4. 4

    Write down what is not proven

    For every candidate, mark hardware identity, driver family, usability and KNX bus status as unconfirmed. Four marks, on every row, every time.

  5. 5

    Apply the stop condition

    If classifying a record would require looking at an actual path, a serial number, a host or a live device list, stop. Do not work toward the answer in small probing steps — a sequence of small lookups is the same disclosure as one large one.

  6. 6

    Hand it to somebody else to review

    Deliver only the de-identified classification sheet. Ask the reviewer to confirm two things: that there is no environment-identifying information in it, and that it makes no compatibility claims.

flowchart LR
  A["One de-identified record
in front of you"] --> B["Label it Candidate A,
Candidate B, in order"] B --> C{"Which category
does it fall into?"} C --> D["Documented fact"] C --> E["Pending manual review"] C --> F["Must not be disclosed"] D --> G["Conclusion column, every row:
hardware suitability unproven"] E --> G F --> G
Three buckets, one conclusionThe three category boxes are stacked between the same two points: whichever one a record lands in, the row ends at the identical conclusion box on the right. The classification changes who reviews the row next. It never changes what the row claims.

Three judgments exist in this table and no others: the source document has explained it, it needs manual review, or it is beyond this chapter. When you see that a candidate exists, the strongest thing you may write is “there is a record to classify.” Not “interface found.” Not “available.”

When the sheet starts drifting

SymptomCorrection
You are not sure where a candidate came from Mark it unknown source and stop. Do not go back to the live system to find out
A codename hints at a model or a location Change it back to a meaningless letter code, and delete the old copy rather than keeping it for reference
A colleague asks for the real path Do not provide it. Convert the request into a question the sheet can answer: which field role needs review?
The table has started to look like a compatibility list Add hardware suitability not confirmed to every column, and strike out words like “recommended” or “confirmed”
Somebody suggests starting the candidates one at a time to see Stop. Starting software is not part of a classification exercise, and it does not bypass the isolation, approval and artifact-provenance gates
The check that closes this exercise. The table holds only candidate codenames — no real paths, serial numbers, hosts, IP addresses or endpoints. No live enumeration was performed and no program for it was supplied. Every candidate still reads “hardware suitability unproven.” Nothing was installed or started, the bus was not contacted, no group or ETS operation ran, and no physical equipment was controlled.
What the pinned sources actually cover. The pinned initialization sources for Add-on 0.6.1 cover interface classification, device-field handling, USB-value conversion and template-replacement logic. Those describe source-code behaviour. They do not give you a live device inventory, and they do not prove that any candidate hardware exists on your bench or is compatible with it.
Nine names, three documented families

Choosing a driver family from documentation, not from the connector

A driver family is the set of rules by which the software and the interface talk to each other. The temptation, with hardware in front of you, is to pick one from the product name, the shape of the connector or an article somebody linked to. That is exactly the inference this chapter refuses.

In plain terms

A translation desk keeps a rack of instruction cards, one per language. Pulling out the card marked Portuguese tells the desk which set of rules to follow. It does not make the person standing in front of the desk a Portuguese speaker. Matching a name is a fact about the card rack. Whether the conversation works is a fact about the person, and you find that out from somewhere else entirely.

So there are two questions, and a candidate needs a yes to both.

Question 1Does the pinned Add-on version accept this name? The schema for Add-on 0.6.1 either enumerates it or it does not.
Question 2Does the pinned upstream file explicitly document a family with the same name? Not a similar one — the same one.

The Add-on 0.6.1 schema accepts nine interface names. These are allowed values, not recommendations, and the presence of a default among them is a schema fact rather than an endorsement:

tpuart
tpuart-ip
usb
ft12
ft12cemi
ncn5120
ncn5120-ip
ipt
dummy

In the upstream KNXD 0.14.72 INI documentation pinned for this chapter, the driver-family terms that can be compared directly are three:

tpuart
ft12
ft12cemi

That supports terminology and documentation coverage. It supports nothing about actual hardware compatibility. A name appearing in both places makes a documented candidate for manual review, and that is the whole of what it makes.

The decision card you fill in is offline and carries no product name, device path, serial number, host, IP address or endpoint. Five fields:

  • Requirement category. Only the role — something like a device-type input or an endpoint-type input. Not the make, not the model, not the value.
  • Add-on name evidence. Yes, no, or unknown.
  • Upstream file documentation. Yes, no, or unknown.
  • Manual review status. Pending review, or stopped.
  • Non-conclusion. Local hardware compatibility, driver startup and bus status have not been confirmed. This field is not optional and it does not get shortened.

Then work through it in order. Write the required role first. Check the candidate name against the pinned enumeration for Add-on 0.6.1, and if it is not there, stop rather than adjusting the name yourself. Check that upstream 0.14.72 explicitly describes a driver family of the same name; similar names do not count. Keep at most one candidate — when both documents are clear, write “documented candidate, pending manual review,” and when two candidates remain or no answer is clear, make no selection at all. Add the non-conclusion in full: hardware compatibility has not been proven, drivers have not been loaded, services have not been started, and the bus has not been contacted. Then stop at the file level and submit the card to the approval process. Do not attempt a start, and do not use live logs to favor one candidate over another.

flowchart TD
  A["A driver-family name
somebody wants to use"] --> B{"Is the name in the Add-on 0.6.1
schema enumeration?"} B -->|"no"| X["No selection.
Write down the documentation gap
and send it to manual review"] B -->|"yes"| C{"Does upstream 0.14.72
document a family with
exactly that name?"} C -->|"no, or only a similar name"| X C -->|"yes"| D{"Is exactly one
candidate left?"} D -->|"no, two or more"| X D -->|"yes"| E["Documented candidate,
pending manual review.
Hardware compatibility still unproven"]
Two terminal boxes, and three arrows into the left oneEvery refusal — name not enumerated, upstream only similar, more than one candidate surviving — lands in the same box on the left. The single path to the box on the right still ends on the word unproven, which is the strongest result this exercise can produce.

The five arguments that will be made to you

What comes upThe answer
The Add-on accepts the name, but there is no upstream description Insufficient evidence. A schema name on its own does not establish family correspondence
The names are similar but not identical Treat them as different names. Do not infer a match from a prefix, a suffix or a product description
Two candidates are both documented Choose neither. List the documentation gaps and send them to manual review
Somebody reads the source default as a recommendation Remove the recommendation wording. A default in a source schema is a schema fact and nothing more
Somebody asks to start it and take a look Stop. A test boot is not a file-level selection, and it proves nothing about hardware compatibility
The result is worded as one of two things. Either “documented candidate” or “insufficient evidence.” It is never written as “driver applicable.” A finished card carries Add-on 0.6.1 name evidence and explicit upstream 0.14.72 documentation, holds no products, paths, serial numbers, hosts, IP addresses, endpoints or credentials, and leaves hardware compatibility, loading, startup, listener and bus status all marked unverified.
Version boundaries do not stretch. If the version in front of you does not match the pinned one, check the version and compatibility notes before anything else. Do not borrow an answer from a neighboring version because the file looks similar — different versions cannot be extrapolated from one another, and the whole value of a pinned source is that it refuses to be generalized.
Questions people ask

The ones that come up on every job

Can I install it on the Home Assistant we are already using, and just not start it?
No. The full isolated-test gate sits before the repository is added and before installation, not before the start button. A live Home Assistant stops at the first change, and installing is a change.
What is the actual difference between stop, remove, and a backup restore?
Stop only ends the program. Remove handles Add-on-only changes. Backup and restore may affect a much wider scope of Home Assistant. Always take the smallest response that genuinely matches the change you made.
Do I need to reset network isolation for this part?
No. Do not make temporary network changes on a guess. The administrator reviews the bounded network test scope that already exists; if it cannot be verified, stop before adding the repository rather than adjusting the network to make it verifiable.
Can I post an anonymized log to a project issue?
Submit only the error categories needed to reproduce the problem. Before submitting, confirm you have excluded complete logs, backups, settings, screenshots, controlled records and secrets.
Does Candidate A correspond to an actual device?
No. It is a classification ticket, used to tell two de-identified records apart. It carries no claim that either record corresponds to hardware that exists.
Can you give me the commands for finding the device?
No. This chapter deliberately provides no live enumeration procedure, and it does not require access to the running environment at all.
Can I hash a serial number and use the hash as the codename?
No. A codename derived from an identifying value can still be correlated back to it by anyone holding the same value. Use meaningless candidate letters.
Once I have seen the candidates, can I choose a driver?
No. The existence of a candidate and the documentation of a driver file are different classes of evidence. The driver-family exercise also stays at file level and proves nothing about compatibility.
When is the classification table finished?
Only when the data is de-identified, the source hierarchy is clear, and the unconfirmed matters and the reasons for stopping are both recorded. The hardware remains unverified regardless.
If the Add-on accepts the name, does that mean my hardware is supported?
No. A schema name and hardware compatibility are two different classes of evidence. One is a fact about an allowed value; the other is a fact about a device you have not been permitted to contact yet.
Can I just take the source default?
No. A default existing is not a recommendation, and it does not endorse any specific hardware.
Can I try a family that is not in the documentation, just to see?
No. Stop and obtain the missing documentation. Do not attempt a start to settle a documentation question.
If the daemon shows running, does that confirm the driver?
No. Program state, driver, interface, listener and bus are separate evidence layers. Running is a statement about the first of them only.
What does the candidate actually deliver to the approver?
The family name, the coverage status of the two pinned documents, the pending-review flag, and every one of the non-conclusions. Nothing else.
Next

Where to go from here

keep going

Addresses next, and the port nobody meant to open

Part 3 moves from process evidence to configuration fields: recognizing address and placeholder text without recording real values, and understanding what a KNXnet/IP listener exposes and who becomes responsible for it. Same gates, same pinned sources, and still no telegram on any bus.

Open the full guide

Part 2 of the WoowTech KNXD Complete Tutorial series on the Apporo blog.

Adapted from the WoowTech KNXD complete tutorial, produced by WoowTech and republished by Apporo.

Versions and claims are bounded by the pinned sources. Publication does not represent validation of any live site, hardware, network or KNX bus, and is not an authorization to operate KNX, ETS, Home Assistant, group objects or physical control.

Light · Air · Water · Control · apporo

in KNXD
Sort out who is responsible before KNXD goes anywhere near the bus