The entity is not the address, and a classification ticket is not permission
This part closes the middle stretch of the guide with the two chapters an experienced installer is most likely to wave through. Chapter 15 separates a Home Assistant entity from a KNX individual address from a KNX group address, and makes you write down which is which without writing down a single value. Chapter 16 takes every action anyone has proposed, breaks it into pieces, and drops each piece into one of four trays — safe, isolated test, approval required, never automate. Neither chapter connects to anything. Both exist because the alternative is finding out which category an action belonged to after it has already moved somebody's blinds.
Two chapters that end in paper, with nothing plugged in
Chapter 15 takes about twenty minutes and produces a small stack of classification cards. Chapter 16 takes about twenty minutes and produces one classification ticket. Neither creates a Home Assistant entity, neither changes a group setting, and neither runs a test. That is the entire system change for this part: none.
The bottom line of Chapter 15 is that label cards are used only to distinguish the roles of a Home Assistant entity, a KNX individual address, and a KNX group address. Each card records field roles and categories. It does not record values, mappings, payloads, service calls, or control examples. The bottom line of Chapter 16 is that you classify everything before you do anything: the proposal is divided into safe, isolated-test, approval-required and never-automate work, and where a gate is incomplete you stop on paper.
You have commissioned buildings. You already know what a group address does when something writes to it, which is exactly why this part is aimed at you rather than around you. The risk here is not that you will misunderstand KNX. It is that Home Assistant hands you a second vocabulary — entities, states, service calls — that looks like it maps onto the first one, and reads as though it were describing the same wire. It is not describing the wire at all.
Nobody signs off a distribution board by reading the schedule stuck to the inside of the door. The schedule tells you what somebody intended. The board tells you what is actually wired. These two chapters produce schedules, and everything they produce is a statement of intent. The moment a schedule is read as a statement about the wiring, you have made the one mistake the rest of this guide spends its time undoing.
What you need in front of you
For Chapter 15: a few blank cards and the offline worksheet from Chapter 14. No Home Assistant material and no KNX material are required, and you should not go and fetch any. For Chapter 16: a blank classification ticket, and a description of the proposal written entirely in placeholders. No test environment is required, because no test is run.
One piece of honesty about the material, because it governs every sentence below. Chapter 15 is bounded by the pinned Home Assistant KNX documentation snapshot and by a separately locked Core manifest. Chapter 16 is bounded by the pinned KNXD 0.14.72 upstream files and the KNXD Add-on 0.6.1 files. Pinned sources support the documented scope, and nothing more. Publication is not validation of any local environment, hardware, network or KNX bus, and it is not authorization to operate anything.
Three roles that will not stand in for one another
A Home Assistant entity is a user-facing semantic object. A KNX individual address identifies a KNX device. A KNX group address is a shared communication topic defined by the KNX design. Three roles, three different jobs, and no two of them are the same kind of thing.
Think of a members' club with three sorts of paper. A record card lets anybody understand one thing at a glance. A membership card identifies exactly one member. A subject line on a circular tells several members which shared topic a message belongs to. All three can sit in the same filing cabinet, all three can carry the word “lighting” on them, and none of them will do the other two jobs. Handing somebody a subject line when they asked for a membership card is not a small clerical error. It is the wrong category of object.
They can appear in the same classification system, and in a real project they do. That is what makes them easy to blur. It does not make them interchangeable fields. How an actual project associates the semantic object with the KNX design has to be determined separately by that project and its authorization evidence. This chapter records the classification only — entity role, device identity role, shared communication topic role — and records no values and no mappings at all.
flowchart TD C["One classification card
paper only, no values"] --> E["Entity role
a user-facing semantic
object in Home Assistant"] C --> I["Device identity role
a KNX individual address
identifies one KNX device"] C --> G["Shared topic role
a KNX group address is a
topic defined by KNX design"] E --> EX["Off the card:
entity id, state, service call"] I --> IX["Off the card:
address value, device identifier"] G --> GX["Off the card:
address value, payload, direction"]
| Role | What it is | What the card records | What never goes on the card |
|---|---|---|---|
| Home Assistant entity | A user-facing semantic object — a software record, not a field device | The words “entity role”, plus a general purpose label | Entity identifiers, states, service calls, configuration structures |
| KNX individual address | The identity of one KNX device | The words “device identity role” | Any address value, any device identifier, any serial number |
| KNX group address | A shared communication topic defined by the KNX design | The words “shared communication topic role” | Any address value, payload, data direction, type or content |
There is a second habit to break, and it is the one that survives longest in people who are good at their job. A clear label is not evidence. Even when the label text is unambiguous, you cannot guess the field value, the mapping, the data direction, the type or the state from the name. In the absence of authorization evidence, the honest entry is always pending confirmation — and leaving it there is the whole skill.
Four spaces on a blank card, and nothing else on it
Draw only four spaces on each blank card. Do not imitate the settings screen of Home Assistant or of ETS, and do not lay the fields out in the order a real form uses them. A card that looks like a form invites somebody to fill it in like one, and the first thing they will reach for is a value.
pending source confirmation.supported by a pinned source, pending confirmation, or not applicable.At the end of the card page, write one more line, outside the four spaces:
Cannot be imported, cannot be called, and cannot be controlledYou do not need to add examples to make the card look complete. A card with three fields answered and one honestly marked as pending is finished. A card padded out with a plausible-looking illustration is worse than an empty one, because the illustration is the part that gets copied.
The six steps
-
Step 1
Create the purpose cards
One general purpose per card, and one only. Avoid family names, room names, equipment names and people's names. If two purposes want to share a card, they are two cards.
-
Step 2
Add the data semantics
Record the type of meaning the model needs. If there is no support for it in the pinned source, the entry is
to be confirmed by the source. Nobody is scored on how many blanks they filled. -
Step 3
Add the field-role section
Classify as entity, device identity, or shared communication topic. Do not write any value, mapping, direction, content or format into this section. This is the section that leaks first, and it leaks because the classification feels incomplete without an example beside it.
-
Step 4
Add the evidence-status field
Mark the documentation concept and the Core version metadata separately. They are two different sources with two different scopes, and writing the two of them down as though they were one piece of execution evidence is precisely the error this field exists to catch.
-
Step 5
Run a de-identification check
Go back over the finished cards and remove identification strings, home contexts, payloads, calls, configuration structures, and any control hints. Do this as a separate pass. Things that looked harmless while you were writing them read differently when you are only looking for them.
-
Step 6
Close the card set
Write across the whole stack:
Only for paper review; physical, integration, and bus status unknown. The stack now says what it is, to anybody who finds it on a desk six months from now without you standing next to it.
Completion check
You are done when you can distinguish the entity, the device identity, the shared communication topic and the evidence at a glance. Anything that needed a guess stays marked pending confirmation.
- You can state the three roles without reaching for an example: the entity is the user-facing record card, the individual address is the identity of a KNX device, the group address is the shared communication topic that KNX is designed around.
- You can say why they are not interchangeable, and each card carries only purpose, data semantics, field role and evidence status.
- All purposes use de-identified, general labels.
- No card carries an address value, a mapping, an identifier, a payload, a service call, a configuration structure, or a control example.
- No name is being relied on as evidence of data direction, type, or site status.
- No entity was created, and no group action, telegram transmission or device control was performed or is permitted.
Four trays, and the strictest one always wins
Picture four trays at the end of a workbench. The first tray holds work you can do right now with nothing switched on. The second holds work that needs the bench isolated, a colleague present, and an agreed way of putting everything back. The third holds work you may not touch until the client has signed something. The fourth is a locked drawer, and nothing ever comes back out of it — not with a signature, not with a better tool, not at three in the morning when it would be quicker. Every action in the proposal goes into exactly one tray before any of them is picked up.
The four names are the safe, isolated-test, approval-required and never-automate action matrix. What follows is what each tray will hold and, more importantly, what it refuses to hold.
| Category | What may go in it | What it never permits |
|---|---|---|
| Safe | Offline read-only pinned sources, or stubs that do not access the execution environment at all | Starting daemons, touching endpoints or devices, sending KNX telegrams. Viewing a live or running environment is never in this class |
| Isolated test | A proposal that has clear written approval, a non-production test environment, administrator presence, limited network exposure, and a proven stop-and-recovery plan. Physical bus-isolation testing is limited to separately approved exercises that genuinely require it | Proceeding with any one condition missing. For lifecycle-only exercises, all KNX interfaces, USB and device mappings, physical buses, production KNX networks, ETS projects and physical loads must remain disconnected |
| Approval required | Any proposal to review or change the running environment, once it has clear written approval, a limited maintenance scope, and data identification handling. Read-only viewing of a live environment sits here | Transmitting KNX telegrams, performing ETS actions, physical control. Approval does not make read-only viewing automatically safe |
| Never automate | Nothing. This tray is where actions go to be removed from the proposal | Group reading, group writing, telegram transmission, ETS programming or downloads, connecting to a KNX interface or bus, collecting or publishing environment identification data, and physical control — under any circumstances, and the test bus is no exception |
Two rules make the matrix work, and both of them are about how you cut up the proposal before you start sorting. Classification considers atomic actions, not proposal titles. And when a proposal contains several actions, it is split, and the strictest category among them is the one that governs.
flowchart TD
A["One atomic action from the proposal"] --> B{"Group read or write, telegram,
ETS programming or download,
bus connection, physical control?"}
B -->|"yes"| NA["NEVER AUTOMATE
Remove it. No gate reopens this"]
B -->|"no"| C{"Does it touch the live or running
environment, read-only included?"}
C -->|"yes"| AR["APPROVAL REQUIRED
Written approval, limited
scope, de-identification"]
C -->|"no"| D{"Does it start, install, add a
repository, or reach the
execution environment?"}
D -->|"yes"| IT["ISOLATED TEST candidate
Check every gate first"]
D -->|"no"| SF["SAFE
Offline read-only pinned sources,
or a stub with no side effects"]
The classification ticket, and the five gates it has to check
The ticket is completely offline. It carries seven fields, and any field you cannot answer gets the same entry:
Unknown and StopA job sheet that says “check the lighting circuit” tells you nothing about whether somebody is going to open a live panel. The title is the part everyone agrees on and the part that hides the risk. Breaking it into the actions it is really made of — look at the drawing, isolate, open the cover, test, close up — is what turns one comfortable sentence into five decisions, four of which are fine and one of which needs a second person present.
| Ticket field | What goes in it |
|---|---|
| Goals and non-goals | One sentence on what you want to answer, and a statement of which systems you will not touch |
| Atomic actions | One action per column: an offline read, a live or running environment view, a change, or a transfer. The two kinds of reading are not to be blurred together as safe |
| Environment category | Offline, isolated-test candidate, or running environment. No identifying information |
| Approval evidence | The approving role, the scope, and the validity policy. Verbal consent does not count |
| Isolation evidence | Physical isolation, non-production equipment, and physical loads disconnected from the production environment |
| Stop and recovery | Trigger conditions, baselines, responsible roles, and escalation methods — recorded first, not afterwards |
| Evidence limit | What may be said at most once the work is complete, and what must not be said |
The seven steps
-
Step 1
Write down the smallest question
Strip out every sentence that presets a live-environment outcome. What is left should be a question you want reviewed, not a result you are expecting to confirm.
-
Step 2
Break it into atomic actions
Separate reading, viewing, changing, starting and sending. If an action is not clearly one of those, stop rather than guess — an action you cannot name is an action you cannot classify.
-
Step 3
Identify the never-automate actions first
Group reading and writing, telegram transmission, ETS programming or downloads, and physical control are not allowed. Wherever any of these appear, mark them never automate and remove them. Doing this first means the rest of the sort happens on a proposal that no longer contains them.
-
Step 4
Classify the approval-required actions
Every view of, or change to, the live or running environment is marked approval required, and read-only viewing is no exception. Without clear written approval, a limited scope and de-identification, this is a stop.
-
Step 5
Check the isolated-test gate, item by item
Verify written approval, a non-production test environment, administrator presence, limited network exposure, and a proven stop-and-recovery plan — each one separately. For a lifecycle-only exercise, record that all KNX interfaces, device mappings, physical buses, production networks, ETS projects and physical loads remain disconnected. Adding a repository, installing, or starting software also requires approved immutable provenance.
-
Step 6
Confirm the safe class
Only offline read-only pinned sources, or placeholder work that never accesses the execution environment and has no side effects, may be marked safe. Anything that got into this tray by elimination rather than by qualifying goes back.
-
Step 7
Seal the ticket
Note the reasons for stopping, the evidence limit, and the items still pending. Mark the whole ticket
not yet executed, because that is what it is.
flowchart TD G1["Clear written approval"] --> G2["Non-production test environment"] G2 --> G3["Administrator present"] G3 --> G4["Limited network exposure"] G4 --> G5["Proven stop and recovery plan"] G5 --> OK["Isolated-test candidate,
still not executed"] G1 -.-> X["Any one missing:
do not proceed.
Stop on paper"] G2 -.-> X G3 -.-> X G4 -.-> X G5 -.-> X
What a signed page proves, and exactly where it stops
Evidence has limits, and the limits are narrower than they feel when you are holding a folder of it. The document only proves the content of the document. The approval only proves the scope of the approval. The isolation plan only proves the preparation conditions.
flowchart TD D["The document"] --> DP["proves the content
of the document"] A["The approval"] --> AP["proves the scope
of the approval"] I["The isolation plan"] --> IP["proves the preparation
conditions"] DP --> N["None of the three proves a result for the daemon,
the listener, the KNX bus, the ETS project
or the Home Assistant integration"] AP --> N IP --> N
Completion check for the ticket
A valid classification ticket stops an unsafe action before it is executed. That is the test of it, and it is a test the ticket can pass while containing nothing interesting at all.
- It contains no commands, no test programs, and no execution results.
- Each atomic action carries exactly one of the four labels, and where two applied, the stricter one was taken.
- Every safe-class item is an offline read-only pinned source, or placeholder work that does not access the execution environment at all and has no side effects.
- Every isolated-test candidate shows explicit approval, a non-production environment, administrator presence, limited network exposure, disconnection conditions, stop conditions and recovery gates — all visible on the ticket.
- Every approval-required item has clear written approval, a limited scope, and de-identification requirements, and read-only viewing of a live or running environment is listed in that category.
- Every never-automate item has been removed, with no directives and no alternative testing methods left behind in its place.
- All environment, bus, ETS and Home Assistant integration results remain unproven, and the ticket says so.
The ways both exercises drift, and how to pull them back
On the cards
| What you notice | What you do |
|---|---|
| A label has started to resemble a live field name | Change it to a general use, removing family, space, equipment and people clues |
| Somebody is inferring the data meaning from a name | Replace the inference with pending source confirmation. A name is not evidence of a type |
| A value, mapping or direction has appeared in the field-role section | Remove it immediately, leaving only the entity, device identity or shared communication topic category |
| The card is starting to look ready to import | Remove the setting shape and the field order, and add the mark that says it cannot be executed |
| Somebody asks for a service call or a control example | Refuse. This chapter deals only with the offline model |
| A screen status is being treated as bus evidence | Limit the conclusion to a software observation. This chapter provides no live-environment results |
On the ticket
| What you notice | What you do |
|---|---|
| A column behaves like two categories at once | Break it into smaller actions, and apply the stricter category first |
| The approval is verbal only | It counts as not approved. The item remains stopped |
| The isolation is logical only | That is not isolation testing. The canonical isolation gate applies, and for a lifecycle drill all KNX interfaces, device mappings, physical buses, production networks, ETS projects and loads must be disconnected |
| There is no restoration baseline | Do not enter any change candidates. Complete the plan on paper first |
| Provenance for adding or installing is missing | Stop. Do not add the repository, do not install, do not start |
| Somebody suggests doing a prohibited action by hand instead | Refuse. Changing the tool does not change the safety classification |
| Test results are appearing on the ticket | Remove the results. This is pre-execution classification only |
Questions that come up on both exercises
Is the semantic object the field device?
Are an entity, an individual address and a group address interchangeable?
Can I put a fictitious address on the card to make the idea clearer?
Can you demonstrate the payload or the service call?
Does a completed card mean the entity has evidence of execution?
Does approval move a never-automate action into the approval-required class?
Does using non-production equipment count as isolation testing?
Can the safe class include starting a daemon, or viewing a running environment?
Does completing the classification mean the work can start?
Can I run it first and write the stop-condition plan afterwards?
Will this part produce any testing evidence?
Where to go from here
Everything is classified. Nothing has been executed.
That closes the ETS and Home Assistant stretch. Part 7 opens the last one: Chapter 17 draws the paper boundaries around backup and restore, and Chapter 18 sets the security baseline. Both of them assume the ticket you have just sealed, and neither of them reopens the fourth tray.
Open the full guidePart 6 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