Skip to Content

Nine cards and a worksheet, with not one real value on any of them

paper before ets
KNXD Guide · Part 5

Nine cards and a worksheet, with not one real value on any of them

This is the part of the series where nothing gets configured. Three chapters, three sheets of paper: four responsibility cards that separate ETS from KNXnet/IP, from the listener, from the interface; five more that separate the Home Assistant KNX integration from xknx, from a standalone KNXD daemon, from the interface and the bus; and an offline worksheet whose every cell holds a placeholder rather than a value. It reads like a delay. It is the step that stops a responsibility diagram from being mistaken for a proven path, and stops a worksheet from being mistaken for something you can paste.

9 cards
Four on the ETS and KNXnet/IP side, five on the Home Assistant side
0 values
No host, IP, port, address, secret, project or device identifier on any card or cell
about 50 min
15 minutes, 15 minutes and 20 minutes across the three chapters
Why this part is paper

A responsibility drawing is not a wiring drawing

You have run the ETS preflight in Part 4. The obvious next move is to open ETS, point it at a KNXnet/IP endpoint and see what answers. This series does not do that here, and the reason is worth stating plainly rather than treating as caution for its own sake.

Everything in this guide is bounded by pinned sources: the KNXD Add-on 0.6.1 managed INI template, the Home Assistant KNX documentation snapshot, and a locked Home Assistant Core version manifest. Those sources support what a role is called and what it is documented to be responsible for. They do not support any claim about what is running, what is reachable, or what happened on a bus. Part 5 is where that distinction gets drawn on paper, once, so that it does not have to be argued about later while a blind is halfway down.

In plain terms

The evacuation plan screwed to the wall by the lift names who holds the key to the roof door and who counts heads in the car park. It is a good drawing and everyone should read it. It is not evidence that anybody unlocked the roof door this morning. Confusing the two is how a building ends up with a plan nobody has ever tested.

So three prohibitions run across all three chapters in this part, and none of them are softened by the fact that you are only drawing. One of the three is stricter in Chapter 12 than it is in Chapters 13 and 14, and the difference is not a wording accident — read it carefully before the four-card sheet.

No install. Do not add the repository, and do not install or start the Add-on. Work of that kind may be evaluated separately only when complete isolation, written approval, an approved immutable artifact or image digest, and source-to-build attestation are all present. None of these chapters grant that authorization.
No bus activity. In Chapter 12, ETS programming or downloads, group reads or writes, telegram transmission, and physical control are prohibited — group reads outright, not merely automated ones, so a single manual read is also out. In Chapters 13 and 14 the source wording is that group reads must not be automated; group writes are not allowed, telegrams may not be sent, ETS programming or downloads must not be performed, and physical equipment must not be controlled. When the sheets sit together on one desk, work to the stricter line.
No environment data on paper. No host, IP, port, address, interface name, certificate, credential, project name or device identifier goes onto a card or into a cell — not even as an example.
What the three sheets are allowed to conclude. Chapter 12 ends at “concept on paper classified.” Chapter 13 ends at five separated responsibilities whose states are unknown. Chapter 14's strongest permitted conclusion is Field responsibilities are ready for manual review. None of them prove a thing about the daemon, the listener, the interface, the network, ETS, the integration or the KNX bus.
Four cards: ETS and KNXnet/IP

Separating four words that get used as though they were one

The first sheet takes about fifteen minutes and needs a blank sheet of paper, four blank cards, and your offline review sheet from Chapter 11. Before anything goes on the paper, the boundary this chapter draws around itself:

Do not open ETS, and do not touch the network or running services. This chapter only draws concept cards and lines of responsibility. Do not fill in the host, IP, port, address, interface name, certificate, project name or other environmental information. Two stop conditions travel with the sheet: do not wire, probe or expose real KNXnet/IP endpoints; and no ETS programming, downloads, or live network operations are allowed. ETS programming or downloads, group reads or writes, telegram transmission, and physical control are prohibited here — the concept diagram proves no result for the daemon, the listener, the interface, the network, ETS, the integration or the KNX bus.

That is the sheet that answers the temptation from the previous section. The move that feels productive right now — open ETS, point it at a KNXnet/IP endpoint, see what answers — is the one this chapter forbids outright, and it stays forbidden for the whole fifteen minutes. Title the paper:

Concept Map on Paper

Each card carries the role name and two columns, and nothing else.

Responsibility — what the pinned sources say this role is answerable for
Cannot Prove — what its presence on the table does not establish

Those two columns are the whole discipline of the sheet. The six steps below give the exact wording each card gets.

Then one sentence goes on all four cards, identically:

Only conceptual responsibility, no evidence of implementation.

And the KNX bus goes outside the picture, with its own marking:

This chapter provides no evidence of results
flowchart LR
  subgraph P["Concept Map on Paper"]
    direction LR
    A["ETS card"] ---|"concept
handover"| B["KNXnet/IP
card"] B ---|"concept
handover"| C["Listener
card"] C ---|"concept
handover"| D["Interface
card"] end Z["KNX bus, left outside the diagram.
No evidence of results in this part"]
Four cards inside the frame, the bus outside itThe three lines between the cards carry no arrowheads, and each is labeled only “concept handover” — no direction, no argument, no action verb. The KNX bus box below the frame is joined to nothing at all, which is the point of drawing it.

Six steps, in this order.

  1. Step 1

    Put down the ETS card

    Responsibility reads only “Project data is managed by authorized roles”. The Cannot prove column reads “This chapter provides no evidence of operation.”

  2. Step 2

    Put down the KNXnet/IP card

    Responsibility reads only “the network-side vocabulary in the pinned template”. Cannot prove reads “No execution status”.

  3. Step 3

    Put down the listener card

    Responsibility reads only “service role waiting for handoff from other software”. Do not claim that it is currently running.

  4. Step 4

    Put down the interface card

    Responsibility reads only “data transfer boundary”. Do not add hardware, names or settings.

  5. Step 5

    Draw the lines of responsibility

    Write beside each line only “concept handover”. No directions, no arguments, no action verbs. A line that starts to read like a procedure has stopped being a responsibility line.

  6. Step 6

    Close the whole picture

    Underneath the drawing, write: “Concept on paper classified; all implementation layers and KNX bus results unproven”. Then write STOP outside the diagram, meaning any ETS, network, service or KNX action stops here.

Hand it to a second reviewer. The preparation for this chapter asks you to assign another reviewer to check the operational and environmental information — specifically, that there is none. One person drawing their own diagram is the case where a host name slips in as “just an example”.
Where the KNXnet/IP vocabulary comes from. The Add-on 0.6.1 managed INI template contains server-side and listener related configuration vocabulary. That supports only how that version expresses the role in the template. It says nothing about settings after generation, process status, network status, or KNX bus results.
Five cards: the Home Assistant side

A candidate topology, drawn so it cannot be read as the only one

The second sheet is another fifteen minutes, another blank page, five blank cards. No Home Assistant, no KNXD, no ETS open on the desk; nothing connected, nothing probed, nothing reloaded, no environment data entered.

This diagram carries a risk the first one does not. Five boxes in a line look like a stack, and a stack looks like a rule. It is not one. The arrangement is this tutorial's candidate responsibility topology — not a universal architecture, not a proven live path, and not a claim that the Home Assistant KNX integration must go through KNXD, or through the interface, or through anything else.

The five cards are drawn as five empty boxes, and each one gets two columns before a word of content goes in. The column headers are fixed:

Source Supported — the role wording the pinned sources actually carry
Cannot Prove — what the card's presence does not establish

The cards hold role names only: no host, address, port, secret, project or device data. Every card starts life with Status Unknown filled in first, and every card carries the same sentence:

Their states are independent; this arrangement is not a universal path.
flowchart TD
  subgraph HA["Home Assistant KNX integration boundary"]
    direction LR
    I["Integration card:
integration responsibilities
inside Home Assistant"] ---|"conceptual
responsibility"| X["xknx card:
library and KNX logic
used inside this boundary"] end HA ---|"candidate responsibility"| K["KNXD card:
standalone daemon, not an
inherent layer of the integration"] K ---|"candidate responsibility"| N["Interface card:
keeps the handover boundary"] N ---|"candidate responsibility"| B["KNX bus card:
onsite network responsibility,
no evidence of results here"]
One box drawn around two cards, and three cards left outside itThe framed box at the top holds the integration card and the xknx card side by side; KNXD, the interface and the bus run down the middle underneath it, outside that frame. No line in this diagram has an arrowhead, because a direction would turn a candidate responsibility into a claimed flow.

Six steps again, and the last one is the one that keeps the drawing honest.

  1. Step 1

    Put down the integration card

    Under Source Supported, write “Manage integration responsibilities within Home Assistant”. Under Cannot Prove, add “No evidence that it was added or loaded.”

  2. Step 2

    Put down the logic card

    Under Source Supported, write “xknx library/KNX logic is located within the Home Assistant KNX integration boundary”. Under Cannot Prove, add “Declaring dependencies does not prove that it is operational.”

  3. Step 3

    Put down the KNXD card

    Under Source Supported, write “standalone KNXD daemon; not an inherent layer of the Home Assistant KNX integration.” Do not add daemon or listener status to the diagram — that status stays Status Unknown.

  4. Step 4

    Put down the interface card

    Under Source Supported, write “Keep handover boundaries”. Do not include the interface type, its name, or any live-site status.

  5. Step 5

    Put down the bus card

    Under Source Supported, write “Onsite network responsibility; no evidence of results in this chapter.”

  6. Step 6

    Mark the candidate relationships

    No directional arrows. Each line is marked only “Responsibility of this Teaching Candidate”, and the diagram closes with “Not a common or proven path; no settings, connections, or success claims.”

Two stop conditions specific to this sheet. Stop if the task starts to require adding the integration, entering endpoints, or reloading Home Assistant. And stop if anyone starts referring to the existence of a version or a component as a working integration. Both are the same mistake wearing different clothes.
Have someone else read it. As with the first sheet, a second person reviews the diagram — and the review itself establishes no configuration steps and no live results. If a request for live-environment information arrives mid-drawing, stop the paper process and hand it to the approval process rather than finishing the sheet with a value on it.
xknx is not KNXD

The one confusion this whole sheet exists to prevent

Two names sit close together in every thread on this subject, and they are not the same thing.

xknxA library and the KNX logic used inside the Home Assistant KNX integration boundary. It lives within the integration.
KNXDA standalone daemon with its own lifecycle. It is not an inherent layer of the Home Assistant KNX integration.

Two consequences follow, and both matter more on a commissioning job than they look on paper. KNXD being present does not mean the integration is present; the two have different lifecycles and different evidence. And the five cards being drawn in a row does not mean the integration must go through KNXD — that inference is exactly what the wording on the cards is written to block.

In plain terms

The procedure manual the reception desk works from, and the courier firm two streets away, are not the same organization. Reading the manual tells you what reception is meant to do with a parcel. It tells you nothing about whether a courier was ever booked, whether that firm is open today, or whether it is even the firm this building uses. Finding the manual on the desk proves the desk exists. It does not prove a van is on its way.

There is a second reason to keep the cards apart, and it is about the sources rather than the software. The Home Assistant side of this part rests on two pinned artifacts with genuinely different scopes, and this guide keeps them in separate columns for that reason.

flowchart LR
  subgraph L["The documentation snapshot"]
    direction LR
    L1["knx.markdown,
pinned snapshot"] ---|"supports"| L2["The configuration concepts
present in that file"] end subgraph R["The Core version manifest"] direction LR R1["knx/manifest.json,
Core 2025.1.0"] ---|"supports"| R2["That version's integration registration
and xknx dependency boundary"] end Z["Correspondence not proven. The two columns do not combine
into a settings format, an API contract or a compatibility guarantee"]
Two framed lanes and a box that belongs to neitherThe Core version manifest lane is drawn above the documentation snapshot lane, and the box at the foot sits outside both frames with no line running to it. That is deliberate: the note applies to the pair, not to either source on its own.

Put the two side by side and you have two facts. You do not have a third fact about how they line up. The juxtaposition does not prove that the versions correspond exactly to one another, and it does not prove that the package has been loaded, that the integration has been established, or that the KNX bus has produced any result. On the worksheet, that pair keeps two separate columns and the notation “Correspondence not proven”.

The hedge is not modesty, it is scope. Publication of this material does not represent validation of any local environment, hardware, network, or KNX bus. Pinned sources support the documented scope and nothing beyond it. When you carry a sentence from this guide into a site document, carry that boundary with it — otherwise the sentence arrives on site looking like a test result.
The offline worksheet

Leaving the blanks safely is the deliverable

The third sheet takes about twenty minutes and is the one people find hardest, because it looks like a form and forms invite filling in. It is not a form to fill in. Completion here means every blank is left blank for a stated reason. Title it with the marking it has to carry:

Offline placeholder worksheet; cannot be imported, pasted, or executed.

Draw the header before you write anything under it. Only these governance columns are used.

ColumnWhat goes in itWhat must never go in it
Requirement name The general purpose only — connection responsibilities, integration responsibilities, data-model responsibilities, approval responsibilities The environment name, or a simulated field name
Responsible role Which role supplied or reviewed the row Personal information about a named individual
Semantic placeholder The fixed text, unchanged, in every row: To be supplied by an authorized role. Format hints, default values, example values — anything that shows the shape of the real answer
Data classification Exactly one of public, controlled, secret, unknown A classification invented for the row, or a value alongside the classification
Source boundary File snapshot and Core version metadata, recorded separately The two merged into one line, or written up as a compatibility guarantee
Review status and stop reason One of pending confirmation, offline verification, not applicable — plus why a blank stayed blank Execution results of any kind
Classification is a routing rule, not a label. Rows marked controlled, secret or unknown are not allowed to be added to the public sheet. unknown sits on the restricted side of that line with the other two, which is the correct default: a row nobody has classified yet is a row nobody has cleared for publication.
In plain terms

A delivery slip with the address box empty is not an invitation to write in an address you think is probably right and set off. The empty box is the driver's instruction to go back to whoever raised the job. Writing something plausible in it does not make the delivery happen; it makes a wrong delivery happen, with a signed slip saying it was correct.

flowchart TD
  A["A cell on the offline worksheet
is still empty"] --> B{"Does the cell want a host, endpoint, address,
secret, device identifier, YAML, an API shape,
or anything else that could be pasted?"} B -->|"yes"| S["Stop the paper process.
Write the stop reason in the cell and hand it
to the independent approval process"] B -->|"no"| C{"Is it one of the governance columns:
requirement, role, classification,
source boundary, review status?"} C -->|"no"| S C -->|"yes"| E["Write the governance value.
Every other cell keeps the fixed text
To be supplied by an authorized role"]
Two questions, two ways to endBoth routes into the stop box on the left arrive from different answers — the first question stops on yes, the second on no. Read the edge label rather than the side it hangs from. Only one path reaches the box on the right, and it is the narrow one.

Six steps, and step six is not optional.

  1. Step 1

    Write the worksheet title

    Mark it “Offline placeholder worksheet; cannot be imported, pasted, or executed.” The marking travels with the sheet, so anyone who picks it up later reads the boundary before they read the rows.

  2. Step 2

    Create the requirement column

    Use only general classifications — connection responsibilities, integration responsibilities, data-model responsibilities, approval responsibilities. Do not simulate fields.

  3. Step 3

    Add the placeholder text

    Fill in only “To be supplied by an authorized role” in each column. No format hints, no default values, no example values.

  4. Step 4

    Add the data categories

    Mark each row public, controlled, secret or unknown. Controlled, secret and unknown are not allowed on the public sheet.

  5. Step 5

    Separate the source column

    Note the concepts supported by the file snapshot and the integration boundaries supported by the Core version metadata separately. Do not write either of them up as a compatibility guarantee.

  6. Step 6

    Do the offline review, then hand it on

    Confirm there is no YAML, no API structure, no connection detail, no actual value and no action statement anywhere on the sheet. Then hand it to another reviewer. A worksheet reviewed only by the person who wrote it has not been reviewed.

Do not fill a gap from an old file. As soon as a cell demands real data or an executable shape, stop immediately — and do not fill it in from old files, images, memory or online articles. An old settings file is the worst source of all: it may carry identifying data, and it has no version evidence and no approval evidence for this work.
Stop conditions for this sheet. Do not open a running Home Assistant, and do not provide YAML, API calls, pastable field shapes, connection details or any actual values. Stop as well the moment a step would require saving settings, reloading the integration, or testing the connection — those are execution, and this sheet does not grant it. Work outside this chapter may be evaluated only when complete isolation, written approval, an approved immutable artifact or image digest, and source-to-build attestation are all present.
What “done” sounds like. The strongest conclusion this worksheet is permitted to reach is Field responsibilities are ready for manual review. It does not prove that Home Assistant would accept any setting, or that any connection, integration or bus result exists.
When someone pushes

The drift you will actually meet, and the wording that pulls it back

None of these three sheets fail dramatically. They fail by drifting a word at a time, usually because somebody helpful wants to make the drawing more useful. Here is what that drift looks like on each sheet, and the correction that goes with it.

What starts happeningWhich sheetThe correction
The lines of responsibility start reading like an operating procedure Concept map Change the text beside the line back to “Concept Handover” and remove the sequence and the actions
Somebody wants to add network data to the picture Concept map Stop. The diagram does not include the host, IP, port, or any live values
The listener gets described as running Concept map Change it back to “Service role in pinned template”. The execution status remains unknown
The ETS card starts describing a screen Concept map Remove it. The pinned source does not support ETS screens or operations
The interface card is treated as a hardware function Concept map Change it back to data handover responsibility. Both the hardware and the bus remain unconfirmed
xknx and KNXD start to look like the same thing Five cards Rewrite the former as “library/logic used within the integration boundary” and the latter as “independent daemon, not an inherent integration layer”
The lines start to look like an execution flow Five cards Remove the directions and the verbs, leaving only “candidate responsibilities for this tutorial; neither a universal nor a proven path”
The presence of a component is described as operational Five cards Replace the claim with “The pinned source defines this role; execution status is unknown”
A placeholder starts to look like a live value Worksheet Change everything back to “To be supplied by an authorized role”
The worksheet starts to resemble settings that could be pasted Worksheet Remove the hierarchy, the syntax, the data shapes and the field order, leaving only the governance categories
Two distinct sources get presented as one version Worksheet Split them into two columns explaining each source's supported scope and what it cannot prove
Blank cells are read as omissions somebody forgot Worksheet Add the reason for stopping. Do not guess the value

Then there is the category that is not drift at all, but a direct request. Five of them come up, and all five end the same way.

  • “Just confirm it with a live action.” Mark it STOP. No alternative method gets added in its place.
  • “Add the connection information so the drawing is useful.” Stop. Environmental information is not collected for paper drawings.
  • “Let me see the running settings.” Stop the offline process and hand over the explicitly approved read-only scope evaluation. That is a different, separately approved piece of work.
  • “Sign off the integration while you are in there.” Stop. There are no setup or test authorizations in these chapters, so there is nothing to confirm and nothing to sign.
  • “Can we just test the connection?” Stop. These chapters provide no testing or implementation authorization — and no bus verification either: no group reads or writes, no telegrams, no physical control. Chapter 12 prohibits group reads as such, so “I will only read one, by hand” is not the exception it sounds like.
Refusing a bus action is not pedantry on a live building. A group write is a light, a blind or a heating valve moving in a room you cannot see from where you are sitting. “Just to check” is a real actuator responding to a real telegram. The stop rules in this part exist because the cheapest place to catch a wrong assumption is on paper, and the most expensive place is a room with people in it.
Questions people ask

The ones that come up on every job

The four cards are lined up. Does that mean the system works?
No. They are words of responsibility on pieces of card. Lining them up shows you where a responsibility ends and the next one begins; it proves nothing about the daemon, the listener, the interface, the network, ETS, the integration or the KNX bus.
Does the listener card mean the service is executing?
No. The role described in the pinned template and the execution status of a process are two different kinds of evidence. The Add-on 0.6.1 managed INI template contains server-side and listener related configuration vocabulary; that supports how that version expresses the role, and nothing about what is running.
Can I put a realistic network example on the diagram, clearly marked as an example?
No. The diagram does not include usable network data or realistically formatted values. An example address in the right format is exactly the thing that gets copied onto a site document six weeks later with the word “example” dropped.
Can I add a description of the ETS screen, so the reader knows what to look for?
No. The pinned sources do not support ETS screens and operations. If the card starts describing a screen, remove that text — the correction is listed as a troubleshooting item precisely because it happens often.
Is xknx the same thing as KNXD?
No. xknx is the library and KNX logic used within the boundaries of the Home Assistant KNX integration. KNXD is an independent daemon, and it is not an inherent layer of the integration itself. This is the single most useful distinction in this part of the guide.
If KNXD is present, does that mean the integration is present?
No. The two have different lifecycles and different evidence. Finding one on a machine tells you nothing about the state of the other.
Do the five cards represent a universal architecture, or a live path?
Neither. It is a candidate responsibility topology for this tutorial only. It is not evidence of wiring, of transmission, or of a live path, and it cannot be read as a rule that the integration must go through KNXD or through the interface.
Can I put a piece of YAML on the worksheet as a blank template?
No. This part does not provide deployable configuration structures. A blank template still teaches the shape of the real thing, which is why the placeholder text is fixed wording rather than an empty field with a format hint next to it.
Can I at least list the API fields?
No. API contracts and payload shapes are outside the scope of this part.
Does a placeholder mean the value will definitely be supplied later?
No. It marks responsibility and a pending-confirmation status, nothing more. Some rows will be closed as not applicable and never carry a value at all.
Can I fill the gaps from the old settings file we had on the last job?
No. Old settings may contain identifying data, and they carry no version evidence and no approval evidence for this work. The same goes for images, memory and articles found online.
The offline review passed. Does that mean Home Assistant will accept the configuration?
No. It proves only that the worksheet meets the paper review boundaries. The strongest conclusion available is that field responsibilities are ready for manual review.
Does any of this prove the KNX bus is operational?
No. The bus is drawn outside the first diagram and marked as producing no evidence of results, and it is marked the same way on the five-card sheet. Nothing in this part is a validation of any local environment, hardware, network or KNX bus.
Next

Where to go from here

still on paper

The responsibilities are separated. The entities are not.

Part 6 stays offline and finishes the Home Assistant side: label cards for the entity model, and the safety test matrix that decides which checks are allowed to exist at all before anything on a bus is permitted to move.

Open the full guide

Part 5 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
Three sheets of paper before the first value goes in