🌳Objektbaum und Datenpunkte
Alles in ioBroker ist ein Objekt mit einer ID – Hosts, Instanzen, Geräte, Räume. Die Werte selbst stehen getrennt davon als States. Hier ist der komplette Baum des erfundenen Musterhauses: aufklappen, anklicken, Objekt und State ansehen.
🔬Eine ID zerlegen
Erlaubt sind Buchstaben (auch Umlaute), Ziffern sowie . _ - / : ! # $ % & ( ) + = @ ^ { } | ~ und Leerzeichen – so steht es in FORBIDDEN_CHARS im js-controller. Die Ebenen-Namen (Gerät/Kanal/Datenpunkt) sind eine Konvention, die sich aus der Tiefe ergibt – die Adapter legen sie fest.
🌲Interaktiver Objektbaum
hm-rpc.0.MUSTER0001.1.SET_POINT_TEMPERATURE
Solltemperatur Wohnzimmer
{"_id": "hm-rpc.0.MUSTER0001.1.SET_POINT_TEMPERATURE","type": "state","common": {"name": "Solltemperatur Wohnzimmer","role": "level.temperature","type": "number","read": true,"write": true,"unit": "°C","min": 4.5,"max": 30.5,"step": 0.5,"custom": {"history.0": {"enabled": true,"changesOnly": false,"debounceTime": 0,"retention": 31536000}}},"native": {"CONTROL": "HEATING_CONTROL.SETPOINT"}}
{"val": 21,"ack": true,"from": "system.adapter.hm-rpc.0","q": 0,"ts": 1790264441000,"lc": 1790264441000}
- val
- 21 °C
- ack
- bestätigt – so ist es wirklich
- ts
- 24.09.2026 17:40:41 – letzte Aktualisierung
- lc
- 24.09.2026 17:40:41 – letzte Wertänderung
- from
- system.adapter.hm-rpc.0
- q
- 0x00 – gut
🧱Objekttypen und Pflichtfelder
| type | Bedeutung | Beispiel im Musterhaus |
|---|---|---|
| 🖥️ host | Rechner mit laufendem js-controller | system.host.iobroker-musterhaus |
| 🧩 adapter | installierter Adapter (Standardkonfiguration); Elternteil jeder Instanz | system.adapter.hm-rpc |
| ⚙️ instance | konfigurierte Instanz eines Adapters | system.adapter.hm-rpc.0 |
| 📟 device | Gerät – gruppiert Kanäle oder States; direkt unter dem Instanz-Namensraum | hm-rpc.0.MUSTER0001 |
| 🔀 channel | Kanal – gruppiert States, Elternteil sollte ein Gerät sein | hm-rpc.0.MUSTER0001.1 |
| 🔹 state | Datenpunkt – zu jedem State gehört genau ein Objekt dieses Typs | hm-rpc.0.MUSTER0001.1.SET_POINT_TEMPERATURE |
| 🏷️ enum | Aufzählung mit common.members (Räume, Funktionen …) | enum.rooms.wohnzimmer |
| 🗂️ meta | selten veränderliche Metadaten, z. B. Dateiordner | 0_userdata.0 |
| 📁 folder | Ordner für beliebige Dinge | alias.0.Wohnzimmer |
Weitere Typen laut Schema: config, script, user, group, chart, schedule, design.
{
"_id": "hm-rpc.0.MUSTER0001.1.SET_POINT_TEMPERATURE",
"type": "state",
"common": { // ioBroker-Sicht: gleich für alle Adapter
"name": "Solltemperatur Wohnzimmer",
"role": "level.temperature",
"type": "number", "unit": "°C",
"read": true, "write": true,
"min": 4.5, "max": 30.5
},
"native": { // Sicht des Geräts: frei je Adapter
"CONTROL": "HEATING_CONTROL.SETPOINT"
}
}_id, type, common, native; bei States außerdem common.role, read, write.🎭Rollen: was ist dieser Datenpunkt?
| role | common.type | Bedeutung | im Musterhaus |
|---|---|---|---|
| switch | boolean | Schalter an/aus (lesen + schreiben) | Deckenlampe Wohnzimmer |
| level.dimmer | number | Helligkeit einstellen, meist 0–100 % | Stehlampe Helligkeit |
| level.temperature | number | Solltemperatur einstellen | SET_POINT_TEMPERATURE |
| level.volume | number | Lautstärke (min 0, max 100) | Sonos Küche |
| value.temperature | number | gemessene Temperatur (°C, °F oder K) | ACTUAL_TEMPERATURE |
| value.humidity | number | relative Luftfeuchte in % | Klimasensor Bad |
| value.power | number | Leistung in W oder kW | Kaffeemaschine Power |
| value.brightness | number | Helligkeit in lux | ILLUMINATION |
| value.valve | number | Ventilstellung | LEVEL am Thermostat |
| sensor.window | boolean | Fenster offen = true, geschlossen = false | Fensterkontakt Bad |
| sensor.motion | boolean | Bewegungsmelder | MOTION im Flur |
| media.state | boolean/string/number | Wiedergabezustand | state_simple |
| indicator.connected | boolean | nur für Instanzen: verbunden? | hm-rpc.0.info.connection |
| text | string | beliebiger Text | 0_userdata.0.Benachrichtigung |
⏱️State-Aufbau: val, ack, ts, lc, from, q
Beobachte: ts springt bei jedem Schreiben, lc nur, wenn sich val ändert. Die Bestätigung mit ack: true ändert den Wert nicht – also bleibt lc stehen.
| # | Aufruf | val | ack | ts | lc | from |
|---|---|---|---|---|---|---|
| 0 | Ausgangslage | false | true | 18:00:00 | 18:00:00 | shelly.0 |
← Links Aktionen ausführen, hier entsteht das Protokoll.
Attribute
| val | der eigentliche Wert – alles, was sich als JSON darstellen lässt |
| ack | false = Befehl, true = vom Zielsystem bestätigt (Standard beim Schreiben: false) |
| ts | Zeitstempel der letzten Aktualisierung in ms (UNIX-Zeit) |
| lc | Zeitstempel der letzten WERTänderung in ms |
| from | Instanz, die geschrieben hat, z. B. system.adapter.shelly.0 |
| q | Qualität, 0 = gut (siehe rechts) |
| user | Benutzer, der den Wert gesetzt hat |
| c | optionaler Kommentar zur Änderung |
| expire | Wert verfällt nach n Sekunden (nur beim Schreiben) |
Qualitätscodes (q)
| 0x00 | 00000000 | gut |
| 0x01 | 00000001 | allgemein schlecht, allgemeines Problem |
| 0x02 | 00000010 | keine Verbindung |
| 0x10 | 00010000 | Ersatzwert vom Controller |
| 0x11 | 00010001 | allgemeines Problem der Instanz |
| 0x12 | 00010010 | Instanz nicht verbunden |
| 0x20 | 00100000 | Ersatz-Startwert |
| 0x40 | 01000000 | Ersatzwert vom Gerät oder der Instanz |
| 0x41 | 01000001 | allgemeines Problem des Geräts |
| 0x42 | 01000010 | Gerät nicht verbunden |
| 0x44 | 01000100 | Gerät meldet Fehler |
| 0x80 | 10000000 | Ersatzwert vom Sensor |
| 0x81 | 10000001 | allgemeines Problem des Sensors |
| 0x82 | 10000010 | Sensor nicht verbunden |
| 0x84 | 10000100 | Sensor meldet Fehler |
Wichtig für Skripte: Ein Trigger ohne q-Filter reagiert nur auf q = 0. Mit q: '*' auf alles.