🌳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

Die Hierarchie steckt allein in den Punkten: adapter.instanz.gerät.kanal.datenpunkt. Eigene Werte oder Beispiele eintippen.
hm-rpcAdapter
.
0Instanz
.
MUSTER0001Gerät
.
1Kanal
.
SET_POINT_TEMPERATUREDatenpunkt
Namensraum
instance-namespace
Adapter / Instanz
hm-rpc · Instanz 0
Ebenen
5
Länge
43 von 240 Byte
✅ Gültige ID nach den Regeln des js-controllers.

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

So ähnlich sieht der Tab „Objekte“ im Admin aus. Farbige Werte rechts: grün = bestätigt (ack: true), orange = Befehl (ack: false).
▶📂0_userdata
▶📂alias
▶📂enum
▼📂hm-rpc
▼📂0
▶📂info
▼📟MUSTER0001Heizkörperthermostat Wohnzimmer
▼🔀1Heizkörperthermostat Wohnzimmer:1
🔹ACTUAL_TEMPERATURE20,6 °C
🔹LEVEL18 %
🔹SET_POINT_TEMPERATURE21 °C
▶📟MUSTER0002Fensterkontakt Bad
▶📟MUSTER0003Bewegungsmelder Flur
▶📟MUSTER0004Heizkörperthermostat Bad
▶📂shelly
▶📂sonos
▶📂system
▶📂zigbee
🖥️ host🧩 adapter⚙️ instance📟 device🔀 channel🔹 state🏷️ enum🗂️ meta📁 folder📂 nur Pfad (kein Objekt)
staterole: level.temperature🏷️ Raum: Wohnzimmer🏷️ Funktion: Heizung

hm-rpc.0.MUSTER0001.1.SET_POINT_TEMPERATURE

Solltemperatur Wohnzimmer

hm-rpc Adapter0 InstanzMUSTER0001 Gerät1 KanalSET_POINT_TEMPERATURE Datenpunkt
Objekt (Objects-DB)
common = ioBroker-Sicht · native = Sicht des Geräts
{
"_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"
}
}
State (States-DB)
✔ ack: true
{
"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

typeBedeutungBeispiel im Musterhaus
🖥️ hostRechner mit laufendem js-controllersystem.host.iobroker-musterhaus
🧩 adapterinstallierter Adapter (Standardkonfiguration); Elternteil jeder Instanzsystem.adapter.hm-rpc
⚙️ instancekonfigurierte Instanz eines Adapterssystem.adapter.hm-rpc.0
📟 deviceGerät – gruppiert Kanäle oder States; direkt unter dem Instanz-Namensraumhm-rpc.0.MUSTER0001
🔀 channelKanal – gruppiert States, Elternteil sollte ein Gerät seinhm-rpc.0.MUSTER0001.1
🔹 stateDatenpunkt – zu jedem State gehört genau ein Objekt dieses Typshm-rpc.0.MUSTER0001.1.SET_POINT_TEMPERATURE
🏷️ enumAufzählung mit common.members (Räume, Funktionen …)enum.rooms.wohnzimmer
🗂️ metaselten veränderliche Metadaten, z. B. Dateiordner0_userdata.0
📁 folderOrdner für beliebige Dingealias.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"
  }
}
💡 common vs. native
common ist standardisiert – Visualisierungen, Alexa & Co. lesen daraus Name, Rolle, Einheit, Min/Max. native gehört dem Adapter und spiegelt das Zielsystem wider (Seriennummer, IP, Gerätetyp …). Pflicht sind _id, type, common, native; bei States außerdem common.role, read, write.

🎭Rollen: was ist dieser Datenpunkt?

Die Rolle (common.role) sagt Oberflächen und Sprachassistenten, wie ein Datenpunkt zu behandeln ist – ein switch wird zum Schalter, level.temperature zum Thermostat-Regler.
rolecommon.typeBedeutungim Musterhaus
switchbooleanSchalter an/aus (lesen + schreiben)Deckenlampe Wohnzimmer
level.dimmernumberHelligkeit einstellen, meist 0–100 %Stehlampe Helligkeit
level.temperaturenumberSolltemperatur einstellenSET_POINT_TEMPERATURE
level.volumenumberLautstärke (min 0, max 100)Sonos Küche
value.temperaturenumbergemessene Temperatur (°C, °F oder K)ACTUAL_TEMPERATURE
value.humiditynumberrelative Luftfeuchte in %Klimasensor Bad
value.powernumberLeistung in W oder kWKaffeemaschine Power
value.brightnessnumberHelligkeit in luxILLUMINATION
value.valvenumberVentilstellungLEVEL am Thermostat
sensor.windowbooleanFenster offen = true, geschlossen = falseFensterkontakt Bad
sensor.motionbooleanBewegungsmelderMOTION im Flur
media.stateboolean/string/numberWiedergabezustandstate_simple
indicator.connectedbooleannur für Instanzen: verbunden?hm-rpc.0.info.connection
textstringbeliebiger Text0_userdata.0.Benachrichtigung

⏱️State-Aufbau: val, ack, ts, lc, from, q

Ein State ist klein: der Wert und ein paar Metadaten. Probiere aus, wann sich ts und lc ändern.
Datenpunkt
shelly.0.shellyplus1#0a1b2c3d4e01#1.Relay0.Switch
val
⚫ false
ack
✔ ack: true
ts – aktualisiert
18:00:00.000
lc – geändert
18:00:00.000

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.

#Aufrufvalacktslcfrom
0Ausgangslagefalsetrue18:00:0018:00:00shelly.0

← Links Aktionen ausführen, hier entsteht das Protokoll.

Attribute

valder eigentliche Wert – alles, was sich als JSON darstellen lässt
ackfalse = Befehl, true = vom Zielsystem bestätigt (Standard beim Schreiben: false)
tsZeitstempel der letzten Aktualisierung in ms (UNIX-Zeit)
lcZeitstempel der letzten WERTänderung in ms
fromInstanz, die geschrieben hat, z. B. system.adapter.shelly.0
qQualität, 0 = gut (siehe rechts)
userBenutzer, der den Wert gesetzt hat
coptionaler Kommentar zur Änderung
expireWert verfällt nach n Sekunden (nur beim Schreiben)

Qualitätscodes (q)

0x0000000000gut
0x0100000001allgemein schlecht, allgemeines Problem
0x0200000010keine Verbindung
0x1000010000Ersatzwert vom Controller
0x1100010001allgemeines Problem der Instanz
0x1200010010Instanz nicht verbunden
0x2000100000Ersatz-Startwert
0x4001000000Ersatzwert vom Gerät oder der Instanz
0x4101000001allgemeines Problem des Geräts
0x4201000010Gerät nicht verbunden
0x4401000100Gerät meldet Fehler
0x8010000000Ersatzwert vom Sensor
0x8110000001allgemeines Problem des Sensors
0x8210000010Sensor nicht verbunden
0x8410000100Sensor meldet Fehler

Wichtig für Skripte: Ein Trigger ohne q-Filter reagiert nur auf q = 0. Mit q: '*' auf alles.