🏷️Enums, Aliase und Historie
Drei Werkzeuge, die aus einem Haufen Datenpunkte ein benutzbares Smart Home machen: Räume und Funktionen zum Gruppieren, Aliase als stabile Namen und Verläufe für Diagramme.
🧮Enums: Räume × Funktionen
| Raum \ Funktion | ||||||
|---|---|---|---|---|---|---|
Zahl = Datenpunkte in dieser Kombination. Zeile/Spalte anklicken filtert nur nach Raum bzw. Funktion (nochmals klicken hebt auf).
$('state(rooms=Wohnzimmer)(functions=Licht)').each((id) => log(id));
// 3 Treffer- Deckenlampe Wohnzimmershelly.0.shellyplus1#0a1b2c3d4e01#1.Relay0.Switch
- Stehlampe an/auszigbee.0.00158d0000000a01.state
- Stehlampe Helligkeitzigbee.0.00158d0000000a01.brightness
{"_id": "enum.rooms.wohnzimmer","type": "enum","common": {"name": "Wohnzimmer","members": ["shelly.0.shellyplus1#0a1b2c3d4e01#1","zigbee.0.00158d0000000a01","hm-rpc.0.MUSTER0001.1"]},"native": {}}
Mitglieder dürfen Geräte, Kanäle oder einzelne States sein. Ein Gerät als Mitglied nimmt alle seine States mit.
🔗Aliase (alias.0)
↔️ Umrechnung über min/max
Ziel zigbee.0…brightness hat 0–100 %, der Alias 0–255. ioBroker rechnet linear um.
Beispiel aus der Doku: Ziel 0–255, Alias 0–100 → Lesen von 10 ergibt 3,92…, Schreiben von 10 ergibt 25,5 (als Test hinterlegt).
🧮 Eigene Formel: °C → °F
common.alias.read enthält einen Ausdruck mit val.
{"_id": "alias.0.Bad.Temperatur","type": "state","common": {"alias": {"id": "zigbee.0.00158d0000000b01.temperature","read": "val * 9 / 5 + 32"},"unit": "°F","role": "value.temperature"}}
🔁 Warum überhaupt Aliase?
- ▸ Gerätetausch: Neues Thermostat = neue Seriennummer = neue ID. Zeigt der Alias auf das neue Gerät, laufen Skripte und Oberflächen weiter.
- ▸ Einheitliche Struktur:
alias.0.Wohnzimmer.Lichtstattshelly.0.shellyplus1#…#1.Relay0.Switch. - ▸ Beide Richtungen: Lesen spiegelt das Ziel, Schreiben leitet an das Ziel weiter. Auch Trigger auf den Alias verhalten sich wie auf das Original.
- ▸
nativeist bei Aliasen immer leer – alles steht incommon. Getrennte IDs für Lesen/Schreiben sind möglich (alias.id.read/.write).
📈Historie: history, sql, influxdb
Erfundene Beispielkurven für 23.09. 18:00 bis 24.09. 18:00 Uhr (alle 5 Minuten ein Rohwert). Punkte werden gezeichnet, sobald nur noch wenige gespeichert sind. Mit „nur Änderungen“ bleibt z. B. von der Solltemperatur nur 21 → 17 → 21 übrig; die Linie gilt bis zur nächsten Änderung weiter.
// Ausschnitt aus dem Objekt des Datenpunkts
"common": {
"name": "Isttemperatur Wohnzimmer",
"custom": {
"history.0": {
"enabled": true,
"changesOnly": true, // nur bei Wertänderung speichern
"debounceTime": 0, // Entprellen in ms
"retention": 31536000 // Vorhaltezeit in s (365 Tage)
}
}
}// Verlauf im Skript abfragen (JavaScript-Adapter)
sendTo('history.0', 'getHistory', {
id: 'hm-rpc.0.MUSTER0001.1.ACTUAL_TEMPERATURE',
options: {
start: Date.now() - 24 * 3600 * 1000,
end: Date.now(),
aggregate: 'average', // oder 'min', 'max', 'minmax', 'none' …
step: 3600 * 1000 // Stundenwerte
}
}, (result) => log(JSON.stringify(result.result)));