openHAB und TRÅDFRI V2.0

Posted by on Jul 2, 2021 in Smart Home | No Comments
openHAB und TRÅDFRI V2.0

Nachdem ich hier schon seit einer Ewigkeit nichts mehr geschrieben habe, soll es heute nochmal um das Thema TRÅDFRI gehen.
Wie schon in den Kommentaren des letzten Artikels zu diesem Thema erwähnt, war die Lebensdauer der TRÅDFRI-Birnen nur äußerst kurz. Ich habe aus diesem Grund auch keine mehr gekauft. Stattdessen soll es hier um meine Küchenbeleuchtung von IKEA gehen.

Diese besteht aus einer TRÅDFRI Fernbedienung, zwei TRÅDFRI Treibern für Fernbedienung (30W und 10W) und mehreren NORRFLY Lichtleisten.

Die letzten Jahre habe ich diese Beleuchtung separat von meiner Smarthome-Installation betrieben, was daran lag, dass man die Treiber nur mit der Fernbedienung oder meinem HUE-Hub verbinden konnte. Beides gleichzeitig ging nicht.
Ich wollte die Lichtleisten aber sowohl mit openHAB, also der App oder Snips, als auch mit der Fernbedienung steuern. Außerdem wollte ich die Taster der „<“ und „>“ noch für andere Dinge nutzen.

Die Lösung des Problems war für mich ZigBee2MQTT. Damit ist es möglich, ZigBee-Komponenten via MQTT zu steuern bzw. Status und Signale von diesen, via MQTT zu erhalten.
Eine genaue Erläuterung, wie man ZigBee2MQTT einrichtet, findet man auf der Projektseite. Ich möchte das an dieser Stelle auch gar nicht wiederholen, denn das Projekt ist in aktiver Entwicklung und die Anleitung und die Empfehlungen für die Hardware ändern sich von Zeit zu Zeit.
Wurde zur Zeit der Umsetzung des Projektes noch einen Texas Instruments CC2531 empfohlen, ist es heute ein Electrolama zig-a-zig-ah! (zzh!).
Da der CC2531 aber direkt auf dem Küchenschrank liegt, spielt die schlechtere Leistung/Reichweite in meinem Fall keine Rolle.

Im openHAB habe ich dann einen Dimmer manuell hinzugefügt, mit dem ich die Lichtleisten mit folgender Regel steuern kann:

var logger = Java.type('org.slf4j.LoggerFactory').getLogger('org.openhab.rule.' + ctx.ruleUID + ' Küchenlicht');
var kuechenlichtState = itemRegistry.getItem('Kuechenlicht_Dimmer').getState();
var valueToSet = kuechenlichtState * 2.54;
actions.get('mqtt','mqtt:broker:0098be8a46').publishMQTT('zigbee2mqtt/KUECHE_1/set/brightness', valueToSet);
actions.get('mqtt','mqtt:broker:0098be8a46').publishMQTT('zigbee2mqtt/KUECHE_2/set/brightness', valueToSet);

Die Multiplikation des Dimmerstatus mit 2,54 ist in diesem Fall nötig, da die Helligkeit der Lichtleisten mit Werten zwischen 0 und 254 angegeben wird.
Die Regel für den IKEA-Button sieht dann folgendermaßen aus:

var logger = Java.type('org.slf4j.LoggerFactory').getLogger('org.openhab.rule.' + ctx.ruleUID + ' IKEA Button ON/OFF');
var jsonStateKuechenlicht = itemRegistry.getItem('Zigbee2Mqtt_Kuchenlicht1').getState();
var jsonStateIkeaButton = itemRegistry.getItem('Zigbee2Mqtt_IKEAButton').getState();


var parsedJsonObjectKuechenlicht = JSON.parse(jsonStateKuechenlicht);
var parsedJsonObjectIkeaButton = JSON.parse(jsonStateIkeaButton);

var stateKuechenlicht = parsedJsonObjectKuechenlicht.state;
var brightnessKuechenlicht = parsedJsonObjectKuechenlicht.brightness;
var action = parsedJsonObjectIkeaButton.action;

if(action === 'toggle'){
  if(stateKuechenlicht === 'ON'){
    actions.get('mqtt','mqtt:broker:0098be8a46').publishMQTT('zigbee2mqtt/KUECHE_1/set/state', 'OFF');
    actions.get('mqtt','mqtt:broker:0098be8a46').publishMQTT('zigbee2mqtt/KUECHE_2/set/state', 'OFF');
  }
  if(stateKuechenlicht === 'OFF'){
    actions.get('mqtt','mqtt:broker:0098be8a46').publishMQTT('zigbee2mqtt/KUECHE_1/set/brightness', '254');
    actions.get('mqtt','mqtt:broker:0098be8a46').publishMQTT('zigbee2mqtt/KUECHE_2/set/brightness', '254');
    actions.get('mqtt','mqtt:broker:0098be8a46').publishMQTT('zigbee2mqtt/KUECHE_1/set/state', 'ON');
    actions.get('mqtt','mqtt:broker:0098be8a46').publishMQTT('zigbee2mqtt/KUECHE_2/set/state', 'ON');
  }
}
if(action === 'brightness_down_click'){
  events.sendCommand('Flurlicht', 'OFF');
}
if(action === 'brightness_up_click'){
  events.sendCommand('Flurlicht', 'ON');
}
if(action === 'arrow_left_click'){
  logger.info(brightnessKuechenlicht)
  // do something
}
if(action === 'arrow_right_click'){
  // do something
  
}

Kommentar hinterlassen

*