I use it with a Tasmota Light but with a bit of code changeing you can use it with everything u need
More infos for Enocean
Enocean Gateway on Github
// Update the timers to the context store
let timers = context.get('timers') || {};
let intervals = context.get('intervals') || {};
let buttons = context.get('buttons') || {};
let light = flow.get('Licht') || {};
let status = msg.payload.telegram.zustand;
let button = msg.payload.telegram.schalter;
dim_speed=250; // dimmgeschwindikeit 1-1000(1000 = 1s)
color_speed=500;//
if (button === "A0" || button === "B0" ){
UP(button, status, dim_speed, color_speed);
}
else if (button === "AI" || button === "BI" ){
DOWN(button, status, dim_speed, color_speed);
}
else {
}
// ****** Output Button A0 or B0 ****** \\
function UP(button, status, dim_speed, color_speed){
if (status === "pressed" ){
timers[button] = setTimeout(dimmerup, 1000);
context.set('timers',timers);
buttons[button] = false;
context.set('buttons', buttons);
}else if (status === "released"){
if ( timers[button] ) {
clearTimeout(timers[button])
delete timers[button]
if ( intervals[button] ) {
clearInterval(intervals[button]);
delete intervals[button];
}
if (buttons[button] === false ){
flow.set("prio",10);
node.send({topic:"Küche/Licht/cmnd/Panel_Kueche/POWER1", payload:true});
}
}
}
function dimmerup() {
if(light === true){
buttons[button] = true;
context.set('buttons', buttons);
counter_A0 = flow.get("dim");
counter_B0 = flow.get("color");
flow.set("prio",100);
if (button === "A0") {
intervals[button] = setInterval(function(){
counter_A0 +=10;
if (counter_A0 > 100) {
clearInterval(intervals[button]);
delete intervals[button];
}else{
node.send({topic:"Küche/Licht/cmnd/Panel_Kueche/Dimmer",payload: counter_A0},false);
}
}, dim_speed);
context.set('intervals',intervals);
}
if (button === "B0") {
intervals[button] = setInterval(function(){
counter_B0 += 36;
if (counter_B0 > 500) {
clearInterval(intervals[button]);
delete intervals[button];
node.send({topic:"Küche/Licht/cmnd/Panel_Kueche/CT",payload: 500},false);
}else{
node.send({topic:"Küche/Licht/cmnd/Panel_Kueche/CT",payload: counter_B0},false);
}
}, color_speed);
context.set('intervals',intervals);
}
}else{
return;
}
}
}
// ****** Output Button AI or BI ****** \\
function DOWN(button, status, dim_speed, color_speed){
if (status === "pressed" ){
timers[button] = setTimeout(dimmerdown, 1000);
context.set('timers',timers);
buttons[button] = false;
context.set('buttons', buttons);
}else if (status === "released"){
if ( timers[button] ) {
clearTimeout(timers[button])
delete timers[button]
if ( intervals[button] ) {
clearInterval(intervals[button]);
delete intervals[button];
}
if (buttons[button] === false ){
flow.set("prio",10);
node.send({topic:"Küche/Licht/cmnd/Panel_Kueche/POWER1", payload:false});
}
}
}
function dimmerdown() {
if(light === true){
buttons[button] = true;
context.set('buttons', buttons);
counter_AI = flow.get("dim");
counter_BI = flow.get("color");
flow.set("prio",100);
if (button === "AI") {
intervals[button] = setInterval(function(){
counter_AI -=10;
if (counter_AI < 10) {
clearInterval(intervals[button]);
delete intervals[button];
}else{
node.send({topic:"Küche/Licht/cmnd/Panel_Kueche/Dimmer",payload: counter_AI},false);
}
}, dim_speed);
context.set('intervals',intervals);
}
if (button === "BI") {
intervals[button] = setInterval(function(){
counter_BI -= 36;
if (counter_BI < 153) {
clearInterval(intervals[button]);
delete intervals[button];
node.send({topic:"Küche/Licht/cmnd/Panel_Kueche/CT",payload: 153},false);
}else{
node.send({topic:"Küche/Licht/cmnd/Panel_Kueche/CT",payload: counter_BI},false);
}
}, color_speed);
context.set('intervals',intervals);
}
}else{
return;
}
}
}
return;